diff --git a/README.md b/README.md index 1087ad3..92ca3e0 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,12 @@ Debian 11 minimal setup with SSH server wget -qO- https://raw.githubusercontent.com/terem42/zfs-hetzner-vm/master/hetzner-debian11-zfs-setup.sh | bash - ```` +Debian 12 minimal setup with SSH server + +````bash +wget -qO- https://raw.githubusercontent.com/terem42/zfs-hetzner-vm/master/hetzner-debian12-zfs-setup.sh | bash - +```` + Ubuntu 18.04 LTS minimal setup with SSH server ````bash diff --git a/hetzner-debian10-zfs-setup.sh b/hetzner-debian10-zfs-setup.sh index 0140df1..9590c0a 100644 --- a/hetzner-debian10-zfs-setup.sh +++ b/hetzner-debian10-zfs-setup.sh @@ -494,9 +494,20 @@ for kver in $(find /lib/modules/* -maxdepth 0 -type d | grep -v "$(uname -r)" | done echo "======= installing zfs on rescue system ==========" - echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections - apt-get install --yes software-properties-common - echo "y" | zfs + echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections +# echo "y" | zfs +# linux-headers-generic linux-image-generic + apt install --yes software-properties-common dpkg-dev dkms + rm -f "$(which zfs)" + rm -f "$(which zpool)" + echo -e "deb http://deb.debian.org/debian/ testing main contrib non-free\ndeb http://deb.debian.org/debian/ testing main contrib non-free\n" >/etc/apt/sources.list.d/bookworm-testing.list + echo -e "Package: src:zfs-linux\nPin: release n=testing\nPin-Priority: 990\n" > /etc/apt/preferences.d/90_zfs + apt update + apt install -t testing --yes zfs-dkms zfsutils-linux + rm /etc/apt/sources.list.d/bookworm-testing.list + rm /etc/apt/preferences.d/90_zfs + apt update + export PATH=$PATH:/usr/sbin zfs --version echo "======= partitioning the disk ==========" @@ -562,9 +573,7 @@ zfs create -o canmount=noauto -o mountpoint=/boot "$v_bpool_name/BOOT/debian" zfs mount "$v_bpool_name/BOOT/debian" zfs create "$v_rpool_name/home" -zfs create -o mountpoint=/root "$v_rpool_name/home/root" zfs create -o canmount=off "$v_rpool_name/var" -zfs create -o canmount=off "$v_rpool_name/var/lib" zfs create "$v_rpool_name/var/log" zfs create "$v_rpool_name/var/spool" @@ -615,7 +624,7 @@ ff02::2 ip6-allrouters ff02::3 ip6-allhosts CONF -ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p') +ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p' | head -n 1) cat < /mnt/etc/systemd/network/10-eth0.network [Match] @@ -629,9 +638,6 @@ CONF chroot_execute "systemctl enable systemd-networkd.service" chroot_execute "systemctl enable systemd-resolved.service" - -cp /etc/resolv.conf $c_zfs_mount_dir/etc/resolv.conf - echo "======= preparing the jail for chroot ==========" for virtual_fs_dir in proc sys dev; do mount --rbind "/$virtual_fs_dir" "$c_zfs_mount_dir/$virtual_fs_dir" @@ -790,6 +796,7 @@ CONF echo "========running packages upgrade===========" chroot_execute "apt upgrade --yes" +chroot_execute "apt autoremove --yes" echo "===========add static route to initramfs via hook to add default routes for Hetzner due to Debian/Ubuntu initramfs DHCP bug =========" mkdir -p "$c_zfs_mount_dir/usr/share/initramfs-tools/scripts/init-premount" diff --git a/hetzner-debian11-zfs-setup.sh b/hetzner-debian11-zfs-setup.sh index 87cc694..cb19010 100644 --- a/hetzner-debian11-zfs-setup.sh +++ b/hetzner-debian11-zfs-setup.sh @@ -495,9 +495,20 @@ for kver in $(find /lib/modules/* -maxdepth 0 -type d | grep -v "$(uname -r)" | done echo "======= installing zfs on rescue system ==========" - echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections - apt-get install --yes software-properties-common - echo "y" | zfs + echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections +# echo "y" | zfs +# linux-headers-generic linux-image-generic + apt install --yes software-properties-common dpkg-dev dkms + rm -f "$(which zfs)" + rm -f "$(which zpool)" + echo -e "deb http://deb.debian.org/debian/ testing main contrib non-free\ndeb http://deb.debian.org/debian/ testing main contrib non-free\n" >/etc/apt/sources.list.d/bookworm-testing.list + echo -e "Package: src:zfs-linux\nPin: release n=testing\nPin-Priority: 990\n" > /etc/apt/preferences.d/90_zfs + apt update + apt install -t testing --yes zfs-dkms zfsutils-linux + rm /etc/apt/sources.list.d/bookworm-testing.list + rm /etc/apt/preferences.d/90_zfs + apt update + export PATH=$PATH:/usr/sbin zfs --version echo "======= partitioning the disk ==========" @@ -563,9 +574,7 @@ zfs create -o canmount=noauto -o mountpoint=/boot "$v_bpool_name/BOOT/debian" zfs mount "$v_bpool_name/BOOT/debian" zfs create "$v_rpool_name/home" -zfs create -o mountpoint=/root "$v_rpool_name/home/root" zfs create -o canmount=off "$v_rpool_name/var" -zfs create -o canmount=off "$v_rpool_name/var/lib" zfs create "$v_rpool_name/var/log" zfs create "$v_rpool_name/var/spool" @@ -616,7 +625,7 @@ ff02::2 ip6-allrouters ff02::3 ip6-allhosts CONF -ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p') +ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p' | head -n 1) cat < /mnt/etc/systemd/network/10-eth0.network [Match] @@ -630,8 +639,7 @@ CONF chroot_execute "systemctl enable systemd-networkd.service" chroot_execute "systemctl enable systemd-resolved.service" - -cp /etc/resolv.conf $c_zfs_mount_dir/etc/resolv.conf +#cp /etc/resolv.conf $c_zfs_mount_dir/etc/resolv.conf echo "======= preparing the jail for chroot ==========" for virtual_fs_dir in proc sys dev; do diff --git a/hetzner-debian12-zfs-setup.sh b/hetzner-debian12-zfs-setup.sh index 80f517d..2d5b3b9 100644 --- a/hetzner-debian12-zfs-setup.sh +++ b/hetzner-debian12-zfs-setup.sh @@ -495,9 +495,21 @@ for kver in $(find /lib/modules/* -maxdepth 0 -type d | grep -v "$(uname -r)" | done echo "======= installing zfs on rescue system ==========" - echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections - apt-get install --yes software-properties-common - echo "y" | zfs + + echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections +# echo "y" | zfs +# linux-headers-generic linux-image-generic + apt install --yes software-properties-common dpkg-dev dkms + rm -f "$(which zfs)" + rm -f "$(which zpool)" + echo -e "deb http://deb.debian.org/debian/ testing main contrib non-free\ndeb http://deb.debian.org/debian/ testing main contrib non-free\n" >/etc/apt/sources.list.d/bookworm-testing.list + echo -e "Package: src:zfs-linux\nPin: release n=testing\nPin-Priority: 990\n" > /etc/apt/preferences.d/90_zfs + apt update + apt install -t testing --yes zfs-dkms zfsutils-linux + rm /etc/apt/sources.list.d/bookworm-testing.list + rm /etc/apt/preferences.d/90_zfs + apt update + export PATH=$PATH:/usr/sbin zfs --version echo "======= partitioning the disk ==========" @@ -564,9 +576,8 @@ zfs create -o canmount=noauto -o mountpoint=/boot "$v_bpool_name/BOOT/debian" zfs mount "$v_bpool_name/BOOT/debian" zfs create "$v_rpool_name/home" -zfs create -o mountpoint=/root "$v_rpool_name/home/root" +#zfs create -o mountpoint=/root "$v_rpool_name/home/root" zfs create -o canmount=off "$v_rpool_name/var" -zfs create -o canmount=off "$v_rpool_name/var/lib" zfs create "$v_rpool_name/var/log" zfs create "$v_rpool_name/var/spool" @@ -617,7 +628,7 @@ ff02::2 ip6-allrouters ff02::3 ip6-allhosts CONF -ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p') +ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p' | head -n 1) cat < /mnt/etc/systemd/network/10-eth0.network [Match] @@ -629,10 +640,6 @@ Address=${ip6addr_prefix}:1/64 Gateway=fe80::1 CONF chroot_execute "systemctl enable systemd-networkd.service" -chroot_execute "systemctl enable systemd-resolved.service" - - -cp /etc/resolv.conf $c_zfs_mount_dir/etc/resolv.conf echo "======= preparing the jail for chroot ==========" for virtual_fs_dir in proc sys dev; do @@ -698,10 +705,11 @@ chroot_execute "dpkg-reconfigure console-setup -f noninteractive" chroot_execute "setupcon" chroot_execute "rm -f /etc/localtime /etc/timezone" -chroot_execute "dpkg-reconfigure tzdata -f noninteractive " +chroot_execute "dpkg-reconfigure tzdata -f noninteractive" echo "======= installing latest kernel=============" -chroot_execute "apt install --yes linux-image${v_kernel_variant}-amd64 linux-headers${v_kernel_variant}-amd64" +# linux-headers-generic linux-image-generic +chroot_execute "apt install --yes linux-image${v_kernel_variant}-amd64 linux-headers${v_kernel_variant}-amd64 dpkg-dev" echo "======= installing aux packages ==========" chroot_execute "apt install --yes man wget curl software-properties-common nano htop gnupg" @@ -728,8 +736,6 @@ echo "======= installing OpenSSH and network tooling ==========" chroot_execute "apt install --yes openssh-server net-tools" echo "======= setup OpenSSH ==========" -mkdir -p "$c_zfs_mount_dir/root/.ssh/" -cp /root/.ssh/authorized_keys "$c_zfs_mount_dir/root/.ssh/authorized_keys" sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g' "$c_zfs_mount_dir/etc/ssh/sshd_config" sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' "$c_zfs_mount_dir/etc/ssh/sshd_config" chroot_execute "rm /etc/ssh/ssh_host_*" @@ -792,8 +798,13 @@ export LS_OPTIONS='--color=auto -h' eval "\$(dircolors)" CONF -echo "========running packages upgrade===========" +echo "========= add root pubkey for login via SSH" +mkdir -p "$c_zfs_mount_dir/root/.ssh/" +cp /root/.ssh/authorized_keys "$c_zfs_mount_dir/root/.ssh/authorized_keys" + +echo "========running packages upgrade and autoremove===========" chroot_execute "apt upgrade --yes" +chroot_execute "apt autoremove --yes" echo "===========add static route to initramfs via hook to add default routes for Hetzner due to Debian/Ubuntu initramfs DHCP bug =========" mkdir -p "$c_zfs_mount_dir/usr/share/initramfs-tools/scripts/init-premount" diff --git a/hetzner-ubuntu18-zfs-setup.sh b/hetzner-ubuntu18-zfs-setup.sh index 3d41289..57b7a34 100644 --- a/hetzner-ubuntu18-zfs-setup.sh +++ b/hetzner-ubuntu18-zfs-setup.sh @@ -462,9 +462,20 @@ for kver in $(find /lib/modules/* -maxdepth 0 -type d | grep -v "$(uname -r)" | done echo "======= installing zfs on rescue system ==========" - echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections - apt-get install --yes software-properties-common - echo "y" | zfs + echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections +# echo "y" | zfs +# linux-headers-generic linux-image-generic + apt install --yes software-properties-common dpkg-dev dkms + rm -f "$(which zfs)" + rm -f "$(which zpool)" + echo -e "deb http://deb.debian.org/debian/ testing main contrib non-free\ndeb http://deb.debian.org/debian/ testing main contrib non-free\n" >/etc/apt/sources.list.d/bookworm-testing.list + echo -e "Package: src:zfs-linux\nPin: release n=testing\nPin-Priority: 990\n" > /etc/apt/preferences.d/90_zfs + apt update + apt install -t testing --yes zfs-dkms zfsutils-linux + rm /etc/apt/sources.list.d/bookworm-testing.list + rm /etc/apt/preferences.d/90_zfs + apt update + export PATH=$PATH:/usr/sbin zfs --version echo "======= partitioning the disk ==========" @@ -530,9 +541,7 @@ zfs create -o canmount=noauto -o mountpoint=/boot "$v_bpool_name/BOOT/ubuntu" zfs mount "$v_bpool_name/BOOT/ubuntu" zfs create "$v_rpool_name/home" -zfs create -o mountpoint=/root "$v_rpool_name/home/root" zfs create -o canmount=off "$v_rpool_name/var" -zfs create -o canmount=off "$v_rpool_name/var/lib" zfs create "$v_rpool_name/var/log" zfs create "$v_rpool_name/var/spool" @@ -583,7 +592,7 @@ ff02::2 ip6-allrouters ff02::3 ip6-allhosts CONF -ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p') +ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p' | head -n 1) cat < /mnt/etc/systemd/network/10-eth0.network [Match] @@ -598,6 +607,7 @@ CONF chroot_execute "systemctl enable systemd-networkd.service" chroot_execute "systemctl enable systemd-resolved.service" +#cp /etc/resolv.conf $c_zfs_mount_dir/etc/resolv.conf mkdir -p "$c_zfs_mount_dir/etc/cloud/cloud.cfg.d/" cat > "$c_zfs_mount_dir/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg" </etc/apt/sources.list.d/bookworm-testing.list + echo -e "Package: src:zfs-linux\nPin: release n=testing\nPin-Priority: 990\n" > /etc/apt/preferences.d/90_zfs + apt update + apt install -t testing --yes zfs-dkms zfsutils-linux + rm /etc/apt/sources.list.d/bookworm-testing.list + rm /etc/apt/preferences.d/90_zfs + apt update + export PATH=$PATH:/usr/sbin zfs --version echo "======= partitioning the disk ==========" @@ -530,9 +541,7 @@ zfs create -o canmount=noauto -o mountpoint=/boot "$v_bpool_name/BOOT/ubuntu" zfs mount "$v_bpool_name/BOOT/ubuntu" zfs create "$v_rpool_name/home" -zfs create -o mountpoint=/root "$v_rpool_name/home/root" zfs create -o canmount=off "$v_rpool_name/var" -zfs create -o canmount=off "$v_rpool_name/var/lib" zfs create "$v_rpool_name/var/log" zfs create "$v_rpool_name/var/spool" @@ -583,7 +592,7 @@ ff02::2 ip6-allrouters ff02::3 ip6-allhosts CONF -ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p') +ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p' | head -n 1) cat < /mnt/etc/systemd/network/10-eth0.network [Match] @@ -607,7 +616,7 @@ CONF rm -rf $c_zfs_mount_dir/etc/network/interfaces.d/50-cloud-init.cfg -cp /etc/resolv.conf $c_zfs_mount_dir/etc/resolv.conf +#cp /etc/resolv.conf $c_zfs_mount_dir/etc/resolv.conf echo "======= preparing the jail for chroot ==========" for virtual_fs_dir in proc sys dev; do diff --git a/hetzner-ubuntu22-zfs-setup.sh b/hetzner-ubuntu22-zfs-setup.sh index c6bb54e..d04dd09 100644 --- a/hetzner-ubuntu22-zfs-setup.sh +++ b/hetzner-ubuntu22-zfs-setup.sh @@ -462,9 +462,20 @@ for kver in $(find /lib/modules/* -maxdepth 0 -type d | grep -v "$(uname -r)" | done echo "======= installing zfs on rescue system ==========" - echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections - apt-get install --yes software-properties-common - echo "y" | zfs + echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections +# echo "y" | zfs +# linux-headers-generic linux-image-generic + apt install --yes software-properties-common dpkg-dev dkms + rm -f "$(which zfs)" + rm -f "$(which zpool)" + echo -e "deb http://deb.debian.org/debian/ testing main contrib non-free\ndeb http://deb.debian.org/debian/ testing main contrib non-free\n" >/etc/apt/sources.list.d/bookworm-testing.list + echo -e "Package: src:zfs-linux\nPin: release n=testing\nPin-Priority: 990\n" > /etc/apt/preferences.d/90_zfs + apt update + apt install -t testing --yes zfs-dkms zfsutils-linux + rm /etc/apt/sources.list.d/bookworm-testing.list + rm /etc/apt/preferences.d/90_zfs + apt update + export PATH=$PATH:/usr/sbin zfs --version echo "======= partitioning the disk ==========" @@ -530,9 +541,8 @@ zfs create -o canmount=noauto -o mountpoint=/boot "$v_bpool_name/BOOT/ubuntu" zfs mount "$v_bpool_name/BOOT/ubuntu" zfs create "$v_rpool_name/home" -zfs create -o mountpoint=/root "$v_rpool_name/home/root" +#zfs create -o mountpoint=/root "$v_rpool_name/home/root" zfs create -o canmount=off "$v_rpool_name/var" -zfs create -o canmount=off "$v_rpool_name/var/lib" zfs create "$v_rpool_name/var/log" zfs create "$v_rpool_name/var/spool" @@ -583,7 +593,7 @@ ff02::2 ip6-allrouters ff02::3 ip6-allhosts CONF -ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p') +ip6addr_prefix=$(ip -6 a s | grep -E "inet6.+global" | sed -nE 's/.+inet6\s(([0-9a-z]{1,4}:){4,4}).+/\1/p' | head -n 1) cat < /mnt/etc/systemd/network/10-eth0.network [Match] @@ -607,8 +617,6 @@ CONF rm -rf $c_zfs_mount_dir/etc/network/interfaces.d/50-cloud-init.cfg -cp /etc/resolv.conf $c_zfs_mount_dir/etc/resolv.conf - echo "======= preparing the jail for chroot ==========" for virtual_fs_dir in proc sys dev; do mount --rbind "/$virtual_fs_dir" "$c_zfs_mount_dir/$virtual_fs_dir"