NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

install/50838: etcupdate's NEED_xxx logic broken



>Number:         50838
>Category:       install
>Synopsis:       etcupdate's NEED_xxx logic broken
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    install-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Feb 22 17:45:00 +0000 2016
>Originator:     Edgar Fuß <ef%math.uni-bonn.de@localhost>
>Release:        NetBSD 6.1_STABLE
>Organization:
Mathematisches Institut der Universität Bonn
>Environment:
	
	
System: NetBSD trave.math.uni-bonn.de 6.1_STABLE NetBSD 6.1_STABLE (MI-Server) #5: Mon Feb 15 12:26:39 CET 2016 support%trave.math.uni-bonn.de@localhost:/usr/obj/sys/arch/amd64/compile/miserv amd64
Architecture: x86_64
Machine: amd64
>Description:
	The NEED_xxx feature of etcupdate (that i.e. asks you to run passwd_mkdb in case a new version of master.passwd is installed) is broken. 
	The problem is that diff_and_merge_files() and thus install_file() (which sets the NEED_xxx variables to "true") is run after a pipe and thus in a subshell. So the "true" values never make it to the end of the script where their values are used. 
	The easiest way to fix it appears to create some special (.etcupdate._NEED_xxx) files in $TEMPROOT. Means that the removal of $TEMPROOT has to be moved after the NEED_xxx checks. 
>How-To-Repeat:
	Run etcupdate when master.passwd has changed
>Fix:
	--- etcupdate	2016-02-18 18:18:49.000000000 +0100
	+++ etcupdate-x	2016-02-19 16:03:49.000000000 +0100
	@@ -76,13 +76,6 @@
	 OVERWRITE_FILES=" "	# files to overwrite (Install)
	 MERGE_FILES=" "		# files to merge
	 
	-# Settings for post-installation procedures
	-NEED_MAKEDEV=false
	-NEED_MTREE=false
	-NEED_NEWALIASES=false
	-NEED_PWD_MKDB=false
	-NEED_SERVICES_MKDB=false
	-
	 
	 usage() {
		cat << EOF >&2
	@@ -168,7 +161,7 @@
		if ${AUTO_MISSING} || yesno "Create ${1}"; then
			verbose "Creating ${1}"
			mkdir -p "${1}" || exit 1
	-		NEED_MTREE=true
	+		touch "${TEMPROOT}"/.etcupdate.NEED_MTREE
		fi
	 }
	 
	@@ -182,19 +175,19 @@
		# Check if this was a special file
		case "${1}" in
		/dev/MAKEDEV)
	-		NEED_MAKEDEV=true
	+		touch "${TEMPROOT}"/.etcupdate.NEED_MAKEDEV
			;;
		/dev/MAKEDEV.local)
	-		NEED_MAKEDEV=true
	+		touch "${TEMPROOT}"/.etcupdate.NEED_MAKEDEV
			;;
		/etc/mail/aliases)
	-		NEED_NEWALIASES=true
	+		touch "${TEMPROOT}"/.etcupdate.NEED_NEWALIASES
			;;
		/etc/master.passwd)
	-		NEED_PWD_MKDB=true
	+		touch "${TEMPROOT}"/.etcupdate.NEED_PWD_MKDB
			;;
		/etc/services)
	-		NEED_SERVICES_MKDB=true
	+		touch "${TEMPROOT}"/.etcupdate.NEED_SERVICES_MKDB
			;;
		esac
	 }
	@@ -744,12 +737,6 @@
		echo "${REMAINING}" | sed -e 's/^/  /'
		echo ""
	 fi
	-if yesno "Remove ${TEMPROOT}"; then
	-	echo "*** Removing ${TEMPROOT}"
	-	rm -rf "${TEMPROOT}"
	-else
	-	echo "*** Keeping ${TEMPROOT}"
	-fi
	 
	 # Clean up after "make distribution"
	 if ${SOURCEMODE}; then
	@@ -764,7 +751,8 @@
	 fi
	 
	 # Do some post-installation tasks
	-if ${NEED_PWD_MKDB}; then
	+if test -f "${TEMPROOT}"/.etcupdate.NEED_PWD_MKDB; then
	+	rm "${TEMPROOT}"/.etcupdate.NEED_PWD_MKDB
		if yesno "Do you want to rebuild the password databases from the" \
			 "new master.passwd"
		then
	@@ -780,13 +768,14 @@
		fi
	 fi
	 
	-if ! ${NEED_SERVICES_MKDB}; then
	+if ! test -f "${TEMPROOT}"/.etcupdate.NEED_SERVICES_MKDB; then
		if test -e /var/db/services.db -a ! -e /var/db/services.cdb; then
	-		NEED_SERVICES_MKDB=true
	+		touch "${TEMPROOT}"/.etcupdate.NEED_SERVICES_MKDB
		fi
	 fi
	 
	-if ${NEED_SERVICES_MKDB}; then
	+if test -f "${TEMPROOT}"/.etcupdate.NEED_SERVICES_MKDB; then
	+	rm "${TEMPROOT}"/.etcupdate.NEED_SERVICES_MKDB
		if yesno "Do you want to rebuild the services databases from the" \
			 "new /etc/services"
		then
	@@ -800,14 +789,16 @@
			echo ""
		fi
	 fi
	-if ${NEED_MTREE}; then
	+if test -f "${TEMPROOT}"/.etcupdate.NEED_MTREE; then
	+	rm "${TEMPROOT}"/.etcupdate.NEED_MTREE
		if yesno "You have created new directories. Run mtree to set" \
			 "permissions"
		then
			(cd / && mtree -Udef /etc/mtree/NetBSD.dist)
		fi
	 fi
	-if ${NEED_MAKEDEV}; then
	+if test -f "${TEMPROOT}"/.etcupdate.NEED_MAKEDEV; then
	+	rm "${TEMPROOT}"/.etcupdate.NEED_MAKEDEV
		if yesno "Do you want to rebuild the device nodes in /dev"; then
			verbose "Running MAKEDEV in /dev"
			(cd "/dev" && ./MAKEDEV all)
	@@ -819,7 +810,8 @@
			echo ""
		fi
	 fi
	-if ${NEED_NEWALIASES}; then
	+if test -f "${TEMPROOT}"/.etcupdate.NEED_NEWALIASES; then
	+	rm "${TEMPROOT}"/.etcupdate.NEED_NEWALIASES
		if yesno "Do you want to rebuild the mail alias database"; then
			verbose "Running newaliases"
			newaliases
	@@ -831,6 +823,14 @@
			echo ""
		fi
	 fi
	+
	+if yesno "Remove ${TEMPROOT}"; then
	+	echo "*** Removing ${TEMPROOT}"
	+	rm -rf "${TEMPROOT}"
	+else
	+	echo "*** Keeping ${TEMPROOT}"
	+fi
	+
	 if [ -x /usr/sbin/postinstall ]; then
		echo "*** Running /usr/sbin/postinstall"
		eval "/usr/sbin/postinstall ${SRC_ARGLIST} check"

>Unformatted:
 	
 	


Home | Main Index | Thread Index | Old Index