Compare commits

...

16 Commits

Author SHA1 Message Date
15d67f2e3f Merge pull request '26-install-zfs-only-when-needed' (#27) from 26-install-zfs-only-when-needed into main
Reviewed-on: #27
2025-01-17 20:11:11 +00:00
6fb13a097c Merge remote-tracking branch 'origin/26-install-zfs-only-when-needed' into 26-install-zfs-only-when-needed 2025-01-17 21:09:40 +01:00
64c66cbd0f fix(zfs): Install ZFS only when needed (#26)
In situations where this script runs on alternative Arch Linux live
CD ISOs such as github.com/stevleibelt/arch-linux-live-cd-iso-with
-zfs we may not have to insall ZFS kernel modules. Test if the 'zfs'
module is loaded and skip installation if yes.
2025-01-17 21:09:19 +01:00
1036ce9c5b fix(zfs): Install ZFS only when needed (#26)
In situations where this script runs on alternative Arch Linux live
CD ISOs such as github.com/stevleibelt/arch-linux-live-cd-iso-with
-zfs we may not have to insall ZFS kernel modules. Test if the 'zfs'
module is loaded and skip installation if yes.
2025-01-17 21:08:44 +01:00
3ae8b53616 build(meta): Don't commit .idea JetBrains dir (#26) 2025-01-17 21:05:53 +01:00
2adac7b94b Add a 2G loop device for emergency swap 2025-01-02 01:00:06 +01:00
9525976fe2 For now no pacman upgrade in ISO 2024-12-28 18:27:29 +01:00
624d278971 For now no pacman upgrade in ISO 2024-12-28 18:21:04 +01:00
08f33c33c7 refactor(os): Retry pacman download on fail 2024-12-28 16:33:13 +01:00
eadbbea2fd Merge pull request '19-define-os-ip' (#24) from 19-define-os-ip into main
Reviewed-on: #24
2023-11-12 03:26:36 +00:00
d7d41eec5b refactor(os): Homogenous single quotes (#19) 2023-11-12 03:32:27 +01:00
6fe5d59108 refactor(os): remove unneeded line break (#19) 2023-11-12 03:31:31 +01:00
96b860e0db refactor(os): Update interactive questionnaire gif (#19) 2023-11-12 03:31:02 +01:00
d467dd6610 refactor(os): Phrasing (#19) 2023-11-11 04:35:41 +01:00
8ed5849596 refactor(os): Phrasing (#19) 2023-11-11 04:26:11 +01:00
5f6a5bfdac refactor(os): No need to hide kernel version string (#19) 2023-11-11 04:20:29 +01:00
3 changed files with 71 additions and 44 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
archzbm_settings.env
.idea

View File

@@ -111,7 +111,7 @@ Known options are as follows.
### Kernel downgrade
By default we install newest `linux` and `linux-headers` packages into a `chroot`. Once we're in that `chroot` we then install newest [AUR zfs-dkms package](https://aur.archlinux.org/packages/zfs-dkms). You may want to override `linux` and `linux-headers` versions we're installing to ensure you end up with a compatible mix between them and `zfs-dkms`.
By default we install newest `linux` and `linux-headers` packages into a `chroot`. Once we're in that `chroot` we then install newest [AUR zfs-dkms package](https://aur.archlinux.org/packages/zfs-dkms). You may want to override `linux` and `linux-headers` versions to ensure you end up with a compatible mix between them and `zfs-dkms`.
For example:
```
@@ -267,7 +267,7 @@ This syntax crutch allows you to use the full range of Dropbear-supported `autho
An interactive questionnaire can guide you through settings and goes like this:
![Command line setup questionnaire](https://i.imgur.com/RhCStdu.gif)
![Command line setup questionnaire](https://i.imgur.com/OXG75GH.gif)
To do the questionnaire yourself start this script with the `setup` argument:
@@ -329,7 +329,7 @@ We strongly suggest to that you:
- Firstly, refer to a resource such as the [Arch Linux Archive package version list](https://archive.archlinux.org/packages/l/linux/) to find out what newest kernel version this script will install.
- Secondly, research if newest [AUR zfs-dkms package](https://aur.archlinux.org/packages/zfs-dkms) is compatible with that kernel. Two reasonable points of contact are AUR and its comments section for `zfs-dkms` where users quickly report issues; and the [github.com/openzfs/zfs issues list](https://github.com/openzfs/zfs/issues).
An example for this is that `linux-6.6.1.arch1-1-x86_64` released on Wednesday, November 8, 2023 at a time when newest `zfs-dkms` package version [was 2.2.0](https://aur.archlinux.org/cgit/aur.git/commit/?h=zfs-dkms&id=da1b6372c57b16f2781a7fda2b95971bb392c5ee) which did not compile against `linux` 6.6.x.
An example for this is that `linux-6.6.1.arch1-1-x86_64` came out on Wednesday, November 8, 2023 at a time when newest `zfs-dkms` package version [was 2.2.0](https://aur.archlinux.org/cgit/aur.git/commit/?h=zfs-dkms&id=da1b6372c57b16f2781a7fda2b95971bb392c5ee) which did not compile against `linux` 6.6.x.
You'd then set for example:
```

108
setup.sh
View File

@@ -68,17 +68,16 @@ function setup_env_vars () {
echo '----------------------------------------'
echo
read -u3 -p 'Please type kernel version to use, leave empty for latest, confirm with <Enter>: ' -s ARCHZBM_KERNEL_VER
echo
read -u3 -p 'Please type kernel version to use, leave empty for latest, confirm with <Enter>: ' ARCHZBM_KERNEL_VER
echo
echo 'Do you want compressed datasets?'
select arg_compressed in "Compressed" "Uncompressed"; do
select arg_compressed in 'Compressed' 'Uncompressed'; do
case "${arg_compressed}" in
Compressed)
'Compressed')
break
;;
Uncompressed)
'Uncompressed')
ARCHZBM_ZFSPROPS_NO_COMPRESSION='true'
break
;;
@@ -86,12 +85,12 @@ function setup_env_vars () {
done <&3 && echo
echo 'Do you want encrypted datasets?'
select arg_encrypted in "Encrypted" "Unencrypted"; do
select arg_encrypted in 'Encrypted' 'Unencrypted'; do
case "${arg_encrypted}" in
Encrypted)
'Encrypted')
break
;;
Unencrypted)
'Unencrypted')
ARCHZBM_ZFSPROPS_NO_ENCRYPTION='true'
break
;;
@@ -100,13 +99,13 @@ function setup_env_vars () {
if [[ "${arg_encrypted}" = 'Encrypted' ]]; then
echo 'Do you want a custom dataset decryption password?'
select arg_custom_dataset_pw in "Yes" "No"; do
select arg_custom_dataset_pw in 'Yes' 'No (use '"'"'password'"'"')'; do
case "${arg_custom_dataset_pw}" in
Yes)
'Yes')
want_custom_dataset_pw='true'
break
;;
No)
'No (use '"'"'password'"'"')')
break
;;
esac
@@ -120,13 +119,13 @@ function setup_env_vars () {
fi
echo 'Do you want a custom '"'"'root'"'"' user password?'
select arg_custom_root_pw in "Yes" "No"; do
select arg_custom_root_pw in 'Yes' 'No (use '"'"'password'"'"')'; do
case "${arg_custom_root_pw}" in
Yes)
'Yes')
want_custom_root_pw='true'
break
;;
No)
'No (use '"'"'password'"'"')')
break
;;
esac
@@ -153,7 +152,7 @@ function setup_env_vars () {
if [[ "${want_ssh_in_zbm}" ]]; then
echo 'How do you want to assign an IP address in ZFSBootMenu?'
select arg_ip_autoconf_method in "Statically" "Dynamically, DHCP" "Dynamically, BOOTP" "Dynamically, RARP"; do
select arg_ip_autoconf_method in 'Statically' 'Dynamically, DHCP' 'Dynamically, BOOTP' 'Dynamically, RARP'; do
case "${arg_ip_autoconf_method}" in
'Statically')
ARCHZBM_NET_AUTOCONF='none'
@@ -189,7 +188,7 @@ function setup_env_vars () {
fi
echo 'Do you want a custom SSH listening port?'
select arg_custom_ssh_port in "Yes (let me specify)" "No (keep port 22)"; do
select arg_custom_ssh_port in 'Yes (let me specify)' 'No (keep port 22)'; do
case "${arg_custom_ssh_port}" in
'Yes (let me specify)')
want_custom_ssh_port='true'
@@ -207,7 +206,7 @@ function setup_env_vars () {
fi
echo 'Do you want the SSH daemon to use a custom keepalive send interval?'
select arg_custom_ssh_keepalive_intvl in "Yes (let me specify)" "No (keep 1)"; do
select arg_custom_ssh_keepalive_intvl in 'Yes (let me specify)' 'No (keep 1)'; do
case "${arg_custom_ssh_keepalive_intvl}" in
'Yes (let me specify)')
want_custom_keepalive_intvl='true'
@@ -283,7 +282,7 @@ function setup_env_vars () {
fi
if [[ "${want_ssh_in_zbm}" ]]; then
echo 'Do you want to define OS root user'"'"'s SSH pub key?'
echo 'Do you want to define OS '"'"'root'"'"' user'"'"'s SSH pub key?'
select arg_root_pub_keys in 'Yes (let me specify)' 'Yes (use ZBM pub keys)' 'No (don'"'"'t enable sshd.service)'; do
case "${arg_root_pub_keys}" in
'Yes (let me specify)')
@@ -430,19 +429,34 @@ function update_pacman_db () {
systemctl start reflector
# In an ISO and for the minimal number of packages we need we do not
# care about partial upgrades
pacman -Syyuu --noconfirm
#
# Are we better off not attempting an upgrade inside the ISO?
# Let's try and find out.
# while ! pacman -Syyuu --needed --noconfirm --downloadonly; do
# sleep 5
# done
# pacman -Syyuu --needed --noconfirm
pacman -Syy
}
function install_pkgs () {
#1.5
printf -- '%s\n' 'Installing packages ...'
while ! pacman -S --needed --noconfirm --downloadonly "${@}"; do
sleep 5
done
pacman -S --needed --noconfirm "${@}"
}
function install_zfs () {
#1.6
declare reset_colors='\033[0m'
curl -s 'https://raw.githubusercontent.com/eoli3n/archiso-zfs/master/init' | bash
if modinfo 'zfs' &>/dev/null; then
>&3 printf -- '%s\n' \
'ZFS kernel module is loaded, no need to install ...'
else
curl -s 'https://raw.githubusercontent.com/eoli3n/archiso-zfs/master/init' | bash
fi
printf -- "${reset_colors}"
}
@@ -764,27 +778,29 @@ function install_archlinux () {
#1.12
pacman_dl_parallel
pacman_dont_check_space
pacstrap /mnt \
base \
base-devel \
linux \
linux-headers \
linux-firmware \
amd-ucode \
efibootmgr \
vim \
git \
iwd \
networkmanager \
network-manager-applet \
dialog \
os-prober \
reflector \
bluez \
bluez-utils \
man-db \
xdg-utils \
xdg-user-dirs
while ! pacstrap /mnt \
base \
base-devel \
linux \
linux-headers \
linux-firmware \
amd-ucode \
efibootmgr \
vim \
git \
iwd \
networkmanager \
network-manager-applet \
dialog \
os-prober \
reflector \
bluez \
bluez-utils \
man-db \
xdg-utils \
xdg-user-dirs; do
sleep 5
done
}
function gen_fstab () {
@@ -1289,6 +1305,10 @@ function get_disks_with_one_efipart () {
function install_os_in_chroot () {
#2.2
dd if='/dev/zero' of='/swapfile' bs='1M' count='2048'
losetup '/dev/loop9' '/swapfile'
mkswap '/dev/loop9'
swapon '/dev/loop9'
### Reinit keyring
# As keyring is initialized at boot, and copied to the install dir with pacstrap, and ntp is running
# Time changed after keyring initialization, it leads to malfunction
@@ -1296,6 +1316,9 @@ function install_os_in_chroot () {
rm -rf '/etc/pacman.d/gnupg'
pacman-key --init
pacman-key --populate archlinux
while ! pacman -S archlinux-keyring --noconfirm --downloadonly; do
sleep 5
done
pacman -S archlinux-keyring --noconfirm
locale-gen
@@ -1332,6 +1355,9 @@ function install_os_in_chroot () {
add_syslinux_pacman_hook
fi
add_zbm_pacman_hook
swapoff '/dev/loop9'
losetup -d '/dev/loop9'
rm '/swapfile'
}
function set_root_pw () {