我正在寻找有关如何手动安装 Linux 的指南...
无需经典的辅助设置...
只需将文件从源复制到目标媒体...
并配置所需的最低设置。
(这是出于教育目的)
- 创建分区并格式化目标驱动器...
- 将文件最小文件从源驱动器复制到目标驱动器(手动复制,逐个文件)
- 创建所需的最少文件夹(/root /bin /etc ...)
- 创建最小配置文件(/etc/???)
- 选择并安装 MBR 的引导加载程序...以及 GPT/EFI 的其他引导加载程序
任何现代发行版,例如 Arch/Alpine/Kali/UBUNTU-Minimal/...
?有人可以给我指点一些关于这个主题的文档/视频吗
谢谢
答案1
您可以从启动映像开始。这里有一些具有不同名称和大小的。
]# ls *.iso -dsh
607M OL-x86_64-boot-uek.iso
603M archlinux-2019.01.01-x86_64.iso
258M install-gentoo_minimal.iso
2.6G slackware64-14.2-install-dvd.iso
882M ubuntu-18.10-live-server-amd64.iso
这样的 ISO 映像可以循环安装,即使没有-o loop
(但mkdir MNTPOINT
首先有一个目录):
]# mount install-gentoo_minimal.iso iso
mount: /root/sda1/LINUX/iso: WARNING: device write-protected, mounted read-only.
]# ls iso
README.txt boot gentoo.efimg grub image.squashfs isolinux livecd
这些文件是必不可少的:
]# ls -lh iso/isolinux/gentoo* iso/gentoo.efimg iso/image.squashfs
-rw-r--r-- 1 root root 6.4M Jan 9 2019 iso/gentoo.efimg
-rw-r--r-- 1 root root 236M Jan 9 2019 iso/image.squashfs
-rw-r--r-- 1 root root 3.8M Jan 9 2019 iso/isolinux/gentoo
-rw-r--r-- 1 root root 5.1M Jan 9 2019 iso/isolinux/gentoo.igz
gentoo.efimg
再次强调:mount [-o loop] iso/gentoo.efimg img/
创建挂载点(dir)后,例如“img/”。然后你得到:
]# file img/EFI/BOOT/*
img/EFI/BOOT/BOOTIA32.EFI: PE32 executable (EFI application) Intel 80386 (stripped to external PDB), for MS Windows
img/EFI/BOOT/BOOTX64.EFI: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows
img/EFI/BOOT/grubia32.efi: PE32 executable (EFI application) Intel 80386 (stripped to external PDB), for MS Windows
img/EFI/BOOT/grubx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows
img/EFI/BOOT/mmia32.efi: PE32 executable (EFI application) Intel 80386 (stripped to external PDB), for MS Windows
img/EFI/BOOT/mmx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows
这些是 EFI 引导加载程序的不同变体。另一种方法是使用 Uefi Shell(或 MBR...)。但这里是BOOTX64.EFI
等人。
图像.squashfs
这是一个Squashfs filesystem
根据扩大和file
命令。因此,您可以像 ISO 映像一样(循环)安装它。
它包含根分区的文件。
]# ldd sq/bin/bash
linux-vdso.so.1 (0x00007fffe97ef000)
libreadline.so.7 => not found
libc.so.6 => /usr/lib/libc.so.6 (0x00007f0d4e221000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f0d4e6c5000)
]# ./sq/bin/bash
./sq/bin/bash: error while loading shared libraries: libreadline.so.7: cannot open shared object file: No such file or directory
这说明一个普通的/bin/bash也需要一些库、版本和链接。
iso/isolinux/gentoo
]# file iso/isolinux/gentoo
iso/isolinux/gentoo: Linux kernel x86 boot executable bzImage, version 4.14.83-gentoo (root@catalyst) #1 SMP Wed Jan 9 01:58:22 UTC 2019, RO-rootFS, swap_dev 0x3, Normal VGA
内核(bzImage)。使用 Uefi,您只需将其复制到 ESP 即可。否则(MBR)到某个目录,然后 grub-...,
iso/isolinux/gentoo.igz
压缩的 initrd.使用xz
和cpio -t
您可以列出:
]# xz -cd iso/isolinux/gentoo.igz | cpio -t lib/modu\*
lib/modules
lib/modules/4.14.83-gentoo
lib/modules/4.14.83-gentoo/modules.order
lib/modules/4.14.83-gentoo/modules.symbols
...
grub/grub.cfg
iso上有一个。
menuentry 'Boot LiveCD (kernel: gentoo)' --class gnu-linux --class os {
linux /isolinux/gentoo root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs loop=/image.squashfs
initrd /isolinux/gentoo.igz
将 bash 和四个库/依赖项(见ldd
上文)复制到格式化分区后sdXY
,您将获得以下 3 个启动参数:
gentoo
root=/dev/sdXY
init=/bin/bash
initrd=gentoo.igz
对于最小的实验,您的第 3)点和第 4)点(目录和配置文件)是次要的。如果它不是那么小,那么它相当于创建一个新的发行版......
主要困难在于引导过程本身,因为存在多种可能性,再加上 MBR 与 UEFI。我遗漏了 init/systemd 和登录。也可以进行分区,但无论如何,这(或应该,逻辑上)与安装分离。事实上,除了 /bin/bash 之外,我省略了所有内容。
这是一种避免“经典辅助设置”的方法,并且从头开始执行除编译之外的所有操作。
我以gentoo为例只是因为有人建议。顶部列出的 .iso 文件非常相似,只是大小不同。您可以从其中任何一个中提取二进制文件,如图所示。