Updates and cleanup for Arch, RHEL, NixOS and Fedora
Signed-off-by: Maurice Zhou <ja@apvc.uk>
This commit is contained in:
committed by
George Melikov
parent
5777295f0a
commit
2766cb7197
@@ -25,13 +25,6 @@ Workarounds have to be applied.
|
||||
echo 'export ZPOOL_VDEV_NAME_PATH=YES' >> /etc/profile.d/zpool_vdev_name_path.sh
|
||||
source /etc/profile.d/zpool_vdev_name_path.sh
|
||||
|
||||
Note that ``sudo`` will not read ``/etc/profile`` and will
|
||||
not pass variables in parent shell. Consider setting the following
|
||||
in ``/etc/sudoers``::
|
||||
|
||||
pacman -S --noconfirm --needed sudo
|
||||
echo 'Defaults env_keep += "ZPOOL_VDEV_NAME_PATH"' >> /etc/sudoers
|
||||
|
||||
#. Pool name missing
|
||||
|
||||
See `this bug report <https://savannah.gnu.org/bugs/?59614>`__.
|
||||
@@ -43,60 +36,51 @@ Workarounds have to be applied.
|
||||
|
||||
sed -i "s|rpool=.*|rpool=\`zdb -l \${GRUB_DEVICE} \| grep -E '[[:blank:]]name' \| cut -d\\\' -f 2\`|" /etc/grub.d/10_linux
|
||||
|
||||
Caution: this fix must be applied after every GRUB update and before generating the menu.
|
||||
|
||||
Install GRUB
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
#. Generate initrd::
|
||||
#. Create empty cache file and generate initrd::
|
||||
|
||||
rm -f /etc/zfs/zpool.cache
|
||||
touch /etc/zfs/zpool.cache
|
||||
chmod a-w /etc/zfs/zpool.cache
|
||||
chattr +i /etc/zfs/zpool.cache
|
||||
|
||||
mkinitcpio -P
|
||||
|
||||
#. Create GRUB boot directory, in ESP and boot pool::
|
||||
|
||||
mkdir -p /boot/efi/EFI/arch
|
||||
mkdir -p /boot/grub
|
||||
|
||||
Boot environment-specific configuration (kernel, etc)
|
||||
is stored in ``/boot/grub/grub.cfg``, enabling rollback.
|
||||
|
||||
#. When in doubt, install both legacy boot
|
||||
and EFI.
|
||||
|
||||
#. If using legacy booting, install GRUB to every disk::
|
||||
|
||||
for i in ${DISK}; do
|
||||
grub-install --boot-directory /boot/efi/EFI/arch --target=i386-pc $i
|
||||
grub-install --target=i386-pc $i
|
||||
done
|
||||
|
||||
#. If using EFI::
|
||||
|
||||
grub-install --boot-directory /boot/efi/EFI/arch --efi-directory /boot/efi/
|
||||
grub-install --boot-directory /boot/efi/EFI/arch --efi-directory /boot/efi/ --removable
|
||||
for i in ${DISK}; do
|
||||
efibootmgr -cgp 1 -l "\EFI\arch\grubx64.efi" \
|
||||
-L "arch-${i##*/}" -d ${i}
|
||||
done
|
||||
grub-install --target x86_64-efi
|
||||
grub-install --target x86_64-efi --removable
|
||||
for i in ${DISK}; do
|
||||
efibootmgr -cgp 1 -l "\EFI\arch\grubx64.efi" \
|
||||
-L "arch-${i##*/}" -d ${i}
|
||||
done
|
||||
|
||||
#. Generate GRUB Menu::
|
||||
#. Generate GRUB Menu:
|
||||
|
||||
grub-mkconfig -o /boot/efi/EFI/arch/grub/grub.cfg
|
||||
cp /boot/efi/EFI/arch/grub/grub.cfg /boot/grub/grub.cfg
|
||||
Generate menu::
|
||||
|
||||
echo GRUB_CMDLINE_LINUX=\"zfs_import_dir=/dev/disk/by-id/\" >> /etc/default/grub
|
||||
grub-mkconfig -o /boot/grub/grub.cfg
|
||||
cp /boot/grub/grub.cfg /boot/efi/EFI/arch/
|
||||
|
||||
#. For both legacy and EFI booting: mirror ESP content::
|
||||
|
||||
ESP_MIRROR=$(mktemp -d)
|
||||
unalias -a
|
||||
cp -r /boot/efi/EFI $ESP_MIRROR
|
||||
for i in /boot/efis/*; do
|
||||
cp -r $ESP_MIRROR/EFI $i
|
||||
done
|
||||
|
||||
Enable Secure Boot
|
||||
----------------------------
|
||||
|
||||
This is optional. `See Arch Wiki article <https://wiki.archlinux.org/title/Secure_Boot>`__.
|
||||
rm -rf $ESP_MIRROR
|
||||
|
||||
Finish Installation
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -105,82 +89,11 @@ Finish Installation
|
||||
|
||||
exit
|
||||
|
||||
#. Take a snapshot of the clean installation for future use::
|
||||
|
||||
zfs snapshot -r rpool_$INST_UUID/$INST_ID@install
|
||||
zfs snapshot -r bpool_$INST_UUID/$INST_ID@install
|
||||
|
||||
#. Unmount EFI system partition::
|
||||
|
||||
umount /mnt/boot/efi
|
||||
umount /mnt/boot/efis/*
|
||||
|
||||
#. Export pools::
|
||||
|
||||
zpool export bpool_$INST_UUID
|
||||
zpool export rpool_$INST_UUID
|
||||
umount -Rl /mnt
|
||||
zpool export -a
|
||||
|
||||
#. Reboot::
|
||||
|
||||
reboot
|
||||
|
||||
Post installaion
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
#. If you have other data pools, generate list of datasets for `zfs-mount-generator
|
||||
<https://manpages.ubuntu.com/manpages/focal/man8/zfs-mount-generator.8.html>`__ to mount them at boot::
|
||||
|
||||
DATA_POOL='tank0 tank1'
|
||||
|
||||
# tab-separated zfs properties
|
||||
# see /etc/zfs/zed.d/history_event-zfs-list-cacher.sh
|
||||
export \
|
||||
PROPS="name,mountpoint,canmount,atime,relatime,devices,exec\
|
||||
,readonly,setuid,nbmand,encroot,keylocation"
|
||||
|
||||
for i in $DATA_POOL; do
|
||||
zfs list -H -t filesystem -o $PROPS -r $i > /etc/zfs/zfs-list.cache/$i
|
||||
done
|
||||
|
||||
#. After reboot, consider adding a normal user::
|
||||
|
||||
# with root permissions
|
||||
sudo -i
|
||||
|
||||
# store user name in a variable
|
||||
myUser=UserName
|
||||
|
||||
# rename default `User` to new user name
|
||||
zfs rename $(df --output=source /home | tail -n +2)/User $(df --output=source /home | tail -n +2)/${myUser}
|
||||
|
||||
# update entry in fstab
|
||||
sed -i "s|/home/User|/home/${myUser}|g" /etc/fstab
|
||||
|
||||
# add user
|
||||
useradd --no-create-home --user-group --home-dir /home/${myUser} --comment 'My Name' ${myUser}
|
||||
|
||||
# delegate snapshot and destroy permissions of the home dataset to
|
||||
# new user
|
||||
zfs allow -u ${myUser} mount,snapshot,destroy $(df --output=source /home | tail -n +2)/${myUser}
|
||||
|
||||
# fix permissions
|
||||
chown --recursive ${myUser}:${myUser} /home/${myUser}
|
||||
chmod 700 /home/${myUser}
|
||||
|
||||
# set new password for user
|
||||
passwd ${myUser}
|
||||
|
||||
Set up cron job to snapshot user home everyday::
|
||||
|
||||
pacman -S cronie
|
||||
systemctl enable --now cronie
|
||||
crontab -eu ${myUser}
|
||||
#@daily zfs snap $(df --output=source /home/${myUser} | tail -n +2)@$(dd if=/dev/urandom of=/dev/stdout bs=1 count=100 2>/dev/null |tr -dc 'a-z0-9' | cut -c-6)
|
||||
zfs list -t snapshot -S creation $(df --output=source /home/${myUser} | tail -n +2)
|
||||
|
||||
Install package groups::
|
||||
|
||||
pacman -Sg # query package groups
|
||||
pacman -S 'gnome'
|
||||
pacman -S 'plasma'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user