From owner-freebsd-bugs@FreeBSD.ORG Mon Oct 20 04:20:22 2003 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7F7C216A4B3 for ; Mon, 20 Oct 2003 04:20:22 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8256C43F93 for ; Mon, 20 Oct 2003 04:20:21 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h9KBKJFY035199 for ; Mon, 20 Oct 2003 04:20:19 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h9KBKJAQ035197; Mon, 20 Oct 2003 04:20:19 -0700 (PDT) (envelope-from gnats) Resent-Date: Mon, 20 Oct 2003 04:20:19 -0700 (PDT) Resent-Message-Id: <200310201120.h9KBKJAQ035197@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Matt Peterson Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 566E316A4C0 for ; Mon, 20 Oct 2003 04:14:58 -0700 (PDT) Received: from mail.forko.com (forko.com [206.14.189.156]) by mx1.FreeBSD.org (Postfix) with ESMTP id 50B1843F3F for ; Mon, 20 Oct 2003 04:14:57 -0700 (PDT) (envelope-from matt@mail.forko.com) Received: (qmail 69372 invoked by uid 1000); 20 Oct 2003 04:10:02 -0700 Message-Id: <20031020111002.69371.qmail@mail.forko.com> Date: 20 Oct 2003 04:10:02 -0700 From: Matt Peterson To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 cc: Dirk-Willem van Gulik cc: phk@FreeBSD.org Subject: misc/58272: [patch] rc.d/diskless detection, dhcp rebuild X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Matt Peterson List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Oct 2003 11:20:22 -0000 >Number: 58272 >Category: misc >Synopsis: [patch] rc.d/diskless detection, dhcp rebuild >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Oct 20 04:20:16 PDT 2003 >Closed-Date: >Last-Modified: >Originator: Matt Peterson >Release: FreeBSD 5.1-CURRENT i386 >Organization: Bay Area Wireless Users Group >Environment: >Description: The following patch fixes a few issues with the rc.d/diskless script: 1. Add detection based on read-only / (popular for embedded systems which are booting from flash, not NFS/PXE/etc). 2. Require syslog & named before, since they may require a writable /var 3. Move newalias rebuild, only if sendmail is enabled 4. Re-work DHCP domain-name & DNS to use kenv dhcp.* values (plumbed from PXE boot loader) OR read from dhclient.leases (in the case of r/o flash using DHCP). Much of these tweaks are down right ugly, I welcome a more sanatized version to be committed. Quick glance from phk was postive, request this PR assigned to DougB; thx! >How-To-Repeat: >Fix: --- diskless.orig Mon Oct 13 01:18:05 2003 +++ diskless Mon Oct 20 03:59:59 2003 @@ -29,11 +29,20 @@ # PROVIDE: diskless # REQUIRE: initdiskless rcconf mountcritlocal -# BEFORE: addswap random +# BEFORE: addswap random named syslogd # KEYWORD: FreeBSD -dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null` -[ ${dlv:=0} -eq 0 ] && exit 0 +# Detect boot from flash (read-only /) or PXE (nfs /) +### TODO: grep requires /usr, re-work to use /sbin/something? +rootdev=`sysctl -n kern.rootdev` +ro_test=`mount | grep $rootdev | grep read` + +if [ -n "$ro_test" ]; then + dlv="2" +else + dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null` + [ ${dlv:=0} -eq 0 ] && exit 0 +fi name="diskless2" @@ -87,11 +96,15 @@ # echo "+++ populate /var using /etc/mtree/BSD.var.dist" /usr/sbin/mtree -deU -f /etc/mtree/BSD.var.dist -p /var > /dev/null + +# Make sendmail happy +# case ${sendmail_enable} in [Nn][Oo][Nn][Ee]) ;; *) /usr/sbin/mtree -deU -f /etc/mtree/BSD.sendmail.dist -p / > /dev/null + /usr/bin/newaliases ;; esac @@ -104,11 +117,6 @@ echo "+++ create lastlog" /usr/bin/touch /var/log/lastlog -# Make sure our aliases database is uptodate, the aliases may have -# been overriden in /conf. -# -/usr/bin/newaliases - # XXX make sure to create one dir for each printer as requested by lpd # # If we do not have a writable /tmp, create a memory @@ -145,23 +153,43 @@ # generate our hostname # -if [ -z "`hostname -s`" -a \ - "x`/bin/kenv dhcp.host-name`" != "x" ]; then - hostname=`/bin/kenv dhcp.host-name` - hostname $hostname - echo "Hostname is $hostname" -fi - -# if the info is available via dhcp/kenv -# build the resolv.conf -# -if [ ! -e /etc/resolv.conf -a \ - "x`/bin/kenv dhcp.domain-name-servers`" != "x" ]; then - echo domain `/bin/kenv dhcp.domain-name` > /etc/resolv.conf - - set `/bin/kenv dhcp.domain-name-servers` - for ns in `IFS=','; echo $*`; do - echo nameserver $ns >> /etc/resolv.conf; - done +if [ -z "`hostname -s`" ] ; then + if [ $dlv = 2 ] ; then + hostname="`grep 'host-name ' /var/db/dhclient.leases | \ + sed -e 's/^.*me \"//' -e 's/\"\;$//'`" + kenv dhcp.host-name="$hostname" + echo here + fi + echo two + hostname "`kenv dhcp.host-name`" + echo "Hostname is $hostname" +fi + +# populate resolv.conf with domain and name servers +# TODO: snarf dhclient_flags for -lf different leases file location +# +# writable? +if [ -w /etc/resolv.conf -o ! -f /etc/resolv.conf ] ; then +# domain already exist? + if [ -z "`grep 'domain' /etc/resolv.conf > /dev/null 2>&1`" ] ; then +# non-PXE boot, snarf from dhclient leases file, fill in kernel enviro + if [ $dlv = 2 ] ; then + /bin/kenv dhcp.domain-name=`grep 'domain-name ' \ + /var/db/dhclient.leases | sed -e 's/^.*me \"//' -e 's/\"\;$//'` \ + > /dev/null 2>&1; + fi + echo domain `/bin/kenv dhcp.domain-name` > /etc/resolv.conf + fi + + if [ -z "`grep 'nameserver' /etc/resolv.conf > /dev/null 2>&1`" ] ; then + if [ $dlv = 2 ] ; then + /bin/kenv dhcp.domain-name-servers=`grep domain-name-servers \ + /var/db/dhclient.leases | sed -e 's/^.*ers //' -e 's/;//'` \ + > /dev/null 2>&1; + fi + set `/bin/kenv dhcp.domain-name-servers` + for ns in `IFS=','; echo $*`; do + echo nameserver $ns >> /etc/resolv.conf; + done + fi fi - >Release-Note: >Audit-Trail: >Unformatted: