#!/bin/sh PROGRAM=setup-alpine VERSION=@VERSION@ 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