1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
|
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-fs/coda/coda-6.9.5.ebuild,v 1.1 2010/05/10 22:07:06 george Exp $
inherit autotools eutils toolchain-funcs
IUSE="client server coda_layout coda_symlinks kerberos"
# client : causes the coda client (venus) to be built.
# server : causes the coda server (vice) to be built.
# coda_layout : doesn't apply FHS compliancy patches. Use this if using any directory
# other than /coda for the mount point makes you upset.
# coda_symlinks : create legacy symlinks if FHS layout is used.
DESCRIPTION="Coda is an advanced networked filesystem developed at Carnegie Mellon Univ."
HOMEPAGE="http://www.coda.cs.cmu.edu/"
SRC_URI="http://www.coda.cs.cmu.edu/pub/coda/src/${P}.tar.gz"
SLOT="0"
LICENSE="GPL-2"
KEYWORDS="~amd64 ~ppc ~x86"
# partly based on the deps suggested by Mandrake's RPM, and/or on my current versions
# Also, definely needs coda.h from linux-headers.
RDEPEND=">=sys-libs/lwp-2.1
>=net-libs/rpc2-2.6
>=sys-libs/rvm-1.15
>=sys-libs/db-3
>=sys-libs/ncurses-4
>=sys-libs/readline-3
>=dev-lang/perl-5.8
kerberos? ( virtual/krb5 )"
DEPEND="${RDEPEND}
sys-apps/gawk
sys-devel/bison
sys-apps/grep
virtual/os-headers"
pkg_setup() {
echo
einfo "gcc-version = $(gcc-version)"
echo
if ! use client && ! use server; then
eerror "Neither client nor server is enabled."
eerror "Please enable at least one of these flags!"
die "at least one of client or server flags should be on!"
fi
if use coda_layout; then
einfo
ewarn "You selected coda (legacy) layout."
ewarn "Please note, that coda itself have transitioned to more FHS"
ewarn "compilant layout starting with version 6.9.5. Although not all"
ewarn "internal paths seem to have been updated."
ewarn "Use with care!"
einfo
ewarn "In case you are updating existing installation it is"
ewarn "recommended to keep old layout in conf files or perform a clean"
ewarn "transition - copying data externally to fresh version."
einfo
sleep 5
fi
}
src_unpack() {
unpack ${A}
cd "${S}"
tar xjpf "${FILESDIR}"/scripts.tar.bz2
epatch "${FILESDIR}"/fixdeps.patch
epatch "${FILESDIR}"/vice-setup.in.patch
if ! use coda_layout; then
einfo "seding sources.."
# First, some common substitutions.
# As this is a rather critical subsystem and screwing paths can break
# user's data, protect all seds by die.
#
# NOTE: gentoo specific init scripts installed as a part of unpack ${A}
# have some paths specified inside. However these will be autoupdated by
# below seds for free, no need for special care.
#
# first, special cases under /usr/coda
# for spool, look only in subdirs, as we do not want to touch ChangeLog
grep -rl "/usr/coda/spool" "${S}"/*/* | xargs \
sed -i -e "s:/usr/coda/spool:/var/spool/coda:" \
|| die "setting FHS compliant paths failed"
# coda/etc used to contain vstab file, which normally would reside in
# /etc/coda. However this file was deprecated, so no special handling..
# do only subdirs here too.
grep -rl "/usr/coda/etc" "${S}"/*/* | xargs \
sed -i -e "s:/usr/coda/etc:/var/log/coda:" \
|| die "setting FHS compliant paths failed"
# stuff uder venus.cache need special care
# "real cache" goues under /var/cache and pid related files under
# /var/run
grep -rl "cachedir=/usr/coda/venus.cache" "${S}"/* | xargs \
sed -i -e "s:cachedir=/usr/coda/venus.cache:cachedir=/var/cache/coda:" \
|| die "setting FHS compliant paths failed"
sed -i -e "s:DFLT_CD \"/usr/coda/venus.cache\":DFLT_CD \"/var/cache/coda\":" \
"${S}"/coda-src/venus/venus.private.h || die "seding venus.private.h failed"
grep -rl "/usr/coda/venus.cache" "${S}"/* | xargs \
sed -i -e "s:/usr/coda/venus.cache:/var/run/coda:" \
|| die "setting FHS compliant paths failed"
# what's left in /usr/coda goes to /var/lib/coda
# NOTE: dumplits.5 man page seems unduly touched by this sed, ignoring
# for now..
grep -rl "/usr/coda" "${S}"/*/* | xargs \
sed -i -e "s:/usr/coda:/var/lib/coda:" \
|| die "setting FHS compliant paths failed"
# move /coda to /mnt/coda
grep -rle "[[:space:]\"=]/coda" "${S}"/*/* | xargs \
sed -i -e "s:\([[:space:]\"=]\)/coda:\1/mnt/coda:" \
|| die "setting FHS compliant paths failed"
# move /vice and /vicepX under /var/lib/coda/
grep -rle "[[:space:]\"=\[]/vice" "${S}"/*/* | xargs \
sed -i -e "s:\([[:space:]\"=\[]\)/vice:\1/var/lib/coda/vice:g" \
|| die "setting FHS compliant paths failed"
fi
eautoreconf
}
my_build_venus_prereqs() {
# Coda uses a recursive make with some directories depending
# on objects built in other directories, so run make inside
# the prerequisite dirs first. This builds everything required
# by venus in the order listed in coda-src/Makefile.am.
cd "${S}/lib-src"
emake || die "emake failed"
# auth2 depends on kerndep
cd "${S}/coda-src/kerndep"
emake || die "emake failed"
# auth2 depends on util.
cd "${S}/coda-src/util"
emake || die "emake failed"
# librepair depends on vicedep
cd "${S}/coda-src/vicedep"
emake || die "emake failed"
# venus depends on dir
cd "${S}/coda-src/dir"
emake || die "emake failed"
# venus depends on al
cd "${S}/coda-src/al"
emake || die "emake failed"
# librepair depends on auth2
cd "${S}/coda-src/auth2"
emake || die "emake failed"
# venus depends on vv
cd "${S}/coda-src/vv"
emake || die "emake failed"
# venus depends on lka
cd "${S}/coda-src/lka"
emake || die "emake failed"
# venus depends on vol
cd "${S}/coda-src/vol"
emake || die "emake failed"
# venus depends on librepair
cd "${S}/coda-src/librepair"
emake || die "emake failed"
}
src_compile() {
local myflags=""
# Coda uses type punning in a way that violates assumptions made by -O2
# and friends (via -fstrict-aliasing). Disable this optimization where
# required.
local my_safe_cflags="${CFLAGS} -fno-strict-aliasing"
local my_safe_cxxflags="${CXXFLAGS} -fno-strict-aliasing"
# Include the server/client code.
use client && myflags="${myflags} --enable-client"
use server && myflags="${myflags} --enable-server"
# Enable kerboeros?
if use kerberos; then
myflags="${myflags} --with-crypto --with-krb5"
myflags="${myflags} --with-krb5-includes=/usr/include/krb5"
myflags="${myflags} --with-krb5-libs=/usr/lib"
fi
# Perform the actual configure.
econf ${myflags} || die "configure failed"
# Build any prerequisites for venus.
my_build_venus_prereqs
# Venus uses unsafe type punning, so disable
# some optimizations for venus.
pushd coda-src/venus
emake \
CFLAGS="${my_safe_cflags}" \
CXXFLAGS="${my_safe_cxxflags}" \
|| die "emake failed"
popd
# Now run make in the source directory to finish the compile.
emake -j1 || die "emake failed"
}
src_install () {
emake DESTDIR="${D}" install
dodoc INSTALL* README* NEWS ChangeLog AUTHORS
use server && doinitd coda-src/scripts/codasrv
use client && doinitd coda-src/scripts/venus
# Fix conflict with backup.sh from tar
mv -f "${D}"/usr/sbin/backup{,-coda}.sh
if use coda_layout; then
# Create coda specific layout
dodir /usr/coda
dodir /usr/coda/etc
dodir /usr/coda/spool
if use server; then
dodir /vice
dodir /vicepa
fi
if use client; then
dodir /coda
diropts -m0700
dodir /usr/coda/venus.cache
fi
else
# Create FHS compliant layout
dodir /var/lib/coda
dodir /var/log/coda
dodir /var/spool/coda
if use server; then
dodir /var/lib/coda/vice
dodir /var/lib/coda/vicepa
fi
if use client; then
dodir /mnt/coda
dosym mnt/coda /coda
diropts -m0700
dodir /var/cache/coda
fi
if use coda_symlinks; then
# Symlink traditional coda dirs to gentoo dirs.
# NOTE: /coda symlink is unconditional for compatibility of client apps
dosym ../var/lib/coda /usr/coda
if use server; then
dosym var/lib/coda/vice /vice
dosym var/lib/coda/vicepa /vicepa
fi
fi
fi
}
pkg_preinst () {
enewgroup codaroot
enewuser codaroot -1 -1 -1 codaroot
}
pkg_postinst () {
einfo
elog "To enable the coda server at boot up, please do:"
elog " rc-update add codasrv default"
elog
elog "To enable the coda client at boot up, do:"
elog " rc-update add venus default"
elog
elog "To get started, run vice-setup and/or venus-setup."
einfo
}
|