Files
edge/sbin/setup-alpine
2018-11-06 00:13:24 +00:00

223 lines
4.8 KiB
Bash
Executable File

#!/bin/sh
PROGRAM=setup-alpine
VERSION=3.8.0-r0
PREFIX=
. $PREFIX/lib/libalpine.sh
# Extract fully qualified domain name from current hostname. If none is
# currently set, use 'my.domain'.
get_fqdn() {
local _dn
_dn=$(hostname -f 2>/dev/null)
_dn=${_dn#$(hostname -s 2>/dev/null)}
_dn=${_dn#.}
echo "${_dn:=my.domain}"
}
is_qemu() {
grep -q "QEMU" /proc/cpuinfo
}
usage() {
cat <<-__EOF__
usage: setup-alpine [-ahq] [-c FILE | -f FILE]
Setup Alpine Linux
options:
-a Create Alpine Linux overlay file
-c Create answer file (do not install anything)
-e Empty root password
-f Answer file to use installation
-h Show this help
-q Quick mode. Ask fewer questions.
__EOF__
exit 1
}
while getopts "aef:c:hq" opt ; do
case $opt in
a) ARCHIVE=yes;;
f) USEANSWERFILE="$OPTARG";;
c) CREATEANSWERFILE="$OPTARG";;
e) empty_root_password=1;;
h) usage;;
q) empty_root_password=1; quick=1; APKREPOSOPTS="-1"; HOSTNAMEOPTS="alpine";;
*) usage;;
esac
done
shift $(expr $OPTIND - 1)
rc_sys=$(openrc --sys)
# mount xenfs so we can detect xen dom0
if [ "$rc_sys" = "XENU" ] && ! grep -q '^xenfs' /proc/mounts; then
modprobe xenfs
mount -t xenfs xenfs /proc/xen
fi
if [ "$USEANSWERFILE" != "" ]; then
if [ -e "$USEANSWERFILE" ]; then
. "$USEANSWERFILE"
fi
fi
if [ "$CREATEANSWERFILE" != "" ]; then
touch "$CREATEANSWERFILE" || echo "Cannot touch file $CREATEANSWERFILE"
cat > "$CREATEANSWERFILE" <<-__EOF__
# Example answer file for setup-alpine script
# If you don't want to use a certain option, then comment it out
# Use US layout with US variant
KEYMAPOPTS="us us"
# Set hostname to alpine-test
HOSTNAMEOPTS="-n alpine-test"
# Contents of /etc/network/interfaces
INTERFACESOPTS="auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
hostname alpine-test
"
# Search domain of example.com, Google public nameserver
DNSOPTS="-d example.com 8.8.8.8"
# Set timezone to UTC
TIMEZONEOPTS="-z UTC"
# set http/ftp proxy
PROXYOPTS="http://webproxy:8080"
# Add a random mirror
APKREPOSOPTS="-r"
# Install Openssh
SSHDOPTS="-c openssh"
# Use openntpd
NTPOPTS="-c openntpd"
# Use /dev/sda as a data disk
DISKOPTS="-m data /dev/sda"
# Setup in /media/sdb1
LBUOPTS="/media/sdb1"
APKCACHEOPTS="/media/sdb1/cache"
__EOF__
echo "Answer file $CREATEANSWERFILE has been created. Please add or remove options as desired in that file"
exit 0
fi
if [ "$ARCHIVE" ] ; then
echo "Creating an Alpine overlay"
init_tmpdir ROOT
else
PKGADD="apk add"
fi
if [ "$rc_sys" != LXC ]; then
$PREFIX/sbin/setup-keymap ${KEYMAPOPTS}
$PREFIX/sbin/setup-hostname ${HOSTNAMEOPTS}
fi
if [ -n "$INTERFACESOPTS" ]; then
printf "$INTERFACESOPTS" | $PREFIX/sbin/setup-interfaces -i
else
$PREFIX/sbin/setup-interfaces ${quick:+-a}
fi
# start the networking
/etc/init.d/networking --quiet start >/dev/null
# setup up dns if no dhcp was configured
grep '^iface.*dhcp' $ROOT/etc/network/interfaces > /dev/null ||\
$PREFIX/sbin/setup-dns ${DNSOPTS}
# set root password
if [ -z "$NOCOMMIT" ] && [ -z "$empty_root_password" ]; then
while ! passwd ; do
echo "Please retry."
done
fi
if [ -z "$quick" ]; then
# pick timezone
$PREFIX/sbin/setup-timezone ${TIMEZONEOPTS}
fi
rc-update --quiet add networking boot
rc-update --quiet add urandom boot
for svc in acpid cron crond; do
if rc-service --exists $svc; then
rc-update --quiet add $svc
fi
done
# enable new hostname
/etc/init.d/hostname --quiet restart
# start up the services
openrc boot
openrc default
# update /etc/hosts - after we have got dhcp address
# Get default fully qualified domain name from *first* domain
# given on *last* search or domain statement.
_dn=$(sed -n \
-e '/^domain[[:space:]][[:space:]]*/{s///;s/\([^[:space:]]*\).*$/\1/;h;}' \
-e '/^search[[:space:]][[:space:]]*/{s///;s/\([^[:space:]]*\).*$/\1/;h;}' \
-e '${g;p;}' /etc/resolv.conf 2>/dev/null)
_hn=$(hostname)
_hn=${_hn%%.*}
sed -i -e "s/^127\.0\.0\.1.*/127.0.0.1\t${_hn}.${_dn:-$(get_fqdn)} ${_hn} localhost.localdomain localhost/" /etc/hosts
if [ -z "$quick" ]; then
$PREFIX/sbin/setup-proxy -q ${PROXYOPTS}
fi
# activate the proxy if configured
if [ -r "$ROOT/etc/profile" ]; then
. "$ROOT/etc/profile"
fi
$PREFIX/sbin/setup-apkrepos ${APKREPOSOPTS}
# lets stop here if in "quick mode"
if [ "$quick" = 1 ]; then
exit 0
fi
$PREFIX/sbin/setup-sshd ${SSHDOPTS}
if ! is_qemu && [ "$rc_sys" != "LXC" ]; then
$PREFIX/sbin/setup-ntp ${NTPOPTS}
fi
if is_xen_dom0; then
setup-xen-dom0
fi
if [ "$rc_sys" = "LXC" ]; then
exit 0
fi
DEFAULT_DISK=none \
$PREFIX/sbin/setup-disk -q ${DISKOPTS} || exit
diskmode=$(cat /tmp/alpine-install-diskmode.out 2>/dev/null)
# setup lbu and apk cache unless installed sys on disk
if [ "$diskmode" != "sys" ]; then
$PREFIX/sbin/setup-lbu ${LBUOPTS}
$PREFIX/sbin/setup-apkcache ${APKCACHEOPTS}
if [ -L /etc/apk/cache ]; then
apk cache sync
fi
fi