Package: sysvinit
Version: 2.87dsf-2
Severity: important
Tags: patch

Since insserv is enabled by default, it is not possible to do GNU/kFreeBSD
specific initialisation in a dedicated script and ensure it is done at 
the right moment due to dependencies issue. This is especially true for
mtab.sh, which makes the system no bootable if /etc/mtab has not been yet
changed to a symlink, by mounting an empty tmpfs over /dev.

The patch below fixes the problem by having different initialisation on 
Linux and GNU/kFreeBSD. In case the systems is unknown, it switches to 
doing nothing by default, which is probaby the safest option. It also 
correctly detects available filesystem on GNU/kFreeBSD.


diff -u sysvinit-2.87dsf/debian/initscripts/lib/init/mount-functions.sh 
sysvinit-2.87dsf/debian/initscripts/lib/init/mount-functions.sh
--- sysvinit-2.87dsf/debian/initscripts/lib/init/mount-functions.sh
+++ sysvinit-2.87dsf/debian/initscripts/lib/init/mount-functions.sh
@@ -46,12 +46,31 @@
        elif [ "$1" = tmpfs ]
        then # always accept tmpfs, to mount /lib/init/rw before /proc
                FSTYPE=$1
-       elif grep -E -qs "$1\$" /proc/filesystems
-       then
-               FSTYPE=$1
-       elif grep -E -qs "$2\$" /proc/filesystems
-       then
-               FSTYPE=$2
+       else 
+               case "$KERNEL" in 
+                       Linux)
+                               if grep -E -qs "$1\$" /proc/filesystems
+                               then
+                                       FSTYPE=$1
+                               elif grep -E -qs "$2\$" /proc/filesystems
+                               then
+                                       FSTYPE=$2
+                               fi
+                               ;;
+                       GNU/kFreeBSD)
+                               if kldstat -q -m "$1"
+                               then
+                                       FSTYPE=$1
+                               elif kldstat -q -m "$2"
+                               then
+                                       FSTYPE=$2
+                               fi
+                               ;;
+                       *)
+                               # On unknown systems, use the first FS type
+                               FSTYPE=$1
+                               ;;
+               esac
        fi
 
        if [ ! "$FSTYPE" ]
diff -u sysvinit-2.87dsf/debian/initscripts/etc/init.d/mtab.sh 
sysvinit-2.87dsf/debian/initscripts/etc/init.d/mtab.sh
--- sysvinit-2.87dsf/debian/initscripts/etc/init.d/mtab.sh
+++ sysvinit-2.87dsf/debian/initscripts/etc/init.d/mtab.sh
@@ -63,7 +63,7 @@
        fi
 }
 
-do_start () {
+do_start_linux () {
        DO_MTAB=""
        MTAB_PATH="$(readlink -f /etc/mtab || :)"
        case "$MTAB_PATH" in
@@ -160,6 +160,30 @@
        exec 0<&9 9<&-
 }
 
+do_start_kfreebsd () {
+       # On GNU/kFreeBSD mount does not update /etc/mtab, so
+       # we need to use a symlink
+       if [ "$(readlink -f /etc/mtab)" != "/proc/mounts" ] ; then
+               echo "Warning: replacing /etc/mtab with a symlink to 
/proc/mounts."
+               rm -f /etc/mtab
+               ln -s /proc/mounts /etc/mtab
+       fi
+}
+
+do_start () {
+       case "$KERNEL" in 
+               "Linux")
+                       do_start_linux
+                       ;;
+               "GNU/kFreeBSD")
+                       do_start_kfreebsd
+                       ;;
+               *)
+                       # Doing nothing is the safest option
+                       ;;
+       esac
+}
+
 case "$1" in
   start|"")
        do_start
diff -u sysvinit-2.87dsf/debian/initscripts/etc/init.d/mountkernfs.sh 
sysvinit-2.87dsf/debian/initscripts/etc/init.d/mountkernfs.sh
--- sysvinit-2.87dsf/debian/initscripts/etc/init.d/mountkernfs.sh
+++ sysvinit-2.87dsf/debian/initscripts/etc/init.d/mountkernfs.sh
@@ -19,6 +19,8 @@
 
 [ -f /etc/default/tmpfs ] && . /etc/default/tmpfs
 
+KERNEL="$(uname -s)"
+
 do_start () {
        #
        # Get some writable area available before the root is checked
@@ -32,19 +34,37 @@
        # Make pidfile omit directory for sendsigs
        mkdir /lib/init/rw/sendsigs.omit.d/
 
-       #
-       # Mount proc filesystem on /proc
-       #
-       domount proc "" /proc proc -onodev,noexec,nosuid
-
-       #
-       # Mount sysfs on /sys
-       #
-       # Only mount sysfs if it is supported (kernel >= 2.6)
-       if grep -E -qs "sysfs\$" /proc/filesystems
-       then
-               domount sysfs "" /sys sysfs -onodev,noexec,nosuid
-       fi
+       case "$KERNEL" in 
+               "Linux")
+                       #
+                       # Mount proc filesystem on /proc
+                       #
+                       domount proc "" /proc proc -onodev,noexec,nosuid
+
+                       #
+                       # Mount sysfs on /sys
+                       #
+                       # Only mount sysfs if it is supported (kernel >= 2.6)
+                       if grep -E -qs "sysfs\$" /proc/filesystems
+                       then
+                               domount sysfs "" /sys sysfs 
-onodev,noexec,nosuid
+                       fi
+                       ;;
+               "GNU/kFreeBSD")
+                       #
+                       # Mount proc filesystem on /proc
+                       #
+                       domount linprocfs "" /proc linprocfs
+
+                       #
+                       # Mount sys filesystem on /sys
+                       #
+                       domount linsysfs "" /sys linsysfs
+                       ;;
+               *)
+                       # Doing nothing is the safest option
+                       ;;
+       esac
 
        # Mount /var/run and /var/lock as tmpfs if enabled
        if [ yes = "$RAMRUN" ] ; then
diff -u sysvinit-2.87dsf/debian/initscripts/etc/init.d/mountdevsubfs.sh 
sysvinit-2.87dsf/debian/initscripts/etc/init.d/mountdevsubfs.sh
--- sysvinit-2.87dsf/debian/initscripts/etc/init.d/mountdevsubfs.sh
+++ sysvinit-2.87dsf/debian/initscripts/etc/init.d/mountdevsubfs.sh
@@ -27,7 +27,7 @@
 . /lib/lsb/init-functions
 . /lib/init/mount-functions.sh
 
-do_start () {
+do_start_linux () {
        #
        # Mount a tmpfs on /dev/shm
        #
@@ -42,39 +42,57 @@
        # mount devpts if it is compiled in (older devfs didn't require it
        # to be compiled in at all).
        #
-       if [ "$KERNEL" = Linux ]
+       #
+       # Since kernel 2.5.something, devfs doesn't include
+       # a standard /dev/pts directory anymore. So if devfs
+       # is mounted on /dev we need to create that directory
+       # manually.
+       #
+       if [ ! -d /dev/pts ]
        then
-               #
-               # Since kernel 2.5.something, devfs doesn't include
-               # a standard /dev/pts directory anymore. So if devfs
-               # is mounted on /dev we need to create that directory
-               # manually.
-               #
-               if [ ! -d /dev/pts ]
+               if grep -qs '/dev devfs' /proc/mounts
                then
-                       if grep -qs '/dev devfs' /proc/mounts
-                       then
-                               mkdir --mode=755 /dev/pts
-                               [ -x /sbin/restorecon ] && /sbin/restorecon 
/dev/pts
-                       fi
+                       mkdir --mode=755 /dev/pts
+                       [ -x /sbin/restorecon ] && /sbin/restorecon /dev/pts
                fi
-               if [ -d /dev/pts ]
+       fi
+       if [ -d /dev/pts ]
+       then
+               if [ ! -c /dev/ptmx ]
                then
-                       if [ ! -c /dev/ptmx ]
+                       mknod --mode=666 /dev/ptmx c 5 2
+                       ES=$?
+                       if [ "$ES" != 0 ]
                        then
-                               mknod --mode=666 /dev/ptmx c 5 2
-                               ES=$?
-                               if [ "$ES" != 0 ]
-                               then
-                                       log_warning_msg "Failed making node 
/dev/ptmx with error code ${ES}."
-                               fi
-                               [ -x /sbin/restorecon ] && /sbin/restorecon 
/dev/ptmx
+                               log_warning_msg "Failed making node /dev/ptmx 
with error code ${ES}."
                        fi
-                       domount devpts "" /dev/pts devpts 
-onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE
+                       [ -x /sbin/restorecon ] && /sbin/restorecon /dev/ptmx
                fi
+               domount devpts "" /dev/pts devpts 
-onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE
        fi
 }
 
+do_start_kfreebsd () {
+       #
+       # Mount /dev/fd
+       #
+       domount fdescfs "" /dev/fd fdescfs
+}
+
+do_start () {
+       case "$KERNEL" in 
+               "Linux")
+                       do_start_linux
+                       ;;
+               "GNU/kFreeBSD")
+                       do_start_kfreebsd
+                       ;;
+               *)
+                       # Doing nothing is safe
+                       ;;
+       esac
+}
+
 case "$1" in
   "")
        echo "Warning: mountdevsubfs should be called with the 'start' 
argument." >&2


-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: kfreebsd-amd64 (x86_64)

Kernel: kFreeBSD 7.2-1-amd64
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages sysvinit depends on:
ii  initscripts                  2.87dsf-2 scripts for initializing and shutt
ii  libc0.1                      2.9-25      GNU C Library: Shared libraries
ii  sysv-rc                      2.87dsf-2 System-V-like runlevel change mech
ii  sysvinit-utils               2.87dsf-2 System-V-like utilities

sysvinit recommends no packages.

sysvinit suggests no packages.

-- no debconf information



-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to