Permit adding routes in installer was my goal :)

Le 10/11/2018 à 01:16, Todd T. Fries a écrit :
> Would there be any merit in contemplating a syntax that would permit
> adding routes in hostname.if so the installer could pick that up and
> avoid the much more corner case shell disaster scenarios?
> 
> note .. 'route add' no longer requires -inet6 so we would not need a
> special route6 syntax.
> 
> For example, one attempt at doing this could look like the below:
> 
> /usr/src/etc$ cat /etc/hostname.vether2 
> 10.2.2.2/24
> inet6 eui64
> route 1.2.3.0/24 10.2.2.1
> route 2001:db8::/96 fe80::1%\$if
> /usr/src/etc$ doas sh ./netstart -n vether2
> ifconfig vether2 10.2.2.2/24
> ifconfig vether2 inet6 eui64
> route -q add 1.2.3.0/24 10.2.2.1
> route -q add 2001:db8::/96 fe80::1%vether2
> /usr/src/etc$ ifconfig vether2
> vether2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>         lladdr fe:e1:ba:dc:67:9b
>         index 20 priority 0 llprio 3
>         groups: vether
>         media: Ethernet autoselect
>         status: active
>         inet 10.2.2.2 netmask 0xffffff00 broadcast 10.2.2.255
>         inet6 fe80::6a0e:c942:3581:6ebf%vether2 prefixlen 64 scopeid 0x14
> /usr/src/etc$ netstat -nr | grep vether2
> 1.2.3/24           10.2.2.1           UGS        0        0     -     8 
> vether2
> 10.2.2/24          10.2.2.2           UCn        1        0     -     4 
> vether2
> 10.2.2.1           link#20            UHLch      1        2     -     3 
> vether2
> 10.2.2.2           fe:e1:ba:dc:67:9b  UHLl       0        0     -     1 
> vether2
> 10.2.2.255         10.2.2.2           UHb        0        0     -     1 
> vether2
> 2001:db8::/96                      fe80::1%vether2                UGS        
> 0        0     -     8 vether2
> fe80::%vether2/64                  fe80::6a0e:c942:3581:6ebf%vether2 UCn      
>   1        0     -     4 vether2
> fe80::1%vether2                    link#20                        UHLch      
> 1        2     -     3 vether2
> fe80::6a0e:c942:3581:6ebf%vether2  fe:e1:ba:dc:67:9b              UHLl       
> 0        0     -     1 vether2
> ff01::%vether2/32                  fe80::6a0e:c942:3581:6ebf%vether2 Um       
>   0        0     -     4 vether2
> ff02::%vether2/32                  fe80::6a0e:c942:3581:6ebf%vether2 Um       
>   0        0     -     4 vether2
> /usr/src/etc$ diff -u netstart.orig netstart
> --- netstart.orig     Fri Nov  9 17:58:58 2018
> +++ netstart  Fri Nov  9 18:09:39 2018
> @@ -68,6 +68,10 @@
>               _cmds[${#_cmds[*]}]="ifconfig $_if ${_c[@]} up;dhclient $_if"
>               V4_DHCPCONF=true
>               ;;
> +     route)  ((${#_c[*]} == 3)) || return
> +             _cmd=$(print -- "${_c[@]}" | sed 's/\$if/'$_if'/g')
> +             _cmds[${#_cmds[*]}]="route -q add${_cmd#route}"
> +             ;;
>       '!'*)   _cmd=$(print -- "${_c[@]}" | sed 's/\$if/'$_if'/g')
>               _cmds[${#_cmds[*]}]="${_cmd#!}"
>               ;;
> 
> 
> 
> If this is worth pursuing, I'll create and test an installer equivalent 
> version.
> 
> Thanks,
> 
> Penned by Theo de Raadt on 20181109 10:13.33, we have:
> | This was intentional because a user could put crazy script commands
> | in the files which don't work in the bsd.rd context.  bsd.rd is
> | quite gutted.
> | 
> | That means some circumstances could fail quite badly
> | 
> | Could be reconsidered...
> | 
> | > During auto upgrade via the auto_upgrade.conf file (no DHCP server),
> | > shell commands are skipped.
> | > This small diff is coming from parse_hn_line() in /etc/netstart, thus,
> | > it keeps the behavior similar.
> | > I think it's handy, especially if you need a static route in order to
> | > reach a mirror for example.
> | > 
> | > diff --git install.sub install.sub
> | > index bce1fa50358..31dbafdc95d 100644
> | > --- install.sub
> | > +++ install.sub
> | > @@ -2319,8 +2319,11 @@ parse_hn_line() {
> | >                 _cmds[${#_cmds[*]}]="ifconfig $_if ${_c[@]} up;dhclient
> | > $_if"
> | >                 V4_DHCPCONF=true
> | >                 ;;
> | > -       '!'*|bridge)
> | > -               # Skip shell commands and bridge in the installer.
> | > +       '!'*) _cmd=$(print -- "${_c[@]}" | sed 's/\$if/'$_if'/g')
> | > +               _cmds[${#_cmds[*]}]="${_cmd#!}"
> | > +               ;;
> | > +       bridge)
> | > +               # Skip bridge in the installer.
> | >                 return
> | >                 ;;
> | >         *)      _cmds[${#_cmds[*]}]="ifconfig $_if ${_c[@]}"
> | > 
> | > 
> | > Cheers
> | > 
> 

Reply via email to