Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: freeze-exception
Please unblock package yaboot I sponsored an uploaded of yaboot to testing-proposed-updates with the following changes to fix RC bugs: yaboot (1.3.13a-1squeeze1) testing-proposed-updates; urgency=low . * Team upload. * Get scsi, sata, and firewire drive info from sysfs as legacy /proc/scsi interface does not exist anymore. (Closes: #572869, #377097, #342833, #289201) * Use persistent device naming symlinks, UUID and LABEL tags instead of unix block device names. (Closes: #580455) * debian/copyright: Add copyright notice from ofpath. The package has to go thourgh t-p-u because there is a newer upstream version already uploaded to sid. As nowbody answered to my pre approval request to debian-release[1]. I guessed this is the right way to do it. A debdiff to the current version in squeeze is attached. Gaudenz [1] http://lists.debian.org/debian-release/2010/12/msg00210.html unblock yaboot/1.3.13a-1squeeze1 -- System Information: Debian Release: squeeze/sid APT prefers testing APT policy: (500, 'testing') Architecture: powerpc (ppc) Kernel: Linux 2.6.32-5-powerpc
diff -u yaboot-1.3.13a/debian/control yaboot-1.3.13a/debian/control --- yaboot-1.3.13a/debian/control +++ yaboot-1.3.13a/debian/control @@ -2,7 +2,7 @@ Section: admin Priority: important Maintainer: Debootloaders Yaboot Maintainers Team <debootloaders-yab...@lists.alioth.debian.org> -Uploaders: Sven Luther <lut...@debian.org>, Aurélien GÉRÔME <a...@roxor.cx> +Uploaders: Sven Luther <lut...@debian.org>, Aurélien GÉRÔME <a...@roxor.cx>, Milan Kupcevic <mi...@physics.harvard.edu> Build-Depends: debhelper (>= 4), e2fslibs-dev (>= 1.27) Standards-Version: 3.7.2 diff -u yaboot-1.3.13a/debian/changelog yaboot-1.3.13a/debian/changelog --- yaboot-1.3.13a/debian/changelog +++ yaboot-1.3.13a/debian/changelog @@ -1,3 +1,15 @@ +yaboot (1.3.13a-1squeeze1) testing-proposed-updates; urgency=low + + * Team upload. + * Get scsi, sata, and firewire drive info from sysfs as legacy /proc/scsi + interface does not exist anymore. + (Closes: #572869, #377097, #342833, #289201) + * Use persistent device naming symlinks, UUID and LABEL tags instead of + unix block device names. (Closes: #580455) + * debian/copyright: Add copyright notice from ofpath. + + -- Milan Kupcevic <mi...@physics.harvard.edu> Sun, 05 Dec 2010 10:34:50 -0500 + yaboot (1.3.13a-1) unstable; urgency=high * Convert debian/control from ISO_8859-15 to UTF-8. diff -u yaboot-1.3.13a/debian/copyright yaboot-1.3.13a/debian/copyright --- yaboot-1.3.13a/debian/copyright +++ yaboot-1.3.13a/debian/copyright @@ -33,6 +33,11 @@ ### +## ofpath: determine OpenFirmware path from unix device node +## Copyright (C) 2010 Milan Kupcevic +## Copyright (C) 2000, 2001, 2002, 2003 Ethan Benson +## Copyright (C) 2000 Olaf Hering <o...@suse.de> + ## ybin (YaBoot INstaller) installs/updates the yaboot bootloader. ## Copyright (C) 2000, 2001 Ethan Benson diff -u yaboot-1.3.13a/ybin/ofpath yaboot-1.3.13a/ybin/ofpath --- yaboot-1.3.13a/ybin/ofpath +++ yaboot-1.3.13a/ybin/ofpath @@ -3,6 +3,9 @@ ############################################################################### ## ## ofpath: determine OpenFirmware path from unix device node +## +## Copyright (C) 2010 Milan Kupcevic +## ## Copyright (C) 2000, 2001, 2002, 2003 Ethan Benson ## ## Portions based on show_of_path.sh: @@ -27,7 +30,7 @@ PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" PRG="${0##*/}" -VERSION=1.0.7 +VERSION=1.0.7+debian1 DEBUG=0 export LC_COLLATE=C @@ -36,9 +39,10 @@ { echo \ "$PRG $VERSION -Written by Ethan Benson +Written by Ethan Benson, portions rewritten by Milan Kupcevic Portions based on show_of_path.sh written by Olaf Hering +Copyright (C) 2010 Milan Kupcevic Copyright (C) 2000, 2001, 2002, 2003 Ethan Benson Portions Copyright (C) 2000 Olaf Hering This is free software; see the source for copying conditions. There is NO @@ -181,140 +185,124 @@ return 0 } +# read OpenFirmware device path from its corresponding devspec +find_of_path() +{ + [ -z "$1" ] && return + [ -f "$1/devspec" ] && { + OF_PATH="`cat $1/devspec`" + SYS_PATH="$1" + return + } + find_of_path "${1%/*}" +} + ## this finds information we need on both newworld and oldworld macs. ## mainly what scsi host a disk is attached to. scsiinfo() { - ## see if system has scsi at all - if [ ! -f /proc/scsi/scsi ] ; then - local kver="$(uname -r)" - case "$kver" in - 2.5.*|2.6.*) - if [ -d /sys/bus/scsi/devices -a \ - -n "$(ls /sys/bus/scsi/devices 2>/dev/null)" ] ; then - echo 1>&2 "$PRG: /proc/scsi/scsi does not exist" - echo 1>&2 "$PRG: Make sure you compiled your kernel with CONFIG_SCSI_PROC_FS=y" - return 1 - fi - ;; - esac - echo 1>&2 "$PRG: /dev/$DEVNODE: Device not configured" - return 1 - fi - - ## first we have to figure out the SCSI ID, have to do that - ## anyway [to] find the attached scsi disks = "Direct-Access" and - ## stop at sda=1 sdb=2 or whatever count in 3 lines steps - - ## get last letter of device node, ie sda -> a - SUBNODE=${DEVNODE##*sd} - - ## turn SUBNODE above into a number starting at 1, ie a -> 1 - SUBDEV="$(smalltr $SUBNODE)" - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: SUBNODE=$SUBNODE SUBDEV=$SUBDEV" - - DEVCOUNT=0 - - ## copy scsi file into a variable removing "Attached Devices" - ## which is the first line. this avoids a lot of - ## [incmopatible] crap later, and improves readability. - - ## find number of lines once and recycle that number, to save - ## some time (linecount is a bit slow). subtract one line - ## to scrap Attached Devices: - - SCSILINES="$(($(linecount /proc/scsi/scsi) - 1))" - - if [ "$SUBDEV" -gt "$(cat /proc/scsi/scsi | grep Direct-Access | linecount)" ] ; then - echo 1>&2 "$PRG: /dev/$DEVNODE: Device not configured" - return 1 - fi - - PROCSCSI="$(cat /proc/scsi/scsi | tail -n $SCSILINES)" - - for i in $(smallseq $(($SCSILINES / 3))) ; do - - ## put every scsi device into one single line - DEVINFO="$(echo "$PROCSCSI" | head -n $(($i * 3)) | tail -n 3)" - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVINFO=$DEVINFO" - - ## cut the type field, expect "Direct-Access" later. - DEVTYPE="$(v=$(echo ${DEVINFO##*Type: }) ; echo ${v%% *})" - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVTYPE=$DEVTYPE" - - ## get the device id. - DEVID="$(v=$(echo ${DEVINFO##*Id: }) ; n=$(echo ${v%% *}) ; echo ${n#*0})" - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVID=$DEVID" - - ## get the scsi host id. - DEVHOST="$(v=$(echo ${DEVINFO##*Host: scsi}) ; echo ${v%% *})" - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVHOST=$DEVHOST" - - if [ "$DEVTYPE" = "Direct-Access" ] ; then - DEVCOUNT="$(($DEVCOUNT + 1))" - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVCOUNT=$DEVCOUNT" - if [ "$SUBDEV" = "$DEVCOUNT" ] ; then - DEVICE_HOST=$DEVHOST - DEVICE_ID=$DEVID - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVICE_HOST=$DEVICE_HOST" - break - fi - fi - done - - ## figure out what the scsi driver is, it is /proc/scsi/dirname. - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVICE_HOST=$DEVICE_HOST" - SCSI_DRIVER="$(x=`ls /proc/scsi/*/$DEVICE_HOST 2>/dev/null | cat` ; y=`echo ${x##*proc/scsi/}` ; echo ${y%%/*})" - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: SCSI_DRIVER=$SCSI_DRIVER" - - ## figure out which host we found. - SCSI_HOSTNUMBER="$(v=`ls /proc/scsi/$SCSI_DRIVER/* 2>/dev/null | cat | grep -n "$DEVICE_HOST\>"` ; echo ${v%%:*})" - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: SCSI_HOSTNUMBER=$SCSI_HOSTNUMBER" + + SYS_DEVICE="`readlink -f /sys/block/$DEVNODE/device`" + + [ -e "$SYS_DEVICE" ] && { + + SCSI_DEVICE=${SYS_DEVICE##*/} + HOST_ID=${SCSI_DEVICE%%:*} + BUS_ID=`T=${SCSI_DEVICE#*:}; echo ${T%%:*}` + DEVICE_ID=`T=${SCSI_DEVICE#*:*:}; echo ${T%%:*}` + LUN_ID=${SCSI_DEVICE##*:} + + OF_PATH=;find_of_path "$SYS_DEVICE" + + SCSI_DRIVER=`cat /sys/class/scsi_host/host$HOST_ID/proc_name 2>/dev/null` + + SCSI_NAME=`cat /proc/device-tree$OF_PATH/name 2>/dev/null` + + IEEE1394_ID=`cat /sys/block/$DEVNODE/device/ieee1394_id 2>/dev/null` + IEEE1394_ID=${IEEE1394_ID%%:*} + + PLUG_ID=$(ls -dv $SYS_PATH/host* 2>/dev/null | grep -n "/host$HOST_ID$") + PLUG_ID=$((${PLUG_ID%%:*}-1)) + + PART=${PARTITION:+:$PARTITION} + + [ "$LUN_ID" != "0" ] && LUNX=`printf ",%x" $LUN_ID` + + [ "$DEBUG" = "1" ] && { + echo SYS_DEVICE=$SYS_DEVICE + echo SCSI_DEVICE=$SCSI_DEVICE + echo HOST_ID=$HOST_ID + echo BUS_ID=$BUS_ID + echo DEVICE_ID=$DEVICE_ID + echo LUN_ID=$LUN_ID + echo PLUG_ID=$PLUG_ID + echo IEEE1394_ID=$IEEE1394_ID + echo SCSI_NAME=$SCSI_NAME + echo SCSI_DRIVER=$SCSI_DRIVER + echo SYS_PATH=$SYS_PATH + echo OF_PATH=$OF_PATH + echo PART=$PART + echo LUNX=$LUNX + } + + SCSI_DRIVER=${SCSI_DRIVER:?} + + [ -z "$OF_PATH" ] && { + echo 1>&2 "Cannot find $DEVNODE among OpenFirmware registered devices" + + exit 1 + } return 0 + } + + echo 1>&2 "Link /sys/block/$DEVNODE/device does not exist" + + exit 1 } -## generic function that can find OF device paths for scsi devices, +## add OF device node to the host OF path, ## must be run after scsiinfo(). scsi_ofpath() { - case "$SCSI_DRIVER" in - aic7xxx) - HOST_LIST="$(for i in `find /proc/device-tree -name compatible` ; do - lgrep "$i" "^ADPT" "^pci900[45]" "^pciclass,01000" ; done)" - DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)" - echo "${DEVICE_PATH##*device-tree}/@$DEVICE_ID:$PARTITION" - ;; - sym53c8xx) - HOST_LIST="$(for i in `find /proc/device-tree -name compatible` ; do - lgrep "$i" "^Symbios" "^pci1000" "^pciclass,01000" ; done)" - DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)" - echo "${DEVICE_PATH##*device-tree}/@$DEVICE_ID:$PARTITION" - ;; - mesh) - HOST_LIST="$(for i in `find /proc/device-tree -name compatible` ; do - lgrep "$i" "mesh" ; done)" - DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)" - echo "${DEVICE_PATH##*device-tree}/@$DEVICE_ID:$PARTITION" - ;; - ata_k2|sata_svw) - HOST_LIST="$(for i in `find /proc/device-tree -name compatible ` ; do - lgrep "$i" "k2-sata" ; done | sort)" - DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)" - echo "${DEVICE_PATH##*device-tree}/d...@0:$PARTITION" - ;; - sbp2) - HOST_LIST="$(for i in `find /proc/device-tree -name name` ; do - lgrep "$i" "sbp-2" ; done)" - DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)" - echo "${DEVICE_PATH##*device-tree}/d...@0:$PARTITION" - ;; - *) - echo 1>&2 "$PRG: Driver: $SCSI_DRIVER is not supported" - return 1 - ;; + + if [ -d "/proc/device-tree$OF_PATH/sas" ] ; then + + SAS_ID=$(( ($BUS_ID << 16) | ($DEVICE_ID << 8) | $LUN_ID)) + printf "%s/sas/d...@%x%s\n" $OF_PATH $SAS_ID $LUNX$PART + + elif [ -d "/proc/device-tree$OF_PATH/s...@`printf %x $BUS_ID`" ] ; then + + printf "%s/s...@%x/@%x%s\n" $OF_PATH $BUS_ID $DEVICE_ID $LUNX$PART + + else + + case "$SCSI_DRIVER-$SCSI_NAME" in + aic7xxx-*|sym53c8xx-*|mesh-*|*-scsi) + printf "%s/@%x%s\n" $OF_PATH $DEVICE_ID $LUNX$PART + ;; + sata_sil-*|sata_vsc-*) + printf "%s/@%x%s\n" $OF_PATH $(($PLUG_ID * 2)) $PART + ;; + sata_svw-*|*-pci-ata) + printf "%s/@%x/@%x%s\n" $OF_PATH $PLUG_ID $DEVICE_ID $PART + ;; + sbp2-*) + IEEE1394_ID=${IEEE1394_ID:?} + printf "%s/n...@%s/sbp-2/@%x%s\n" $OF_PATH $IEEE1394_ID $DEVICE_ID $PART + ;; + ipr-obsidian) + printf "%s/@%x,%x%s\n" $OF_PATH $BUS_ID $DEVICE_ID $LUNX$PART + ;; + *) + echo 1>&2 "${PRG}: ${SCSI_NAME} (${SCSI_DRIVER}) is not supported" + return 1 + ;; esac - return 0 + + fi + + return 0 } ide_ofpath() @@ -414,11 +402,11 @@ case "$DEVNODE" in hda|hdc|hde|hdg|hdi|hdk|hdm|hdo) - echo "${DEVSPEC}${MASTER}:$PARTITION" + echo "${DEVSPEC}${MASTER}${PARTITION:+:${PARTITION}}" return 0 ;; hdb|hdd|hdf|hdh|hdj|hdl|hdn|hdp) - echo "${DEVSPEC}${SLAVE}:$PARTITION" + echo "${DEVSPEC}${SLAVE}${PARTITION:+:${PARTITION}}" return 0 ;; *) @@ -669,12 +657,6 @@ { case "$DEVNODE" in sd*) - if ls -l /proc/device-tree | grep -q ^lr ; then - true - else - echo 1>&2 "$PRG: /proc/device-tree is broken." - return 1 - fi ## use common scsiinfo function to get info we need. scsiinfo || return 1 only in patch2: unchanged: --- yaboot-1.3.13a.orig/ybin/ybin +++ yaboot-1.3.13a/ybin/ybin @@ -1589,6 +1589,13 @@ exit 1 fi +## also accept symlink names in quotes or with escaped characters +boot="`readlink -f \"$(eval echo ${boot})\"`" +bsd="`readlink -f \"$(eval echo ${bsd})\"`" +macos="`readlink -f \"$(eval echo ${macos})\"`" +macosx="`readlink -f \"$(eval echo ${macosx})\"`" +darwin="`readlink -f \"$(eval echo ${darwin})\"`" + ## if there is still no config file use the automatic generation to make a ## generic yaboot.conf. do this before the confcheck to avoid wierd errors. if [ "$bootconf" = /dev/null ] ; then only in patch2: unchanged: --- yaboot-1.3.13a.orig/ybin/yabootconfig +++ yaboot-1.3.13a/ybin/yabootconfig @@ -27,7 +27,7 @@ PATH="${PATH}:${PATH_PREFIX}/sbin:${PATH_PREFIX}/bin:${PATH_PREFIX}/usr/sbin:${PATH_PREFIX}/usr/bin:${PATH_PREFIX}/usr/local/sbin:${PATH_PREFIX}/usr/local/bin" fi PRG="${0##*/}" -VERSION=1.0.8 +VERSION=1.0.8+debian1 CHROOT=/ ## $CONFIG is relative to $CHROOT CONFIG=etc/yaboot.conf @@ -720,6 +720,27 @@ INITRDIMGS="\tinitrd=$INITRDIMG\n\tinitrd-size=8192\n" fi +## Get a symlink which always points to the correct block device. +## If it does not exist, give the unix block device name back. +devsymlink() { + [ "$2" != "nobyid" ] && BYID="/dev/disk/by-id/scsi* /dev/disk/by-id/*" + for SYMLINK in $BYID /dev/disk/by-uuid/* /dev/disk/by-label/*; do + [ "`readlink -f "$SYMLINK"`" = "$1" ] && { + echo $SYMLINK + return + } + done + echo $1 +} + +## Get UUID= or LABEL= for the given unix partition block device. +## If it could not be determined, give the unix partition block device back. +uuidlabel() { + echo `devsymlink "$1" nobyid` \ + | sed -e "s,/dev/disk/by-uuid/,UUID=," \ + -e "s,/dev/disk/by-label/,LABEL=," +} + ## generate global section of yaboot.conf GLOBAL="## yaboot.conf generated by $PRG $VERSION ## @@ -727,9 +748,9 @@ ${HEADER}## ## For a dual-boot menu, add one or more of: ## bsd=/dev/hdaX, macos=/dev/hdaY, macosx=/dev/hdaZ\n -boot=${BOOT}${DEVICE:-} +boot=\"`devsymlink "${BOOT}"`\"${DEVICE:-} partition=$PARTITION -root=$ROOT +root=\"`uuidlabel "${ROOT}"`\" timeout=30 install=${INSTALL}${OFBOOT:-}\n"