]> Pileus Git - ~andy/sunrise/blob - sys-fs/aufs/aufs-20081208-r1.ebuild
sys-fs/aufs: version bump, added 'nfs' use flag and lhash patches for nfs-branch...
[~andy/sunrise] / sys-fs / aufs / aufs-20081208-r1.ebuild
1 # Copyright 1999-2009 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: $
4
5 inherit eutils linux-mod
6
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"
10
11 LICENSE="GPL-2"
12 SLOT="0"
13 KEYWORDS="~amd64 ~x86"
14 IUSE="debug fuse hinotify nfs nfsexport robr sec_perm"
15
16 S="${WORKDIR}"/aufs
17
18 MODULE_NAMES="aufs(misc:${S})"
19
20 pkg_setup() {
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"
26         fi
27
28         get_version
29
30         # assume no kernel patches will be applied today
31         APPLY_KERNEL_PATCH="n"
32
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"
39                 fi
40
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"
45                         eerror "applied."
46                         die "Invalid configuration"
47                 fi
48         # Also check to make sure they aren't enabling it when they don't need to
49         else
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"
54                 fi
55         fi
56
57         # Check for applicability of lhash patch for NFS branch support
58         if use nfs && kernel_is ge 2 6 19 ; then
59                 APPLY_LHASH_PATCH="n"
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
63                         APPLY_LHASH_PATCH="y"
64                         APPLY_KERNEL_PATCH="y"
65                 fi
66         fi
67
68         # If a patch has to be applied
69         if [[ ${APPLY_KERNEL_PATCH} == "y" ]] ; then
70                 ewarn "Patching your kernel..."
71                 cd ${KV_DIR}
72
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
76                 fi
77
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
82                         else
83                                 if kernel_is ge 2 6 22 ; then
84                                         epatch "${FILESDIR}"/${PN}-lhash-2.6.22.patch
85                                 else
86                                         epatch "${FILESDIR}"/${PN}-lhash-2.6.19.patch
87                                 fi
88                         fi
89                 fi
90         fi
91
92         linux-mod_pkg_setup
93 }
94
95 src_unpack(){
96         unpack ${A}
97         cd "${S}"
98
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!"
102         fi
103
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!"
107         fi
108
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!"
112         fi
113
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!"
117         fi
118
119         # Enable aufs readonly-branch in priv_def.mk
120         if use robr ; then
121                 echo "CONFIG_AUFS_ROBR = y" >> priv_def.mk || die "setting robr in priv_def.mk failed!"
122         fi
123
124         # Enable FUSE workaround for AUFS
125         if use fuse ; then
126                 echo "CONFIG_AUFS_WORKAROUND_FUSE = y" >> priv_def.mk || die "setting workaround_fuse in priv_def.mk failed!"
127         fi
128
129         # Enable / Disable debugging
130         if use debug ; then
131                 echo "CONFIG_AUFS_DEBUG = y" >> priv_def.mk || die "setting debug in priv_dev.mk failed!"
132         else
133                 echo "CONFIG_AUFS_DEBUG = " >> priv_def.mk || die "setting debug in priv_dev.mk failed!"
134         fi
135
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!"
141         fi
142 }
143
144 src_compile() {
145         use x86 && ARCH=i386
146         use amd64 && ARCH=x86_64
147         emake KDIR=${KV_DIR} SUBLEVEL=${KV_PATCH} -f local.mk || die "emake failed"
148 }
149
150 src_install() {
151         cd util
152         exeinto /sbin
153         exeopts -m0500
154         doexe mount.aufs umount.aufs auplink aulchown
155         doman aufs.5
156         insinto /etc/default
157         newins etc_default_aufs aufs || die
158         linux-mod_src_install
159 }
160
161 pkg_postinst() {
162         elog "To be able to use aufs, you have to load the kernel module by typing:"
163         elog "modprobe aufs"
164         elog "For further information refer to the aufs man page"
165
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."
170         fi
171
172         linux-mod_pkg_postinst
173 }