Bug#426404: initramfs-tools: firmware related problems in hook-functions
Hey max,
* maximilian attems <max@stro.at>, [2007-06-21 12:02 +0200]:
> On Mon, 28 May 2007, Emanuele Rocca wrote:
> > Trying to boot with this initrd the kernel is not able to find the
> > firmware for my qla2xxx, although a diff -Nur between the contents of
> > the following two images yields to nothing:
>
> could you post the diff?
I've tried today with -rc5 after a dist-upgrade and actually there are
some differences (see attached diff).
I can confirm that with initramfs-tools 0.87b the initrd is created
properly.
ciao,
ema
diff -Nur old/init new/init
--- old/init 2007-06-24 13:07:47.000000000 +0200
+++ new/init 2007-06-24 13:07:56.000000000 +0200
@@ -47,7 +47,6 @@
export readonly=y
export rootmnt=/root
export debug=
-export cryptopts=${CRYPTOPTS}
export ROOTDELAY=
export panic=
export blacklist=
@@ -80,9 +79,11 @@
;;
rootdelay=*)
ROOTDELAY="${x#rootdelay=}"
- ;;
- cryptopts=*)
- cryptopts="${x#cryptopts=}"
+ case ${ROOTDELAY} in
+ *[![:digit:].]*)
+ ROOTDELAY=
+ ;;
+ esac
;;
nfsroot=*)
NFSROOT="${x#nfsroot=}"
@@ -101,6 +102,11 @@
;;
panic=*)
panic="${x#panic=}"
+ case ${panic} in
+ *[![:digit:].]*)
+ panic=
+ ;;
+ esac
;;
quiet)
quiet=y
Binary files old/lib/libvolume_id.so.0 and new/lib/libvolume_id.so.0 differ
Binary files old/lib/udev/ata_id and new/lib/udev/ata_id differ
Binary files old/lib/udev/cdrom_id and new/lib/udev/cdrom_id differ
Binary files old/lib/udev/edd_id and new/lib/udev/edd_id differ
diff -Nur old/lib/udev/hotplug.functions new/lib/udev/hotplug.functions
--- old/lib/udev/hotplug.functions 2007-06-24 13:07:47.000000000 +0200
+++ new/lib/udev/hotplug.functions 1970-01-01 01:00:00.000000000 +0100
@@ -1,151 +0,0 @@
-# Setup and shell utility functions for use in hotplug agents.
-# vim: syntax=sh
-
-#DEBUG=yes
-
-#EVENTS_LOG='/dev/hotplug.log'
-
-FIRMWARE_DIRS='/lib/firmware /usr/local/lib/firmware /usr/lib/hotplug/firmware'
-
-EVENTS_DIR='/dev/.events'
-
-MODPROBE='/sbin/modprobe -s -q'
-
-PATH='/sbin:/bin:/usr/sbin:/usr/bin'
-
-[ -e /etc/default/hotplug ] && . /etc/default/hotplug
-
-
-if [ -x /usr/bin/logger ]; then
- LOGGER=/usr/bin/logger
-elif [ -x /bin/logger ]; then
- LOGGER=/bin/logger
-else
- unset LOGGER
-fi
-
-# for diagnostics
-if [ -t 1 -a -z "$LOGGER" ] || [ ! -e '/dev/log' ]; then
- mesg() {
- echo "$@" >&2
- }
-elif [ -t 1 ]; then
- mesg() {
- echo "$@"
- $LOGGER -t "${0##*/}[$$]" "$@"
- }
-else
- mesg() {
- $LOGGER -t "${0##*/}[$$]" "$@"
- }
-fi
-
-debug_mesg() {
- [ -z "$DEBUG" -o "$DEBUG" = no ] && return 0
- mesg "$@"
-}
-
-wait_for_file() {
- local file=$1
- local timeout=$2
- [ "$timeout" ] || timeout=120
-
- local count=$timeout
- while [ $count != 0 ]; do
- [ -e "$file" ] && return 0
- sleep 1
- count=$(($count - 1))
- done
-
- mesg "$file did not appear before the timeout!"
- exit 1
-}
-
-# Read a single line from file $1 in the $DEVPATH directory.
-# The function must not return an error even if the file does not exist.
-sysread() {
- local file="$1"
- [ -e "/sys$DEVPATH/$file" ] || return 0
- local value
- read value < "/sys$DEVPATH/$file" || return 0
- echo "$value"
-}
-
-sysreadlink() {
- local file="$1"
- [ -e "/sys$DEVPATH/$file" ] || return 0
- readlink -f /sys$DEVPATH/$file 2> /dev/null || true
-}
-
-# returns true if a directory is writeable
-writeable() {
- if ln -s check $1/.is-writeable 2> /dev/null; then
- rm -f $1/.is-writeable
- return 0
- else
- return 1
- fi
-}
-
-##############################################################################
-lock_rules_file() {
- [ -e /dev/.udev/ ] || return 0
-
- RULES_LOCK="/dev/.udev/.lock-${RULES_FILE##*/}"
-
- retry=30
- while ! mkdir $RULES_LOCK 2> /dev/null; do
- if [ $retry -eq 0 ]; then
- echo "Cannot lock $RULES_FILE!" >&2
- exit 2
- fi
- sleep 1
- retry=$(($retry - 1))
- done
-}
-
-unlock_rules_file() {
- [ "$RULES_LOCK" ] || return 0
- rmdir $RULES_LOCK || true
-}
-
-choose_rules_file() {
- local tmp_rules_file="/dev/.udev/tmp-rules--${RULES_FILE##*/}"
- [ -e "$RULES_FILE" -o -e "$tmp_rules_file" ] || PRINT_HEADER=1
-
- if writeable ${RULES_FILE%/*}; then
- RO_RULES_FILE='/dev/null'
- else
- RO_RULES_FILE=$RULES_FILE
- RULES_FILE=$tmp_rules_file
- fi
-}
-
-##############################################################################
-raw_find_next_available() {
- local links="$1"
-
- local basename=${links%%[ 0-9]*}
- local max=-1
- for name in $links; do
- local num=${name#$basename}
- [ "$num" ] || num=0
- [ $num -gt $max ] && max=$num
- done
-
- local max=$(($max + 1))
- # "name0" actually is just "name"
- [ $max -eq 0 ] && return
- echo "$max"
-}
-
-find_all_rules() {
- local key="$1"
- local linkre="$2"
- local match="$3"
-
- local search='.*[[:space:],]'"$key"'"\('"$linkre"'\)"[[:space:]]*\(,.*\|\\\|\)$'
-
- echo $(sed -n -e "${match}s/${search}/\1/p" $RO_RULES_FILE $RULES_FILE)
-}
-
diff -Nur old/lib/udev/ide.agent new/lib/udev/ide.agent
--- old/lib/udev/ide.agent 2007-06-24 13:07:47.000000000 +0200
+++ new/lib/udev/ide.agent 1970-01-01 01:00:00.000000000 +0100
@@ -1,40 +0,0 @@
-#!/bin/sh -e
-# only needed for kernels < 2.6.16
-#
-# load the high level driver for IDE devices
-#
-
-cd /lib/udev/
-. ./hotplug.functions
-
-if [ -z "$DEVPATH" ]; then
- echo "\$DEVPATH is not set!" >&2
- exit 1
-fi
-
-device=${DEVPATH#/devices/*/ide?/}
-drive=${device#?.}
-bus=${device%.?}
-
-unitnum=$((96 + 1 + $drive + $bus * 2))
-name=$(printf "hd\\$(printf '%o' $unitnum)")
-
-procfile="/proc/ide/$name/media"
-
-wait_for_file $procfile
-
-read media < $procfile
-case "$media" in
- cdrom) module=ide-cd ;;
- disk) module=ide-disk ;;
- floppy) module=ide-floppy ;;
- tape) module=ide-tape ;;
- *) module=ide-generic ;;
-esac
-
-if [ "$module" ]; then
- exec $MODPROBE $module
-fi
-
-exit 0
-
diff -Nur old/lib/udev/path_id new/lib/udev/path_id
--- old/lib/udev/path_id 2007-06-24 13:07:47.000000000 +0200
+++ new/lib/udev/path_id 1970-01-01 01:00:00.000000000 +0100
@@ -1,564 +0,0 @@
-#!/bin/sh
-
-# provide the shortest possible unique hardware path to a device
-# for the Linux Persistent Device Naming scheme
-#
-# Copyright (C) 2005-2006 SUSE Linux Products GmbH
-# Author:
-# Hannes Reinecke <hare@suse.de>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation version 2 of the License.
-#
-# to be called from a udev rule to return the name for a symlink
-# DEVPATH=<devpath>; path_id
-# path_id <devpath>
-
-# examples for all block devices on a system:
-# for i in `find /sys/class/block`; do DEVPATH="`echo $i | sed -e 's@^/sys\|/dev@@g'`"; path_id; done
-
-SYSFS=/sys
-RESULT=1
-TYPE=
-OPWD="`pwd`"
-full_sysfs_path=
-full_sysfs_device_path=
-
-if [ -z "$DEVPATH" -a -z "$1" ] ; then
- exit 1
-fi
-
-if [ -z "$DEVPATH" ] ; then
- case "$1" in
- $SYSFS/*)
- DEVPATH="${1#$SYSFS}"
- ;;
- *)
- DEVPATH=$1
- ;;
- esac
-fi
-
-if [ ! -e $SYSFS$DEVPATH/dev ] ; then
- exit 1
-fi
-
-case "$DEVPATH" in
- /devices/*)
- cd "$SYSFS$DEVPATH/subsystem";
- TYPE="`pwd -P`"
- cd "$OPWD"
- TYPE="${TYPE##*/}"
- ;;
- /class/*)
- TYPE="${DEVPATH#/class/}"
- TYPE="${TYPE%%/*}"
- ;;
- /block/*)
- TYPE=block
- ;;
- *)
- exit 1
- ;;
-esac
-
-get_port_offset () {
- local type offset port
- type=$1
- offset=$2
- for i in $type[0-9]* ; do
- : i $i
- port="${i#$type}"
- if [ "$port" -lt "$offset" ] ; then offset=$port ; fi
- done
- echo $offset
-}
-
-handle_pci () {
- local DEV=$1
- cd -P $1
- DEV=${PWD}
- pci_id=${DEV##*/}
- host_dev_path=$DEV
- while [ ! -z "$host_dev_path" ] ; do
- case "$host_dev_path" in
- */pci[0-9]*)
- host_dev_path=${host_dev_path%/*}
- ;;
- *)
- break
- ;;
- esac
- done
- d="pci-$pci_id-$d"
- D="$host_dev_path"
- RESULT=0
-}
-
-handle_platform () {
- local DEV=$1
- cd -P $1
- DEV=${PWD}
- platform_id=${DEV##*/}
- host_dev_path=$DEV
- while [ ! -z "$host_dev_path" ] ; do
- case "$host_dev_path" in
- */platform*)
- host_dev_path=${host_dev_path%/*}
- ;;
- *)
- break
- ;;
- esac
- done
- if [ "$d" ]; then
- d="platform-$platform_id-$d"
- else
- d="platform-$platform_id"
- fi
- D="$host_dev_path"
- RESULT=0
-}
-
-handle_serio () {
- local DEV=$1
- cd -P $1
- DEV=${PWD}
- serio_id=${DEV##*/serio}
- host_dev_path=$DEV
- while [ ! -z "$host_dev_path" ] ; do
- case "$host_dev_path" in
- */serio*)
- host_dev_path=${host_dev_path%/*}
- ;;
- *)
- break
- ;;
- esac
- done
- if [ "$d" ]; then
- d="serio-$serio_id-$d"
- else
- d="serio-$serio_id"
- fi
- D="$host_dev_path"
- RESULT=0
-}
-
-handle_ide () {
- : handle_ide $*
- local DEV=$1
- local port idedev idecontroller
- # IDE
- : DEV $DEV
- port=${DEV##*/}
- idedev=${DEV%/*}
- idecontroller=${idedev%/*}
- # port info if the controller has more than one interface
- port="${port#ide}"
- : port $port d $d
- : idedev $idedev kernel_port $port
- case "${port#*.}" in
- 0)
- channel=0
- ;;
- 1)
- channel=1
- ;;
- *)
- echo "Error: $idedev is neither master or slave" >&2
- ;;
- esac
- cd $idecontroller
- offset="`get_port_offset ide ${port%.*}`"
- cd "$OPWD"
- : port offset $offset
- port=$((${port%.*} - $offset))
- if [ "$d" ] ; then
- d="ide-${port}:$channel-$d"
- else
- d="ide-${port}:$channel"
- fi
- D=$idecontroller
- RESULT=0
-}
-
-handle_scsi () {
- : handle_scsi $*
- local DEV=$1
- local cil controller_port controller_dev
- # SCSI device
- cil="${DEV##*/}"
- cil="${cil#*:}"
- target_dev=${DEV%/*}
- target_id=${target_dev##*/target}
- cd "$target_dev"
- target_num=0
- for tid in ${target_id}* ; do
- target_num=$(( $target_num + 1 ))
- done
- controller_port=${target_dev%/*}
- controller_dev="${controller_port%/*}"
- : controller_dev $controller_dev
- : controller_port $controller_port
- # a host controller may have more than one interface/port
- controller_port="${controller_port##*/host}"
- #
- cd "$controller_dev"
- controller_offset=$(get_port_offset host $controller_port)
- cd "$OPWD"
- controller_port=$(( $controller_port - $controller_offset))
- scsi_id="scsi-${controller_port}:${cil}"
- if [ "$d" ] ; then
- d="${scsi_id}-$d"
- else
- d="$scsi_id"
- fi
- D="$controller_dev"
- RESULT=0
-}
-
-handle_firewire () {
- : handle_firewire $*
- local DEV=$1
- if [ -f "$D/ieee1394_id" ] ; then
- read ieee1394_id < $D/ieee1394_id
- fi
- if [ -z "$ieee1394_id" ] ; then
- : no IEEE1394 ID
- RESULT=1
- return
- fi
- fw_host_dev=${DEV%/fw-host*}
- # IEEE1394 devices are always endpoints
- d="ieee1394-0x$ieee1394_id"
- D="$fw_host_dev"
- RESULT=0
-}
-
-handle_fc () {
- : handle_fc $*
- local DEV=$1
- local cil controller_port controller_dev
- # SCSI-FC device
- fc_tgt_hcil="${DEV##*/}"
- fc_tgt_lun="${fc_tgt_hcil##*:}"
- fc_tgt_path="${DEV%/*}"
- fc_tgt_num="${fc_tgt_path##*/}"
- fc_tgt_dev="${fc_tgt_path}/fc_transport:${fc_tgt_num}"
- if [ -e "$fc_tgt_dev/port_name" ]; then
- read wwpn < $fc_tgt_dev/port_name
- fi
- if [ -z "$wwpn" ] ; then
- : no WWPN
- D=
- RESULT=1
- return
- fi
- # Linux currently knows about 32bit luns
- tmp_lun3=$(printf "%04x" $(($fc_tgt_lun & 0xFFFF)))
- tmp_lun2=$(printf "%04x" $(( ($fc_tgt_lun >> 16) & 0xFFFF)))
- tmp_lun1="0000"
- tmp_lun0="0000"
- if (($fc_tgt_lun == 0)) ; then
- lun="0x0000000000000000"
- else
- lun="0x${tmp_lun3}${tmp_lun2}${tmp_lun1}${tmp_lun0}"
- fi
- controller_dev="${fc_tgt_path%/host[0-9]*}"
- # FC devices are always endpoints
- d="fc-${wwpn}:${lun}"
- D="$controller_dev"
- RESULT=0
-}
-
-handle_sas () {
- : handle_sas $*
- local DEV=$1
- local cil adapter controller_dev
- # SAS device
- sas_host_path="${DEV%%/port*}"
- sas_phy_path="${DEV#*/host*/}"
- sas_phy_path="${sas_phy_path%%/target*}"
- sas_phy_id="${sas_phy_path%%/*}"
- sas_phy_id="${sas_phy_id##*port-}"
- sas_port_id="${sas_phy_path%%/end_device*}"
- sas_port_id="${sas_port_id##*port-}"
- sas_end_id="${sas_phy_path##*end_device-}"
- sas_phy_dev="/sys/class/sas_phy/phy-${sas_phy_id}"
- if [ -e "$sas_phy_dev/sas_address" ]; then
- read phy_address < $sas_phy_dev/sas_address
- read phy_id < $sas_phy_dev/phy_identifier
- fi
- if [ -z "$phy_address" ] ; then
- : no initiator address
- D=
- RESULT=1
- return
- fi
- sas_port_dev="/sys/class/sas_port/port-${sas_port_id}"
- if [ -e "$sas_port_dev/num_phys" ] ; then
- read phy_port < $sas_port_dev/num_phys
- fi
- if [ -z "$phy_port" ] ; then
- : no initiator address
- D=
- RESULT=1
- return
- fi
- sas_phy_address="$phy_address:$phy_port:$phy_id"
- sas_end_dev="/sys/class/sas_device/end_device-${sas_end_id}"
- if [ -e "$sas_end_dev/sas_address" ]; then
- read end_address < $sas_end_dev/sas_address
- read end_id < $sas_end_dev/phy_identifier
- fi
- if [ -z "$end_address" ] ; then
- : no initiator address
- D=
- RESULT=1
- return
- fi
- sas_end_address="$end_address:$end_id"
- controller_dev="${sas_host_path%/host[0-9]*}"
- # SAS devices are always endpoints
- d="sas-${sas_phy_address}-${sas_end_address}"
- D="$controller_dev"
- RESULT=0
-}
-
-handle_iscsi() {
- local DEV=$1
- local iscsi_session_dir
- local iscsi_session iscsi_session_path
- local iscsi_connection iscsi_connection_path
- local iscsi_scsi_lun
- # iSCSI device
- iscsi_session_dir="${DEV%%/target*}"
- iscsi_session="${iscsi_session_dir##*/}"
- iscsi_session_path=/sys/class/iscsi_session/${iscsi_session}
- if [ ! -d "$iscsi_session_path" ] ; then
- : no iSCSI session path
- RESULT=1
- return
- fi
- # Currently we're not doing MC/S
- for conn in ${iscsi_session_dir}/connection* ; do
- iscsi_conn_num=${conn##*:}
- if [ "$iscsi_conn_num" = '0' ] ; then
- iscsi_connection=$(basename $conn)
- fi
- done
- if [ -z "$iscsi_connection" ] ; then
- : no iSCSI connection found
- RESULT=1
- return
- fi
- iscsi_connection_path=/sys/class/iscsi_connection/${iscsi_connection}
- if [ ! -d "$iscsi_connection_path" ] ; then
- : no iSCSI connection path
- RESULT=1
- return
- fi
- if [ -e "${iscsi_session_path}/targetname" ]; then
- read iscsi_tgtname < ${iscsi_session_path}/targetname
- fi
- if [ -z "$iscsi_tgtname" ] ; then
- : No iSCSI Targetname
- RESULT=1
- return
- fi
- if [ -e "${iscsi_connection_path}/persistent_address" ] ; then
- read iscsi_address < ${iscsi_connection_path}/persistent_address
- fi
- if [ -z "$iscsi_address" ] ; then
- : No iSCSI Target address
- RESULT=1
- return
- fi
- if [ -e "${iscsi_connection_path}/persistent_port" ] ; then
- read iscsi_port < ${iscsi_connection_path}/persistent_port
- fi
- iscsi_scsi_lun="${DEV##*:}"
- d="ip-${iscsi_address}:${iscsi_port}-iscsi-${iscsi_tgtname}-lun-${iscsi_scsi_lun}"
- RESULT=0
-}
-
-handle_usb () {
-: handle_usb $*
- local DEV=$1
- cd -P $1
- DEV=${PWD}
- port_id=${DEV##*/}
- port_num=${port_id#*-}
- host_dev_path=$DEV
- while [ ! -z "$host_dev_path" ] ; do
- case "$host_dev_path" in
- */usb*)
- usb_host_path=$host_dev_path
- host_dev_path="${host_dev_path%/*}"
- ;;
- *)
- break
- ;;
- esac
- done
- : host_dev_path $host_dev_path
- usb_host_num=${usb_host_path##*/usb}
-
- cd "$host_dev_path"
- usb_host_offset=$(get_port_offset usb $usb_host_num)
- usb_host_port=$(($usb_host_num - $usb_host_offset))
- cd "$OPWD"
- if [ "$d" ] ; then
- d="usb-$usb_host_port:$port_num-${d}"
- else
- d="usb-$usb_host_port:$port_num"
- fi
- D="$host_dev_path"
- RESULT=0
-}
-
-handle_device () {
- full_sysfs_path="$SYSFS$DEVPATH"
- case "$DEVPATH" in
- /devices/*)
- # new sysfs layout
- if [ -L $full_sysfs_path/subsystem ]; then
- full_sysfs_path="${full_sysfs_path%/*}"
- cd "$full_sysfs_path/subsystem";
- subsys="`pwd -P`"
- cd "$OPWD"
- subsys="${subsys##*/}"
- if [ "$subsys" = "block" ]; then
- # parent is "block", it's a partition, move one up
- full_sysfs_path="${full_sysfs_path%/*}"
- fi
- cd $full_sysfs_path
- fi
- ;;
- *)
- # old sysfs layout
- if [ ! -L $full_sysfs_path/device ] ; then
- if [ -f $full_sysfs_path/range ] ; then return ; fi
- full_sysfs_path="${full_sysfs_path%/*}"
- : full_sysfs_path "$full_sysfs_path"
- if [ ! -L $full_sysfs_path/device -o ! -f $full_sysfs_path/dev ] ; then
- return
- fi
- fi
- cd $full_sysfs_path/device
- ;;
- esac
- full_sysfs_device_path="`pwd -P`"
- cd "$OPWD"
- D=$full_sysfs_device_path
- while [ ! -z "$D" ] ; do
- case "$D" in
- */ide[0-9]/[0-9].[0-9]*|*/ide[0-9][0-9]/[0-9][0-9].[0-9]*)
- handle_ide "$D"
- ;;
- */css0/*)
- if [ -r $full_sysfs_device_path/wwpn ]; then
- read wwpn < $full_sysfs_device_path/wwpn
- fi
- if [ -r $full_sysfs_device_path/fcp_lun ]; then
- read lun < $full_sysfs_device_path/fcp_lun
- fi
- if [ -r $full_sysfs_device_path/hba_id ]; then
- read bus_id < $full_sysfs_device_path/hba_id
- fi
- if [ "$bus_id" -a "$wwpn" -a "$lun" ]; then
- # S/390 zfcp adapter
- d="ccw-$bus_id-zfcp-$wwpn:$lun"
- RESULT=0
- else
- # DASD devices
- bus="ccw"
- adapter=${D##*/}
- d="$bus-$adapter"
- RESULT=0
- fi
- D=
- ;;
- */rport-[0-9]*:[0-9]*-[0-9]*/*)
- handle_fc "$D"
- ;;
- */end_device-[0-9]*:[0-9]*:[0-9]*/*)
- handle_sas "$D"
- ;;
- */fw-host[0-9]*/*)
- handle_firewire "$D"
- ;;
- */session[0-9]*/*)
- handle_iscsi "$D"
- D=
- ;;
- */host[0-9]*/[0-9]*:[0-9]*:[0-9]*:[0-9]*)
- handle_scsi "$D"
- ;;
- */usb[0-9]*/[0-9]*/*)
- handle_usb "$D"
- ;;
- */pci[0-9]*:[0-9]*)
- handle_pci "$D"
- ;;
- */serio[0-9]*)
- handle_serio "$D"
- ;;
- */platform/*)
- handle_platform "$D"
- ;;
- */devices)
- D=
- ;;
- *)
- : not handled
- RESULT=1
- return
- ;;
- esac
- done
- if [ "$TYPE" = "scsi_tape" ] ; then
- devname=${full_sysfs_path##*/}
- rewind="${devname%%st*}"
- mode="${devname##*st}"
- case "$mode" in
- *l)
- mode="l"
- ;;
- *m)
- mode="m"
- ;;
- *a)
- mode="a"
- ;;
- *)
- mode=""
- ;;
- esac
- if [ "$d" ]; then
- d="$d-${rewind}st${mode}"
- fi
- fi
-}
-
-case "$TYPE" in
- block)
- handle_device
- echo "ID_PATH=$d"
- ;;
- scsi_tape)
- handle_device
- echo "ID_PATH=$d"
- ;;
- input)
- handle_device
- echo "ID_PATH=$d"
- ;;
- *)
- RESULT=1
- ;;
-esac
-
-exit $RESULT
Binary files old/lib/udev/scsi_id and new/lib/udev/scsi_id differ
Binary files old/lib/udev/usb_id and new/lib/udev/usb_id differ
Binary files old/lib/udev/vol_id and new/lib/udev/vol_id differ
diff -Nur old/scripts/init-premount/ps3 new/scripts/init-premount/ps3
--- old/scripts/init-premount/ps3 2007-06-24 13:07:47.000000000 +0200
+++ new/scripts/init-premount/ps3 2007-06-24 13:07:56.000000000 +0200
@@ -18,7 +18,7 @@
case "$DPKG_ARCH" in
powerpc|ppc64)
while read line; do
- if [ "${line}" =! "${line#machine*PS3PF}" ]; then
+ if [ "${line}" != "${line#machine*PS3PF}" ]; then
# For PS3's we know these devices will exist,
# and that we'll need them
modprobe ps3_storage
diff -Nur old/scripts/local new/scripts/local
--- old/scripts/local 2007-06-24 13:07:47.000000000 +0200
+++ new/scripts/local 2007-06-24 13:07:56.000000000 +0200
@@ -1,5 +1,29 @@
# Local filesystem mounting -*- shell-script -*-
+# Parameter: device node to check
+# Echos fstype to stdout
+# Return value: indicates if an fs could be recognized
+get_fstype ()
+{
+ local FS FSTYPE FSSIZE RET
+ FS="${1}"
+
+ # vol_id has a more complete list of file systems
+ if [ -x /lib/udev/vol_id ]; then
+ FSTYPE=$(/lib/udev/vol_id -t "${FS}" 2> /dev/null)
+ else
+ eval $(fstype < "${FS}" 2> /dev/null)
+ fi
+ RET=$?
+
+ if [ -z "${FSTYPE}" ]; then
+ FSTYPE="unknown"
+ fi
+
+ echo "${FSTYPE}"
+ return ${RET}
+}
+
# Parameter: Where to mount the filesystem
mountroot ()
{
@@ -9,7 +33,7 @@
# If the root device hasn't shown up yet, give it a little while
# to deal with removable devices
- if [ ! -e "${ROOT}" ]; then
+ if [ ! -e "${ROOT}" ] || ! $(get_fstype "${ROOT}" >/dev/null); then
log_begin_msg "Waiting for root file system..."
# Default delay is 180s
@@ -23,9 +47,11 @@
fi
slumber=$(( ${slumber} * 10 ))
- while [ ${slumber} -gt 0 ] && [ ! -e "${ROOT}" ]; do
+ while [ ! -e "${ROOT}" ] \
+ || ! $(get_fstype "${ROOT}" >/dev/null); do
/bin/sleep 0.1
slumber=$(( ${slumber} - 1 ))
+ [ ${slumber} -gt 0 ] || break
done
if [ ${slumber} -gt 0 ]; then
@@ -47,14 +73,10 @@
# Get the root filesystem type if not set
if [ -z "${ROOTFSTYPE}" ]; then
- eval $(fstype < ${ROOT})
+ FSTYPE=$(get_fstype "${ROOT}")
else
FSTYPE=${ROOTFSTYPE}
fi
- if [ "$FSTYPE" = "unknown" ] && [ -x /lib/udev/vol_id ]; then
- FSTYPE=$(/lib/udev/vol_id -t ${ROOT})
- [ -z "$FSTYPE" ] && FSTYPE="unknown"
- fi
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount"
run_scripts /scripts/local-premount
diff -Nur old/scripts/nfs new/scripts/nfs
--- old/scripts/nfs 2007-06-24 13:07:47.000000000 +0200
+++ new/scripts/nfs 2007-06-24 13:07:56.000000000 +0200
@@ -41,7 +41,13 @@
# get nfs root from dhcp
if [ "x${NFSROOT}" = "xauto" ]; then
- NFSROOT=${ROOTSERVER}:${ROOTPATH}
+ # check if server ip is part of dhcp root-path
+ if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
+ NFSROOT=${ROOTSERVER}:${ROOTPATH}
+ else
+ NFSROOT=${ROOTPATH}
+ fi
+
# nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
elif [ -n "${NFSROOT}" ]; then
# nfs options are an optional arg
Reply to: