ECCSにGitを入れる

カテゴリ: misc.

参考:[tips][Mac]GitをMac OS X ServerであるECCS上で入れる(root権限なし) – xxxxxeeeeeの日記
大いに参考にさせてもらいましたが,
これの通りにやってもうまくいかないです.

結論

次のようにすればインストールできる.はず.

1. (下準備の下準備) MacPortsのインストール

$ wget https://distfiles.macports.org/MacPorts/MacPorts-2.0.3.tar.gz
$ tar xzvf MacPorts-2.0.3.tar.gz
$ cd MacPorts-2.0.3.tar.gz
$ PATH=/usr/bin:${PATH} ./configure --prefix=${HOME}/local/macports --enable-readline --with-no-root-privileges --with-install-user=`id -un` --with-install-group=`id -gn` --build=i386 --with-universal-archs="i386" --with-sqlite3prefix=${HOME}/local
$ make
$ make install
$ export PATH=${PATH}:~/local/macports/bin/

2. (下準備) opensslとlibiconvのインストール

$ port -d selfupdate
$ port -d sync
$ port install openssl libiconv

3. Gitのインストール

$ cd ~
$ wget http://git-core.googlecode.com/files/git-1.7.8.4.tar.gz
$ tar xzvf git-1.7.8.4.tar.gz
$ cd git-1.7.8.4.tar.gz
$ ./configure --prefix=${HOME}/local --with-iconv=${HOME}/local/macports --with-openssl=${HOME}/local/macports --without-tcltk && NO_FINK="YesPlease" make install
$ echo "export PATH=\${PATH}:\${HOME}/local/bin" >> ~/.bashrc

紆余曲折

$ wget http://git-core.googlecode.com/files/git-1.7.8.4.tar.gz
$ tar xzvf git-1.7.8.4.tar.gz
$ cd git-1.7.8.4.tar.gz
$ ./configure --prefix=${HOME}/local

ここまでは特に問題なし.

$ make
    /* (snip) */
    LINK git-daemon
ld: warning: in /sw/lib/libiconv.dylib, file is not of required architecture
ld: warning: in /sw/lib/libcrypto.dylib, file is not of required architecture
Undefined symbols:
  "_libiconv_open", referenced from:
      _reencode_string in libgit.a(utf8.o)
  "_libiconv", referenced from:
      _reencode_string in libgit.a(utf8.o)
  "_SHA1_Update", referenced from:
      _write_sha1_file_prepare in libgit.a(sha1_file.o)
      _write_sha1_file_prepare in libgit.a(sha1_file.o)
      _write_loose_object in libgit.a(sha1_file.o)
      _write_loose_object in libgit.a(sha1_file.o)
      _verify_pack_index in libgit.a(pack-check.o)
      _verify_pack in libgit.a(pack-check.o)
      _verify_pack in libgit.a(pack-check.o)
      _ce_write in libgit.a(read-cache.o)
      _write_index in libgit.a(read-cache.o)
      _read_index_from in libgit.a(read-cache.o)
      _patch_id_consume in libgit.a(diff.o)
      _diff_flush_patch_id in libgit.a(diff.o)
      _diff_flush_patch_id in libgit.a(diff.o)
      _diff_flush_patch_id in libgit.a(diff.o)
  "_SHA1_Final", referenced from:
      _write_sha1_file_prepare in libgit.a(sha1_file.o)
      _write_loose_object in libgit.a(sha1_file.o)
      _verify_pack_index in libgit.a(pack-check.o)
      _verify_pack in libgit.a(pack-check.o)
      _write_index in libgit.a(read-cache.o)
      _read_index_from in libgit.a(read-cache.o)
      _diff_flush_patch_id in libgit.a(diff.o)
  "_libiconv_close", referenced from:
      _reencode_string in libgit.a(utf8.o)
      _reencode_string in libgit.a(utf8.o)
  "_SHA1_Init", referenced from:
      _write_sha1_file_prepare in libgit.a(sha1_file.o)
      _write_loose_object in libgit.a(sha1_file.o)
      _verify_pack_index in libgit.a(pack-check.o)
      _verify_pack in libgit.a(pack-check.o)
      _write_index in libgit.a(read-cache.o)
      _read_index_from in libgit.a(read-cache.o)
      _diff_flush_patch_id in libgit.a(diff.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [git-daemon] Error 1

libiconvとlibcryptoのアーキテクチャでダメ出しを食らう.

かといって,

$ ./configure --without-iconv --without-openssl --prefix=${HOME}/local

とかするとSSHとかできなくなりそうな雰囲気なので,
ちゃんとlibiconvとlibcryptoを入れることに.

最初に挙げたブログではMacPorts経由で入れていたので
そのとおりの方法を試してみる.

$ wget https://distfiles.macports.org/MacPorts/MacPorts-2.0.3.tar.gz
$ tar xzvf MacPorts-2.0.3.tar.gz
$ cd MacPorts-2.0.3.tar.gz
$ ./configure --prefix=${HOME}/local/macports --enable-readline --with-no-root-privileges --with-install-user=`id -un` --with-install-group=`id -gn` --build=i386 --with-universal-archs="i386" --with-sqlite3prefix=${HOME}/local
(snip)
checking for tclsh... /sw/bin/tclsh
(snip)
checking whether tclsh was compiled with threads... no
configure: error: tcl wasn't compiled with threads enabled

だめじゃん!configureすら通らないじゃん!

tclのスレッドがどうのこうのと書いてあるけれど,
configureの該当箇所を読んでみると,
どうやらPATHに入ってるパスを
tclshの頭に順々にくっつけてみて
最初に見つかったのがたまたま/sw/bin/tclsh
そいつでecho 'puts $tcl_platform(threaded)' | $TCLSH
を実行してみたら「スレッド不可」になっていたので
こういうエラーを吐いているらしい.
でも/usr/bin/tclshの方だとスレッド可になってるよー?

そこでPATHの順序を入れ替えて……

$ PATH=/usr/bin:${PATH} ./configure --prefix=${HOME}/local/macports --enable-readline --with-no-root-privileges --with-install-user=`id -un` --with-install-group=`id -gn` --build=i386 --with-universal-archs="i386" --with-sqlite3prefix=${HOME}/local

これでconfigureはうまくいってしまった.

$ make
$ make install

makemake installも無事完了.
なにこれーなにこれー.

ともかく.
これでめでたくportが使えるようになったので作業のつづき.

$ export PATH=${PATH}:~/local/macports/bin/
$ port -d selfupdate
$ port -d sync
$ port install openssl libiconv

なにこれすっげえ時間かかる.

ずいぶん待たされたがこれでようやく環境が整ったので
Gitをインストールする.

$ cd git-1.7.8.4.tar.gz
$ ./configure --prefix=${HOME}/local --with-iconv=${HOME}/local/macports --with-openssl=${HOME}/local/macports --without-tcltk && NO_FINK="YesPlease" make install

できたー!

インストール直後はすでにパスが通った状態になっているけれど
ログアウトすると解放されてしまう.
ということで最後に~/local/binにパスを通して終了.

$ echo "export PATH=\${PATH}:\${HOME}/local/bin" >> ~/.bashrc

ここまで長かった…….

2012/1/30 (月)

コメント