etc, ypserv: Fix symlink creation for pkgbase

The Makefile logic for /etc/aliases, /var/yp/Makefile and /etc/unbound
tries to avoid creating the symlink if it already exists in the target,
but this breaks with pkgbase since the symlink won't be installed (and
therefore won't be added to METALOG) if building with an existing
worldstage, meaning it's missing from the generated package.

Change the logic to forcibly install the symlink if NO_ROOT is defined,
but keep the existing logic for non-package builds to avoid trashing
the user's custom symlinks on non-pkgbase installworld.

MFC after:	3 seconds
Reported by:	cperciva
Reviewed by:	cperciva, emaste
Sponsored by:	https://www.patreon.com/bsdivy
Differential Revision:	https://reviews.freebsd.org/D52834
This commit is contained in:
Lexi Winter
2025-10-02 02:10:28 +01:00
parent 213170eb95
commit 09cd3decf0
2 changed files with 19 additions and 9 deletions
+15 -8
View File
@@ -64,9 +64,12 @@ distribution:
${INSTALL_SYMLINK} -T "package=runtime" ../var/run/os-release \
${DESTDIR}/etc/os-release
.if ${MK_UNBOUND} != "no"
if [ ! -e ${DESTDIR}/etc/unbound ]; then \
${INSTALL_SYMLINK} -T "package=unbound" \
../var/unbound ${DESTDIR}/etc/unbound; \
# If NO_ROOT is defined, we are doing a stage install and always need to
# install the /etc/unbound symlink, otherwise, don't overwrite the user's
# existing symlink.
if [ "${NO_ROOT:Dtrue}" = true -o ! -e ${DESTDIR}/etc/unbound ]; then \
${INSTALL_SYMLINK} -Tpackage=unbound ../var/unbound \
${DESTDIR}/etc/unbound; \
fi
.endif
.if ${MK_SENDMAIL} != "no"
@@ -82,12 +85,16 @@ distribution:
.if ${MK_MAIL} != "no"
cd ${.CURDIR}/mail; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \
-T "package=runtime,config" ${ETCMAIL} ${DESTDIR}/etc/mail
if [ -d ${DESTDIR}/etc/mail -a -f ${DESTDIR}/etc/mail/aliases -a \
! -f ${DESTDIR}/etc/aliases ]; then \
${INSTALL_SYMLINK} -T "package=runtime" \
mail/aliases ${DESTDIR}/etc/aliases; \
# If NO_ROOT is defined, we are doing a stage install and always need to
# install the /etc/aliases symlink, otherwise, don't overwrite the user's
# existing symlink.
if [ "${NO_ROOT:Dtrue}" = true -o \( -f ${DESTDIR}/etc/mail/aliases -a \
! -f ${DESTDIR}/etc/aliases \) ]; then \
${INSTALL_SYMLINK} -Tpackage=runtime mail/aliases \
${DESTDIR}/etc/aliases; \
fi
.endif
.endif # ${MK_MAIL} != "no"
.if ${MK_SENDMAIL} != "no"
cd ${.CURDIR}/mail; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \
-T "package=sendmail" ${ETCMAIL_SENDMAIL} ${DESTDIR}/etc/mail
+4 -1
View File
@@ -41,7 +41,10 @@ FILESNAME= Makefile.dist
FILESDIR= /var/yp
SCRIPTS= ypinit.sh
.if !exists(${DESTDIR}${FILESDIR}/Makefile)
# If NO_ROOT is defined, we are doing a stage install and always need to
# install the symlink, otherwise, don't overwrite the user's existing
# symlink.
.if defined(NO_ROOT) || !exists(${DESTDIR}${FILESDIR}/Makefile)
SYMLINKS= ${FILESNAME} ${FILESDIR}/Makefile
.endif