有 Arch Linux,想要 slack,必须保留两者;没有 cd,没有 usb 或钱;可以 chroot,预分区:GPT

有 Arch Linux,想要 slack,必须保留两者;没有 cd,没有 usb 或钱;可以 chroot,预分区:GPT

我有一台装有 Arch Linux 的笔记本电脑

[averagejoey2000@JoeyHobbyPCarchLinux arch-install-scripts]$ lsblk -l
NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda    8:0    0 596.2G  0 disk 
sda1   8:1    0    25G  0 part /
sda2   8:2    0     2M  0 part 
sda3   8:3    0   512M  0 part /boot
sda4   8:4    0     4G  0 part [SWAP]
sda5   8:5    0     4G  0 part [SWAP]
sda6   8:6    0 266.3G  0 part /home
sda7   8:7    0 296.3G  0 part 

我打算将 Slackware linux 安装到 /dev/sda7 及更高版本。我没有用于基于 iso 的安装的空白 DVD,dd if=usbboot.img of=/dev/sdb 会给我启动菜单,但我的电脑在安装进行之前就过热了。在另一台笔记本电脑上,它没有过热,而是等待了 3 个小时,而不是承诺的两分钟。我既没有钱也没有耐心订购并等待邮寄的 DVD,购买后就可以体验 slackware 的挑战。我希望能够

mkdir /mnt/slack
mount /dev/sda7 /mnt/slack
(can't remember the command) proc proc proc/
slackinst

但是如果可以这样做的话,我想先完成安装之前的部分。

TL;DR:有 Arch Linux,想要 slack,必须保留两者;没有 cd,没有 usb 或钱;可以 chroot,预分区:GPT

答案1

最简单的解决方案是使用 Grub2 从 iso 映像启动的功能,您可能已经拥有该映像,或者可以获得该映像。假设它被称为slack.iso, (所有命令均为须藤

 mkdir /boot/iso
 cp /path/to/your/slack.iso /boot/iso

现在编辑文件/etc/grub.d/40_custom并插入以下行:

 #!/bin/sh
 echo "Adding 40_custom." >&2
 exec tail -n +4 $0
 # This file provides an easy way to add custom menu entries.  Simply type the
 # menu entries you want to add after this comment.  Be careful not to change
 # the 'exec tail' line above.

 menuentry "Slackware ISO" {
    set isofile="/boot/iso/slack.iso"
    loopback loop (hd0,3)$isofile
    linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
    initrd (loop)/casper/initrd.lz
 }

现在保存,并更新 grub:

 update-grub

重新启动,选择新条目,您应该会看到实时 Slack 启动。

如果您现在想要安装,您必须记住,您无法安装到正在使用的磁盘,但是,由于您的实时映像已经加载到 RAM 中,因此无需担心:作为 sudo,

 umount -l /isodevice

然后您就可以开始安装了。只需确保选择正确的(即空的) 分区进行安装。

注意:如果你从 efi 启动,则需要替换Linux的在 40_custom 中输入以下内容:

  linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject

NB2:为了重申显而易见的事实,我还想指出,为了测试的目的,安装新操作系统最简单的方法是在虚拟机内进行安装。我看不出在同一台电脑上安装两台生产机器有什么用,因为它们不能同时运行。相反,虚拟机可以与主机操作系统同时运行,可以与主机操作系统共享整个磁盘,可以轻松擦除或重新定位到另一台电脑,等等。

答案2

你可以尝试这样的方法,但我不确定它是否适合你。它可能需要一些命令行技巧。

您需要做的第一件事是挂载 usbboot.img 文件:

$ mkdir /tmp/usbboot
$ sudo mount usbboot.img /tmp/usbboot

然后从中复制 initrd.img 并卸载:

$ cp /tmp/usbboot/initrd.img /tmp/
$ sudo umount /tmp/usbboot
$ rmdir /tmp/usbboot

现在 initrd 位于 /tmp 中。但它是什么?

$ cd /tmp
$ file initrd.img
initrd.img: gzip compressed data, from Unix, last modified: Fri Nov  1 01:07:44 2013, max compression

啊,它被 gzip 压缩了。将其重命名为 .gz 并解压:

$ mv initrd.img{,.gz}
$ gzip -d initrd.img.gz

现在它是什么?

$ file initrd.img
initrd.img: ASCII cpio archive (SVR4 with no CRC)

现在为 slackware 安装程序创建一个新目录,并使用 cpio 提取 initrd(您需要以 root 身份确保所有权限正确):

$ mkdir slackboot
$ cd slackboot
$ su
# cat ../initrd.img | cpio -i

笔记:cpio 会将其所有文件提取到当前目录,因此请确保在调用时位于要提取文件的目录中。它不会从 / 尝试提取。

您现在可以 chroot 并测试它:

# chroot .
# /usr/lib/setup/setup
Error opening terminal: xterm.

看来您需要一个真正的 tty/pty/whatever。因此请以 root 身份 (ctrl+alt+2) 登录到您的一个真正的 (非 X11) 终端。

# mount -o bind /dev /tmp/slackboot/dev
# mount -o bind /sys /tmp/slackboot/sys
# mount -o bind /proc /tmp/slackboot/proc
# chroot /tmp/slackboot
# /usr/lib/setup/setup

这将启动安装程序,然后您就可以开始了。不过,如果您的硬盘坏了,请不要怪我。

相关内容