Как выполнить минимальную установку Linux вручную?

Попытка поместить сложные команды в простую переменную обречена на неудачу. Подробнее см. Я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу! .

По всей вероятности,то, что вы пытаетесь сделать, лучше выполнить с помощью функции bash .

Если вы действительно хотите использовать переменную, используйте массив bash:

command=(some_command --query " 'val' is not null ")
"${command[@]}"

Мы можем увидеть фактическое значение массива command, используяdeclare:

$ declare -p command
declare -a command=([0]="some_command" [1]="--query" [2]=" 'val' is not null ")

Мы видим, что это сохраняет одинарные кавычки вокруг val.

Пример

$ command=(echo -E " 'val' is not null ")
$ "${command[@]}"
 'val' is not null 

-1
11.04.2020, 03:27
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/после создания точки монтирования (каталог ), например. "изображение/". Тогда вы получите:

]# 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и др.

image.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.

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 и login. Разделение также, но это (или должно быть логически )отделено от установки в любом случае. На самом деле я пропустил все, кроме /bin/bash.


Это способ избежать "классической вспомогательной установки" и сделать все с нуля, кроме компиляции.

Я взял gentoo в качестве примера только потому, что он был предложен. Файлы.iso, перечисленные вверху, очень похожи, за исключением размера. Вы можете извлечь двоичные файлы из любого из них, как показано ниже.

2
19.03.2021, 02:30

Теги

Похожие вопросы