1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
5 inherit autotools perl-module user systemd toolchain-funcs
7 DESCRIPTION="The Advanced Maryland Automatic Network Disk Archiver"
8 HOMEPAGE="http://www.amanda.org/"
9 SRC_URI="mirror://sourceforge/amanda/${P}.tar.gz"
11 LICENSE="HPND BSD BSD-2 GPL-2+ GPL-3+"
13 IUSE="curl gnuplot ipv6 kerberos minimal nls readline s3 samba systemd xfs"
15 KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86"
16 RDEPEND="sys-libs/readline:=
22 >=dev-libs/glib-2.26.0
24 dev-perl/Encode-Locale
25 nls? ( virtual/libintl )
26 s3? ( >=net-misc/curl-7.10.0 )
27 !s3? ( curl? ( >=net-misc/curl-7.10.0 ) )
28 samba? ( net-fs/samba:= )
29 kerberos? ( app-crypt/mit-krb5 )
30 xfs? ( sys-fs/xfsdump )
36 gnuplot? ( sci-visualization/gnuplot )
43 nls? ( sys-devel/gettext )
44 >=app-text/docbook-xsl-stylesheets-1.72.0
45 app-text/docbook-xml-dtd
50 MYFILESDIR="${T}/files"
53 TMPENVFILE="${T}/${ENVDFILE}"
55 # This is a complete list of Amanda settings that the ebuild takes from the
56 # build environment. This allows users to alter the behavior of the package as
57 # upstream intended, but keeping with Gentoo style. We store a copy of them in
58 # /etc/env.d/97amanda during the install, so that they are preserved for future
59 # installed. This variable name must not start with AMANDA_, as we do not want
60 # it captured into the env file.
62 AMANDA_GROUP_GID AMANDA_GROUP_NAME
63 AMANDA_USER_NAME AMANDA_USER_UID AMANDA_USER_SH AMANDA_USER_HOMEDIR AMANDA_USER_GROUPS
64 AMANDA_SERVER AMANDA_SERVER_TAPE AMANDA_SERVER_TAPE_DEVICE AMANDA_SERVER_INDEX
65 AMANDA_TAR_LISTDIR AMANDA_TAR
66 AMANDA_PORTS_UDP AMANDA_PORTS_TCP AMANDA_PORTS_BOTH AMANDA_PORTS
67 AMANDA_CONFIG_NAME AMANDA_TMPDIR"
69 amanda_variable_setup() {
74 # Grab the current settings
75 currentamanda="$(set | egrep "^AMANDA_" | grep -v '^AMANDA_ENV_SETTINGS' | xargs)"
77 # First we set the defaults
78 [[ -z "${AMANDA_GROUP_GID}" ]] && AMANDA_GROUP_GID=87
79 [[ -z "${AMANDA_GROUP_NAME}" ]] && AMANDA_GROUP_NAME=amanda
80 [[ -z "${AMANDA_USER_NAME}" ]] && AMANDA_USER_NAME=amanda
81 [[ -z "${AMANDA_USER_UID}" ]] && AMANDA_USER_UID=87
82 [[ -z "${AMANDA_USER_SH}" ]] && AMANDA_USER_SH=/bin/bash
83 [[ -z "${AMANDA_USER_HOMEDIR}" ]] && AMANDA_USER_HOMEDIR=/var/spool/amanda
84 [[ -z "${AMANDA_USER_GROUPS}" ]] && AMANDA_USER_GROUPS="${AMANDA_GROUP_NAME}"
86 # This installs Amanda, with the server. However, it could be a client,
87 # just specify an alternate server name in AMANDA_SERVER.
88 [[ -z "${AMANDA_SERVER}" ]] && AMANDA_SERVER="${HOSTNAME}"
89 [[ -z "${AMANDA_SERVER_TAPE}" ]] && AMANDA_SERVER_TAPE="${AMANDA_SERVER}"
90 [[ -z "${AMANDA_SERVER_TAPE_DEVICE}" ]] && AMANDA_SERVER_TAPE_DEVICE="/dev/nst0"
91 [[ -z "${AMANDA_SERVER_INDEX}" ]] && AMANDA_SERVER_INDEX="${AMANDA_SERVER}"
92 [[ -z "${AMANDA_TAR_LISTDIR}" ]] && AMANDA_TAR_LISTDIR=${AMANDA_USER_HOMEDIR}/tar-lists
93 [[ -z "${AMANDA_CONFIG_NAME}" ]] && AMANDA_CONFIG_NAME=DailySet1
94 [[ -z "${AMANDA_TMPDIR}" ]] && AMANDA_TMPDIR=/var/tmp/amanda
95 [[ -z "${AMANDA_DBGDIR}" ]] && AMANDA_DBGDIR="$AMANDA_TMPDIR"
96 # These are left empty by default
97 [[ -z "${AMANDA_PORTS_UDP}" ]] && AMANDA_PORTS_UDP=
98 [[ -z "${AMANDA_PORTS_TCP}" ]] && AMANDA_PORTS_TCP=
99 [[ -z "${AMANDA_PORTS_BOTH}" ]] && AMANDA_PORTS_BOTH=
100 [[ -z "${AMANDA_PORTS}" ]] && AMANDA_PORTS=
103 [[ -z "${AMANDA_TAR}" ]] && AMANDA_TAR=/bin/tar
105 # Now pull in the old stuff
106 if [[ -f "${EROOT}${ENVDIR}/${ENVDFILE}" ]]; then
107 # We don't just source it as we don't want everything in there.
108 eval $(egrep "^AMANDA_" "${EROOT}${ENVDIR}/${ENVDFILE}" | grep -v '^AMANDA_ENV_SETTINGS')
111 # Re-apply the new settings if any
112 [ -n "${currentamanda}" ] && eval $(echo "${currentamanda}")
117 amanda_variable_setup
119 # If USE=minimal, give out a warning, if AMANDA_SERVER is not set to
120 # another host than HOSTNAME.
121 if use minimal && [ "${AMANDA_SERVER}" = "${HOSTNAME}" ] ; then
122 elog "You are installing a client-only version of Amanda."
123 elog "You should set the variable \$AMANDA_SERVER to point at your"
124 elog "Amanda-tape-server, otherwise you will have to specify its name"
125 elog "when using amrecover on the client."
126 elog "For example: Use something like"
127 elog "AMANDA_SERVER=\"myserver\" emerge amanda"
131 enewgroup "${AMANDA_GROUP_NAME}" "${AMANDA_GROUP_GID}"
132 enewuser "${AMANDA_USER_NAME}" "${AMANDA_USER_UID}" "${AMANDA_USER_SH}" "${AMANDA_USER_HOMEDIR}" "${AMANDA_USER_GROUPS}"
136 # we do not want the perl src_unpack
142 sed -i '/^check-local: check-perl$/d' "${S}"/config/automake/scripts.am || die
143 sed -i '/^check-local:/s,syntax-check,,g' "${S}"/perl/Makefile.am || die
145 # bug with glibc-2.16.0
146 sed -i -e '/gets is a security/d' "${S}"/gnulib/stdio.in.h || die
150 # places for us to work in
151 mkdir -p "${MYFILESDIR}" || die
152 # Now we store the settings we just created
153 set | egrep "^AMANDA_" | grep -v '^AMANDA_ENV_SETTINGS' > "${TMPENVFILE}" || die
155 # Prepare our custom files
156 einfo "Building custom configuration files"
157 local i # our iterator
158 local sedexpr # var for sed expr
160 for i in ${ENV_SETTINGS_AMANDA} ; do
162 eval "val=\"\${${i}}\""
163 sedexpr="${sedexpr}s|__${i}__|${val}|g;"
166 # now apply the sed expr
167 for i in "${FILESDIR}"/amanda-* ; do
168 sed -re "${sedexpr}" <"${i}" >"${MYFILESDIR}/`basename ${i}`" || die
172 cat "${MYFILESDIR}"/amanda-amandahosts-server.5.1_p3-r1 > "${T}"/amandahosts || die
174 sed -i -e 's:^\(my $amandahomedir\)=.*:\1 = $localstatedir;:' \
175 server-src/am{addclient,serverconfig}.pl || die
176 cat "${MYFILESDIR}"/amanda-amandahosts-client-2.5.1_p3-r1 > "${T}"/amandahosts || die
179 eapply "${FILESDIR}"/${P}-slots.patch || die
180 eapply "${FILESDIR}"/${P}-labelstr.patch || die
187 addpredict /var/cache/samba/gencache.tdb
189 addpredict /run/blkid
190 addpredict /etc/blkid.tab
192 [ ! -f "${TMPENVFILE}" ] && die "Variable setting file (${TMPENVFILE}) should exist!"
193 source "${TMPENVFILE}"
196 einfo "Using ${AMANDA_SERVER_TAPE} for tape server."
197 myconf="${myconf} --with-tape-server=${AMANDA_SERVER_TAPE}"
198 einfo "Using ${AMANDA_SERVER_TAPE_DEVICE} for tape server."
199 myconf="${myconf} --with-tape-device=${AMANDA_SERVER_TAPE_DEVICE}"
200 einfo "Using ${AMANDA_SERVER_INDEX} for index server."
201 myconf="${myconf} --with-index-server=${AMANDA_SERVER_INDEX}"
202 einfo "Using ${AMANDA_USER_NAME} for amanda user."
203 myconf="${myconf} --with-user=${AMANDA_USER_NAME}"
204 einfo "Using ${AMANDA_GROUP_NAME} for amanda group."
205 myconf="${myconf} --with-group=${AMANDA_GROUP_NAME}"
206 einfo "Using ${AMANDA_TAR} as Tar implementation."
207 myconf="${myconf} --with-gnutar=${AMANDA_TAR}"
208 einfo "Using ${AMANDA_TAR_LISTDIR} as tar listdir."
209 myconf="${myconf} --with-gnutar-listdir=${AMANDA_TAR_LISTDIR}"
210 einfo "Using ${AMANDA_CONFIG_NAME} as default config name."
211 myconf="${myconf} --with-config=${AMANDA_CONFIG_NAME}"
212 einfo "Using ${AMANDA_TMPDIR} as Amanda temporary directory."
213 myconf="${myconf} --with-tmpdir=${AMANDA_TMPDIR}"
215 if [ -n "${AMANDA_PORTS_UDP}" ] && [ -n "${AMANDA_PORTS_TCP}" ] && [ -z "${AMANDA_PORTS_BOTH}" ] ; then
216 eerror "If you want _both_ UDP and TCP ports, please use only the"
217 eerror "AMANDA_PORTS environment variable for identical ports, or set"
218 eerror "AMANDA_PORTS_BOTH."
219 die "Bad port setup!"
221 if [ -n "${AMANDA_PORTS_UDP}" ]; then
222 einfo "Using UDP ports ${AMANDA_PORTS_UDP/,/-}"
223 myconf="${myconf} --with-udpportrange=${AMANDA_PORTS_UDP}"
225 if [ -n "${AMANDA_PORTS_TCP}" ]; then
226 einfo "Using TCP ports ${AMANDA_PORTS_TCP/,/-}"
227 myconf="${myconf} --with-tcpportrange=${AMANDA_PORTS_TCP}"
229 if [ -n "${AMANDA_PORTS}" ]; then
230 einfo "Using ports ${AMANDA_PORTS/,/-}"
231 myconf="${myconf} --with-portrange=${AMANDA_PORTS}"
236 myconf="${myconf} --with-buffered-dump"
237 # "debugging" in the configuration is NOT debug in the conventional sense.
238 # It is actually just useful output in the application, and should remain
239 # enabled. There are some cases of breakage with MTX tape changers as of
240 # 2.5.1p2 that it exposes when turned off as well.
241 myconf="${myconf} --with-debugging"
242 # Where to put our files
243 myconf="${myconf} --localstatedir=${AMANDA_USER_HOMEDIR}"
246 myconf="${myconf} $(use_with samba smbclient /usr/bin/smbclient)"
248 # Support for BSD, SSH, BSDUDP, BSDTCP security methods all compiled in by
250 myconf="${myconf} --with-bsd-security"
251 myconf="${myconf} --with-ssh-security"
252 myconf="${myconf} --with-bsdudp-security"
253 myconf="${myconf} --with-bsdtcp-security"
255 # kerberos-security mechanism version 5
256 myconf="${myconf} $(use_with kerberos krb5-security)"
259 myconf="${myconf} `use_enable s3 s3-device`"
261 # libcurl is required for S3 but otherwise optional
263 myconf="${myconf} $(use_with curl libcurl)"
266 # Client only, as requested in bug #127725
267 if use minimal ; then
268 myconf="${myconf} --without-server"
271 myconf="${myconf} $(use_with gnuplot)"
275 myconf="${myconf} `use_with ipv6`"
276 # This is to prevent the IPv6-is-working test
277 # As the test fails on binpkg build hosts with no IPv6.
278 use ipv6 && export amanda_cv_working_ipv6=yes
281 myconf="${myconf} `use_enable nls`"
283 # Bug #296634: Perl location
285 myconf="${myconf} --with-amperldir=${VENDOR_LIB}"
287 # Bug 296633: --disable-syntax-checks
288 # Some tests are not safe for production systems
289 myconf="${myconf} --disable-syntax-checks"
292 myconf="${myconf} --enable-manpage-build"
298 $(use_with readline) \
303 # Again, do not want the perl-module src_compile
308 [ ! -f "${TMPENVFILE}" ] && die "Variable setting file (${TMPENVFILE}) should exist!"
311 einfo "Doing stock install"
312 emake DESTDIR="${D}" install
314 # Build the envdir file
315 # Don't forget this..
316 einfo "Building environment file"
318 echo "# These settings are what was present in the environment when this"
319 echo "# Amanda was compiled. Changing anything below this comment will"
320 echo "# have no effect on your application, but it merely exists to"
321 echo "# preserve them for your next emerge of Amanda"
322 cat "${TMPENVFILE}" | sed "s,=\$,='',g"
323 ) >> "${MYFILESDIR}/${ENVDFILE}"
326 einfo "Installing environment config file"
327 doenvd "${MYFILESDIR}/${ENVDFILE}"
329 # Lock down next section (up until docs).
331 # Installing Amanda Xinetd Services Definition
332 einfo "Installing xinetd service file"
333 insinto /etc/xinetd.d
334 if use minimal ; then
335 newins "${MYFILESDIR}"/amanda-xinetd-2.6.1_p1-client amanda
337 newins "${MYFILESDIR}"/amanda-xinetd-2.6.1_p1-server amanda
340 if ! use minimal; then
341 einfo "Installing Sample Daily Cron Job for Amanda"
342 insinto /etc/cron.daily
343 newins "${MYFILESDIR}/amanda-cron" amanda
346 einfo "Installing systemd service and socket files for Amanda"
347 systemd_dounit "${FILESDIR}"/amanda.socket || die
348 systemd_newunit "${FILESDIR}"/amanda.service 'amanda@.service' || die
351 einfo "Installing .amandahosts File for ${AMANDA_USER_NAME} user"
352 doins "${T}/amandahosts"
353 fperms 600 /etc/amanda/amandahosts
355 dosym /etc/amanda/amandahosts "${AMANDA_USER_HOMEDIR}/.amandahosts"
356 insinto "${AMANDA_USER_HOMEDIR}"
357 einfo "Installing .profile for ${AMANDA_USER_NAME} user"
358 newins "${MYFILESDIR}/amanda-profile" .profile
361 doins "${S}/example/amanda-client.conf"
362 if ! use minimal ; then
363 insinto "/etc/amanda/${AMANDA_CONFIG_NAME}"
364 doins "${S}/example/amanda.conf"
365 doins "${S}/example/disklist"
366 keepdir "${AMANDA_USER_HOMEDIR}/${AMANDA_CONFIG_NAME}/index"
369 keepdir "${AMANDA_TAR_LISTDIR}"
370 keepdir "${AMANDA_USER_HOMEDIR}/amanda"
371 keepdir "${AMANDA_TMPDIR}/dumps"
372 # Just make sure it exists for XFS to work...
373 use xfs && keepdir /var/xfsdump/inventory
376 for i in "${AMANDA_USER_HOMEDIR}" "${AMANDA_TAR_LISTDIR}" \
377 "${AMANDA_TMPDIR}" /etc/amanda; do
378 einfo "Securing directory (${i})"
379 fowners -R ${AMANDA_USER_NAME}:${AMANDA_GROUP_NAME} ${i}
383 "${AMANDA_USER_HOMEDIR}" "${AMANDA_TAR_LISTDIR}" \
384 "${AMANDA_TMPDIR}" "${AMANDA_TMPDIR}/dumps" \
385 "${AMANDA_USER_HOMEDIR}/amanda" \
388 if ! use minimal ; then
390 "${AMANDA_USER_HOMEDIR}/${AMANDA_CONFIG_NAME}" \
391 /etc/amanda/${AMANDA_CONFIG_NAME}
394 einfo "Setting setuid permissions"
395 amanda_permissions_fix "${D}"
397 # Relax permissions again
401 einfo "Installing documentation"
402 dodoc AUTHORS ChangeLog DEVELOPING NEWS README ReleaseNotes UPGRADING
404 einfo "Installing standard inetd sample"
405 newdoc "${MYFILESDIR}/amanda-inetd.amanda.sample-2.6.0_p2-r2" amanda-inetd.amanda.sample
406 # Amanda example configs
407 einfo "Installing example configurations"
408 rm "${D}"/usr/share/amanda/{COPYRIGHT,ChangeLog,NEWS,ReleaseNotes}
409 mv "${D}/usr/share/amanda/example" "${D}/usr/share/doc/${PF}/"
411 newdoc "${FILESDIR}/example_amanda.conf" amanda.conf
412 newdoc "${FILESDIR}/example_disklist-2.5.1_p3-r1" disklist
413 newdoc "${FILESDIR}/example_global.conf" global.conf
415 einfo "Cleaning up dud .la files"
417 find "${D}"/"${VENDOR_LIB}" -name '*.la' -print0 |xargs -0 rm -f
421 [ ! -f "${TMPENVFILE}" -a "$MERGE_TYPE" == "binary" ] && \
422 TMPENVFILE="${ROOT}${ENVDIR}/${ENVDFILE}"
423 [ ! -f "${TMPENVFILE}" ] && die "Variable setting file (${TMPENVFILE}) should exist!"
424 source "${TMPENVFILE}"
426 # Migration of amandates from /etc to $localstatedir/amanda
427 if [ -f "${ROOT}/etc/amandates" -a \
428 ! -f "${ROOT}/${AMANDA_USER_HOMEDIR}/amanda/amandates" ]; then
429 einfo "Migrating amandates from /etc/ to ${AMANDA_USER_HOMEDIR}/amanda"
430 einfo "A backup is also placed at /etc/amandates.orig"
431 cp -dp "${ROOT}/etc/amandates" "${ROOT}/etc/amandates.orig"
432 mkdir -p "${ROOT}/${AMANDA_USER_HOMEDIR}/amanda/"
433 cp -dp "${ROOT}/etc/amandates" "${ROOT}/${AMANDA_USER_HOMEDIR}/amanda/amandates"
435 if [ -f "${ROOT}/etc/amandates" ]; then
436 einfo "If you have migrated safely, please delete /etc/amandates"
439 einfo "Checking setuid permissions"
440 amanda_permissions_fix "${ROOT}"
442 elog "You should configure Amanda in /etc/amanda now."
444 elog "If you use xinetd, Don't forget to check /etc/xinetd.d/amanda"
445 elog "and restart xinetd afterwards!"
447 elog "Otherwise, please look at /usr/share/doc/${PF}/inetd.amanda.sample"
448 elog "as an example of how to configure your inetd."
450 elog "systemd-users: enable and start amanda.socket or the relevant services"
451 elog "regarding what auth method you use."
453 elog "NOTICE: If you need raw access to partitions you need to add the"
454 elog "amanda user to the 'disk' group."
456 elog "NOTICE: If you have a tape changer, you need to add the amanda user"
457 elog "to the 'tape' group."
459 elog "If you use localhost in your disklist your restores may break."
460 elog "You should replace it with the actual hostname!"
461 elog "Please also see the syntax changes to amandahosts."
462 elog "The only exception is when you use the authentication method 'local'."
464 elog "Please note that this package no longer explicitly depends on"
465 elog "virtual/inetd, as it supports modes where an inetd is not needed"
466 elog "(see bug #506028 for details)."
469 # We have had reports of amanda file permissions getting screwed up.
470 # Losing setuid, becoming too lax etc.
471 # ONLY root and users in the amanda group should be able to run these binaries!
472 amanda_permissions_fix() {
474 [ -z "${root}" ] && die "Failed to pass root argument to amanda_permissions_fix!"
475 local le="/usr/libexec/amanda"
476 for i in /usr/sbin/amcheck "${le}"/calcsize "${le}"/killpgrp \
477 "${le}"/rundump "${le}"/runtar "${le}"/dumper \
479 chown root:${AMANDA_GROUP_NAME} "${root}"/${i}
480 chmod u=srwx,g=rx,o= "${root}"/${i}
484 # We do not want the perl-module tests.