summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pcr/zfs-dkms/PKGBUILD17
-rw-r--r--pcr/zfs-dkms/zfs.initcpio.hook97
-rw-r--r--pcr/zfs-dkms/zfs.initcpio.install15
3 files changed, 75 insertions, 54 deletions
diff --git a/pcr/zfs-dkms/PKGBUILD b/pcr/zfs-dkms/PKGBUILD
index bdfaf81fa..d93ac31b4 100644
--- a/pcr/zfs-dkms/PKGBUILD
+++ b/pcr/zfs-dkms/PKGBUILD
@@ -5,8 +5,8 @@
pkgbase="zfs-dkms"
pkgname=("zfs-dkms" "zfs-utils")
-pkgver=0.6.5.7
-pkgrel=1
+pkgver=0.6.5.8
+pkgrel=2
license=('CDDL')
makedepends=("git" "spl-dkms=${pkgver}")
arch=("i686" "x86_64")
@@ -17,8 +17,8 @@ source=("git+https://github.com/zfsonlinux/zfs.git#tag=zfs-${pkgver}"
"zfs.initcpio.hook")
sha256sums=('SKIP'
'b60214f70ffffb62ffe489cbfabd2e069d14ed2a391fac0e36f914238394b540'
- '1e20071fa61a33874505dae0f2d71bb560f43e7faaea735cbde770ea10c133df'
- '250f1232c464a81cc9c8b8ee05f21d752ebeebbc8614fae1c6d0bc600e816ac1')
+ '17114052aa20c528f022f7f1349971aa28810e2ed2c97871226b5679a91f7e77'
+ '90d50df503464e8d76770488dbd491cb633ee27984d4d3a31b03f1a4e7492038')
build() {
cd "${srcdir}/zfs"
@@ -31,7 +31,7 @@ build() {
--libdir=/usr/lib \
--datadir=/usr/share \
--includedir=/usr/include \
- --with-udevdir=/lib/udev \
+ --with-udevdir=/usr/lib/udev \
--libexecdir=/usr/lib/zfs \
--with-config=user
make
@@ -48,7 +48,8 @@ package_zfs-dkms() {
cp -a ${srcdir}/zfs/. ${dkmsdir}
cd "${dkmsdir}"
- make clean distclean
+ make clean
+ make distclean
find . -name ".git*" -print0 | xargs -0 rm -fr --
scripts/dkms.mkconf -v ${pkgver} -f dkms.conf -n zfs
chmod g-w,o-w -R .
@@ -66,10 +67,6 @@ package_zfs-utils() {
rm -r "${pkgdir}"/usr/lib/dracut
rm -r "${pkgdir}"/usr/share/initramfs-tools
- # move module tree /lib -> /usr/lib
- cp -r "${pkgdir}"/{lib,usr}
- rm -r "${pkgdir}"/lib
-
install -D -m644 "${srcdir}"/zfs.initcpio.hook "${pkgdir}"/usr/lib/initcpio/hooks/zfs
install -D -m644 "${srcdir}"/zfs.initcpio.install "${pkgdir}"/usr/lib/initcpio/install/zfs
install -D -m644 "${srcdir}"/zfs.bash-completion-r1 "${pkgdir}"/usr/share/bash-completion/completions/zfs
diff --git a/pcr/zfs-dkms/zfs.initcpio.hook b/pcr/zfs-dkms/zfs.initcpio.hook
index 3a928944d..09d081f04 100644
--- a/pcr/zfs-dkms/zfs.initcpio.hook
+++ b/pcr/zfs-dkms/zfs.initcpio.hook
@@ -1,8 +1,14 @@
+#
+# WARNING: This script is parsed by ash in busybox at boot time, not bash!
+# http://linux.die.net/man/1/ash
+# https://wiki.ubuntu.com/DashAsBinSh
+# http://www.jpsdomain.org/public/2008-JP_bash_vs_dash.pdf
+#
ZPOOL_FORCE=""
ZPOOL_IMPORT_FLAGS=""
zfs_get_bootfs () {
- for zfs_dataset in $(/usr/bin/zpool list -H -o bootfs); do
+ for zfs_dataset in $(zpool list -H -o bootfs); do
case ${zfs_dataset} in
"" | "-")
# skip this line/dataset
@@ -20,81 +26,94 @@ zfs_get_bootfs () {
}
zfs_mount_handler () {
- local node=$1
- if [ "$ZFS_DATASET" = "bootfs" ] ; then
+ if [ "${ZFS_DATASET}" = "bootfs" ] ; then
if ! zfs_get_bootfs ; then
# Lets import everything and try again
- /usr/bin/zpool import $ZPOOL_IMPORT_FLAGS -N -a $ZPOOL_FORCE
+ zpool import ${ZPOOL_IMPORT_FLAGS} -N -a ${ZPOOL_FORCE}
if ! zfs_get_bootfs ; then
- echo "ZFS: Cannot find bootfs."
- return 1
+ die "ZFS: Cannot find bootfs."
fi
fi
fi
local pool="${ZFS_DATASET%%/*}"
- local rwopt_exp=${rwopt:-ro}
+ local rwopt_exp="${rwopt:-ro}"
- if ! "/usr/bin/zpool" list -H $pool 2>&1 > /dev/null ; then
- if [ "$rwopt_exp" != "rw" ]; then
- msg "ZFS: Importing pool $pool readonly."
- ZPOOL_IMPORT_FLAGS="$ZPOOL_IMPORT_FLAGS -o readonly=on"
+ if ! zpool list -H "${pool}" 2>1 > /dev/null ; then
+ if [ ! "${rwopt_exp}" = "rw" ]; then
+ msg "ZFS: Importing pool ${pool} readonly."
+ ZPOOL_IMPORT_FLAGS="${ZPOOL_IMPORT_FLAGS} -o readonly=on"
else
- msg "ZFS: Importing pool $pool."
+ msg "ZFS: Importing pool ${pool}."
fi
- if ! "/usr/bin/zpool" import $ZPOOL_IMPORT_FLAGS -N $pool $ZPOOL_FORCE ; then
- echo "ZFS: Unable to import pool $pool."
- return 1
+ if ! zpool import ${ZPOOL_IMPORT_FLAGS} -N "${pool}" ${ZPOOL_FORCE} ; then
+ die "ZFS: Unable to import pool ${pool}."
fi
fi
- local mountpoint=$("/usr/bin/zfs" get -H -o value mountpoint $ZFS_DATASET)
- if [ "$mountpoint" = "legacy" ] ; then
- mount -t zfs -o ${rwopt_exp} "$ZFS_DATASET" "$node"
- else
- mount -o zfsutil,${rwopt_exp} -t zfs "$ZFS_DATASET" "$node"
- fi
+ local node="$1"
+ local tab_file="${node}/etc/fstab"
+ local zfs_datasets="$(zfs list -H -o name -t filesystem -r ${ZFS_DATASET})"
+
+ # Mount the root, and any child datasets
+ for dataset in ${zfs_datasets}; do
+ mountpoint=$(zfs get -H -o value mountpoint "${dataset}")
+ case ${mountpoint} in
+ "none")
+ # skip this line/dataset.
+ ;;
+ "legacy")
+ if [ -f "${tab_file}" ]; then
+ if findmnt -snero source -F "${tab_file}" -S "${dataset}" > /dev/null 2>&1; then
+ opt=$(findmnt -snero options -F "${tab_file}" -S "${dataset}")
+ mnt=$(findmnt -snero target -F "${tab_file}" -S "${dataset}")
+ mount -t zfs -o "${opt}" "${dataset}" "${node}${mnt}"
+ fi
+ fi
+ ;;
+ *)
+ mount -t zfs -o "zfsutil,${rwopt_exp}" "${dataset}" "${node}${mountpoint}"
+ ;;
+ esac
+ done
}
run_hook() {
- # Force import the pools, useful if the pool has not properly been exported
- # using 'zpool export <pool>'
- [[ $zfs_force == 1 ]] && ZPOOL_FORCE='-f'
- [[ "$zfs_import_dir" != "" ]] && ZPOOL_IMPORT_FLAGS="$ZPOOL_IMPORT_FLAGS -d $zfs_import_dir"
+ # Force import the pools, useful if the pool has not properly been exported using 'zpool export <pool>'
+ [ ! "${zfs_force}" = "" ] && ZPOOL_FORCE="-f"
- if [ "$root" = 'zfs' ]; then
- mount_handler='zfs_mount_handler'
- fi
+ # Add import directory to import command flags
+ [ ! "${zfs_import_dir}" = "" ] && ZPOOL_IMPORT_FLAGS="${ZPOOL_IMPORT_FLAGS} -d ${zfs_import_dir}"
+
+ # Wait 15 seconds for ZFS devices to show up
+ [ "${zfs_wait}" = "" ] && ZFS_WAIT="15" || ZFS_WAIT="${zfs_wait}"
+
+ [ "${root}" = "zfs" ] && mount_handler="zfs_mount_handler"
- case $zfs in
+ case ${zfs} in
"")
# skip this line/dataset
;;
auto|bootfs)
- ZFS_DATASET='bootfs'
+ ZFS_DATASET="bootfs"
mount_handler="zfs_mount_handler"
;;
*)
- ZFS_DATASET=$zfs
+ ZFS_DATASET="${zfs}"
mount_handler="zfs_mount_handler"
;;
esac
- if [ ! -f "/etc/hostid" ] ; then
- echo "ZFS: No hostid found on kernel command line or /etc/hostid. ZFS pools may not import correctly."
- fi
-
- # Allow up to 10 seconds for zfs device to show up
- for i in 1 2 3 4 5 6 7 8 9 10; do
+ # Allow up to n seconds for zfs device to show up
+ for i in $(seq 1 ${ZFS_WAIT}); do
[ -c "/dev/zfs" ] && break
sleep 1
done
}
-
run_latehook () {
- /usr/bin/zpool import -N -a $ZPOOL_FORCE
+ zpool import -N -a ${ZPOOL_FORCE}
}
# vim:set ts=4 sw=4 ft=sh et:
diff --git a/pcr/zfs-dkms/zfs.initcpio.install b/pcr/zfs-dkms/zfs.initcpio.install
index c128d1006..19364a386 100644
--- a/pcr/zfs-dkms/zfs.initcpio.install
+++ b/pcr/zfs-dkms/zfs.initcpio.install
@@ -17,6 +17,7 @@ build() {
dbufstat.py \
fsck.zfs \
mount.zfs \
+ seq \
zdb \
zed \
zfs \
@@ -27,14 +28,15 @@ build() {
zstreamdump \
ztest \
splat \
- hostid \
/lib/udev/vdev_id \
- /lib/udev/zvol_id
+ /lib/udev/zvol_id \
+ findmnt
map add_file \
/lib/udev/rules.d/60-zvol.rules \
/lib/udev/rules.d/69-vdev.rules \
- /lib/udev/rules.d/90-zfs.rules
+ /lib/udev/rules.d/90-zfs.rules \
+ /lib/libgcc_s.so.1
map add_dir \
/etc/zfs/zed.d
@@ -42,11 +44,10 @@ build() {
add_runscript
# allow mount(8) to "autodetect" ZFS
- echo 'zfs' >>"$BUILDROOT/etc/filesystems"
+ echo 'zfs' >>"${BUILDROOT}/etc/filesystems"
[[ -f /etc/zfs/zpool.cache ]] && add_file "/etc/zfs/zpool.cache"
[[ -f /etc/modprobe.d/zfs.conf ]] && add_file "/etc/modprobe.d/zfs.conf"
- [[ -f /etc/hostid ]] && add_file "/etc/hostid"
}
help() {
@@ -73,6 +74,10 @@ Command Line Setup:
If set to 1, this will use "zpool import -f" when attempting to import
pools.
+ To change the seconds of time to wait for ZFS devices to show up at boot:
+
+ zfs_wait=30
+
To search for devices in a directory other than "/dev":
zfs_import_dir=/dev/disk/by-uuid