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-2.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
184 addpredict /var/cache/samba/gencache.tdb
186 addpredict /run/blkid
187 addpredict /etc/blkid.tab
189 [ ! -f "${TMPENVFILE}" ] && die "Variable setting file (${TMPENVFILE}) should exist!"
190 source "${TMPENVFILE}"
193 einfo "Using ${AMANDA_SERVER_TAPE} for tape server."
194 myconf="${myconf} --with-tape-server=${AMANDA_SERVER_TAPE}"
195 einfo "Using ${AMANDA_SERVER_TAPE_DEVICE} for tape server."
196 myconf="${myconf} --with-tape-device=${AMANDA_SERVER_TAPE_DEVICE}"
197 einfo "Using ${AMANDA_SERVER_INDEX} for index server."
198 myconf="${myconf} --with-index-server=${AMANDA_SERVER_INDEX}"
199 einfo "Using ${AMANDA_USER_NAME} for amanda user."
200 myconf="${myconf} --with-user=${AMANDA_USER_NAME}"
201 einfo "Using ${AMANDA_GROUP_NAME} for amanda group."
202 myconf="${myconf} --with-group=${AMANDA_GROUP_NAME}"
203 einfo "Using ${AMANDA_TAR} as Tar implementation."
204 myconf="${myconf} --with-gnutar=${AMANDA_TAR}"
205 einfo "Using ${AMANDA_TAR_LISTDIR} as tar listdir."
206 myconf="${myconf} --with-gnutar-listdir=${AMANDA_TAR_LISTDIR}"
207 einfo "Using ${AMANDA_CONFIG_NAME} as default config name."
208 myconf="${myconf} --with-config=${AMANDA_CONFIG_NAME}"
209 einfo "Using ${AMANDA_TMPDIR} as Amanda temporary directory."
210 myconf="${myconf} --with-tmpdir=${AMANDA_TMPDIR}"
212 if [ -n "${AMANDA_PORTS_UDP}" ] && [ -n "${AMANDA_PORTS_TCP}" ] && [ -z "${AMANDA_PORTS_BOTH}" ] ; then
213 eerror "If you want _both_ UDP and TCP ports, please use only the"
214 eerror "AMANDA_PORTS environment variable for identical ports, or set"
215 eerror "AMANDA_PORTS_BOTH."
216 die "Bad port setup!"
218 if [ -n "${AMANDA_PORTS_UDP}" ]; then
219 einfo "Using UDP ports ${AMANDA_PORTS_UDP/,/-}"
220 myconf="${myconf} --with-udpportrange=${AMANDA_PORTS_UDP}"
222 if [ -n "${AMANDA_PORTS_TCP}" ]; then
223 einfo "Using TCP ports ${AMANDA_PORTS_TCP/,/-}"
224 myconf="${myconf} --with-tcpportrange=${AMANDA_PORTS_TCP}"
226 if [ -n "${AMANDA_PORTS}" ]; then
227 einfo "Using ports ${AMANDA_PORTS/,/-}"
228 myconf="${myconf} --with-portrange=${AMANDA_PORTS}"
233 myconf="${myconf} --with-buffered-dump"
234 # "debugging" in the configuration is NOT debug in the conventional sense.
235 # It is actually just useful output in the application, and should remain
236 # enabled. There are some cases of breakage with MTX tape changers as of
237 # 2.5.1p2 that it exposes when turned off as well.
238 myconf="${myconf} --with-debugging"
239 # Where to put our files
240 myconf="${myconf} --localstatedir=${AMANDA_USER_HOMEDIR}"
243 myconf="${myconf} $(use_with samba smbclient /usr/bin/smbclient)"
245 # Support for BSD, SSH, BSDUDP, BSDTCP security methods all compiled in by
247 myconf="${myconf} --with-bsd-security"
248 myconf="${myconf} --with-ssh-security"
249 myconf="${myconf} --with-bsdudp-security"
250 myconf="${myconf} --with-bsdtcp-security"
252 # kerberos-security mechanism version 5
253 myconf="${myconf} $(use_with kerberos krb5-security)"
256 myconf="${myconf} `use_enable s3 s3-device`"
258 # libcurl is required for S3 but otherwise optional
260 myconf="${myconf} $(use_with curl libcurl)"
263 # Client only, as requested in bug #127725
264 if use minimal ; then
265 myconf="${myconf} --without-server"
268 myconf="${myconf} $(use_with gnuplot)"
272 myconf="${myconf} `use_with ipv6`"
273 # This is to prevent the IPv6-is-working test
274 # As the test fails on binpkg build hosts with no IPv6.
275 use ipv6 && export amanda_cv_working_ipv6=yes
278 myconf="${myconf} `use_enable nls`"
280 # Bug #296634: Perl location
282 myconf="${myconf} --with-amperldir=${VENDOR_LIB}"
284 # Bug 296633: --disable-syntax-checks
285 # Some tests are not safe for production systems
286 myconf="${myconf} --disable-syntax-checks"
289 myconf="${myconf} --enable-manpage-build"
295 $(use_with readline) \
300 # Again, do not want the perl-module src_compile
305 [ ! -f "${TMPENVFILE}" ] && die "Variable setting file (${TMPENVFILE}) should exist!"
308 einfo "Doing stock install"
309 emake DESTDIR="${D}" install
311 # Build the envdir file
312 # Don't forget this..
313 einfo "Building environment file"
315 echo "# These settings are what was present in the environment when this"
316 echo "# Amanda was compiled. Changing anything below this comment will"
317 echo "# have no effect on your application, but it merely exists to"
318 echo "# preserve them for your next emerge of Amanda"
319 cat "${TMPENVFILE}" | sed "s,=\$,='',g"
320 ) >> "${MYFILESDIR}/${ENVDFILE}"
323 einfo "Installing environment config file"
324 doenvd "${MYFILESDIR}/${ENVDFILE}"
326 # Lock down next section (up until docs).
328 # Installing Amanda Xinetd Services Definition
329 einfo "Installing xinetd service file"
330 insinto /etc/xinetd.d
331 if use minimal ; then
332 newins "${MYFILESDIR}"/amanda-xinetd-2.6.1_p1-client amanda
334 newins "${MYFILESDIR}"/amanda-xinetd-2.6.1_p1-server amanda
337 if ! use minimal; then
338 einfo "Installing Sample Daily Cron Job for Amanda"
339 insinto /etc/cron.daily
340 newins "${MYFILESDIR}/amanda-cron" amanda
343 einfo "Installing systemd service and socket files for Amanda"
344 systemd_dounit "${FILESDIR}"/amanda.socket || die
345 systemd_newunit "${FILESDIR}"/amanda.service 'amanda@.service' || die
348 einfo "Installing .amandahosts File for ${AMANDA_USER_NAME} user"
349 doins "${T}/amandahosts"
350 fperms 600 /etc/amanda/amandahosts
352 dosym /etc/amanda/amandahosts "${AMANDA_USER_HOMEDIR}/.amandahosts"
353 insinto "${AMANDA_USER_HOMEDIR}"
354 einfo "Installing .profile for ${AMANDA_USER_NAME} user"
355 newins "${MYFILESDIR}/amanda-profile" .profile
358 doins "${S}/example/amanda-client.conf"
359 if ! use minimal ; then
360 insinto "/etc/amanda/${AMANDA_CONFIG_NAME}"
361 doins "${S}/example/amanda.conf"
362 doins "${S}/example/disklist"
363 keepdir "${AMANDA_USER_HOMEDIR}/${AMANDA_CONFIG_NAME}/index"
366 keepdir "${AMANDA_TAR_LISTDIR}"
367 keepdir "${AMANDA_USER_HOMEDIR}/amanda"
368 keepdir "${AMANDA_TMPDIR}/dumps"
369 # Just make sure it exists for XFS to work...
370 use xfs && keepdir /var/xfsdump/inventory
373 for i in "${AMANDA_USER_HOMEDIR}" "${AMANDA_TAR_LISTDIR}" \
374 "${AMANDA_TMPDIR}" /etc/amanda; do
375 einfo "Securing directory (${i})"
376 fowners -R ${AMANDA_USER_NAME}:${AMANDA_GROUP_NAME} ${i}
380 "${AMANDA_USER_HOMEDIR}" "${AMANDA_TAR_LISTDIR}" \
381 "${AMANDA_TMPDIR}" "${AMANDA_TMPDIR}/dumps" \
382 "${AMANDA_USER_HOMEDIR}/amanda" \
385 if ! use minimal ; then
387 "${AMANDA_USER_HOMEDIR}/${AMANDA_CONFIG_NAME}" \
388 /etc/amanda/${AMANDA_CONFIG_NAME}
391 einfo "Setting setuid permissions"
392 amanda_permissions_fix "${D}"
394 # Relax permissions again
398 einfo "Installing documentation"
399 dodoc AUTHORS ChangeLog DEVELOPING NEWS README ReleaseNotes UPGRADING
401 einfo "Installing standard inetd sample"
402 newdoc "${MYFILESDIR}/amanda-inetd.amanda.sample-2.6.0_p2-r2" amanda-inetd.amanda.sample
403 # Amanda example configs
404 einfo "Installing example configurations"
405 rm "${D}"/usr/share/amanda/{COPYRIGHT,ChangeLog,NEWS,ReleaseNotes}
406 mv "${D}/usr/share/amanda/example" "${D}/usr/share/doc/${PF}/"
408 newdoc "${FILESDIR}/example_amanda.conf" amanda.conf
409 newdoc "${FILESDIR}/example_disklist-2.5.1_p3-r1" disklist
410 newdoc "${FILESDIR}/example_global.conf" global.conf
412 einfo "Cleaning up dud .la files"
414 find "${D}"/"${VENDOR_LIB}" -name '*.la' -print0 |xargs -0 rm -f
418 [ ! -f "${TMPENVFILE}" -a "$MERGE_TYPE" == "binary" ] && \
419 TMPENVFILE="${ROOT}${ENVDIR}/${ENVDFILE}"
420 [ ! -f "${TMPENVFILE}" ] && die "Variable setting file (${TMPENVFILE}) should exist!"
421 source "${TMPENVFILE}"
423 # Migration of amandates from /etc to $localstatedir/amanda
424 if [ -f "${ROOT}/etc/amandates" -a \
425 ! -f "${ROOT}/${AMANDA_USER_HOMEDIR}/amanda/amandates" ]; then
426 einfo "Migrating amandates from /etc/ to ${AMANDA_USER_HOMEDIR}/amanda"
427 einfo "A backup is also placed at /etc/amandates.orig"
428 cp -dp "${ROOT}/etc/amandates" "${ROOT}/etc/amandates.orig"
429 mkdir -p "${ROOT}/${AMANDA_USER_HOMEDIR}/amanda/"
430 cp -dp "${ROOT}/etc/amandates" "${ROOT}/${AMANDA_USER_HOMEDIR}/amanda/amandates"
432 if [ -f "${ROOT}/etc/amandates" ]; then
433 einfo "If you have migrated safely, please delete /etc/amandates"
436 einfo "Checking setuid permissions"
437 amanda_permissions_fix "${ROOT}"
439 elog "You should configure Amanda in /etc/amanda now."
441 elog "If you use xinetd, Don't forget to check /etc/xinetd.d/amanda"
442 elog "and restart xinetd afterwards!"
444 elog "Otherwise, please look at /usr/share/doc/${PF}/inetd.amanda.sample"
445 elog "as an example of how to configure your inetd."
447 elog "systemd-users: enable and start amanda.socket or the relevant services"
448 elog "regarding what auth method you use."
450 elog "NOTICE: If you need raw access to partitions you need to add the"
451 elog "amanda user to the 'disk' group."
453 elog "NOTICE: If you have a tape changer, you need to add the amanda user"
454 elog "to the 'tape' group."
456 elog "If you use localhost in your disklist your restores may break."
457 elog "You should replace it with the actual hostname!"
458 elog "Please also see the syntax changes to amandahosts."
459 elog "The only exception is when you use the authentication method 'local'."
461 elog "Please note that this package no longer explicitly depends on"
462 elog "virtual/inetd, as it supports modes where an inetd is not needed"
463 elog "(see bug #506028 for details)."
466 # We have had reports of amanda file permissions getting screwed up.
467 # Losing setuid, becoming too lax etc.
468 # ONLY root and users in the amanda group should be able to run these binaries!
469 amanda_permissions_fix() {
471 [ -z "${root}" ] && die "Failed to pass root argument to amanda_permissions_fix!"
472 local le="/usr/libexec/amanda"
473 for i in /usr/sbin/amcheck "${le}"/calcsize "${le}"/killpgrp \
474 "${le}"/rundump "${le}"/runtar "${le}"/dumper \
476 chown root:${AMANDA_GROUP_NAME} "${root}"/${i}
477 chmod u=srwx,g=rx,o= "${root}"/${i}
481 # We do not want the perl-module tests.