summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO22
-rw-r--r--PKGBUILD43
-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.install18
6 files changed, 125 insertions, 38 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 8465a74551d8..92fcb16eda24 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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
diff --git a/PKGBUILD b/PKGBUILD
index 56b1c07787a8..ce1c68da03b5 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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
+}