ZFS-Root & ZFSBootMenu
1 minute read •
Vorraussetzung: Mit einer ZFS fähigen Bootdisk (z.B. SystemRescue-ZFS) gestartet.
Festplatte vorbereiten:
mkdir --parents /mnt/gentoo
sgdisk -Z /dev/sda
sgdisk -a 4096 --new=1:+0:+1G --typecode=1:EF00 --change-name=1:"EFI" /dev/sda
sgdisk -a 4096 --new=2:+129M:+4G --typecode=2:8200 --change-name=2:"Linux swap" /dev/sda
sgdisk -a 4096 --new=3:+129M:-129M --typecode=3:bf00 --change-name=3:"tank" /dev/sda
ZFS Pool anlegen
zpool create -f \
-o ashift=12 -o autotrim=on \
-O acltype=posixacl -O xattr=sa -O atime=off -O compression=lz4 \
-m none tank /dev/sda3
zfs create -o mountpoint=none tank/OS
zfs create -o mountpoint=/ -o canmount=noauto tank/OS/gentoo
zfs create -o mountpoint=/home -o relatime=on tank/HOME
zfs create -o mountpoint=none -o setuid=off tank/GENTOO
zfs create -o mountpoint=/var/db/repos -o exec=off tank/GENTOO/repos
zfs create -o mountpoint=/var/db/repos/gentoo tank/GENTOO/portage
zfs create -o mountpoint=/var/cache/distfiles -o compression=off -o exec=off tank/GENTOO/distfiles
zfs create -o mountpoint=/var/tmp/portage -o sync=disabled tank/GENTOO/build-dir
zfs create -o mountpoint=/var/cache/binhost -o compression=off -o exec=off tank/GENTOO/binhost
zfs create -o mountpoint=none -o setuid=off tank/VAR
zfs create -o mountpoint=/var/log -o sync=disabled tank/VAR/log
zfs create -o mountpoint=/tmp -o sync=disabled tank/VAR/tmp
zfs create -o mountpoint=none -o setuid=off tank/SRV
zfs create -o mountpoint=/var/www tank/SRV/www
...
zpool set bootfs=tank/OS/gentoo tank
zpool export tank
ZFS Pool laden
zpool import -N -R /mnt/gentoo tank
zfs mount tank/OS/gentoo
zfs mount -R tank/HOME
zfs mount -R tank/GENTOO
zfs mount -R tank/VAR
zfs mount -R tank/SRV
Hilfspartitionen formatieren
mkswap /dev/sda2
swapon /dev/sda2
mkfs.vfat -F 32 /dev/sda1
mkdir --parents /mnt/gentoo/boot/efi
mount /dev/sda1 /mnt/gentoo/boot/efi
Gentoo installieren
chmod 1777 /mnt/gentoo/tmp
wget 'ftp://gentoo.osuosl.org/pub/gentoo/releases/amd64/autobuilds/current-stage3-amd64-openrc/stage3-amd64-openrc-[0-9]*.tar.xz'
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
echo 'MAKEOPTS="-j4 -l5"' >> /mnt/gentoo/etc/portage/make.conf
echo 'RUSTFLAGS="${RUSTFLAGS} -C target-cpu=native"' >> /mnt/gentoo/etc/portage/make.conf
Standard Programm zu world hinzufügen
cat >> /var/lib/portage/world <<EOF
app-admin/rsyslog
app-admin/sudo
app-arch/ouch
app-crypt/dehydrated
app-editors/vim
app-emulation/open-vm-tools
app-misc/tmux
app-misc/mc
app-portage/eix
app-portage/gentoolkit
app-shells/bash-completion
dev-python/dns-lexicon
dev-util/git-delta
dev-vcs/git
dev-vcs/gitui
mail-mta/opensmtpd
net-dns/dns-doge
net-misc/chrony
net-misc/dropbear
net-misc/mosh
net-misc/sendme
sys-apps/bat
sys-apps/eza
sys-apps/fd
sys-apps/ripgrep
sys-boot/efibootmgr
sys-boot/zfsbootmenu
sys-kernel/dracut-crypt-ssh
sys-kernel/gentoo-sources
sys-process/cronclearer
sys-process/cronie
sys-process/htop
sys-process/lsof
virtual/openssh
www-servers/nginx
EOF
mkdir -p /etc/portage/package.accept_keywords
cat >> /etc/portage/package.accept_keywords/system <<EOF
app-arch/ouch
dev-vcs/gitui
net-dns/dns-doge
net-misc/sendme
sys-boot/zfsbootmenu
sys-kernel/dracut-crypt-ssh
sys-process/cronclearer
EOF
cat >> /etc/portage/package.use/system <<EOF
*/* -X -gtk -gnome dracut cacert vim-syntax zstd lz4 nftables kernel-install uuid jit
app-emulation/open-vm-tools -vgauth -resolutionkms -deploypkg
sys-apps/systemd-utils boot
sys-devel/binutils -hardened
sys-devel/gcc -hardened -jit
EOF
Alphaquadrant-Overlay installieren
mkdir -p /etc/portage/repos.conf
cat <<EOF > /etc/portage/repos.conf/migmedia.conf
[AlphaQuadrant]
priority = 20
location = /var/db/repos/alpha-quadrant
sync-type = git
sync-uri = https://git.migmedia.net/gentoo/alpha-quadrant.git
auto-sync = true
masters = gentoo
EOF
emaint sync -a
… weiter mit der Standard Gentoo Installation
emerge @world -uaDtvNU -j3 --keep-going
eselect kernel set 1
cd /usr/src/linux
Kernel konfigurieren und compilieren
make localmodconfig
make nconfig
nice make -j11
make modules_install
emerge -av sys-fs/zfs
make install
ZFSbootmenu installieren
Alphaquadrant-Overlay installieren
mkdir -p /etc/portage/repos.conf
cat <<EOF > /etc/portage/repos.conf/migmedia.conf
[AlphaQuadrant]
priority = 20
location = /var/db/repos/alpha-quadrant
sync-type = git
sync-uri = https://git.migmedia.net/gentoo/alpha-quadrant.git
auto-sync = true
masters = gentoo
EOF
emaint sync -a
emerge -av sys-boot/zfsbootmenu sys-boot/efibootmgr
zfs set org.zfsbootmenu:commandline="quiet loglevel=4" tank/OS
curl https://gentoo.migmedia.net/alpha-quadrant/gentoo.bmp -o /etc/zfsbootmenu/gentoo.bmp
Datei /etc/zfsbootmenu/config.yaml ändern:
Global:
ManageImages: true
BootMountPoint: /boot/efi
[...]
EFI:
Enabled: true
#Stub: /usr/lib/systemd/boot/efi/linuxx64.elf.stub
Kernel:
CommandLine: ro quiet loglevel=0 zbm.timeout=30
ZFSbootmenu Kernel installieren
generate-zbm
efibootmgr -c -d /dev/sda -p 1 -L "ZFSBootMenu" -l \\EFI\\ZBM\\VMLINUZ.EFI
ZFS-Service beim Booten starten
rc-update add zfs-import boot
rc-update add zfs-load-key boot
rc-update add zfs-mount boot
rc-update add zfs-zed default
rc-update add zfs-share default
rc-update add rsyslog default
rc-update add cronie default
rc-update add chronyd default
rc-update add sshd default
rc-update add vmware-tools
Root-Passwort setzen & sudo erlauben
passwd -l root
echo "%wheel ALL=(ALL:ALL) ALL" > /etc/sudoers.d/wheel
User mit eigenem ZFS-Dataset anlegen
export NUSER=user
useradd -M -G wheel -s /bin/bash $NUSER
zfs create tank/HOME/$NUSER
cp -r /etc/skel/.* /home/$NUSER/
chown -R $NUSER:$NUSER /home/$NUSER
passwd $NUSER
System laden zum Reparieren
mkdir /mnt/gentoo
zpool import -N -R /mnt/gentoo tank -f
zfs mount tank/OS/gentoo
zfs mount -R tank/HOME
zfs mount -R tank/VAR
zfs mount -R tank/GENTOO
zfs mount -R tank/SRV
mount /dev/sda1 /mnt/gentoo/boot/efi
Referenzen: