diff options
author | John Bowler <jbowler@nslu2-linux.org> | 2005-06-06 00:59:10 +0000 |
---|---|---|
committer | John Bowler <jbowler@nslu2-linux.org> | 2005-06-06 00:59:10 +0000 |
commit | ed64f2ede7f865ac84db84a51dd8bc7e9079039d (patch) | |
tree | 98f3d02a24b5e85852dfed2828d32e398f767a50 | |
parent | aae956dac8c16eb6a11c3aff7b14d39fdfdc9a8c (diff) |
Fix build problems (failsafe of initscripts-openslug which will
fail to build if there is any change to the OE initscripts package.)
BKrev: 42a39fde9YrbkwKrZAL7LJIeNx2XvA
-rw-r--r-- | packages/busybox/busybox-1.00/openslug/udhcpscript.patch | 133 | ||||
-rw-r--r-- | packages/initscripts/initscripts-openslug_1.0.bb | 151 |
2 files changed, 284 insertions, 0 deletions
diff --git a/packages/busybox/busybox-1.00/openslug/udhcpscript.patch b/packages/busybox/busybox-1.00/openslug/udhcpscript.patch index e69de29bb2..010f64a53f 100644 --- a/packages/busybox/busybox-1.00/openslug/udhcpscript.patch +++ b/packages/busybox/busybox-1.00/openslug/udhcpscript.patch @@ -0,0 +1,133 @@ +--- busybox-1.00/.pc/udhcpscript.patch/examples/udhcp/simple.script 2004-10-13 00:18:05.000000000 -0700 ++++ busybox-1.00/examples/udhcp/simple.script 2005-06-05 15:08:28.432605118 -0700 +@@ -1,40 +1,101 @@ + #!/bin/sh ++# openslug UDHCP client script ++# this must set the HW address (MAC) on the interface ++# ++. /etc/default/functions + +-# udhcpc script edited by Tim Riker <Tim@Rikers.org> + +-[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1 ++echodns(){ ++ local dns ++ if test $# -gt 0 ++ then ++ for dns in "$@" ++ do ++ echo "nameserver $dns" ++ done ++ fi ++} ++ ++# Output the correct contents for resolv.conf ++mkresolv() { ++ test -n "$domain" && echo "search $domain" ++ echodns $dns ++} ++ ++# checksum of a file (or stdin if -) ++md5strm() { ++ md5sum $1 2>/dev/null | sed -n 's/^\([0-9A-Za-z]*\).*$/\1/p' ++} ++ ++bind() { ++ local B N metric i olddomain ++ B= ++ test -n "$broadcast" && B="broadcast $broadcast" ++ N= ++ test -n "$subnet" && N="netmask $subnet" ++ ifconfig "$interface" "$ip" $B $N up ++ ++ # If given router information delete the old information and ++ # enter new stuff, routers get metrics incremented by 1 ++ # between each (this is somewhat arbitrary) ++ if test -n "$router" ++ then ++ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ++ do ++ : ++ done + +-RESOLV_CONF="/etc/resolv.conf" +-[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" +-[ -n "$subnet" ] && NETMASK="netmask $subnet" ++ metric=0 ++ for i in $router ++ do ++ route add default gw "$i" dev "$interface" metric $((metric++)) ++ done ++ fi ++ ++ olddomain= ++ test -r /etc/defaultdomain && olddomain="$(cat /etc/defaultdomain)" ++ if test -n "$domain" -a "$domain" != "$olddomain" ++ then ++ echo "$domain" >/etc/defaultdomain ++ # and update the kernel view too ++ echo "$domain" >/proc/sys/kernel/domainname ++ fi ++ ++ # Update /etc/resolv.conf to reflect domain and dns information, ++ # this always clears resolv.conf if none is given ++ md5old="$(md5strm /etc/resolv.conf)" ++ md5new="$(mkresolv | md5strm -)" ++ test "$md5old" != "$md5new" && mkresolv >/etc/resolv.conf ++} + + case "$1" in +- deconfig) +- /sbin/ifconfig $interface 0.0.0.0 +- ;; +- +- renew|bound) +- /sbin/ifconfig $interface $ip $BROADCAST $NETMASK +- +- if [ -n "$router" ] ; then +- echo "deleting routers" +- while route del default gw 0.0.0.0 dev $interface ; do +- : +- done +- +- metric=0 +- for i in $router ; do +- route add default gw $i dev $interface metric $((metric++)) +- done ++deconfig) ++ # Bring the interface up (without inet at this point) ++ ifconfig "$interface" up;; ++ ++renew|bound) ++ bind;; ++ ++leasefail) ++ # Pull the values from the config data if (only only if) this ++ # is the config interface ++ if test "$interface" = "$(config iface)" ++ then ++ ip="$(config ip)" ++ if test -n "$ip" ++ then ++ router="$(config gateway)" ++ subnet="$(config netmask)" ++ broadcast="$(config broadcast)" ++ domain="$(config domain)" ++ dns="$(config dns)" ++ ++ bind + fi ++ fi;; + +- echo -n > $RESOLV_CONF +- [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF +- for i in $dns ; do +- echo adding dns $i +- echo nameserver $i >> $RESOLV_CONF +- done +- ;; ++*) echo "udhcpc: $*: unknown command" >&2 ++ exit 1;; + esac + + exit 0 diff --git a/packages/initscripts/initscripts-openslug_1.0.bb b/packages/initscripts/initscripts-openslug_1.0.bb index e69de29bb2..aaff5bc2c5 100644 --- a/packages/initscripts/initscripts-openslug_1.0.bb +++ b/packages/initscripts/initscripts-openslug_1.0.bb @@ -0,0 +1,151 @@ +# OpenSlug specific stuff for the init scripts. +# +# This is, in effect, an extended patch to fix various +# problems in the initscripts on OpenSlug. The problems +# mostly come down to the order the scripts are executed +# in. +include initscripts_${PV}.bb + +MAINTAINER = "John Bowler <jbowler@acm.org>" +RCONFLICTS = "initscripts" +# All other standard definitions inherited from initscripts + +FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/${P}', '${FILE_DIRNAME}/initscripts-${PV}', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}" + +PACKAGES = "${PN}" + +SRC_URI += "file://alignment.sh" +SRC_URI += "file://domainname.sh" +SRC_URI += "file://rootopts.patch;patch=1" +SRC_URI += "file://devices.patch;patch=1" + +# Without this it is not possible to patch checkroot.sh +S = ${WORKDIR} + +do_install_append() { + install -m 0755 ${WORKDIR}/alignment.sh ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/domainname.sh ${D}${sysconfdir}/init.d + + # Remove the do install links (this detects a change to the + # initscripts .bb file - it will cause a build failure here.) + # This is a copy of the ln -sf lines from the initscripts + # do_install. + rm ${D}${sysconfdir}/rc2.d/S99rmnologin + rm ${D}${sysconfdir}/rc3.d/S99rmnologin + rm ${D}${sysconfdir}/rc4.d/S99rmnologin + rm ${D}${sysconfdir}/rc5.d/S99rmnologin + rm ${D}${sysconfdir}/rc6.d/S20sendsigs +# rm ${D}${sysconfdir}/rc6.d/S30urandom + rm ${D}${sysconfdir}/rc6.d/S31umountnfs.sh +# rm ${D}${sysconfdir}/rc6.d/S40umountfs + rm ${D}${sysconfdir}/rcS.d/S30ramdisk + rm ${D}${sysconfdir}/rc6.d/S90reboot + rm ${D}${sysconfdir}/rc0.d/S20sendsigs +# rm ${D}${sysconfdir}/rc0.d/S30urandom + rm ${D}${sysconfdir}/rc0.d/S31umountnfs.sh +# rm ${D}${sysconfdir}/rc0.d/S40umountfs + rm ${D}${sysconfdir}/rc0.d/S90halt + rm ${D}${sysconfdir}/rcS.d/S02banner + rm ${D}${sysconfdir}/rcS.d/S10checkroot.sh +# rm ${D}${sysconfdir}/rcS.d/S30checkfs.sh + rm ${D}${sysconfdir}/rcS.d/S35mountall.sh + rm ${D}${sysconfdir}/rcS.d/S39hostname.sh + rm ${D}${sysconfdir}/rcS.d/S45mountnfs.sh + rm ${D}${sysconfdir}/rcS.d/S55bootmisc.sh +# rm ${D}${sysconfdir}/rcS.d/S55urandom + rm ${D}${sysconfdir}/rcS.d/S99finish + rm ${D}${sysconfdir}/rcS.d/S05devices + # udev will run at S04 if installed + rm ${D}${sysconfdir}/rcS.d/S03sysfs + rm ${D}${sysconfdir}/rcS.d/S38devpts.sh +# rm ${D}${sysconfdir}/rcS.d/S06alignment + + # Check the result + find ${D}${sysconfdir}/rc?.d ! -type d -print | { + status=0 + while read d + do + oenote "initscripts-openslug: unexpected link $f" + status = 1 + done + test $status -eq 0 || + oefatal "initscripts-openslug: new links break do_install" + } + + # Set the run-level links + # + # Startup (S) links - UNCHANGED + # + # Keep these in order of startup - S, then 1, 2-5, 0,6 + # according to the level in which the script starts (or stops) first. + update-rc.d -r ${D} banner start 2 S . + update-rc.d -r ${D} sysfs.sh start 3 S . + # udev runs at S 04 . + update-rc.d -r ${D} devices start 5 S . + update-rc.d -r ${D} alignment.sh start 7 S . + # busybox hwclock.sh (openslug-init) starts here (08) + # openslug-init umountinitrd runs here (09) + + update-rc.d -r ${D} checkroot.sh start 10 S . + # openslug buffer syslog starts here (11) + # sysconfsetup runs at S 12 + # modutils.sh runs at S 20 + # checkfs.sh is currently disabled from S 30 (and won't work on OpenSlug) + # ramdisk is not used on OpenSlug, would run at S 30 + update-rc.d -r ${D} mountall.sh start 35 S . + # base-files populate-var.sh runs at S37 + update-rc.d -r ${D} devpts.sh start 38 S . + # openslug file syslog starts here (39) + + # set hostname and domainname before the network script works (by + # entering them at level 40), networking may reset them. + update-rc.d -r ${D} domainname.sh start 40 S . + update-rc.d -r ${D} hostname.sh start 40 S . + # network runs at S 40 + # openslug network syslog starts here (44) + update-rc.d -r ${D} mountnfs.sh start 45 S . + + update-rc.d -r ${D} bootmisc.sh start 55 S . + # urandom is currently disabled from S 55 (and won't work with tmpfs /var) + + # ipkg-cl configure runs at S 98 + update-rc.d -r ${D} finish start 99 S . + + # + # User (2-5) links - UNCHANGED + # rmnologin is the only thing added to user levels + update-rc.d -r ${D} rmnologin start 99 2 3 4 5 . + + # + # Shutdown (0,6) links - !!!CHANGED!!! + # + # The problem here is that netbase installs K40networking but portmap + # installs S32portmap. One of these has to change! The safe change + # is to make the networking stop at S40, so all network related shutdown + # must be in a K script or <S40. + # + # S20sendsigs is a disaster. It needs to happen before the umounts + # but after the portmapper (which it would otherwise kill). + # + # urandom would stop at (S)30 + + # This is the special, correct, openslug umountnfs.sh (it looks in + # the /proc/mounts information, not /etc/fstab) + update-rc.d -r ${D} umountnfs.sh start 31 0 6 . + # portmap stops at 32 + # openslug network syslog stops here (39) + # networking stops at 40 (nothing else does, believe me.) + + # busybox hwclock.sh (openslug-init) stops here (45) + # openslug file syslog stops here (47) + # openslug buffer syslog stops here (49) + # Remove any errant processes + update-rc.d -r ${D} sendsigs start 60 0 6 . + + # This is the special, correct, openslug umountfs, it will umount + # any network file systems which failed to umount before. + update-rc.d -r ${D} umountfs start 70 0 6 . + + update-rc.d -r ${D} halt start 90 0 . + update-rc.d -r ${D} reboot start 90 6 . +} |