1 # Copyright 1999-2009 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
5 inherit eutils linux-mod
7 DESCRIPTION="An entirely re-designed and re-implemented Unionfs."
8 HOMEPAGE="http://aufs.sourceforge.net/"
9 SRC_URI="http://dev.gentooexperimental.org/~tommy/distfiles/${P}.tar.bz2"
13 KEYWORDS="~amd64 ~x86"
14 IUSE="debug fuse hinotify nfs nfsexport robr sec_perm"
18 MODULE_NAMES="aufs(misc:${S})"
21 # kernel version check
22 if kernel_is lt 2 6 16 ; then
23 eerror "${PN} is being developed and tested on linux-2.6.16 and later."
24 eerror "Make sure you have a proper kernel version!"
25 die "Wrong kernel version"
30 # assume no kernel patches will be applied today
31 APPLY_KERNEL_PATCH="n"
33 # Check if sec_perm patch needs to be applied
34 if kernel_is ge 2 6 24 && linux_chkconfig_present "SECURITY" ; then
35 APPLY_SEC_PERM_PATCH="n"
36 if ! grep -qs "EXPORT_SYMBOL(security_inode_permission);" "${KV_DIR}/security/security.c" ; then
37 APPLY_SEC_PERM_PATCH="y"
38 APPLY_KERNEL_PATCH="y"
41 # make sure the user is allowing this to happen
42 if [[ APPLY_SEC_PERM_PATCH = "y" ]] && ! use sec_perm; then
43 eerror "${PN} requires that all kernels with CONFIG_SECURITY enabled >= 2.6.24"
44 eerror "be patched. Please enable USE=\"sec_perm\" to allow this patch to be"
46 die "Invalid configuration"
48 # Also check to make sure they aren't enabling it when they don't need to
50 if use sec_perm ; then
51 eerror "${PN} does not require the sec_perm patch to be applied to your kernel."
52 eerror "Please disabe the sec_perm USE flag: USE=\"-sec_perm\"."
53 die "Invalid configuration"
57 # Check for applicability of lhash patch for NFS branch support
58 # Check if lhash Patch has to be applied
59 if use nfs && kernel_is ge 2 6 19 ; then
61 # If lhash patch is not applied
62 if ! grep -qs "EXPORT_SYMBOL(__lookup_hash);" "${KV_DIR}/fs/namei.c" \
63 && ! grep -qs "struct dentry * __lookup_hash(struct qstr *name, struct dentry * base, struct nameidata *nd);" "${KV_DIR}/fs/namei.h" ; then
65 APPLY_KERNEL_PATCH="y"
70 # If a patch has to be applied
71 if [[ ${APPLY_KERNEL_PATCH} == "y" ]] ; then
72 ewarn "Patching your kernel..."
75 # If the sec_perm patch has to be applied
76 if [[ ${APPLY_SEC_PERM_PATCH} == "y" ]] ; then
77 epatch "${FILESDIR}"/${P}-sec_perm-2.6.24.patch
80 # if the lhash patch has to be applied
81 if [[ ${APPLY_LHASH_PATCH} == "y" ]] ; then
82 if kernel_is ge 2 6 24 ; then
83 epatch "${FILESDIR}"/${PN}-lhash-2.6.24.patch
85 if kernel_is ge 2 6 22 ; then
86 epatch "${FILESDIR}"/${PN}-lhash-2.6.22.patch
88 epatch "${FILESDIR}"/${PN}-lhash-2.6.19.patch
101 # Enable hinotify in priv_def.mk
102 if use hinotify && kernel_is ge 2 6 18 ; then
103 echo "CONFIG_AUFS_HINOTIFY = y" >> priv_def.mk || die "setting hinotify in priv_def.mk failed!"
106 # Disable SYSAUFS for kernel less than 2.6.18
107 if kernel_is lt 2 6 18 ; then
108 echo "CONFIG_AUFS_SYSAUFS = " >> priv_def.mk || die "unsetting sysaufs in priv_def.mk failed!"
111 # Enable nfsexport in priv_def.mk
112 if use nfsexport && kernel_is ge 2 6 18 ; then
113 echo "CONFIG_AUFS_EXPORT = y" >> priv_def.mk || die "setting export in priv_def.mk failed!"
116 # Enable lhash Patch in priv_def.mk
117 if use nfs && kernel_is ge 2 6 19 ; then
118 echo "CONFIG_AUFS_LHASH_PATCH = y" >> priv_def.mk || die "setting lhash in priv_def.mk failed!"
121 # Enable aufs readonly-branch in priv_def.mk
123 echo "CONFIG_AUFS_ROBR = y" >> priv_def.mk || die "setting robr in priv_def.mk failed!"
126 # Enable FUSE workaround for AUFS
128 echo "CONFIG_AUFS_WORKAROUND_FUSE = y" >> priv_def.mk || die "setting workaround_fuse in priv_def.mk failed!"
131 # Enable / Disable debugging
133 echo "CONFIG_AUFS_DEBUG = y" >> priv_def.mk || die "setting debug in priv_dev.mk failed!"
135 echo "CONFIG_AUFS_DEBUG = " >> priv_def.mk || die "setting debug in priv_dev.mk failed!"
138 # Check if a vserver-kernel is installed
139 if [[ -e ${KV_DIR}/include/linux/vserver ]] ; then
140 einfo "vserver kernel seems to be installed"
141 einfo "using vserver patch"
142 echo "AUFS_DEF_CONFIG = -DVSERVER" >> priv_def.mk || die "setting vserver in priv_def.mk failed!"
148 use amd64 && ARCH=x86_64
149 emake KDIR=${KV_DIR} SUBLEVEL=${KV_PATCH} -f local.mk || die "emake failed"
156 doexe mount.aufs umount.aufs auplink aulchown
159 newins etc_default_aufs aufs || die
160 linux-mod_src_install
164 elog "To be able to use aufs, you have to load the kernel module by typing:"
166 elog "For further information refer to the aufs man page"
168 if use sec_perm || use nfs ; then
169 ewarn "Your kernel has been patched in order to export security"
170 ewarn "permissions. You will need to recompile your kernel with"
171 ewarn "this new patch in order for ${PN} to function."
174 linux-mod_pkg_postinst