diff options
author | John Bowler <jbowler@nslu2-linux.org> | 2005-06-11 00:06:10 +0000 |
---|---|---|
committer | John Bowler <jbowler@nslu2-linux.org> | 2005-06-11 00:06:10 +0000 |
commit | 7ff6b6a715852b1c7f56d6a30d42d54105bcc0a4 (patch) | |
tree | 338e32aa62856742cf73c97bd7dbd5b9940e882a /packages/openslug-init | |
parent | 38adae358e41cd43d6c8c79a317e37e4a360af2b (diff) |
Implementation of reflash without RedBoot/upslug.
Very limited testing.
To try it run 'reflash help'.
BKrev: 42aa2af2mr4JkjqtkaV8hSbfxSC9bw
Diffstat (limited to 'packages/openslug-init')
-rw-r--r-- | packages/openslug-init/openslug-init-0.10/conffiles | 0 | ||||
-rw-r--r-- | packages/openslug-init/openslug-init-0.10/functions | 261 | ||||
-rw-r--r-- | packages/openslug-init/openslug-init-0.10/initscripts/sysconfsetup | 229 | ||||
-rw-r--r-- | packages/openslug-init/openslug-init-0.10/reflash | 0 | ||||
-rw-r--r-- | packages/openslug-init/openslug-init-0.10/turnup | 191 | ||||
-rw-r--r-- | packages/openslug-init/openslug-init_0.10.bb | 14 |
6 files changed, 669 insertions, 26 deletions
diff --git a/packages/openslug-init/openslug-init-0.10/conffiles b/packages/openslug-init/openslug-init-0.10/conffiles new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/openslug-init/openslug-init-0.10/conffiles diff --git a/packages/openslug-init/openslug-init-0.10/functions b/packages/openslug-init/openslug-init-0.10/functions index e69de29bb2..ac8e195abd 100644 --- a/packages/openslug-init/openslug-init-0.10/functions +++ b/packages/openslug-init/openslug-init-0.10/functions @@ -0,0 +1,261 @@ +# . this file to load the following utility functions +# +# mtdev "name" +# return (output) the character device name for flash parition "name" +# /proc/mtd has the general form: +# dev: size erasesize name +# mtd5: 00020000 00020000 "FIS directory" +# use this rather than hard-wiring the device because the partition +# table can change - looking in /proc/mtd is more reliable. +mtdev(){ + sed -n 's!^\(mtd[0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/\1!p' /proc/mtd +} +# +# mtblockdev "name" +# as mtdev but output the name of the block (not character) device +mtblockdev(){ + sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtdblock\1!p' /proc/mtd +} +# +# mtsize "name" +# the size of the partition as a hexadecimal value (with 0x at the front) +mtsize(){ + sed -n 's!^mtd[0-9][0-9]*: \([^ ]*\)[^"]*"'"$1"'"$!0x\1!p' /proc/mtd +} +# +# sysvalmatch "section" "name" 'pattern' "configuration file" +# sysvalof "section" "name" "configuration file" +# sysval "section" "name" +# outputs the value of the SysConf variable 'name' from section 'section', +# this is a bit gross, when it gets a match it copies the value to the +# hold space, if no match it jumps over the copy, at the end ($) it copies +# the hold space to the pattern space and prints the result, thus it only +# ever prints the last match +# BUG FIX: busybox sed doesn't initialise the hold space and crashes if it +# is used before initialisation, so temporarily this script does it's own +# tail by hand. +# NOTE: these functions should only be used internally, add entries to 'config' +# below if necessary. This is because 'config' does the defaulting and in the +# recovering case (zero or absent SysConf) /etc/default/sysconf only contains +# the hw_addr entry! +sysvalmatch(){ + # sed -n '/^\['"$1"'\]$/,/^\[.*\]$/s/^'"$2"'=\('"$3"'\)$/\1/;tH;bE;:H;h;:E;$g;$p' "$4" + sed -n '/^\['"$1"'\]$/,/^\[.*\]$/s/^'"$2"'=\('"$3"'\)$/\1/p' "$4" | sed -n '$p' +} +sysvalof(){ + sysvalmatch "$1" "$2" '.*' "$3" +} +sysval(){ + sysvalof "$1" "$2" /etc/default/sysconf +} +# +# config "value" +# convenience callers for specific values to avoid mis-typing in scripts +# NOTE: this function does the defaulting, 'sysval' does not! Validity +# of the sysconf file is determined by the presence of the all important +# hw_addr. +config(){ + local mac + mac= + test -r /etc/default/sysconf && + mac="$(sysvalmatch network hw_addr '[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]' /etc/default/sysconf)" + if test -n "$mac" + then + case "$1" in + mac) echo "$mac";; + host) if test -n "$(sysval network disk_server_name)" + then + sysval network disk_server_name + elif test -n "$(sysval network default_server_name)" + then + sysval network default_server_name + else + echo "$mac" | sed -n 's/^..:..:..:\(..\):\(..\):\(..\)$/LKG\1\2\3/p' + fi;; + domain) sysval network w_d_name;; + iface) if test -n "$(sysval network lan_interface)" + then + sysval network lan_interface + else + echo eth0 + fi;; + ip) if test -n "$(sysval network ip_addr)" + then + sysval network ip_addr + else + echo 192.168.1.77 + fi;; + netmask)sysval network netmask;; + gateway)sysval network gateway;; + dns) sysval network dns_server1;; + dns2) sysval network dns_server2;; + dns3) sysval network dns_server3;; + boot) if test -n "$(sysval network bootproto)" + then + sysval network bootproto + else + echo dhcp + fi;; + valid) return 0;; + *) return 1;; + esac + else + # These are the defaults for an invalid mac address, use the compiled + # in hardware address. + case "$1" in + mac) echo "00:02:B3:02:02:01";; + host) echo "brokenslug";; + iface) echo eth0;; + ip) echo 192.168.1.77;; + boot) echo dhcp;; + *) return 1;; + esac + fi +} +# +# checkif "iface" +# Validate an interface name by making sure that it exists +# in /proc/net/dev (and is not lo). The listing outputs the +# interface followed by a :, the check function looks for +# something of the form '$1[a-zA-Z0-9]*:' and outputs the +# part preceding the ':' +checkif(){ + sed -n '/^[ ]*lo:/d;s/^[ ]*\('"$1"'[a-zA-Z0-9]*\):.*$/\1/p;tE;d;:E;q' /proc/net/dev +} +# +# checkmount "mountpoint" +# tests an already mounted mountpoint to see whether to attempt to +# boot with this as root. Returns success if it appears ok. +checkmount(){ + # basic test for init (the kernel will try to load this) + # but require a shell in bin/sh and no .recovery too + test \( ! -f "$1/.recovery" \) -a \ + \( -d "$1/initrd" -o -d "$1/mnt" \) -a \ + \( -x "$1/bin/sh" -o -h "$1/bin/sh" \) -a \ + \( -x "$1/sbin/init" -o -h "$1/sbin/init" -o \ + -x "$1/etc/init" -o -h "$1/etc/init" -o \ + -x "$1/bin/init" -o -h "$1/bin/init" \) +} +# +# swivel "new root" "old root" +# NOTE: the arguments must be paths relative to /, bad things +# will happen if the arguments themselves start with / +# Pivot to a new root. This does all the fancy pivot_root stuff +# including closing streams and does a umount /proc - it doesn't +# matter if this fails (failure codes are ignored), but if /proc +# was mounted it must be restored by the caller on return. +# Normally this function never returns! +# On return 0,1,2 are connected to /dev/console - this may not +# have been true before! +swivel() { + cd "$1" + exec <&- >&- 2>&- + # This is just-in-case the called mounted /proc and was + # unable to close it because of the streams + umount /proc 2>/dev/null + if pivot_root . "$2" + then + # everything must move out of the old root, this process + # is $2/bin/sh so it must die, IO is redirected + # just in case - typically it will be to a device so it + # won't hold the old root open. + # the exec here is the first point at which the old root + # is unused - before the exec regardless of the close of + # 0,1,2 above ash still has *this* shell script open! + # (it's on fd 10). + # init closes all file descriptors, there's no point + # supplying it with fds. + exec "$2/usr/sbin/chroot" . bin/sh -c "\ + test -x sbin/init && exec sbin/init + test -x etc/init && exec etc/init + test -x bin/init && exec bin/init + leds -A +gr1 '!g1' + sleep 10 >/.recovery + sync;sync;sync + exit 1" + fi + # + # recovery - must restore the old root + cd "$2" + sbin/pivot_root . "$1" + # cd is back to $1 - either pivot_root doesn't change it and the + # chroot above was not executed, or pivot_root does change it and + # has just changed it back! + exec <>/dev/console >&0 2>&0 +} +# +# ifup "interface" +# bring that interface up with the configured ip and other +# information +ifup(){ + local ip hostname router subnet iface HOSTNAME NETMASK BROADCAST + + iface="$1" + ip="$(config ip)" + hostname="$(config host)" + router="$(config gateway)" + broadcast= + + if test -n "$ip" + then + # only if an ip was specified + subnet="$(config netmask)" + else + ip=192.168.1.77 + fi + + # First try udhcpc - note that the /boot/udhcpc.script + # simply records the values returned and the udhcpc + # is not left running so this will only work for + # the lease length time! + ifconfig "$iface" up + test -n "$hostname" && HOSTNAME="-H $hostname" + # The script writes the required shell variable assignments + # to file descriptor 9 + eval $(udhcpc -i "$iface" -n -q -r "$ip" $HOSTNAME -s /boot/udhcpc.script 9>&1 >/dev/null) + + test -n "$broadcast" && BROADCAST="broadcast $broadcast" + test -n "$subnet" && NETMASK="netmask $subnet" + + if ifconfig "$iface" "$ip" $NETMASK $BROADCAST + then + for route in $router + do + route add default gw "$route" dev "$iface" + done + return 0 + else + ifconfig "$iface" down + return 1 + fi +} +# +# ifdown "interface" +# take the interface down +ifdown(){ + ifconfig "$1" down +} +# +# mountflash "flash root directory" {mount options} +# Finds and mounts the flash file system on the given directory +mountflash() { + local ffsdev ffsdir + + ffsdir="$1" + test -n "$ffsdir" -a -d "$ffsdir" || { + echo "$0: mountflash $ffsdir: not a directory (internal error)" >&2 + return 1 + } + shift + + ffsdev="$(mtblockdev Flashdisk)" + test -n "$ffsdev" -a -b "$ffsdev" || { + echo "$0: unable to find flash file system to copy ($ffsdev)" >&2 + return 1 + } + mount -t jffs2 "$@" "$ffsdev" "$ffsdir" || { + echo "$0: $ffsdev: unable to mount flash file system on $ffsdir" >&2 + return 1 + } + return 0 +} diff --git a/packages/openslug-init/openslug-init-0.10/initscripts/sysconfsetup b/packages/openslug-init/openslug-init-0.10/initscripts/sysconfsetup index e69de29bb2..1940b00ff8 100644 --- a/packages/openslug-init/openslug-init-0.10/initscripts/sysconfsetup +++ b/packages/openslug-init/openslug-init-0.10/initscripts/sysconfsetup @@ -0,0 +1,229 @@ +#!/bin/sh +# This script is run once when the system first boots. Its sole +# purpose is to create /etc/default/sysconf (the overall system +# configuration file) and other files derived from this. +# +# The script runs immediately after S10checkroot.sh - this is the +# point at which the rootfs will be mounted rw even if the kernel +# booted with it ro. +# +# rm or mv the file to run this again. If this is done the +# following configuration files will be rewritten: +# +# /etc/default/sysconf +# /etc/hostname +# /etc/defaultdomain +# /etc/network/interfaces +# /etc/resolv.conf +# +# /etc/default/functions contains useful utility functions - it's +# in a separate file so that it can be loaded by any script +. /etc/default/functions +# +config valid && test "$1" != reload && exit 0 +# +# Utility to deal with absence of DNS configuration +echodns(){ + local dns + if test $# -gt 0 + then + for dns in "$@" + do + echo "nameserver $dns" + done + fi +} +# +# The SysConf device must exist in /dev at this point for this script +# to work. +# +# It is important not to hard-wire the name of the device because of +# the posibility of changing the flash partition layout. +# +# The block device is used here because at present udev does not +# show the character devices +sysdev= +config valid || sysdev="$(mtblockdev SysConf)" +if test -n "$sysdev" -a -b "$sysdev" +then + # Read the defined part of SysConf into /etc/default/sysconf. + # SysConf has lines of two forms: + # + # [section] + # name=value + # + # In practice SysConf also contains other stuff, use the command: + # + # devio '<</dev/mtd1;cpb' + # + # to examine the current settings. The badly formatted stuff + # is removed (to be exact, the sed script selects only lines + # which match one of the two above). The lan interface, which + # defaults to ixp0, is changed to the correct value for openslug, + # eth0 + devio "<<$sysdev" cpb fb1,10 | sed -n '/^\[[^][]*\]$/p; + s/^lan_interface=ixp0$/lan_interface=eth0/; + /^[-a-zA-Z0-9_][-a-zA-Z0-9_]*=/p' >/etc/default/sysconf + # + # The SysConf must have a hardware id, if it doesn't it has + # probably been erased or never set in the first place and the + # hardware id is retrieved from the RedBoot partition. This is + # the only thing which cannot be defaulted. +fi +# +# Error recovery: no SysConf or invalid SysConf. Make a new one from the +# RedBoot hardware ID information. +# NOTE: this block of code overwrites the shell script arguments. +config valid || { + reddev="$(mtblockdev RedBoot)" + initmac= + if test -n "$reddev" -a -b "$reddev" + then + # The hardware id starts 80 bytes before the end of the + # block, the block ends (or should end) with the signature + # <4 bytes> sErCoMm <bytes> sErCoMm. Note that devio 'pf' + # empties the stack. + set -- $(devio "<<$reddev" ' + <= $80- + .= @ + pf %02X + A= 5 + $( 1 + A= @,A1- + pf :%02X + $) A + pn + <=f4+;cp7;pn + <=$7-;cp7;pn') + if test $# -eq 3 -a "$2" = sErCoMm -a "$3" = sErCoMm + then + initmac="$1" + fi + fi + # + # APEX: may need extra code to set initmac here. + # + if test -n "$initmac" + then + # + # Generate a complete /etc/default/sysconf based on just + # one number ;-) + { echo '[network]' + echo "hw_addr=$initmac" + } >/etc/default/sysconf + # + # See /etc/default/functions (the config function) for + # the derivation of the rest of the information. + fi +} +# +# The config function will now return the correct values - even if sysconf +# is still missing. 'config valid' says if valid configuration information +# is available. +# +# Set up the 'standard' files in the root file system (these couldn't be set +# up before because they depend on stuff which RedBoot puts into SysConf from +# the ID info on the specific machine - in particular the hardware address of +# eth0, which must be the one assigned for *this* box!) +# +# HOSTNAME: defaults to LGK<mac> i.e. something derived from +# the ethernet hardware. LinkSys documentation explains how +# to determine this. Set by the user in linksys setup software. +# DOMAINNAME: LinkSys puts this in w_d_name. +test -n "$(config host)" && config host >/etc/hostname +domain="$(config domain)" +test -n "$domain" && echo "$domain" >/etc/defaultdomain +# +# Ethernet information. This goes into /etc/network/interfaces, +# however this is only used for static setup (and this is not +# the default). With dhcp the openslug udhcp script, +# /etc/udhcpc.d/50default, loads the values from sysconf. The +# lan_interface config value must exist for the file to be +# overwritten here. +iface="$(config iface)" +if test -n "$iface" +then + boot="$(config boot)" + # Only dhcp and static are supported at present - bootp + # support requires installation of appropriate packages + # dhcp is the fail-safe + case "$boot" in + dhcp|static) ;; + *) boot=dhcp;; + esac + # + mac="$(config mac)" + ip="$(config ip)" + netmask="$(config netmask)" + gateway="$(config gateway)" + { + echo "# /etc/network/interfaces" + echo "# configuration file for ifup(8), ifdown(8)" + echo "#" + echo "# The loopback interface" + echo "auto lo" + echo "iface lo inet loopback" + echo "#" + echo "# The NSLU2 built-in ethernet" + echo "auto $iface" + echo "# Automatically generated from /etc/default/sysconf" + if config valid + then + echo "# The pre-up option must always be supplied, regardless" + echo "# of configuration, to set the hardware correctly." + echo "# Severe network problems may result if this option is" + echo "# removed." + c= + else + echo "# WARNING: improperly configured network interface." + echo "# WARNING: the pre-up line must be corrected or severe" + echo "# WARNING: network problems may result." + c='#' + mac='<WARNING: unknown hardware address>' + fi + echo "iface $iface inet $boot" + echo "${c} pre-up ifconfig $iface hw ether $mac" + # The following are ignored for DHCP but are harmless + test -n "$ip" && echo " address $ip" + test -n "$netmask" && echo " netmask $netmask" + test -n "$gateway" && echo " gateway $gateway" + } >/etc/network/interfaces +fi +# +# The DNS server information gives up to three nameservers, but this +# currently only binds in the first. +{ + test -n "$domain" && echo "search $domain" + echodns $(config dns) $(config dns1) $(config dns2) +} >/etc/resolv.conf +# +# Invalid config must be handled, do this by hacking /etc/motd. +if config valid +then + echo "Host name: $(config host)" + echo "Host ID: $mac" + echo "Network boot method: $boot" + case "$boot" in + static) echo "Host IP address: $ip";; + esac + echo "Use 'turnup init' to reset the configuration" + echo "Use 'turnup disk|nfs -i <device> options to initialise a non-flash root" + echo "Use 'turnup help' for more information" +else + echo "+=====================================================================+" + echo "| +-----------------------+ |" + echo "| | INITIALISATION FAILED | |" + echo "| +-----------------------+ |" + echo "| |" + echo "| This machine has been booted with a temporary ethernet id |" + echo "| The initialisation failed because the machine id was not available |" + echo "| within the flash memory of the NSLU2. You must run: |" + echo "| |" + echo "| turnup init |" + echo "| |" + echo "| To correct this problem. Severe network problems may occur if this |" + echo "| is not done. |" + echo "+=====================================================================+" +fi >/etc/motd + +exit 0 diff --git a/packages/openslug-init/openslug-init-0.10/reflash b/packages/openslug-init/openslug-init-0.10/reflash new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/openslug-init/openslug-init-0.10/reflash diff --git a/packages/openslug-init/openslug-init-0.10/turnup b/packages/openslug-init/openslug-init-0.10/turnup index d22e15c208..a33a58ad02 100644 --- a/packages/openslug-init/openslug-init-0.10/turnup +++ b/packages/openslug-init/openslug-init-0.10/turnup @@ -386,24 +386,6 @@ boot_rootfs() { } # -# mountflash <flash root directory> -# Finds and mounts the flash file system -mountflash() { - local ffsdev - - ffsdev="$(mtblockdev Flashdisk)" - test -n "$ffsdev" -a -b "$ffsdev" || { - echo "turnup disk: unable to find flash file system to copy ($ffsdev)" >&2 - return 1 - } - mount -t jffs2 "$ffsdev" "$1" || { - echo "turnup disk: $ffsdev: unable to mount flash file system on $1" >&2 - return 1 - } - return 0 -} - -# # disk [-m] [-i] [-s<time>] <device> {options} # Carefully copy the flash file system to the named device. disk() { @@ -654,12 +636,179 @@ nfs() { } # +# fix_hw_addr +# Called when the configuration is invalid to reset /etc/default/sysconf +fix_hw_addr() { + # first look on the flash disk (ideally this stuff would only + # be called from flash, but there is no way of guaranteeing that). + local ffsdev ffs mac name force + + case "$1" in + -f) force="$1";; + esac + + ffsdev="$(mtblockdev Flashdisk)" + test -n "$ffsdev" -a -b "$ffsdev" || { + echo "turnup init: the flash file system device is missing" >&2 + echo " The device (typically /dev/mtdblock4) must exist and" >&2 + echo " it must identify a flash partition called 'Flashdisk'" >&2 + echo " It may be that the /dev directory has not been initialised." >&2 + echo " This script cannot correct this problem." >&2 + return 1 + } + + test -x /etc/init.d/sysconfsetup || { + echo "turnup init: /etc/init.d/sysconfsetup: script not executable" >&2 + echo " or script not present. turnup init requires this script to" >&2 + echo " exist to correct the initialisation" >&2 + return 1 + } + + # use devio to find out if this *is* the flash disk. + ffs= + if test "$(devio "<<$ffsdev" prd)" -ne "$(devio '<</etc/init.d/sysconfsetup' prd)" + then + # this isn't the flash device + ffs="/tmp/flashdisk.$$" + # make sure we can get to the flash file system first + mountflash "$ffs" || { + rmdir "$ffs" + return 1 + } + + # copy if available + if test -r "$ffs/etc/default/sysconf" + then + cp "$ffs/etc/default/sysconf" + force= + fi + + umount "$ffs" + rmdir "$ffs" + fi + + # if the config is still not valid generate sysconf from the slug + # label. + config valid && test -z "$force" || { + mac= + until test -n "$mac" + do + echo "turnup init: please find the 'MAC Address' of your NSLU2" >&2 + echo " The required number is on a label on the bottom of the NSLU2" >&2 + echo " It will be something like 'LKG1A2B3C'" >&2 + echo -n "Enter the mac address: " >/dev/tty + read name </dev/tty + case "$name" in + [Ll][Kk][Gg][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]) + mac="$(echo "$name" | + sed -n 's/^...\(..\)\(..\)\(..\)$/00:0F:66:\1:\2:\3/p')";; + [0-9A-Fa-f][0-9A-Fa-f]:[0-9A-Fa-f][0-9A-Fa-f]:[0-9A-Fa-f][0-9A-Fa-f]:[0-9A-Fa-f][0-9A-Fa-f]:[0-9A-Fa-f][0-9A-Fa-f]:[0-9A-Fa-f][0-9A-Fa-f]) + mac="$name" + name= + ;; + "") return 1;; + *) echo "$name: not recognised as a LinkSys mac address" >&2 + echo " Enter the LinkSys value or a full Ethernet MAC addrress" >&2 + mac=;; + esac + + # Now generate the correct sysconf + { echo '[network]' + echo "hw_addr=$mac" + test -n "$name" && echo "default_server_name=$name" + } >/etc/default/sysconf + done + } + + # the configuration should be valid now + /etc/init.d/sysconfsetup reload +} + +# +# read_one 'prompt' 'group' 'name' +# read a single value +read_one() { + local n o + o="$(sysval "$2" "$3")" + echo -n "$1 [$o]: " >/dev/tty + read n </dev/tty + test -z "$n" && n="$o" + eval "$3='$n'" +} +# +# init_network +# Change the network initialisation +init_network() { + # fix the root password + echo "Please enter a new password for 'root'." >/dev/tty + echo "The password must be non-empty for ssh login to succeed!" >/dev/tty + passwd + # now the network configuration + read_one "Host name" network disk_server_name + read_one "Domain name" network w_d_name + read_one "Boot protocol (dhcp|static)" network bootproto + case "$bootproto" in + static) read_one "IP address" network ip_addr + read_one "IP netmask" network netmask + read_one "IP gateway" network gateway + read_one "First DNS server" network dns_server1 + read_one "Second DNS server" network dns_server2 + read_one "Third DNS server" network dns_server3 + ;; + dhcp) ;; + *) bootproto=dhcp;; + esac + # + # The other stuff which cannot be changed + hw_addr="$(config mac)" + lan_interface="$(config iface)" + # + # Write this out to a new sysconf + { echo "[network]" + echo "hw_addr=$hw_addr" + echo "lan_interface=$lan_interface" + test -n "$disk_server_name" && echo "disk_server_name=$disk_server_name" + test -n "$w_d_name" && echo "w_d_name=$w_d_name" + echo "bootproto=$bootproto" + case "$bootproto" in + static) echo "ip_addr=$ip_addr" + test -n "$netmask" && echo "netmask=$netmask" + test -n "$gateway" && echo "gateway=$gateway" + test -n "$dns_server1" && echo "dns_server1=$dns_server1" + test -n "$dns_server2" && echo "dns_server2=$dns_server2" + test -n "$dns_server3" && echo "dns_server3=$dns_server3" + ;; + esac + } >/etc/default/sysconf + # + # And reload the result + /etc/init.d/sysconfsetup reload + # + # The remove the spurious 'init' motd + rm /etc/motd +} + +# # Basic command switch (this should be the only thing in this # script which actually does anything!) case "$1" in init) shift - echo "turnup init: NYI" >&2 - exit 1;; + if config valid && test "$1" != -f + then + if init_network "$@" + then + echo "turnup init: you must reboot the NSLU2 for the changes to take effect" >&2 + else + exit 1 + fi + else + if fix_hw_addr "$@" + then + echo "turnup init: you must reboot the NSLU2 for the changes to take effect" >&2 + else + exit 1 + fi + fi;; disk) shift disk "$@";; memstick) @@ -675,7 +824,9 @@ usage: turnup command [options] help output this help init + correct errors in network information initialise network information when DHCP is not available + change network information disk [-i] [-s<seconds>] <device> [mount options] With -i make <device> a bootable file system then (with or without -i) arrange for the next reboot to use that device. diff --git a/packages/openslug-init/openslug-init_0.10.bb b/packages/openslug-init/openslug-init_0.10.bb index 576fbb587d..7b366b2173 100644 --- a/packages/openslug-init/openslug-init_0.10.bb +++ b/packages/openslug-init/openslug-init_0.10.bb @@ -3,7 +3,7 @@ SECTION = "console/network" LICENSE = "GPL" DEPENDS = "base-files devio" RDEPENDS = "busybox devio" -PR = "r28" +PR = "r29" SRC_URI = "file://linuxrc \ file://boot/flash \ @@ -21,17 +21,18 @@ SRC_URI = "file://linuxrc \ file://initscripts/sysconfsetup \ file://initscripts/umountinitrd.sh \ file://functions \ + file://conffiles \ file://turnup \ + file://reflash \ file://modprobe.conf \ file://leds.h \ file://leds.c \ - file://kern_header.c \ - file://update-kernel" + " SBINPROGS = "leds" -USRSBINPROGS = "kern_header" +USRSBINPROGS = "" CPROGS = "${USRSBINPROGS} ${SBINPROGS}" -SCRIPTS = "turnup update-kernel" +SCRIPTS = "turnup reflash" BOOTSCRIPTS = "flash disk nfs ram network udhcpc.script" INITSCRIPTS = "syslog.buffer syslog.file syslog.network zleds\ leds_startup rmrecovery sysconfsetup umountinitrd.sh" @@ -97,6 +98,7 @@ do_install() { done # Configuration files + install -m 0644 conffiles ${D}${sysconfdir}/default install -m 0644 modprobe.conf ${D}${sysconfdir}/ set +ex @@ -137,4 +139,4 @@ FILES_${PN} = "/" # It is bad to overwrite /linuxrc as it puts the system back to # a flash boot (and the flash has potentially not been upgraded!) -CONFFILES_${PN} = "${sysconfdir}/modprobe.conf /linuxrc" +CONFFILES_${PN} = "${sysconfdir}/modprobe.conf /linuxrc ${sysconfdir}/default/conffiles" |