summaryrefslogtreecommitdiffstats
path: root/release
diff options
context:
space:
mode:
authorluigi <luigi@FreeBSD.org>2010-03-08 13:37:14 +0000
committerluigi <luigi@FreeBSD.org>2010-03-08 13:37:14 +0000
commit4c933ab1e05dac38eef83e1f0c13acaf09fc3bf5 (patch)
tree9b8fd9f99928ddc1b4997e01655e0c527b0ebb1d /release
parente7448a3e1deabc16833dd8098bd6b680787b4df6 (diff)
downloadFreeBSD-src-4c933ab1e05dac38eef83e1f0c13acaf09fc3bf5.zip
FreeBSD-src-4c933ab1e05dac38eef83e1f0c13acaf09fc3bf5.tar.gz
MFC main build script and missing directory
Diffstat (limited to 'release')
-rwxr-xr-xrelease/picobsd/build/picobsd67
-rwxr-xr-xrelease/picobsd/floppy.tree/sbin384
2 files changed, 431 insertions, 20 deletions
diff --git a/release/picobsd/build/picobsd b/release/picobsd/build/picobsd
index 0549b0c..c9e8fc7 100755
--- a/release/picobsd/build/picobsd
+++ b/release/picobsd/build/picobsd
@@ -167,7 +167,7 @@ create_includes_and_libraries2() { # opt_dir opt_target
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
diff --git a/release/picobsd/floppy.tree/sbin b/release/picobsd/floppy.tree/sbin
new file mode 100755
index 0000000..c457bf4
--- /dev/null
+++ b/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@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
OpenPOWER on IntegriCloud