[zfs] commit zfs things to work on them

This commit is contained in:
Robert Förster 2018-11-14 18:52:11 +01:00
parent 38f8861377
commit add86b8426
14 changed files with 1759 additions and 0 deletions

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>ryao@gentoo.org</email>
<name>Richard Yao</name>
</maintainer>
<maintainer type="person">
<email>gyakovlev@gentoo.org</email>
<name>Georgy Yakovlev</name>
</maintainer>
<use>
<flag name="rootfs">Install zfs-shutdown script to support exporting a pool containing rootfs</flag>
</use>
<upstream>
<remote-id type="github">zfsonlinux/zfs</remote-id>
</upstream>
</pkgmetadata>

View File

@ -0,0 +1,145 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
if [ ${PV} == "9999" ]; then
AUTOTOOLS_AUTORECONF="1"
EGIT_REPO_URI="https://github.com/zfsonlinux/zfs.git"
inherit git-r3
else
SRC_URI="https://github.com/zfsonlinux/zfs/releases/download/zfs-${PV}/zfs-${PV}.tar.gz"
S="${WORKDIR}/zfs-${PV}"
KEYWORDS="~amd64"
fi
inherit flag-o-matic linux-info linux-mod toolchain-funcs autotools-utils
DESCRIPTION="Linux ZFS kernel module for sys-fs/zfs"
HOMEPAGE="http://zfsonlinux.org/"
LICENSE="CDDL debug? ( GPL-2+ )"
SLOT="0"
IUSE="custom-cflags debug +rootfs"
RESTRICT="debug? ( strip ) test"
DEPEND="
=sys-kernel/spl-${PV}*
dev-lang/perl
virtual/awk
"
RDEPEND="${DEPEND}
!sys-fs/zfs-fuse
"
AT_M4DIR="config"
AUTOTOOLS_IN_SOURCE_BUILD="1"
DOCS=( AUTHORS COPYRIGHT DISCLAIMER README.markdown )
pkg_setup() {
linux-info_pkg_setup
CONFIG_CHECK="
!DEBUG_LOCK_ALLOC
EFI_PARTITION
IOSCHED_NOOP
MODULES
!PAX_KERNEXEC_PLUGIN_METHOD_OR
ZLIB_DEFLATE
ZLIB_INFLATE
"
use debug && CONFIG_CHECK="${CONFIG_CHECK}
FRAME_POINTER
DEBUG_INFO
!DEBUG_INFO_REDUCED
"
use rootfs && \
CONFIG_CHECK="${CONFIG_CHECK}
BLK_DEV_INITRD
DEVTMPFS
"
kernel_is ge 2 6 32 || die "Linux 2.6.32 or newer required"
[ ${PV} != "9999" ] && \
{ kernel_is le 4 18 || die "Linux 4.18 is the latest supported version."; }
check_extra_config
}
src_prepare() {
# Remove GPLv2-licensed ZPIOS unless we are debugging
use debug || sed -e 's/^subdir-m += zpios$//' -i "${S}/module/Makefile.in"
# Set module revision number
[ ${PV} != "9999" ] && \
{ sed -i "s/\(Release:\)\(.*\)1/\1\2${PR}-gentoo/" "${S}/META" || die "Could not set Gentoo release"; }
autotools-utils_src_prepare
}
src_configure() {
local SPL_PATH="$(basename $(echo "${EROOT}usr/src/spl-"*))"
use custom-cflags || strip-flags
filter-ldflags -Wl,*
set_arch_to_kernel
local myeconfargs=(${myeconfargs}
--bindir="${EPREFIX}/bin"
--sbindir="${EPREFIX}/sbin"
--with-config=kernel
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
--with-spl="${EROOT}usr/src/${SPL_PATH}"
--with-spl-obj="${EROOT}usr/src/${SPL_PATH}/${KV_FULL}"
$(use_enable debug)
)
autotools-utils_src_configure
}
src_install() {
autotools-utils_src_install INSTALL_MOD_PATH="${INSTALL_MOD_PATH:-$EROOT}"
}
pkg_postinst() {
linux-mod_pkg_postinst
# Remove old modules
if [ -d "${EROOT}lib/modules/${KV_FULL}/addon/zfs" ]
then
ewarn "${PN} now installs modules in ${EROOT}lib/modules/${KV_FULL}/extra/zfs"
ewarn "Old modules were detected in ${EROOT}lib/modules/${KV_FULL}/addon/zfs"
ewarn "Automatically removing old modules to avoid problems."
rm -r "${EROOT}lib/modules/${KV_FULL}/addon/zfs" || die "Cannot remove modules"
rmdir --ignore-fail-on-non-empty "${EROOT}lib/modules/${KV_FULL}/addon"
fi
if use x86 || use arm
then
ewarn "32-bit kernels will likely require increasing vmalloc to"
ewarn "at least 256M and decreasing zfs_arc_max to some value less than that."
fi
ewarn "This version of ZFSOnLinux includes support for new feature flags"
ewarn "that are incompatible with previous versions. GRUB2 support for"
ewarn "/boot with the new feature flags is not yet available."
ewarn "Do *NOT* upgrade root pools to use the new feature flags."
ewarn "Any new pools will be created with the new feature flags by default"
ewarn "and will not be compatible with older versions of ZFSOnLinux. To"
ewarn "create a newpool that is backward compatible wih GRUB2, use "
ewarn
ewarn "zpool create -d -o feature@async_destroy=enabled "
ewarn " -o feature@empty_bpobj=enabled -o feature@lz4_compress=enabled"
ewarn " -o feature@spacemap_histogram=enabled"
ewarn " -o feature@enabled_txg=enabled "
ewarn " -o feature@extensible_dataset=enabled -o feature@bookmarks=enabled"
ewarn " ..."
ewarn
ewarn "GRUB2 support will be updated as soon as either the GRUB2"
ewarn "developers do a tag or the Gentoo developers find time to backport"
ewarn "support from GRUB2 HEAD."
}

View File

@ -0,0 +1,146 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
if [[ ${PV} == *"9999" ]] ; then
AUTOTOOLS_AUTORECONF="1"
EGIT_REPO_URI="https://github.com/zfsonlinux/zfs.git"
EGIT_BRANCH="zfs-0.7-release"
inherit git-r3
else
SRC_URI="https://github.com/zfsonlinux/zfs/releases/download/zfs-${PV}/zfs-${PV}.tar.gz"
S="${WORKDIR}/zfs-${PV}"
KEYWORDS="~amd64 ~arm ~ppc ~ppc64"
fi
inherit flag-o-matic linux-info linux-mod toolchain-funcs autotools-utils
DESCRIPTION="Linux ZFS kernel module for sys-fs/zfs"
HOMEPAGE="http://zfsonlinux.org/"
LICENSE="CDDL debug? ( GPL-2+ )"
SLOT="0"
IUSE="custom-cflags debug +rootfs"
RESTRICT="debug? ( strip ) test"
DEPEND="
=sys-kernel/spl-${PV}*
dev-lang/perl
virtual/awk
"
RDEPEND="${DEPEND}
!sys-fs/zfs-fuse
"
AT_M4DIR="config"
AUTOTOOLS_IN_SOURCE_BUILD="1"
DOCS=( AUTHORS COPYRIGHT DISCLAIMER README.markdown )
pkg_setup() {
linux-info_pkg_setup
CONFIG_CHECK="
!DEBUG_LOCK_ALLOC
EFI_PARTITION
IOSCHED_NOOP
MODULES
!PAX_KERNEXEC_PLUGIN_METHOD_OR
ZLIB_DEFLATE
ZLIB_INFLATE
"
use debug && CONFIG_CHECK="${CONFIG_CHECK}
FRAME_POINTER
DEBUG_INFO
!DEBUG_INFO_REDUCED
"
use rootfs && \
CONFIG_CHECK="${CONFIG_CHECK}
BLK_DEV_INITRD
DEVTMPFS
"
kernel_is ge 2 6 32 || die "Linux 2.6.32 or newer required"
[[ ${PV} != *"9999" ]] && \
{ kernel_is le 4 17 || die "Linux 4.17 is the latest supported version."; }
check_extra_config
}
src_prepare() {
# Remove GPLv2-licensed ZPIOS unless we are debugging
use debug || sed -e 's/^subdir-m += zpios$//' -i "${S}/module/Makefile.in"
# Set module revision number
[[ ${PV} != *"9999" ]] && \
{ sed -i "s/\(Release:\)\(.*\)1/\1\2${PR}-gentoo/" "${S}/META" || die "Could not set Gentoo release"; }
autotools-utils_src_prepare
}
src_configure() {
local SPL_PATH="$(basename $(echo "${EROOT}usr/src/spl-"*))"
use custom-cflags || strip-flags
filter-ldflags -Wl,*
set_arch_to_kernel
local myeconfargs=(${myeconfargs}
--bindir="${EPREFIX}/bin"
--sbindir="${EPREFIX}/sbin"
--with-config=kernel
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
--with-spl="${EROOT}usr/src/${SPL_PATH}"
--with-spl-obj="${EROOT}usr/src/${SPL_PATH}/${KV_FULL}"
$(use_enable debug)
)
autotools-utils_src_configure
}
src_install() {
autotools-utils_src_install INSTALL_MOD_PATH="${INSTALL_MOD_PATH:-$EROOT}"
}
pkg_postinst() {
linux-mod_pkg_postinst
# Remove old modules
if [ -d "${EROOT}lib/modules/${KV_FULL}/addon/zfs" ]
then
ewarn "${PN} now installs modules in ${EROOT}lib/modules/${KV_FULL}/extra/zfs"
ewarn "Old modules were detected in ${EROOT}lib/modules/${KV_FULL}/addon/zfs"
ewarn "Automatically removing old modules to avoid problems."
rm -r "${EROOT}lib/modules/${KV_FULL}/addon/zfs" || die "Cannot remove modules"
rmdir --ignore-fail-on-non-empty "${EROOT}lib/modules/${KV_FULL}/addon"
fi
if use x86 || use arm
then
ewarn "32-bit kernels will likely require increasing vmalloc to"
ewarn "at least 256M and decreasing zfs_arc_max to some value less than that."
fi
ewarn "This version of ZFSOnLinux includes support for new feature flags"
ewarn "that are incompatible with previous versions. GRUB2 support for"
ewarn "/boot with the new feature flags is not yet available."
ewarn "Do *NOT* upgrade root pools to use the new feature flags."
ewarn "Any new pools will be created with the new feature flags by default"
ewarn "and will not be compatible with older versions of ZFSOnLinux. To"
ewarn "create a newpool that is backward compatible wih GRUB2, use "
ewarn
ewarn "zpool create -d -o feature@async_destroy=enabled "
ewarn " -o feature@empty_bpobj=enabled -o feature@lz4_compress=enabled"
ewarn " -o feature@spacemap_histogram=enabled"
ewarn " -o feature@enabled_txg=enabled "
ewarn " -o feature@extensible_dataset=enabled -o feature@bookmarks=enabled"
ewarn " ..."
ewarn
ewarn "GRUB2 support will be updated as soon as either the GRUB2"
ewarn "developers do a tag or the Gentoo developers find time to backport"
ewarn "support from GRUB2 HEAD."
}

View File

@ -0,0 +1,120 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
if [ ${PV} == "9999" ]; then
AUTOTOOLS_AUTORECONF="1"
EGIT_REPO_URI="https://github.com/zfsonlinux/zfs.git"
inherit git-r3
else
SRC_URI="https://github.com/zfsonlinux/zfs/releases/download/zfs-${PV}/zfs-${PV}.tar.gz"
S="${WORKDIR}/zfs-${PV}"
KEYWORDS="~amd64 ~arm ~ppc ~ppc64"
fi
inherit flag-o-matic linux-info linux-mod toolchain-funcs autotools-utils
DESCRIPTION="Linux ZFS kernel module for sys-fs/zfs"
HOMEPAGE="http://zfsonlinux.org/"
LICENSE="CDDL GPL-2+"
SLOT="0"
IUSE="custom-cflags debug +rootfs"
RESTRICT="debug? ( strip ) test"
DEPEND="
dev-lang/perl
virtual/awk
"
RDEPEND="${DEPEND}
!sys-fs/zfs-fuse
!sys-kernel/spl
"
AT_M4DIR="config"
AUTOTOOLS_IN_SOURCE_BUILD="1"
DOCS=( AUTHORS COPYRIGHT NOTICE META README.md )
pkg_setup() {
linux-info_pkg_setup
CONFIG_CHECK="
!DEBUG_LOCK_ALLOC
!GRKERNSEC_RANDSTRUCT
!PAX_KERNEXEC_PLUGIN_METHOD_OR
!TRIM_UNUSED_KSYMS
EFI_PARTITION
IOSCHED_NOOP
KALLSYMS
MODULES
ZLIB_DEFLATE
ZLIB_INFLATE
"
use debug && CONFIG_CHECK="${CONFIG_CHECK}
FRAME_POINTER
DEBUG_INFO
!DEBUG_INFO_REDUCED
"
use rootfs && \
CONFIG_CHECK="${CONFIG_CHECK}
BLK_DEV_INITRD
DEVTMPFS
"
kernel_is ge 2 6 32 || die "Linux 2.6.32 or newer required"
[ ${PV} != "9999" ] && \
{ kernel_is le 4 17 || die "Linux 4.17 is the latest supported version."; }
check_extra_config
}
src_prepare() {
# Remove GPLv2-licensed ZPIOS unless we are debugging
use debug || sed -e 's/^subdir-m += zpios$//' -i "${S}/module/Makefile.in"
# Set module revision number
[ ${PV} != "9999" ] && \
{ sed -i "s/\(Release:\)\(.*\)1/\1\2${PR}-gentoo/" "${S}/META" || die "Could not set Gentoo release"; }
autotools-utils_src_prepare
}
src_configure() {
use custom-cflags || strip-flags
filter-ldflags -Wl,*
set_arch_to_kernel
local myeconfargs=(${myeconfargs}
--bindir="${EPREFIX}/bin"
--sbindir="${EPREFIX}/sbin"
--with-config=kernel
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
$(use_enable debug)
)
autotools-utils_src_configure
}
src_install() {
autotools-utils_src_install INSTALL_MOD_PATH="${INSTALL_MOD_PATH:-$EROOT}"
}
pkg_postinst() {
linux-mod_pkg_postinst
# Remove old modules
if [ -d "${EROOT}lib/modules/${KV_FULL}/addon/zfs" ]
then
ewarn "${PN} now installs modules in ${EROOT}lib/modules/${KV_FULL}/extra/zfs"
ewarn "Old modules were detected in ${EROOT}lib/modules/${KV_FULL}/addon/zfs"
ewarn "Automatically removing old modules to avoid problems."
rm -r "${EROOT}lib/modules/${KV_FULL}/addon/zfs" || die "Cannot remove modules"
rmdir --ignore-fail-on-non-empty "${EROOT}lib/modules/${KV_FULL}/addon"
fi
}

View File

@ -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

View File

@ -0,0 +1,29 @@
#!/bin/sh
ZFS="@sbindir@/zfs"
ZPOOL="@sbindir@/zpool"
ZPOOL_CACHE="@sysconfdir@/zfs/zpool.cache"
if [ -f "${ZPOOL_CACHE}" ]; then
"${ZPOOL}" import -c "${ZPOOL_CACHE}" -aN 2>/dev/null
if [ "${?}" != "0" ]; then
echo "Failed to import not-yet imported pools." >&2
fi
fi
echo "Mounting ZFS filesystems"
"${ZFS}" mount -a
if [ "${?}" != "0" ]; then
echo "Failed to mount ZFS filesystems." >&2
exit 1
fi
echo "Exporting ZFS filesystems"
"${ZFS}" share -a
if [ "${?}" != "0" ]; then
echo "Failed to export ZFS filesystems." >&2
exit 1
fi
exit 0

View File

@ -0,0 +1,16 @@
[Unit]
Description=ZFS filesystems setup
Before=network.target
After=systemd-udev-settle.target local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=-/sbin/modprobe zfs
ExecStartPre=/usr/bin/test -c /dev/zfs
ExecStart=/usr/libexec/zfs-init.sh
ExecStop=@sbindir@/zfs umount -a
[Install]
WantedBy=multi-user.target

20
sys-fs/zfs/metadata.xml Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>ryao@gentoo.org</email>
<name>Richard Yao</name>
</maintainer>
<maintainer type="person">
<email>gyakovlev@gentoo.org</email>
<name>Georgy Yakovlev</name>
</maintainer>
<use>
<flag name="kernel-builtin">Disable dependency on sys-fs/zfs-kmod under the assumption that ZFS is part of the kernel source tree</flag>
<flag name="rootfs">Enable dependencies required for booting off a pool containing a rootfs</flag>
<flag name="test-suite">Install regression test suite</flag>
</use>
<upstream>
<remote-id type="github">zfsonlinux/zfs</remote-id>
</upstream>
</pkgmetadata>

View File

@ -0,0 +1,210 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} )
if [ ${PV} == "9999" ] ; then
inherit git-r3 linux-mod
AUTOTOOLS_AUTORECONF="1"
EGIT_REPO_URI="git://github.com/zfsonlinux/${PN}.git"
else
SRC_URI="https://github.com/zfsonlinux/${PN}/releases/download/${P}/${P}.tar.gz"
KEYWORDS="~amd64"
fi
inherit autotools-utils bash-completion-r1 flag-o-matic linux-info python-r1 systemd toolchain-funcs udev
DESCRIPTION="Userland utilities for ZFS Linux kernel module"
HOMEPAGE="http://zfsonlinux.org/"
LICENSE="BSD-2 CDDL MIT"
SLOT="0"
IUSE="custom-cflags debug kernel-builtin +rootfs test-suite static-libs"
RESTRICT="test"
COMMON_DEPEND="
net-libs/libtirpc
sys-apps/util-linux[static-libs?]
sys-libs/zlib[static-libs(+)?]
virtual/awk
"
DEPEND="${COMMON_DEPEND}
virtual/pkgconfig
"
RDEPEND="${COMMON_DEPEND}
!=sys-apps/grep-2.13*
!kernel-builtin? ( =sys-fs/zfs-kmod-${PV}* )
!sys-fs/zfs-fuse
!prefix? ( virtual/udev )
test-suite? (
sys-apps/util-linux
sys-devel/bc
sys-block/parted
sys-fs/lsscsi
sys-fs/mdadm
sys-process/procps
virtual/modutils
)
rootfs? (
app-arch/cpio
app-misc/pax-utils
!<sys-boot/grub-2.00-r2:2
!<sys-kernel/genkernel-3.5.1.1
!<sys-kernel/genkernel-next-67
!<sys-kernel/bliss-initramfs-7.1.0
!<sys-kernel/dracut-044-r1
)
sys-fs/udev-init-scripts
"
AT_M4DIR="config"
AUTOTOOLS_IN_SOURCE_BUILD="1"
pkg_setup() {
if use kernel_linux && use test-suite; then
linux-info_pkg_setup
if ! linux_config_exists; then
ewarn "Cannot check the linux kernel configuration."
else
# recheck that we don't have usblp to collide with libusb
if use test-suite; then
if linux_chkconfig_present BLK_DEV_LOOP; then
eerror "The ZFS test suite requires loop device support enabled."
eerror "Please enable it:"
eerror " CONFIG_BLK_DEV_LOOP=y"
eerror "in /usr/src/linux/.config or"
eerror " Device Drivers --->"
eerror " Block devices --->"
eerror " [ ] Loopback device support"
fi
fi
fi
fi
}
src_prepare() {
# Update paths
sed -e "s|/sbin/lsmod|/bin/lsmod|" \
-e "s|/usr/bin/scsi-rescan|/usr/sbin/rescan-scsi-bus|" \
-e "s|/sbin/parted|/usr/sbin/parted|" \
-i scripts/common.sh.in
autotools-utils_src_prepare
}
src_configure() {
use custom-cflags || strip-flags
local myeconfargs=(
--bindir="${EPREFIX}/bin"
--sbindir="${EPREFIX}/sbin"
--with-config=user
--with-dracutdir="${EPREFIX}/usr/lib/dracut"
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
--with-udevdir="$(get_udevdir)"
--with-systemdunitdir="$(systemd_get_systemunitdir)"
--with-systemdpresetdir="${EPREFIX}/lib/systemd/system-preset"
$(use_enable debug)
)
autotools-utils_src_configure
# prepare systemd unit and helper script
cat "${FILESDIR}/zfs.service.in" | \
sed -e "s:@sbindir@:${EPREFIX}/sbin:g" \
-e "s:@sysconfdir@:${EPREFIX}/etc:g" \
> "${T}/zfs.service" || die
cat "${FILESDIR}/zfs-init.sh.in" | \
sed -e "s:@sbindir@:${EPREFIX}/sbin:g" \
-e "s:@sysconfdir@:${EPREFIX}/etc:g" \
> "${T}/zfs-init.sh" || die
}
src_install() {
autotools-utils_src_install
gen_usr_ldscript -a uutil nvpair zpool zfs zfs_core
use test-suite || rm -rf "${ED}usr/share/zfs"
newbashcomp "${FILESDIR}/bash-completion-r1" zfs
bashcomp_alias zfs zpool
exeinto /usr/libexec
doexe "${T}/zfs-init.sh"
systemd_dounit "${T}/zfs.service"
}
pkg_postinst() {
if ! use kernel-builtin && [ ${PV} = "9999" ]
then
einfo "Adding ${P} to the module database to ensure that the"
einfo "kernel modules and userland utilities stay in sync."
update_moduledb
fi
if [ -e "${EROOT}etc/runlevels/boot/zfs" ]
then
einfo 'The zfs boot script has been split into the zfs-import,'
einfo 'zfs-mount and zfs-share scripts.'
einfo
einfo 'You had the zfs script in your boot runlevel. For your'
einfo 'convenience, it has been automatically removed and the three'
einfo 'scripts that replace it have been configured to start.'
einfo 'The zfs-import and zfs-mount scripts have been added to the boot'
einfo 'runlevel while the zfs-share script is in the default runlevel.'
rm "${EROOT}etc/runlevels/boot/zfs"
ln -snf "${EROOT}etc/init.d/zfs-import" \
"${EROOT}etc/runlevels/boot/zfs-import"
ln -snf "${EROOT}etc/init.d/zfs-mount" \
"${EROOT}etc/runlevels/boot/zfs-mount"
ln -snf "${EROOT}etc/init.d/zfs-share" \
"${EROOT}etc/runlevels/default/zfs-share"
else
[ -e "${EROOT}etc/runlevels/boot/zfs-import" ] || \
einfo "You should add zfs-import to the boot runlevel."
[ -e "${EROOT}etc/runlevels/boot/zfs-mount" ] || \
einfo "You should add zfs-mount to the boot runlevel."
[ -e "${EROOT}etc/runlevels/default/zfs-share" ] || \
einfo "You should add zfs-share to the default runlevel."
fi
if [ -e "${EROOT}etc/runlevels/default/zed" ]
then
einfo 'The downstream OpenRC zed script has replaced by the upstream'
einfo 'OpenRC zfs-zed script.'
einfo
einfo 'You had the zed script in your default runlevel. For your'
einfo 'convenience, it has been automatically removed and the zfs-zed'
einfo 'script that replaced it has been configured to start.'
rm "${EROOT}etc/runlevels/boot/zed"
ln -snf "${EROOT}etc/init.d/zfs-sed" \
"${EROOT}etc/runlevels/default/zfs-zed"
else
[ -e "${EROOT}etc/runlevels/default/zfs-zed" ] || \
einfo "You should add zfs-zed to the default runlevel."
fi
if [ -e "${EROOT}etc/runlevels/shutdown/zfs-shutdown" ]
then
einfo "The zfs-shutdown script is obsolete. Removing it from runlevel."
rm "${EROOT}etc/runlevels/shutdown/zfs-shutdown"
fi
systemd_reenable zfs-zed.service
systemd_reenable zfs-import-cache.service
systemd_reenable zfs-import-scan.service
systemd_reenable zfs-mount.service
systemd_reenable zfs-share.service
systemd_reenable zfs-import.target
systemd_reenable zfs.target
systemd_reenable zfs.service
}
pkg_postrm() {
if ! use kernel-builtin && [ ${PV} = "9999" ]
then
remove_moduledb
fi
}

View File

@ -0,0 +1,208 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} )
if [[ ${PV} == *"9999" ]] ; then
AUTOTOOLS_AUTORECONF="1"
EGIT_REPO_URI="https://github.com/zfsonlinux/${PN}.git"
EGIT_BRANCH="zfs-0.7-release"
inherit git-r3 linux-mod
else
SRC_URI="https://github.com/zfsonlinux/${PN}/releases/download/${P}/${P}.tar.gz"
KEYWORDS="~amd64 ~arm ~ppc ~ppc64"
fi
inherit autotools-utils bash-completion-r1 flag-o-matic linux-info python-r1 systemd toolchain-funcs udev
DESCRIPTION="Userland utilities for ZFS Linux kernel module"
HOMEPAGE="http://zfsonlinux.org/"
LICENSE="BSD-2 CDDL MIT"
SLOT="0"
IUSE="custom-cflags debug kernel-builtin +rootfs test-suite static-libs"
RESTRICT="test"
COMMON_DEPEND="
net-libs/libtirpc
sys-apps/util-linux[static-libs?]
sys-libs/zlib[static-libs(+)?]
virtual/awk
"
DEPEND="${COMMON_DEPEND}
virtual/pkgconfig
"
RDEPEND="${COMMON_DEPEND}
!=sys-apps/grep-2.13*
!kernel-builtin? ( =sys-fs/zfs-kmod-${PV}* )
!sys-fs/zfs-fuse
!prefix? ( virtual/udev )
test-suite? (
sys-apps/util-linux
sys-devel/bc
sys-block/parted
sys-fs/lsscsi
sys-fs/mdadm
sys-process/procps
virtual/modutils
)
rootfs? (
app-arch/cpio
app-misc/pax-utils
!<sys-boot/grub-2.00-r2:2
)
"
AT_M4DIR="config"
AUTOTOOLS_IN_SOURCE_BUILD="1"
pkg_setup() {
if use kernel_linux && use test-suite; then
linux-info_pkg_setup
if ! linux_config_exists; then
ewarn "Cannot check the linux kernel configuration."
else
# recheck that we don't have usblp to collide with libusb
if use test-suite; then
if linux_chkconfig_present BLK_DEV_LOOP; then
eerror "The ZFS test suite requires loop device support enabled."
eerror "Please enable it:"
eerror " CONFIG_BLK_DEV_LOOP=y"
eerror "in /usr/src/linux/.config or"
eerror " Device Drivers --->"
eerror " Block devices --->"
eerror " [ ] Loopback device support"
fi
fi
fi
fi
}
src_prepare() {
# Update paths
sed -e "s|/sbin/lsmod|/bin/lsmod|" \
-e "s|/usr/bin/scsi-rescan|/usr/sbin/rescan-scsi-bus|" \
-e "s|/sbin/parted|/usr/sbin/parted|" \
-i scripts/common.sh.in
autotools-utils_src_prepare
}
src_configure() {
use custom-cflags || strip-flags
local myeconfargs=(
--bindir="${EPREFIX}/bin"
--sbindir="${EPREFIX}/sbin"
--with-config=user
--with-dracutdir="${EPREFIX}/usr/lib/dracut"
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
--with-udevdir="$(get_udevdir)"
--with-systemdunitdir="$(systemd_get_systemunitdir)"
--with-systemdpresetdir="${EPREFIX}/lib/systemd/system-preset"
$(use_enable debug)
)
autotools-utils_src_configure
# prepare systemd unit and helper script
cat "${FILESDIR}/zfs.service.in" | \
sed -e "s:@sbindir@:${EPREFIX}/sbin:g" \
-e "s:@sysconfdir@:${EPREFIX}/etc:g" \
> "${T}/zfs.service" || die
cat "${FILESDIR}/zfs-init.sh.in" | \
sed -e "s:@sbindir@:${EPREFIX}/sbin:g" \
-e "s:@sysconfdir@:${EPREFIX}/etc:g" \
> "${T}/zfs-init.sh" || die
}
src_install() {
autotools-utils_src_install
gen_usr_ldscript -a uutil nvpair zpool zfs zfs_core
use test-suite || rm -rf "${ED}usr/share/zfs"
newbashcomp "${FILESDIR}/bash-completion-r1" zfs
bashcomp_alias zfs zpool
exeinto /usr/libexec
doexe "${T}/zfs-init.sh"
systemd_dounit "${T}/zfs.service"
}
pkg_postinst() {
if ! use kernel-builtin && [[ ${PV} = *"9999" ]]
then
einfo "Adding ${P} to the module database to ensure that the"
einfo "kernel modules and userland utilities stay in sync."
update_moduledb
fi
if [ -e "${EROOT}etc/runlevels/boot/zfs" ]
then
einfo 'The zfs boot script has been split into the zfs-import,'
einfo 'zfs-mount and zfs-share scripts.'
einfo
einfo 'You had the zfs script in your boot runlevel. For your'
einfo 'convenience, it has been automatically removed and the three'
einfo 'scripts that replace it have been configured to start.'
einfo 'The zfs-import and zfs-mount scripts have been added to the boot'
einfo 'runlevel while the zfs-share script is in the default runlevel.'
rm "${EROOT}etc/runlevels/boot/zfs"
ln -snf "${EROOT}etc/init.d/zfs-import" \
"${EROOT}etc/runlevels/boot/zfs-import"
ln -snf "${EROOT}etc/init.d/zfs-mount" \
"${EROOT}etc/runlevels/boot/zfs-mount"
ln -snf "${EROOT}etc/init.d/zfs-share" \
"${EROOT}etc/runlevels/default/zfs-share"
else
[ -e "${EROOT}etc/runlevels/boot/zfs-import" ] || \
einfo "You should add zfs-import to the boot runlevel."
[ -e "${EROOT}etc/runlevels/boot/zfs-mount" ] || \
einfo "You should add zfs-mount to the boot runlevel."
[ -e "${EROOT}etc/runlevels/default/zfs-share" ] || \
einfo "You should add zfs-share to the default runlevel."
fi
if [ -e "${EROOT}etc/runlevels/default/zed" ]
then
einfo 'The downstream OpenRC zed script has replaced by the upstream'
einfo 'OpenRC zfs-zed script.'
einfo
einfo 'You had the zed script in your default runlevel. For your'
einfo 'convenience, it has been automatically removed and the zfs-zed'
einfo 'script that replaced it has been configured to start.'
rm "${EROOT}etc/runlevels/boot/zed"
ln -snf "${EROOT}etc/init.d/zfs-sed" \
"${EROOT}etc/runlevels/default/zfs-zed"
else
[ -e "${EROOT}etc/runlevels/default/zfs-zed" ] || \
einfo "You should add zfs-zed to the default runlevel."
fi
if [ -e "${EROOT}etc/runlevels/shutdown/zfs-shutdown" ]
then
einfo "The zfs-shutdown script is obsolete. Removing it from runlevel."
rm "${EROOT}etc/runlevels/shutdown/zfs-shutdown"
fi
systemd_reenable zfs-zed.service
systemd_reenable zfs-import-cache.service
systemd_reenable zfs-import-scan.service
systemd_reenable zfs-mount.service
systemd_reenable zfs-share.service
systemd_reenable zfs-import.target
systemd_reenable zfs.target
systemd_reenable zfs.service
}
pkg_postrm() {
if ! use kernel-builtin && [[ ${PV} = *"9999" ]]
then
remove_moduledb
fi
}

217
sys-fs/zfs/zfs-9999.ebuild Normal file
View File

@ -0,0 +1,217 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} )
if [ ${PV} == "9999" ] ; then
inherit git-r3 linux-mod
AUTOTOOLS_AUTORECONF="1"
EGIT_REPO_URI="https://github.com/zfsonlinux/${PN}.git"
else
SRC_URI="https://github.com/zfsonlinux/${PN}/releases/download/${P}/${P}.tar.gz"
KEYWORDS="~amd64 ~arm ~ppc ~ppc64"
fi
inherit autotools-utils bash-completion-r1 flag-o-matic linux-info python-r1 systemd toolchain-funcs udev
DESCRIPTION="Userland utilities for ZFS Linux kernel module"
HOMEPAGE="http://zfsonlinux.org/"
LICENSE="BSD-2 CDDL MIT"
SLOT="0"
IUSE="custom-cflags debug kernel-builtin +rootfs test-suite static-libs"
RESTRICT="test"
COMMON_DEPEND="
net-libs/libtirpc
sys-apps/util-linux[static-libs?]
sys-libs/zlib[static-libs(+)?]
virtual/awk
"
DEPEND="${COMMON_DEPEND}
virtual/pkgconfig
"
RDEPEND="${COMMON_DEPEND}
!=sys-apps/grep-2.13*
!kernel-builtin? ( =sys-fs/zfs-kmod-${PV}* )
!sys-fs/zfs-fuse
!prefix? ( virtual/udev )
test-suite? (
sys-apps/util-linux
sys-devel/bc
sys-block/parted
sys-fs/lsscsi
sys-fs/mdadm
sys-process/procps
virtual/modutils
)
rootfs? (
app-arch/cpio
app-misc/pax-utils
!<sys-boot/grub-2.00-r2:2
)
"
AT_M4DIR="config"
AUTOTOOLS_IN_SOURCE_BUILD="1"
pkg_setup() {
if use kernel_linux && use test-suite; then
linux-info_pkg_setup
if ! linux_config_exists; then
ewarn "Cannot check the linux kernel configuration."
else
# recheck that we don't have usblp to collide with libusb
if use test-suite; then
if linux_chkconfig_present BLK_DEV_LOOP; then
eerror "The ZFS test suite requires loop device support enabled."
eerror "Please enable it:"
eerror " CONFIG_BLK_DEV_LOOP=y"
eerror "in /usr/src/linux/.config or"
eerror " Device Drivers --->"
eerror " Block devices --->"
eerror " [ ] Loopback device support"
fi
fi
fi
fi
}
src_prepare() {
# Update paths
sed -e "s|/sbin/lsmod|/bin/lsmod|" \
-e "s|/usr/bin/scsi-rescan|/usr/sbin/rescan-scsi-bus|" \
-e "s|/sbin/parted|/usr/sbin/parted|" \
-i scripts/common.sh.in
if use kernel-builtin
then
einfo "kernel-builtin enabled, removing module loading from"
einfo "systemd units."
sed -i -e '/modprobe\ zfs/d' etc/systemd/system/*.service.in || die
fi
autotools-utils_src_prepare
}
src_configure() {
use custom-cflags || strip-flags
local myeconfargs=(
--bindir="${EPREFIX}/bin"
--sbindir="${EPREFIX}/sbin"
--with-config=user
--with-dracutdir="${EPREFIX}/usr/lib/dracut"
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
--with-udevdir="$(get_udevdir)"
--with-systemdunitdir="$(systemd_get_systemunitdir)"
--with-systemdpresetdir="${EPREFIX}/lib/systemd/system-preset"
$(use_enable debug)
)
autotools-utils_src_configure
# prepare systemd unit and helper script
cat "${FILESDIR}/zfs.service.in" | \
sed -e "s:@sbindir@:${EPREFIX}/sbin:g" \
-e "s:@sysconfdir@:${EPREFIX}/etc:g" \
> "${T}/zfs.service" || die
cat "${FILESDIR}/zfs-init.sh.in" | \
sed -e "s:@sbindir@:${EPREFIX}/sbin:g" \
-e "s:@sysconfdir@:${EPREFIX}/etc:g" \
> "${T}/zfs-init.sh" || die
if use kernel-builtin
then
sed -i -e '/modprobe\ zfs/d' "${T}/zfs.service" || die
fi
}
src_install() {
autotools-utils_src_install
gen_usr_ldscript -a uutil nvpair zpool zfs zfs_core
use test-suite || rm -rf "${ED}usr/share/zfs"
newbashcomp "${FILESDIR}/bash-completion-r1" zfs
bashcomp_alias zfs zpool
exeinto /usr/libexec
doexe "${T}/zfs-init.sh"
systemd_dounit "${T}/zfs.service"
}
pkg_postinst() {
if ! use kernel-builtin && [ ${PV} = "9999" ]
then
einfo "Adding ${P} to the module database to ensure that the"
einfo "kernel modules and userland utilities stay in sync."
update_moduledb
fi
if [ -e "${EROOT}etc/runlevels/boot/zfs" ]
then
einfo 'The zfs boot script has been split into the zfs-import,'
einfo 'zfs-mount and zfs-share scripts.'
einfo
einfo 'You had the zfs script in your boot runlevel. For your'
einfo 'convenience, it has been automatically removed and the three'
einfo 'scripts that replace it have been configured to start.'
einfo 'The zfs-import and zfs-mount scripts have been added to the boot'
einfo 'runlevel while the zfs-share script is in the default runlevel.'
rm "${EROOT}etc/runlevels/boot/zfs"
ln -snf "${EROOT}etc/init.d/zfs-import" \
"${EROOT}etc/runlevels/boot/zfs-import"
ln -snf "${EROOT}etc/init.d/zfs-mount" \
"${EROOT}etc/runlevels/boot/zfs-mount"
ln -snf "${EROOT}etc/init.d/zfs-share" \
"${EROOT}etc/runlevels/default/zfs-share"
else
[ -e "${EROOT}etc/runlevels/boot/zfs-import" ] || \
einfo "You should add zfs-import to the boot runlevel."
[ -e "${EROOT}etc/runlevels/boot/zfs-mount" ] || \
einfo "You should add zfs-mount to the boot runlevel."
[ -e "${EROOT}etc/runlevels/default/zfs-share" ] || \
einfo "You should add zfs-share to the default runlevel."
fi
if [ -e "${EROOT}etc/runlevels/default/zed" ]
then
einfo 'The downstream OpenRC zed script has replaced by the upstream'
einfo 'OpenRC zfs-zed script.'
einfo
einfo 'You had the zed script in your default runlevel. For your'
einfo 'convenience, it has been automatically removed and the zfs-zed'
einfo 'script that replaced it has been configured to start.'
rm "${EROOT}etc/runlevels/boot/zed"
ln -snf "${EROOT}etc/init.d/zfs-sed" \
"${EROOT}etc/runlevels/default/zfs-zed"
else
[ -e "${EROOT}etc/runlevels/default/zfs-zed" ] || \
einfo "You should add zfs-zed to the default runlevel."
fi
if [ -e "${EROOT}etc/runlevels/shutdown/zfs-shutdown" ]
then
einfo "The zfs-shutdown script is obsolete. Removing it from runlevel."
rm "${EROOT}etc/runlevels/shutdown/zfs-shutdown"
fi
systemd_reenable zfs-zed.service
systemd_reenable zfs-import-cache.service
systemd_reenable zfs-import-scan.service
systemd_reenable zfs-mount.service
systemd_reenable zfs-share.service
systemd_reenable zfs-import.target
systemd_reenable zfs.target
systemd_reenable zfs.service
}
pkg_postrm() {
if ! use kernel-builtin && [ ${PV} = "9999" ]
then
remove_moduledb
fi
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>ryao@gentoo.org</email>
<name>Richard Yao</name>
</maintainer>
<maintainer type="person">
<email>gyakovlev@gentoo.org</email>
<name>Georgy Yakovlev</name>
</maintainer>
<upstream>
<remote-id type="github">zfsonlinux/spl</remote-id>
</upstream>
</pkgmetadata>

View File

@ -0,0 +1,111 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
if [[ ${PV} == "9999" ]] ; then
AUTOTOOLS_AUTORECONF="1"
EGIT_REPO_URI="https://github.com/zfsonlinux/${PN}.git"
inherit git-r3
else
SRC_URI="https://github.com/zfsonlinux/zfs/releases/download/zfs-${PV}/${P}.tar.gz"
KEYWORDS="~amd64"
fi
inherit flag-o-matic linux-info linux-mod autotools-utils
DESCRIPTION="The Solaris Porting Layer provides many of the Solaris kernel APIs"
HOMEPAGE="http://zfsonlinux.org/"
LICENSE="GPL-2"
SLOT="0"
IUSE="custom-cflags debug"
RESTRICT="debug? ( strip ) test"
COMMON_DEPEND="
dev-lang/perl
virtual/awk"
DEPEND="${COMMON_DEPEND}"
RDEPEND="${COMMON_DEPEND}
!sys-devel/spl"
AT_M4DIR="config"
AUTOTOOLS_IN_SOURCE_BUILD="1"
DOCS=( AUTHORS DISCLAIMER )
pkg_setup() {
linux-info_pkg_setup
CONFIG_CHECK="
!DEBUG_LOCK_ALLOC
MODULES
KALLSYMS
!PAX_KERNEXEC_PLUGIN_METHOD_OR
!PAX_SIZE_OVERFLOW
ZLIB_DEFLATE
ZLIB_INFLATE
"
use debug && CONFIG_CHECK="${CONFIG_CHECK}
FRAME_POINTER
DEBUG_INFO
!DEBUG_INFO_REDUCED
"
kernel_is ge 2 6 32 || die "Linux 2.6.32 or newer required"
[ ${PV} != "9999" ] && \
{ kernel_is le 4 18 || die "Linux 4.18 is the latest supported version."; }
check_extra_config
}
src_prepare() {
# Workaround for hard coded path
sed -i "s|/sbin/lsmod|/bin/lsmod|" "${S}/scripts/check.sh" || \
die "Cannot patch check.sh"
# splat is unnecessary unless we are debugging
use debug || { sed -e 's/^subdir-m += splat$//' -i "${S}/module/Makefile.in" || die ; }
# Set module revision number
[ ${PV} != "9999" ] && \
{ sed -i "s/\(Release:\)\(.*\)1/\1\2${PR}-gentoo/" "${S}/META" || die "Could not set Gentoo release"; }
autotools-utils_src_prepare
}
src_configure() {
use custom-cflags || strip-flags
filter-ldflags -Wl,*
set_arch_to_kernel
local myeconfargs=(
--bindir="${EPREFIX}/bin"
--sbindir="${EPREFIX}/sbin"
--with-config=all
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
$(use_enable debug)
)
autotools-utils_src_configure
}
src_install() {
autotools-utils_src_install INSTALL_MOD_PATH="${INSTALL_MOD_PATH:-$EROOT}"
}
pkg_postinst() {
linux-mod_pkg_postinst
# Remove old modules
if [ -d "${EROOT}lib/modules/${KV_FULL}/addon/spl" ]
then
ewarn "${PN} now installs modules in ${EROOT}lib/modules/${KV_FULL}/extra/spl"
ewarn "Old modules were detected in ${EROOT}lib/modules/${KV_FULL}/addon/spl"
ewarn "Automatically removing old modules to avoid problems."
rm -r "${EROOT}lib/modules/${KV_FULL}/addon/spl" || die "Cannot remove modules"
rmdir --ignore-fail-on-non-empty "${EROOT}lib/modules/${KV_FULL}/addon"
fi
}

View File

@ -0,0 +1,113 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
if [[ ${PV} == *"9999" ]] ; then
AUTOTOOLS_AUTORECONF="1"
EGIT_REPO_URI="https://github.com/zfsonlinux/${PN}.git"
EGIT_BRANCH="spl-0.7-release"
inherit git-r3
else
SRC_URI="https://github.com/zfsonlinux/zfs/releases/download/zfs-${PV}/${P}.tar.gz"
KEYWORDS="~amd64 ~arm ~ppc ~ppc64"
fi
inherit flag-o-matic linux-info linux-mod autotools-utils
DESCRIPTION="The Solaris Porting Layer provides many of the Solaris kernel APIs"
HOMEPAGE="http://zfsonlinux.org/"
LICENSE="GPL-2"
SLOT="0"
IUSE="custom-cflags debug"
RESTRICT="debug? ( strip ) test"
COMMON_DEPEND="
dev-lang/perl
virtual/awk"
DEPEND="${COMMON_DEPEND}"
RDEPEND="${COMMON_DEPEND}
!sys-devel/spl"
AT_M4DIR="config"
AUTOTOOLS_IN_SOURCE_BUILD="1"
DOCS=( AUTHORS DISCLAIMER README.markdown )
pkg_setup() {
linux-info_pkg_setup
CONFIG_CHECK="
!DEBUG_LOCK_ALLOC
!CONFIG_REISER4_FS
!GRKERNSEC_RANDSTRUCT
KALLSYMS
MODULES
!PAX_KERNEXEC_PLUGIN_METHOD_OR
ZLIB_DEFLATE
ZLIB_INFLATE
"
use debug && CONFIG_CHECK="${CONFIG_CHECK}
FRAME_POINTER
DEBUG_INFO
!DEBUG_INFO_REDUCED
"
kernel_is ge 2 6 32 || die "Linux 2.6.32 or newer required"
[ ${PV} != *"9999" ] && \
{ kernel_is le 4 17 || die "Linux 4.17 is the latest supported version."; }
check_extra_config
}
src_prepare() {
# Workaround for hard coded path
sed -i "s|/sbin/lsmod|/bin/lsmod|" "${S}/scripts/check.sh" || \
die "Cannot patch check.sh"
# splat is unnecessary unless we are debugging
use debug || { sed -e 's/^subdir-m += splat$//' -i "${S}/module/Makefile.in" || die ; }
# Set module revision number
[ ${PV} != *"9999" ] && \
{ sed -i "s/\(Release:\)\(.*\)1/\1\2${PR}-gentoo/" "${S}/META" || die "Could not set Gentoo release"; }
autotools-utils_src_prepare
}
src_configure() {
use custom-cflags || strip-flags
filter-ldflags -Wl,*
set_arch_to_kernel
local myeconfargs=(
--bindir="${EPREFIX}/bin"
--sbindir="${EPREFIX}/sbin"
--with-config=all
--with-linux="${KV_DIR}"
--with-linux-obj="${KV_OUT_DIR}"
$(use_enable debug)
)
autotools-utils_src_configure
}
src_install() {
autotools-utils_src_install INSTALL_MOD_PATH="${INSTALL_MOD_PATH:-$EROOT}"
}
pkg_postinst() {
linux-mod_pkg_postinst
# Remove old modules
if [ -d "${EROOT}lib/modules/${KV_FULL}/addon/spl" ]
then
ewarn "${PN} now installs modules in ${EROOT}lib/modules/${KV_FULL}/extra/spl"
ewarn "Old modules were detected in ${EROOT}lib/modules/${KV_FULL}/addon/spl"
ewarn "Automatically removing old modules to avoid problems."
rm -r "${EROOT}lib/modules/${KV_FULL}/addon/spl" || die "Cannot remove modules"
rmdir --ignore-fail-on-non-empty "${EROOT}lib/modules/${KV_FULL}/addon"
fi
}