Хочу поставити систему на флешку. Намагаюся пригадати, як це робити.
Проблема в тому, що мої смаки досить специфічні:
- мені потрібна звичайна система, а не так звана «live»;
- звісно, кореневий розділ має бути зашифрований;
- система має завантажуватися через UEFI.
Буду робити нотатки по ходу.
Створення розділів
Тут і далі моя флешка зветься /dev/sda
, для інших систем ймовірно має бути інше ім’я. Якщо хтось скопіює собі мій код, виконає в консолі з правами root і цим випадково відформатує основний жорсткий диск, то це сам собі дятел.
Так. Я створюю три розділи:
- один дуже маленький (10 Мб, FAT32) розділ для UEFI;
- середній (тут 540 Мб) для розділу
/boot
; - решту використаю на криптоконтейнер.
sgdisk --zap-all /dev/sda
sgdisk --new=1:0:10M --typecode=1:ef00 /dev/sda
sgdisk --new=2:0:540M --typecode=2:8300 /dev/sda
sgdisk --new=3:0:0 --typecode=3:8300 /dev/sda
Я раніше робив щось схоже, тільки без розділу для UEFI.
Криптоконтейнер
cryptsetup luksFormat /dev/sda3
cryptsetup open /dev/sda3 flash_root
ls -l /dev/mapper
Я недостатньо крут, щоб робити це щоразу, але це треба робити:
dd if=/dev/zero of=/dev/mapper/flash_root
Форматування та монтування
mkfs.vfat -F32 -n EFI /dev/sda1
mke2fs -t ext2 -L boot /dev/sda2
mke2fs -t ext4 -L root /dev/mapper/flash_root
mkdir /mnt/flash
mount /dev/mapper/flash_root /mnt/flash
mkdir /mnt/flash/boot
mount /dev/sda2 /mnt/flash/boot
mkdir /mnt/flash/boot/efi
mount /dev/sda1 /mnt/flash/boot/efi
Встановлення системи
Ояїбу. Буду пригадувати, як воно робиться. Треба вгатити базову систему.
debootstrap stable /mnt/flash
Git
Є таке збочення, я відслідковую зміни в /etc
за допомогою Git.
Редагую /mnt/flash/etc/.gitignore
:
*~
*-old
*.cache
*.dpkg-dist
*.dpkg-bak
/*-
/*.org
/adjtime
/.pwd.lock
/mtab
/nologin
/cups/subscriptions.conf*
/apt/*.save
/apt/*.distUpgrade
/apt/apt.conf.d/01autoremove-kernels
/apt/sources.list.d/*.save
/apt/sources.list.d/*.distUpgrade
/init.d/.depend.*
/apparmor.d/cache
/aliases.db
/rc?.d
Роблю перший комміт:
cd /mnt/flash/etc
git init .
chmod 0700 .git
git add -A
git ci -m "Base system after debootstrap"
crypttab
та fstab
Треба перевірити, які у нас UUID створених дисків.
ls -l /dev/disk/by-uuid
Редагую /mnt/flash/etc/crypttab
:
flash_root UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none luks,discard
Редагую /mnt/flash/etc/fstab
:
/dev/mapper/flash_root / ext4 errors=remount-ro 0 1
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /boot ext2 defaults 0 2
UUID=xxxx-xxxx /boot/efi vfat umask=0077 0 1
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0
tmpfs /var/log tmpfs defaults 0 0
tmpfs /var/run tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
chroot
Так. Заходжу в свою нову систему.
mount -o bind /dev /mnt/flash/dev
mount -o bind /proc /mnt/flash/proc
mount -o bind /sys /mnt/flash/sys
chroot /mnt/flash /bin/bash
apt update
Трясця. Все забув.
apt install grub-efi-amd64
grub-install --force --removable --no-floppy \
--boot-directory=/boot --efi-directory=/boot/efi /dev/sda
apt install linux-image-amd64
update-grub2
Налаштування нової системи
Далі все звичайно: роблю в новій системі adduser
, встановлюю все необхідне і так далі.
Ну наче все
umount /mnt/flash/dev
umount /mnt/flash/proc
umount /mnt/flash/sys
umount /mnt/flash/boot/efi
umount /mnt/flash/boot
umount /mnt/flash
cryptsetup luksClose flash_root
Перевіряю. Завантаження через UEFI не працює. Ну і, звісно, не працює legacy boot.
Блядь. Що пішло не так?
cryptsetup open /dev/sda3 flash_root
mount /dev/mapper/flash_root /mnt/flash
mount /dev/sda2 /mnt/flash/boot
mount /dev/sda1 /mnt/flash/boot/efi
mount -o bind /dev /mnt/flash/dev
mount -o bind /proc /mnt/flash/proc
mount -o bind /sys /mnt/flash/sys
chroot /mnt/flash /bin/bash
# So what? So what? So fucking what?
Відчуваю себе дуже тупим.