From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37304) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eub7j-0001kd-Ie for guix-patches@gnu.org; Sat, 10 Mar 2018 04:49:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eub7f-0006SR-1y for guix-patches@gnu.org; Sat, 10 Mar 2018 04:49:07 -0500 Received: from debbugs.gnu.org ([208.118.235.43]:45216) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eub7e-0006SF-R9 for guix-patches@gnu.org; Sat, 10 Mar 2018 04:49:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1eub7e-00085x-HL for guix-patches@gnu.org; Sat, 10 Mar 2018 04:49:02 -0500 Subject: [bug#30709] [PATCH 4/4] gnu: Add debootstrap. Resent-Message-ID: From: Marius Bakke In-Reply-To: <20180305092907.1191-4-efraim@flashner.co.il> References: <20180305092625.1014-1-efraim@flashner.co.il> <20180305092907.1191-1-efraim@flashner.co.il> <20180305092907.1191-4-efraim@flashner.co.il> Date: Sat, 10 Mar 2018 10:48:32 +0100 Message-ID: <87a7vgjm6n.fsf@fastmail.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Efraim Flashner , 30709@debbugs.gnu.org --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain Efraim Flashner writes: > * gnu/packages/debian.scm (debootstrap): New variable. Thanks for packaging this! I've worked on this too, and actually packaged 'dpkg' separately. Yet somehow I did not need to package the keyrings (I guess it is necessary to work offline?). Some comments inline, and my dpkg and debootstrap patches attached for comparison. Feel free to take inspiration from both. > +(define-public debootstrap > + (package > + (name "debootstrap") > + (version "1.0.93") > + (source > + (origin > + (method git-fetch) > + (uri (git-reference > + (url "https://anonscm.debian.org/cgit/d-i/debootstrap.git") > + (commit version))) > + (file-name (git-file-name name version)) Why use the git downloader here? > + (sha256 > + (base32 > + "1jxq91602a152c56l2f8kzkiszp26cziqddcs4v695bcif72kfz6")))) > + (build-system gnu-build-system) > + (arguments > + `(#:phases > + (modify-phases %standard-phases > + (delete 'configure) > + (delete 'build) > + (add-after 'unpack 'patch-source > + (lambda* (#:key inputs outputs #:allow-other-keys) > + (let ((out (assoc-ref outputs "out")) > + (debian (assoc-ref %build-inputs "debian")) > + (ubuntu (assoc-ref %build-inputs "ubuntu"))) Use (assoc-ref inputs "debian") instead of accessing the global %build-inputs. I'd also call them "debian-keyring" and "ubuntu-keyring" to make it clearer what's going on down below. > + (substitute* "scripts/sid" > + (("/usr") debian)) > + (substitute* "scripts/gutsy" > + (("/usr") ubuntu)) > + (substitute* "debootstrap" > + (("=/usr") (string-append "=" out)) > + (("@VERSION@") ,version)) If you don't delete the build phase, @VERSION@ should be automatically expanded to the correct value, methinks. > + (substitute* "functions" > + (("wget ") (string-append (which "wget") " "))) > + #t))) > + (replace 'install > + (lambda* (#:key outputs #:allow-other-keys) > + (let ((out (assoc-ref outputs "out"))) > + (copy-recursively "scripts" > + (string-append out "/share/debootstrap/scripts")) > + (install-file "functions" (string-append out "/share/debootstrap")) > + (install-file "debootstrap" (string-append out "/sbin")) > + (install-file "debootstrap.8" (string-append out "/share/man/man8")) > + #t)))) Similarly, passing DESTDIR in #:make-flags should make this unnecessary. > + #:tests? #f)) ; no tests > + (inputs > + `(("debian" ,debian-archive-keyring) > + ("ubuntu" ,ubuntu-keyring) > + ("wget" ,wget))) > + ;; The following are required for debootstrap to work correctly > + (propagated-inputs > + `(("binutils" ,binutils) > + ("gnupg" ,gnupg) > + ("perl" ,perl))) > + (home-page "https://anonscm.debian.org/cgit/d-i/debootstrap.git") > + (synopsis "Bootstrap a basic Debian system") > + (description "Debootstrap is used to create a Debian base system from > +scratch, without requiring the availability of @code{dpkg} or @code{apt}. > +It does this by downloading .deb files from a mirror site, and carefully > +unpacking them into a directory which can eventually be chrooted into.") > + (license license:gpl2))) I have not tried this debootstrap, but when testing the attached patch, I found that debootstrap would fail on the first attempt, but simply trying again made everything work. Did you experience this? Note that I did not propagate binutils, perhaps that was the problem. Or the confusion between Guix dpkg and the debootstrapped dpkg. Behold... --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: attachment; filename=0001-gnu-Add-dpkg.patch Content-Transfer-Encoding: quoted-printable From=2062795e10a95f393ab3a65d649ef3a30ccd8fece2 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Fri, 5 Jan 2018 15:58:45 +0100 Subject: [PATCH] gnu: Add dpkg. * gnu/packages/package-management.scm (dpkg): New public variable. =2D-- gnu/packages/package-management.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-man= agement.scm index 7eba74e96..451af238c 100644 =2D-- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -5,6 +5,7 @@ ;;; Copyright =C2=A9 2017 Oleg Pykhalov ;;; Copyright =C2=A9 2017 Roel Janssen ;;; Copyright =C2=A9 2017 Tobias Geerinckx-Rice +;;; Copyright =C2=A9 2018 Marius Bakke ;;; ;;; This file is part of GNU Guix. ;;; @@ -46,6 +47,7 @@ #:use-module (gnu packages gettext) #:use-module (gnu packages lisp) #:use-module (gnu packages texinfo) + #:use-module (gnu packages ncurses) #:use-module (gnu packages nettle) #:use-module (gnu packages perl) #:use-module (gnu packages perl-check) @@ -349,6 +351,28 @@ out) and returning a package that uses that as its 'so= urce'." ;;; Other tools. ;;; =20 +(define-public dpkg + (package + (name "dpkg") + (version "1.19.0.4") + (source (origin + (method url-fetch) + (uri (string-append "mirror://debian/pool/main/d/dpkg/dpkg_" + version ".tar.xz")) + (sha256 + (base32 "02lrwrkl2g1jwj71088rwswx07a1zq1jkq7193lbvy8jj2qnp9= lq")))) + (build-system gnu-build-system) + (inputs + `(("ncurses" ,ncurses) + ("perl" ,perl))) + (home-page "https://wiki.debian.org/Teams/Dpkg") + (synopsis "Debian package manager") + (description + "@command{dpkg} is a low-level package management tool, primarily dev= eloped +for use in Debian. It can install, remove and show information about @fil= e{.deb} +packages.") + (license gpl2+))) + (define-public nix (package (name "nix") =2D-=20 2.16.2 --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: attachment; filename=0002-gnu-Add-debootstrap.patch Content-Transfer-Encoding: quoted-printable From=207e4ec4b1e8ad602c797d192dc6c5f573664c50d4 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Fri, 5 Jan 2018 16:45:19 +0100 Subject: [PATCH] gnu: Add debootstrap. * gnu/packages/debootstrap.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Register it. =2D-- gnu/local.mk | 1 + gnu/packages/debootstrap.scm | 81 ++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 82 insertions(+) create mode 100644 gnu/packages/debootstrap.scm diff --git a/gnu/local.mk b/gnu/local.mk index fb4babfdb..cf4e23117 100644 =2D-- a/gnu/local.mk +++ b/gnu/local.mk @@ -119,6 +119,7 @@ GNU_SYSTEM_MODULES =3D \ %D%/packages/dav.scm \ %D%/packages/dc.scm \ %D%/packages/debug.scm \ + %D%/packages/debootstrap.scm \ %D%/packages/dejagnu.scm \ %D%/packages/dico.scm \ %D%/packages/dictionaries.scm \ diff --git a/gnu/packages/debootstrap.scm b/gnu/packages/debootstrap.scm new file mode 100644 index 000000000..e2a19ba2b =2D-- /dev/null +++ b/gnu/packages/debootstrap.scm @@ -0,0 +1,81 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright =C2=A9 2018 Marius Bakke +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages debootstrap) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix build-system gnu) + #:use-module (gnu packages package-management) + #:use-module (gnu packages perl) + #:use-module (gnu packages wget) + #:use-module (gnu packages)) + +(define-public debootstrap + (package + (name "debootstrap") + (version "1.0.93") + (source (origin + (method url-fetch) + (uri (string-append "mirror://debian/pool/main/d/debootstrap= /" + "debootstrap_" version ".tar.gz")) + (sha256 + (base32 + "1nyp9fwb7xrk1vin81dmgx2g9rb52yg4gwz4rcx97gamw4mlvbfd")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags (list (string-append "DESTDIR=3D" (assoc-ref %outputs = "out"))) + #:tests? #f ;no tests + #:phases (modify-phases %standard-phases + (add-after 'unpack 'fix-Makefile + (lambda _ + (substitute* "Makefile" + (("/usr") "") + (("-o root -g root") "") + (("chown root.*") "\n")) + #t)) + (add-after 'fix-Makefile 'patch-paths + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (dpkg (assoc-ref inputs "dpkg")) + (wget (assoc-ref inputs "wget"))) + (substitute* "debootstrap" + (("/usr/share/debootstrap") + (string-append out "/share/debootstrap")) + (("/usr/bin/dpkg") (string-append dpkg "/bin/dpkg"= ))) + (substitute* "functions" + (("wget ") (string-append wget "/bin/wget "))) + #t))) + (delete 'configure)))) + (inputs + `(("wget" ,wget))) + ;; The bootstrapping scripts contain many references to these packages= , some + ;; of which referring to the target system. For simplicity just propa= gate them + ;; instead of adding absolute references. + (propagated-inputs + `(("dpkg" ,dpkg) + ("perl" ,perl))) + (home-page "https://wiki.debian.org/Debootstrap") + (synopsis "Bootstrap a Debian or Ubuntu system") + (description + "@command{debootstrap} is a tool which will install a Debian base sys= tem +into a subdirectory of another, already installed system. It does not req= uire +an installation CD, just access to a Debian repository. It can also be us= ed to +create a rootfs for a machine of a different architecture, which is known = as +\"cross-debootstrapping\".") + (license license:gpl2+))) =2D-=20 2.16.2 --=-=-=-- --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAlqjqfAACgkQoqBt8qM6 VPryaQgAydgHXXLG9rWz5UJggGpyMoO2zmCSF41SQRR31p/PfEBKqa/qd72qclAD Cm4lkDvpbIKFjYavwlsDJokTPEfWIVrUXBpY6BdEOH8S36239mdOaKING1o04HFv nftna7ZdtrvkZ5UFObYa33qaOR3pZWtSxiPeyJ9MVglodLtYjkHlzdb2sM+biK8L DB3uryxcPanThkH1FGEC9fjUFbD1e54vo6eMBJhxEkECmjZYVbikJxmyHb2c2U+k jtZ/K2kCDAnW9X9uYpVlQyJPB4EeYuKx0jQAREPuh5esYATxw6iwZY9hK6aQE4VB Heze6TqQZv8fFT3qFls7S//yzcqnZA== =5ljc -----END PGP SIGNATURE----- --==-=-=--