diff options
-rw-r--r-- | .SRCINFO | 22 | ||||
-rw-r--r-- | PKGBUILD | 43 | ||||
-rw-r--r-- | zfs-utils.bash-completion-r1 (renamed from zfs.bash-completion-r1) | 0 | ||||
-rw-r--r-- | zfs-utils.initcpio.hook (renamed from zfs.initcpio.hook) | 78 | ||||
-rw-r--r-- | zfs-utils.initcpio.install (renamed from zfs.initcpio.install) | 2 | ||||
-rw-r--r-- | zfs-utils.install | 18 |
6 files changed, 125 insertions, 38 deletions
@@ -1,7 +1,5 @@ -# Generated by mksrcinfo v8 -# Sat Aug 19 19:50:07 UTC 2017 pkgbase = zfs-dkms-git - pkgver = 0.7.0_r33_g08de8c16f + pkgver = 0.7.0_r468_ga82a4a15b pkgrel = 1 url = http://zfsonlinux.org/ arch = i686 @@ -10,18 +8,18 @@ pkgbase = zfs-dkms-git makedepends = git makedepends = spl-dkms-git source = git+https://github.com/zfsonlinux/zfs.git - source = zfs.bash-completion-r1 - source = zfs.initcpio.install - source = zfs.initcpio.hook + source = zfs-utils.bash-completion-r1 + source = zfs-utils.initcpio.install + source = zfs-utils.initcpio.hook sha256sums = SKIP sha256sums = b60214f70ffffb62ffe489cbfabd2e069d14ed2a391fac0e36f914238394b540 - sha256sums = aa5706bf08b36209a318762680f3c9fb45b3fc4b8e4ef184c8a5370b2c3000ca - sha256sums = f95ad1a5421ccbb8b01f448373f46cfd1f718361a82c2687a597325cf9827e3e + sha256sums = e33adabbe3f2f4866802c9d63c7810c7a42b4df2288d0cdd23376519b15b36e4 + sha256sums = 290b18f538badce2eedd4ac4926a579535ec6c887436569fa6ff3685b55776bf pkgname = zfs-dkms-git pkgdesc = Kernel modules for the Zettabyte File System. (Git version) depends = spl-dkms-git - depends = zfs-utils-dkms-git=0.7.0_r33_g08de8c16f-1 + depends = zfs-utils-dkms-git=0.7.0_r468_ga82a4a15b-1 depends = dkms provides = zfs conflicts = zfs-git @@ -30,8 +28,14 @@ pkgname = zfs-dkms-git pkgname = zfs-utils-dkms-git pkgdesc = Kernel module support files for the Zettabyte File System. (Git version) + install = zfs-utils.install + depends = python2 provides = zfs-utils conflicts = zfs-utils-git conflicts = zfs-utils-lts conflicts = zfs-utils + conflicts = zfs-utils-common-git + conflicts = zfs-utils-common + backup = etc/zfs/zed.d/zed.rc + backup = etc/default/zfs @@ -1,23 +1,22 @@ -# -# Maintainer: Iacopo Isimbaldi <isiachi@rhye.it> -# +# Maintainer: Jan Houben <jan@nexttrex.de> +# Contributor: Iacopo Isimbaldi <isiachi@rhye.it> pkgbase="zfs-dkms-git" pkgname=("zfs-dkms-git" "zfs-utils-dkms-git") -pkgver=0.7.0_r33_g08de8c16f +pkgver=0.7.0_r468_ga82a4a15b pkgrel=1 license=('CDDL') makedepends=("git" "spl-dkms-git") arch=("i686" "x86_64") url="http://zfsonlinux.org/" source=("git+https://github.com/zfsonlinux/zfs.git" - "zfs.bash-completion-r1" - "zfs.initcpio.install" - "zfs.initcpio.hook") + "zfs-utils.bash-completion-r1" + "zfs-utils.initcpio.install" + "zfs-utils.initcpio.hook") sha256sums=('SKIP' 'b60214f70ffffb62ffe489cbfabd2e069d14ed2a391fac0e36f914238394b540' - 'aa5706bf08b36209a318762680f3c9fb45b3fc4b8e4ef184c8a5370b2c3000ca' - 'f95ad1a5421ccbb8b01f448373f46cfd1f718361a82c2687a597325cf9827e3e') + 'e33adabbe3f2f4866802c9d63c7810c7a42b4df2288d0cdd23376519b15b36e4' + '290b18f538badce2eedd4ac4926a579535ec6c887436569fa6ff3685b55776bf') pkgver() { cd "${srcdir}/zfs" @@ -37,7 +36,9 @@ build() { --includedir=/usr/include \ --with-udevdir=/usr/lib/udev \ --libexecdir=/usr/lib/zfs \ - --with-config=user + --with-config=user \ + --enable-systemd \ + --enable-pyzfs make } @@ -61,20 +62,24 @@ package_zfs-dkms-git() { package_zfs-utils-dkms-git() { pkgdesc="Kernel module support files for the Zettabyte File System. (Git version)" + depends=("python2") provides=("zfs-utils") - conflicts=("zfs-utils-git" "zfs-utils-lts" "zfs-utils") + conflicts=("zfs-utils-git" "zfs-utils-lts" "zfs-utils" "zfs-utils-common-git" "zfs-utils-common") + install=zfs-utils.install + backup=('etc/zfs/zed.d/zed.rc' 'etc/default/zfs') cd "${srcdir}/zfs" make DESTDIR="${pkgdir}" install - # Remove uneeded files rm -r "${pkgdir}"/etc/init.d rm -r "${pkgdir}"/usr/lib/dracut - rm -r "${pkgdir}"/usr/share/initramfs-tools - - 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 - - mkdir -p "${pkgdir}"/usr/lib/initcpio/install + # Autoload the zfs module at boot + mkdir -p "${pkgdir}/etc/modules-load.d" + printf "%s\n" "zfs" > "${pkgdir}/etc/modules-load.d/zfs.conf" + # fix permissions + chmod 750 ${pkgdir}/etc/sudoers.d + # Install the support files + install -D -m644 "${srcdir}"/zfs-utils.initcpio.hook "${pkgdir}"/usr/lib/initcpio/hooks/zfs + install -D -m644 "${srcdir}"/zfs-utils.initcpio.install "${pkgdir}"/usr/lib/initcpio/install/zfs + install -D -m644 "${srcdir}"/zfs-utils.bash-completion-r1 "${pkgdir}"/usr/share/bash-completion/completions/zfs } diff --git a/zfs.bash-completion-r1 b/zfs-utils.bash-completion-r1 index b1aded368e85..b1aded368e85 100644 --- a/zfs.bash-completion-r1 +++ b/zfs-utils.bash-completion-r1 diff --git a/zfs.initcpio.hook b/zfs-utils.initcpio.hook index 7288ab8018b3..2b6da8e6fd17 100644 --- a/zfs.initcpio.hook +++ b/zfs-utils.initcpio.hook @@ -25,6 +25,27 @@ zfs_get_bootfs () { return 1 } +zfs_decrypt_fs() { + dataset=$1 + + # check if 'zfs load-key' is available + zfs 2>&1 | grep load-key > /dev/null || return 0 + + # check if dataset is encrypted + [ "$(zfs get -H -o value encryption "${dataset}")" != "off" ] || return 0 + + # check if key is already loaded + [ "$(zfs get -H -o value keystatus "${dataset}")" != "available" ] || return 0 + + # get the encryption root + encryptionroot=$(zfs get -H -o value encryptionroot "${dataset}") + + # loop until we get the correct password + while ! eval zfs load-key "${encryptionroot}"; do + sleep 2 + done +} + zfs_mount_handler () { if [ "${ZFS_DATASET}" = "bootfs" ] ; then if ! zfs_get_bootfs ; then @@ -39,7 +60,7 @@ zfs_mount_handler () { local pool="${ZFS_DATASET%%/*}" local rwopt_exp="${rwopt:-ro}" - if ! zpool list -H "${pool}" 2>&1 > /dev/null ; then + 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" @@ -53,6 +74,7 @@ zfs_mount_handler () { fi local node="$1" + local rootmnt=$(zfs get -H -o value mountpoint "${ZFS_DATASET}") local tab_file="${node}/etc/fstab" local zfs_datasets="$(zfs list -H -o name -t filesystem -r ${ZFS_DATASET})" @@ -68,28 +90,45 @@ zfs_mount_handler () { 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}") + zfs_decrypt_fs "${dataset}" mount -t zfs -o "${opt}" "${dataset}" "${node}${mnt}" fi fi ;; *) - mount -t zfs -o "zfsutil,${rwopt_exp}" "${dataset}" "${node}${mountpoint}" + zfs_decrypt_fs "${dataset}" + mount -t zfs -o "zfsutil,${rwopt_exp}" "${dataset}" "${node}/${mountpoint##${rootmnt}}" ;; esac done } -run_hook() { +set_flags() { # Force import the pools, useful if the pool has not properly been exported using 'zpool export <pool>' [ ! "${zfs_force}" = "" ] && ZPOOL_FORCE="-f" # Add import directory to import command flags [ ! "${zfs_import_dir}" = "" ] && ZPOOL_IMPORT_FLAGS="${ZPOOL_IMPORT_FLAGS} -d ${zfs_import_dir}" + [ "${zfs_import_dir}" = "" ] && ZPOOL_IMPORT_FLAGS="${ZPOOL_IMPORT_FLAGS} -c /etc/zfs/zpool.cache" +} + +run_hook() { + set_flags # 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 ${root} in + # root=zfs + "zfs") + mount_handler="zfs_mount_handler" + ;; + # root=ZFS=... syntax (grub) + "ZFS="*) + mount_handler="zfs_mount_handler" + ZFS_DATASET="${root#*[=]}" + ;; + esac case ${zfs} in "") @@ -98,22 +137,45 @@ run_hook() { auto|bootfs) ZFS_DATASET="bootfs" mount_handler="zfs_mount_handler" + local pool="[a-zA-Z][^ ]*" ;; *) ZFS_DATASET="${zfs}" mount_handler="zfs_mount_handler" + local pool="${ZFS_DATASET%%/*}" ;; esac - # Allow up to n seconds for zfs device to show up - for i in $(seq 1 ${ZFS_WAIT}); do - [ -c "/dev/zfs" ] && break + # Allow at least n seconds for zfs device to show up. Especially + # when using zfs_import_dir instead of zpool.cache, the listing of + # available pools can be slow, so this loop must be top-tested to + # ensure we do one 'zpool import' pass after the timer has expired. + sleep ${ZFS_WAIT} & pid=$! + local break_after=0 + while :; do + kill -0 $pid > /dev/null 2>&1 || break_after=1 + if [ -c "/dev/zfs" ]; then + zpool import ${ZPOOL_IMPORT_FLAGS} | awk " + BEGIN { pool_found=0; online=0; unavail=0 } + /^ ${pool} .*/ { pool_found=1 } + /^\$/ { pool_found=0 } + /UNAVAIL/ { if (pool_found == 1) { unavail=1 } } + /ONLINE/ { if (pool_found == 1) { online=1 } } + END { if (online == 1 && unavail != 1) + { exit 0 } + else + { exit 1 } + }" && break + fi + [ $break_after == 1 ] && break sleep 1 done + kill $pid > /dev/null 2>&1 } run_latehook () { - zpool import -N -a ${ZPOOL_FORCE} + set_flags + zpool import ${ZPOOL_IMPORT_FLAGS} -N -a ${ZPOOL_FORCE} } # vim:set ts=4 sw=4 ft=sh et: diff --git a/zfs.initcpio.install b/zfs-utils.initcpio.install index 3ab0f5266e60..6f7d05b5addc 100644 --- a/zfs.initcpio.install +++ b/zfs-utils.initcpio.install @@ -7,7 +7,6 @@ build() { zunicode \ zcommon \ zfs \ - zpios \ spl \ splat @@ -22,7 +21,6 @@ build() { zfs \ zhack \ zinject \ - zpios \ zpool \ zstreamdump \ ztest \ diff --git a/zfs-utils.install b/zfs-utils.install new file mode 100644 index 000000000000..85d0a9f574da --- /dev/null +++ b/zfs-utils.install @@ -0,0 +1,18 @@ +post_upgrade() { + + # If upgrading from 0.7.0_r211_g4e9b15696-1 or older + # display zfs-import warning + if [[ $(vercmp $2 0.7.0_r211_g4e9b15696-1) -le 0 ]]; then + echo '>>> WARNING: A new systemd unit file was added to archzfs!' + echo '>>> You may need enable zfs-import.target' + echo '>>> See https://github.com/archzfs/archzfs/issues/186' + fi + + # If upgrading from 0.7.0_r275_g1b66810ba-1 or older + # display encryption format change warning + if [[ $(vercmp $2 0.7.0_r275_g1b66810ba-1) -le 0 ]]; then + echo '>>> WARNING: The on-disk format for encrypted datasets has changed!' + echo '>>> All encrypted datasets will mount read only and need to be migrated.' + echo '>>> See https://github.com/archzfs/archzfs/issues/222' + fi +} |