]> Pileus Git - ~andy/sunrise/blob - sys-fs/aufs/aufs-20090126.ebuild
sys-fs/aufs: Remove \n
[~andy/sunrise] / sys-fs / aufs / aufs-20090126.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         # Check if lhash Patch has to be applied
59         if use nfs && kernel_is ge 2 6 19 ; then
60                 APPLY_LHASH_PATCH="n"
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
64                         APPLY_LHASH_PATCH="y"
65                         APPLY_KERNEL_PATCH="y"
66                 fi
67         fi
68
69
70         # If a patch has to be applied
71         if [[ ${APPLY_KERNEL_PATCH} == "y" ]] ; then
72                 ewarn "Patching your kernel..."
73                 cd ${KV_DIR}
74
75                 # If the sec_perm patch has to be applied
76                 if [[ ${APPLY_SEC_PERM_PATCH} == "y" ]] ; then
77                         epatch "${FILESDIR}"/${PN}-20081208-sec_perm-2.6.24.patch
78                 fi
79
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
84                         else
85                                 if kernel_is ge 2 6 22 ; then
86                                         epatch "${FILESDIR}"/${PN}-lhash-2.6.22.patch
87                                 else
88                                         epatch "${FILESDIR}"/${PN}-lhash-2.6.19.patch
89                                 fi
90                         fi
91                 fi
92         fi
93
94         linux-mod_pkg_setup
95 }
96
97 src_unpack(){
98         unpack ${A}
99         cd "${S}"
100
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!"
104         fi
105
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!"
109         fi
110
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!"
114         fi
115
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!"
119         fi
120
121         # Enable aufs readonly-branch in priv_def.mk
122         if use robr ; then
123                 echo "CONFIG_AUFS_ROBR = y" >> priv_def.mk || die "setting robr in priv_def.mk failed!"
124         fi
125
126         # Enable FUSE workaround for AUFS
127         if use fuse ; then
128                 echo "CONFIG_AUFS_WORKAROUND_FUSE = y" >> priv_def.mk || die "setting workaround_fuse in priv_def.mk failed!"
129         fi
130
131         # Enable / Disable debugging
132         if use debug ; then
133                 echo "CONFIG_AUFS_DEBUG = y" >> priv_def.mk || die "setting debug in priv_dev.mk failed!"
134         else
135                 echo "CONFIG_AUFS_DEBUG = " >> priv_def.mk || die "setting debug in priv_dev.mk failed!"
136         fi
137
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!"
143         fi
144 }
145
146 src_compile() {
147         use x86 && ARCH=i386
148         use amd64 && ARCH=x86_64
149         emake KDIR=${KV_DIR} SUBLEVEL=${KV_PATCH} -f local.mk || die "emake failed"
150 }
151
152 src_install() {
153         cd util
154         exeinto /sbin
155         exeopts -m0500
156         doexe mount.aufs umount.aufs auplink aulchown || die
157         doman aufs.5 || die
158         insinto /etc/default
159         newins etc_default_aufs aufs || die
160         linux-mod_src_install
161 }
162
163 pkg_postinst() {
164         elog "To be able to use aufs, you have to load the kernel module by typing:"
165         elog "modprobe aufs"
166         elog "For further information refer to the aufs man page"
167
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."
172         fi
173
174         linux-mod_pkg_postinst
175 }