From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id UMIIF3O7oWAWugAAgWs5BA (envelope-from ) for ; Mon, 17 May 2021 02:40:19 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id YKeuEnO7oWA0dAAA1q6Kng (envelope-from ) for ; Mon, 17 May 2021 00:40:19 +0000 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 ABDD316A8C for ; Mon, 17 May 2021 02:40:17 +0200 (CEST) Received: from localhost ([::1]:41898 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1liRIu-0005wf-GO for larch@yhetil.org; Sun, 16 May 2021 20:40:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60630) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1liRIj-0005wX-Qx for help-guix@gnu.org; Sun, 16 May 2021 20:40:05 -0400 Received: from lepiller.eu ([2a00:5884:8208::1]:54818) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1liRIg-0000n8-NZ for help-guix@gnu.org; Sun, 16 May 2021 20:40:05 -0400 Received: from lepiller.eu (localhost [127.0.0.1]) by lepiller.eu (OpenSMTPD) with ESMTP id fbbe5cd8; Mon, 17 May 2021 00:39:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=lepiller.eu; h=date:from :to:cc:subject:message-id:in-reply-to:references:mime-version :content-type:content-transfer-encoding; s=dkim; bh=NOkbDtzHXM4T kap84qwgvVUOUSIp4N96GbbE0thv+Hs=; b=mInGsEEVz4cBGFfuZwHyWkeQqHwX ojuED8cPTgxNQCMfdlps3ekraLGNUz4GX1BC0hf3Vh/ZehYdDJfccPbbqocPnC94 2LW1FzvAhHmj2ejDpXHEGaWBKWaciJJvhNBGT29FBq20yAMH3+mPFUAdPNAKU8MX x/BYr5aGwlBqHy7x3z2MfG+4Cx1nXqS+ardjEGuL4Bu0AYPc1LclAgZVXg6IzQC6 2CbFXttNA7TvtnzrEAjdORgct7N08HaNM6/lWkQddWcs0Qzzr1RhyTCXUmeAJuPm 0jGvekHR7LkDPdEhJ15DW7Lbtao/OwQQ3E0zmHsWhCW4EWmuKmFeN5uuiA== Received: by lepiller.eu (OpenSMTPD) with ESMTPSA id 685d4ba8 (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256:NO); Mon, 17 May 2021 00:39:55 +0000 (UTC) Date: Mon, 17 May 2021 02:38:29 +0200 From: Julien Lepiller To: "c4droid" Subject: Re: Using bootstrap seeds write package definitions Message-ID: <20210517023829.13248200@tachikoma.lepiller.eu> In-Reply-To: References: X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:5884:8208::1; envelope-from=julien@lepiller.eu; helo=lepiller.eu X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: help-guix@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: help-guix Errors-To: help-guix-bounces+larch=yhetil.org@gnu.org Sender: "Help-Guix" X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1621212017; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=NOkbDtzHXM4Tkap84qwgvVUOUSIp4N96GbbE0thv+Hs=; b=u/Tq96pZtOKXcgWgstr3hACfXGf9rC646wAnYL9GxrzAutXtS8+5Qy0ZkE6OsoIR/A2dPf SImw2sUMfoeLumBjd5DYTsvOSum8CcUut+7LUetIp8FM5FS5OqGJwZFh68me6wuNdI8tIB mpFIwW9tcGmFEBELwGDsztFfdZ0ecvCQEKvZ/yMFoJ6bG983D/cvidHotq8e2xLOVuzOUi kAPOx1TPV5f3t6oi7T9V9gaw9cnql/nyxO5wUgUKzoZ4A8qd2IeqF52H2UFnIBL2uASZv7 HH2wVLLnWTcD/bpYkC5xffk9XPFkSOVnZLuZnj247vxgmrMYZObL6zSo/GPTug== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1621212017; a=rsa-sha256; cv=none; b=u0W0tDEWNxTKpO83+lM/3UbVcdEB0/QF/ti4uKQzeFaXFjv7fg53GajpNefHJLqMT+BsS2 Llmyy4jfCSfHZmQ3ZGU3X39UoG/ZQqWMdtV7wSJl5OwJQ6puAQ8zkreLMKSlDwd0Xcc36h eYyUMBGXg+Yv659j9KPnGEFbNxbY9hwqurVT363Lq74SaDSYcD9mp5UdVUPbusLxgRosrK +4N6PcA6+F3DcjE6j5QvZfC9jsxqUfqeKo6yNMEqBmR+J48TlnWOMBrxBu7I2+c+4P1SbW gHsNzWfChkGPa4Qn6bdpMWyFfKx14MXMQ4azLEaZYvUbwsChXPzVAK0i3widiw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=lepiller.eu header.s=dkim header.b=mInGsEEV; spf=pass (aspmx1.migadu.com: domain of help-guix-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=help-guix-bounces@gnu.org X-Migadu-Spam-Score: 3.96 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=lepiller.eu header.s=dkim header.b=mInGsEEV; dmarc=fail reason="SPF not aligned (relaxed)" header.from=lepiller.eu (policy=none); spf=pass (aspmx1.migadu.com: domain of help-guix-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=help-guix-bounces@gnu.org X-Migadu-Queue-Id: ABDD316A8C X-Spam-Score: 3.96 X-Migadu-Scanner: scn0.migadu.com X-TUID: tCWe7oy804U1 Hi c4droid, Le Sun, 16 May 2021 10:50:36 +0800, "c4droid" a =C3=A9crit : > Hello guix! > I was using the Linux From Scratch for a while as my mainly linux > distro, use soft link as package management. when I heard guix, I > think I found solution for my LFS package management. I tried guix > and guix system few month, Is time for switch my LFS package manager > to guix. I've been using LFS (and my own LFS-based "distro") for some years, so I completely understand why you'd want to use guix. Actually I based my "distro" on what I understood from Guix and the package manager from Haiku. When I understood I implemented that badly, I switched to Guix and Guix System entirely, no more LFS :D. > When I watched the manual talk about bootstrapping guix, I don't know > how to writing some package definitions with bootstrap-seeds, I was > searching on the google and ask questions on irc, because building > the LFS, want build the cross toolchain (stage 1) then build final > system (stage 2), last is kernel and initramfs (stage 3). after that > is build Beyond LFS (stage 4). I stuck with using bootstrap seeds > writing stage 1 package definitions. So I ask for help on community, > because the power of community is great. :) So Guix comes with a set of packages, which are just recipes to build them from source. There are two things you might want to do: you can either use the existing packages or create your own recipes for the whole system. If you choose to use our packages, then there are again two options. You can use the existing binary bootstrap (the only thing you wouldn't build yourself), or build it yourself and replace the binaries used in Guix by your own. Note that the bootstrap binaries are different from the binaries built for the first chroot of LFS (the cross-compiler). We do not use a binary GCC, but we instead start from mescc, a small C compiler, and use it to build tcc, then gcc, with the goal of reducing that down to stage0, which is only a few hundred bytes of binary, plus sources of other packages. # Using our recipes and bootstrap binaries If you want to use our bootstrap binaries, there is nothing to do, because Guix itself will be able to get the binary bootstrap and build everything from it. Do not enable substitutes if you want to build everything yourself. # Providing your own bootstrap binaries If you prefer to provide your own bootstrap, you'll have to build and provide binaries for the bootstrap seeds we currently have in Guix, that you see in the manual. # Building your own packages If you decide not to use our recipes, you must write your own. The set of packages is rooted in the bootstrap seeds, as you noticed. However, if you want to provide your own recipes, you are basically free to provide any bootstrap and further packages you want. What you could do is to build stage1 (cross toolchain), use that as your binary seed, and build the other stages as guix packages. Note that for that, you'll need to have guix already installed on the host system. If you have never used Guix, or never written a package definition, you might want to have a look at our short packaging tutorial at https://guix.gnu.org/en/cookbook/en/html_node/Packaging-Tutorial.html#Packa= ging-Tutorial (French and German are also available if you prefer one of these languages). There is some code in gnu/packages/bootstrap.scm that you might be interested in. It has some interesting bits: first there are a few binary seeds with hashes: they are statically linked binaries that are needed to decompress other seeds. Then, we define a few special procedures that replace the normal packaging procedures (bootstrap-origin, package-from-tarball). You probably want to use them or get inspiration from them to create your own bootstrap recipes (packages that simply decompress a tarball containing a prebuilt binary). The rest of the file lists these packages. Then gnu/packages/commencement.scm is the very beginning of the package graph. These packages use the binary seeds to build up to gcc, that we later use in the gnu-build-system, etc. You will be interested in the comments in this file too :) # My own experience with my package manager (not guix) If I recall correctly, what I did when I had my own "distro" (and package manager), is that I first built the cross-toolchain and base system from LFS (it was pre-10.0, and we built the cross-compiler and use it firts outside the chroot to build the base build toolchain we could then chroot to). I would first manually create a package from the chroot, and install a first system with only that package, then chroot to it. Then, from this system and the chroot package, I was able to build the base system with my package manager. Once I had the base LFS system (stage 2), that system had a dependency on the chroot package, which was not acceptable for me, so I replaced all the recipes to depend on the previously built version, turning stage2 into a set of bootstrap binaries. I rebuilt stage2 from the new bootstrap, and continued to write packages for other packages. Once I had my packages, I also wrote some code to create and install the initramfs and kernel (stage3). At this point, I could boot the new system, and continue with stage 4 :) Note that, in order to use Guix, you'll need Guix in the chroot package and all its dependencies, which is bigger than what LFS makes you build initially. Hope this is useful! Before I can help you further, I think I need to know which route you want to follow, as they are very different. > p.s.: Sorry for my poor english Hehe, don't worry. You can use your mother tongue if you prefer on this mailing list, although I can only help in English or French. > ------ > Best reguards c4droid