A couple of autoinstall(8) tweaks that I find useful. I find it convenient to be able to specify a path to the response file. I also prefer to use the DHCP supplied hostname rather than the MAC address.
Index: install.sub =================================================================== RCS file: /cvs/src/distrib/miniroot/install.sub,v retrieving revision 1.829 diff -u -p -r1.829 install.sub --- install.sub 5 Apr 2015 12:37:14 -0000 1.829 +++ install.sub 6 Apr 2015 13:33:02 -0000 @@ -304,7 +304,7 @@ retrap() { # Fetch response file for autoinstall. get_responsefile() { - local _rf _ifdev _mac _mode _server _lf + local _rf _ifdev _mac _mode _server _lf _path action= [[ -f /auto_upgrade.conf ]] && _rf=/auto_upgrade.conf _mode=upgrade @@ -328,16 +328,18 @@ get_responsefile() { [[ -n $_ifdev ]] && dhclient $_ifdev || break _lf=/var/db/dhclient.leases.$_ifdev _server=$(sed "/^ *next-server /!d;s///;s/;$//;q" $_lf) - _mode=$(sed -E '/^ *filename "auto_(install|upgrade)";$/!d;s//\1/;q' $_lf) + _mode=$(sed -E '/^ *filename "(.*\/)?auto_(install|upgrade)";$/!d;s//\2/;q' $_lf) + _path=$(sed -E '/^ *filename "(.*\/)[^/]+";$/!d;s//\1/;q' $_lf) hostname "$(sed -E '/^ *option host-name "(.*)";$/!d;s//\1/;q' $_lf)" done # Fetch response file if server and mode are known, otherwise tell which - # one was missing. First try to fetch mac-mode.conf, then mode.conf. + # one was missing. First try to fetch mac-mode.conf, then + # hostname-mode.conf, and finally mode.conf. if [[ -n $_server && -n $_mode ]]; then _mac=$(ifconfig $_ifdev | sed 's/.*lladdr \(.*\)/\1/p;d') - for _rf in {$_mac-,}$_mode; do - _url=http://$_server/$_rf.conf + for _rf in {$_mac-,$(hostname -s)-,}$_mode; do + _url=http://$_server/$_path$_rf.conf echo "Fetching $_url" if ftp -Vo "/ai.$_mode.conf" "$_url" 2>/dev/null; then action=$_mode Index: autoinstall.8 =================================================================== RCS file: /cvs/src/share/man/man8/autoinstall.8,v retrieving revision 1.11 diff -u -p -r1.11 autoinstall.8 --- autoinstall.8 23 Oct 2014 21:33:21 -0000 1.11 +++ autoinstall.8 6 Apr 2015 13:31:22 -0000 @@ -47,22 +47,16 @@ It behaves as if the user selected '(A)u always fetches the response file via the netboot interface. .Ss Fetching the response file .Nm -uses HTTP to fetch one of the files -.Pa install.conf -or -.Ar MAC_address Ns - Ns Pa install.conf -for install answers, or one of -.Pa upgrade.conf -or -.Ar MAC_address Ns - Ns Pa upgrade.conf -for upgrade answers. -The URL used to fetch the file is constructed from information provided in -the +uses HTTP to fetch a response file which provides answers to +install or upgrade questions. +The URL used to fetch the response file is constructed from +information provided in the .Xr dhcpd.conf 5 -statements -.Ic next-server +.Ic next-server , +.Ic filename and -.Ic filename . +.Ic host-name +options. If the .Ar filename is @@ -71,6 +65,7 @@ then the URLs tried are, in order: .Sm off .Bd -unfilled -offset indent .No http:// Ar next-server No / Ar MAC_address No -install.conf +.No http:// Ar next-server No / Ar host-name No -install.conf .No http:// Ar next-server No /install.conf .Ed .Sm on @@ -79,7 +74,7 @@ where .Ar MAC_address is a string of six hex octets separated by colons representing the MAC -address of the interface being used to fetch the files. +address of the interface being used to fetch the response file. .Pp If the .Ar filename @@ -89,9 +84,15 @@ the URLs tried are, in order: .Sm off .Bd -unfilled -offset indent .No http:// Ar next-server No / Ar MAC_address No -upgrade.conf +.No http:// Ar next-server No / Ar host-name No -upgrade.conf .No http:// Ar next-server No /upgrade.conf .Ed .Sm on +.Pp +If the +.Ar filename +includes a parent directory it will be used as a server relative +path in the http URL to fetch the response file. .Pp On architectures where the .Ic filename It's handy for the log to remain on the host as a reference. Sometimes the email gets lost (e.g. caught in a spam trap). Index: install.sub =================================================================== RCS file: /cvs/src/distrib/miniroot/install.sub,v retrieving revision 1.829 diff -u -p -r1.829 install.sub --- install.sub 5 Apr 2015 12:37:14 -0000 1.829 +++ install.sub 6 Apr 2015 13:33:02 -0000 @@ -2305,13 +2318,12 @@ elif [[ -z $RESPFILE ]]; then if [[ -f /ai.done ]]; then # Generate unique filename and let rc.firsttime feed it to # whatever mail system we have at hand by then. - while _lf=/mnt/var/log/ai.log.$RANDOM && test -e $_lf; do done + _lf=/mnt/var/log/$action.$(date +%Y%m%d%H%M%S) cp /ai.log $_lf chmod 600 $_lf _lf=${_lf#/mnt} cat <<__EOT >>/mnt/etc/rc.firsttime -( /usr/bin/mail -s '$(hostname) $action log' root < $_lf && - rm $_lf ) >/dev/null 2>&1 & +/usr/bin/mail -s '$(hostname) $action log' root < $_lf >/dev/null 2>&1 & __EOT exec reboot else Nathanael