@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

= Gentoo/Prefix on MacOSX(Snow Leopard)でemerge ghcができた(完結)

[2010-08-09 13:37:12]
>>>[osx]
>>>[gentoo]
>>>[haskell]

Gentoo/Prefixでの話です

% emerge -uaDNv ghc

だとこんなエラーになりました

Configuring installPackage-1.0...
cabal-bin: ghc version >=6.4 is required but the version of
/Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.10.4-r1/work/ghc-6.10.4/ghc/stage2-inplace/ghc
could not be determined.

poratageでは無理なのかと思って,MacPortsで入れちゃいました.

% sudo port install haskell-platform

そのインストール中に

@peccul あー、失敗しますよ。MacHaskell Platformいれて、USE=ghcboorstrap emerge ghc して、Haskell Platform消す感じで。でも、あと少しebuildもいじらないといけないです

Lundi on Twitter: "@peccul あー、失敗しますよ。MacのHaskell Platformいれて、USE=ghcboorstrap emerge ghc して、Haskell Platform消す感じで。でも、あと少しebuildもいじらないといけないです"

とのことで,portsから入れ始めて良かったみたい.でもなかなか終わらないので放置して寝た.

起きたら終わってたので,

% USE=ghcbootstrap emerge -uaDNv ghc

すると

cd extensible-exceptions && /Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.10.4-r1/work/ghc-6.10.4/libraries/cabal-bin /usr/bin/ghc /Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.10.4-r1/work/ghc-6.10.4/libraries/bootstrapping.conf 1.6.0.3 configure --distpref=dist-bootstrapping --with-compiler=/usr/bin/ghc --with-hc-pkg=/usr/bin/ghc-pkg --package-db=/Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.10.4-r1/work/ghc-6.10.4/libraries/bootstrapping.conf.tmp
Configuring extensible-exceptions-0.1.1.0...
cabal-bin: failed to parse output of 'ghc-pkg dump'
m

ふむ.これがconfigureの失敗ね

@peccul あ、あとなんかどうやら configure あたりにmac用に patch あててますね。ちょっと整理して github に持ってきます。

Lundi on Twitter: "@peccul あ、あとなんかどうやら configure あたりにmac用に patch あててますね。ちょっと整理して github に持ってきます。"

では偉大なるなおたさんのrepositoryを使ってみようと思います.

http://github.com/naota/gentoo-prefix-overlay ほいよ。Gentoo prefix用のrepository作ったでごわす。emacs-vcsghc あたりがそれっぽく動いてみたりするでごわすよ。全部重度の自己責任で。

Lundi on Twitter: "http://github.com/naota/gentoo-prefix-overlay ほいよ。Gentoo prefix用のrepository作ったでごわす。emacs-vcs と ghc あたりがそれっぽく動いてみたりするでごわすよ。全部重度の自己責任で。"

なんでもlaymanというものでoverlayしちゃうみたい.
laymanって,非標準のportage treeをあたかも標準portageのように使える仕組みみたい.→laymanで新しいoverlayを使う - 落穂拾い

というわけで偉大なるなおたさんのREADMEに従ってoverlayしてみる

${EPREFIX}/etc/layman/layman.cfg の overlays のところに
http://github.com/naota/gentoo-prefix-overlay/raw/master/repository.xml をこんな感じでに追加する

overlays : http://www.gentoo.org/proj/en/overlays/repositories.xml
http://github.com/naota/gentoo-prefix-overlay/raw/master/repository.xml

そして layman -a naota-prefix すれば使えるはず。

naota/gentoo-prefix-overlay · GitHub

でも$EPREFIX/etc/laymanがなかったので

% emerge -uaDNv layman


最後に説明が出てた

* Compilation and optimization of Python modules for CPython 2.6 ... [ ok ]
* You are now ready to add overlays into your system.
*
* layman -L
*
* will display a list of available overlays.
*
* Select an overlay and add it using
*
* layman -a overlay-name
*
* If this is the very first overlay you add with layman,
* you need to append the following statement to your
* /etc/make.conf file:
*
* source /Users/peccu/Gentoo/var/lib/layman/make.conf
*
* If you modify the 'storage' parameter in the layman
* configuration file (/Users/peccu/Gentoo/etc/layman/layman.cfg) you will
* need to adapt the path given above to the new storage
* directory.
*
* Please add the 'source' statement to make.conf only AFTER
* you added your first overlay. Otherwise portage will fail.

>>> Recording app-portage/layman in "world" favorites file...

* Messages for package app-portage/layman-1.3.3:

* You do not have dev-vcs/subversion installed!
* While layman does not exactly depend on this
* version control system you should note that
* most available overlays are offered via
* dev-vcs/subversion. If you do not install it
* you will be unable to use these overlays.
*
* Select an overlay and add it using
*
* layman -a overlay-name
*
* If this is the very first overlay you add with layman,
* you need to append the following statement to your
* /etc/make.conf file:
*
* source /Users/peccu/Gentoo/var/lib/layman/make.conf
*
* If you modify the 'storage' parameter in the layman
* configuration file (/Users/peccu/Gentoo/etc/layman/layman.cfg) you will
* need to adapt the path given above to the new storage
* directory.
*
* Please add the 'source' statement to make.conf only AFTER
* you added your first overlay. Otherwise portage will fail.
>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.

* GNU info directory index is up-to-date.


ふむふむ.

  • layman -L
    • 使えるoverlayの一覧
  • layman -a name
    • nameのoberlayを使えるようにする
  • はじめてlaymanを使うなら,$EPREFIX/etc/make.confに追記しろと
  source /Users/peccu/Gentoo/var/lib/layman/make.conf
  • storageをいじったら,make.confの記述もあわせるんやで.
  • 上のsourceの行を追加するのは,overlayを使えるようにしてからにしろと
    • たしかにまだそのディレクトリにはmake.confなかった
    • layman -a nameでmake.confを作るんかな
  • subversionがインストールされてなくて,laymanでも使うことがあるから必要ならインストールしてね
  • リポジトリを更新するのはlayman -s ALL <<2010-08-10 00:24追記>>

こんなもんかな

というわけで偉大なるなおたさんのレポジトリを追加しますか

overlays  : http://www.gentoo.org/proj/en/gentoo-alt/prefix/layman-prefix.txt

overlays  : http://www.gentoo.org/proj/en/gentoo-alt/prefix/layman-prefix.txt
    http://www.gentoo.org/proj/en/overlays/repositories.xml
    http://github.com/naota/gentoo-prefix-overlay/raw/master/repository.xml

に変更したら,layman -Lが5個だったのに,238個になった笑

% layman -a naota-prefix
* Binary /Users/peccu/Gentoo/usr/bin/git seems to be missing! Overlay type "git" not supported. Did you emerge dev-vcs/git?

あはは

% emerge -uaDNvj git

<<いまここ追記:2010-08-09 15:28>>

うまくいった

% layman -a naota-prefix

これで/Users/peccu/Gentoo/var/lib/layman/make.confができたので,

% echo 'source /Users/peccu/Gentoo/var/lib/layman/make.conf'>>$EPREFIX/etc/make.conf

% emerge -uaDNvj ghc

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] dev-lang/ghc-6.12.3  USE="-bash-completion -binary -doc -ghcbootstrap" 119,892 kB [1]
[ebuild  N    ] app-admin/haskell-updater-1.1.0.0  23 kB [1]

Total: 2 packages (2 new), Size of downloads: 119,914 kB
Portage tree and overlays:
 [0] /Users/peccu/Gentoo/usr/portage
 [1] /Users/peccu/Gentoo/var/lib/layman/naota-prefix

Would you like to merge these packages? [Yes/No] y
>>> Verifying ebuild manifests

!!! A file listed in the Manifest could not be found: /Users/peccu/Gentoo/var/lib/layman/naota-prefix/dev-lang/ghc/files/ghc-apply-gmp-hack~

まさかのバックアップファイル?

~/Gentoo/var/lib/layman/naota-prefix/dev-lang/ghc/Manifestから以下の二行を削除

AUX ghc-apply-gmp-hack~ 2563 RMD160 3096051038c98ddae8aacb8f21e69f568534e40c SHA1 57c6024ed12aa351724ac6f21add4cd410b3937a SHA256 b6f6393a63d61d8c2d27bac8b87af197f4b9e0a8ec9873e3c02871ab633d6d2c
...
MISC ghc-6.12.3.ebuild~ 13936 RMD160 f5caee9f301e0128fd14d399df2684b16595e3ad SHA1 519071d6cf599f9f6e20b75de39a8ec84a92ef1b SHA256 b0c75ade53deb6d768e2582a68c9bf66cf53e5528cd1f6f8cab5613986d0d148
% emerge -uaDNvj ghc

お,うまくいってるぽい

<<いまここ追記:2010-08-09 16:02>>

sed: can't read /Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.12.3/work/usr/bin/ghc-6.12.3: No such file or directory
sed: can't read /Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.12.3/work//Users/peccu/Gentoo//usr/bin/ghc-6.12.3: No such file or directory
sed: can't read /Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.12.3/work//Users/peccu/Gentoo//usr/bin/ghci-6.12.3: No such file or directory
sed: can't read /Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.12.3/work//Users/peccu/Gentoo//usr/bin/ghc-pkg-6.12.3: No such file or directory
sed: can't read /Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.12.3/work//Users/peccu/Gentoo//usr/bin/hsc2hs: No such file or directory
sed: can't read /Users/peccu/Gentoo/var/tmp/portage/dev-lang/ghc-6.12.3/work//Users/peccu/Gentoo//usr/lib/ghc-6.12.3/package.conf.d/*: No such file or directory
 * ERROR: dev-lang/ghc-6.12.3 failed:
 *   Relocating ghc from /usr to workdir failed
 * 
 * Call stack:
 *     ebuild.sh, line  53:  Called call-ebuildshell 'src_unpack'
 *   environment, line 797:  Called src_unpack
 *   environment, line 4033:  Called die
 * The specific snippet of code:
 *               sed -i -e "s|${EROOT}/usr|${WORKDIR}/${EROOT}/usr|g" "${WORKDIR}/${EROOT}/usr/bin/ghc-${PV}" "${WORKDIR}/${EROOT}/usr/bin/ghci-${PV}" "${WORKDIR}/${EROOT}/usr/bin/ghc-pkg-${PV}" "${WORKDIR}/${EROOT}/usr/bin/hsc2hs" "${WORKDIR}/${EROOT}/usr/$(get_libdir)/${P}/package.conf.d/"* || die "Relocating ghc from /usr to workdir failed";

あれ?なんかおかしいぞ.$EPREFIX/$EPREFIXみたいな...

<<いまここ追記:2010-08-09 16:09>>

~/Gentoo/var/lib/layman/naota-prefix/dev-lang/ghc/ghc-6.12.3.ebuildみてたらghcbootstrap忘れてたからかも

% USE=ghcbootstrap emerge -uaDNvj ghc

<<いまここ追記:2010-08-09 16:17>>

お,これでうまくいった!

偉大なるなおたさんがリポジトリを修正したので,上の修正,ghcbootstrapは必要なくなって,

% emerge -uaDNvj ghc

だけで入るようになりました<<2010-08-10 00:26追記>>

% sudo port uninstall haskell-platform

これでportでいれたのを消して,portageのんだけになったはず