Как настроить Xen с dom 0 Alpine Linux, LUKS LVM и GRUB на платформе UEFI?

679
Marco Boom

Я хотел бы иметь следующую настройку: система в режиме UEFI с жестким диском с разделами GPT. Диск должен содержать (незашифрованный) системный раздел EFI, зашифрованный загрузочный раздел и зашифрованный раздел lvm. GRUB должен быть загрузчиком, а поверх него я хочу ядро ​​Xen и Alpine Linux как dom 0.

Чтобы установить Alpine Linux без Xen, я скачал ISO-образ и записал его на USB-накопитель с Rufus (GPT, iso mode). Затем я загружаюсь с USB-накопителя в режиме UEFI и могу успешно установить Alpine.

Чтобы установить Alpine Linux с настроенными разделами, я запускаю следующие команды:

Настройка Alpine Linux:

setup-keymap us us-intl setup-hostname -n localhost hostname=$(cat $ROOT/etc/hostname 2>/dev/null) setup-interfaces -i <<EOF auto lo iface lo inet loopback  auto eth0 iface eth0 inet dhcp hostname $hostname  auto eth1 iface eth1 inet dhcp hostname $hostname EOF /etc/init.d/networking --quiet start >/dev/null passwd setup-timezone -z Europe/Amsterdam setup-proxy none setup-apkrepos -f setup-sshd -c none setup-ntp -c chrony 

Установить инструменты:

apk update apk add cryptsetup e2fsprogs grub-efi haveged lvm2 parted rc-service haveged start # optionally: only needed to wipe disks 

Создание разделов диска:

parted --script /dev/sda mklabel gpt parted --script --align=optimal /dev/sda mkpart fat32 0% 538MB parted --script /dev/sda set 1 esp on parted --script --align=optimal /dev/sda mkpart non-fs 538MB 748MB parted --script --align=optimal /dev/sda mkpart non-fs 748MB 100% parted --script /dev/sda set 3 LVM on  # optionally: wiping disks, but this takes too much time for test setups haveged -n 0 | dd of=/dev/sda1 haveged -n 0 | dd of=/dev/sda2 haveged -n 0 | dd of=/dev/sda3 

Создание файловых систем:

mkfs.vfat /dev/sda1 # fat32 for ESP  cryptsetup luksFormat --type luks /dev/sda2 cryptsetup open --type luks /dev/sda2 bootcrypt mkfs.ext4 /dev/mapper/bootcrypt # encrypted boot partition with ext4  cryptsetup luksFormat --type luks2 /dev/sda3 cryptsetup open --type luks2 /dev/sda3 lvmcrypt pvcreate /dev/mapper/lvmcrypt # encrypted lvm partition vgcreate vg0 /dev/mapper/lvmcrypt lvcreate -L 512M vg0 -n swap lvcreate -l 100%FREE vg0 -n root lvscan # check lvm partitions mkfs.ext4 /dev/vg0/root # ext4 on lvm root partition (alias /dev/mapper/vg0-root) mkswap /dev/vg0/swap # swap lvm partition (alias /dev/mapper/vg0-swap) 

Создание монтирований и папок, установка Alpine Linux:

mount -t ext4 /dev/vg0/root /mnt/ mkdir -p /mnt/boot/ mount -t ext4 /dev/mapper/bootcrypt /mnt/boot/ mkdir -p /mnt/boot/efi/ mount -t vfat /dev/sda1 /mnt/boot/efi/ USE_EFI=1 # seems to be ignored by the setup-disk script, can be removed setup-disk -m sys /mnt/ 

Обновить конфигурацию:

boot_UUID=$(blkid | awk "\$1 == \"/dev/sda2:\" { print \$2 }" | cut -d'"' -f2) lvm_UUID=$(blkid | awk "\$1 == \"/dev/sda3:\" { print \$2 }" | cut -d'"' -f2) root_UUID=$(blkid | awk "\$1 == \"/dev/mapper/vg0-root:\" { print \$2 }" | cut -d'"' -f2) swap_UUID=$(blkid | awk "\$1 == \"/dev/mapper/vg0-swap:\" { print \$2 }" | cut -d'"' -f2)  printf "target='bootcrypt'\n" >> /mnt/etc/conf.d/dmcrypt printf "source=UUID=\"$boot_UUID\"\n" >> /mnt/etc/conf.d/dmcrypt #chroot /mnt rc-update add dmcrypt boot (there seems to be a bug in openrc: https://github.com/OpenRC/openrc/issues/243) chroot /mnt ln -s /etc/init.d/dmcrypt /etc/runlevels/boot/dmcrypt # temporary workaround printf "UUID=$swap_UUID\tswap\tswap\tdefault\t0 0\n" >> /mnt/etc/fstab printf 'features="ata base ide scsi usb virtio ext4 lvm cryptsetup"\n' > /mnt/etc/mkinitfs/mkinitfs.conf mkinitfs -c /mnt/etc/mkinitfs/mkinitfs.conf -b /mnt/ $(ls /mnt/lib/modules/)  mkdir -p /mnt/boot/grub/ mkdir -p /etc/default/ cat > /mnt/boot/grub/grub.cfg <<EOF set timeout=2 insmod all_video menuentry "Alpine Linux" { linux /boot/vmlinuz-vanilla modules=sd-mod,usb-storage,ext4 cryptroot=UUID=$lvm_UUID cryptdm=lvmcrypt root=UUID=$root_UUID nomodeset quiet rootfstype=ext4 initrd /boot/initramfs-vanilla } EOF cat >> /etc/default/grub <<EOF GRUB_ENABLE_CRYPTODISK=y EOF grub-install --target=x86_64-efi --bootloader-id=alpine --boot-directory=/mnt/boot --efi-directory=/mnt/boot/efi --recheck --no-nvram install -D /mnt/boot/efi/EFI/alpine/grubx64.efi /mnt/boot/efi/EFI/boot/bootx64.efi 

Таким образом, GRUB запрашивает пароль загрузочного раздела, initramfs (или ядро ​​или что-то еще?) Запрашивает пароль раздела lvm, и, наконец, OpenRC запрашивает пароль загрузочного раздела (интернет предоставляет достаточно источников, почему загрузочный раздел необходимо расшифровать дважды) ,

Завершить настройку:

umount /mnt/boot/efi/ umount /mnt/boot/ umount /mnt/ swapoff -a vgchange -a n cryptsetup luksClose lvmcrypt cryptsetup luksClose bootcrypt  reboot 

Итак, на данный момент у меня есть система в режиме UEFI с разделами GPT, LUKS, LVM, GRUB и Alpine Linux. Я могу использовать Alpine Linux, как и ожидалось, и никаких проблем здесь нет.

Теперь я хочу установить Xen и запустить следующие команды:

for mod in xen_netback xen_blkback xenfs xen_pciback xen_wdt tun; do if modprobe $mod; then grep -q -q $mod /etc/modules || echo $mod >> /etc/modules fi done  apk add xen xen-hypervisor  for svc in xenstored xenconsoled xendomains xenqemu; do rc-update add $svc default done  grubcfg=$(cat /boot/grub/grub.cfg) cat > /boot/grub/grub.cfg <<EOF menuentry "Xen Alpine Linux" { multiboot2 /boot/xen.gz placeholder smt=1 module2 /boot/vmlinuz-vanilla placeholder modules=sd-mod,usb-storage,ext4 cryptroot=UUID=$lvm_UUID cryptdm=lvmcrypt root=UUID=$root_UUID nomodeset quiet rootfstype=ext4 module2 /boot/initramfs-vanilla }  $grubcfg EOF 

Когда я выбираю Xen Alpine Linux из вариантов загрузки, Xen запускается без ошибок, но после отказа от консоли у меня появляется черный экран, и клавиатура больше не отвечает. То же самое происходит, когда я удаляю опцию тихого ядра из grub.cfg. Он не выводит никакой дополнительной информации. Как я могу решить эту проблему или эта настройка не поддерживается?

Я заметил, что когда я использую multiboot и module вместо multiboot2 и module2, Xen выдает ошибку "(XEN) Ошибка ACPI (tbxfroot-8217): действительный RSDP не был найден [20070126]" и отключает ACPI, но на этот раз после Отказывается от консоли, система запрашивает пароль раздела lvm. Но проблема в том, что клавиатура не отвечает, поэтому я не могу ввести пароль и продолжить процесс загрузки.

0

0 ответов на вопрос