GuixのFull-Source Bootstrapに感化されたのでやっていく。
方針
hex0から諸々をbootstrapするシステムにはGuixの他にfosslinux/live-bootstrapなるものもあるようだが,なんとなくGuixを使う。
本当はgnu/packages/commencement.scmを参考に手作業でやっていきたかったが,これが結構しんどくて,TCCでbootstrapしたGCCがGCCをコンパイルできなかったときに萎えて諦めた。
Guix
Guixでemerge -e
的なことをする方法がわからなかったので,更地の/gnu/store
からbootstrapしていくことにする。
まずGuixをセットアップしなければならないのだが,公式ページからDLできるバイナリ/インストールスクリプトは既に出来上がった/gnu/store
を利用するので今回は使うことができない。
また,各種ディストロでパッケージされているGuix 1.4.0のcommencement.scm
だとbootstrap-mesを使ってしまうので,hex0からbootstrapするにはどうにかして最新版のGuixを入れる必要がある。
そこで,ディストロで頒布されるGuixをベースに,部分的に最新版で上書きすることにする。
Guixのパッケージを提供しているディストロは,ぱっと見たところGentoo(nix-guix)・Debian・Alpineがあった。 AURのGuixは依存ライブラリのビルドが壊れていて使えなかった。 今回はAlpine on Dockerで作業することにする。 (Dockerといえば,今春からDocker Hubのpullのレート制限が10pull/時に厳しくなるらしい(cf. Usage and limits | Docker Docs)。 いくらなんでも厳しすぎやしませんかね……。)
% docker run --rm -it --tmpfs /tmp:exec --tmpfs /gnu:exec alpine
% apk add autoconf automake build-base gettext-dev git guile-dev guix
% wget -O- https://codeberg.org/guix/guix-mirror/archive/master.tar.gz | tar xz
% cd guix-mirror
% truncate -s0 doc/local.mk
% autoreconf -is
% ./configure --bindir=/usr/bin --disable-daemon
% make -j$(nproc) install
% guix-daemon --build-users-group=guixbuild --disable-chroot 2>/dev/null &
https://gitweb.gentoo.org/proj/releng.git/plain/releases/specs/amd64/llvm/stage1-openrc-23.spec