mirror of https://github.com/archzfs/archzfs
parent
3307a0a08a
commit
46d58c1fce
@ -0,0 +1,10 @@ |
||||
#!/bin/bash |
||||
|
||||
cat << EOF > ${AZB_PKGBUILD_PATH} |
||||
# Maintainer: Jesus Alvarez <jeezusjr at gmail dot com> |
||||
# |
||||
# This PKGBUILD was generated by the archzfs build scripts located at |
||||
# |
||||
# http://github.com/archzfs/archzfs |
||||
# |
||||
EOF |
@ -0,0 +1,42 @@ |
||||
#!/bin/bash |
||||
|
||||
cat << EOF > ${AZB_PKGBUILD_PATH} |
||||
${AZB_HEADER} |
||||
|
||||
pkgname="${AZB_SPL_UTILS_PKGNAME}" |
||||
pkgver=${AZB_PKGVER} |
||||
pkgrel=${AZB_PKGREL} |
||||
pkgdesc="Solaris Porting Layer kernel module support files." |
||||
arch=("i686" "x86_64") |
||||
url="http://zfsonlinux.org/" |
||||
source=("http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-${AZB_ZOL_VERSION}.tar.gz" |
||||
"spl-utils.hostid") |
||||
sha256sums=('${AZB_SPL_SRC_HASH}' |
||||
'${AZB_SPL_HOSTID_HASH}') |
||||
groups=("${AZB_ARCHZFS_PACKAGE_GROUP}") |
||||
license=("GPL") |
||||
provides=("${AZB_SPL_UTILS_PKGNAME}") |
||||
|
||||
build() { |
||||
cd "\${srcdir}/spl-${AZB_ZOL_VERSION}" |
||||
./autogen.sh |
||||
|
||||
_at_enable="" |
||||
[ "\${CARCH}" == "i686" ] && _at_enable="--enable-atomic-spinlocks" |
||||
|
||||
./configure --prefix=/usr \\ |
||||
--libdir=/usr/lib \\ |
||||
--sbindir=/usr/bin \\ |
||||
--with-config=user \\ |
||||
\${_at_enable} |
||||
|
||||
make |
||||
} |
||||
|
||||
package() { |
||||
cd "\${srcdir}/spl-${AZB_ZOL_VERSION}" |
||||
make DESTDIR="\${pkgdir}" install |
||||
|
||||
install -D -m644 "\${srcdir}"/spl-utils.hostid "\${pkgdir}"/etc/hostid |
||||
} |
||||
EOF |
@ -0,0 +1,44 @@ |
||||
#!/bin/bash |
||||
|
||||
cat << EOF > ${AZB_PKGBUILD_PATH} |
||||
${AZB_HEADER} |
||||
|
||||
pkgname="${AZB_SPL_PKGNAME}" |
||||
pkgver=${AZB_PKGVER} |
||||
pkgrel=${AZB_PKGREL} |
||||
pkgdesc="Solaris Porting Layer kernel modules." |
||||
depends=("${AZB_SPL_UTILS_PKGNAME}") |
||||
arch=("i686" "x86_64") |
||||
url="http://zfsonlinux.org/" |
||||
source=("http://archive.zfsonlinux.org/downloads/zfsonlinux/spl/spl-${AZB_ZOL_VERSION}.tar.gz") |
||||
sha256sums=('${AZB_ZFS_SRC_HASH}}') |
||||
groups=("${AZB_ARCHZFS_PACKAGE_GROUP}") |
||||
license=("GPL") |
||||
install=spl.install |
||||
provides=("${AZF_SPL_PKGNAME}") |
||||
|
||||
build() { |
||||
cd "\${srcdir}/spl-${AZB_ZOL_VERSION}" |
||||
./autogen.sh |
||||
|
||||
_at_enable="" |
||||
[ "\${CARCH}" == "i686" ] && _at_enable="--enable-atomic-spinlocks" |
||||
|
||||
./configure --prefix=/usr \\ |
||||
--libdir=/usr/lib \\ |
||||
--sbindir=/usr/bin \\ |
||||
--with-linux=/usr/lib/modules/${AZB_KERNEL_VERSION_FULL}/build \\ |
||||
--with-config=kernel \\ |
||||
\${_at_enable} |
||||
|
||||
make |
||||
} |
||||
|
||||
package() { |
||||
cd "\${srcdir}/spl-${AZB_ZOL_VERSION}" |
||||
make DESTDIR="\${pkgdir}" install |
||||
|
||||
mv "\${pkgdir}/lib" "\${pkgdir}/usr/" |
||||
sed -i "s+\${srcdir}++" \${pkgdir}/usr/src/spl-*/${AZB_KERNEL_VERSION_FULL}/Module.symvers |
||||
} |
||||
EOF |
@ -0,0 +1,35 @@ |
||||
#!/bin/bash |
||||
|
||||
cat << EOF > ${AZB_SPL_INSTALL_PATH} |
||||
post_install() { |
||||
check_hostid |
||||
run_depmod |
||||
} |
||||
|
||||
post_remove() { |
||||
run_depmod |
||||
} |
||||
|
||||
post_upgrade() { |
||||
check_hostid |
||||
run_depmod |
||||
} |
||||
|
||||
check_hostid() { |
||||
# Check /etc/hostid to see if it set to the sentinel value, see |
||||
# https://wiki.archlinux.org/index.php/ZFS for more information. |
||||
HOSTID=\$(hostid) |
||||
if [ "0x\${HOSTID}" == "0xffffffff" ]; then |
||||
# Generate a new hostid |
||||
: >/etc/hostid |
||||
HOSTID=\$(hostid) |
||||
# hostid is 4 byte little endian |
||||
printf \$(echo -n \$HOSTID | sed 's/\(..\)\(..\)\(..\)\(..\)/\\x\4\\x\3\\x\2\\x\1/') >/etc/hostid |
||||
fi |
||||
} |
||||
|
||||
run_depmod() { |
||||
echo ">>> Updating SPL module dependencies" |
||||
depmod -v ${AZB_KERNEL_VERSION_FULL} |
||||
} |
||||
EOF |
@ -0,0 +1,59 @@ |
||||
#!/bin/bash |
||||
|
||||
cat << EOF > ${AZB_PKGBUILD_PATH} |
||||
${AZB_HEADER} |
||||
|
||||
pkgname="${AZB_ZFS_UTILS_PKGNAME}" |
||||
pkgver=${AZB_PKGVER} |
||||
pkgrel=${AZB_PKGREL} |
||||
pkgdesc="Kernel module support files for the Zettabyte File System." |
||||
depends=("${AZB_SPL_PKGNAME}") |
||||
arch=("i686" "x86_64") |
||||
url="http://zfsonlinux.org/" |
||||
source=("http://archive.zfsonlinux.org/downloads/zfsonlinux/zfs/zfs-${AZB_ZOL_VERSION}.tar.gz" |
||||
"zfs-utils.bash-completion-r1" |
||||
"zfs-utils.initcpio.install" |
||||
"zfs-utils.initcpio.hook" |
||||
) |
||||
sha256sums=('${AZB_ZFS_SRC_HASH}' |
||||
'${AZB_ZFS_BASH_COMPLETION_HASH}' |
||||
'${AZB_ZFS_INITCPIO_INSTALL_HASH}' |
||||
'${AZB_ZFS_INITCPIO_HOOK_HASH}') |
||||
license=("CDDL") |
||||
groups=("${AZB_ARCHZFS_PACKAGE_GROUP}") |
||||
provides=("${AZB_ZFS_UTILS_PKGNAME}") |
||||
|
||||
build() { |
||||
cd "\${srcdir}/zfs-${AZB_ZOL_VERSION}" |
||||
./autogen.sh |
||||
|
||||
./configure --prefix=/usr \\ |
||||
--sysconfdir=/etc \\ |
||||
--sbindir=/usr/bin \\ |
||||
--with-mounthelperdir=/usr/bin \\ |
||||
--libdir=/usr/lib \\ |
||||
--datadir=/usr/share \\ |
||||
--includedir=/usr/include \\ |
||||
--with-udevdir=/lib/udev \\ |
||||
--libexecdir=/usr/lib/zfs-${AZB_ZOL_VERSION} \\ |
||||
--with-config=user |
||||
make |
||||
} |
||||
|
||||
package() { |
||||
cd "\${srcdir}/zfs-${AZB_ZOL_VERSION}" |
||||
make DESTDIR="\${pkgdir}" install |
||||
|
||||
# Remove uneeded files |
||||
rm -r "\${pkgdir}"/etc/init.d |
||||
rm -r "\${pkgdir}"/usr/lib/dracut |
||||
|
||||
# move module tree /lib -> /usr/lib |
||||
cp -r "\${pkgdir}"/{lib,usr} |
||||
rm -r "\${pkgdir}"/lib |
||||
|
||||
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 |
||||
} |
||||
EOF |
@ -0,0 +1,391 @@ |
||||
# Copyright (c) 2013, Aneurin Price <aneurin.price@gmail.com> |
||||
|
||||
# Permission is hereby granted, free of charge, to any person |
||||
# obtaining a copy of this software and associated documentation |
||||
# files (the "Software"), to deal in the Software without |
||||
# restriction, including without limitation the rights to use, |
||||
# copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
# copies of the Software, and to permit persons to whom the |
||||
# Software is furnished to do so, subject to the following |
||||
# conditions: |
||||
|
||||
# The above copyright notice and this permission notice shall be |
||||
# included in all copies or substantial portions of the Software. |
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES |
||||
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
||||
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
||||
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
||||
# OTHER DEALINGS IN THE SOFTWARE. |
||||
|
||||
#if [[ -w /dev/zfs ]]; then |
||||
__ZFS_CMD="zfs" |
||||
__ZPOOL_CMD="zpool" |
||||
#else |
||||
# __ZFS_CMD="sudo zfs" |
||||
# __ZPOOL_CMD="sudo zpool" |
||||
#fi |
||||
|
||||
__zfs_get_commands() |
||||
{ |
||||
$__ZFS_CMD 2>&1 | awk '/^\t[a-z]/ {print $1}' | cut -f1 -d '|' | uniq |
||||
} |
||||
|
||||
__zfs_get_properties() |
||||
{ |
||||
$__ZFS_CMD get 2>&1 | awk '$2 == "YES" || $2 == "NO" {print $1}'; echo all name space |
||||
} |
||||
|
||||
__zfs_get_editable_properties() |
||||
{ |
||||
$__ZFS_CMD get 2>&1 | awk '$2 == "YES" {print $1"="}' |
||||
} |
||||
|
||||
__zfs_get_inheritable_properties() |
||||
{ |
||||
$__ZFS_CMD get 2>&1 | awk '$3 == "YES" {print $1}' |
||||
} |
||||
|
||||
__zfs_list_datasets() |
||||
{ |
||||
$__ZFS_CMD list -H -o name -t filesystem,volume |
||||
} |
||||
|
||||
__zfs_list_filesystems() |
||||
{ |
||||
$__ZFS_CMD list -H -o name -t filesystem |
||||
} |
||||
|
||||
__zfs_match_snapshot() |
||||
{ |
||||
local base_dataset=${cur%@*} |
||||
if [[ $base_dataset != $cur ]] |
||||
then |
||||
$__ZFS_CMD list -H -o name -t snapshot -d 1 $base_dataset |
||||
else |
||||
$__ZFS_CMD list -H -o name -t filesystem,volume | awk '{print $1"@"}' |
||||
fi |
||||
} |
||||
|
||||
__zfs_match_explicit_snapshot() |
||||
{ |
||||
local base_dataset=${cur%@*} |
||||
if [[ $base_dataset != $cur ]] |
||||
then |
||||
$__ZFS_CMD list -H -o name -t snapshot -d 1 $base_dataset |
||||
fi |
||||
} |
||||
|
||||
__zfs_match_multiple_snapshots() |
||||
{ |
||||
local existing_opts=$(expr "$cur" : '\(.*\)[%,]') |
||||
if [[ $existing_opts ]] |
||||
then |
||||
local base_dataset=${cur%@*} |
||||
if [[ $base_dataset != $cur ]] |
||||
then |
||||
local cur=${cur##*,} |
||||
if [[ $cur =~ ^%|%.*% ]] |
||||
then |
||||
# correct range syntax is start%end |
||||
return 1 |
||||
fi |
||||
local range_start=$(expr "$cur" : '\(.*%\)') |
||||
$__ZFS_CMD list -H -o name -t snapshot -d 1 $base_dataset | sed 's$.*@$'$range_start'$g' |
||||
fi |
||||
else |
||||
__zfs_match_explicit_snapshot; __zfs_list_datasets |
||||
fi |
||||
} |
||||
|
||||
__zfs_list_volumes() |
||||
{ |
||||
$__ZFS_CMD list -H -o name -t volume |
||||
} |
||||
|
||||
__zfs_argument_chosen() |
||||
{ |
||||
local word property |
||||
for word in $(seq $((COMP_CWORD-1)) -1 2) |
||||
do |
||||
local prev="${COMP_WORDS[$word]}" |
||||
if [[ ${COMP_WORDS[$word-1]} != -[tos] ]] |
||||
then |
||||
if [[ "$prev" == [^,]*,* ]] || [[ "$prev" == *[@:]* ]] |
||||
then |
||||
return 0 |
||||
fi |
||||
for property in $@ |
||||
do |
||||
if [[ $prev == "$property" ]] |
||||
then |
||||
return 0 |
||||
fi |
||||
done |
||||
fi |
||||
done |
||||
return 1 |
||||
} |
||||
|
||||
__zfs_complete_ordered_arguments() |
||||
{ |
||||
local list1=$1 |
||||
local list2=$2 |
||||
local cur=$3 |
||||
local extra=$4 |
||||
if __zfs_argument_chosen $list1 |
||||
then |
||||
COMPREPLY=($(compgen -W "$list2 $extra" -- "$cur")) |
||||
else |
||||
COMPREPLY=($(compgen -W "$list1 $extra" -- "$cur")) |
||||
fi |
||||
} |
||||
|
||||
__zfs_complete_multiple_options() |
||||
{ |
||||
local options=$1 |
||||
local cur=$2 |
||||
|
||||
COMPREPLY=($(compgen -W "$options" -- "${cur##*,}")) |
||||
local existing_opts=$(expr "$cur" : '\(.*,\)') |
||||
if [[ $existing_opts ]] |
||||
then |
||||
COMPREPLY=( "${COMPREPLY[@]/#/${existing_opts}}" ) |
||||
fi |
||||
} |
||||
|
||||
__zfs_complete_switch() |
||||
{ |
||||
local options=$1 |
||||
if [[ ${cur:0:1} == - ]] |
||||
then |
||||
COMPREPLY=($(compgen -W "-{$options}" -- "$cur")) |
||||
return 0 |
||||
else |
||||
return 1 |
||||
fi |
||||
} |
||||
|
||||
__zfs_complete() |
||||
{ |
||||
local cur prev cmd cmds |
||||
COMPREPLY=() |
||||
# Don't split on colon |
||||
_get_comp_words_by_ref -n : -c cur -p prev -w COMP_WORDS -i COMP_CWORD |
||||
cmd="${COMP_WORDS[1]}" |
||||
|
||||
if [[ ${prev##*/} == zfs ]] |
||||
then |
||||
cmds=$(__zfs_get_commands) |
||||
COMPREPLY=($(compgen -W "$cmds -?" -- "$cur")) |
||||
return 0 |
||||
fi |
||||
|
||||
case "${cmd}" in |
||||
clone) |
||||
case "${prev}" in |
||||
-o) |
||||
COMPREPLY=($(compgen -W "$(__zfs_get_editable_properties)" -- "$cur")) |
||||
;; |
||||
*) |
||||
if ! __zfs_complete_switch "o,p" |
||||
then |
||||
if __zfs_argument_chosen |
||||
then |
||||
COMPREPLY=($(compgen -W "$(__zfs_list_datasets)" -- "$cur")) |
||||
else |
||||
COMPREPLY=($(compgen -W "$(__zfs_match_snapshot)" -- "$cur")) |
||||
fi |
||||
fi |
||||
;; |
||||
esac |
||||
;; |
||||
get) |
||||
case "${prev}" in |
||||
-d) |
||||
COMPREPLY=($(compgen -W "" -- "$cur")) |
||||
;; |
||||
-t) |
||||
__zfs_complete_multiple_options "filesystem volume snapshot all" "$cur" |
||||
;; |
||||
-s) |
||||
__zfs_complete_multiple_options "local default inherited temporary none" "$cur" |
||||
;; |
||||
-o) |
||||
__zfs_complete_multiple_options "name property value source received all" "$cur" |
||||
;; |
||||
*) |
||||
if ! __zfs_complete_switch "H,r,p,d,o,t,s" |
||||
then |
||||
if __zfs_argument_chosen $(__zfs_get_properties) |
||||
then |
||||
COMPREPLY=($(compgen -W "$(__zfs_match_explicit_snapshot) $(__zfs_list_datasets)" -- "$cur")) |
||||
else |
||||
__zfs_complete_multiple_options "$(__zfs_get_properties)" "$cur" |
||||
fi |
||||
fi |
||||
;; |
||||
esac |
||||
;; |
||||
inherit) |
||||
if ! __zfs_complete_switch "r" |
||||
then |
||||
__zfs_complete_ordered_arguments "$(__zfs_get_inheritable_properties)" "$(__zfs_match_explicit_snapshot) $(__zfs_list_datasets)" $cur |
||||
fi |
||||
;; |
||||
list) |
||||
case "${prev}" in |
||||
-d) |
||||
COMPREPLY=($(compgen -W "" -- "$cur")) |
||||
;; |
||||
-t) |
||||
__zfs_complete_multiple_options "filesystem volume snapshot all" "$cur" |
||||
;; |
||||
-o) |
||||
__zfs_complete_multiple_options "$(__zfs_get_properties)" "$cur" |
||||
;; |
||||
-s|-S) |
||||
COMPREPLY=($(compgen -W "$(__zfs_get_properties)" -- "$cur")) |
||||
;; |
||||
*) |
||||
if ! __zfs_complete_switch "H,r,d,o,t,s,S" |
||||
then |
||||
COMPREPLY=($(compgen -W "$(__zfs_match_explicit_snapshot) $(__zfs_list_datasets)" -- "$cur")) |
||||
fi |
||||
;; |
||||
esac |
||||
;; |
||||
promote) |
||||
COMPREPLY=($(compgen -W "$(__zfs_list_filesystems)" -- "$cur")) |
||||
;; |
||||
rollback) |
||||
if ! __zfs_complete_switch "r,R,f" |
||||
then |
||||
COMPREPLY=($(compgen -W "$(__zfs_match_snapshot)" -- "$cur")) |
||||
fi |
||||
;; |
||||
send) |
||||
if ! __zfs_complete_switch "d,n,P,p,R,v,i,I" |
||||
then |
||||
COMPREPLY=($(compgen -W "$(__zfs_match_snapshot)" -- "$cur")) |
||||
fi |
||||
;; |
||||
snapshot) |
||||
case "${prev}" in |
||||
-o) |
||||
COMPREPLY=($(compgen -W "$(__zfs_get_editable_properties)" -- "$cur")) |
||||
;; |
||||
*) |
||||
if ! __zfs_complete_switch "o,r" |
||||
then |
||||
COMPREPLY=($(compgen -W "$(__zfs_list_datasets | awk '{print $1"@"}')" -- "$cur")) |
||||
fi |
||||
;; |
||||
esac |
||||
;; |
||||
set) |
||||
__zfs_complete_ordered_arguments "$(__zfs_get_editable_properties)" "$(__zfs_match_explicit_snapshot) $(__zfs_list_datasets)" $cur |
||||
;; |
||||
upgrade) |
||||
case "${prev}" in |
||||
-a|-V|-v) |
||||
COMPREPLY=($(compgen -W "" -- "$cur")) |
||||
;; |
||||
*) |
||||
if ! __zfs_complete_switch "a,V,v,r" |
||||
then |
||||
COMPREPLY=($(compgen -W "$(__zfs_list_filesystems)" -- "$cur")) |
||||
fi |
||||
;; |
||||
esac |
||||
;; |
||||
destroy) |
||||
if ! __zfs_complete_switch "d,f,n,p,R,r,v" |
||||
then |
||||
__zfs_complete_multiple_options "$(__zfs_match_multiple_snapshots)" $cur |
||||
fi |
||||
;; |
||||
*) |
||||
COMPREPLY=($(compgen -W "$(__zfs_match_explicit_snapshot) $(__zfs_list_datasets)" -- "$cur")) |
||||
;; |
||||
esac |
||||
__ltrim_colon_completions "$cur" |
||||
return 0 |
||||
} |
||||
|
||||
__zpool_get_commands() |
||||
{ |
||||
$__ZPOOL_CMD 2>&1 | awk '/^\t[a-z]/ {print $1}' | uniq |
||||
} |
||||
|
||||
__zpool_get_properties() |
||||
{ |
||||
$__ZPOOL_CMD get 2>&1 | awk '$2 == "YES" || $2 == "NO" {print $1}'; echo all |
||||
} |
||||
|
||||
__zpool_get_editable_properties() |
||||
{ |
||||
$__ZPOOL_CMD get 2>&1 | awk '$2 == "YES" {print $1"="}' |
||||
} |
||||
|
||||
__zpool_list_pools() |
||||
{ |
||||
$__ZPOOL_CMD list -H -o name |
||||
} |
||||
|
||||
__zpool_complete() |
||||
{ |
||||
local cur prev cmd cmds |
||||
COMPREPLY=() |
||||
cur="${COMP_WORDS[COMP_CWORD]}" |
||||
prev="${COMP_WORDS[COMP_CWORD-1]}" |
||||
cmd="${COMP_WORDS[1]}" |
||||
|
||||
if [[ ${prev##*/} == zpool ]] |
||||
then |
||||
cmds=$(__zpool_get_commands) |
||||
COMPREPLY=($(compgen -W "$cmds" -- "$cur")) |
||||
return 0 |
||||
fi |
||||
|
||||
case "${cmd}" in |
||||
get) |
||||
__zfs_complete_ordered_arguments "$(__zpool_get_properties)" "$(__zpool_list_pools)" $cur |
||||
return 0 |
||||
;; |
||||
import) |
||||
if [[ $prev == -d ]] |
||||
then |
||||
_filedir -d |
||||
else |
||||
COMPREPLY=($(compgen -W "$(__zpool_list_pools) -d" -- "$cur")) |
||||
fi |
||||
return 0 |
||||
;; |
||||
set) |
||||
__zfs_complete_ordered_arguments "$(__zpool_get_editable_properties)" "$(__zpool_list_pools)" $cur |
||||
return 0 |
||||
;; |
||||
add|attach|clear|create|detach|offline|online|remove|replace) |
||||
local pools="$(__zpool_list_pools)" |
||||
if __zfs_argument_chosen $pools |
||||
then |
||||
_filedir |
||||
else |
||||
COMPREPLY=($(compgen -W "$pools" -- "$cur")) |
||||
fi |
||||
return 0 |
||||
;; |
||||
*) |
||||
COMPREPLY=($(compgen -W "$(__zpool_list_pools)" -- "$cur")) |
||||
return 0 |
||||
;; |
||||
esac |
||||
|
||||
} |
||||
|
||||
complete -F __zfs_complete zfs |
||||
complete -F __zpool_complete zpool |
@ -0,0 +1,92 @@ |
||||
ZPOOL_FORCE="" |
||||
ZPOOL_IMPORT_FLAGS="" |
||||
|
||||
zfs_get_bootfs () { |
||||
for zfs_dataset in $(/usr/bin/zpool list -H -o bootfs); do |
||||
case ${zfs_dataset} in |
||||
"" | "-") |
||||
# skip this line/dataset |
||||
;; |
||||
"no pools available") |
||||
return 1 |
||||
;; |
||||
*) |
||||
ZFS_DATASET=${zfs_dataset} |
||||
return 0 |
||||
;; |
||||
esac |
||||
done |
||||
return 1 |
||||
} |
||||
|
||||
zfs_mount_handler () { |
||||
local node=$1 |
||||
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 |
||||
if ! zfs_get_bootfs ; then |
||||
echo "ZFS: Cannot find bootfs." |
||||
return 1 |
||||
fi |
||||
fi |
||||
fi |
||||
|
||||
local pool="${ZFS_DATASET%%/*}" |
||||
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" |
||||
else |
||||
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 |
||||
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 |
||||
} |
||||
|
||||
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" |
||||
|
||||
if [ "$root" = 'zfs' ]; then |
||||
mount_handler='zfs_mount_handler' |
||||
fi |
||||
|
||||
case $zfs in |
||||
auto|bootfs) |
||||
ZFS_DATASET='bootfs' |
||||
mount_handler="zfs_mount_handler" |
||||
;; |
||||
*) |
||||
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 |
||||
[ -c "/dev/zfs" ] && break |
||||
sleep 1 |
||||
done |
||||
} |
||||
|
||||
# vim:set ts=4 sw=4 ft=sh et: |
@ -0,0 +1,104 @@ |
||||
#!/bin/bash |
||||
|
||||
build() { |
||||
map add_module \ |
||||
zavl \ |
||||
znvpair \ |
||||
zunicode \ |
||||
zcommon \ |
||||
zfs \ |
||||
zpios \ |
||||
spl \ |
||||
splat \ |
||||
zlib_deflate |
||||
|
||||
map add_binary \ |
||||
arcstat.py \ |
||||
dbufstat.py \ |
||||
fsck.zfs \ |
||||
mount.zfs \ |
||||
zdb \ |
||||
zed \ |
||||
zfs \ |
||||
zhack \ |
||||
zinject \ |
||||
zpios \ |
||||
zpool \ |
||||
zstreamdump \ |
||||
ztest \ |
||||
splat \ |
||||
hostid \ |
||||
/lib/udev/vdev_id \ |
||||
/lib/udev/zvol_id |
||||
|
||||
map add_file \ |
||||
/lib/udev/rules.d/60-zvol.rules \ |
||||
/lib/udev/rules.d/69-vdev.rules \ |
||||
/lib/udev/rules.d/90-zfs.rules |
||||
|
||||
map add_dir \ |
||||
/etc/zfs/zed.d |
||||
|
||||
add_runscript |
||||
|
||||
# allow mount(8) to "autodetect" ZFS |
||||
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() { |
||||
cat<<HELPEOF |
||||
This hook allows you to use ZFS as your root filesystem. |
||||
|
||||
Command Line Setup: |
||||
|
||||
You can append the following arguments to your kernel parameters list. See |
||||
https://wiki.archlinux.org/index.php/Kernel_parameters for more information. |
||||
|
||||
To use ZFS as your boot filesystem: |
||||
|
||||
zfs=bootfs or zfs=auto or root=zfs |
||||
|
||||
To use a pool or dataset: |
||||
|
||||
zfs=<pool/dataset> |
||||
|
||||
To force importing of a ZFS pool: |
||||
|
||||
zfs_force=1 |
||||
|
||||
If set to 1, this will use "zpool import -f" when attempting to import |
||||
pools. |
||||
|
||||
To search for devices in a directory other than "/dev": |
||||
|
||||
zfs_import_dir=/dev/disk/by-uuid |
||||
or |
||||
zfs_import_dir=/dev/disk/by-partuuid |
||||
or |
||||
zfs_import_dir=/dev/disk/by-path |
||||
etc. |
||||
|
||||
Following initcpio convention, the 'rw' option must be specified to load the |
||||
pool as read/write. Pools are loaded as read only by default. |
||||
|
||||
Examples: |
||||
|
||||
To use bootfs on your pool, use |
||||
|
||||
zfs=bootfs rw |
||||
|
||||
This will setup your root using tank/root zfs pool. |
||||
|
||||
zfs=tank/root rw |
||||
|
||||
If you want to set properties for zfs-on-linux module, you should add them to |
||||
/etc/modprobe.d/zfs.conf and then rebuild initcpio. |
||||
|
||||
HELPEOF |
||||
} |
||||
|
||||
# vim: set ts=4 sw=4 ft=sh et: |
@ -0,0 +1,47 @@ |
||||
#!/bin/bash |
||||
|
||||
cat << EOF > ${AZB_PKGBUILD_PATH} |
||||
${AZB_HEADER} |
||||
|
||||
pkgname="${AZB_ZFS_PKGNAME}" |
||||
pkgver=${AZB_PKGVER} |
||||
pkgrel=${AZB_PKGREL} |
||||
pkgdesc="Kernel modules for the Zettabyte File System." |
||||
depends=("${AZB_SPL_PKGNAME}" "${AZB_ZFS_UTILS_PKGNAME}") |
||||
arch=("i686" "x86_64") |
||||
url="http://zfsonlinux.org/" |
||||
source=("http://archive.zfsonlinux.org/downloads/zfsonlinux/zfs/zfs-${AZB_ZOL_VERSION}.tar.gz") |
||||
sha256sums=('${AZB_ZFS_SRC_HASH}') |
||||
groups=("${AZB_ARCHZFS_PACKAGE_GROUP}") |
||||
license=("CDDL") |
||||
install=zfs.install |
||||
provides=("${AZB_ZFS_PKGNAME}") |
||||
|
||||
build() { |
||||
cd "\${srcdir}/zfs-${AZB_ZOL_VERSION}" |
||||
./autogen.sh |
||||
|
||||
./configure --prefix=/usr \\ |
||||
--sysconfdir=/etc \\ |
||||
--sbindir=/usr/bin \\ |
||||
--libdir=/usr/lib \\ |
||||
--datadir=/usr/share \\ |
||||
--includedir=/usr/include \\ |
||||
--with-udevdir=/lib/udev \\ |
||||
--libexecdir=/usr/lib/zfs-${AZB_ZOL_VERSION} \\ |
||||
--with-config=kernel \\ |
||||
--with-linux=/usr/lib/modules/${AZB_KERNEL_VERSION_FULL}/build |
||||
|
||||
make |
||||
} |
||||
|
||||
package() { |
||||
cd "\${srcdir}/zfs-${AZB_ZOL_VERSION}" |
||||
make DESTDIR="\${pkgdir}" install |
||||
|
||||
cp -r "\${pkgdir}"/{lib,usr} |
||||
rm -r "\${pkgdir}"/lib |
||||
|
||||
sed -i "s+\${srcdir}++" \${pkgdir}/usr/src/zfs-*/${AZB_KERNEL_VERSION_FULL}/Module.symvers |
||||
} |
||||
EOF |
@ -0,0 +1,31 @@ |
||||
#!/bin/bash |
||||
|
||||
cat << EOF > ${AZB_ZFS_INSTALL_PATH} |
||||
post_install() { |
||||
check_initramfs |
||||
} |
||||
|
||||
post_remove() { |
||||
check_initramfs 'remove' |
||||
} |
||||
|
||||
post_upgrade() { |
||||
check_initramfs |
||||
} |
||||
|
||||
check_initramfs() { |
||||
echo ">>> Updating ZFS module dependencies" |
||||
depmod -v ${AZB_KERNEL_VERSION_FULL} |
||||
MK_CONF=\$(grep -v '#' /etc/mkinitcpio.conf | grep zfs >/dev/null; echo \$?); |
||||
if [[ \${MK_CONF} == '0' ]]; then |
||||
if [[ \$1 == 'remove' ]]; then |
||||
echo '>>> The ZFS packages have been removed, but "zfs" remains in the "hooks"' |
||||
echo '>>> list in mkinitcpio.conf! You will need to remove "zfs" from the ' |
||||
echo '>>> "hooks" list and then regenerate the initial ramdisk.' |
||||
else |
||||
echo ">>> Generating initial ramdisk, using mkinitcpio. Please wait..." |
||||
mkinitcpio -p linux |
||||
fi |
||||
fi |
||||
} |
||||
EOF |
Loading…
Reference in new issue