Remove udev dependency when running in-tree

After much contemplation I can't see a clean way to use udev entirely
in-tree for testing.  This patch removed a horrible horrible hack which
would copy the needed udev bits in to place on your system to make it
work.  That however is simply not acceptable, nothing you in in-tree
should ever ever ever install something on your system.

Since I could not come up with a clean way to use udev in-tree.  The
fix is to simply parse the zdev config file and create the needed
symlinks in a sub-diretory or your working tree.  This is not as clean
as using udev but it does work perfectly well for in-tree testing.
This commit is contained in:
Brian Behlendorf 2010-03-11 13:56:20 -08:00
parent fddf5c888f
commit e7b3766a69
14 changed files with 66 additions and 36 deletions

View File

@ -49,6 +49,7 @@ CMDDIR=${CMDDIR}
MODDIR=${MODDIR}
SCRIPTDIR=${SCRIPTDIR}
ETCDIR=\${TOPDIR}/etc
DEVDIR=\${TOPDIR}/dev
ZPOOLDIR=\${TOPDIR}/scripts/zpool-config
ZDB=\${CMDDIR}/zdb/zdb
@ -62,6 +63,7 @@ COMMON_SH=\${SCRIPTDIR}/common.sh
ZFS_SH=\${SCRIPTDIR}/zfs.sh
ZPOOL_CREATE_SH=\${SCRIPTDIR}/zpool-create.sh
INTREE=1
LDMOD=/sbin/insmod
KERNEL_MODULES=( \\

View File

@ -21,13 +21,13 @@ FORCE=
FORCE_FLAG=
DUMP_LOG=
ERROR=
UPATH="/dev/disk/zpool"
RAID0S=()
RAID10S=()
RAIDZS=()
RAIDZ2S=()
ETCDIR=${ETCDIR:-/etc}
DEVDIR=${DEVDIR:-/dev/disk/zpool}
ZPOOLDIR=${ZPOOLDIR:-/usr/libexec/zfs/zpool-config}
ZDB=${ZDB:-/usr/sbin/zdb}
@ -48,6 +48,7 @@ INFOMOD=${INFOMOD:-/sbin/modinfo}
LOSETUP=${LOSETUP:-/sbin/losetup}
SYSCTL=${SYSCTL:-/sbin/sysctl}
UDEVADM=${UDEVADM:-/sbin/udevadm}
AWK=${AWK:-/bin/awk}
die() {
echo -e "${PROG}: $1" >&2
@ -163,7 +164,7 @@ unload_module() {
unload_modules() {
local MODULES_REVERSE=( $(echo ${MODULES[@]} |
awk '{for (i=NF;i>=1;i--) printf $i" "} END{print ""}') )
${AWK} '{for (i=NF;i>=1;i--) printf $i" "} END{print ""}') )
for MOD in ${MODULES_REVERSE[*]}; do
local NAME=`basename ${MOD} .ko`
@ -209,38 +210,53 @@ unused_loop_device() {
#
udev_setup() {
local SRC_PATH=$1
local SRC_RULES=${ETCDIR}/udev/rules.d/99-zpool.rules
local DST_RULES=/etc/udev/rules.d/99-zpool.rules
local DST_ZPOOL_ID=/usr/bin/zpool_id
local DST_FILE=`basename ${SRC_PATH} | cut -f1-2 -d'.'`
local DST_PATH=/etc/zfs/${DST_FILE}
# XXX: Copy files from source tree to installed system.
# This should be avoided if at all possible, however at
# the moment I see no clean way to add a udev rules file
# which is not in the default udevd search paths. On
# top of the the rules file we add will need to find
# the zpool_id support utility and the zdef.conf file.
cp -f ${SRC_PATH} ${DST_PATH}
if [ ! -f ${DST_ZPOOL_ID} ]; then
cp ${ZPOOL_ID} ${DST_ZPOOL_ID}
chmod 755 ${DST_ZPOOL_ID}
fi
if [ ! -f ${DST_RULES} ]; then
cp ${SRC_RULES} ${DST_RULES}
chmod 644 ${DST_RULES}
fi
if [ -f ${UDEVADM} ]; then
${UDEVADM} trigger
${UDEVADM} settle
# When running in tree manually contruct symlinks in tree to
# the proper devices. Symlinks are installed for all entires
# in the config file regardless of if that device actually
# exists. When installed as a package udev can be relied on for
# this and it will only create links for devices which exist.
if [ ${INTREE} ]; then
PWD=`pwd`
mkdir -p ${DEVDIR}/
cd ${DEVDIR}/
${AWK} '!/^#/ && /./ { system( \
"ln -f -s /dev/disk/by-path/"$2" "$1";" \
"ln -f -s /dev/disk/by-path/"$2"-part1 "$1"p1;" \
"ln -f -s /dev/disk/by-path/"$2"-part9 "$1"p9;" \
) }' $SRC_PATH
cd ${PWD}
else
/sbin/udevtrigger
/sbin/udevsettle
DST_FILE=`basename ${SRC_PATH} | cut -f1-2 -d'.'`
DST_PATH=/etc/zfs/${DST_FILE}
if [ -e ${DST_PATH} ]; then
die "Error: Config ${DST_PATH} already exists"
fi
cp ${SRC_PATH} ${DST_PATH}
if [ -f ${UDEVADM} ]; then
${UDEVADM} trigger
${UDEVADM} settle
else
/sbin/udevtrigger
/sbin/udevsettle
fi
fi
return 0
}
udev_cleanup() {
local SRC_PATH=$1
if [ ${INTREE} ]; then
PWD=`pwd`
cd ${DEVDIR}/
${AWK} '!/^#/ && /./ { system( \
"rm -f "$1" "$1"p1 "$1"p9") }' $SRC_PATH
cd ${PWD}
fi
return 0
@ -262,7 +278,7 @@ udev_raid0_setup() {
for RANK in `seq 1 ${RANKS}`; do
for CHANNEL in `seq 1 ${CHANNELS}`; do
DISK=`udev_cr2d ${CHANNEL} ${RANK}`
RAID0S[${IDX}]="${UPATH}/${DISK}"
RAID0S[${IDX}]="${DEVDIR}/${DISK}"
let IDX=IDX+1
done
done
@ -281,7 +297,7 @@ udev_raid10_setup() {
let CHANNEL2=CHANNEL1+1
DISK1=`udev_cr2d ${CHANNEL1} ${RANK}`
DISK2=`udev_cr2d ${CHANNEL2} ${RANK}`
GROUP="${UPATH}/${DISK1} ${UPATH}/${DISK2}"
GROUP="${DEVDIR}/${DISK1} ${DEVDIR}/${DISK2}"
RAID10S[${IDX}]="mirror ${GROUP}"
let IDX=IDX+1
done
@ -300,7 +316,7 @@ udev_raidz_setup() {
for CHANNEL in `seq 1 ${CHANNELS}`; do
DISK=`udev_cr2d ${CHANNEL} ${RANK}`
RAIDZ[${CHANNEL}]="${UPATH}/${DISK}"
RAIDZ[${CHANNEL}]="${DEVDIR}/${DISK}"
done
RAIDZS[${RANK}]="${RAIDZ[*]}"
@ -319,7 +335,7 @@ udev_raidz2_setup() {
for CHANNEL in `seq 1 ${CHANNELS}`; do
DISK=`udev_cr2d ${CHANNEL} ${RANK}`
RAIDZ2[${CHANNEL}]="${UPATH}/${DISK}"
RAIDZ2[${CHANNEL}]="${DEVDIR}/${DISK}"
done
RAIDZ2S[${RANK}]="${RAIDZ2[*]}"

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.dragon.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.promise.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.promise.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.promise.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.promise.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.x4550.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.x4550.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.x4550.example
}

View File

@ -17,4 +17,5 @@ zpool_create() {
zpool_destroy() {
msg ${ZPOOL} destroy ${ZPOOL_NAME}
${ZPOOL} destroy ${ZPOOL_NAME}
udev_cleanup ${ETCDIR}/zfs/zdev.conf.x4550.example
}