svn commit: r205081 - in user/luigi/ipfw3-r8/release/picobsd:
bridge build floppy.tree floppy.tree/etc qemu
Luigi Rizzo
luigi at FreeBSD.org
Fri Mar 12 13:53:53 UTC 2010
Author: luigi
Date: Fri Mar 12 13:53:52 2010
New Revision: 205081
URL: http://svn.freebsd.org/changeset/base/205081
Log:
svn merge -r 204832:205079 svn+ssh://svn.freebsd.org/base/stable/8/release/picobsd
Added:
user/luigi/ipfw3-r8/release/picobsd/floppy.tree/sbin
- copied unchanged from r205079, stable/8/release/picobsd/floppy.tree/sbin
user/luigi/ipfw3-r8/release/picobsd/qemu/
- copied from r205079, stable/8/release/picobsd/qemu/
Modified:
user/luigi/ipfw3-r8/release/picobsd/bridge/PICOBSD
user/luigi/ipfw3-r8/release/picobsd/bridge/crunch.conf
user/luigi/ipfw3-r8/release/picobsd/build/mfs.mtree
user/luigi/ipfw3-r8/release/picobsd/build/picobsd
user/luigi/ipfw3-r8/release/picobsd/floppy.tree/etc/master.passwd
Directory Properties:
user/luigi/ipfw3-r8/release/picobsd/ (props changed)
Modified: user/luigi/ipfw3-r8/release/picobsd/bridge/PICOBSD
==============================================================================
--- user/luigi/ipfw3-r8/release/picobsd/bridge/PICOBSD Fri Mar 12 13:36:58 2010 (r205080)
+++ user/luigi/ipfw3-r8/release/picobsd/bridge/PICOBSD Fri Mar 12 13:53:52 2010 (r205081)
@@ -16,8 +16,8 @@ cpu I586_CPU
cpu I686_CPU
ident PICOBSD
-options SMP
-device apic
+options SMP
+device apic
options SCHED_4BSD # mandatory to have one scheduler
#options MATH_EMULATE #Support for x87 emulation
@@ -48,7 +48,7 @@ options DUMMYNET
device if_bridge
# Running with less than 1000 seems to give poor timing on
# qemu, so we set HZ explicitly.
-options HZ=1000
+options HZ=1000
device random # used by ssh
device pci
Modified: user/luigi/ipfw3-r8/release/picobsd/bridge/crunch.conf
==============================================================================
--- user/luigi/ipfw3-r8/release/picobsd/bridge/crunch.conf Fri Mar 12 13:36:58 2010 (r205080)
+++ user/luigi/ipfw3-r8/release/picobsd/bridge/crunch.conf Fri Mar 12 13:53:52 2010 (r205081)
@@ -180,4 +180,4 @@ libs_so -lkvm
libs_so -lz
libs_so -lbsdxml
libs_so -lsbuf
-libs_so -ljail # used by ifconfig
+libs_so -ljail # used by ifconfig
Modified: user/luigi/ipfw3-r8/release/picobsd/build/mfs.mtree
==============================================================================
--- user/luigi/ipfw3-r8/release/picobsd/build/mfs.mtree Fri Mar 12 13:36:58 2010 (r205080)
+++ user/luigi/ipfw3-r8/release/picobsd/build/mfs.mtree Fri Mar 12 13:53:52 2010 (r205081)
@@ -58,6 +58,8 @@
var
db
..
+ empty
+ ..
run
..
spool
Modified: user/luigi/ipfw3-r8/release/picobsd/build/picobsd
==============================================================================
--- user/luigi/ipfw3-r8/release/picobsd/build/picobsd Fri Mar 12 13:36:58 2010 (r205080)
+++ user/luigi/ipfw3-r8/release/picobsd/build/picobsd Fri Mar 12 13:53:52 2010 (r205081)
@@ -167,7 +167,7 @@ create_includes_and_libraries2() { # opt
local no
log "create_includes_and_libraries2() for ${SRC}"
if [ ${OSVERSION} -ge 600000 ] ; then
- no="-DNO_CLEAN -DNO_PROFILE -DNO_GAMES -DNO_LIBC_R" # WITOUT_CDDL=1"
+ no="-DNO_CLEAN -DNO_PROFILE -DNO_GAMES -DNO_LIBC_R" # WITHOUT_CDDL=1"
else
no="-DNOCLEAN -DNOPROFILE -DNOGAMES -DNOLIBC_R"
fi
@@ -568,10 +568,17 @@ do_links() { # rootdir varname
# find_progs is a helper function to locate the named programs
# or libraries in ${o_objdir} or ${_SHLIBDIRPREFIX},
# and return the full pathnames.
-# Sets ${u_progs} to the list of programs, and ${u_libs}
+# Called as "find_progs [-L libpath] [-P binpath] prog1 prog2 ... "
+# On return it sets ${u_progs} to the list of programs, and ${u_libs}
# to the list of shared libraries used.
+#
+# '-L path' can be used to specify a search path for libraries
+# (which searches in $path/lib:$path/usr/lib:$path/usr/local/lib
+# '-P binpath' can be used to specify a search path for programs
+# (which searches in a lot of places in the subtree)
+# -L must be the first, followed by -P
#
-# You can use it e.g. in a local configuration file by writing
+# You can use it e.g. in a local confign file by writing
#
# do_copyfiles_user() {
# local dst=$1
@@ -580,41 +587,61 @@ do_links() { # rootdir varname
# cp -p ${u_libs} ${dst}/lib
# mkdir -p ${dst}/libexec
# find_progs ld-elf.so.1
-# cp -p ${u_progs} ${dst}/libexec
+# cp -p ${u_progs} ${dst}/libexec # ignore errors
# }
find_progs() { # programs
local i
+ local oo=${o_objdir:-${_SHLIBDIRPREFIX}} # default objdir
+ local lp=$oo/lib # default lib.prefix
+ local o="" # additional objdir
+ if [ x"$1" = "x-L" -a -d "$2" ] ; then # set lib search path
+ o=$2; shift; shift
+ lp="$lp:$o/lib:$o/usr/lib:$o/usr/local/lib"
+ o="-P $o"
+ fi
+ u_libs=""
u_progs="`find_progs_helper $*`"
- local o=${o_objdir:-${_SHLIBDIRPREFIX}}
- log "looking for libs for $u_progs in $_SHLIBDIRPREFIX"
+ log "looking for libs for <$u_progs> in $lp"
[ -z "${u_progs}" ] && return 1 # not found, error
- i="`LD_LIBRARY_PATH=$o/lib ldd ${u_progs} | grep -v '^/' | awk '{print $1}' | sort | uniq`"
- u_libs="`find_progs_helper $i`"
+ i="`( LD_LIBRARY_PATH=$lp ldd ${u_progs} ) | \
+ grep -v '^/' | awk '{print $1}' | sort | uniq`"
+ u_libs="`find_progs_helper $o $i`"
return 0
}
find_progs_helper() { # programs
+ local dir=${o_objdir:-${_SHLIBDIRPREFIX}/..}
+ local ldir=""
+ if [ x"$1" = "x-P" -a -d "$2" ] ; then # set path
+ ldir=$2; shift; shift
+ fi
local progs="$*"
- local i o places names
- local subdirs="bin sbin usr.bin usr.sbin libexec lib \
+ local subdirs=". local/bin local/sbin local/lib local/libexec \
+ bin sbin usr.bin usr.sbin libexec lib \
gnu/usr.bin gnu/lib \
secure/usr.bin secure/usr.sbin secure/libexec secure/lib"
- names="" # files to search
- o=""
+ local names="" # files to search
+ local o=""
+ local i
for i in $progs ; do
- # plain programs come out verbatim
+ # full pathnames are just listed
[ -f "$i" ] && echo $i && continue
names="${names} ${o} -name $i"
o="-o"
done
[ -z "${names}" ] && return 0
- places="" # places to search
- o=${o_objdir:-${_SHLIBDIRPREFIX}/..}
+ local places="" # places to search
for i in $subdirs ; do
- [ -d "${o}/${i}" ] && places="${places} ${o}/${i}"
+ [ -d "${dir}/${i}" ] && places="${places} ${dir}/${i}"
done
- find ${places} -type f \( ${names} \)
+ if [ -n "${ldir}" ] ; then
+ for i in $subdirs ; do
+ [ -d "${ldir}/${i}" ] && places="${places} ${ldir}/${i}"
+ done
+ fi
+ # use maxdepth 3 because some libs are way down
+ find ${places} -maxdepth 3 -type f \( ${names} \)
}
# Populate the memory filesystem with binaries and non-variable
@@ -862,7 +889,7 @@ fill_floppy_image() {
if [ ${mfs_start} -gt 0 -a ${mfs_size} -ge ${imgsize} ] ; then
mfs_ofs=$((${mfs_start} + 8192))
log "Preload kernel with file ${c_fs} at ${mfs_ofs}"
- logverbose "`ls -l ${c_fs}` to fit in ${mfs_size}"
+ log "`ls -l ${c_fs}` to fit in ${mfs_size}"
dd if=${c_fs} ibs=8192 iseek=1 of=kernel obs=${mfs_ofs} \
oseek=1 conv=notrunc # 2> /dev/null
else
@@ -917,7 +944,7 @@ fill_floppy_image() {
ls -l ${c_img}
${c_label} -f `pwd`/${c_img}
- logverbose "after disklabel"
+ log "after disklabel"
)
echo "BUILDDIR ${BUILDDIR}"
@@ -931,7 +958,7 @@ fill_floppy_image() {
dd if=${b2} iseek=1 ibs=276 2> /dev/null | \
dd of=${BUILDDIR}/${c_img} oseek=1 obs=788 conv=notrunc 2>/dev/null
- logverbose "done floppy image"
+ log "done disk image"
# XXX (log "Fixing permissions"; cd ${dst}; chown -R root *)
rm -rf ${BUILDDIR}/floppy.tree || true # cleanup
# df -ik ${dst} | colrm 70 > .build.reply
Modified: user/luigi/ipfw3-r8/release/picobsd/floppy.tree/etc/master.passwd
==============================================================================
--- user/luigi/ipfw3-r8/release/picobsd/floppy.tree/etc/master.passwd Fri Mar 12 13:36:58 2010 (r205080)
+++ user/luigi/ipfw3-r8/release/picobsd/floppy.tree/etc/master.passwd Fri Mar 12 13:53:52 2010 (r205081)
@@ -1,3 +1,4 @@
+# $FreeBSD$
root:$1$xOOaGnKU$U9QdsCI40XXcCUMBN.7Az.:0:0::0:0:Charlie &:/root:/bin/sh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/nonexistent
@@ -5,4 +6,5 @@ operator:*:2:20::0:0:System &:/usr/guest
bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/nonexistent
tty:*:4:65533::0:0:Tty Sandbox:/:/nonexistent
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/nonexistent
+_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin
user:*:1002:1002:Sample User:0:0:user:/home/user:/bin/sh
Copied: user/luigi/ipfw3-r8/release/picobsd/floppy.tree/sbin (from r205079, stable/8/release/picobsd/floppy.tree/sbin)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/luigi/ipfw3-r8/release/picobsd/floppy.tree/sbin Fri Mar 12 13:53:52 2010 (r205081, copy of r205079, stable/8/release/picobsd/floppy.tree/sbin)
@@ -0,0 +1,384 @@
+#!/bin/sh
+#
+# $OpenBSD: dhclient-script,v 1.6 2004/05/06 18:22:41 claudio Exp $
+# $FreeBSD$
+#
+# Copyright (c) 2003 Kenneth R Westerback <krw at openbsd.org>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#
+
+ARP=/usr/sbin/arp
+HOSTNAME=/bin/hostname
+IFCONFIG='/sbin/ifconfig -n'
+
+LOCALHOST=127.0.0.1
+
+if [ -x /usr/bin/logger ]; then
+ LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
+else
+ LOGGER=echo
+fi
+
+#
+# Helper functions that implement common actions.
+#
+
+check_hostname() {
+ current_hostname=`$HOSTNAME`
+ if [ -z "$current_hostname" ]; then
+ $LOGGER "New Hostname ($interface): $new_host_name"
+ $HOSTNAME $new_host_name
+ elif [ "$current_hostname" = "$old_host_name" -a \
+ "$new_host_name" != "$old_host_name" ]; then
+ $LOGGER "New Hostname ($interface): $new_host_name"
+ $HOSTNAME $new_host_name
+ fi
+}
+
+arp_flush() {
+ arp -an -i $interface | \
+ sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' | \
+ sh >/dev/null 2>&1
+}
+
+delete_old_address() {
+ eval "$IFCONFIG $interface inet -alias $old_ip_address $medium"
+}
+
+add_new_address() {
+ eval "$IFCONFIG $interface \
+ inet $new_ip_address \
+ netmask $new_subnet_mask \
+ broadcast $new_broadcast_address \
+ $medium"
+
+ $LOGGER "New IP Address ($interface): $new_ip_address"
+ $LOGGER "New Subnet Mask ($interface): $new_subnet_mask"
+ $LOGGER "New Broadcast Address ($interface): $new_broadcast_address"
+ $LOGGER "New Routers ($interface): $new_routers"
+}
+
+delete_old_alias() {
+ if [ -n "$alias_ip_address" ]; then
+ $IFCONFIG $interface inet -alias $alias_ip_address > /dev/null 2>&1
+ #route delete $alias_ip_address $LOCALHOST > /dev/null 2>&1
+ fi
+}
+
+add_new_alias() {
+ if [ -n "$alias_ip_address" ]; then
+ $IFCONFIG $interface inet alias $alias_ip_address netmask \
+ $alias_subnet_mask
+ #route add $alias_ip_address $LOCALHOST
+ fi
+}
+
+fill_classless_routes() {
+ set $1
+ while [ $# -ge 5 ]; do
+ if [ $1 -eq 0 ]; then
+ route="default"
+ elif [ $1 -le 8 ]; then
+ route="$2.0.0.0/$1"
+ shift
+ elif [ $1 -le 16 ]; then
+ route="$2.$3.0.0/$1"
+ shift; shift
+ elif [ $1 -le 24 ]; then
+ route="$2.$3.$4.0/$1"
+ shift; shift; shift
+ else
+ route="$2.$3.$4.$5/$1"
+ shift; shift; shift; shift
+ fi
+ shift
+ router="$1.$2.$3.$4"
+ classless_routes="$classless_routes $route $router"
+ shift; shift; shift; shift
+ done
+}
+
+delete_old_routes() {
+ #route delete "$old_ip_address" $LOCALHOST >/dev/null 2>&1
+ if [ -n "$old_classless_routes" ]; then
+ fill_classless_routes "$old_classless_routes"
+ set $classless_routes
+ while [ $# -gt 1 ]; do
+ route delete "$1" "$2"
+ shift; shift
+ done
+ return 0;
+ fi
+
+ # If we supported multiple default routes, we'd be removing each
+ # one here. We don't so just delete the default route if it's
+ # through our interface.
+ if is_default_interface; then
+ route delete default >/dev/null 2>&1
+ fi
+
+ if [ -n "$old_static_routes" ]; then
+ set $old_static_routes
+ while [ $# -gt 1 ]; do
+ route delete "$1" "$2"
+ shift; shift
+ done
+ fi
+
+ arp_flush
+}
+
+add_new_routes() {
+ #route add $new_ip_address $LOCALHOST >/dev/null 2>&1
+
+ # RFC 3442: If the DHCP server returns both a Classless Static
+ # Routes option and a Router option, the DHCP client MUST ignore
+ # the Router option.
+ #
+ # DHCP clients that support this option (Classless Static Routes)
+ # MUST NOT install the routes specified in the Static Routes
+ # option (option code 33) if both a Static Routes option and the
+ # Classless Static Routes option are provided.
+
+ if [ -n "$new_classless_routes" ]; then
+ fill_classless_routes "$new_classless_routes"
+ $LOGGER "New Classless Static Routes ($interface): $classless_routes"
+ set $classless_routes
+ while [ $# -gt 1 ]; do
+ if [ "0.0.0.0" = "$2" ]; then
+ route add "$1" -iface "$interface"
+ else
+ route add "$1" "$2"
+ fi
+ shift; shift
+ done
+ return
+ fi
+
+ for router in $new_routers; do
+ if is_default_interface; then
+
+ if [ "$new_ip_address" = "$router" ]; then
+ route add default -iface $router >/dev/null 2>&1
+ else
+ route add default $router >/dev/null 2>&1
+ fi
+ fi
+ # 2nd and subsequent default routers error out, so explicitly
+ # stop processing the list after the first one.
+ break
+ done
+
+ if [ -n "$new_static_routes" ]; then
+ $LOGGER "New Static Routes ($interface): $new_static_routes"
+ set $new_static_routes
+ while [ $# -gt 1 ]; do
+ route add $1 $2
+ shift; shift
+ done
+ fi
+}
+
+add_new_resolv_conf() {
+ # XXX Old code did not create/update resolv.conf unless both
+ # $new_domain_name and $new_domain_name_servers were provided. PR
+ # #3135 reported some ISP's only provide $new_domain_name_servers and
+ # thus broke the script. This code creates the resolv.conf if either
+ # are provided.
+
+ local tmpres=/var/run/resolv.conf.${interface}
+ rm -f $tmpres
+
+ if [ -n "$new_domain_name" ]; then
+ echo "search $new_domain_name" >>$tmpres
+ fi
+
+ if [ -n "$new_domain_name_servers" ]; then
+ for nameserver in $new_domain_name_servers; do
+ echo "nameserver $nameserver" >>$tmpres
+ done
+ fi
+
+ if [ -f $tmpres ]; then
+ if [ -f /etc/resolv.conf.tail ]; then
+ cat /etc/resolv.conf.tail >>$tmpres
+ fi
+
+ # When resolv.conf is not changed actually, we don't
+ # need to update it.
+ # If /usr is not mounted yet, we cannot use cmp, then
+ # the following test fails. In such case, we simply
+ # ignore an error and do update resolv.conf.
+ if cmp -s $tmpres /etc/resolv.conf; then
+ rm -f $tmpres
+ return 0
+ fi 2>/dev/null
+
+ # In case (e.g. during OpenBSD installs) /etc/resolv.conf
+ # is a symbolic link, take care to preserve the link and write
+ # the new data in the correct location.
+
+ if [ -f /etc/resolv.conf ]; then
+ cat /etc/resolv.conf > /etc/resolv.conf.save
+ fi
+ cat $tmpres > /etc/resolv.conf
+ rm -f $tmpres
+
+ # Try to ensure correct ownership and permissions.
+ chown -RL root:wheel /etc/resolv.conf
+ chmod -RL 644 /etc/resolv.conf
+
+ return 0
+ fi
+
+ return 1
+}
+
+# Must be used on exit. Invokes the local dhcp client exit hooks, if any.
+exit_with_hooks() {
+ exit_status=$1
+ if [ -f /etc/dhclient-exit-hooks ]; then
+ . /etc/dhclient-exit-hooks
+ fi
+ # probably should do something with exit status of the local script
+ exit $exit_status
+}
+
+# Get the interface with the current ipv4 default route on it using only
+# commands that are available prior to /usr being mounted.
+is_default_interface()
+{
+ routeget="`route -n get -inet default`"
+ oldifs="$IFS"
+ IFS="
+"
+ defif=
+ for line in $routeget ; do
+ case $line in
+ *interface:*)
+ defif=${line##*: }
+ ;;
+ esac
+ done
+ IFS=${oldifs}
+
+ if [ -z "$defif" -o "$defif" = "$interface" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+#
+# Start of active code.
+#
+
+# Invoke the local dhcp client enter hooks, if they exist.
+if [ -f /etc/dhclient-enter-hooks ]; then
+ exit_status=0
+ . /etc/dhclient-enter-hooks
+ # allow the local script to abort processing of this state
+ # local script must set exit_status variable to nonzero.
+ if [ $exit_status -ne 0 ]; then
+ exit $exit_status
+ fi
+fi
+
+case $reason in
+MEDIUM)
+ eval "$IFCONFIG $interface $medium"
+ eval "$IFCONFIG $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
+ sleep 1
+ ;;
+
+PREINIT)
+ delete_old_alias
+ $IFCONFIG $interface inet alias 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up
+ ;;
+
+ARPCHECK|ARPSEND)
+ ;;
+
+BOUND|RENEW|REBIND|REBOOT)
+ check_hostname
+ if [ -n "$old_ip_address" ]; then
+ if [ "$old_ip_address" != "$alias_ip_address" ]; then
+ delete_old_alias
+ fi
+ if [ "$old_ip_address" != "$new_ip_address" ]; then
+ delete_old_address
+ delete_old_routes
+ fi
+ fi
+ if [ "$reason" = BOUND ] || \
+ [ "$reason" = REBOOT ] || \
+ [ -z "$old_ip_address" ] || \
+ [ "$old_ip_address" != "$new_ip_address" ]; then
+ add_new_address
+ add_new_routes
+ fi
+ if [ "$new_ip_address" != "$alias_ip_address" ]; then
+ add_new_alias
+ fi
+ if is_default_interface; then
+ add_new_resolv_conf
+ fi
+ ;;
+
+EXPIRE|FAIL)
+ delete_old_alias
+ if [ -n "$old_ip_address" ]; then
+ delete_old_address
+ delete_old_routes
+ fi
+ if [ -x $ARP ]; then
+ $ARP -d -a -i $interface
+ fi
+ # XXX Why add alias we just deleted above?
+ add_new_alias
+ if is_default_interface; then
+ if [ -f /etc/resolv.conf.save ]; then
+ cat /etc/resolv.conf.save > /etc/resolv.conf
+ fi
+ fi
+ ;;
+
+TIMEOUT)
+ delete_old_alias
+ add_new_address
+ sleep 1
+ if [ -n "$new_routers" ]; then
+ $LOGGER "New Routers ($interface): $new_routers"
+ set "$new_routers"
+ if ping -q -c 1 -t 1 "$1"; then
+ if [ "$new_ip_address" != "$alias_ip_address" ]; then
+ add_new_alias
+ fi
+ add_new_routes
+ if ! is_default_interface; then
+ exit_with_hooks 0
+ fi
+ if add_new_resolv_conf; then
+ exit_with_hooks 0
+ fi
+ fi
+ fi
+ eval "$IFCONFIG $interface inet -alias $new_ip_address $medium"
+ delete_old_routes
+ exit_with_hooks 1
+ ;;
+esac
+
+exit_with_hooks 0
More information about the svn-src-user
mailing list