Date: Sun, 27 Dec 2009 21:58:48 +0000 (UTC) From: Luigi Rizzo <luigi@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r201062 - in head/release/picobsd: floppy.tree/sbin qemu Message-ID: <200912272158.nBRLwmZD068706@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: luigi Date: Sun Dec 27 21:58:48 2009 New Revision: 201062 URL: http://svn.freebsd.org/changeset/base/201062 Log: add a 'qemu' floppy type, useful for running tests on new kernels Added: head/release/picobsd/floppy.tree/sbin/ head/release/picobsd/floppy.tree/sbin/dhclient-script (contents, props changed) head/release/picobsd/qemu/ head/release/picobsd/qemu/PICOBSD (contents, props changed) head/release/picobsd/qemu/PICOBSD.hints (contents, props changed) head/release/picobsd/qemu/config (contents, props changed) head/release/picobsd/qemu/crunch.conf (contents, props changed) head/release/picobsd/qemu/floppy.tree.exclude (contents, props changed) Added: head/release/picobsd/floppy.tree/sbin/dhclient-script ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/release/picobsd/floppy.tree/sbin/dhclient-script Sun Dec 27 21:58:48 2009 (r201062) @@ -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 Added: head/release/picobsd/qemu/PICOBSD ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/release/picobsd/qemu/PICOBSD Sun Dec 27 21:58:48 2009 (r201062) @@ -0,0 +1,122 @@ +# +# $FreeBSD$ +# A configuration file to run tests on qemu. +# We disable SMP because it does not work well with qemu, and set HZ=1000 +# to avoid it being overridden. +# +# Line starting with #PicoBSD contains PicoBSD build parameters +#marker def_sz init MFS_inodes floppy_inodes +#PicoBSD 8000 init 8192 32768 +options MD_ROOT_SIZE=8000 # same as def_sz + +hints "PICOBSD.hints" + +# values accessible through getenv() +# env "PICOBSD.env" + +#cpu I486_CPU +cpu I586_CPU +cpu I686_CPU +ident PICOBSD + +#options SMP +#device apic + +options SCHED_4BSD # mandatory to have one scheduler +#options MATH_EMULATE #Support for x87 emulation +options INET #InterNETworking +#options INET6 +options FFS #Berkeley Fast Filesystem +#options BOOTP #Use BOOTP to obtain IP address/hostname +options MD_ROOT #MD is a potential root device + +#options NFS #Network Filesystem +#options NFS_ROOT #NFS usable as root device, NFS required + +#options MSDOSFS #MSDOS Filesystem +#options CD9660 #ISO 9660 Filesystem +#options CD9660_ROOT #CD-ROM usable as root, CD9660 required +#options DEVFS #Device Filesystem +#options PROCFS #Process filesystem +options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!] + +options KDB +options DDB + +options IPFIREWALL +options IPFIREWALL_DEFAULT_TO_ACCEPT +options IPDIVERT # divert (for natd) + +# Support for bridging and bandwidth limiting +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 + +device random # used by ssh +device pci + +# Floppy drives +device fdc + +# ATA and ATAPI devices +#device ata +#device atadisk # ATA disk drives +#device atapicd # ATAPI CDROM drives +#options ATA_STATIC_ID #Static device numbering + +# atkbdc0 controls both the keyboard and the PS/2 mouse +device atkbdc # At keyboard controller +device atkbd +#device psm # do we need the mouse ?? + +device vga # VGA screen + +# syscons is the default console driver, resembling an SCO console +device sc + +# Serial (COM) ports +device uart + +# Audio support +#device pcm + +# PCCARD (PCMCIA) support +#device card # pccard bus +#device pcic # PCMCIA bridge + +# Parallel port +#device ppc +#device ppbus # Parallel port bus (required) +#device lpt # Printer +#device plip # TCP/IP over parallel +#device ppi # Parallel port interface device + +# +# The following Ethernet NICs are all PCI devices. +# +device miibus +device fxp # Intel EtherExpress PRO/100B (82557, 82558) +device nfe # nVidia nForce MCP on-board Ethernet +#device xl # 3Com +device rl # RealTek 8129/8139 +device re # RealTek 8139C+/8169/8169S/8110S +device sis # National/SiS +device dc # DEC/Intel 21143 and various workalikes +device ed + +device loop # Network loopback +device ether # Ethernet support +device tun # Packet tunnel. +device pty # Pseudo-ttys (telnet etc) +device md # Memory "disks" +#device gif 4 # IPv6 and IPv4 tunneling +#device faith 1 # IPv6-to-IPv4 relaying (translation) +device tap + +#options DEVICE_POLLING + +# The `bpf' device enables the Berkeley Packet Filter. +# Be aware of the administrative consequences of enabling this! +device bpf # Berkeley packet filter Added: head/release/picobsd/qemu/PICOBSD.hints ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/release/picobsd/qemu/PICOBSD.hints Sun Dec 27 21:58:48 2009 (r201062) @@ -0,0 +1,39 @@ +# $FreeBSD$ +hint.fdc.0.at="isa" +hint.fdc.0.port="0x3F0" +hint.fdc.0.irq="6" +hint.fdc.0.drq="2" +hint.fd.0.at="fdc0" +hint.fd.0.drive="0" +hint.ata.0.at="isa" +hint.ata.0.port="0x1F0" +hint.ata.0.irq="14" +hint.ata.1.at="isa" +hint.ata.1.port="0x170" +hint.ata.1.irq="15" +hint.atkbdc.0.at="isa" +hint.atkbdc.0.port="0x060" +hint.atkbd.0.at="atkbdc" +hint.atkbd.0.irq="1" +hint.psm.0.at="atkbdc" +hint.psm.0.irq="12" +hint.vga.0.at="isa" +hint.sc.0.at="isa" +hint.npx.0.at="nexus" +hint.npx.0.port="0x0F0" +hint.npx.0.irq="13" +hint.uart.0.at="isa" +hint.uart.0.port="0x3F8" +hint.uart.0.flags="0x10" +hint.uart.0.irq="4" +hint.uart.1.at="isa" +hint.uart.1.port="0x2F8" +hint.uart.1.irq="3" +hint.ed.0.at="isa" +hint.ed.0.port="0x280" +hint.ed.0.irq="5" +hint.ed.0.maddr="0xd8000" +hint.ed.1.at="isa" +hint.ed.1.port="0x300" +hint.ed.1.irq="5" +hint.ed.1.maddr="0xd0000" Added: head/release/picobsd/qemu/config ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/release/picobsd/qemu/config Sun Dec 27 21:58:48 2009 (r201062) @@ -0,0 +1,6 @@ +# configuration for picobsd build script. +# $FreeBSD$ +# it should only contain variable definitions -- it is sourced +# by the shell much like rc.conf* files + +fd_size="4096" Added: head/release/picobsd/qemu/crunch.conf ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/release/picobsd/qemu/crunch.conf Sun Dec 27 21:58:48 2009 (r201062) @@ -0,0 +1,192 @@ +# +# $FreeBSD$ +# +# Configuration file for "qemu" images.. +# +# Depending on your needs, you will almost surely need to +# add/remove/change programs according to your needs. +# Remember that some programs require matching kernel options to +# enable device drivers etc. +# +# To figure out how much space is used by each program, do +# +# size build_dir-bridge/crunch/*lo +# +# Remember that programs require libraries, which add up to the +# total size. The final binary is build_dir-bridge/mfs.tree/stand/crunch +# and you can check which libraries it uses with +# +# ldd build_dir-bridge/mfs.tree/stand/crunch + +# crunchgen configuration to build the crunched binary, see "man crunchgen" +# We need to specify generic build options, the places where to look +# for sources, and the list of program and libraries we want to put +# in the crunched binary. +# +# NOTE: the string "/usr/src" below will be automatically replaced with +# the path set in the 'build' script. + +# Default build options. Basically tell the Makefiles +# that to use the most compact possible version of the code. + +buildopts -DNO_PAM -DRELEASE_CRUNCH -DPPP_NO_NETGRAPH +buildopts -DTRACEROUTE_NO_IPSEC -DNO_INET6 +buildopts -DWITHOUT_IPX + +# Directories where to look for sources of various binaries. +# @__CWD__@ is a magic keyword in the picobsd's (Makefile.conf) +# which is replaced with the directory with the picobsd configuration +# corresponding to your image. This way you can have custom sources +# in that directory overriding system programs. + +srcdirs @__CWD__@/src + +# Some programs are especially written for PicoBSD and reside in +# release/picobsd/tinyware. +# Put this entry near the head of the list to override standard binaries. + +srcdirs /usr/src/release/picobsd/tinyware + +# Other standard locations for sources. +# If a program uses its own source directory, add + +srcdirs /usr/src/bin +srcdirs /usr/src/sbin/i386 +srcdirs /usr/src/sbin +srcdirs /usr/src/usr.bin +srcdirs /usr/src/gnu/usr.bin +srcdirs /usr/src/usr.sbin +srcdirs /usr/src/libexec + +# For programs that reside in different places, the best option +# is to use the command "special XXX srcdir YYY" where XXX is the +# program name and YYY is the directory path. +# "special XXX ..." can be used to specify more options, see again +# the crunchgen manpage. + +#--- Basic configuraton +# init is always necessary (unless you have a replacement, oinit) +progs init + +# fsck is almost always necessary, unless you have everything on the +# image and use 'tar' or something similar to read/write raw blocks +# from the floppy. + +progs fsck + +# ifconfig is needed if you want to configure interfaces. +progs ifconfig + +# You will also need a shell and a bunch of utilities. +# The standard shell is not that large, but you need many +# external programs. In fact most of them do not take much space +# as they merely issue a system call, and print the result. +# For a more compact version of shell and utilities, you could +# try busybox, however most system management commands in busybox +# will not work as they use linux-specific interfaces. + +progs sh +ln sh -sh + +# the small utilities +progs echo +progs pwd mkdir rmdir +progs chmod chown +ln chown chgrp +progs mv ln cp rm ls +progs cat tail tee +progs test +ln test [ + +progs less +ln less more +progs mount +progs minigzip +ln minigzip gzip +progs kill +progs df +progs ps +progs ns # this is the picobsd version +ln ns netstat +progs vm +progs hostname +progs login +progs getty +progs stty +progs w +progs msg +ln msg dmesg +progs reboot + +progs sysctl +progs swapon +progs pwd_mkdb +progs umount +progs du +progs passwd + +progs route + +# If you want to run natd, remember the alias library +progs natd +libs_so -lalias # natd +progs tcpdump +special tcpdump srcdir /usr/src/usr.sbin/tcpdump/tcpdump +libs_so -lpcap # used by tcpdump + +# ppp is rather large. Note that as of Jan.01, RELEASE_CRUNCH +# makes ppp not use libalias, so you cannot have aliasing. +#progs ppp + +# You need an editor. ee is relatively small, though there are +# smaller ones. vi is much larger. +# The editor also usually need a curses library. +progs ee + +progs arp + +# these require libgeom +# progs bsdlabel fdisk mdconfig + +progs kldload kldunload kldstat +progs kldxref +progs grep +libs_so -lgnuregex -lbz2 +# dhclient-script requires 'sed' +progs dhclient +progs sed +progs date +progs time +progs ping +#progs routed +progs ipfw +progs traceroute +progs mdmfs +ln mdmfs mount_mfs +# Various filesystem support -- remember to enable the kernel parts +# progs mount_msdosfs +progs mount_nfs +# progs mount_cd9660 +ln mount_nfs nfs +ln mount_cd9660 cd9660 +#progs newfs +#ln newfs mount_mfs +# ln mount_msdosfs msdos + +# For a small ssh client/server use dropbear + +# Now the libraries +libs_so -lc # the C library +libs_so -ll # used by sh (really ?) +libs_so -lufs # used by mount +### ee uses ncurses but as a dependency +#libs_so -lncurses +libs_so -lm +libs_so -ledit -lutil +libs_so -lcrypt +libs_so -lkvm +libs_so -lz +libs_so -lbsdxml +libs_so -lsbuf +libs_so -ljail # used by ifconfig +libs_so -lulog Added: head/release/picobsd/qemu/floppy.tree.exclude ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/release/picobsd/qemu/floppy.tree.exclude Sun Dec 27 21:58:48 2009 (r201062) @@ -0,0 +1,2 @@ +etc/snmpd.conf +etc/ppp
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912272158.nBRLwmZD068706>