|
|
|
@ -1,9 +1,9 @@ |
|
|
|
#!/bin/bash |
|
|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
set -eu |
|
|
|
set -euo pipefail |
|
|
|
|
|
|
|
|
|
|
|
err() { |
|
|
|
err() { |
|
|
|
printf 'Error: %s.\n' "$1" 1>&2 |
|
|
|
echo "Error: $1." 1>&2 |
|
|
|
exit 1 |
|
|
|
exit 1 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -18,12 +18,12 @@ run_later() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
backup() { |
|
|
|
backup() { |
|
|
|
run_later "[ ! -e \"$1.backup\" ] && cp \"$1\" \"$1.backup\"" |
|
|
|
run_later "if [ ! -e \"$1.backup\" ]; then cp \"$1\" \"$1.backup\"; fi" |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
prompt_password() { |
|
|
|
prompt_password() { |
|
|
|
if [ -z "$password" ]; then |
|
|
|
if [ -z "$password" ]; then |
|
|
|
read -rs -p 'Password: ' password |
|
|
|
read -rs -p 'Password: ' password; |
|
|
|
fi |
|
|
|
fi |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -43,6 +43,7 @@ security_repository=http://security.debian.org/debian-security |
|
|
|
skip_account_setup=false |
|
|
|
skip_account_setup=false |
|
|
|
username=debian |
|
|
|
username=debian |
|
|
|
password= |
|
|
|
password= |
|
|
|
|
|
|
|
sudo_no_password=false |
|
|
|
cleartext_password=false |
|
|
|
cleartext_password=false |
|
|
|
timezone=UTC |
|
|
|
timezone=UTC |
|
|
|
ntp=0.debian.pool.ntp.org |
|
|
|
ntp=0.debian.pool.ntp.org |
|
|
|
@ -148,6 +149,9 @@ while [ $# -gt 0 ]; do |
|
|
|
password=$2 |
|
|
|
password=$2 |
|
|
|
shift |
|
|
|
shift |
|
|
|
;; |
|
|
|
;; |
|
|
|
|
|
|
|
--sudo-no-password) |
|
|
|
|
|
|
|
sudo_no_password=true |
|
|
|
|
|
|
|
;; |
|
|
|
--timezone) |
|
|
|
--timezone) |
|
|
|
timezone=$2 |
|
|
|
timezone=$2 |
|
|
|
shift |
|
|
|
shift |
|
|
|
@ -242,10 +246,7 @@ installer_directory="/boot/$installer" |
|
|
|
|
|
|
|
|
|
|
|
save_preseed='cat' |
|
|
|
save_preseed='cat' |
|
|
|
if [ "$dry_run" != true ]; then |
|
|
|
if [ "$dry_run" != true ]; then |
|
|
|
user="$(id -un 2>/dev/null || true)" |
|
|
|
[ "$(id -u)" -ne 0 ] && err 'root privilege is required' |
|
|
|
|
|
|
|
|
|
|
|
[ "$user" != root ] && err 'root privilege is required' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rm -rf "$installer_directory" |
|
|
|
rm -rf "$installer_directory" |
|
|
|
mkdir -p "$installer_directory/initrd" |
|
|
|
mkdir -p "$installer_directory/initrd" |
|
|
|
cd "$installer_directory" |
|
|
|
cd "$installer_directory" |
|
|
|
@ -294,7 +295,7 @@ EOF |
|
|
|
|
|
|
|
|
|
|
|
if [ -n "$authorized_keys_url" ]; then |
|
|
|
if [ -n "$authorized_keys_url" ]; then |
|
|
|
backup /etc/ssh/sshd_config |
|
|
|
backup /etc/ssh/sshd_config |
|
|
|
run_later 'sed -Ei "s/^#?PasswordAuthentication.*/PasswordAuthentication no/" /etc/ssh/sshd_config' |
|
|
|
run_later 'sed -Ei "s/^#?PasswordAuthentication .+/PasswordAuthentication no/" /etc/ssh/sshd_config' |
|
|
|
$save_preseed << EOF |
|
|
|
$save_preseed << EOF |
|
|
|
d-i network-console/password-disabled boolean true |
|
|
|
d-i network-console/password-disabled boolean true |
|
|
|
d-i network-console/authorized_keys_url string $authorized_keys_url |
|
|
|
d-i network-console/authorized_keys_url string $authorized_keys_url |
|
|
|
@ -353,7 +354,7 @@ EOF |
|
|
|
if [ "$username" = root ]; then |
|
|
|
if [ "$username" = root ]; then |
|
|
|
if [ -z "$authorized_keys_url" ]; then |
|
|
|
if [ -z "$authorized_keys_url" ]; then |
|
|
|
backup /etc/ssh/sshd_config |
|
|
|
backup /etc/ssh/sshd_config |
|
|
|
run_later 'sed -Ei "s/^#?PermitRootLogin.*/PermitRootLogin yes/" /etc/ssh/sshd_config' |
|
|
|
run_later 'sed -Ei "s/^#?PermitRootLogin .+/PermitRootLogin yes/" /etc/ssh/sshd_config' |
|
|
|
else |
|
|
|
else |
|
|
|
run_later "mkdir -m 0700 -p ~root/.ssh && busybox wget -O - \"$authorized_keys_url\" >> ~root/.ssh/authorized_keys" |
|
|
|
run_later "mkdir -m 0700 -p ~root/.ssh && busybox wget -O - \"$authorized_keys_url\" >> ~root/.ssh/authorized_keys" |
|
|
|
fi |
|
|
|
fi |
|
|
|
@ -373,12 +374,16 @@ EOF |
|
|
|
fi |
|
|
|
fi |
|
|
|
else |
|
|
|
else |
|
|
|
backup /etc/ssh/sshd_config |
|
|
|
backup /etc/ssh/sshd_config |
|
|
|
run_later 'sed -Ei "s/^#?PermitRootLogin.*/PermitRootLogin no/" /etc/ssh/sshd_config' |
|
|
|
run_later 'sed -Ei "s/^#?PermitRootLogin .+/PermitRootLogin no/" /etc/ssh/sshd_config' |
|
|
|
|
|
|
|
|
|
|
|
if [ -n "$authorized_keys_url" ]; then |
|
|
|
if [ -n "$authorized_keys_url" ]; then |
|
|
|
run_later "sudo -u $username mkdir -m 0700 -p ~$username/.ssh && busybox wget -O - \"$authorized_keys_url\" | sudo -u $username tee -a ~$username/.ssh/authorized_keys" |
|
|
|
run_later "sudo -u $username mkdir -m 0700 -p ~$username/.ssh && busybox wget -O - \"$authorized_keys_url\" | sudo -u $username tee -a ~$username/.ssh/authorized_keys" |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ "$sudo_no_password" = true ]; then |
|
|
|
|
|
|
|
run_later "echo \"$username ALL=(ALL:ALL) NOPASSWD:ALL\" > \"/etc/sudoers.d/90-user-$username\"" |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
$save_preseed << EOF |
|
|
|
$save_preseed << EOF |
|
|
|
d-i passwd/root-login boolean false |
|
|
|
d-i passwd/root-login boolean false |
|
|
|
d-i passwd/make-user boolean true |
|
|
|
d-i passwd/make-user boolean true |
|
|
|
@ -549,7 +554,7 @@ if [ "$dry_run" != true ]; then |
|
|
|
busybox wget "$base_url/linux" "$base_url/initrd.gz" |
|
|
|
busybox wget "$base_url/linux" "$base_url/initrd.gz" |
|
|
|
[ "$firmware" = true ] && busybox wget "$firmware_url" |
|
|
|
[ "$firmware" = true ] && busybox wget "$firmware_url" |
|
|
|
else |
|
|
|
else |
|
|
|
err '"wget" or "curl" or "busybox wget" is required to download files' |
|
|
|
err 'Could not find "wget" or "curl" or "busybox wget" command to download files' |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
cd initrd |
|
|
|
cd initrd |
|
|
|
@ -567,7 +572,7 @@ if [ "$dry_run" != true ]; then |
|
|
|
grub_cfg=/boot/grub2/grub.cfg |
|
|
|
grub_cfg=/boot/grub2/grub.cfg |
|
|
|
grub2-mkconfig -o "$grub_cfg" |
|
|
|
grub2-mkconfig -o "$grub_cfg" |
|
|
|
else |
|
|
|
else |
|
|
|
err 'update-grub/grub2-mkconfig command not found' |
|
|
|
err 'Could not find "update-grub" or "grub2-mkconfig" command' |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
save_grub_cfg="tee -a $grub_cfg" |
|
|
|
save_grub_cfg="tee -a $grub_cfg" |
|
|
|
|