From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id YKpELqCWjGJ9fQEAbAwnHQ (envelope-from ) for ; Tue, 24 May 2022 10:26:08 +0200 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id OB0sLqCWjGJCCwAA9RJhRA (envelope-from ) for ; Tue, 24 May 2022 10:26:08 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id B4B2729128 for ; Tue, 24 May 2022 10:26:07 +0200 (CEST) Received: from localhost ([::1]:47120 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ntPrh-0005W0-VC for larch@yhetil.org; Tue, 24 May 2022 04:26:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55168) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ntPcA-00081X-GE for guix-patches@gnu.org; Tue, 24 May 2022 04:10:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:57013) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ntPcA-0000l5-4u for guix-patches@gnu.org; Tue, 24 May 2022 04:10:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ntPc9-0005yu-VN for guix-patches@gnu.org; Tue, 24 May 2022 04:10:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#55608] [PATCH] gnu: Add pbuilder. Resent-From: Efraim Flashner Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 24 May 2022 08:10:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 55608 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 55608@debbugs.gnu.org Cc: Vagrant Cascadian , Efraim Flashner X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.165337978922965 (code B ref -1); Tue, 24 May 2022 08:10:01 +0000 Received: (at submit) by debbugs.gnu.org; 24 May 2022 08:09:49 +0000 Received: from localhost ([127.0.0.1]:50910 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ntPbt-0005yH-Vi for submit@debbugs.gnu.org; Tue, 24 May 2022 04:09:49 -0400 Received: from lists.gnu.org ([209.51.188.17]:56076) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ntPbe-0005xv-5U for submit@debbugs.gnu.org; Tue, 24 May 2022 04:09:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54976) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ntPbb-0007rQ-W5 for guix-patches@gnu.org; Tue, 24 May 2022 04:09:29 -0400 Received: from flashner.co.il ([178.62.234.194]:56392) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ntPbZ-0000ZC-EF for guix-patches@gnu.org; Tue, 24 May 2022 04:09:27 -0400 Received: from localhost (unknown [141.226.14.232]) by flashner.co.il (Postfix) with ESMTPSA id 800E640107; Tue, 24 May 2022 08:02:02 +0000 (UTC) From: Efraim Flashner Date: Tue, 24 May 2022 10:59:18 +0300 Message-Id: X-Mailer: git-send-email 2.36.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=178.62.234.194; envelope-from=efraim@flashner.co.il; helo=flashner.co.il X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action 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+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1653380768; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=at7IuMhgLTVPQKLtD5uMmHyz13eP8Iji796Tp8CnYPE=; b=L2MlRuEF0vqhsOG3SVmMCh3ec2jcGoT5WCOhBS32U9j5hfM3FEoNJyh1LTt/v5i551+2aw nZXBy7Ft28nFETyREl2gGxP2EgS+86kJyyuFOwwvX2npW3le2zRfrXE+pvi96cyDa0UchM PNBtIABj+hmjCsT+37Ynt8yCl2wv3N+If+tUpJsrngA0f25qIKQUJpXeymJQ2kMpbMPm1n fBqPs5DX15VaUnkXxbWGC4JDcTE/ZZpW7H+54mdYQ5DqIdNIdeweNqBLS4zLf+zEq9GBVX uPas487cytYejuO7Y07wuFw1aAKgx6OMoVNYwE+O2c58VZC0ev7l227w4zVBVg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1653380768; a=rsa-sha256; cv=none; b=Ww5uIi8CEYdeAEcjyXpKsKbeeagNPfm6+7QbrtS4vKPWfrKBPY87zBdHj3J6OUn41QPfAB eQPLFzkmddsXQoBP2U0Afeb23mSwVXlB5r2taaEmTrPSohVrXCLjYIhXQPF1UEMLX0uT/s awku1fJEMGU4y/czdJVCrHw57ImqM6qpI+JtlcvvUuIxSQsslTLRpPUdklQjVrQ0sd+SF1 LMPsQDj6zpYipnUxc80Od8e4Dc6996qRuRV8R/qGpGmOaExr9aHEnF2/PqtDI3T67mXDtC /uw1QP3NlcAfcso4U2cSeReXcykvfhmjWXFniLkrWSNXv8/5YCggBv4y9XR3LA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -0.55 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: B4B2729128 X-Spam-Score: -0.55 X-Migadu-Scanner: scn0.migadu.com X-TUID: pOKrThJ7H+kX * gnu/packages/debian.scm (pbuilder): New variable. --- gnu/packages/debian.scm | 145 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) With this I was able to use `sudo -E pbuilder create` to create a new base chroot for building packages and I was able to download the source packages for hello to run `sudo -E pbuilder build ~/hello_2.10-2.dsc` to actually build a hello binary. For reproducing: (on Guix System, in ~/.pbuilderrc, as a minimum: PBUILDERROOTCMD="/run/setuid-programs/sudo -E") wget https://ftp.debian.org/debian/pool/main/h/hello/hello_2.10-2.debian.tar.xz wget https://ftp.debian.org/debian/pool/main/h/hello/hello_2.10-2.dsc wget https://ftp.debian.org/debian/pool/main/h/hello/hello_2.10.orig.tar.gz guix shell pbuilder -- sudo -E pbuilder create guix shell pbuilder -- sudo -E pbuilder build /path/to/hello_2.10-2.dsc --- diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm index 2efd8114be..737ff9b892 100644 --- a/gnu/packages/debian.scm +++ b/gnu/packages/debian.scm @@ -36,6 +36,8 @@ (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) @@ -417,6 +419,149 @@ (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 + #:phases + #~(modify-phases %standard-phases + (delete 'configure) ; no configure script + (add-after 'unpack 'patch-source + (lambda* (#:key native-inputs 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 (or native-inputs 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\"~@ + 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-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")))))) + (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 'wrap-programs '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 +NOTE: For Guix System it is recommended to put +@code{PBUILDERROOTCMD=\"/run/setuid-programs/sudo -E\"} inside of your +@file{~/.pbuilderrc}.") + (license license:gpl2+))) + (define-public reprepro (package (name "reprepro") base-commit: 1a1f9e7050a9b787b2111cb5af677510a0122e2b -- 2.36.1