Linux環境の作り方入門 vol.2 | 16.78MHz

Linux環境の作り方入門 vol.2

(前回の記事はこちら)
おなじみのbashをビルドする。bashはDESTDIRを無視するが、バイナリ中にインストールパスを埋め込まないので、prefixで直接インストール先を指定する。
$ ${SYSTEM_BUILD_DIR}/usr/src
$ wget http://ftp.yz.yamagata-u.ac.jp/pub/GNU/bash/bash-4.1.tar.gz
$ tar xf bash-4.1.tar.gz
$ cd bash-4.1
$ mkdir build1
$ cd build1
$ ../configure --prefix=${SYSTEM_BUILD_DIR}/usr/ --exec-prefix=${SYSTEM_BUILD_DIR} --enable-alias \
--enable-arith-for-command --enable-array-variables --enable-command-timing \
--enable-cond-command --enable-cond-regexp --enable-debugger --enable-history \
--enable-extended-glob --enable-job-control --enable-net-redirections \
--enable-process-substitution --enable-progcomp --enable-prompt-string-decoding \
--enable-readline --enable-restricted --enable-select --enable-separate-helpfiles \
--enable-mem-scramble --with-curses --enable-shared --disable-debug \
--mandir=/usr/share/man
$ make
$ make install

続いてアセンブラやリンカ等のバイナリ生成のための基本的なコマンド群binutils
$ ${SYSTEM_BUILD_DIR}/usr/src
$ wget http://ftp.yz.yamagata-u.ac.jp/pub/GNU/binutils/binutils-2.20.1.tar.bz2
$ tar xf binutils-2.20.1.tar.bz2
$ cd binutils-2.20.1
$ mkdir build
$ ../configure --prefix=/usr --disable-debug --enable-shared --sysconfdir=/etc \
--localstatedir=/var --disable-werror
$ make
$ DESTDIR=${SYSTEM_BUILD_DIR} make install

そしてgccをインストールするわけだが、最近のgccはいろいろと外部ライブラリを要求するため、先にそれらを入れておく。まずは多倍長整数演算ライブラリgmp
$ ${SYSTEM_BUILD_DIR}/usr/src
$ wget http://ftp.yz.yamagata-u.ac.jp/pub/GNU/gmp/gmp-5.0.1.tar.bz2
$ tar xf gmp-5.0.1.tar.bz2
$ cd gmp-5.0.1
$ mkdir build
$ cd build
$ ../configure --prefix=/usr --enable-shared --sysconfdir=/etc --localstatedir=/var
$ make
$ DESTDIR=${SYSTEM_BUILD_DIR} make install

次に多倍長浮動小数点数演算ライブラリmpfr
$ ${SYSTEM_BUILD_DIR}/usr/src
$ wget http://www.mpfr.org/mpfr-current/mpfr-3.0.0.tar.bz2
$ tar xf mpfr-3.0.0.tar.bz2
$ cd mpfr-3.0.0
$ mkdir build
$ cd build
$ ../configure --prefix=/usr --enable-shared --sysconfdir=/etc --localstatedir=/var
$ make
$ DESTDIR=${SYSTEM_BUILD_DIR} make install

そして複素数演算ライブラリmpcをインストール。
$ ${SYSTEM_BUILD_DIR}/usr/src
$ wget http://www.mpfr.org/mpfr-current/mpfr-3.0.0.tar.bz2
$ tar xf mpfr-3.0.0.tar.bz2
$ cd mpfr-3.0.0
$ mkdir build
$ cd build
$ ../configure --prefix=/usr --enable-shared --sysconfdir=/etc --localstatedir=/var

mpcはgmpとmpfrを使用するため、古い方の環境が古いgccを使っていると、この2つが存在しなくてビルド出来ない可能性がある。その場合新しい環境に先ほどインストールしたgmpとmpfrを使うためにconfigureに以下ので示された2項目を追加する。
$ ../configure --prefix=/usr --enable-shared --sysconfdir=/etc --localstatedir=/var --with-gmp=${SYSTEM_BUILD_DIR}/usr --with-mpfr=${SYSTEM_BUILD_DIR}/usr

後は普通にビルドしてインストール。
$ make
$ DESTDIR=${SYSTEM_BUILD_DIR} make install

gccをビルドする。
$ ${SYSTEM_BUILD_DIR}/usr/src
$ wget http://ftp.yz.yamagata-u.ac.jp/pub/GNU/gcc/gcc-4.5.1/gcc-4.5.1.tar.bz2
$ tar xf gcc-4.5.1.tar.bz2

$ cd gcc-4.5.1
$ ./configure --prefix=/usr --enable-shared --sysconfdir=/etc --localstatedir=/var \ --enable-_cxa_atexit --with-system-zlib --enable-nls --enable-clocale=gnu \
--enable-threads=posix --enable-long-long --enable-c99 --disable-werror \
--enable-languages=c,c++,objc

古い方の環境にgmp、mpfr、mpcが無い場合先ほど同様configureに以下ので示された3項目を追加する。
$ ./configure --prefix=/usr --enable-shared --sysconfdir=/etc --localstatedir=/var \ --enable-_cxa_atexit --with-system-zlib --enable-nls --enable-clocale=gnu \
--enable-threads=posix --enable-long-long --enable-c99 --disable-werror \
--enable-languages=c,c++,objc --with-gmp=${SYSTEM_BUILD_DIR}/usr --with-mpfr=${SYSTEM_BUILD_DIR}/usr --with-mpc=${SYSTEM_BUILD_DIR}/usr

ただし、gccはここで指定したパスを記憶しているため、chroot後に${SYSTEM_BUILD_DIR}/usr以下に必要なライブラリが無いから実行出来ないといった旨のエラーに見舞われる。なのでchroot後に正しいパスを指しているgccを再度ビルドする必要があるが、gccをビルドするためにはとりあえず何とかしてgccに動いてもらう必要があるため、新しい環境の中にシンボリックリンクを張って${SYSTEM_BUILD_DIR}/usrが存在するかのように見せかける。
$ mkdir -p ${SYSTEM_BUILD_DIR}/${SYSTEM_BUILD_DIR}
$ cd ${SYSTEM_BUILD_DIR}/${SYSTEM_BUILD_DIR}
$ ln -s /usr
$ ${SYSTEM_BUILD_DIR}/usr/src/gcc-4.5.1

おもむろにビルド、インストール
$ make
$ DESTDIR=${SYSTEM_BUILD_DIR}
$ make install

(つづく!)