X-Git-Url: https://iankelling.org/git/?p=automated-distro-installer;a=blobdiff_plain;f=wrt-setup-local;h=f5711d074b8aebd81b95cfcfbcc0d159e0b09ef3;hp=43628bc8bee6f049a19807c2fc0c549ad45ab01c;hb=8bf6d9c4cc9ec88976c62af33f32c0c660e977e0;hpb=0d7f79362d601b278236cd1c533c7333e342b54a diff --git a/wrt-setup-local b/wrt-setup-local index 43628bc..f5711d0 100755 --- a/wrt-setup-local +++ b/wrt-setup-local @@ -18,6 +18,67 @@ set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR + +usage() { + cat <&2; usage 1 ;; + esac + ;; + m) mac=$OPTARG ;; + *) echo "$0: Internal error! unexpected args: $*" >&2 ; usage 1 ;; + esac +done +shift "$((OPTIND-1))" # Discard the options and sentinel -- + +if [[ ! $mac ]] && ! $test; then + # if we wanted to increment it + #WIRELESSMAC=${WIRELESSMAC:0: -1}$((${WIRELESSMAC: -1} + 2)) + mac=$WIRELESSMAC +fi + +if (( $# != 0 )); then + usage 1 +fi + + +macpre=${mac:0: -1} +macsuf=${mac: -1} + pmirror() { # background: upgrading all packages is not recommended because it # doesn't go into the firmware. build new firmware if you want @@ -42,15 +103,56 @@ v() { "$@" } +######### uci example:####### +# # https://wiki.openwrt.org/doc/uci +# wan_index=$(uci show firewall | sed -rn 's/firewall\.@zone\[([0-9])+\]\.name=wan/\1/p') +# wan="firewall.@zone[$wan_index]" +# if [[ $(uci get firewall.@forwarding[0].dest) != $forward_dest ]]; then +# # default is wan +# v uci set firewall.@forwarding[0].dest=$forward_dest +# uci commit firewall +# firewall_restart=true +# fi +####### end uci example ##### + +uset() { + local key="$1" + local val="$2" + local service="${key%%.*}" + restart_var=${service}_restart + if [[ ! ${!restart_var} ]]; then + eval $restart_var=false + fi + if [[ $(uci get "$key") != "$val" ]]; then + v uci set "$key"="$val" + uci commit $service + eval $restart_var=true + fi +} + + ### network config ### ssid="check out gnu.org" lan=10.0.0.0 +if $test; then + ssid="gnuv3" + lan=10.1.0.0 +fi mask=255.255.0.0 +cidr=16 l=${lan%.0} passwd -l root ||: #already locked fails +sed -ibak '/^root:/d' /etc/shadow +# /root/router created by manually running passwd then copying the resulting +# line. We have no mkpasswd on wrt/librecmc, then we scp it in. +cat /root/router >>/etc/shadow +# otherwise, serial console gets root login with no password +uset system.@system[0].ttylogin 1 + + cat >/usr/bin/archlike-pxe-mount <<'EOFOUTER' #!/bin/bash # symlinks are collapsed for nfs mount points, so use a bind mount. @@ -68,16 +170,16 @@ done EOFOUTER chmod +x /usr/bin/archlike-pxe-mount -cat >.profile <<'EOF' -# changing login shell emits spam on ssh single commands & scp - # sed -i 's#/bin/ash$#/bin/bash#' /etc/passwd -# https://github.com/openwrt/packages/issues/6137 -[ "$BASH_VERSION" != "" ] || exec /bin/bash -i -EOF +sed -i '/^root:/s,/bin/ash$,/bin/bash,' /etc/passwd +# usb, screen, relay are for libremanage v pi kmod-usb-storage block-mount kmod-fs-ext4 nfs-kernel-server \ - tcpdump openvpn-openssl adblock - + tcpdump openvpn-openssl adblock libusb-compat /root/relay_1.0-1_mips_24kc.ipk \ + screen kmod-usb-serial-cp210x kmod-usb-serial-ftdi +cat >/etc/libremanage.conf </dev/null) ]]; then - v uci delete wireless.default_radio$x.disabled - wireless_restart=true + uset wireless.default_radio$x.ssid "$ssid" + uset wireless.default_radio$x.key $key + uset wireless.default_radio$x.encryption psk2 + if [[ $mac ]]; then + uset wireless.default_radio$x.macaddr $macpre$((macsuf + 2*x)) fi + # secondary device has wireless disabled + uset wireless.radio$x.disabled $dev2 done if $wireless_restart; then - uci commit wireless v wifi fi @@ -217,78 +313,129 @@ EOF firewall_restart=false v cedit /etc/config/firewall </dev/null) ]]; then dnsmasq_restart=true fi -if [[ $(uci get dhcp.@dnsmasq[0].domain) != b8.nz ]]; then - v uci set dhcp.@dnsmasq[0].domain=b8.nz - uci commit dhcp - dnsmasq_restart=true -fi -if [[ $(uci get dhcp.@dnsmasq[0].local) != /b8.nz/ ]]; then - v uci set dhcp.@dnsmasq[0].local=/b8.nz/ - uci commit dhcp - dnsmasq_restart=true -fi - -if [[ $(uci get system.@system[0].hostname) != wrt ]]; then - v uci set system.@system[0].hostname=wrt - uci commit system -fi - +uset dhcp.@dnsmasq[0].domain b8.nz +uset dhcp.@dnsmasq[0].local /b8.nz/ +uset system.@system[0].hostname $hostname if [[ $(uci get adblock.global.adb_enabled) != 1 ]]; then v uci set adblock.global.adb_enabled=1 @@ -410,18 +541,20 @@ dhcp-host=c8:60:00:31:6b:75,set:kd,$l.2,kd # top port, iPXE (PCI 04:00.0) in seabios boot menu #dhcp-host=c8:60:00:2b:15:07,set:kd,$l.2,kd dhcp-host=00:26:18:97:bb:16,set:frodo,$l.3,frodo -dhcp-host=10:78:d2:da:29:22,set:htpc,$l.4,htpc +# 4 is reserved for a staticly configured host. dhcp-host=00:1f:16:16:39:24,set:x2,$l.5,x2 -#dhcp-host=00:c0:ca:27:e9:b2,set:x2w,$l.11,x2w -#wireless interface -# this is so fai can have an explicit name to use for testing, +# This is so fai can have an explicit name to use for testing, # or else any random machine which did a pxe boot would get # reformatted. The mac is from doing a virt-install, cancelling it, # and copying the generated mac, so it should be randomish. dhcp-host=52:54:00:9c:ef:ad,set:demohost,$l.6,demohost -#dhcp-host=52:54:00:56:09:f9,set:faiserver,$l.7,faiserver +dhcp-host=00:1f:16:14:01:d8,set:tp,$l.7,x3 dhcp-host=80:fa:5b:1c:6e:cf,set:tp,$l.8,tp -# this is the ip it picks by default if dhcp fails, + +# faiserver vm +dhcp-host=52:54:00:56:09:f9,set:faiserver,$l.15,faiserver + +# This is the ip it picks by default if dhcp fails, # so might as well use it. # hostname is the name it uses according to telnet dhcp-host=b4:75:0e:94:29:ca,set:switch9429ca,$l.251,switch9429ca @@ -435,6 +568,22 @@ enable-tftp=br-lan tftp-root=/mnt/usb/tftpboot EOF +uset network.lan.ipaddr $l.$lanip +uset network.lan.netmask $mask +uset dhcp.wan.ignore $dev2 # default is false +uset dhcp.lan.ignore $dev2 # default is false +if $dev2; then + uset network.lan.gateway $l.1 + uset network.wan.proto none + uset network.wan6.proto none +else + # these are the defaults + uset network.lan.gateway '' + uset network.wan.proto dhcp + uset network.wan6.proto dhcpv6 +fi + + if $dnsmasq_restart; then v /etc/init.d/dnsmasq restart fi @@ -444,19 +593,12 @@ if $firewall_restart; then fi -reboot=false -if [[ $(uci get network.lan.ipaddr) != $l.1 ]]; then - v uci set network.lan.ipaddr=$l.1 - uci commit network - reboot=true -fi -if [[ $(uci get network.lan.netmask) != $mask ]]; then - v uci set network.lan.netmask=$mask - uci commit network - reboot=true -fi -if $reboot; then +if $network_restart; then reboot fi +if $dropbear_restart; then + v /etc/init.d/dropbear restart +fi + exit 0