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 if use nfs && kernel_is ge 2 6 19 ; then
60 # If lhash patch is not applied
61 if ! grep -qs "EXPORT_SYMBOL(__lookup_hash);" "${KV_DIR}/fs/namei.c" \
62 && ! grep -qs "struct dentry * __lookup_hash(struct qstr *name, struct dentry * base, struct nameidata *nd);" "${KV_DIR}/fs/namei.h" ; then
64 APPLY_KERNEL_PATCH="y"
68 # If a patch has to be applied
69 if [[ ${APPLY_KERNEL_PATCH} == "y" ]] ; then
70 ewarn "Patching your kernel..."
73 # If the sec_perm patch has to be applied
74 if [[ ${APPLY_SEC_PERM_PATCH} == "y" ]] ; then
75 epatch "${FILESDIR}"/${P}-sec_perm-2.6.24.patch
78 # if the lhash patch has to be applied
79 if [[ ${APPLY_LHASH_PATCH} == "y" ]] ; then
80 if kernel_is ge 2 6 24 ; then
81 epatch "${FILESDIR}"/${PN}-lhash-2.6.24.patch
83 if kernel_is ge 2 6 22 ; then
84 epatch "${FILESDIR}"/${PN}-lhash-2.6.22.patch
86 epatch "${FILESDIR}"/${PN}-lhash-2.6.19.patch
99 # Enable hinotify in priv_def.mk
100 if use hinotify && kernel_is ge 2 6 18 ; then
101 echo "CONFIG_AUFS_HINOTIFY = y" >> priv_def.mk || die "setting hinotify in priv_def.mk failed!"
104 # Disable SYSAUFS for kernel less than 2.6.18
105 if kernel_is lt 2 6 18 ; then
106 echo "CONFIG_AUFS_SYSAUFS = " >> priv_def.mk || die "unsetting sysaufs in priv_def.mk failed!"
109 # Enable lhash in priv_def.mk
110 if use nfs && kernel_is ge 2 6 19 ; then
111 echo "CONFIG_AUFS_LHASH_PATCH = y" >> priv_def.mk || die "setting lhash in priv_def.mk failed!"
114 # Enable nfsexport in priv_def.mk
115 if use nfsexport && kernel_is ge 2 6 18 ; then
116 echo "CONFIG_AUFS_EXPORT = y" >> priv_def.mk || die "setting export in priv_def.mk failed!"
119 # Enable aufs readonly-branch in priv_def.mk
121 echo "CONFIG_AUFS_ROBR = y" >> priv_def.mk || die "setting robr in priv_def.mk failed!"
124 # Enable FUSE workaround for AUFS
126 echo "CONFIG_AUFS_WORKAROUND_FUSE = y" >> priv_def.mk || die "setting workaround_fuse in priv_def.mk failed!"
129 # Enable / Disable debugging
131 echo "CONFIG_AUFS_DEBUG = y" >> priv_def.mk || die "setting debug in priv_dev.mk failed!"
133 echo "CONFIG_AUFS_DEBUG = " >> priv_def.mk || die "setting debug in priv_dev.mk failed!"
136 # Check if a vserver-kernel is installed
137 if [[ -e ${KV_DIR}/include/linux/vserver ]] ; then
138 einfo "vserver kernel seems to be installed"
139 einfo "using vserver patch"
140 echo "AUFS_DEF_CONFIG = -DVSERVER" >> priv_def.mk || die "setting vserver in priv_def.mk failed!"
146 use amd64 && ARCH=x86_64
147 emake KDIR=${KV_DIR} SUBLEVEL=${KV_PATCH} -f local.mk || die "emake failed"
154 doexe mount.aufs umount.aufs auplink aulchown
157 newins etc_default_aufs aufs || die
158 linux-mod_src_install
162 elog "To be able to use aufs, you have to load the kernel module by typing:"
164 elog "For further information refer to the aufs man page"
166 if use sec_perm || use nfs; then
167 ewarn "Your kernel has been patched in order to export security"
168 ewarn "permissions. You will need to recompile your kernel with"
169 ewarn "this new patch in order for ${PN} to function."
172 linux-mod_pkg_postinst