From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) Subject: Re: bootstrap: i686-linux now builds without binutils, gcc seeds Date: Sun, 16 Sep 2018 21:24:20 +0200 Message-ID: <87k1nlfdp7.fsf@gnu.org> References: <87h8jats4r.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:48297) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g1ceh-00083n-M0 for guix-devel@gnu.org; Sun, 16 Sep 2018 15:24:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g1ceg-0004Al-PV for guix-devel@gnu.org; Sun, 16 Sep 2018 15:24:27 -0400 In-Reply-To: <87h8jats4r.fsf@gnu.org> (Jan Nieuwenhuizen's message of "Fri, 31 Aug 2018 18:31:16 +0200") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Jan Nieuwenhuizen Cc: guix-devel@gnu.org Hello Janneke! It=E2=80=99s taken me a while but I successfully built /gnu/store/58q6748dy= dqxrhrw8xn2gsf60djl6gvv-hello-2.10 for i686 from commit 5d8b7131c23d2285dd3546c59022dd5953508943 of =E2=80=98wip-bootstrap=E2=80=99. :-) --8<---------------cut here---------------start------------->8--- $ guix hash -r /gnu/store/58q6748dydqxrhrw8xn2gsf60djl6gvv-hello-2.10 005zi21nvhmygjam6vsvkgmw9awsmyacz6a65naxcblrpbra1g94 --8<---------------cut here---------------end--------------->8--- The =E2=80=9Cinteresting commits=E2=80=9D are these: 5d8b7131c * gnu: mes: Oops, use mirror://gnu download url. 1ff6d26ac * bootstrap: Replace GNU toolchain seeds with Mes for i686-linu= x. ca8895bdb * bootstrap: Add Mes bootstrap. be65bf958 * gnu: Add Mes bootstrap seeds. 45856f886 * gnu: Add linux-libre-headers-bootstrap-tarball. cd9830fcd * guix: copy-linux-headers: Prepare for Mes bootstrap. 6265040e7 * guix: package-from-tarball: Allow PROGRAM-TO-TEST to be #f. 8d9c16ed3 * gnu: texinfo-boot0: Remove bootstrap leaks. f9a76a79c * gnu: bison-boot0: Remove bootstrap leaks. 12394cc83 * gnu: m4-boot0: New variable. 6891da335 * gnu: perl-boot0: Remove bootstrap leaks. f933b162c * gnu: file-boot0: Remove bootstrap leaks. 9c0912a20 * gnu: findutils-boot0: Remove bootstrap leaks. 53616d896 * gnu: diffutils-boot0: Remove bootstrap leaks. 7503cee76 * bootstrap: %bootstrap-inputs+toolchain: Prepare for Mes boots= trap. 80bd4a995 * bootstrap: %bootstrap-inputs: Prepare for Mes bootstrap. I looked at the result and overall it LGTM! So I think the next step is to rebase the branch on =E2=80=98core-updates=E2=80=99 (or merge it) and re= name it =E2=80=98core-updates-next=E2=80=99. WDYT? Ricardo? Previously we discussed that =E2=80=9C-s i686-linux=E2=80=9D on x86_64 woul= d lead to a different graph compared to a native i686-linux run. Is it still the case? It looks like 80bd4a995 does the right thing in that respect. Some comments on things that I think could be improved, in no particular order: =E2=80=A2 It would be good to update the =E2=80=9CBootstrapping=E2=80=9D = section of the manual=E2=80=94no urgency though. It would be useful both to Guix developers and to outsiders interested in bootstrapping (Bootstrappable, Reproducible Builds, maybe projects like GNU/Linux From Scratch, etc.) =E2=80=A2 I think all the =E2=80=9Cmesboot=E2=80=9D & co. packages in com= mencement.scam can be made private=E2=80=93i.e., changing =E2=80=98define-public=E2=80=99 to = =E2=80=98define=E2=80=99. =E2=80=A2 There=E2=80=99s a couple of tests (for example in tests/debug-l= ink.scm) that rely on %gcc-bootstrap, on the assumption that building it is cheap. We should double-check that these are still okay on i686. =E2=80=A2 IWBN to add comments for gcc-mesboot1-wrapper, glibc-headers-mesboot, %bootstrap-inputs+toolchain, just a line or two giving some context. =E2=80=A2 I saw a couple of hanging parens in commencement.scm, they want= to be next to their friends. ;-) =E2=80=A2 Minor style issues: `(,@(substitute-keyword-arguments =E2=80=A6)) =E2=86=92 (substitute-key= word-arguments =E2=80=A6) (zero? (system* =E2=80=A6)) =E2=86=92 (invoke =E2=80=A6) =E2=80=A2 Could you add a couple of lines of explanation at the top of th= e new gnu/packages/patches/*.patch files, as we do for other patches? Some of them could also be simplified; for instance =E2=80=98glibc-boot-2.2.5.patch=E2=80=99 contains the diff of what look= s like a leftover file. =E2=80=A2 For =E2=80=98binutils-mesboot0=E2=80=99: package/inherit =E2=86= =92 package (inherit =E2=80=A6) since replacement for =E2=80=98binutils=E2=80=99 certainly won=E2=80=99= t apply to =E2=80=98binutils-mesboot0=E2=80=99. =E2=80=A2 For commit 80bd4a995 for instance, instead of =E2=80=9CPrepare = for Mes bootstrap=E2=80=9D, the message could be =E2=80=9CWrap input lists into= thunks.=E2=80=9D or something like that to clarify what the actual change is. I noticed that: ./pre-inst-env guix graph -e '(begin (use-modules (guix utils)) (%current= -system "i686-linux")(@@ (gnu packages commencement) gnu-make-boot0))' | do= t -Tps > t.ps shows lots of repetitions, which defeats eq? memoization, but the problem is not new; I=E2=80=99ll try to look into fixing this. As we were discussing on IRC, we=E2=80=99ll have to figure out what the next step should be, once this branch has become =E2=80=98core-updates-next=E2= =80=99. One interesting bit is to remove the mes.M1 seed, as you wrote. Another one might be to do x86_64 bootstrapping (using i686 binaries at the beginning of the graph, until we reach gcc@4.9, at which point we should be able to build x86_64 binaries; though maybe I=E2=80=99m just too naive h= ere :-)). Another low-hanging fruit (I think!) is using Gash instead of Bash, though that=E2=80=99s completely orthogonal. Thoughts? Thank you for the amazing work, and again apologies for taking so long to get back to you! Ludo=E2=80=99.