git: cfb624d7e250 - releng/13.2 - freebsd-update: handle file -> directory on upgrade
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 03 Oct 2023 22:13:56 UTC
The branch releng/13.2 has been updated by gordon:
URL: https://cgit.FreeBSD.org/src/commit/?id=cfb624d7e2507c81441bb01e0078abad25ef235d
commit cfb624d7e2507c81441bb01e0078abad25ef235d
Author: Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2023-09-27 13:36:33 +0000
Commit: Gordon Tetlow <gordon@FreeBSD.org>
CommitDate: 2023-10-03 21:22:19 +0000
freebsd-update: handle file -> directory on upgrade
Upgrading from FreeBSD 13.2 to 14.0 failed with
install: ///usr/include/c++/v1/__string exists but is not a directory
because __string changed from a file to a directory with an LLVM
upgrade.
Now, remove the existing file when the type conflicts. Note that this
is only an interim fix to facilitate upgrades from 13.2 for 14.0 BETA
testing. This change does not handle the directory -> file case and
further work is needed.
PR: 273661
Reviewed by: dim, gordon
Approved by: so
Security: FreeBSD-EN-23:12.freebsd-update
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D41893
(cherry picked from commit f6d37c9ca13f8ab0ef32cf5344daecb8122d1e85)
(cherry picked from commit 774cc6348a50c13b952e9f36ef8395f9b48733db)
---
usr.sbin/freebsd-update/freebsd-update.sh | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/usr.sbin/freebsd-update/freebsd-update.sh b/usr.sbin/freebsd-update/freebsd-update.sh
index 4f779270926d..0c4053715b70 100644
--- a/usr.sbin/freebsd-update/freebsd-update.sh
+++ b/usr.sbin/freebsd-update/freebsd-update.sh
@@ -2905,7 +2905,13 @@ install_from_index () {
while read FPATH TYPE OWNER GROUP PERM FLAGS HASH LINK; do
case ${TYPE} in
d)
- # Create a directory
+ # Create a directory. A file may change to a directory
+ # on upgrade (PR273661). If that happens, remove the
+ # file first.
+ if [ -e "${BASEDIR}/${FPATH}" ] && \
+ ! [ -d "${BASEDIR}/${FPATH}" ]; then
+ rm -f -- "${BASEDIR}/${FPATH}"
+ fi
install -d -o ${OWNER} -g ${GROUP} \
-m ${PERM} ${BASEDIR}/${FPATH}
;;