diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2009-05-06 09:53:36 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2009-05-06 09:53:36 +0000 |
commit | ec0c7a74bbf5824adc4efa54e1f91984ac870a8e (patch) | |
tree | 7f5a8763836154b10c8325629b493ebc67ead7e6 /setup-alpine-web.in | |
parent | f590563940559429ffe77094473d12361937852d (diff) | |
download | alpine-conf-ec0c7a74bbf5824adc4efa54e1f91984ac870a8e.zip |
move to .in files
Diffstat (limited to 'setup-alpine-web.in')
-rw-r--r-- | setup-alpine-web.in | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/setup-alpine-web.in b/setup-alpine-web.in new file mode 100644 index 0000000..ca98d1f --- /dev/null +++ b/setup-alpine-web.in @@ -0,0 +1,145 @@ +#!/bin/sh + +PROGRAM=${0##*/} + +BRNUM=0 +CNET="10.$BRNUM.0" +HNAME=alpine +DOMAIN="bootstrap.invalid" +IFACE_LIST=/tmp/interfaces + +get_interfaces() { + [ -f "$IFACE_LIST" ] || tail -n +3 /proc/net/dev \ + | awk -F: '$1 !~ /lo/ { print $1 }' > "$IFACE_LIST" + cat "$IFACE_LIST" +} + +make_dhcp_subnet() { + local num=$1 + local iface=$2 + local network="$CNET.$num" + local netmask=255.255.255.240 + local router="$CNET.$(( $num + 1 ))" + local poolstart="$CNET.$(( $num + 3 ))" + local poolend="$CNET.$(( $num + 14 ))" + echo "subnet $network netmask $netmask {" + echo " range $poolstart $poolend;" + echo " option routers $router;" + echo "}" + echo "" + ip addr add $router/28 dev $iface || echo "Failed to set address $router/28 on $iface" >&2 + ip link set dev $iface up + iptables -t nat -A PREROUTING -i $iface -j DNAT --to-destination $router +} + +make_dhcp_global() { + echo "option domain-name \"$DOMAIN\";" + echo "option domain-name-servers $CNET.1;" + echo "ddns-update-style none;" + echo "" +} + +do_setup() { + local i + local count + hostname $HNAME + + # install needed packages + apk_add dhcp iptables "$@" + + # config dhcp server + make_dhcp_global > /etc/dhcp/dhcpd.conf + count=0 + for i in $(get_interfaces); do + # maximum 16 network interfaces + [ $count -ge 16 ] && break + make_dhcp_subnet $(( $count * 16 )) $i >> /etc/dhcp/dhcpd.conf + count=$(( $count + 1 )) + done + + /etc/init.d/syslog start + /etc/init.d/dhcpd start + FORCE_SETUP_WEBCONF=yes setup-webconf "$@" + + # set up http listener/forwarder + mkdir -p /var/www/redirect + cat <<EOF >/var/www/redirect/index.html +<html> + <head> + <meta HTTP-EQUIV="REFRESH" content="0; url=https://$(hostname)"> + </head> + <body></body> +</html> +EOF + echo "E404:/var/www/redirect/index.html" > /etc/httpd.conf + echo "HTTPD_OPTS=\"-h /var/www/redirect\"" > /etc/conf.d/httpd + + /etc/init.d/httpd start + + # dummy dns + echo "* $CNET.1" > /etc/dnsd.conf + /etc/init.d/dnsd start +} + +# reconf dhcp and kill all interfaces but $1 +do_reset() { + local iface=$1 + local i + local oldip=$(ip addr show dev $iface | awk '/inet / { print $2 } ' | head -n 1) + + # setup new dhcpd.conf + make_dhcp_global > /etc/dhcp/dhcpd.conf + cat >> /etc/dhcp/dhcpd.conf <<EOF +subnet $CNET.0 netmask 255.255.255.0 { + range $CNET.3 $CNET.14; + option routers $CNET.1; +} +EOF + + # shut down all interfaces + for i in $(get_interfaces); do + ip addr flush dev $i + [ "$i" = "$iface" ] && continue + ip link set dev $i down + done + + # bring interface up again and flush iptables + ip addr add $oldip dev $iface + ip addr add $CNET.1/24 dev $iface + iptables -t nat -F PREROUTING + + /etc/init.d/dhcpd restart +} + +usage() { + cat <<EOF +usage: $PROGRAM [-c X.Y.Z] [-H HOSTNAME] [-R IFACE] +options: + -c Use X.Y.Z as network prefix rather than $CNET + -H set hostname + -R reset previously configured initerfaces and configure IFACE + +EOF + exit 0 +} + +# parse args +while getopts "b:c:d:H:hR:" opts; do + case "$opts" in + b) BRNUM="$OPTARG";; + c) CNET="$OPTARG";; + d) DOMAIN="$OPTARG";; + H) HNAME="$OPTARG";; + h) usage;; + R) KEEP_IFACE="$OPTARG";; + esac +done +shift $(( $OPTIND - 1 )) + +if [ -z "$KEEP_IFACE" ]; then + do_setup "$@" + exit 0 +fi + +do_reset "$KEEP_IFACE" + |