diff --git a/install.sh b/install.sh index 5d54a35..9c4c309 100755 --- a/install.sh +++ b/install.sh @@ -63,6 +63,45 @@ mask2prefix() { echo ${prefix} } +parse_debian_interfaces() { + local filename="${1}" # path to interfaces file + local interface="${2}" # interface name + local addrtype="${3}" # inet or inet6 + local found=false address= prefix= gateway= + local kw args + while read kw args; do + if ! ${found}; then + if [ "${kw}" = "iface" ] && \ + [ "${args}" = "${interface} ${addrtype} static" ]; then + found=true + fi + continue + fi + case ${kw} in + iface) + break + ;; + address) + address="${args}" + ;; + netmask) + if [ "${args/.}" != "${args}" ]; then + prefix=$(mask2prefix "${args}") + else + prefix="${args}" + fi + ;; + gateway) + gateway="${args}" + ;; + esac + done <"${filename}" + echo "local pdi_found=${found};" + echo "local pdi_address='${address}';" + echo "local pdi_prefix='${prefix}';" + echo "local pdi_gateway='${gateway}';" +} + clean_archroot() { local file local prompted=false @@ -253,6 +292,9 @@ postbootstrap_configuration() { # set up fstab echo "LABEL=DOROOT / ext4 defaults 0 1" >> /archroot/etc/fstab + # set up hostname + [ -e /etc/hostname ] && cp /etc/hostname /archroot/etc/hostname + # set up shadow ( umask 077 @@ -264,31 +306,63 @@ postbootstrap_configuration() { rm /archroot/etc/shadow.new ) - # set up network - local grepfd - local ipaddr netmask gateway prefixlen + # set up internet network local eni=/etc/network/interfaces - exec {grepfd}< <( - grep -m 1 -o 'address [0-9.]\+' ${eni} - grep -m 1 -o 'netmask [0-9.]\+' ${eni} - grep -m 1 -o 'gateway [0-9.]\+' ${eni} - ) - read ignored ipaddr <&${grepfd} - read ignored netmask <&${grepfd} - read ignored gateway <&${grepfd} - exec {grepfd}<&- - prefixlen=$(mask2prefix ${netmask}) + { + cat <<-EOF + [Match] + Name=eth0 - cat > /archroot/etc/systemd/network/internet.network </archroot/etc/systemd/network/internet.network -[Network] -Address=${ipaddr}/${prefixlen} -Gateway=${gateway} -DNS=8.8.8.8 -DNS=8.8.4.4 -EOF + # set up private network + eval "$(parse_debian_interfaces ${eni} eth1 inet)" + if ${pdi_found}; then + cat >/archroot/etc/systemd/network/private.network <<-EOF + [Match] + Name=eth1 + + [Network] + Address=${pdi_address}/${pdi_prefix} + EOF + fi # copy over ssh keys cp -p /etc/ssh/ssh_*_key{,.pub} /archroot/etc/ssh/