From owner-freebsd-ports-bugs@FreeBSD.ORG Thu Jun 21 19:10:10 2012 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A6183106567A; Thu, 21 Jun 2012 19:10:10 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 8A3438FC0C; Thu, 21 Jun 2012 19:10:05 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q5LJA5MB081936; Thu, 21 Jun 2012 19:10:05 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q5LJA55a081935; Thu, 21 Jun 2012 19:10:05 GMT (envelope-from gnats) Resent-Date: Thu, 21 Jun 2012 19:10:05 GMT Resent-Message-Id: <201206211910.q5LJA55a081935@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Cc: bapt@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Chris Rees Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A0F3010656AA for ; Thu, 21 Jun 2012 19:03:23 +0000 (UTC) (envelope-from crees@bayofrum.net) Received: from mk-outboundfilter-6.mail.uk.tiscali.com (mk-outboundfilter-6.mail.uk.tiscali.com [212.74.114.14]) by mx1.freebsd.org (Postfix) with ESMTP id 341F48FC12 for ; Thu, 21 Jun 2012 19:03:22 +0000 (UTC) Received: from 79-75-88-166.dynamic.dsl.as9105.com (HELO pegasus.bayofrum.net) ([79.75.88.166]) by smtp.pipex.tiscali.co.uk with ESMTP; 21 Jun 2012 20:03:21 +0100 Received: by pegasus.bayofrum.net (Postfix, from userid 1001) id 08D1FB0B9; Thu, 21 Jun 2012 20:03:20 +0100 (BST) Message-Id: <20120621190321.08D1FB0B9@pegasus.bayofrum.net> Date: Thu, 21 Jun 2012 20:03:20 +0100 (BST) From: Chris Rees To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 X-GNATS-Notify: bapt@FreeBSD.org Cc: Subject: ports/169300: [PATCH] bsd.pkgng.mk Allow deinstall as user and make clean after non-root install X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Chris Rees List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Jun 2012 19:10:10 -0000 >Number: 169300 >Category: ports >Synopsis: [PATCH] bsd.pkgng.mk Allow deinstall as user and make clean after non-root install >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu Jun 21 19:10:05 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Chris Rees >Release: FreeBSD 9.0-RELEASE amd64 >Organization: >Environment: System: FreeBSD pegasus.bayofrum.net 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Sun Apr 29 12:29:02 BST 2012 root@pegasus.bayofrum.net:/usr/obj/usr/src/sys/PEGASUS amd64 >Description: If WITH_PKGNG is set in /etc/make.conf, the install sequence is changed to use pkgng. The SUSEQ part works great while installing, but if the user is not root then deinstall does not work, and neither does a make clean after a make install. The former problem is solved as the current pkg_install deinstall target is implemented, but UID is not defined at the time, so it must be enumerated in the target rather than using a make .if construct. >How-To-Repeat: % grep WITH_PKGNG /etc/make.conf WITH_PKGNG= yes % cd /usr/ports/textproc/atom % make install # Works great, performs su etc and installs % make clean ===> Cleaning for atom-1.0 rm: /usr/obj/ports/usr/ports/textproc/atom/work/.metadir/+DESC: Permission denied rm: /usr/obj/ports/usr/ports/textproc/atom/work/.metadir/+MANIFEST: Permission denied rm: /usr/obj/ports/usr/ports/textproc/atom/work/.metadir/+MTREE_DIRS: Permission denied rm: /usr/obj/ports/usr/ports/textproc/atom/work/.metadir: Directory not empty rm: /usr/obj/ports/usr/ports/textproc/atom/work: Directory not empty *** Error code 1 % make deinstall ===> Deinstalling for textproc/atom ===> Deinstalling atom-1.0 pkg: deleting packages can only be done as root *** Error code 77 >Fix: Both problems solved here; feels a little clumsy adding another target before SUSEQ, but I don't see another clean method for creating METADIR before su. --- bsd-pkgng-mk-allow-user-de-install.diff begins here --- Index: bsd.port.mk =================================================================== RCS file: /exports/cvsroot-freebsd/ports/Mk/bsd.port.mk,v retrieving revision 1.725 diff -u -r1.725 bsd.port.mk --- bsd.port.mk 6 Jun 2012 14:23:17 -0000 1.725 +++ bsd.port.mk 21 Jun 2012 18:51:46 -0000 @@ -3977,6 +3977,11 @@ .endif .endif +.if !target(create-metadir) +create-metadir: + @${DO_NADA} +.endif + .if !target(check-umask) check-umask: @if [ `${SH} -c umask` != 0022 ]; then \ @@ -4276,8 +4281,9 @@ _BUILD_SEQ= build-message pre-build pre-build-script do-build \ post-build post-build-script _INSTALL_DEP= build -_INSTALL_SEQ= install-message check-install-conflicts run-depends lib-depends apply-slist pre-install \ - pre-install-script generate-plist check-already-installed +_INSTALL_SEQ= install-message check-install-conflicts run-depends \ + lib-depends apply-slist pre-install pre-install-script \ + generate-plist check-already-installed create-metadir _INSTALL_SUSEQ= check-umask install-mtree pre-su-install \ pre-su-install-script create-users-groups do-install \ install-desktop-entries install-license install-rc-script \ Index: bsd.pkgng.mk =================================================================== RCS file: /exports/cvsroot-freebsd/ports/Mk/bsd.pkgng.mk,v retrieving revision 1.6 diff -u -r1.6 bsd.pkgng.mk --- bsd.pkgng.mk 3 Jun 2012 14:49:52 -0000 1.6 +++ bsd.pkgng.mk 21 Jun 2012 18:49:33 -0000 @@ -27,6 +27,12 @@ fi +# Create before SUSEQ, or make clean will fail unless root +.if !target(create-metadir) +create-metadir: + @${MKDIR} ${METADIR} +.endif + .if !target(fake-pkg) fake-pkg: .if !defined(NO_PKG_REGISTER) @@ -263,15 +269,22 @@ .if !target(deinstall) deinstall: - @${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}" - @if ${PKG_INFO} -e ${PKGORIGIN}; then \ - p=`${PKG_INFO} -q ${PKGORIGIN}`; \ - ${ECHO_MSG} "===> Deinstalling $${p}"; \ - ${PKG_DELETE} -f ${PKGORIGIN} ; \ + @if [ ${UID} != 0 ]; then \ + ${ECHO_MSG} "===> Switching to root credentials for '${.TARGET}' target" ; \ + cd ${.CURDIR} && \ + ${SU_CMD} "${MAKE} ${.TARGET}"; \ + ${ECHO_MSG} "===> Returning to user credentials"; \ else \ - ${ECHO_MSG} "===> ${PKGBASE} not installed, skipping"; \ + ${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}"; \ + if ${PKG_INFO} -e ${PKGORIGIN}; then \ + p=`${PKG_INFO} -q ${PKGORIGIN}`; \ + ${ECHO_MSG} "===> Deinstalling $${p}"; \ + ${PKG_DELETE} -f ${PKGORIGIN} ; \ + else \ + ${ECHO_MSG} "===> ${PKGBASE} not installed, skipping"; \ + fi; \ + ${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE}; \ fi - @${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE} .endif .endif # defined(_POSTMKINCLUDED) --- bsd-pkgng-mk-allow-user-de,install.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: