Gentoo Prefix を OS X El Capitan に三日かけて導入した

読了まで:約4分


という話。

追記: [[2018-02-05]]

なお、このエントリを書いた後、その次の日ぐらいに公開された、 [[macOS Sierra]] をインストールするなどして、 [[Gentoo Prefix]] は使う間もなく消滅しました。

また、 [[macOS High Sierra]] が公開されている 2018 年現在、僕は macOS では [[Homebrew]] を使っています。

ここ数日前ぐらいから、

[[OS X El Capitan]] のパッケージマネージャ、 [[pkgsrc]] + [[pkgin]] から変えるかなー

と思って、色々モノを物色して、最終的には、

よし、 Gentoo Prefix (Portage) を構築してみよう!

と成り、実際にこの環境を構築したんですが、色々とトラブルったというか、一筋縄では全然インストールが出来なかったので、今日はその辺り、後に再構築する時になっても困らないように、何をどうしたか、をまとめておきます。

1. [OS X El Capitan で [[Gentoo Prefix]] を導入する手順 (理想)]

基本的には、

を Download してきて、

$ bash ~/Downloads/bootstrap-prefix.sh

して、設定を入力すれば OK …… なんだけれども、実際には、色々トラブルと言うか、

パッケージがコンパイル出来ねー

とか、あるいは、

file collision が見付かってインストール出来ねー

とか良く有るので、その辺りを一個ずつ解決する必要が有ります。

2. [OS X El Capitan に [[Gentoo Prefix]] を導入する方法 (実際)]

まず、基本は上記と一緒で、

基本的には、

を Download してきて、

$ bash ~/Downloads/bootstrap-prefix.sh

します。が、順調にトラぶるので、その辺りを解決しつつ、インストール作業を進めます。

1. stage2 で sys-devel/binutils-apple がコンパイル転ける

これは、$EPREFIX/tmp/etc/portage/package.mask で、

>=sys-devel/binutils-apple-7.0

と言う感じで、mask すればなんとかなる

2. stage2 で llvm-3.4.2 の アーカイブが Download 出来ない

$EPREFIX/tmp/usr/portage/sys-devel/llvm-3.4.2.ebuild

clang? ( http://llvm.org/releases/${PV}/compiler-rt-3.4.src.tar.gz
http://llvm.org/releases/${PV}/cfe-${PV}.src.tar.gz )

を、

clang? ( http://llvm.org/releases/${PV%.*}/compiler-rt-3.4.src.tar.gz
http://llvm.org/releases/${PV%*}/cfe-${PV}.src.tar.gz )

と言う感じに直す。なお上記スニペットは GPLv2 な ebuild ファイルからの引用である。

3. stage2 で bash が file collision してインストール出来ない

まず、 file collision の元になっている、

  • $EPREFIX/bin/bash

を消す。

次に$EPREFIX/bin/egrep の shebang を、

#!/bin/sh

と言う感じで OS X El Capitan のシステム の /bin/sh を使う様にした後、 $EPREFIX/etc/portage/make.confCONFIG_SHELL を一時的に、

CONFIG_SHELL="/bin/bash"

という感じで これもまた OS X El Capitan のシステム の /bin/bash を使う様にする

4. stage3 の wget のコンパイルが転ける

$EPREFIX/etc/portage/package.mask

=net-misc/wget-1.18

を取り敢えず mask 。

5. stage3 で nano が (ry

これも$EPREFIX/etc/portage/package.mask

=app-editors/nano-2.6.3

を mask 。

6. stage3 の sys-apps/baselayout-prefix が file collision

これは、bootstrap-prefix.sh が、

  • $EPREFIX/sbin/openrc-run

を作っているのが原因なので、bootstrap-prefix.sh の該当部分である

if  [[[ ! -x "${ROOT}"/sbin/openrc-run ]] ]; then
echo "We need openrc-run at ${ROOT}/sbin to merge rsync." > "${ROOT}"/sbin/openrc-run
chmod +x "${ROOT}"/sbin/openrc-run
fi

をコメントアウトし、かつ $EPREFIX/sbin/openrc-run を削除する。

なお、上記スニペットは GPLv2 な bootstrap-prefix.sh からの引用であり、また問題の上記の処理部分は bootstrap_stage3 関数の中に有ります。

7. stage3 で llvm-3.8.1 のコンパイル中に Segmentation Fault

これは、stage3 に至るまでの間にインストールされる、

  • llvm-3.5.2

が原因なので、これを一旦、

$ $EPREFIX/bin/emerge -u =sys-devel/llvm-3.4.1

という感じで llvm-3.4.1 に下げた後、llvm-3.8.1 まで上げるとなんとかなる

以上

という感じで結果として 7 つの関門さえクリア出来れば、

  • [[Gentoo Prefix]] on [[OS X El Capitan]]

は実現します。

ただしコレ、試行錯誤するのに結構時間かかったし、また、今後の導入時期によっては、他のパッケージが壊れてたり、あるいは今回の問題が解決している場合も有る得るので、その辺りはまあ、当って砕けろ! と言うか、かなり行き当りバッタリにならざるを得ない感じです。

そのため、

  • [[Gentoo Prefix]]

を導入したい! という場合には、かなり時間に余裕が有るときにのみ行なうようした方が良いかと僕は思います。そうでないと、下手すると、今回の僕の様に三日ぐらいは他の作業が止まる可能性が有るので。

ま、とりあえず今は [[Gentoo Prefix]] を導入しただけの段階なので、Terminal 上で人権を得られるにはまだまだパッケージの導入やらしないといけないのですが、それはまあ今後ボチボチと行なっていきたいと考えています。


という事で今回の記事は以上です。

まあ、ぶっちゃけ僕も Gentoo Prefix で初めて Portage を触っているので、Portage 関係で質問されてもほぼ判らないと思いますが、何か有りましたら、ブコメ等でお知らせください。

という訳で以上です。はい。

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。