GNU bug report logs -
#55608
[PATCH] gnu: Add pbuilder.
Previous Next
Reported by: Efraim Flashner <efraim <at> flashner.co.il>
Date: Tue, 24 May 2022 08:10:01 UTC
Severity: normal
Tags: patch
Done: Efraim Flashner <efraim <at> flashner.co.il>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 55608 in the body.
You can then email your comments to 55608 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
guix-patches <at> gnu.org
:
bug#55608
; Package
guix-patches
.
(Tue, 24 May 2022 08:10:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Efraim Flashner <efraim <at> flashner.co.il>
:
New bug report received and forwarded. Copy sent to
guix-patches <at> gnu.org
.
(Tue, 24 May 2022 08:10:01 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
* 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 <at> 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 <at> code{pbuilder create} uses debootstrap to create a chroot image.
+@item <at> code{pbuilder update} updates the image to the current state of
+testing/unstable/whatever.
+@item <at> code{pbuilder build} takes a @code{*.dsc} file and builds a binary in the
+chroot image.
+@item <at> 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
Information forwarded
to
guix-patches <at> gnu.org
:
bug#55608
; Package
guix-patches
.
(Tue, 24 May 2022 10:10:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 55608 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
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'.
Also, can be simplified to
[...] "PATH" ":" prefix ,(map (compose dirname (cut search-input-file inputs <>)) '("/bin/cut" "/bin/dpkg" ...)) [...]
[signature.asc (application/pgp-signature, inline)]
Information forwarded
to
guix-patches <at> gnu.org
:
bug#55608
; Package
guix-patches
.
(Wed, 25 May 2022 08:44:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 55608 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
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.
--
Efraim Flashner <efraim <at> flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[v2-0001-gnu-Add-pbuilder.patch (text/plain, attachment)]
[signature.asc (application/pgp-signature, inline)]
Reply sent
to
Efraim Flashner <efraim <at> flashner.co.il>
:
You have taken responsibility.
(Sun, 29 May 2022 13:05:01 GMT)
Full text and
rfc822 format available.
Notification sent
to
Efraim Flashner <efraim <at> flashner.co.il>
:
bug acknowledged by developer.
(Sun, 29 May 2022 13:05:01 GMT)
Full text and
rfc822 format available.
Message #16 received at 55608-done <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Patch pushed. Thanks for the review!
--
Efraim Flashner <efraim <at> flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[signature.asc (application/pgp-signature, inline)]
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Mon, 27 Jun 2022 11:24:05 GMT)
Full text and
rfc822 format available.
This bug report was last modified 3 years and 44 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.