Date: 9 Jun 2000 22:08:07 -0000 From: patrick@mindstep.com To: freefall-gnats@mindstep.com Subject: kern/19156: Enable the doFS.sh to run in arbitrary locations Message-ID: <20000609220807.70887.qmail@nitro.local.mindstep.com>
next in thread | raw e-mail | index | archive | help
>Number: 19156 >Category: kern >Synopsis: Enable the doFS.sh to run in arbitrary locations >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Fri Jun 09 15:10:00 PDT 2000 >Closed-Date: >Last-Modified: >Originator: Patrick Bihan-Faou >Release: FreeBSD 4.0-STABLE i386 >Organization: MindStep Corporation >Environment: Source code for RELENG_4 as of June 5, 2000 >Description: The doFS.sh script in /usr/src/release/scripts can only work in a chrooted environment because it references /dev directly to access the vnode device being built. This makes it difficult to use the script outside the scope of a make from the /usr/src/release directory (which runs it in a chroot'd dir). Also the mount point has to be specified as an absolute path. >How-To-Repeat: n/a >Fix: The following patch transform the path for the mount point to a absolute path and gets the location of the device directory to use from the command line (following the mount path argument). The device path is also canonicalized to an absolute path. If needed the script will also create the devices and mount directories. If the directories were created by doFS.sh, they will be removed after the script is done. The /usr/src/release/Makefile is updated to provide the location of the devices directory to the doFS.sh script. --- Makefile.orig Fri Jun 9 16:48:26 2000 +++ Makefile Fri Jun 9 16:49:15 2000 @@ -510,11 +510,11 @@ tar xf - -C ${RD}/mfsfd/stand @echo "Compressing doc files..." @gzip -9 ${RD}/mfsfd/stand/help/*.hlp - sh -e ${.CURDIR}/scripts/doFS.sh -s mfsroot ${RD} ${MNT} \ + sh -e ${.CURDIR}/scripts/doFS.sh -s mfsroot ${RD} ${MNT} /dev \ ${MFSSIZE} ${RD}/mfsfd ${MFSINODE} ${MFSLABEL} @gzip -9vc mfsroot > mfsroot.gz @sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/mfsroot.flp \ - ${RD} ${MNT} ${BOOTSIZE} mfsroot.gz ${BOOTINODE} ${BOOTLABEL} + ${RD} ${MNT} /dev ${BOOTSIZE} mfsroot.gz ${BOOTINODE} ${BOOTLABEL} @cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=kern @cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=boot BIGBOOT=YES @rm mfsroot mfsroot.gz mfsroot.size @@ -546,7 +546,7 @@ @cp ${.CURDIR}/scripts/tar.sh ${RD}/fixitfd/stand/tar @chmod 555 ${RD}/fixitfd/stand/tar @sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/fixit.flp ${RD} \ - ${MNT} ${FIXITSIZE} ${RD}/fixitfd ${FIXITINODE} ${FIXITLABEL} + ${MNT} /dev ${FIXITSIZE} ${RD}/fixitfd ${FIXITINODE} ${FIXITLABEL} # Do our last minute floppies directory setup in a convenient place. @cp ${.CURDIR}/texts/FLOPPIES.TXT ${RD}/floppies/README.TXT @(cd ${RD}/floppies; md5 README.TXT *.flp > CHECKSUM.MD5) @@ -777,11 +777,11 @@ @rm -f ${RD}/floppies/${FSIMAGE}.flp .if defined(BIGBOOT) sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/${FSIMAGE}.flp \ - ${RD} ${MNT} ${BIGBOOTSIZE} ${RD}/image.${FSIMAGE} \ + ${RD} ${MNT} /dev ${BIGBOOTSIZE} ${RD}/image.${FSIMAGE} \ ${BOOTINODE} ${BIGBOOTLABEL} .else sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/${FSIMAGE}.flp \ - ${RD} ${MNT} ${BOOTSIZE} ${RD}/image.${FSIMAGE} \ + ${RD} ${MNT} /dev ${BOOTSIZE} ${RD}/image.${FSIMAGE} \ ${BOOTINODE} ${BOOTLABEL} .endif @echo "Created ${RD}/floppies/${FSIMAGE}.flp" --- scripts/doFS.sh.orig Thu Jun 8 22:23:34 2000 +++ scripts/doFS.sh Fri Jun 9 16:46:56 2000 @@ -15,41 +15,63 @@ FSIMG=$1; shift RD=$1 ; shift MNT=$1 ; shift +DEV=$1 ; shift FSSIZE=$1 ; shift FSPROTO=$1 ; shift FSINODE=$1 ; shift FSLABEL=$1 ; shift deadlock=20 +created_mnt=0 +created_dev=0 + +[ -d ${MNT} ] || +{ + mkdir -p ${MNT} || { echo "unable to create ${MNT} directory"; exit 1; } + created_mnt=1 +} +CUR=`pwd` +cd ${MNT} +MNT=`pwd` +cd ${CUR} + +[ -d ${DEV} ] || +{ + mkdir -p ${DEV} || { echo "unable to create ${DEV} directory"; exit 1; } + created_dev=1 +} +cd ${DEV} +DEV=`pwd` +cd ${CUR} u=`expr $VNDEVICE : 'vn\([0-9]*\)' || true` -rm -f /dev/*vnn* -mknod /dev/vnn${u} b 15 `expr 65538 + $u '*' 8` -mknod /dev/rvnn${u} c 43 `expr 65538 + $u '*' 8` -mknod /dev/vnn${u}c b 15 `expr 2 + $u '*' 8` -mknod /dev/rvnn${u}c c 43 `expr 2 + $u '*' 8` +rm -f ${DEV}/*vnn* +mknod ${DEV}/vnn${u} b 15 `expr 65538 + $u '*' 8` +mknod ${DEV}/rvnn${u} c 43 `expr 65538 + $u '*' 8` +mknod ${DEV}/vnn${u}c b 15 `expr 2 + $u '*' 8` +mknod ${DEV}/rvnn${u}c c 43 `expr 2 + $u '*' 8` VNDEVICE=vnn$u while true do rm -f ${FSIMG} - umount /dev/${VNDEVICE} 2>/dev/null || true + umount ${DEV}/${VNDEVICE} 2>/dev/null || true umount ${MNT} 2>/dev/null || true - vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true + vnconfig -u ${DEV}/r${VNDEVICE} 2>/dev/null || true dd of=${FSIMG} if=/dev/zero count=${FSSIZE} bs=1k 2>/dev/null # this suppresses the `invalid primary partition table: no magic' awk 'BEGIN {printf "%c%c", 85, 170}' |\ dd of=${FSIMG} obs=1 seek=510 conv=notrunc 2>/dev/null - vnconfig -s labels -c /dev/r${VNDEVICE} ${FSIMG} - disklabel -Brw /dev/r${VNDEVICE} ${FSLABEL} - newfs -i ${FSINODE} -T ${FSLABEL} -o space /dev/r${VNDEVICE}c + vnconfig -s labels -c ${DEV}/r${VNDEVICE} ${FSIMG} + disklabel -Brw ${DEV}/r${VNDEVICE} ${FSLABEL} + newfs -i ${FSINODE} -T ${FSLABEL} -o space ${DEV}/r${VNDEVICE}c - mount /dev/${VNDEVICE}c ${MNT} + mount ${DEV}/${VNDEVICE}c ${MNT} if [ -d ${FSPROTO} ]; then (set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT}) @@ -62,7 +84,7 @@ set `df -ki ${MNT} | tail -1` umount ${MNT} - vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true + vnconfig -u ${DEV}/r${VNDEVICE} 2>/dev/null || true echo ">>> Filesystem is ${FSSIZE} K, $4 left" echo ">>> ${FSINODE} bytes/inode, $7 left" @@ -71,4 +93,8 @@ fi break; done -rm -f /dev/*vnn* +rm -f ${DEV}/*vnn* + +[ ${created_mnt} -eq 0 ] || { rmdir ${MNT}; } +[ ${created_dev} -eq 0 ] || { rmdir ${DEV}; } + >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000609220807.70887.qmail>