unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
From: c4droid <c4droid@foxmail.com>
To: Julien Lepiller <julien@lepiller.eu>
Cc: help-guix <help-guix@gnu.org>
Subject: Re: Using bootstrap seeds write package definitions
Date: Tue, 18 May 2021 16:33:41 +0800	[thread overview]
Message-ID: <tencent_EC0F86F5AE1D900E56DAE81F1CF88A345809@qq.com> (raw)
In-Reply-To: <20210517023829.13248200@tachikoma.lepiller.eu>


Julien Lepiller writes:

> Hi c4droid,
>
> Le Sun, 16 May 2021 10:50:36 +0800,
> "c4droid" <c4droid@foxmail.com> a écrit :
>
>> 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#Packaging-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 :)
>

I watched gnu/packages/bootstrap.scm and gnu/packages/commencement.scm,
I decide use mes tools and busybox utilities make bootstrap recipes and
my own bootstrap seeds, then follow the gnu/packages/commencement.scm
graph build cross toolchain and so on. But the way, the bootstrap and
commencement module give some inspiration for my idea.

> # 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



      parent reply	other threads:[~2021-05-18 15:55 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-16  2:50 c4droid
2021-05-17  0:38 ` Julien Lepiller
2021-05-17  2:00   ` c4droid
2021-05-18  8:33   ` c4droid [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tencent_EC0F86F5AE1D900E56DAE81F1CF88A345809@qq.com \
    --to=c4droid@foxmail.com \
    --cc=help-guix@gnu.org \
    --cc=julien@lepiller.eu \
    --subject='Re: Using bootstrap seeds write package definitions' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

unofficial mirror of help-guix@gnu.org 

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://yhetil.org/guix-user/0 guix-user/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 guix-user guix-user/ https://yhetil.org/guix-user \
		help-guix@gnu.org
	public-inbox-index guix-user

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.yhetil.org/yhetil.gnu.guix.user
	nntp://news.gmane.io/gmane.comp.gnu.guix.user


AGPL code for this site: git clone http://ou63pmih66umazou.onion/public-inbox.git