# Copyright 2024-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 inherit ssl-cert systemd tmpfiles DESCRIPTION="WWW Admin for the Video Disk Recorder" HOMEPAGE="http://andreas.vdr-developer.org/vdradmin-am/index.html" SRC_URI="https://github.com/vdr-projects/vdradmin-am/archive/refs/tags/v${PV}.tar.gz -> ${P}.tgz" LICENSE="GPL-2 LGPL-2.1" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="ipv6 systemd" DEPEND="acct-user/vdradmin dev-lang/perl dev-perl/Authen-SASL dev-perl/CGI dev-perl/Digest-HMAC dev-perl/HTTP-Daemon dev-perl/Locale-gettext dev-perl/Template-Toolkit dev-perl/URI dev-perl/libwww-perl virtual/perl-IO-Compress virtual/perl-libnet ipv6? ( dev-perl/IO-Socket-INET6 ) ssl? ( dev-perl/HTTP-Daemon-SSL ) systemd? ( sys-apps/systemd )" RDEPEND="${DEPEND} app-admin/sudo" BDEPEND=" acct-user/vdradmin sys-devel/gettext" PATCHES=( "${FILESDIR}/timerlist_prio_lifetime_addon.patch" ) ETC_DIR="/etc/vdradmin" CERTS_DIR="/etc/vdradmin/certs" LIB_DIR="/usr/share/vdradmin" VDRADMIN_USER="vdradmin" VDRADMIN_GROUP="vdradmin" create_ssl_cert() { elog "Create and install SSL certificate" SSL_ORGANIZATION="VDR vdradmin-am" SSL_COMMONNAME=$("${ROOT}"/bin/hostname -f) elog "install_cert ${CERTS_DIR}/server-cert.pem for host $SSL_COMMONNAME" rm -f "${ROOT}${CERTS_DIR}/server-cert.pem" "${ROOT}${CERTS_DIR}/server-key.pem" || die install_cert "${ROOT}${CERTS_DIR}/vdradmin" ls -la "${ROOT}${CERTS_DIR}/" rm -f "${ROOT}${CERTS_DIR}/vdradmin.csr" "${ROOT}${CERTS_DIR}/vdradmin.pem" || die mv "${ROOT}${CERTS_DIR}/vdradmin.key" "${ROOT}${CERTS_DIR}/server-key.pem" || die mv "${ROOT}${CERTS_DIR}/vdradmin.crt" "${ROOT}${CERTS_DIR}/server-cert.pem" || die chown "${VDRADMIN_USER}":"${VDRADMIN_GROUP}" "${ROOT}${CERTS_DIR}/server-cert.pem" || die chown "${VDRADMIN_USER}":"${VDRADMIN_GROUP}" "${ROOT}${CERTS_DIR}/server-key.pem" || die } src_unpack() { unpack ${A} cp "${FILESDIR}"/vdradmind.service "${WORKDIR}"/vdradmind.service || die } src_prepare() { default sed -i vdradmind.pl \ -e "s|FILES_IN_SYSTEM\s*=\s*0;|FILES_IN_SYSTEM = 1;|" || die } src_install() { newinitd "${FILESDIR}"/vdradmin-3.6.7.init vdradmin newconfd "${FILESDIR}"/vdradmin-3.6.10.conf vdradmin systemd_dounit "${WORKDIR}"/vdradmind.service dotmpfiles "${FILESDIR}"/vdradmind.conf exeinto /usr/share/vdradmin/systemd doexe "${FILESDIR}"/vdradmin-systemd-helper.sh insinto /etc/logrotate.d newins "${FILESDIR}"/vdradmin-3.6.6.logrotate vdradmin newbin vdradmind.pl vdradmind insinto "${LIB_DIR}"/template doins -r "${S}"/template/* insinto "${LIB_DIR}"/lib/Template/Plugin doins -r "${S}"/lib/Template/Plugin/JavaScript.pm newman vdradmind.pl.1 vdradmind.8 dodoc CREDITS FAQ HISTORY INSTALL README* REQUIREMENTS docinto contrib dodoc "${S}"/contrib/* keepdir "${ETC_DIR}" fowners "${VDRADMIN_USER}":"${VDRADMIN_GROUP}" "${ETC_DIR}" if use ssl; then keepdir "${CERTS_DIR}" fowners "${VDRADMIN_USER}":"${VDRADMIN_GROUP}" "${CERTS_DIR}" fi mkdir -p "${ED}/etc/sudoers.d/" || die echo "vdradmin ALL=NOPASSWD:/bin/systemctl daemon-reload" > "${ED}/etc/sudoers.d/${PN}" || die chmod 0440 "${ED}/etc/sudoers.d/${PN}" || die local PO L for PO in po/*.po do L=$(basename $PO .po) insinto /usr/share/locale/${L}/LC_MESSAGES/ msgfmt po/${L}.po -o po/${L}.mo newins po/${L}.mo vdradmin.mo done } pkg_preinst() { install -m 0644 -o ${VDRADMIN_USER} -g ${VDRADMIN_GROUP} /dev/null \ "${ED}"${ETC_DIR}/vdradmind.conf || die if [[ -f "${EROOT}"${ETC_DIR}/vdradmind.conf ]]; then cp "${EROOT}"${ETC_DIR}/vdradmind.conf \ "${ED}"${ETC_DIR}/vdradmind.conf || die else elog elog "Creating a new config-file." echo cat <<-EOF > "${ED}"${ETC_DIR}/vdradmind.conf VDRCONFDIR = /etc/vdr VIDEODIR = /var/vdr/video EPG_FILENAME = /var/vdr/video/epg.data EPGIMAGES = /var/vdr/video/epgimages PASSWORD = gentoo-vdr USERNAME = gentoo-vdr VDR_PORT = 6419 EOF # Feed it with newlines yes "" \ | "${ED}"/usr/bin/vdradmind --cfgdir "${ED}"${ETC_DIR} --config \ |sed -e 's|: |: \n|g' [[ ${PIPESTATUS[1]} == "0" ]] \ || die "Failed to create initial configuration." elog elog "Created default user/password: gentoo-vdr/gentoo-vdr" elog elog "You can run \"emerge --config ${PN}\" if the default-values" elog "do not match your installation or change them in the Setup-Menu" elog "of the Web-Interface." fi } pkg_postinst() { tmpfiles_process vdradmind.conf if use ipv6; then elog elog "To make use of the ipv6 protocol" elog "you need to enable it in ${EROOT}/etc/conf.d/vdradmin" fi if use ssl; then elog elog "To use ssl connection to your vdradmin" elog "you need to enable it in ${EROOT}/etc/conf.d/vdradmin" # only create a certificate if none exists if [[ -f ${ROOT}${CERTS_DIR}/server-cert.pem ]]; then elog "Existing SSL cert found, not touching it." else elog "No SSL cert found, creating a default one now" create_ssl_cert fi fi if [[ ! -f "${EROOT}"${ETC_DIR}/vdradmin-systemd.env ]]; then echo "# systemd environment file, created by pre-exec script, do not edit!" \ > "${EROOT}"${ETC_DIR}/vdradmin-systemd.env chown "${VDRADMIN_USER}":"${VDRADMIN_GROUP}" "${EROOT}"${ETC_DIR}/vdradmin-systemd.env || die fi elog elog "To extend the functionality of ${PN} you can emerge" elog " media-plugins/vdr-epgsearch to search the EPG" elog " media-plugins/vdr-streamdev for livetv streaming" elog "on the machine running the VDR you connect to with ${PN}." } pkg_config() { "${EROOT}"/usr/bin/vdradmind -c }