aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Andree <mandree@FreeBSD.org>2021-08-04 20:09:19 +0000
committerMatthias Andree <mandree@FreeBSD.org>2021-08-04 21:23:08 +0000
commit54b26298c82275501e6dcc6c733d21c0a6bf0d9f (patch)
tree7818596e3c873eb5e00d4ded61b5d5d59983cd76
parentc06742b7ce6eed0efea530cc81f5029d25a837a8 (diff)
downloadports-54b26298c82275501e6dcc6c733d21c0a6bf0d9f.tar.gz
ports-54b26298c82275501e6dcc6c733d21c0a6bf0d9f.zip
sysutils/e2fsprogs: port rework
1 - sysutils/e2fsprogs: fix checksum mismatches e2fsprogs has replaced symlinks by hardlinks in its post-install if /sbin and ${PREFIX}/sbin were on the same file system, and unless script processing was defeated on install or upgrade. Leave symlinks in place to avoid checksum mismatches. PR: 252184 [1] 2 - add FLAVORS for /sbin handling - no flavor (default): set symlinks from $PREFIX/sbin to /sbin - roothardlinks: set hardlinks from $PREFIX/sbin to /sbin, when $PREFIX, its children, and /sbin reside on the same file system - nobootfsck: do not install into /sbin, but this makes fsck unavailable for ext2/ext3/ext4 file systems before $PREFIX/ is mounted Require tests on i386 and amd64 only for FreeBSD >= 14 (not >= 12). Do not print removal advice from post-uninstall on upgrades.
-rw-r--r--sysutils/e2fsprogs/Makefile40
-rw-r--r--sysutils/e2fsprogs/pkg-install21
-rw-r--r--sysutils/e2fsprogs/pkg-plist4
3 files changed, 41 insertions, 24 deletions
diff --git a/sysutils/e2fsprogs/Makefile b/sysutils/e2fsprogs/Makefile
index 2d8c3dbf78be..577ecec3b840 100644
--- a/sysutils/e2fsprogs/Makefile
+++ b/sysutils/e2fsprogs/Makefile
@@ -1,4 +1,16 @@
# Created by: Maxim Sobolev <sobomax@FreeBSD.org>
+# heavily modified by: Matthias Andree <mandree@FreeBSD.org>
+#
+# supported FLAVORS= default nobootfsck roothardlinks
+# FLAVORS explained:
+# default - install e2fsck fsck_ext2fs into /sbin and symlink from PREFIX
+# - requires that / is writable
+#
+# roothardlinks - install e2fsck fsck_ext2fs into /sbin and hardlink from PREFIX
+# - requires that / is writable and the same file system as PREFIX
+#
+# nobootfsck - does not install into /sbin, but will be unable to fsck
+# ext2/ext3/ext4 file systems at boot, before PREFIX is mounted
PORTNAME= e2fsprogs
PORTVERSION= 1.46.3
@@ -98,6 +110,13 @@ MAKE_ARGS+= V=1
.include <bsd.port.options.mk>
+.if ${MASTERDIR} == ${.CURDIR}
+FLAVORS= default nobootfsck roothardlinks
+FLAVOR?= ${FLAVORS:[1]}
+nobootfsck_PKGNAMESUFFIX= -nobootfsck
+roothardlinks_PKGNAMESUFFIX= -roothardlinks
+.endif
+
. if ! empty(ARCH:Mpowerpc*)
# Fix powerpc64/powerpc SIGSEGV,
# see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=231570 (ppc64)
@@ -197,7 +216,13 @@ post-patch::
.if ${MASTERDIR} == ${.CURDIR}
# NOTE: The previous .if block goes all the way to the end of the file.
-.if !empty(PORT_OPTIONS:MNOTESTS) && (${OPSYS} == FreeBSD) && (${OSVERSION} >= 1200000 || ((${ARCH} != i386) && (${ARCH} != amd64)))
+.if ${FLAVOR} == nobootfsck
+PLIST_SUB+= ROOTSBIN="@comment "
+.else
+PLIST_SUB+= ROOTSBIN=""
+.endif
+
+.if !empty(PORT_OPTIONS:MNOTESTS) && (${OPSYS} == FreeBSD) && (${OSVERSION} >= 1400000 || ((${ARCH} != i386) && (${ARCH} != amd64)))
BROKEN= it was not tested on your system by the maintainer; you must run self-tests
.endif
@@ -295,13 +320,22 @@ post-install:
# in the regular hierarchy, normally $PREFIX/sbin. Hard links may
# crash the install if /usr[/local] is a separate file system from /,
# and pkg 1.15.4 can't automatically unroll or install relative symlinks.
+.if ${FLAVOR} != nobootfsck
${MKDIR} ${STAGEDIR}/sbin
${MV} -f ${STAGEDIR}${PREFIX}/sbin/e2fsck ${STAGEDIR}/sbin/ # from INSTALL_TARGET
${INSTALL_PROGRAM} ${WRKSRC}/fsck_ext2fs ${STAGEDIR}/sbin/ # from port
- # according to TPH 6.1.1 Handling Symbolic Links, these are to be absolute,
- # yet stage-qa warns about these on 2020-09-16:
+ # according to TPH 6.1.1 Handling Symbolic Links, these are to be absolute
+ # for the default FLAVOR, yet stage-qa warns about these on 2020-09-16.
+. if ${FLAVOR} == roothardlinks
+ ${LN} -f ${STAGEDIR}/sbin/fsck_ext2fs ${STAGEDIR}${PREFIX}/sbin/
+ ${LN} -f ${STAGEDIR}/sbin/e2fsck ${STAGEDIR}${PREFIX}/sbin/
+. else
${LN} -fs /sbin/fsck_ext2fs ${STAGEDIR}${PREFIX}/sbin/
${LN} -fs /sbin/e2fsck ${STAGEDIR}${PREFIX}/sbin/
+. endif
+.else
+ ${INSTALL_PROGRAM} ${WRKSRC}/fsck_ext2fs ${STAGEDIR}${PREFIX}/sbin/
+.endif
# these are made hardlinks to symlinks - -P avoids following them to /sbin:
${LN} -fP ${STAGEDIR}${PREFIX}/sbin/e2fsck ${STAGEDIR}${PREFIX}/sbin/fsck.ext2
${LN} -fP ${STAGEDIR}${PREFIX}/sbin/e2fsck ${STAGEDIR}${PREFIX}/sbin/fsck.ext3
diff --git a/sysutils/e2fsprogs/pkg-install b/sysutils/e2fsprogs/pkg-install
index 25259ebfc8a3..34a21e9364f0 100644
--- a/sysutils/e2fsprogs/pkg-install
+++ b/sysutils/e2fsprogs/pkg-install
@@ -6,23 +6,6 @@ MODE="$2" # PRE-INSTALL, POST-INSTALL, DEINSTALL, POST-DEINSTALL
case "$MODE" in
POST-INSTALL)
- # try to replace the e2fsck and its wrapper, fsck_ext2fs,
- # symbolic links by hard links if possible (pkg ships them as symlinks)
- d1=${PKG_ROOTDIR}/sbin/ ; dev1=$(stat -Lf %Xd "$d1")
- d2=${PKG_ROOTDIR}${PKG_PREFIX}/sbin/ ; dev2=$(stat -Lf %Xd "$d2")
- if [ "$dev1" = "$dev2" ] && [ "$(realpath "$d1")" != "$(realpath "$d2")" ]; then
- for i in e2fsck fsck_ext2fs ; do
- ln -fhP ${d1}${i} ${d2}${i}
- done
- for i in ext2 ext3 ext4 ; do
- ln -fhP ${d2}e2fsck ${d2}fsck.$i
- done
- echo >&2 "NOTE: replaced e2fsprogs symlinks by hard links, will recalculate checksums with a root at(1) job."
- pid=$$
- echo /bin/sh -c "\"set -x ; { while sleep 2 </dev/null ; do kill -0 $pid || break ; done ; \
- pkg check -r "${PKG_NAME}" ; } </dev/null 2>&1 | logger -t pkg.e2fsprogs.POST-INSTALL \"" \
- | at now
- fi
#
# install configuration file and update config files from
# old "ext4dev" to current "ext4" name.
@@ -71,14 +54,14 @@ DEINSTALL)
${PKG_PREFIX}/etc/mke2fs.conf.dist
then
rm -f ${PKG_PREFIX}/etc/mke2fs.conf
- else
+ elif [ "_${PKG_UPGRADE-upgrade}" = _upgrade ] ; then
echo "If and only if you are deleting e2fsprogs forever,"
echo "remember to delete ${PKG_PREFIX}/etc/mke2fs.conf."
fi
# e2fsck.conf is no longer part of the distribution, but still supported,
# => no pkg-list @sample line possible
# and no reference e2fsck.conf.sample or e2fsck.conf.dist is available
- if test -f ${PKG_PREFIX}/etc/e2fsck.conf
+ if test -f ${PKG_PREFIX}/etc/e2fsck.conf -a "_${PKG_UPGRADE-upgrade}" = _upgrade
then
echo "If and only if you are deleting e2fsprogs forever,"
echo "remember to delete ${PKG_PREFIX}/etc/e2fsck.conf."
diff --git a/sysutils/e2fsprogs/pkg-plist b/sysutils/e2fsprogs/pkg-plist
index b479a627310b..83a2baf4e486 100644
--- a/sysutils/e2fsprogs/pkg-plist
+++ b/sysutils/e2fsprogs/pkg-plist
@@ -1,5 +1,5 @@
-/sbin/e2fsck
-/sbin/fsck_ext2fs
+%%ROOTSBIN%%/sbin/e2fsck
+%%ROOTSBIN%%/sbin/fsck_ext2fs
bin/chattr
bin/e2fsprogs-compile_et
%%FUSEFS%%bin/fuse2fs