Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 04 Mar 2015 17:00:26 +0100
From:      "Julian H. Stacey" <jhs@berklix.com>
To:        freebsd-hackers@freebsd.org
Cc:        "Julian H. Stacey" <jhs@berklix.com>, np@bsn.com
Subject:   Patch to stop world killing jails via failing install -fschg libc.so.7
Message-ID:  <201503041600.t24G0QV1048766@fire.js.berklix.net>

next in thread | raw e-mail | index | archive | help
Hi Hackers,
I have filed this patch
	https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=198279
via 
	https://bugs.freebsd.org/bugzilla/enter_bug.cgi
Chflags lovers (not me!) might want to write an enhanced patch.
	
-----
Jails are lethaly killed by make world, unless /etc/make.conf contains this:
	NO_FSCHG="yes"
	#       Avoid bsd.lib.mk 'INSTALLFLAGS+= -fschg' killing FreeBSD jails,
	#       deleting /lib/libc.so.7 via 'cd /usr/src/lib/csu/amd64 ; make install'

Killing:
	uname -a
	FreeBSD land.berklix.org 10.1-RELEASE-p6 FreeBSD 10.1-RELEASE-p6 #0: Tue Feb 24 19:00:21 UTC 2015     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
	
	cd /usr/src; make install
	===> lib/libc (install)
	install -s -o root -g wheel -m 444   -fschg -S  libc.so.7 /lib
	install: /lib/libc.so.7: chflags: Operation not permitted
	*** Error code 71

Recovery:
	/rescue/cp /usr/obj/usr/src/lib/libc/libc.so.7 /lib/

man install falsely claims: -S Safe copy, But is broken by -fschg !

Solutions:
- Disable chflags in bsd.lib.mk & bsd.lib.mk.  Patches appended.
- Or Extend bsd.lib.mk & bsd.lib.mk to be conditional on jail detection. (**)
- Or Fix install to not break with chflags (**)
(**) Last 2 should be done by those who want to keep Chflags in FreeBSD,
     not me, I've used Unix since 1978, but find chflags a Wart best removed.

I discovered this on 8.2-RELEASE 18 Jun 2013, & just got bitten again on
10.1-RELEASE-p6, (as my jail's make.conf lost its NO_FSCHG="yes").

*** 10.1-RELEASE-p6/src/share/mk/bsd.lib.mk	Wed Mar  4 14:27:16 2015
--- new-generic/src/share/mk/bsd.lib.mk	Wed Mar  4 14:33:48 2015
***************
*** 284,291 ****
  
  .if defined(PRECIOUSLIB)
  .if !defined(NO_FSCHG)
! SHLINSTALLFLAGS+= -fschg
  .endif
  SHLINSTALLFLAGS+= -S
  .endif
--- 284,290 ----
  
  .if defined(PRECIOUSLIB)
  .if !defined(NO_FSCHG)
! # SHLINSTALLFLAGS+= -fschg
! # Explanation: http://berklix.com/~jhs/src/bsd/fixes/freebsd/src/gen/share/mk/bsd.lib.mk.chflags.REL=ALL.diff
  .endif
  SHLINSTALLFLAGS+= -S
  .endif
***************
*** 356,362 ****
  	${INSTALL_SYMLINK} ${_SHLIBDIRPREFIX}${_SHLIBDIR}/${SHLIB_NAME} \
  	    ${DESTDIR}${_LIBDIR}/${SHLIB_LINK}
  .if exists(${DESTDIR}${_LIBDIR}/${SHLIB_NAME})
! 	-chflags noschg ${DESTDIR}${_LIBDIR}/${SHLIB_NAME}
  	rm -f ${DESTDIR}${_LIBDIR}/${SHLIB_NAME}
  .endif
  .endif
--- 356,364 ----
  	${INSTALL_SYMLINK} ${_SHLIBDIRPREFIX}${_SHLIBDIR}/${SHLIB_NAME} \
  	    ${DESTDIR}${_LIBDIR}/${SHLIB_LINK}
  .if exists(${DESTDIR}${_LIBDIR}/${SHLIB_NAME})
! #	-chflags noschg ${DESTDIR}${_LIBDIR}/${SHLIB_NAME}
! #	Chflags wont actually kill the system here, but chflags is dirty.
! 	@echo "Skipping -chflags noschg ${DESTDIR}${_LIBDIR}/${SHLIB_NAME}"
  	rm -f ${DESTDIR}${_LIBDIR}/${SHLIB_NAME}
  .endif
  .endif

*** 10.1-RELEASE-p6/src/share/mk/bsd.prog.mk	Wed Mar  4 14:27:16 2015
--- new-generic/src/share/mk/bsd.prog.mk	Wed Mar  4 14:34:50 2015
***************
*** 185,192 ****
  
  .if defined(PRECIOUSPROG)
  .if !defined(NO_FSCHG)
! INSTALLFLAGS+= -fschg
! # Explanation: http://berklix.com/~jhs/src/bsd/fixes/freebsd/src/gen/share/mk/bsd.lib.mk.chflags.REL=ALL.diff
  .endif
  INSTALLFLAGS+= -S
  .endif
--- 185,192 ----
  
  .if defined(PRECIOUSPROG)
  .if !defined(NO_FSCHG)
! # INSTALLFLAGS+= -fschg
! #	See similar change in bsd.lib.mk
  .endif
  INSTALLFLAGS+= -S
  .endif

Cheers,
Julian
--
Julian Stacey, BSD Linux Unix C Sys Eng Consultant Munich http://berklix.com
	Indent previous with "> ".	Reply Below as a play script.
	Send plain text, Not quoted-printable, HTML, or base64.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201503041600.t24G0QV1048766>