126 lines
3.2 KiB
Bash
Executable File
126 lines
3.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
VERSION="0.5"
|
|
|
|
# Redirect stdout and errors to console as rc.local does not log anything
|
|
exec 1>/dev/console 2>&1
|
|
|
|
logger -st ${0##*/} "Alpine Linux headless bootstrap v$VERSION by macmpi"
|
|
|
|
mkdir /tmp/.trash
|
|
ovlpath=$( find /media -type d -path '*/.*' -prune -o -type f -name *.apkovl.tar.gz -exec dirname {} \; | head -1 )
|
|
|
|
|
|
## Setup Network interfaces
|
|
if [ -f "${ovlpath}/wpa_supplicant.conf" ]; then
|
|
logger -st ${0##*/} "Wifi setup found !"
|
|
apk add wpa_supplicant
|
|
cp "${ovlpath}/wpa_supplicant.conf" /etc/wpa_supplicant/wpa_supplicant.conf
|
|
else
|
|
logger -st ${0##*/} "Wifi setup not found !"
|
|
fi
|
|
|
|
if ! cp "${ovlpath}/interfaces" /etc/network/interfaces; then
|
|
# set default interfaces if not specified by interface file on boot storage
|
|
logger -st ${0##*/} "No interfaces file supplied, building default interfaces..."
|
|
for dev in $(ls /sys/class/net)
|
|
do
|
|
case ${dev%%[0-9]*} in
|
|
lo)
|
|
cat <<-EOF >> /etc/network/interfaces
|
|
auto $dev
|
|
iface $dev inet loopback
|
|
|
|
EOF
|
|
;;
|
|
eth)
|
|
cat <<-EOF >> /etc/network/interfaces
|
|
auto $dev
|
|
iface $dev inet dhcp
|
|
|
|
EOF
|
|
;;
|
|
wlan)
|
|
[ -f /etc/wpa_supplicant/wpa_supplicant.conf ] && cat <<-EOF >> /etc/network/interfaces
|
|
auto $dev
|
|
iface $dev inet dhcp
|
|
|
|
EOF
|
|
;;
|
|
usb)
|
|
cat <<-EOF >> /etc/network/interfaces
|
|
auto $dev
|
|
iface $dev inet static
|
|
address 10.42.0.2/24
|
|
gateway 10.42.0.1
|
|
|
|
EOF
|
|
|
|
cat <<-EOF > /etc/resolv.conf
|
|
nameserver 208.67.222.222
|
|
nameserver 208.67.220.220
|
|
|
|
EOF
|
|
;;
|
|
esac
|
|
done
|
|
fi
|
|
|
|
echo "Using following network interfaces:"
|
|
cat /etc/network/interfaces
|
|
|
|
echo "alpine-headless" > /etc/hostname
|
|
hostname -F /etc/hostname
|
|
|
|
grep -q "wlan" /etc/network/interfaces && [ -f /etc/wpa_supplicant/wpa_supplicant.conf ] && rc-service wpa_supplicant start
|
|
rc-service networking start
|
|
|
|
|
|
## Setup temporary SSH server (root login, no password)
|
|
## we use some bundled keys to avoid generation at boot and save time
|
|
## bundled temporary keys are moved in /tmp so they won't be stored
|
|
## within permanent config later (new ones will then be generated)
|
|
apk add openssh
|
|
|
|
mv /etc/ssh/ssh_host_* /tmp/.trash/.
|
|
|
|
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
|
|
cat <<-EOF >> /etc/ssh/sshd_config
|
|
AuthenticationMethods none
|
|
PermitEmptyPasswords yes
|
|
PermitRootLogin yes
|
|
HostKey /tmp/.trash/ssh_host_ed25519_key
|
|
HostKey /tmp/.trash/ssh_host_rsa_key
|
|
EOF
|
|
|
|
cp /etc/conf.d/sshd /etc/conf.d/sshd.orig
|
|
cat <<-EOF >> /etc/conf.d/sshd
|
|
sshd_disable_keygen=yes
|
|
EOF
|
|
|
|
rc-service sshd start
|
|
|
|
## Prep for final post-cleanup
|
|
cat <<-EOF > /tmp/.trash/post-cleanup
|
|
#!/bin/sh
|
|
logger -st ${0##*/} "Cleaning-up..."
|
|
mv /etc/ssh/sshd_config.orig /etc/ssh/sshd_config
|
|
mv /etc/conf.d/sshd.orig /etc/conf.d/sshd
|
|
rm /etc/modules-load.d/g_ether.conf
|
|
rm /etc/modprobe.d/g_ether.conf
|
|
rc-update del local default
|
|
rm /etc/local.d/headless.start
|
|
|
|
if [ -f "${ovlpath}/unattended.sh" ]; then
|
|
install -m755 "${ovlpath}/unattended.sh" /tmp/unattended.sh
|
|
/tmp/unattended.sh >/dev/console 2>&1 &
|
|
logger -st ${0##*/} "/tmp/unattended.sh script launched in the background with PID \$!"
|
|
fi
|
|
|
|
logger -st ${0##*/} "Done !!"
|
|
EOF
|
|
|
|
chmod +x /tmp/.trash/post-cleanup
|
|
exec /tmp/.trash/post-cleanup
|
|
|