From patchwork Wed May 25 08:41:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Efraim Flashner X-Patchwork-Id: 39600 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 57CE327BBEA; Wed, 25 May 2022 09:45:00 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 7E70327BBE9 for ; Wed, 25 May 2022 09:44:59 +0100 (BST) Received: from localhost ([::1]:58232 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ntmdW-0007TS-Mn for patchwork@mira.cbaines.net; Wed, 25 May 2022 04:44:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55128) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ntmcc-0006wm-9q for guix-patches@gnu.org; Wed, 25 May 2022 04:44:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:60423) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ntmcc-0008T3-0Z for guix-patches@gnu.org; Wed, 25 May 2022 04:44:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ntmcb-0007CJ-RT for guix-patches@gnu.org; Wed, 25 May 2022 04:44:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#55608] [PATCH v2] gnu: Add pbuilder. Resent-From: Efraim Flashner Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Wed, 25 May 2022 08:44:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 55608 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Maxime Devos Cc: Vagrant Cascadian , 55608@debbugs.gnu.org Received: via spool by 55608-submit@debbugs.gnu.org id=B55608.165346823927652 (code B ref 55608); Wed, 25 May 2022 08:44:01 +0000 Received: (at 55608) by debbugs.gnu.org; 25 May 2022 08:43:59 +0000 Received: from localhost ([127.0.0.1]:54320 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ntmcZ-0007Bv-6a for submit@debbugs.gnu.org; Wed, 25 May 2022 04:43:59 -0400 Received: from flashner.co.il ([178.62.234.194]:40260) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ntmcX-0007Bj-UJ for 55608@debbugs.gnu.org; Wed, 25 May 2022 04:43:58 -0400 Received: from localhost (unknown [141.226.14.232]) by flashner.co.il (Postfix) with ESMTPSA id AE7E740085; Wed, 25 May 2022 08:43:51 +0000 (UTC) Date: Wed, 25 May 2022 11:41:52 +0300 From: Efraim Flashner Message-ID: Mail-Followup-To: Efraim Flashner , Maxime Devos , 55608@debbugs.gnu.org, Vagrant Cascadian References: <5f757b843a3ecc0c601adc87fcc5208ba3a415b5.camel@telenet.be> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <5f757b843a3ecc0c601adc87fcc5208ba3a415b5.camel@telenet.be> X-PGP-Key-ID: 0x41AAE7DCCA3D8351 X-PGP-Key: https://flashner.co.il/~efraim/efraim_flashner.asc X-PGP-Fingerprint: A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches On Tue, May 24, 2022 at 12:09:36PM +0200, Maxime Devos wrote: > Efraim Flashner schreef op di 24-05-2022 om 10:59 [+0300]: > > +           (add-after 'install-more 'wrap-programs > > +             (lambda* (#:key native-inputs inputs outputs #:allow-other-keys) > > +               (for-each > > +                 (lambda (file) > > +                   (wrap-script file > > +                    `("PATH" ":" prefix > > +                      (,(dirname (search-input-file (or native-inputs inputs) "/bin/cut")) > > +                       ,(dirname (search-input-file (or native-inputs inputs) "/bin/dpkg")) > > +                       ,(dirname (search-input-file (or native-inputs inputs) "/bin/grep")) > > +                       ,(dirname (search-input-file (or native-inputs inputs) "/bin/perl")) > > +                       ,(dirname (search-input-file (or native-inputs inputs) "/bin/sed")) > > +                       ,(dirname (search-input-file (or native-inputs inputs) "/bin/which")) > > +                       ,(dirname (search-input-file (or native-inputs inputs) "/sbin/debootstrap")))))) > > Shouldn't these be inputs instead of native-inputs, because they will > end up being run when pbuilder is run? Likewise for'patch-source'. I figured using (or native-inputs inputs) would help with cross-building, but I've changed it to just inputs. Also in the other spot where I used that. I tried cross building it before but got stuck in one of the dependencies. > Also, can be simplified to > > [...] "PATH" ":" prefix ,(map (compose dirname (cut search-input-file inputs <>)) '("/bin/cut" "/bin/dpkg" ...)) [...] Thanks, I knew there was some way to make it much cleaner. I've made the changes you've suggested and also adjusted #$output/etc/pbuilderrc to use /run/setuid-programs/sudo if it's available and removed the note from the bottom of the package description since it's no longer necessary. diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm index 2efd8114be..05440d9444 100644 --- a/gnu/packages/debian.scm +++ b/gnu/packages/debian.scm @@ -36,10 +36,13 @@ (define-module (gnu packages debian) #:use-module (gnu packages gettext) #:use-module (gnu packages gnupg) #:use-module (gnu packages guile) + #:use-module (gnu packages linux) + #:use-module (gnu packages man) #:use-module (gnu packages ncurses) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) - #:use-module (gnu packages wget)) + #:use-module (gnu packages wget) + #:use-module (srfi srfi-26)) (define-public debian-archive-keyring (package @@ -417,6 +420,152 @@ (define-public dpkg handling the installation and removal of Debian software packages.") (license license:gpl2+))) +(define-public pbuilder + (package + (name "pbuilder") + (version "0.231") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://salsa.debian.org/pbuilder-team/pbuilder.git/") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0z6f1fgcrkfql9ayc3d0nxra2y6cn91xd5lvr0hd8gdlp9xdvxbc")))) + (build-system gnu-build-system) + (arguments + (list + #:modules `((guix build gnu-build-system) + (guix build utils) + (srfi srfi-26)) + #:phases + #~(modify-phases %standard-phases + (delete 'configure) ; no configure script + (add-after 'unpack 'patch-source + (lambda* (#:key inputs outputs #:allow-other-keys) + + ;; Documentation requires tldp-one-page.xsl + (substitute* "Makefile" + ((".*-C Documentation.*") "")) + + ;; Don't create #$output/var/cache/pbuilder/... + (substitute* '("Makefile" + "pbuildd/Makefile") + ((".*/var/cache/pbuilder.*") "")) + + ;; Find the correct fallback location. + (substitute* '("pbuilder-checkparams" + "pbuilder-loadconfig" + "pbuilder-satisfydepends-apt" + "pbuilder-satisfydepends-aptitude" + "pbuilder-satisfydepends-classic" + "t/test_pbuilder-satisfydepends-classic") + (("\\$PBUILDER_ROOT(/usr)?") #$output)) + + ;; Some hardcoded paths + (substitute* '("debuild-pbuilder" + "pbuilder" + "pbuilder-buildpackage" + "pbuilderrc" + "pdebuild" + "pdebuild-checkparams" + "pdebuild-internal") + (("/usr/lib/pbuilder") + (string-append #$output "/lib/pbuilder"))) + (substitute* "pbuildd/buildd-config.sh" + (("/usr/share/doc/pbuilder") + (string-append #$output "/share/doc/pbuilder"))) + (substitute* "pbuilder-unshare-wrapper" + (("/(s)?bin/ifconfig") "ifconfig") + (("/(s)?bin/ip") (search-input-file inputs "/sbin/ip"))) + (substitute* "Documentation/Makefile" + (("/usr") "")) + + ;; Ensure PATH works both in Guix and within the Debian chroot. + (substitute* "pbuilderrc" + (("PATH=\"/usr/sbin:/usr/bin:/sbin:/bin") + "PATH=\"$PATH:/usr/sbin:/usr/bin:/sbin:/bin")))) + (add-after 'install 'create-etc-pbuilderrc + (lambda* (#:key outputs #:allow-other-keys) + (with-output-to-file (string-append #$output "/etc/pbuilderrc") + (lambda () + (format #t "# A couple of presets to make this work more smoothly.~@ + MIRRORSITE=\"http://deb.debian.org/debian\"~@ + if [ -r /run/setuid-programs/sudo ]; then~@ + PBUILDERROOTCMD=\"/run/setuid-programs/sudo -E\"~@ + fi~@ + PBUILDERSATISFYDEPENDSCMD=\"~a/lib/pbuilder/pbuilder-satisfydepends-apt\"~%" + #$output))))) + (add-after 'install 'install-manpages + (lambda* (#:key outputs #:allow-other-keys) + (let ((man (string-append #$output "/share/man/"))) + (install-file "debuild-pbuilder.1" (string-append man "man1")) + (install-file "pdebuild.1" (string-append man "man1")) + (install-file "pbuilder.8" (string-append man "man8")) + (install-file "pbuilderrc.5" (string-append man "man5"))))) + (add-after 'install 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (for-each + (lambda (file) + (wrap-script file + `("PATH" ":" prefix + ,(map (compose dirname (cut search-input-file inputs <>)) + (list "/bin/cut" + "/bin/dpkg" + "/bin/grep" + "/bin/perl" + "/bin/sed" + "/bin/which" + "/sbin/debootstrap"))))) + (cons* + (string-append #$output "/bin/pdebuild") + (string-append #$output "/sbin/pbuilder") + (find-files (string-append #$output "/lib/pbuilder")))))) + ;; Move the 'check phase to after 'install. + (delete 'check) + (add-after 'validate-runpath 'check + (assoc-ref %standard-phases 'check))) + #:make-flags + ;; No PREFIX, use DESTDIR instead. + #~(list (string-append "DESTDIR=" #$output) + (string-append "SYSCONFDIR=" #$output "/etc") + (string-append "BINDIR=" #$output "/bin") + (string-append "PKGLIBDIR=" #$output "/lib/pbuilder") + (string-append "SBINDIR=" #$output "/sbin") + (string-append "PKGDATADIR=" #$output "/share/pbuilder") + (string-append "EXAMPLEDIR=" #$output "/share/doc/pbuilder/examples") + "PBUILDDDIR=/share/doc/pbuilder/examples/pbuildd/"))) + (inputs + (list dpkg + debootstrap + grep + guile-3.0 ; for wrap-script + iproute + perl + which)) + (native-inputs + (list man-db + util-linux)) + (home-page "https://pbuilder-team.pages.debian.net/pbuilder/") + (synopsis "Personal package builder for Debian packages") + (description + "@code{pbuilder} is a personal package builder for Debian packages. +@itemize +@item@code{pbuilder} constructs a chroot system, and builds a package inside the +chroot. It is an ideal system to use to check that a package has correct +build-dependencies. It uses @code{apt} extensively, and a local mirror, or a +fast connection to a Debian mirror is ideal, but not necessary. +@item@code{pbuilder create} uses debootstrap to create a chroot image. +@item@code{pbuilder update} updates the image to the current state of +testing/unstable/whatever. +@item@code{pbuilder build} takes a @code{*.dsc} file and builds a binary in the +chroot image. +@item@code{pdebuild} is a wrapper for Debian Developers, to allow running +@code{pbuilder} just like @code{debuild}, as a normal user. +@end itemize") + (license license:gpl2+))) + (define-public reprepro (package (name "reprepro")