mirror of
https://github.com/terem42/zfs-hetzner-vm.git
synced 2025-12-23 07:18:37 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
75cfc601d8 |
@@ -1,6 +1,6 @@
|
|||||||
# zfs-hetzner-vm
|
# zfs-hetzner-vm
|
||||||
|
|
||||||
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 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.
|
||||||
|
|
||||||
## How to use:
|
## How to use:
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ This script will prepare the ZFS pools, then install and configure minimal Debia
|
|||||||
The script with minimal changes may be used on any other hosting provider supporting KVM virtualization and offering Debian-based rescue system.
|
The script with minimal changes may be used on any other hosting provider supporting KVM virtualization and offering Debian-based rescue system.
|
||||||
In order to stop the procedure, hit Esc twice during dialogs (excluding yes/no ones), or Ctrl+C while any operation is running.
|
In order to stop the procedure, hit Esc twice during dialogs (excluding yes/no ones), or Ctrl+C while any operation is running.
|
||||||
'
|
'
|
||||||
dialog --msgbox "$dialog_message" 30 100
|
dialog --ascii-lines --msgbox "$dialog_message" 30 100
|
||||||
}
|
}
|
||||||
|
|
||||||
function store_os_distro_information {
|
function store_os_distro_information {
|
||||||
@@ -210,7 +210,7 @@ LOG
|
|||||||
|
|
||||||
If you think this is a bug, please open an issue on https://github.com/terem42/zfs-hetzner-vm/issues, and attach the file `'"$c_disks_log"'`.
|
If you think this is a bug, please open an issue on https://github.com/terem42/zfs-hetzner-vm/issues, and attach the file `'"$c_disks_log"'`.
|
||||||
'
|
'
|
||||||
dialog --msgbox "$dialog_message" 30 100
|
dialog --ascii-lines --msgbox "$dialog_message" 30 100
|
||||||
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -239,7 +239,7 @@ function select_disks {
|
|||||||
|
|
||||||
Devices with mounted partitions, cdroms, and removable devices are not displayed!
|
Devices with mounted partitions, cdroms, and removable devices are not displayed!
|
||||||
"
|
"
|
||||||
mapfile -t v_selected_disks < <(dialog --separate-output --checklist "$dialog_message" 30 100 $((${#menu_entries_option[@]} / 3)) "${menu_entries_option[@]}" 3>&1 1>&2 2>&3)
|
mapfile -t v_selected_disks < <(dialog --ascii-lines --separate-output --checklist "$dialog_message" 30 100 $((${#menu_entries_option[@]} / 3)) "${menu_entries_option[@]}" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
if [[ ${#v_selected_disks[@]} -gt 0 ]]; then
|
if [[ ${#v_selected_disks[@]} -gt 0 ]]; then
|
||||||
break
|
break
|
||||||
@@ -256,7 +256,7 @@ function ask_swap_size {
|
|||||||
local swap_size_invalid_message=
|
local swap_size_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_swap_size =~ ^[0-9]+$ ]]; do
|
while [[ ! $v_swap_size =~ ^[0-9]+$ ]]; do
|
||||||
v_swap_size=$(dialog --inputbox "${swap_size_invalid_message}Enter the swap size in GiB (0 for no swap):" 30 100 2 3>&1 1>&2 2>&3)
|
v_swap_size=$(dialog --ascii-lines --inputbox "${swap_size_invalid_message}Enter the swap size in GiB (0 for no swap):" 30 100 2 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
swap_size_invalid_message="Invalid swap size! "
|
swap_size_invalid_message="Invalid swap size! "
|
||||||
done
|
done
|
||||||
@@ -271,7 +271,7 @@ function ask_free_tail_space {
|
|||||||
local tail_space_invalid_message=
|
local tail_space_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_free_tail_space =~ ^[0-9]+$ ]]; do
|
while [[ ! $v_free_tail_space =~ ^[0-9]+$ ]]; do
|
||||||
v_free_tail_space=$(dialog --inputbox "${tail_space_invalid_message}Enter the space to leave at the end of each disk (0 for none):" 30 100 0 3>&1 1>&2 2>&3)
|
v_free_tail_space=$(dialog --ascii-lines --inputbox "${tail_space_invalid_message}Enter the space to leave at the end of each disk (0 for none):" 30 100 0 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
tail_space_invalid_message="Invalid size! "
|
tail_space_invalid_message="Invalid size! "
|
||||||
done
|
done
|
||||||
@@ -286,7 +286,7 @@ function ask_zfs_arc_max_size {
|
|||||||
local zfs_arc_max_invalid_message=
|
local zfs_arc_max_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_zfs_arc_max_mb =~ ^[0-9]+$ ]]; do
|
while [[ ! $v_zfs_arc_max_mb =~ ^[0-9]+$ ]]; do
|
||||||
v_zfs_arc_max_mb=$(dialog --inputbox "${zfs_arc_max_invalid_message}Enter ZFS ARC cache max size in Mb (minimum 64Mb, enter 0 for ZFS default value, the default will take up to 50% of memory):" 30 100 "$c_default_zfs_arc_max_mb" 3>&1 1>&2 2>&3)
|
v_zfs_arc_max_mb=$(dialog --ascii-lines --inputbox "${zfs_arc_max_invalid_message}Enter ZFS ARC cache max size in Mb (minimum 64Mb, enter 0 for ZFS default value, the default will take up to 50% of memory):" 30 100 "$c_default_zfs_arc_max_mb" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
zfs_arc_max_invalid_message="Invalid size! "
|
zfs_arc_max_invalid_message="Invalid size! "
|
||||||
done
|
done
|
||||||
@@ -302,14 +302,14 @@ function ask_pool_names {
|
|||||||
local bpool_name_invalid_message=
|
local bpool_name_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_bpool_name =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
while [[ ! $v_bpool_name =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
||||||
v_bpool_name=$(dialog --inputbox "${bpool_name_invalid_message}Insert the name for the boot pool" 30 100 bpool 3>&1 1>&2 2>&3)
|
v_bpool_name=$(dialog --ascii-lines --inputbox "${bpool_name_invalid_message}Insert the name for the boot pool" 30 100 bpool 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
bpool_name_invalid_message="Invalid pool name! "
|
bpool_name_invalid_message="Invalid pool name! "
|
||||||
done
|
done
|
||||||
local rpool_name_invalid_message=
|
local rpool_name_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_rpool_name =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
while [[ ! $v_rpool_name =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
||||||
v_rpool_name=$(dialog --inputbox "${rpool_name_invalid_message}Insert the name for the root pool" 30 100 rpool 3>&1 1>&2 2>&3)
|
v_rpool_name=$(dialog --ascii-lines --inputbox "${rpool_name_invalid_message}Insert the name for the root pool" 30 100 rpool 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
rpool_name_invalid_message="Invalid pool name! "
|
rpool_name_invalid_message="Invalid pool name! "
|
||||||
done
|
done
|
||||||
@@ -321,8 +321,8 @@ function ask_pool_tweaks {
|
|||||||
# shellcheck disable=SC2119
|
# shellcheck disable=SC2119
|
||||||
print_step_info_header
|
print_step_info_header
|
||||||
|
|
||||||
v_bpool_tweaks=$(dialog --inputbox "Insert the tweaks for the boot pool" 30 100 -- "$c_default_bpool_tweaks" 3>&1 1>&2 2>&3)
|
v_bpool_tweaks=$(dialog --ascii-lines --inputbox "Insert the tweaks for the boot pool" 30 100 -- "$c_default_bpool_tweaks" 3>&1 1>&2 2>&3)
|
||||||
v_rpool_tweaks=$(dialog --inputbox "Insert the tweaks for the root pool" 30 100 -- "$c_default_rpool_tweaks" 3>&1 1>&2 2>&3)
|
v_rpool_tweaks=$(dialog --ascii-lines --inputbox "Insert the tweaks for the root pool" 30 100 -- "$c_default_rpool_tweaks" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
print_variables v_bpool_tweaks v_rpool_tweaks
|
print_variables v_bpool_tweaks v_rpool_tweaks
|
||||||
}
|
}
|
||||||
@@ -337,8 +337,8 @@ function ask_root_password {
|
|||||||
local password_repeat=-
|
local password_repeat=-
|
||||||
|
|
||||||
while [[ "$v_root_password" != "$password_repeat" || "$v_root_password" == "" ]]; do
|
while [[ "$v_root_password" != "$password_repeat" || "$v_root_password" == "" ]]; do
|
||||||
v_root_password=$(dialog --passwordbox "${password_invalid_message}Please enter the root account password (can't be empty):" 30 100 3>&1 1>&2 2>&3)
|
v_root_password=$(dialog --ascii-lines --passwordbox "${password_invalid_message}Please enter the root account password (can't be empty):" 30 100 3>&1 1>&2 2>&3)
|
||||||
password_repeat=$(dialog --passwordbox "Please repeat the password:" 30 100 3>&1 1>&2 2>&3)
|
password_repeat=$(dialog --ascii-lines --passwordbox "Please repeat the password:" 30 100 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
password_invalid_message="Passphrase empty, or not matching! "
|
password_invalid_message="Passphrase empty, or not matching! "
|
||||||
done
|
done
|
||||||
@@ -348,7 +348,7 @@ function ask_root_password {
|
|||||||
function ask_encryption {
|
function ask_encryption {
|
||||||
print_step_info_header
|
print_step_info_header
|
||||||
|
|
||||||
if dialog --defaultno --yesno 'Do you want to encrypt the root pool?' 30 100; then
|
if dialog --ascii-lines --yesno 'Do you want to encrypt the root pool?' 30 100; then
|
||||||
v_encrypt_rpool=1
|
v_encrypt_rpool=1
|
||||||
fi
|
fi
|
||||||
set +x
|
set +x
|
||||||
@@ -356,8 +356,8 @@ function ask_encryption {
|
|||||||
local passphrase_invalid_message=
|
local passphrase_invalid_message=
|
||||||
local passphrase_repeat=-
|
local passphrase_repeat=-
|
||||||
while [[ "$v_passphrase" != "$passphrase_repeat" || ${#v_passphrase} -lt 8 ]]; do
|
while [[ "$v_passphrase" != "$passphrase_repeat" || ${#v_passphrase} -lt 8 ]]; do
|
||||||
v_passphrase=$(dialog --passwordbox "${passphrase_invalid_message}Please enter the passphrase for the root pool (8 chars min.):" 30 100 3>&1 1>&2 2>&3)
|
v_passphrase=$(dialog --ascii-lines --passwordbox "${passphrase_invalid_message}Please enter the passphrase for the root pool (8 chars min.):" 30 100 3>&1 1>&2 2>&3)
|
||||||
passphrase_repeat=$(dialog --passwordbox "Please repeat the passphrase:" 30 100 3>&1 1>&2 2>&3)
|
passphrase_repeat=$(dialog --ascii-lines --passwordbox "Please repeat the passphrase:" 30 100 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
passphrase_invalid_message="Passphrase too short, or not matching! "
|
passphrase_invalid_message="Passphrase too short, or not matching! "
|
||||||
done
|
done
|
||||||
@@ -368,7 +368,7 @@ function ask_encryption {
|
|||||||
function ask_zfs_experimental {
|
function ask_zfs_experimental {
|
||||||
print_step_info_header
|
print_step_info_header
|
||||||
|
|
||||||
if dialog --defaultno --yesno 'Do you want to use experimental zfs module build?' 30 100; then
|
if dialog --ascii-lines --yesno 'Do you want to use experimental zfs module build?' 30 100; then
|
||||||
v_zfs_experimental=1
|
v_zfs_experimental=1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -380,7 +380,7 @@ function ask_hostname {
|
|||||||
local hostname_invalid_message=
|
local hostname_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_hostname =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
while [[ ! $v_hostname =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
||||||
v_hostname=$(dialog --inputbox "${hostname_invalid_message}Set the host name" 30 100 "$c_default_hostname" 3>&1 1>&2 2>&3)
|
v_hostname=$(dialog --ascii-lines --inputbox "${hostname_invalid_message}Set the host name" 30 100 "$c_default_hostname" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
hostname_invalid_message="Invalid host name! "
|
hostname_invalid_message="Invalid host name! "
|
||||||
done
|
done
|
||||||
@@ -450,7 +450,6 @@ function unmount_and_export_fs {
|
|||||||
|
|
||||||
#################### MAIN ################################
|
#################### MAIN ################################
|
||||||
export LC_ALL=en_US.UTF-8
|
export LC_ALL=en_US.UTF-8
|
||||||
export NCURSES_NO_UTF8_ACS=1
|
|
||||||
|
|
||||||
check_prerequisites
|
check_prerequisites
|
||||||
|
|
||||||
@@ -492,14 +491,10 @@ done
|
|||||||
|
|
||||||
echo "======= installing zfs on rescue system =========="
|
echo "======= installing zfs on rescue system =========="
|
||||||
echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections
|
echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections
|
||||||
apt-get install --yes software-properties-common
|
|
||||||
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8CF63AD3F06FC659
|
|
||||||
add-apt-repository 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
|
|
||||||
apt update
|
apt update
|
||||||
apt install --yes zfs-dkms zfsutils-linux
|
apt install --yes -t buster-backports libelf-dev zfs-dkms
|
||||||
add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
|
modprobe zfs
|
||||||
apt update
|
|
||||||
find /usr/local/sbin/ -type l | xargs rm
|
|
||||||
zfs --version
|
zfs --version
|
||||||
|
|
||||||
echo "======= partitioning the disk =========="
|
echo "======= partitioning the disk =========="
|
||||||
@@ -511,7 +506,7 @@ echo "======= partitioning the disk =========="
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
for selected_disk in "${v_selected_disks[@]}"; do
|
for selected_disk in "${v_selected_disks[@]}"; do
|
||||||
wipefs --all --force "$selected_disk"
|
wipefs --all "$selected_disk"
|
||||||
sgdisk -a1 -n1:24K:+1000K -t1:EF02 "$selected_disk"
|
sgdisk -a1 -n1:24K:+1000K -t1:EF02 "$selected_disk"
|
||||||
sgdisk -n2:0:+512M -t2:BF01 "$selected_disk" # Boot pool
|
sgdisk -n2:0:+512M -t2:BF01 "$selected_disk" # Boot pool
|
||||||
sgdisk -n3:0:"$tail_space_parameter" -t3:BF01 "$selected_disk" # Root pool
|
sgdisk -n3:0:"$tail_space_parameter" -t3:BF01 "$selected_disk" # Root pool
|
||||||
@@ -789,6 +784,18 @@ if [[ $v_encrypt_rpool == "1" ]]; then
|
|||||||
rm -rf "$c_zfs_mount_dir/etc/dropbear-initramfs/dropbear_dss_host_key"
|
rm -rf "$c_zfs_mount_dir/etc/dropbear-initramfs/dropbear_dss_host_key"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#cd "$c_zfs_mount_dir/root"
|
||||||
|
#wget http://ftp.de.debian.org/debian/pool/main/libt/libtommath/libtommath1_1.1.0-3_amd64.deb
|
||||||
|
#wget http://ftp.de.debian.org/debian/pool/main/d/dropbear/dropbear-bin_2018.76-5_amd64.deb
|
||||||
|
#wget http://ftp.de.debian.org/debian/pool/main/d/dropbear/dropbear-initramfs_2018.76-5_all.deb
|
||||||
|
|
||||||
|
#chroot_execute "dpkg -i /root/libtommath1_1.1.0-3_amd64.deb"
|
||||||
|
#chroot_execute "dpkg -i /root/dropbear-bin_2018.76-5_amd64.deb"
|
||||||
|
#chroot_execute "dpkg -i /root/dropbear-initramfs_2018.76-5_all.deb"
|
||||||
|
|
||||||
|
#rm $c_zfs_mount_dir/root/*.deb
|
||||||
|
#cd /root
|
||||||
|
|
||||||
echo "============setup root prompt============"
|
echo "============setup root prompt============"
|
||||||
cat > "$c_zfs_mount_dir/root/.bashrc" <<CONF
|
cat > "$c_zfs_mount_dir/root/.bashrc" <<CONF
|
||||||
export PS1='\[\033[01;31m\]\u\[\033[01;33m\]@\[\033[01;32m\]\h \[\033[01;33m\]\w \[\033[01;35m\]\$ \[\033[00m\]'
|
export PS1='\[\033[01;31m\]\u\[\033[01;33m\]@\[\033[01;32m\]\h \[\033[01;33m\]\w \[\033[01;35m\]\$ \[\033[00m\]'
|
||||||
@@ -800,31 +807,8 @@ CONF
|
|||||||
echo "========running packages upgrade==========="
|
echo "========running packages upgrade==========="
|
||||||
chroot_execute "apt upgrade --yes"
|
chroot_execute "apt upgrade --yes"
|
||||||
|
|
||||||
echo "===========add static route to initramfs via hook to add default routes for Hetzner due to Debian/Ubuntu initramfs DHCP bug ========="
|
#echo "===========add static route to initramfs via hook to add default routes due to initramfs DHCP bug ========="
|
||||||
mkdir -p "$c_zfs_mount_dir/usr/share/initramfs-tools/scripts/init-premount"
|
# removed
|
||||||
cat > "$c_zfs_mount_dir/usr/share/initramfs-tools/scripts/init-premount/static-route" <<'CONF'
|
|
||||||
#!/bin/sh
|
|
||||||
PREREQ=""
|
|
||||||
prereqs()
|
|
||||||
{
|
|
||||||
echo "$PREREQ"
|
|
||||||
}
|
|
||||||
|
|
||||||
case $1 in
|
|
||||||
prereqs)
|
|
||||||
prereqs
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
. /scripts/functions
|
|
||||||
# Begin real processing below this line
|
|
||||||
|
|
||||||
configure_networking
|
|
||||||
|
|
||||||
ip route add 172.31.1.1/255.255.255.255 dev ens3
|
|
||||||
ip route add default via 172.31.1.1 dev ens3
|
|
||||||
CONF
|
|
||||||
|
|
||||||
echo "======= update initramfs =========="
|
echo "======= update initramfs =========="
|
||||||
chroot_execute "update-initramfs -u -k all"
|
chroot_execute "update-initramfs -u -k all"
|
||||||
|
|||||||
@@ -492,14 +492,27 @@ done
|
|||||||
|
|
||||||
echo "======= installing zfs on rescue system =========="
|
echo "======= installing zfs on rescue system =========="
|
||||||
echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections
|
echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections
|
||||||
apt-get install --yes software-properties-common
|
if [[ $v_zfs_experimental == "1" ]]; then
|
||||||
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8CF63AD3F06FC659
|
apt install --yes man wget curl software-properties-common nano htop gnupg
|
||||||
add-apt-repository 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
|
wget -O - https://terem42.github.io/zfs-debian/apt_pub.gpg | apt-key add -
|
||||||
apt update
|
add-apt-repository 'deb https://terem42.github.io/zfs-debian/public zfs-debian-experimental main'
|
||||||
apt install --yes zfs-dkms zfsutils-linux
|
apt update
|
||||||
add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
|
apt install --yes libelf-dev
|
||||||
apt update
|
apt install -t zfs-debian-experimental --yes zfs-dkms zfsutils-linux
|
||||||
find /usr/local/sbin/ -type l | xargs rm
|
else
|
||||||
|
cd "$(mktemp -d)"
|
||||||
|
wget "$(curl -Ls https://api.github.com/repos/openzfs/zfs/releases/latest| grep "browser_download_url.*tar.gz"|grep -E "tar.gz\"$"| cut -d '"' -f 4)"
|
||||||
|
apt update
|
||||||
|
apt install libssl-dev uuid-dev zlib1g-dev libblkid-dev -y
|
||||||
|
tar xfv zfs*.tar.gz
|
||||||
|
rm *.tar.gz
|
||||||
|
cd zfs*
|
||||||
|
./configure
|
||||||
|
make -j "$(nproc)"
|
||||||
|
make install
|
||||||
|
ldconfig
|
||||||
|
modprobe zfs
|
||||||
|
fi
|
||||||
zfs --version
|
zfs --version
|
||||||
|
|
||||||
echo "======= partitioning the disk =========="
|
echo "======= partitioning the disk =========="
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ This script will prepare the ZFS pools, then install and configure minimal Ubunt
|
|||||||
The script with minimal changes may be used on any other hosting provider supporting KVM virtualization and offering Debian-based rescue system.
|
The script with minimal changes may be used on any other hosting provider supporting KVM virtualization and offering Debian-based rescue system.
|
||||||
In order to stop the procedure, hit Esc twice during dialogs (excluding yes/no ones), or Ctrl+C while any operation is running.
|
In order to stop the procedure, hit Esc twice during dialogs (excluding yes/no ones), or Ctrl+C while any operation is running.
|
||||||
'
|
'
|
||||||
dialog --msgbox "$dialog_message" 30 100
|
dialog --ascii-lines --msgbox "$dialog_message" 30 100
|
||||||
}
|
}
|
||||||
|
|
||||||
function store_os_distro_information {
|
function store_os_distro_information {
|
||||||
@@ -175,7 +175,7 @@ LOG
|
|||||||
|
|
||||||
If you think this is a bug, please open an issue on https://github.com/terem42/zfs-hetzner-vm/issues, and attach the file `'"$c_disks_log"'`.
|
If you think this is a bug, please open an issue on https://github.com/terem42/zfs-hetzner-vm/issues, and attach the file `'"$c_disks_log"'`.
|
||||||
'
|
'
|
||||||
dialog --msgbox "$dialog_message" 30 100
|
dialog --ascii-lines --msgbox "$dialog_message" 30 100
|
||||||
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -204,7 +204,7 @@ function select_disks {
|
|||||||
|
|
||||||
Devices with mounted partitions, cdroms, and removable devices are not displayed!
|
Devices with mounted partitions, cdroms, and removable devices are not displayed!
|
||||||
"
|
"
|
||||||
mapfile -t v_selected_disks < <(dialog --separate-output --checklist "$dialog_message" 30 100 $((${#menu_entries_option[@]} / 3)) "${menu_entries_option[@]}" 3>&1 1>&2 2>&3)
|
mapfile -t v_selected_disks < <(dialog --ascii-lines --separate-output --checklist "$dialog_message" 30 100 $((${#menu_entries_option[@]} / 3)) "${menu_entries_option[@]}" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
if [[ ${#v_selected_disks[@]} -gt 0 ]]; then
|
if [[ ${#v_selected_disks[@]} -gt 0 ]]; then
|
||||||
break
|
break
|
||||||
@@ -221,7 +221,7 @@ function ask_swap_size {
|
|||||||
local swap_size_invalid_message=
|
local swap_size_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_swap_size =~ ^[0-9]+$ ]]; do
|
while [[ ! $v_swap_size =~ ^[0-9]+$ ]]; do
|
||||||
v_swap_size=$(dialog --inputbox "${swap_size_invalid_message}Enter the swap size in GiB (0 for no swap):" 30 100 2 3>&1 1>&2 2>&3)
|
v_swap_size=$(dialog --ascii-lines --inputbox "${swap_size_invalid_message}Enter the swap size in GiB (0 for no swap):" 30 100 2 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
swap_size_invalid_message="Invalid swap size! "
|
swap_size_invalid_message="Invalid swap size! "
|
||||||
done
|
done
|
||||||
@@ -236,7 +236,7 @@ function ask_free_tail_space {
|
|||||||
local tail_space_invalid_message=
|
local tail_space_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_free_tail_space =~ ^[0-9]+$ ]]; do
|
while [[ ! $v_free_tail_space =~ ^[0-9]+$ ]]; do
|
||||||
v_free_tail_space=$(dialog --inputbox "${tail_space_invalid_message}Enter the space to leave at the end of each disk (0 for none):" 30 100 0 3>&1 1>&2 2>&3)
|
v_free_tail_space=$(dialog --ascii-lines --inputbox "${tail_space_invalid_message}Enter the space to leave at the end of each disk (0 for none):" 30 100 0 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
tail_space_invalid_message="Invalid size! "
|
tail_space_invalid_message="Invalid size! "
|
||||||
done
|
done
|
||||||
@@ -251,7 +251,7 @@ function ask_zfs_arc_max_size {
|
|||||||
local zfs_arc_max_invalid_message=
|
local zfs_arc_max_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_zfs_arc_max_mb =~ ^[0-9]+$ ]]; do
|
while [[ ! $v_zfs_arc_max_mb =~ ^[0-9]+$ ]]; do
|
||||||
v_zfs_arc_max_mb=$(dialog --inputbox "${zfs_arc_max_invalid_message}Enter ZFS ARC cache max size in Mb (minimum 64Mb, enter 0 for ZFS default value, the default will take up to 50% of memory):" 30 100 "$c_default_zfs_arc_max_mb" 3>&1 1>&2 2>&3)
|
v_zfs_arc_max_mb=$(dialog --ascii-lines --inputbox "${zfs_arc_max_invalid_message}Enter ZFS ARC cache max size in Mb (minimum 64Mb, enter 0 for ZFS default value, the default will take up to 50% of memory):" 30 100 "$c_default_zfs_arc_max_mb" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
zfs_arc_max_invalid_message="Invalid size! "
|
zfs_arc_max_invalid_message="Invalid size! "
|
||||||
done
|
done
|
||||||
@@ -267,14 +267,14 @@ function ask_pool_names {
|
|||||||
local bpool_name_invalid_message=
|
local bpool_name_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_bpool_name =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
while [[ ! $v_bpool_name =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
||||||
v_bpool_name=$(dialog --inputbox "${bpool_name_invalid_message}Insert the name for the boot pool" 30 100 bpool 3>&1 1>&2 2>&3)
|
v_bpool_name=$(dialog --ascii-lines --inputbox "${bpool_name_invalid_message}Insert the name for the boot pool" 30 100 bpool 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
bpool_name_invalid_message="Invalid pool name! "
|
bpool_name_invalid_message="Invalid pool name! "
|
||||||
done
|
done
|
||||||
local rpool_name_invalid_message=
|
local rpool_name_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_rpool_name =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
while [[ ! $v_rpool_name =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
||||||
v_rpool_name=$(dialog --inputbox "${rpool_name_invalid_message}Insert the name for the root pool" 30 100 rpool 3>&1 1>&2 2>&3)
|
v_rpool_name=$(dialog --ascii-lines --inputbox "${rpool_name_invalid_message}Insert the name for the root pool" 30 100 rpool 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
rpool_name_invalid_message="Invalid pool name! "
|
rpool_name_invalid_message="Invalid pool name! "
|
||||||
done
|
done
|
||||||
@@ -286,8 +286,8 @@ function ask_pool_tweaks {
|
|||||||
# shellcheck disable=SC2119
|
# shellcheck disable=SC2119
|
||||||
print_step_info_header
|
print_step_info_header
|
||||||
|
|
||||||
v_bpool_tweaks=$(dialog --inputbox "Insert the tweaks for the boot pool" 30 100 -- "$c_default_bpool_tweaks" 3>&1 1>&2 2>&3)
|
v_bpool_tweaks=$(dialog --ascii-lines --inputbox "Insert the tweaks for the boot pool" 30 100 -- "$c_default_bpool_tweaks" 3>&1 1>&2 2>&3)
|
||||||
v_rpool_tweaks=$(dialog --inputbox "Insert the tweaks for the root pool" 30 100 -- "$c_default_rpool_tweaks" 3>&1 1>&2 2>&3)
|
v_rpool_tweaks=$(dialog --ascii-lines --inputbox "Insert the tweaks for the root pool" 30 100 -- "$c_default_rpool_tweaks" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
print_variables v_bpool_tweaks v_rpool_tweaks
|
print_variables v_bpool_tweaks v_rpool_tweaks
|
||||||
}
|
}
|
||||||
@@ -302,8 +302,8 @@ function ask_root_password {
|
|||||||
local password_repeat=-
|
local password_repeat=-
|
||||||
|
|
||||||
while [[ "$v_root_password" != "$password_repeat" || "$v_root_password" == "" ]]; do
|
while [[ "$v_root_password" != "$password_repeat" || "$v_root_password" == "" ]]; do
|
||||||
v_root_password=$(dialog --passwordbox "${password_invalid_message}Please enter the root account password (can't be empty):" 30 100 3>&1 1>&2 2>&3)
|
v_root_password=$(dialog --ascii-lines --passwordbox "${password_invalid_message}Please enter the root account password (can't be empty):" 30 100 3>&1 1>&2 2>&3)
|
||||||
password_repeat=$(dialog --passwordbox "Please repeat the password:" 30 100 3>&1 1>&2 2>&3)
|
password_repeat=$(dialog --ascii-lines --passwordbox "Please repeat the password:" 30 100 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
password_invalid_message="Passphrase empty, or not matching! "
|
password_invalid_message="Passphrase empty, or not matching! "
|
||||||
done
|
done
|
||||||
@@ -313,7 +313,7 @@ function ask_root_password {
|
|||||||
function ask_encryption {
|
function ask_encryption {
|
||||||
print_step_info_header
|
print_step_info_header
|
||||||
|
|
||||||
if dialog --defaultno --yesno 'Do you want to encrypt the root pool?' 30 100; then
|
if dialog --ascii-lines --yesno 'Do you want to encrypt the root pool?' 30 100; then
|
||||||
v_encrypt_rpool=1
|
v_encrypt_rpool=1
|
||||||
fi
|
fi
|
||||||
set +x
|
set +x
|
||||||
@@ -321,8 +321,8 @@ function ask_encryption {
|
|||||||
local passphrase_invalid_message=
|
local passphrase_invalid_message=
|
||||||
local passphrase_repeat=-
|
local passphrase_repeat=-
|
||||||
while [[ "$v_passphrase" != "$passphrase_repeat" || ${#v_passphrase} -lt 8 ]]; do
|
while [[ "$v_passphrase" != "$passphrase_repeat" || ${#v_passphrase} -lt 8 ]]; do
|
||||||
v_passphrase=$(dialog --passwordbox "${passphrase_invalid_message}Please enter the passphrase for the root pool (8 chars min.):" 30 100 3>&1 1>&2 2>&3)
|
v_passphrase=$(dialog --ascii-lines --passwordbox "${passphrase_invalid_message}Please enter the passphrase for the root pool (8 chars min.):" 30 100 3>&1 1>&2 2>&3)
|
||||||
passphrase_repeat=$(dialog --passwordbox "Please repeat the passphrase:" 30 100 3>&1 1>&2 2>&3)
|
passphrase_repeat=$(dialog --ascii-lines --passwordbox "Please repeat the passphrase:" 30 100 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
passphrase_invalid_message="Passphrase too short, or not matching! "
|
passphrase_invalid_message="Passphrase too short, or not matching! "
|
||||||
done
|
done
|
||||||
@@ -333,7 +333,7 @@ function ask_encryption {
|
|||||||
function ask_zfs_experimental {
|
function ask_zfs_experimental {
|
||||||
print_step_info_header
|
print_step_info_header
|
||||||
|
|
||||||
if dialog --defaultno --yesno 'Do you want to use experimental zfs module build?' 30 100; then
|
if dialog --ascii-lines --yesno 'Do you want to use experimental zfs module build?' 30 100; then
|
||||||
v_zfs_experimental=1
|
v_zfs_experimental=1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -345,7 +345,7 @@ function ask_hostname {
|
|||||||
local hostname_invalid_message=
|
local hostname_invalid_message=
|
||||||
|
|
||||||
while [[ ! $v_hostname =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
while [[ ! $v_hostname =~ ^[a-z][a-zA-Z_:.-]+$ ]]; do
|
||||||
v_hostname=$(dialog --inputbox "${hostname_invalid_message}Set the host name" 30 100 "$c_default_hostname" 3>&1 1>&2 2>&3)
|
v_hostname=$(dialog --ascii-lines --inputbox "${hostname_invalid_message}Set the host name" 30 100 "$c_default_hostname" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
hostname_invalid_message="Invalid host name! "
|
hostname_invalid_message="Invalid host name! "
|
||||||
done
|
done
|
||||||
@@ -459,14 +459,10 @@ done
|
|||||||
|
|
||||||
echo "======= installing zfs on rescue system =========="
|
echo "======= installing zfs on rescue system =========="
|
||||||
echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections
|
echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections
|
||||||
apt-get install --yes software-properties-common
|
|
||||||
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8CF63AD3F06FC659
|
|
||||||
add-apt-repository 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
|
|
||||||
apt update
|
apt update
|
||||||
apt install --yes zfs-dkms zfsutils-linux
|
apt install --yes -t buster-backports libelf-dev zfs-dkms
|
||||||
add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
|
modprobe zfs
|
||||||
apt update
|
|
||||||
find /usr/local/sbin/ -type l | xargs rm
|
|
||||||
zfs --version
|
zfs --version
|
||||||
|
|
||||||
echo "======= partitioning the disk =========="
|
echo "======= partitioning the disk =========="
|
||||||
@@ -478,7 +474,7 @@ echo "======= partitioning the disk =========="
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
for selected_disk in "${v_selected_disks[@]}"; do
|
for selected_disk in "${v_selected_disks[@]}"; do
|
||||||
wipefs --all --force "$selected_disk"
|
wipefs --all "$selected_disk"
|
||||||
sgdisk -a1 -n1:24K:+1000K -t1:EF02 "$selected_disk"
|
sgdisk -a1 -n1:24K:+1000K -t1:EF02 "$selected_disk"
|
||||||
sgdisk -n2:0:+512M -t2:BF01 "$selected_disk" # Boot pool
|
sgdisk -n2:0:+512M -t2:BF01 "$selected_disk" # Boot pool
|
||||||
sgdisk -n3:0:"$tail_space_parameter" -t3:BF01 "$selected_disk" # Root pool
|
sgdisk -n3:0:"$tail_space_parameter" -t3:BF01 "$selected_disk" # Root pool
|
||||||
@@ -679,23 +675,26 @@ if [[ $v_kernel_variant == "-virtual" ]]; then
|
|||||||
chroot_execute "DEBIAN_FRONTEND=noninteractive apt install --yes linux-image-extra-virtual-hwe-18.04"
|
chroot_execute "DEBIAN_FRONTEND=noninteractive apt install --yes linux-image-extra-virtual-hwe-18.04"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "======= installing aux packages =========="
|
echo "======= installing aux packages =========="
|
||||||
chroot_execute "apt install --yes man wget curl software-properties-common nano htop gnupg"
|
chroot_execute "apt install --yes man wget curl software-properties-common nano htop gnupg"
|
||||||
chroot_execute "systemctl disable thermald"
|
chroot_execute "systemctl disable thermald"
|
||||||
|
|
||||||
echo "======= installing zfs packages =========="
|
echo "======= installing zfs packages =========="
|
||||||
chroot_execute 'echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections'
|
|
||||||
|
|
||||||
if [[ $v_zfs_experimental == "1" ]]; then
|
if [[ $v_zfs_experimental == "1" ]]; then
|
||||||
chroot_execute "wget -O - https://terem42.github.io/zfs-debian/apt_pub.gpg | apt-key add -"
|
chroot_execute "wget -O - https://terem42.github.io/zfs-debian/apt_pub.gpg | apt-key add -"
|
||||||
chroot_execute "add-apt-repository 'deb https://terem42.github.io/zfs-debian/public zfs-debian-experimental main'"
|
chroot_execute "add-apt-repository 'deb https://terem42.github.io/zfs-debian/public zfs-debian-experimental main'"
|
||||||
chroot_execute "apt update"
|
chroot_execute "apt update"
|
||||||
chroot_execute "apt install -t zfs-debian-experimental --yes zfs-initramfs zfs-dkms zfsutils-linux"
|
|
||||||
else
|
else
|
||||||
chroot_execute "add-apt-repository --yes ppa:jonathonf/zfs"
|
chroot_execute "add-apt-repository --yes ppa:jonathonf/zfs"
|
||||||
|
fi
|
||||||
|
chroot_execute 'echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections'
|
||||||
|
|
||||||
|
if [[ $v_zfs_experimental == "1" ]]; then
|
||||||
|
chroot_execute "apt install -t zfs-debian-experimental --yes zfs-initramfs zfs-dkms zfsutils-linux"
|
||||||
|
else
|
||||||
chroot_execute "apt install --yes zfs-initramfs zfs-dkms zfsutils-linux"
|
chroot_execute "apt install --yes zfs-initramfs zfs-dkms zfsutils-linux"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "======= installing OpenSSH and network tooling =========="
|
echo "======= installing OpenSSH and network tooling =========="
|
||||||
chroot_execute "apt install --yes openssh-server net-tools"
|
chroot_execute "apt install --yes openssh-server net-tools"
|
||||||
|
|
||||||
|
|||||||
@@ -313,7 +313,7 @@ function ask_root_password {
|
|||||||
function ask_encryption {
|
function ask_encryption {
|
||||||
print_step_info_header
|
print_step_info_header
|
||||||
|
|
||||||
if dialog --defaultno --yesno 'Do you want to encrypt the root pool?' 30 100; then
|
if dialog --yesno 'Do you want to encrypt the root pool?' 30 100; then
|
||||||
v_encrypt_rpool=1
|
v_encrypt_rpool=1
|
||||||
fi
|
fi
|
||||||
set +x
|
set +x
|
||||||
@@ -333,7 +333,7 @@ function ask_encryption {
|
|||||||
function ask_zfs_experimental {
|
function ask_zfs_experimental {
|
||||||
print_step_info_header
|
print_step_info_header
|
||||||
|
|
||||||
if dialog --defaultno --yesno 'Do you want to use experimental zfs module build?' 30 100; then
|
if dialog --yesno 'Do you want to use experimental zfs module build?' 30 100; then
|
||||||
v_zfs_experimental=1
|
v_zfs_experimental=1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -459,14 +459,20 @@ done
|
|||||||
|
|
||||||
echo "======= installing zfs on rescue system =========="
|
echo "======= installing zfs on rescue system =========="
|
||||||
echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections
|
echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections
|
||||||
apt-get install --yes software-properties-common
|
|
||||||
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8CF63AD3F06FC659
|
cd "$(mktemp -d)"
|
||||||
add-apt-repository 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
|
wget "$(curl -Ls https://api.github.com/repos/openzfs/zfs/releases/latest| grep "browser_download_url.*tar.gz"|grep -E "tar.gz\"$"| cut -d '"' -f 4)"
|
||||||
apt update
|
apt update
|
||||||
apt install --yes zfs-dkms zfsutils-linux
|
apt install libssl-dev uuid-dev zlib1g-dev libblkid-dev -y
|
||||||
add-apt-repository -r 'deb http://ppa.launchpad.net/jonathonf/zfs/ubuntu focal main'
|
tar xfv zfs*.tar.gz
|
||||||
apt update
|
rm *.tar.gz
|
||||||
find /usr/local/sbin/ -type l | xargs rm
|
cd zfs*
|
||||||
|
./configure
|
||||||
|
make -j "$(nproc)"
|
||||||
|
make install
|
||||||
|
ldconfig
|
||||||
|
modprobe zfs
|
||||||
|
|
||||||
zfs --version
|
zfs --version
|
||||||
|
|
||||||
echo "======= partitioning the disk =========="
|
echo "======= partitioning the disk =========="
|
||||||
@@ -685,18 +691,25 @@ chroot_execute "apt install --yes man-db wget curl software-properties-common na
|
|||||||
chroot_execute "systemctl disable thermald"
|
chroot_execute "systemctl disable thermald"
|
||||||
|
|
||||||
echo "======= installing zfs packages =========="
|
echo "======= installing zfs packages =========="
|
||||||
chroot_execute 'echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections'
|
|
||||||
|
|
||||||
if [[ $v_zfs_experimental == "1" ]]; then
|
if [[ $v_zfs_experimental == "1" ]]; then
|
||||||
chroot_execute "wget -O - https://terem42.github.io/zfs-debian/apt_pub.gpg | apt-key add -"
|
chroot_execute "wget -O - https://terem42.github.io/zfs-debian/apt_pub.gpg | apt-key add -"
|
||||||
chroot_execute "add-apt-repository 'deb https://terem42.github.io/zfs-debian/public zfs-debian-experimental main'"
|
chroot_execute "add-apt-repository 'deb https://terem42.github.io/zfs-debian/public zfs-debian-experimental main'"
|
||||||
chroot_execute "apt update"
|
chroot_execute "apt update"
|
||||||
|
else
|
||||||
|
echo "======= installing OpenZFS 2.0 stable package from Debian 10 backports zfs packages =========="
|
||||||
|
chroot_execute "apt-key adv --recv-key --keyserver keyserver.ubuntu.com 648ACFD622F3D138"
|
||||||
|
chroot_execute "sudo apt-key adv --recv-key --keyserver keyserver.ubuntu.com 0E98404D386FA1D9"
|
||||||
|
chroot_execute "add-apt-repository 'deb http://deb.debian.org/debian buster-backports main contrib non-free'"
|
||||||
|
chroot_execute "apt install -t buster-backports --yes zfs-dkms zfsutils-linux zfs-initramfs"
|
||||||
|
chroot_execute "add-apt-repository -r 'deb http://deb.debian.org/debian buster-backports main contrib non-free'"
|
||||||
|
fi
|
||||||
|
chroot_execute 'echo "zfs-dkms zfs-dkms/note-incompatible-licenses note true" | debconf-set-selections'
|
||||||
|
|
||||||
|
if [[ $v_zfs_experimental == "1" ]]; then
|
||||||
chroot_execute "apt install -t zfs-debian-experimental --yes zfs-initramfs zfs-dkms zfsutils-linux"
|
chroot_execute "apt install -t zfs-debian-experimental --yes zfs-initramfs zfs-dkms zfsutils-linux"
|
||||||
else
|
else
|
||||||
chroot_execute "add-apt-repository --yes ppa:jonathonf/zfs"
|
|
||||||
chroot_execute "apt install --yes zfs-initramfs zfs-dkms zfsutils-linux"
|
chroot_execute "apt install --yes zfs-initramfs zfs-dkms zfsutils-linux"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "======= installing OpenSSH and network tooling =========="
|
echo "======= installing OpenSSH and network tooling =========="
|
||||||
chroot_execute "apt install --yes openssh-server net-tools"
|
chroot_execute "apt install --yes openssh-server net-tools"
|
||||||
|
|
||||||
|
|||||||
2
ubuntu_keys_add.sh
Normal file
2
ubuntu_keys_add.sh
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
|
||||||
|
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC9
|
||||||
Reference in New Issue
Block a user