Alter.Org.UA
 << Back Home EN en   Donate Donate

Installing Gentoo on encrypted RAID

Pre-scriptum

Да, документации вроде бы полно, но все равно пришлось собирать рабочий вариант из нескольких источников.

Что для этого надо ?

загрузиться с Linux live CD и настроить сеть. По умолчанию включена поддержка DHCP, так что может и не понадобится, если в сети адреса раздаются по DHCP.

ifconfig
killall -9 dhclient
ip addr add 10.0.0.23/24  dev eno1
ip ro add 0.0.0.0/0 via 10.0.0.1
echo "nameserver 8.8.8.8" > /etc/resolv.conf

загрузить необходимые модули и разбить диски (считаем, что это sda и sdb).

modprobe raid1
modprobe dm-mod
modprobe dm-crypt

parted -a optimal /dev/sda

с помощью parted создаем grub и boot разделы + vlm, на котором будет зашифрованный root и все остальное.

 unit mib
 mklabel gpt
 mkpart primary 1 3 
 name 1 grub 
 set 1 bios_grub on 
 mkpart primary fat32 3 515
 name 2 boot
 set 2 BOOT on 
 mkpart primary 515 -1 
 name 3 lvm
 #set 3 lvm on

на 2м диске sdb повторяем такую же конфигурацию и инициализируем raid mirror. Инициализируем FAR32 boot раздел для UEFI BIOS. Есть смысл сразу посмотреть UUID разделов

parted -a optimal /dev/sdb

mdadm --create /dev/md2 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda2 /dev/sdb2
mdadm --create /dev/md3 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda3 /dev/sdb3

mkfs.vfat -F32 /dev/md2

bklid

инициализируем шифрование на lvm разделе и создаем внутри него root, swap и все остальное

cryptsetup luksFormat -c aes-xts-plain64:sha256 -s 256 /dev/md3

cryptsetup luksOpen /dev/md3 lvm
lvm pvcreate /dev/mapper/lvm
vgcreate vg0 /dev/mapper/lvm

lvcreate -L 50G -n root vg0
lvcreate -L 100G -n home vg0
lvcreate -L 50G -n log vg0
lvcreate -L 16G -n swap vg0
lvcreate -l 100%FREE -n var vg0

mkfs.ext4 /dev/mapper/vg0-root
mkfs.ext4 /dev/mapper/vg0-home
mkfs.ext4 /dev/mapper/vg0-log
mkfs.ext4 /dev/mapper/vg0-var
mkswap /dev/mapper/vg0-swap
swapon /dev/mapper/vg0-swap

если разделы уже созданы (это уже повторная загрузка), детектим и монтируем. Возможно, название будет /dev/mdadm/md127 и /dev/mdadm/md128 вместо /dev/md2 и /dev/md3. Придется сделать symlink для удобства. Но сначала проверьте UUID этих разделов, могут идти в другом порядке

mdadm --assemble --scan

blkid
ln -s /dev/mdadm/md127 /dev/md2
ln -s /dev/mdadm/md128 /dev/md3

cryptsetup luksOpen /dev/md3 lvm

lvm vgscan
lvm vgchange -ay

mount /dev/mapper/vg0-root /mnt/gentoo 
mkdir /mnt/gentoo/var
mkdir /mnt/gentoo/home
mount /dev/mapper/vg0-var /mnt/gentoo/var 
mount /dev/mapper/vg0-home /mnt/gentoo/home
mkdir /mnt/gentoo/var/log
mount /dev/mapper/vg0-log /mnt/gentoo/var/log
swapon /dev/mapper/vg0-swap

скачиваем и распаковываем stage3 iso

cd /mnt/gentoo 
wget "http://distfiles.gentoo.org/releases/amd64/autobuilds/20181213T214502Z/stage3-amd64-20181213T214502Z.tar.xz"
tar xvJpf stage3-*.tar.xz --xattrs --numeric-owner

nano /mnt/gentoo/etc/portage/make.conf

включаем static-libs в make.conf обязательно, остальное - по вкусу

USE="static-libs"
#USE="static-libs mysql php iconv acl apache2 "

chroot - преключаемся на root будущей системы

mkdir /mnt/gentoo/etc/portage/repos.conf
cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf 

mount -t proc /proc /mnt/gentoo/proc 
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys 
mount --rbind /dev /mnt/gentoo/dev 
mount --make-rslave /mnt/gentoo/dev

test -L /dev/shm && rm /dev/shm && mkdir /dev/shm 
mount -t tmpfs -o nosuid,nodev,noexec shm /dev/shm
chmod 1777 /dev/shm 

cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

chroot /mnt/gentoo /bin/bash
source /etc/profile 
export PS1="(chroot) $PS1" 

mount /dev/md2 /boot 

настраиваем time zone

emerge-webrsync 

echo Europe/Kiev > /etc/timezone 
emerge --config sys-libs/timezone-data 
nano -w /etc/locale.gen 
locale-gen 
eselect locale list 
eselect locale set 1 
env-update && source /etc/profile 

делаем новый fstab и указываем в нем UUID'ы разделов. Запоминаем UUID раздела lvm для последующей настройки grub

blkid

получится что-то типа

/dev/md2: UUID="AAAA-AAAA" TYPE="vfat"
/dev/md3: UUID="bbbbbbbb-cccc-0000-0000-000000bbbbbb" TYPE="crypto_LUKS"
/dev/mapper/lvm: UUID="ZZZZZZ-zzzz-zzzz-zzzz-zzzz-zzzz-ZZZZZZ" TYPE="LVM2_member"
/dev/mapper/vg0-root: UUID="cccccccc-0000-0000-0000-cccccc000000" TYPE="ext4"
/dev/mapper/vg0-home: UUID="cccccccc-0000-0000-0000-cccccc000001" TYPE="ext4"
/dev/mapper/vg0-log: UUID="cccccccc-0000-0000-0000-cccccc000002" TYPE="ext4"
/dev/mapper/vg0-var: UUID="cccccccc-0000-0000-0000-cccccc000003" TYPE="ext4"
/dev/mapper/vg0-swap: UUID="cccccccc-0000-0000-0000-cccccc000004" TYPE="swap"

UUID=AAAA-AAAA                                  /boot           vfat            noauto,noatime  1 2
UUID=cccccccc-0000-0000-0000-cccccc000000       /               ext4            defaults        0 1
UUID=cccccccc-0000-0000-0000-cccccc000001       /home           ext4            defaults        0 1
UUID=cccccccc-0000-0000-0000-cccccc000002       /var            ext4            defaults        0 1
UUID=cccccccc-0000-0000-0000-cccccc000003       /var/log        ext4            defaults        0 1
UUID=cccccccc-0000-0000-0000-cccccc000004       none            swap            sw              0 0
# tmps
tmpfs                                           /tmp            tmpfs           size=4Gb        0 0
tmpfs                                           /run            tmpfs           size=100M       0 0
# shm
shm                                             /dev/shm        tmpfs           nodev,nosuid,noexec 0 0

если в сети IP статический - настраиваем для новой системы

cd /etc/init.d/
ln -s net.lo  net.eno1
nano /etc/conf.d/net

config_eno1="10.0.0.23/24 2000:0000:0000:9999::2/126"
routes_eno1="default via 10.0.0.1"
dns_servers_eno1="8.8.8.8"

rc-update add net.eno1 default

получаем все необходимые исходники ядра и модули, пересобираем ядро

emerge sys-kernel/gentoo-sources 
emerge sys-kernel/genkernel
emerge sys-fs/cryptsetup 
emerge mdadm

cd /usr/src/linux
zcat /proc/config.gz >.config

mount /boot

mdadm --examine --scan
mdadm --examine --scan |sed -e 's/md\//md/' > /etc/mdadm.conf 

make menuconfig

обязательно включить следующие опции

    Cryptographic API -> CBC support
    Cryptographic API -> ECB support
    Cryptographic API -> XTS support
    Cryptographic API -> HMAC support
    Cryptographic API -> all CRC32c options
    Cryptographic API -> MD5 digest algorithm
    Cryptographic API -> Michael MIC keyed digest algorithm
    Cryptographic API -> SHA1 digest algorithm
    Cryptographic API -> SHA224 and SHA256 digest algorithm
    Cryptographic API -> SHA384 and SHA512 digest algorithms
    Cryptographic API -> all AES options

собираем ядро и загрузочный образ с необходимыми модулями, настраиваем grub

genkernel --luks --lvm --mdadm --disklabel --no-zfs all 

echo "sys-boot/grub:2 device-mapper" >> /etc/portage/package.use/sys-boot 
emerge -av grub 

nano /etc/default/grub 

GRUB_CMDLINE_LINUX="domdadm dolvm crypt_root=UUID=bbbbbbbb-cccc-0000-0000-000000bbbbbb root=/dev/mapper/vg0-root"


устанавливаем и перезагружаемся

grub-install --target=x86_64-efi --efi-directory=/boot 
grub-mkconfig -o /boot/grub/grub.cfg 

rc-update add lvm default
rc-update add sshd default

reboot
2019.01.25

См. также:


FB or mail alterX@alter.org.ua (remove X)   Share
<< Back Автор: Alter (Александр А. Телятников) Сервер: Apache+PHP под FBSD © 2002-2019