update for noble and bookworm images

This commit is contained in:
The MMGen Project 2024-07-09 13:34:17 +00:00
commit d50e12f0c3
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2

View file

@ -3,7 +3,7 @@
PATH="$PATH:/usr/sbin:/sbin"
RED="\e[31;1m" GREEN="\e[32;1m" YELLOW="\e[33;1m" BLUE="\e[34;1m" PURPLE="\e[35;1m" RESET="\e[0m"
PROGNAME=$(basename $0)
TITLE='Armbian Encrypted Root Filesystem Setup'
TITLE='Armbian Encrypted Root Filesystem Setup'
CONFIG_VARS='
ARMBIAN_IMAGE
BOOTPART_LABEL
@ -73,11 +73,14 @@ print_help() {
ROOTFS_NAME - device mapper name of target root filesystem
IP_ADDRESS - IP address of target (set to 'dhcp' for dynamic IP
or 'none' to disable remote SSH unlocking support)
NETMASK - Netmask of target. Defaults to 255.255.255.0
BOOTPART_LABEL - Boot partition label of target
DISK_PASSWD - Disk password of target root filesystem
UNLOCKING_USERHOST - USER@HOST of remote unlocking host
SERIAL_CONSOLE - Set this to 'y' to enable disk unlocking from the
serial console
serial console, or 'n' to disable
USB_GADGET - Set this to 'y' to enable disk unlocking via SSH over
USB (g_ether), or 'n' to disable
INSTRUCTIONS FOR USE
@ -172,7 +175,7 @@ _error_handler() {
_do_header() {
echo
local reply
if banner=$(toilet --filter border --filter gay --width 51 -s -f smbraille "$TITLE" 2>/dev/null); then
if banner=$(toilet --filter=border --filter=gay --width=80 --font=term "*** $TITLE ***" 2>/dev/null); then
while read reply; do
echo -e " $reply"
done <<-EOF
@ -418,6 +421,7 @@ _test_sdcard_mounted() {
get_authorized_keys() {
[ -e 'authorized_keys' -a "$USE_LOCAL_AUTHORIZED_KEYS" ] || {
mkdir -p 'authorized_keys'
rsync "$UNLOCKING_USERHOST:.ssh/id_*.pub" 'authorized_keys'
}
}
@ -435,7 +439,7 @@ _print_pkgs_to_install() {
case $1 in
'host')
case "$host_distro" in
bionic|buster|focal|bullseye|jammy)
bionic|buster|focal|bullseye|jammy|bookworm|noble)
pkgs='cryptsetup-bin ed' ;;
*)
pkgs='cryptsetup-bin ed'
@ -443,7 +447,7 @@ _print_pkgs_to_install() {
esac ;;
'target')
case "$target_distro" in
buster|focal|bullseye|jammy)
buster|focal|bullseye|jammy|bookworm|noble)
pkgs='cryptsetup-initramfs' pkgs_ssh='dropbear-initramfs' ;;
bionic)
pkgs='cryptsetup' pkgs_ssh='dropbear-initramfs' ;;
@ -909,6 +913,11 @@ copy_etc_files() {
_set_target_vars() {
target_distro=$(chroot $TARGET_ROOT 'lsb_release' '--short' '--codename')
target_kernel=$(chroot $TARGET_ROOT 'ls' '/boot' | egrep '^vmlinu[xz]')
case $target_distro in
bionic|buster|focal) eth_dev='eth0' dropbear_dir='/etc/dropbear-initramfs' dropbear_conf='config' ;;
bullseye|jammy) eth_dev='eth0' dropbear_dir='/etc/dropbear/initramfs' dropbear_conf='config' ;;
*) eth_dev='end0' dropbear_dir='/etc/dropbear/initramfs' dropbear_conf='dropbear.conf' ;;
esac
imsg "$(printf '%-8s %-28s %s' '' 'Host' 'Target')"
imsg "$(printf '%-8s %-28s %s' '' '----' '------')"
imsg "$(printf '%-8s %-28s %s' 'distro:' $host_distro $target_distro)"
@ -979,7 +988,7 @@ bootlogo=false"
# correct static IP address after 'IP='. If it will be configured via
# DHCP, omit the IP line entirely:
edit_initramfs_conf() {
local file="$TARGET_ROOT/etc/initramfs-tools/initramfs.conf" dev='eth0'
local file="$TARGET_ROOT/etc/initramfs-tools/initramfs.conf" dev=$eth_dev
[ "$USB_GADGET" ] && dev='usb0'
ed $file <<-'EOF'
g/^\s*IP=/s/^/# /
@ -1021,9 +1030,10 @@ edit_initramfs_modules() {
}
copy_authorized_keys() {
local dest="$TARGET_ROOT/etc/dropbear-initramfs"
local dest="$TARGET_ROOT$dropbear_dir"
mkdir -p $dest
/bin/cp 'authorized_keys' $dest
/bin/cat authorized_keys/* > "$dest/authorized_keys"
chmod 644 "$dest/authorized_keys"
_display_file "$dest/authorized_keys"
}
@ -1040,8 +1050,8 @@ tmpfs /tmp tmpfs defaults,nosuid 0 0"
edit_dropbear_cfg() {
local dest file text
dest="$TARGET_ROOT/etc/dropbear-initramfs"
file="$dest/config"
dest="$TARGET_ROOT$dropbear_dir"
file="$dest/$dropbear_conf"
text='DROPBEAR_OPTIONS="-p 2222"
DROPBEAR=y'
if [ "$IP_ADDRESS" == 'none' ]; then
@ -1060,7 +1070,7 @@ netman_manage_usb0() {
bu_file="$file.rootenc.orig"
text='
[device]
match-device=interface-name:eth0
match-device=interface-name:$eth_dev
managed=0
match-device=interface-name:usb0
managed=1'
@ -1128,6 +1138,13 @@ exit 0'
# begin chroot functions:
apt_remove_target() {
set +e
if [ "$IP_ADDRESS" == 'none' ]; then apt --yes purge 'dropbear-initramfs'; fi
apt --yes purge 'bash-completion' 'command-not-found'
set -e
}
apt_install_target() {
local pkgs=$(_print_pkgs_to_install 'target')
[ "$pkgs" ] && {
@ -1140,10 +1157,6 @@ apt_install_target() {
# apt --yes purge $pkgs
# apt-get --yes --purge autoremove
dpkg --configure --pending --force-confdef
set +e
apt --yes purge 'bash-completion'
apt --yes purge 'command-not-found'
set -e
_apt_update
echo 'force-confdef' > /root/.dpkg.cfg
apt --yes install $pkgs
@ -1164,6 +1177,10 @@ update_initramfs() {
_hide_output
}
gen_target_ssh_host_keys() {
ssh-keygen -A
}
check_initramfs() {
local text chk count
text="$(lsinitramfs /boot/initrd.img*)"
@ -1292,8 +1309,10 @@ if [ "$ARG1" == 'in_target' ]; then
[ "$target_distro" == 'bionic' ] && {
echo 'export CRYPTSETUP=y' > '/etc/initramfs-tools/conf.d/cryptsetup'
}
apt_remove_target
apt_install_target
[ "$initramfs_updated" ] || update_initramfs
gen_target_ssh_host_keys
check_initramfs
else
SCRIPT_DESC='Host script'