19 Commits
newres ... v1.2

Author SHA1 Message Date
Prokopenko Andrey
dc72f24c43 removed double quoting from zpool statements 2021-11-25 23:37:05 +01:00
Prokopenko Andrey
f2331df185 zpool options update for debian 2021-11-25 22:27:06 +01:00
Andrey Prokopenko
effc9964ee shellcheck code fixes 2021-11-18 20:22:53 +01:00
terem42
c1391bb65f Update shellcheck.yml 2021-09-25 12:10:32 +02:00
Andrey Prokopenko
e322cf49b4 modified permissions 2021-09-25 12:08:54 +02:00
Andrey Prokopenko
762993e7e8 updated shellcheck workflow 2021-09-25 12:04:16 +02:00
Prokopenko Andrey
a283542850 shellcheck workflow updated 2021-09-16 19:22:35 +02:00
Prokopenko Andrey
c23b735462 shellcheck workflow updated 2021-09-16 19:20:58 +02:00
Prokopenko Andrey
c7b8d13be8 shellcheck workflow updated 2021-09-16 19:20:29 +02:00
Prokopenko Andrey
d8f796dc38 shellcheck workflow updated 2021-09-16 19:19:13 +02:00
Prokopenko Andrey
3d93256d17 shellcheck workflow updated 2021-09-16 19:18:26 +02:00
Prokopenko Andrey
37baec84ca shellcheck workflow added 2021-09-16 19:16:27 +02:00
Prokopenko Andrey
3b9a132a1d updated compression 2021-09-16 16:18:10 +02:00
terem42
fecb5ca25c Merge pull request #20 from terem42/mountservice
remove zfs-boot helper service, obsolete in OpenZFS 2.0
2021-09-16 15:28:35 +02:00
Prokopenko Andrey
59e7e2352f update 2021-09-16 14:51:39 +02:00
terem42
c1122406eb Update README.md 2021-09-15 22:33:58 +02:00
terem42
40d0221d18 Update README.md 2021-09-15 22:30:39 +02:00
terem42
f41b62ad32 Merge pull request #18 from terem42/newres
updated to load stable prebuilt zfs package and cleanup rescue
2021-09-15 22:24:34 +02:00
terem42
ccccb6f175 Update hetzner-ubuntu20-zfs-setup.sh 2021-09-15 19:30:13 +02:00
7 changed files with 114 additions and 109 deletions

11
.github/workflows/shellcheck.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
name: shellcheck
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run shellcheck
run: ci/run_shellcheck.sh

View File

@@ -1,5 +1,7 @@
# zfs-hetzner-vm # zfs-hetzner-vm
[![shellcheck](https://github.com/terem42/zfs-hetzner-vm/actions/workflows/shellcheck.yml/badge.svg)](https://github.com/terem42/zfs-hetzner-vm/actions/workflows/shellcheck.yml)
Scripts to install Debian 11, 10 or Ubuntu 20, 18 with ZFS root on Hetzner root servers (virtual and dedicated).<br/> Scripts to install Debian 11, 10 or Ubuntu 20, 18 with ZFS root on Hetzner root servers (virtual and dedicated).<br/>
__WARNING:__ all data on the disk will be destroyed. __WARNING:__ all data on the disk will be destroyed.

25
ci/run_shellcheck.sh Executable file
View File

@@ -0,0 +1,25 @@
#!/bin/bash
set -o pipefail
set -o errexit
set -o nounset
set -o errtrace
shopt -s inherit_errexit
# Always download the latest version:
#
# - it's fast and stable enough not to worry about it;
# - the workflow is basically single-person, so there's no risk of a new dev encountering an error found
# by a new shellcheck version.
mkdir -p /opt/shellcheck
wget -qO- https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz \
| tar xJv -O shellcheck-stable/shellcheck \
> /opt/shellcheck/shellcheck
chmod +x /opt/shellcheck/shellcheck
/opt/shellcheck/shellcheck --version
grep -lZP '^#!/bin/\w+sh' -R | xargs -0 /opt/shellcheck/shellcheck

View File

@@ -40,7 +40,7 @@ c_deb_security_repo=http://mirror.hetzner.de/debian/security
c_default_zfs_arc_max_mb=250 c_default_zfs_arc_max_mb=250
c_default_bpool_tweaks="-o ashift=12 -O compression=lz4" c_default_bpool_tweaks="-o ashift=12 -O compression=lz4"
c_default_rpool_tweaks="-o ashift=12 -O acltype=posixacl -O compression=lz4 -O dnodesize=auto -O relatime=on -O xattr=sa -O normalization=formD" c_default_rpool_tweaks="-o ashift=12 -O acltype=posixacl -O compression=zstd-9 -O dnodesize=auto -O relatime=on -O xattr=sa -O normalization=formD"
c_default_hostname=terem c_default_hostname=terem
c_zfs_mount_dir=/mnt c_zfs_mount_dir=/mnt
c_log_dir=$(dirname "$(mktemp)")/zfs-hetzner-vm c_log_dir=$(dirname "$(mktemp)")/zfs-hetzner-vm
@@ -62,7 +62,9 @@ function print_step_info_header {
############################################################################### ###############################################################################
# ${FUNCNAME[1]}" # ${FUNCNAME[1]}"
[[ "${1:-}" != "" ]] && echo -n " $1" || true if [[ "${1:-}" != "" ]]; then
echo -n " $1"
fi
echo " echo "
############################################################################### ###############################################################################
@@ -141,13 +143,13 @@ function initial_load_debian_zed_cache {
local success=0 local success=0
if [[ ! -e /mnt/etc/zfs/zfs-list.cache/rpool ]] || [[ -e /mnt/etc/zfs/zfs-list.cache/rpool && (( $(ls -l /mnt/etc/zfs/zfs-list.cache/rpool 2> /dev/null | cut -d ' ' -f 5) == 0 )) ]]; then if [[ ! -e /mnt/etc/zfs/zfs-list.cache/rpool ]] || [[ -e /mnt/etc/zfs/zfs-list.cache/rpool && (( $(find /mnt/etc/zfs/zfs-list.cache/rpool -type f -printf '%s' 2> /dev/null) == 0 )) ]]; then
chroot_execute "zfs set canmount=noauto rpool" chroot_execute "zfs set canmount=noauto rpool"
SECONDS=0 SECONDS=0
while (( SECONDS++ <= 120 )); do while (( SECONDS++ <= 120 )); do
if [[ -e /mnt/etc/zfs/zfs-list.cache/rpool ]] && (( "$(ls -l /mnt/etc/zfs/zfs-list.cache/rpool | cut -d ' ' -f 5)" > 0 )); then if [[ -e /mnt/etc/zfs/zfs-list.cache/rpool ]] && (( $(find /mnt/etc/zfs/zfs-list.cache/rpool -type f -printf '%s' 2> /dev/null) > 0 )); then
success=1 success=1
break break
else else
@@ -431,9 +433,8 @@ function unmount_and_export_fs {
zpools_exported=99 zpools_exported=99
echo "===========exporting zfs pools=============" echo "===========exporting zfs pools============="
set +e set +e
while (( zpools_exported == 99 )) && (( SECONDS++ <= 60 )); do while (( zpools_exported == 99 )) && (( SECONDS++ <= 60 )); do
zpool export -a 2> /dev/null if zpool export -a 2> /dev/null; then
if [[ $? == 0 ]]; then
zpools_exported=1 zpools_exported=1
echo "all zfs pools were succesfully exported" echo "all zfs pools were succesfully exported"
break; break;
@@ -499,7 +500,7 @@ echo "======= installing zfs on rescue system =========="
apt install --yes zfs-dkms zfsutils-linux apt install --yes zfs-dkms zfsutils-linux
add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main' add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
apt update apt update
find /usr/local/sbin/ -type l | xargs rm find /usr/local/sbin/ -type l -exec rm {} +
zfs --version zfs --version
echo "======= partitioning the disk ==========" echo "======= partitioning the disk =========="
@@ -540,12 +541,16 @@ echo "======= create zfs pools and datasets =========="
pools_mirror_option= pools_mirror_option=
fi fi
# shellcheck disable=SC2086
zpool create \ zpool create \
$v_bpool_tweaks -O canmount=off -O devices=off \ "$v_bpool_tweaks" -O canmount=off -O devices=off \
-o cachefile=/etc/zfs/zpool.cache \
-O mountpoint=/boot -R $c_zfs_mount_dir -f \ -O mountpoint=/boot -R $c_zfs_mount_dir -f \
$v_bpool_name $pools_mirror_option "${bpool_disks_partitions[@]}" $v_bpool_name $pools_mirror_option "${bpool_disks_partitions[@]}"
# shellcheck disable=SC2086
echo -n "$v_passphrase" | zpool create \ echo -n "$v_passphrase" | zpool create \
-o cachefile=/etc/zfs/zpool.cache \
$v_rpool_tweaks \ $v_rpool_tweaks \
"${encryption_options[@]}" \ "${encryption_options[@]}" \
-O mountpoint=/ -R $c_zfs_mount_dir -f \ -O mountpoint=/ -R $c_zfs_mount_dir -f \
@@ -728,25 +733,8 @@ chroot_execute "dpkg-reconfigure openssh-server -f noninteractive"
echo "======= set root password ==========" echo "======= set root password =========="
chroot_execute "echo root:$(printf "%q" "$v_root_password") | chpasswd" chroot_execute "echo root:$(printf "%q" "$v_root_password") | chpasswd"
echo "======= setting up zfs services ==========" echo "======= setting up zfs cache =========="
chroot_execute "cat > /etc/systemd/system/zfs-import-bpool.service <<UNIT cp /etc/zfs/zpool.cache /mnt/etc/zfs/zpool.cache
[Unit]
DefaultDependencies=no
Before=zfs-import-scan.service
Before=zfs-import-cache.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/sh -c '[ -f /etc/zfs/zpool.cache ] && mv /etc/zfs/zpool.cache /etc/zfs/preboot_zpool.cache || true'
ExecStart=/sbin/zpool import -N -o cachefile=none -d /dev/disk/by-id $v_bpool_name
ExecStartPost=/bin/sh -c '[ -f /etc/zfs/preboot_zpool.cache ] && mv /etc/zfs/preboot_zpool.cache /etc/zfs/zpool.cache || true'
[Install]
WantedBy=zfs-import.target
UNIT"
chroot_execute "systemctl enable zfs-import-bpool.service"
echo "========setting up zfs module parameters========" echo "========setting up zfs module parameters========"
chroot_execute "echo options zfs zfs_arc_max=$((v_zfs_arc_max_mb * 1024 * 1024)) >> /etc/modprobe.d/zfs.conf" chroot_execute "echo options zfs zfs_arc_max=$((v_zfs_arc_max_mb * 1024 * 1024)) >> /etc/modprobe.d/zfs.conf"
@@ -841,7 +829,7 @@ fi
echo "======= setting mountpoints ==========" echo "======= setting mountpoints =========="
chroot_execute "zfs set mountpoint=legacy $v_bpool_name/BOOT/debian" chroot_execute "zfs set mountpoint=legacy $v_bpool_name/BOOT/debian"
chroot_execute "echo $v_bpool_name/BOOT/debian /boot zfs nodev,relatime,x-systemd.requires=zfs-import-bpool.service 0 0 > /etc/fstab" chroot_execute "echo $v_bpool_name/BOOT/debian /boot zfs nodev,relatime,x-systemd.requires=zfs-mount.service,x-systemd.device-timeout=10 0 0 > /etc/fstab"
chroot_execute "zfs set mountpoint=legacy $v_rpool_name/var/log" chroot_execute "zfs set mountpoint=legacy $v_rpool_name/var/log"
chroot_execute "echo $v_rpool_name/var/log /var/log zfs nodev,relatime 0 0 >> /etc/fstab" chroot_execute "echo $v_rpool_name/var/log /var/log zfs nodev,relatime 0 0 >> /etc/fstab"
@@ -853,7 +841,9 @@ chroot_execute "zfs set mountpoint=legacy $v_rpool_name/tmp"
chroot_execute "echo $v_rpool_name/tmp /tmp zfs nodev,relatime 0 0 >> /etc/fstab" chroot_execute "echo $v_rpool_name/tmp /tmp zfs nodev,relatime 0 0 >> /etc/fstab"
echo "========= add swap, if defined" echo "========= add swap, if defined"
[[ $v_swap_size -gt 0 ]] && chroot_execute "echo /dev/zvol/$v_rpool_name/swap none swap discard 0 0 >> /etc/fstab" || true if [[ $v_swap_size -gt 0 ]]; then
chroot_execute "echo /dev/zvol/$v_rpool_name/swap none swap discard 0 0 >> /etc/fstab"
fi
chroot_execute "echo RESUME=none > /etc/initramfs-tools/conf.d/resume" chroot_execute "echo RESUME=none > /etc/initramfs-tools/conf.d/resume"
echo "======= unmounting filesystems and zfs pools ==========" echo "======= unmounting filesystems and zfs pools =========="

View File

@@ -62,7 +62,10 @@ function print_step_info_header {
############################################################################### ###############################################################################
# ${FUNCNAME[1]}" # ${FUNCNAME[1]}"
[[ "${1:-}" != "" ]] && echo -n " $1" || true if [[ "${1:-}" != "" ]]; then
echo -n " $1"
fi
echo " echo "
############################################################################### ###############################################################################
@@ -141,13 +144,13 @@ function initial_load_debian_zed_cache {
local success=0 local success=0
if [[ ! -e /mnt/etc/zfs/zfs-list.cache/rpool ]] || [[ -e /mnt/etc/zfs/zfs-list.cache/rpool && (( $(ls -l /mnt/etc/zfs/zfs-list.cache/rpool 2> /dev/null | cut -d ' ' -f 5) == 0 )) ]]; then if [[ ! -e /mnt/etc/zfs/zfs-list.cache/rpool ]] || [[ -e /mnt/etc/zfs/zfs-list.cache/rpool && (( $(find /mnt/etc/zfs/zfs-list.cache/rpool -type f -printf '%s' 2> /dev/null) == 0 )) ]]; then
chroot_execute "zfs set canmount=noauto rpool" chroot_execute "zfs set canmount=noauto rpool"
SECONDS=0 SECONDS=0
while (( SECONDS++ <= 120 )); do while (( SECONDS++ <= 120 )); do
if [[ -e /mnt/etc/zfs/zfs-list.cache/rpool ]] && (( "$(ls -l /mnt/etc/zfs/zfs-list.cache/rpool | cut -d ' ' -f 5)" > 0 )); then if [[ -e /mnt/etc/zfs/zfs-list.cache/rpool ]] && (( $(find /mnt/etc/zfs/zfs-list.cache/rpool -type f -printf '%s' 2> /dev/null) > 0 )); then
success=1 success=1
break break
else else
@@ -431,9 +434,8 @@ function unmount_and_export_fs {
zpools_exported=99 zpools_exported=99
echo "===========exporting zfs pools=============" echo "===========exporting zfs pools============="
set +e set +e
while (( zpools_exported == 99 )) && (( SECONDS++ <= 60 )); do while (( zpools_exported == 99 )) && (( SECONDS++ <= 60 )); do
zpool export -a 2> /dev/null if zpool export -a 2> /dev/null; then
if [[ $? == 0 ]]; then
zpools_exported=1 zpools_exported=1
echo "all zfs pools were succesfully exported" echo "all zfs pools were succesfully exported"
break; break;
@@ -499,7 +501,7 @@ echo "======= installing zfs on rescue system =========="
apt install --yes zfs-dkms zfsutils-linux apt install --yes zfs-dkms zfsutils-linux
add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main' add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
apt update apt update
find /usr/local/sbin/ -type l | xargs rm find /usr/local/sbin/ -type l -exec rm {} +
zfs --version zfs --version
echo "======= partitioning the disk ==========" echo "======= partitioning the disk =========="
@@ -540,13 +542,17 @@ echo "======= create zfs pools and datasets =========="
pools_mirror_option= pools_mirror_option=
fi fi
# shellcheck disable=SC2086
zpool create \ zpool create \
$v_bpool_tweaks -O canmount=off -O devices=off \ $v_bpool_tweaks -O canmount=off -O devices=off \
-o cachefile=/etc/zfs/zpool.cache \
-O mountpoint=/boot -R $c_zfs_mount_dir -f \ -O mountpoint=/boot -R $c_zfs_mount_dir -f \
$v_bpool_name $pools_mirror_option "${bpool_disks_partitions[@]}" $v_bpool_name $pools_mirror_option "${bpool_disks_partitions[@]}"
# shellcheck disable=SC2086
echo -n "$v_passphrase" | zpool create \ echo -n "$v_passphrase" | zpool create \
$v_rpool_tweaks \ $v_rpool_tweaks \
-o cachefile=/etc/zfs/zpool.cache \
"${encryption_options[@]}" \ "${encryption_options[@]}" \
-O mountpoint=/ -R $c_zfs_mount_dir -f \ -O mountpoint=/ -R $c_zfs_mount_dir -f \
$v_rpool_name $pools_mirror_option "${rpool_disks_partitions[@]}" $v_rpool_name $pools_mirror_option "${rpool_disks_partitions[@]}"
@@ -728,25 +734,9 @@ chroot_execute "dpkg-reconfigure openssh-server -f noninteractive"
echo "======= set root password ==========" echo "======= set root password =========="
chroot_execute "echo root:$(printf "%q" "$v_root_password") | chpasswd" chroot_execute "echo root:$(printf "%q" "$v_root_password") | chpasswd"
echo "======= setting up zfs services ==========" echo "======= setting up zfs cache =========="
chroot_execute "cat > /etc/systemd/system/zfs-import-bpool.service <<UNIT
[Unit]
DefaultDependencies=no
Before=zfs-import-scan.service
Before=zfs-import-cache.service
[Service] cp /etc/zfs/zpool.cache /mnt/etc/zfs/zpool.cache
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/sh -c '[ -f /etc/zfs/zpool.cache ] && mv /etc/zfs/zpool.cache /etc/zfs/preboot_zpool.cache || true'
ExecStart=/sbin/zpool import -N -o cachefile=none -d /dev/disk/by-id $v_bpool_name
ExecStartPost=/bin/sh -c '[ -f /etc/zfs/preboot_zpool.cache ] && mv /etc/zfs/preboot_zpool.cache /etc/zfs/zpool.cache || true'
[Install]
WantedBy=zfs-import.target
UNIT"
chroot_execute "systemctl enable zfs-import-bpool.service"
echo "========setting up zfs module parameters========" echo "========setting up zfs module parameters========"
chroot_execute "echo options zfs zfs_arc_max=$((v_zfs_arc_max_mb * 1024 * 1024)) >> /etc/modprobe.d/zfs.conf" chroot_execute "echo options zfs zfs_arc_max=$((v_zfs_arc_max_mb * 1024 * 1024)) >> /etc/modprobe.d/zfs.conf"
@@ -844,7 +834,7 @@ fi
echo "======= setting mountpoints ==========" echo "======= setting mountpoints =========="
chroot_execute "zfs set mountpoint=legacy $v_bpool_name/BOOT/debian" chroot_execute "zfs set mountpoint=legacy $v_bpool_name/BOOT/debian"
chroot_execute "echo $v_bpool_name/BOOT/debian /boot zfs nodev,relatime,x-systemd.requires=zfs-import-bpool.service 0 0 > /etc/fstab" chroot_execute "echo $v_bpool_name/BOOT/debian /boot zfs nodev,relatime,x-systemd.requires=zfs-mount.service,x-systemd.device-timeout=10 0 0 > /etc/fstab"
chroot_execute "zfs set mountpoint=legacy $v_rpool_name/var/log" chroot_execute "zfs set mountpoint=legacy $v_rpool_name/var/log"
chroot_execute "echo $v_rpool_name/var/log /var/log zfs nodev,relatime 0 0 >> /etc/fstab" chroot_execute "echo $v_rpool_name/var/log /var/log zfs nodev,relatime 0 0 >> /etc/fstab"
@@ -856,7 +846,10 @@ chroot_execute "zfs set mountpoint=legacy $v_rpool_name/tmp"
chroot_execute "echo $v_rpool_name/tmp /tmp zfs nodev,relatime 0 0 >> /etc/fstab" chroot_execute "echo $v_rpool_name/tmp /tmp zfs nodev,relatime 0 0 >> /etc/fstab"
echo "========= add swap, if defined" echo "========= add swap, if defined"
[[ $v_swap_size -gt 0 ]] && chroot_execute "echo /dev/zvol/$v_rpool_name/swap none swap discard 0 0 >> /etc/fstab" || true if [[ $v_swap_size -gt 0 ]]; then
chroot_execute "echo /dev/zvol/$v_rpool_name/swap none swap discard 0 0 >> /etc/fstab"
fi
chroot_execute "echo RESUME=none > /etc/initramfs-tools/conf.d/resume" chroot_execute "echo RESUME=none > /etc/initramfs-tools/conf.d/resume"
echo "======= unmounting filesystems and zfs pools ==========" echo "======= unmounting filesystems and zfs pools =========="

View File

@@ -40,7 +40,7 @@ c_deb_security_repo=http://mirror.hetzner.de/ubuntu/security
c_default_zfs_arc_max_mb=250 c_default_zfs_arc_max_mb=250
c_default_bpool_tweaks="-o ashift=12 -O compression=lz4" c_default_bpool_tweaks="-o ashift=12 -O compression=lz4"
c_default_rpool_tweaks="-o ashift=12 -O acltype=posixacl -O compression=lz4 -O dnodesize=auto -O relatime=on -O xattr=sa -O normalization=formD" c_default_rpool_tweaks="-o ashift=12 -O acltype=posixacl -O compression=zstd-9 -O dnodesize=auto -O relatime=on -O xattr=sa -O normalization=formD"
c_default_hostname=terem c_default_hostname=terem
c_zfs_mount_dir=/mnt c_zfs_mount_dir=/mnt
c_log_dir=$(dirname "$(mktemp)")/zfs-hetzner-vm c_log_dir=$(dirname "$(mktemp)")/zfs-hetzner-vm
@@ -62,7 +62,9 @@ function print_step_info_header {
############################################################################### ###############################################################################
# ${FUNCNAME[1]}" # ${FUNCNAME[1]}"
[[ "${1:-}" != "" ]] && echo -n " $1" || true if [[ "${1:-}" != "" ]]; then
echo -n " $1"
fi
echo " echo "
############################################################################### ###############################################################################
@@ -399,8 +401,8 @@ function unmount_and_export_fs {
echo "===========exporting zfs pools=============" echo "===========exporting zfs pools============="
set +e set +e
while (( zpools_exported == 99 )) && (( SECONDS++ <= 60 )); do while (( zpools_exported == 99 )) && (( SECONDS++ <= 60 )); do
zpool export -a 2> /dev/null
if [[ $? == 0 ]]; then if zpool export -a 2> /dev/null; then
zpools_exported=1 zpools_exported=1
echo "all zfs pools were succesfully exported" echo "all zfs pools were succesfully exported"
break; break;
@@ -466,7 +468,7 @@ echo "======= installing zfs on rescue system =========="
apt install --yes zfs-dkms zfsutils-linux apt install --yes zfs-dkms zfsutils-linux
add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main' add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
apt update apt update
find /usr/local/sbin/ -type l | xargs rm find /usr/local/sbin/ -type l -exec rm {} +
zfs --version zfs --version
echo "======= partitioning the disk ==========" echo "======= partitioning the disk =========="
@@ -507,13 +509,17 @@ echo "======= create zfs pools and datasets =========="
pools_mirror_option= pools_mirror_option=
fi fi
# shellcheck disable=SC2086
zpool create \ zpool create \
$v_bpool_tweaks -O canmount=off -O devices=off \ $v_bpool_tweaks -O canmount=off -O devices=off \
-o cachefile=/etc/zfs/zpool.cache \
-O mountpoint=/boot -R $c_zfs_mount_dir -f \ -O mountpoint=/boot -R $c_zfs_mount_dir -f \
$v_bpool_name $pools_mirror_option "${bpool_disks_partitions[@]}" $v_bpool_name $pools_mirror_option "${bpool_disks_partitions[@]}"
# shellcheck disable=SC2086
echo -n "$v_passphrase" | zpool create \ echo -n "$v_passphrase" | zpool create \
$v_rpool_tweaks \ $v_rpool_tweaks \
-o cachefile=/etc/zfs/zpool.cache \
"${encryption_options[@]}" \ "${encryption_options[@]}" \
-O mountpoint=/ -R $c_zfs_mount_dir -f \ -O mountpoint=/ -R $c_zfs_mount_dir -f \
$v_rpool_name $pools_mirror_option "${rpool_disks_partitions[@]}" $v_rpool_name $pools_mirror_option "${rpool_disks_partitions[@]}"
@@ -710,25 +716,8 @@ chroot_execute "dpkg-reconfigure openssh-server -f noninteractive"
echo "======= set root password ==========" echo "======= set root password =========="
chroot_execute "echo root:$(printf "%q" "$v_root_password") | chpasswd" chroot_execute "echo root:$(printf "%q" "$v_root_password") | chpasswd"
echo "======= setting up zfs services ==========" echo "======= setting up zfs cache =========="
chroot_execute "cat > /etc/systemd/system/zfs-import-bpool.service <<UNIT cp /etc/zfs/zpool.cache /mnt/etc/zfs/zpool.cache
[Unit]
DefaultDependencies=no
Before=zfs-import-scan.service
Before=zfs-import-cache.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/sh -c '[ -f /etc/zfs/zpool.cache ] && mv /etc/zfs/zpool.cache /etc/zfs/preboot_zpool.cache || true'
ExecStart=/sbin/zpool import -N -o cachefile=none $v_bpool_name
ExecStartPost=/bin/sh -c '[ -f /etc/zfs/preboot_zpool.cache ] && mv /etc/zfs/preboot_zpool.cache /etc/zfs/zpool.cache || true'
[Install]
WantedBy=zfs-import.target
UNIT"
chroot_execute "systemctl enable zfs-import-bpool.service"
echo "========setting up zfs module parameters========" echo "========setting up zfs module parameters========"
chroot_execute "echo options zfs zfs_arc_max=$((v_zfs_arc_max_mb * 1024 * 1024)) >> /etc/modprobe.d/zfs.conf" chroot_execute "echo options zfs zfs_arc_max=$((v_zfs_arc_max_mb * 1024 * 1024)) >> /etc/modprobe.d/zfs.conf"
@@ -833,7 +822,7 @@ chroot_execute "zfs set canmount=noauto rpool"
echo "======= setting mountpoints ==========" echo "======= setting mountpoints =========="
chroot_execute "zfs set mountpoint=legacy $v_bpool_name/BOOT/ubuntu" chroot_execute "zfs set mountpoint=legacy $v_bpool_name/BOOT/ubuntu"
chroot_execute "echo $v_bpool_name/BOOT/ubuntu /boot zfs nodev,relatime,x-systemd.requires=zfs-import-bpool.service 0 0 > /etc/fstab" chroot_execute "echo $v_bpool_name/BOOT/ubuntu /boot zfs nodev,relatime,x-systemd.requires=zfs-mount.service,x-systemd.device-timeout=10 0 0 > /etc/fstab"
chroot_execute "zfs set mountpoint=legacy $v_rpool_name/var/log" chroot_execute "zfs set mountpoint=legacy $v_rpool_name/var/log"
chroot_execute "echo $v_rpool_name/var/log /var/log zfs nodev,relatime 0 0 >> /etc/fstab" chroot_execute "echo $v_rpool_name/var/log /var/log zfs nodev,relatime 0 0 >> /etc/fstab"
@@ -845,7 +834,10 @@ chroot_execute "zfs set mountpoint=legacy $v_rpool_name/tmp"
chroot_execute "echo $v_rpool_name/tmp /tmp zfs nodev,relatime 0 0 >> /etc/fstab" chroot_execute "echo $v_rpool_name/tmp /tmp zfs nodev,relatime 0 0 >> /etc/fstab"
echo "========= add swap, if defined" echo "========= add swap, if defined"
[[ $v_swap_size -gt 0 ]] && chroot_execute "echo /dev/zvol/$v_rpool_name/swap none swap discard 0 0 >> /etc/fstab" || true if [[ $v_swap_size -gt 0 ]]; then
chroot_execute "echo /dev/zvol/$v_rpool_name/swap none swap discard 0 0 >> /etc/fstab"
fi
chroot_execute "echo RESUME=none > /etc/initramfs-tools/conf.d/resume" chroot_execute "echo RESUME=none > /etc/initramfs-tools/conf.d/resume"
echo "======= unmounting filesystems and zfs pools ==========" echo "======= unmounting filesystems and zfs pools =========="

View File

@@ -40,7 +40,7 @@ c_deb_security_repo=http://mirror.hetzner.de/ubuntu/security
c_default_zfs_arc_max_mb=250 c_default_zfs_arc_max_mb=250
c_default_bpool_tweaks="-o ashift=12 -O compression=lz4" c_default_bpool_tweaks="-o ashift=12 -O compression=lz4"
c_default_rpool_tweaks="-o ashift=12 -O acltype=posixacl -O compression=lz4 -O dnodesize=auto -O relatime=on -O xattr=sa -O normalization=formD" c_default_rpool_tweaks="-o ashift=12 -O acltype=posixacl -O compression=zstd-9 -O dnodesize=auto -O relatime=on -O xattr=sa -O normalization=formD"
c_default_hostname=terem c_default_hostname=terem
c_zfs_mount_dir=/mnt c_zfs_mount_dir=/mnt
c_log_dir=$(dirname "$(mktemp)")/zfs-hetzner-vm c_log_dir=$(dirname "$(mktemp)")/zfs-hetzner-vm
@@ -62,7 +62,9 @@ function print_step_info_header {
############################################################################### ###############################################################################
# ${FUNCNAME[1]}" # ${FUNCNAME[1]}"
[[ "${1:-}" != "" ]] && echo -n " $1" || true if [[ "${1:-}" != "" ]]; then
echo -n " $1"
fi
echo " echo "
############################################################################### ###############################################################################
@@ -399,8 +401,8 @@ function unmount_and_export_fs {
echo "===========exporting zfs pools=============" echo "===========exporting zfs pools============="
set +e set +e
while (( zpools_exported == 99 )) && (( SECONDS++ <= 60 )); do while (( zpools_exported == 99 )) && (( SECONDS++ <= 60 )); do
zpool export -a 2> /dev/null
if [[ $? == 0 ]]; then if zpool export -a 2> /dev/null; then
zpools_exported=1 zpools_exported=1
echo "all zfs pools were succesfully exported" echo "all zfs pools were succesfully exported"
break; break;
@@ -466,7 +468,7 @@ echo "======= installing zfs on rescue system =========="
apt install --yes zfs-dkms zfsutils-linux apt install --yes zfs-dkms zfsutils-linux
add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main' add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
apt update apt update
find /usr/local/sbin/ -type l | xargs rm find /usr/local/sbin/ -type l -exec rm {} +
zfs --version zfs --version
echo "======= partitioning the disk ==========" echo "======= partitioning the disk =========="
@@ -507,13 +509,17 @@ echo "======= create zfs pools and datasets =========="
pools_mirror_option= pools_mirror_option=
fi fi
# shellcheck disable=SC2086
zpool create \ zpool create \
$v_bpool_tweaks -O canmount=off -O devices=off \ $v_bpool_tweaks -O canmount=off -O devices=off \
-o cachefile=/etc/zfs/zpool.cache \
-O mountpoint=/boot -R $c_zfs_mount_dir -f \ -O mountpoint=/boot -R $c_zfs_mount_dir -f \
$v_bpool_name $pools_mirror_option "${bpool_disks_partitions[@]}" $v_bpool_name $pools_mirror_option "${bpool_disks_partitions[@]}"
# shellcheck disable=SC2086
echo -n "$v_passphrase" | zpool create \ echo -n "$v_passphrase" | zpool create \
$v_rpool_tweaks \ $v_rpool_tweaks \
-o cachefile=/etc/zfs/zpool.cache \
"${encryption_options[@]}" \ "${encryption_options[@]}" \
-O mountpoint=/ -R $c_zfs_mount_dir -f \ -O mountpoint=/ -R $c_zfs_mount_dir -f \
$v_rpool_name $pools_mirror_option "${rpool_disks_partitions[@]}" $v_rpool_name $pools_mirror_option "${rpool_disks_partitions[@]}"
@@ -711,25 +717,8 @@ chroot_execute "dpkg-reconfigure openssh-server -f noninteractive"
echo "======= set root password ==========" echo "======= set root password =========="
chroot_execute "echo root:$(printf "%q" "$v_root_password") | chpasswd" chroot_execute "echo root:$(printf "%q" "$v_root_password") | chpasswd"
echo "======= setting up zfs services ==========" echo "======= setting up zfs cache =========="
chroot_execute "cat > /etc/systemd/system/zfs-import-bpool.service <<UNIT cp /etc/zfs/zpool.cache /mnt/etc/zfs/zpool.cache
[Unit]
DefaultDependencies=no
Before=zfs-import-scan.service
Before=zfs-import-cache.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/sh -c '[ -f /etc/zfs/zpool.cache ] && mv /etc/zfs/zpool.cache /etc/zfs/preboot_zpool.cache || true'
ExecStart=/sbin/zpool import -N -o cachefile=none $v_bpool_name
ExecStartPost=/bin/sh -c '[ -f /etc/zfs/preboot_zpool.cache ] && mv /etc/zfs/preboot_zpool.cache /etc/zfs/zpool.cache || true'
[Install]
WantedBy=zfs-import.target
UNIT"
chroot_execute "systemctl enable zfs-import-bpool.service"
echo "========setting up zfs module parameters========" echo "========setting up zfs module parameters========"
chroot_execute "echo options zfs zfs_arc_max=$((v_zfs_arc_max_mb * 1024 * 1024)) >> /etc/modprobe.d/zfs.conf" chroot_execute "echo options zfs zfs_arc_max=$((v_zfs_arc_max_mb * 1024 * 1024)) >> /etc/modprobe.d/zfs.conf"
@@ -834,7 +823,7 @@ chroot_execute "zfs set canmount=noauto rpool"
echo "======= setting mountpoints ==========" echo "======= setting mountpoints =========="
chroot_execute "zfs set mountpoint=legacy $v_bpool_name/BOOT/ubuntu" chroot_execute "zfs set mountpoint=legacy $v_bpool_name/BOOT/ubuntu"
chroot_execute "echo $v_bpool_name/BOOT/ubuntu /boot zfs nodev,relatime,x-systemd.requires=zfs-import-bpool.service 0 0 > /etc/fstab" chroot_execute "echo $v_bpool_name/BOOT/ubuntu /boot zfs nodev,relatime,x-systemd.requires=zfs-mount.service,x-systemd.device-timeout=10 0 0 > /etc/fstab"
chroot_execute "zfs set mountpoint=legacy $v_rpool_name/var/log" chroot_execute "zfs set mountpoint=legacy $v_rpool_name/var/log"
chroot_execute "echo $v_rpool_name/var/log /var/log zfs nodev,relatime 0 0 >> /etc/fstab" chroot_execute "echo $v_rpool_name/var/log /var/log zfs nodev,relatime 0 0 >> /etc/fstab"
@@ -846,7 +835,10 @@ chroot_execute "zfs set mountpoint=legacy $v_rpool_name/tmp"
chroot_execute "echo $v_rpool_name/tmp /tmp zfs nodev,relatime 0 0 >> /etc/fstab" chroot_execute "echo $v_rpool_name/tmp /tmp zfs nodev,relatime 0 0 >> /etc/fstab"
echo "========= add swap, if defined" echo "========= add swap, if defined"
[[ $v_swap_size -gt 0 ]] && chroot_execute "echo /dev/zvol/$v_rpool_name/swap none swap discard 0 0 >> /etc/fstab" || true if [[ $v_swap_size -gt 0 ]]; then
chroot_execute "echo /dev/zvol/$v_rpool_name/swap none swap discard 0 0 >> /etc/fstab"
fi
chroot_execute "echo RESUME=none > /etc/initramfs-tools/conf.d/resume" chroot_execute "echo RESUME=none > /etc/initramfs-tools/conf.d/resume"
echo "======= unmounting filesystems and zfs pools ==========" echo "======= unmounting filesystems and zfs pools =========="