ZSH の最新版をbuild したいぞー


# ZSH の最新版をbuildする。

はい、こんにちは。  
普段使うプログラムは、出来るだけ最新版なStableなん使いたいですよね！  
それなのにCentOSときたら `yum` で拾ってくるバージョンは4.3.10!?  
**いやだ！もっと新しいのん使いたい！**

と、いうわけでタイトルです。

あー、[Suseたん](https://ja.opensuse.org/)可愛いですよ[Suseたん](https://ja.opensuse.org/)。  
パッケージだってなんでもありますよ。  
[Keepass](http://keepass.info/)や、[Guake](https://github.com/Guake/guake)なんてマニアックでありながら個人的に必須なものだって1Clickインストール出来ますのよ。  
しかも出来るだけ新しくてStableなんですのよ。  

ノートPCに32bit版を入れればまだまだ戦える、うん。

えー、いきなり話がずれましたが、今回はCentOSでやります。  
OpenSuse でも同じ手順で出来ましたので、ご報告までに。

ユーザーシェルを変更する為、念の為にコンソールに直接ログインしておく事。  
それかもう一つセッション作成しておく。  
あるいはtmux とかscreen で、、、もういいですね(・﹃・)

環境はCentOS6.5 をminimal install している状態です。

## 全体の流れ
0.  yodl のビルドの為に `icmake` を作る
0.  yodl のマニュアル作成の為に latex パッケージをインストール
0.  yodl インストール
0.  ZSH のビルド
0.  ログインシェルの変更
0.  バージョンの確認
0.  おまけ：最新版のyodl が使いたかったら最新版のGCCを持ってきな！！

順番にやっていきます。

## icmake build

```bash
yum groupinstall 'Development tools'
yum install git
mkdir src
cd src
git clone git://git.code.sf.net/p/icmake/code icmake
cd icmake/icmake
```

INSTALL.im を編集すればインストール先を変更出来るぽいけど、よくわかっていないのでデフォルトでいっちゃいます。

```bash
./icm_bootstrap /
su
./icm_install strip all /
```

バージョンの確認

```bash
icmake --version
```
> 
> Make Utility  Version 7.21.01
> Copyright (c) GPL 1992-2014. NO WARRANTY.


## yodl build

yodl のソースを拾ってきて、展開して中へ。  
実はtar のオプションは、`xf` だけでOKなんですって！  
gz とかbz2 とか自動判定してくれるんですって！！

```bash
wget http://downloads.sourceforge.net/project/yodl/yodl/3.03.0/yodl_3.03.0.orig.tar.gz
tar xf yodl_3.03.0.orig.tar.gz
cd yodl-3.03.0
```

これもINSTALL.im を編集すればインストール先を変更出来るぽいけど、デフォルトでいっちゃいます。  
※ 本当に必要なのは`programs` と`macros` だけです。

```bash
./build programs
./build man
# ここで、manual をビルドするのに latex が必要になるのでインストール
yum install latex2html
./build manual
./build macros

su
./build install programs /
./build install man /
./build install manual /
./build install macros /
./build install docs /
```

完了。

```bash
yodl --version
```
> yodl version 3.04.00


## ZSH build

いよいよ本番。

```bash
git clone git://git.code.sf.net/p/zsh/code zsh
./Util/preconfig
./configure --prefix=/usr/local --enable-locale --enable-multibyte
make clean
make -j 4
su
porg -lD make install
```

どこにインストールされたのかなーっと。

```bash
which zsh
```
> /usr/local/bin/zsh

次にシェル候補に載っているか確認。  
無ければ上記アドレスを追加。

```bash
vi /etc/shells
```

## ログインShellの変更

root とユーザーの両方に作業が必要。

```bash
chsh
```
> root / userFoo のシェルを変更します。
> 新しいシェル [/bin/bash]: /usr/local/bin/zsh
> シェルを変更しました。

ここでログインし直すと変更されている、はず。  
バージョンの確認をしてみましょう。

```bash
echo $ZSH_VERSION
```
> 5.0.7-dev-0

OKですね！ お疲れ様でした！！(・∀・)

後はもう、[zshrc](https://github.com/TEVASAKI/dotfiles/blob/master/zshrc) を好きなだけ弄んでくだされば結構です、はい。  
ZSH はデキる子なので調教のしがいがあると思います(意味深

chsh後に「以前使っていた設定ファイルの所有者が実行権が」どうとか怒られてまともにログイン出来ない場合、私の場合**selinuxが悪さしていました**。  
元々ZSH を別ルートで入れていた場合に発生しやすい様です。  

もしそうなったら冒頭で述べた通り、別セッションから`chsh` で元のシェルに戻してあげて下さい。  
慌てる事はありません。きっと、大丈夫です。  

**きっと。**

## おまけ

### 最新版のyodl が使いたかったら最新版のGCCを持ってきな！！  

と、いうわけで。  
yodl だけGCCを最新の4.9以降にしないとビルド出来ない様になっているわけです。  
CentOS6.5 デフォルトのGCC4.47 では、yodl-3.03.0 までしか作れません。  
↓ こんなエラーですね。
> g++ --std=c++11 -o tmp/install/usr/bin/yodlverbinsert -O2 -Wall -g src/verbinsert/verbinsert.cc  
> cc1plus: error: unrecognized command line option "-std=c++11"  
> system - failure of system call (status 256)  

ってことで、サクッとGCCをアップデートしてやりましょう。  

**makeに二時間かけて。**

精神衛生上、失敗した時の為にも`ccache` を仕込んでおくと幸せになれるかもしれない。

## GCC バージョンアップ

こっからは全てroot 権限でやっていきます。  
わっかりにくいGCC [本家ミラー](https://gcc.gnu.org/mirrors.html)から、ソースを拾ってきて、伸張しましょう。  
そして準備スクリプトが同梱されているのでそれも実行。

```bash
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.2/gcc-4.9.2.tar.gz
tar xf gcc-4.9.2.tar.gz -C /usr/local/src
cd /usr/local/src/gcc-4.9.2
./contrib/download_prerequisites
```

下記パッケージがダウンロードされました。  
mpfr-2.4.2.tar.bz2  
gmp-4.3.2.tar.bz2  
mpc-0.8.1.tar.gz  
isl-0.12.2.tar.bz2  
cloog-0.18.1.tar.gz  

あと、これも。

```bash
yum install glibc-devel.i686
yum install gcc-c++.x86_64
```

ビルド用のフォルダを作らないとトラブるそうな。

```bash
mkdir build
cd build
../configure --disable-multilib
# build 以下にMakefileが作成されます。
make -j 4
```

`--disable-multilib` を指定しないと以下のエラーが。  
> configure: error: I suspect your system does not have 32-bit developement libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib.  

これでビルドが始まります。  
二時間ぐらいかかります（  
コーヒーでも飲んでのんびり放っておきましょう。  
寝る前に仕掛けるのもいいでしょう。  

おはようございます、無事終了していましたか？  
ではインストールしてあげます。

`paco` も`porg` に名前変わったんですねー

```bash
porg -lD make install
```

で、最後に表示されたメッセージが以下。  
>
> Libraries have been installed in:
>    /usr/local/lib/../lib64
>
> If you ever happen to want to link against installed libraries
> in a given directory, LIBDIR, you must either use libtool, and
> specify the full pathname of the library, or use the '-LLIBDIR'
> flag during linking and do at least one of the following:
>    - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
>      during execution
>    - add LIBDIR to the 'LD_RUN_PATH' environment variable
>      during linking
>    - use the -Wl,-rpath '-Wl,LIBDIR' linker flag
>    - have your system administrator add LIBDIR to '/etc/ld.so.conf'
>
> See any operating system documentation about shared libraries for
> more information, such as the ld(1) and ld.so(8) manual pages.

一応再起動しておきましょう。  

### バージョンの確認

```bash
gcc --version
```
> gcc (GCC) 4.9.2
> Copyright (C) 2014 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

```bash
g++ --version
```
> g++ (GCC) 4.9.2
> Copyright (C) 2014 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

って事で、4.47 -> 4.92 にバージョンアップ完了であります。

## libstdc++.so.6 を最新版で置き換える。

/usr/lib64/libstdc++.so.6 は、同ディレクトリにある libstdc++.so.6.0.13 にリンクされているので  
今回のバージョンアップで作成されたlibstdc++.so.6.0.20 に張り直しておきます。

```bash
cd /usr/lib64
cp -p /usr/local/lib64/libstdc++.so.6.0.20 .
ln -s -f libstdc++.so.6.0.20 libstdc++.so.6
```

## yodl の最新版をbuild する！

これで準備は整いました。  
wget の代わりにgitリポジトリより最新版ソースを取得して、後は上記手順と同じです。

```bash
git clone git://git.code.sf.net/p/yodl/code yodl
-- 略 --
```

```bash
yodl --version
```
> yodl version 3.04.00

お疲れ様でした！(・∀・)ﾉ