如何手動進行Linux的最小安裝?

如何手動進行Linux的最小安裝?

我正在尋找有關如何手動安裝 Linux 的指南...
無需經典的輔助設定...
只需將檔案從來源複製到目標媒體...
並配置所需的最低設定。
(這是出於教育目的)

  1. 建立分割區並格式化目標磁碟機...
  2. 將檔案最小檔案從來源磁碟機複製到目標磁碟機(手動複製,逐一檔案)
  3. 建立所需的最少資料夾(/root /bin /etc ...)
  4. 建立最小設定檔(/etc/???)
  5. 選擇並安裝 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.使用xzcpio -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.cfgiso上有一個。

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 檔案非常相似,只是大小不同。您可以從其中任何一個中提取二進位文件,如圖所示。

相關內容