openturbostation: init-stuff
authorOyvind Repvik <nail@nslu2-linux.org>
Wed, 7 Mar 2007 13:09:56 +0000 (13:09 +0000)
committerOyvind Repvik <nail@nslu2-linux.org>
Wed, 7 Mar 2007 13:09:56 +0000 (13:09 +0000)
13 files changed:
packages/openturbostation-init/files/boot/disk [new file with mode: 0644]
packages/openturbostation-init/files/boot/flash [new file with mode: 0644]
packages/openturbostation-init/files/boot/network [new file with mode: 0644]
packages/openturbostation-init/files/boot/nfs [new file with mode: 0644]
packages/openturbostation-init/files/boot/udhcpc.script [new file with mode: 0644]
packages/openturbostation-init/files/initscripts/fixfstab [new file with mode: 0644]
packages/openturbostation-init/files/initscripts/loadmodules.sh [new file with mode: 0644]
packages/openturbostation-init/files/initscripts/rmrecovery [new file with mode: 0644]
packages/openturbostation-init/files/initscripts/sysconfsetup [new file with mode: 0644]
packages/openturbostation-init/files/initscripts/syslog.buffer [new file with mode: 0644]
packages/openturbostation-init/files/initscripts/syslog.file [new file with mode: 0644]
packages/openturbostation-init/files/initscripts/syslog.network [new file with mode: 0644]
packages/openturbostation-init/files/initscripts/umountinitrd.sh [new file with mode: 0644]

diff --git a/packages/openturbostation-init/files/boot/disk b/packages/openturbostation-init/files/boot/disk
new file mode 100644 (file)
index 0000000..b4bbaf1
--- /dev/null
@@ -0,0 +1,67 @@
+#!/bin/sh
+# boot from the hard disk partition "$1" (which
+# must be given) using options from the rest of
+# the command line.
+#
+# Use the standard init path (see /etc/init.d/rcS)
+export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+#
+# Load the helper functions
+. /etc/default/functions
+. /etc/default/modulefunctions
+#
+#
+if test -n "$1"
+then
+       device="$1"
+       shift
+        # proc is needed for UUID mount and module load
+        mount -t proc proc /proc
+        # load USB & SCSI storage modules (/proc required!)
+       if [ "$(machine)" != "storcenter" ]; then
+               echo "boot: loading modules required for disk boot"
+               loaddiskmods
+               # waiting for disk (FIXME)
+               sleep=6
+               test "$sleep" -gt 0 && sleep "$sleep"
+       else
+               # make the device links so turnup can use short disk names.
+               # probably only necessary on devfs based systems.
+               /etc/init.d/devices start
+               scc -l redflash -f auto
+       fi
+       #
+       # fire the boot
+       echo "boot: rootfs: mount $* $device [$UUID]"
+       #
+       # Mount read-write because before exec'ing init
+       # If a UUID is given (in the environment) this
+       # is used in preference to the device, but if
+       # the UUID mount fails a standard device mount
+       # is attempted.
+       if      test -n "$UUID" &&
+               mount "$@" -U "$UUID" /mnt ||
+               mount "$@" "$device" /mnt
+       then
+               # checkmount checks for sh, chroot, init
+               # and /mnt (i.e. /mnt/mnt in this case)
+               if checkmount /mnt
+               then
+                       # if mounted, then move /dev to the new root
+                       mount --bind /dev /mnt/dev
+                       # pivot to /initrd if available, else /mnt
+                       cd /
+                       if test -d /mnt/initrd
+                       then
+                               swivel mnt initrd
+                       else
+                               swivel mnt mnt
+                       fi
+                       # swivel failed
+               fi
+               # Failure: unmount the partition
+               umount /mnt
+       fi
+fi
+# fallback - use the flash boot
+exec /boot/flash
diff --git a/packages/openturbostation-init/files/boot/flash b/packages/openturbostation-init/files/boot/flash
new file mode 100644 (file)
index 0000000..40f64c9
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+# boot from the current (flash) root partition
+# nothing need be done apart from setting the
+# system LED status correctly
+. /etc/default/functions
+scc -l redflash -f auto
+test -x /sbin/init && exec /sbin/init
+# fallback if /sbin/init has been deleted (bad!)
+scc -l red 
+exec <>/dev/console >&0 2>&0
+test -x /sbin/sulogin && exec /sbin/sulogin
+test -x /bin/sh && exec /bin/sh
+exit 1
diff --git a/packages/openturbostation-init/files/boot/network b/packages/openturbostation-init/files/boot/network
new file mode 100644 (file)
index 0000000..599250e
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh
+# bring up the network before boot, used to allow
+# netconsole logging and NFS boot.  This runs out
+# of flash, but that's ok because the script doesn't
+# leave any process running.
+#
+# NOTE: /etc/default/functions defines ifup as a shell
+# function!
+. /etc/default/functions
+#
+# Now all the information for booting should be in the configuration
+# file.  Config the loopback and network interfaces.
+ifconfig lo 127.0.0.1 up
+iface="$(config iface)"
+test -n "$iface" && ifup "$iface"
+# exit code is true only if the interface config has succeeded
diff --git a/packages/openturbostation-init/files/boot/nfs b/packages/openturbostation-init/files/boot/nfs
new file mode 100644 (file)
index 0000000..7cfce66
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh
+# boot from the nfs partition "$1" (which
+# must be given) using options from the rest of
+# the command line.
+#
+# Use the standard init path (see /etc/init.d/rcS)
+export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+#
+. /etc/default/functions
+scc -l redflash -f auto
+#
+if /boot/network
+then
+       # network is up and running, the NFS mount will
+       # now succeed (possibly), use /boot/disk
+       exec /boot/disk "$@"
+fi
+# fallback - use the flash boot
+exec /boot/flash
diff --git a/packages/openturbostation-init/files/boot/udhcpc.script b/packages/openturbostation-init/files/boot/udhcpc.script
new file mode 100644 (file)
index 0000000..3f437e3
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+# executed by udhcpc to do the real work of configuring an interface
+# writes the result (if any) to file descriptor 9
+case "$1" in
+deconfig)      # ignored
+       :;;
+renew|bound)   # this gives the real information
+       test -n "$ip" && {
+               echo "ip='$ip'"
+               echo "subnet='$subnet'"
+               echo "broadcast='$broadcast'"
+               echo "router='$router'"
+       } >&9;;
+leasefail)     # ignore - probably no dhcp server
+       :;;
+*)     echo "udhcpc: $*: command not recognised" >&2;;
+esac
diff --git a/packages/openturbostation-init/files/initscripts/fixfstab b/packages/openturbostation-init/files/initscripts/fixfstab
new file mode 100644 (file)
index 0000000..67116a1
--- /dev/null
@@ -0,0 +1,91 @@
+#!/bin/sh
+# validate /etc/fstab against the current UUID list in
+# /etc/uuid_by_partition
+#
+. /etc/default/functions
+pfile=/etc/uuid_by_partition
+
+#
+# use debug to find out what is going on
+test "$1" = start -o "$1" = debug || exit 0
+
+#
+# obtain the current list of parititions with UUIDs
+newlist="$(uuid_by_partition)"
+
+if test -r "$pfile"
+then
+       # read the old list
+       oldlist="$(cat "$pfile")"
+       #
+       # if it hasn't changed nothing need be done
+       test "$newlist" = "$oldlist" && exit 0
+       #
+       # it has changed, but this only matters if
+       # a previously existing uuid has moved, build
+       # a list of old device vs new device for every
+       # uuid which has moved
+       changedlist="$(
+               {       echo "$oldlist"
+                       echo "$newlist"
+               } | awk 'device[$2] == ""{device[$2] = $1}
+                       device[$2] != $1{print device[$2], $1}')"
+
+       if test -n "$changedlist"
+       then
+               # at least one partition has moved, scan the
+               # current fstab to see if it has a reference
+               # to this partition
+               changedfstab="$(
+                       {       echo "$changedlist"
+                               echo '#fstab'
+                               cat /etc/fstab
+                       } | awk 'BEGIN{list=1}
+                               list==1 && $0=="#fstab"{list=0; continue}
+                               list==1{new[$1] = $2; continue}
+                               new[$1] != ""{print $1, new[$1]}')"
+
+               # if this list is not empty edit the fstab
+               if test -n "$changedfstab"
+               then
+                       rm -f /tmp/fstab.$$
+                       # if the edit fails then do not overwrite the old
+                       # partition list - just exit with an error
+                       {       echo "$changedlist"
+                               echo '#fstab'
+                               cat /etc/fstab
+                       } | awk 'BEGIN{list=1}
+                               list==1 && $0=="#fstab"{list=0; continue}
+                               list==1{new[$1] = $2; continue}
+                               new[$1] != ""{$1 = new[$1]}
+                               {print}' >/tmp/fstab.$$ || {
+                               if test "$1" = start
+                               then
+                                       logger -s "/etc/init.d/fixfstab: /tmp/fstab.$$: awk failed"
+                               else
+                                       echo "debug: awk script failed with:" >&2
+                                       echo "$changedlist" >&2
+                                       echo "output in /tmp/fstab.$$" >&2
+                               fi
+                               exit 1
+                       }
+
+                       if test "$1" = start
+                       then
+                               mv /tmp/fstab.$$ /etc/fstab || {
+                                       logger -s "/etc/init.d/fixfstab: /tmp/fstab.$$: update failed"
+                                       exit 1
+                               }
+                       else
+                               echo "debug: fstab changed:"
+                               diff -u /etc/fstab /tmp/fstab.$$
+                       fi
+               fi
+       fi
+fi
+
+# write the new list to the file, only if we
+# are doing something...
+test "$1" = start && echo "$newlist" >"$pfile"
+
+exit 0
diff --git a/packages/openturbostation-init/files/initscripts/loadmodules.sh b/packages/openturbostation-init/files/initscripts/loadmodules.sh
new file mode 100644 (file)
index 0000000..c5d44d1
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. /etc/default/modulefunctions # Load module loading logic
+
+loadnetmods
+
+loaddiskmods
+
+loadmiscmods
+
+exit 0
diff --git a/packages/openturbostation-init/files/initscripts/rmrecovery b/packages/openturbostation-init/files/initscripts/rmrecovery
new file mode 100644 (file)
index 0000000..eec822b
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+# Run to remove /.recovery if the boot seems to have succeeded
+test -e /.recovery && rm -f /.recovery
+exit 0
diff --git a/packages/openturbostation-init/files/initscripts/sysconfsetup b/packages/openturbostation-init/files/initscripts/sysconfsetup
new file mode 100644 (file)
index 0000000..a4f9074
--- /dev/null
@@ -0,0 +1,46 @@
+#!/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 (/etc/default/sysconf) to recreate it, run this
+# script with the reload option to overwrite the system files.  The
+# configuration files described in sysconf_reload (in
+# /sbin/sysconf) will be overwritten on reload.
+#
+# start:  standard startup, do a complete (auto) restore if necessary
+# reinit: always do a complete auto restore
+# reload: just reload sysconf (no config files!)
+#
+# /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
+load_functions sysconf || exit 1
+#
+case "$1" in
+start) test -s /etc/default/sysconf || {
+               if sysconf_read
+               then
+                       if sysconf_valid
+                       then
+                               sysconf_restore auto
+                       else
+                               sysconf_reload
+                       fi
+               else
+                       sysconf_default
+                       sysconf_reload
+               fi
+       };;
+
+reload)        test -s /etc/default/sysconf || sysconf_read || sysconf_default
+       sysconf_reload;;
+
+reinit)        sysconf_restore auto;;
+
+*)     ;;
+esac
diff --git a/packages/openturbostation-init/files/initscripts/syslog.buffer b/packages/openturbostation-init/files/initscripts/syslog.buffer
new file mode 100644 (file)
index 0000000..9285c02
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# Invoke the syslog startup if the configuration
+# uses (only) 'buffer' as the DESTINATION
+DESTINATION=
+test -f /etc/syslog.conf && . /etc/syslog.conf
+doit=
+
+for d in $DESTINATION
+do
+       case "$d" in
+       buffer) doit=1;;
+       file)   exit 0;;
+       remote) exit 0;;
+       *)      echo "/etc/syslog.conf: $d: unknown destination" >&2
+               exit 1;;
+       esac
+done
+
+test -n "$doit" -a -x /etc/init.d/syslog &&
+       exec /etc/init.d/syslog "$@"
+
+exit 0
diff --git a/packages/openturbostation-init/files/initscripts/syslog.file b/packages/openturbostation-init/files/initscripts/syslog.file
new file mode 100644 (file)
index 0000000..80ee5f0
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# Invoke the syslog startup if the configuration
+# uses 'file' (and, optionally, buffer) as the DESTINATION
+DESTINATION=
+test -f /etc/syslog.conf && . /etc/syslog.conf
+doit=
+
+for d in $DESTINATION
+do
+       case "$d" in
+       buffer) :;;
+       file)   doit=1;;
+       remote) exit 0;;
+       *)      echo "/etc/syslog.conf: $d: unknown destination" >&2
+               exit 1;;
+       esac
+done
+
+test -n "$doit" -a -x /etc/init.d/syslog &&
+       exec /etc/init.d/syslog "$@"
+
+exit 0
diff --git a/packages/openturbostation-init/files/initscripts/syslog.network b/packages/openturbostation-init/files/initscripts/syslog.network
new file mode 100644 (file)
index 0000000..3d7f4ab
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Invoke the syslog startup if the configuration
+# uses 'remote', or doesn't use 'buffer' or 'file'
+DESTINATION=
+test -f /etc/syslog.conf && . /etc/syslog.conf
+doit=
+doneit=
+
+for d in $DESTINATION
+do
+       case "$d" in
+       buffer) doneit=1;;
+       file)   doneit=1;;
+       remote) doit=1;;
+       *)      doit=1
+               echo "/etc/syslog.conf: $d: unknown destination" >&2
+               exit 1;;
+       esac
+done
+
+# One of doneit or doit is set unless the DESTINATION value
+# is empty (which is probably an error), let syslog handle
+# the error.
+test \( -n "$doit" -o -z "$doneit" \) -a -x /etc/init.d/syslog &&
+       exec /etc/init.d/syslog "$@"
+
+exit 0
diff --git a/packages/openturbostation-init/files/initscripts/umountinitrd.sh b/packages/openturbostation-init/files/initscripts/umountinitrd.sh
new file mode 100644 (file)
index 0000000..b590ae6
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+#
+# umount /mnt, which is where the initrd ends up mounted
+# if the directory /initrd is not present, if this fails
+# then the /initrd is mounted and we want to remount that
+# ro - this works round the shutdown -r hang problem
+. /etc/default/functions
+#
+# if we are turnup'ed to disk, then just unmount the initrd all together
+#
+if [ -e /initrd/dev/.devfsd ]; then 
+       [ "$VERBOSE" = "very" ] && echo "Unmounting initrd..."
+       umount /initrd/dev
+       umount /initrd
+       exit 0
+fi
+
+while read device directory remainder
+do
+       case "$directory" in
+       /mnt)   echo "InitRD: unmount initrd on /mnt" >&2
+               umount /mnt;;
+       /initrd)# need the device for a remount
+               ffspart=Flashdisk
+               ffsdev="$(mtblockdev $ffspart)"
+               echo "InitRD: remount $ffdev read-only on /initrd" >&2
+               if test -n "$ffsdev" -a -b "$ffsdev"
+               then
+                       mount -o remount,ro "$ffsdev" /initrd
+               else
+                       echo "Flashdisk: $ffsdev: flash device not found" >&2
+               fi;;
+       esac
+done </proc/mounts