ここではVMWareを使っている。x64のことは考えていない。
lubuntuをインストールして、新規にハードディスク(ここでは8G.vmdkという名前にする)を追加する。このディスクがLFS用になる。lubuntuのインストールはキーボード設定以外は英語で行った。
(注意:ハードディスクはIDEを選択すること。SCSIでやってはまった。
VMWareでlubuntuにハードディスクを追加して起動したところから始まる。
もろもろの資料はここにある。
最初にこのディスクをext3でフォーマットする。追加したディスクがどの/dev/になるかはfdisk -lなどで確認する。
ここでは/dev/sdbになっている。
rootでログイン
1 |
$ sudo su - |
ext3をsdbに作成
(ここ間違え、/dev/sdbじゃなくて/dev/sdb1にしないといけない。fdisk /dev/sdbしてパーティションを最初につくっていないといけない)
1 |
# mke2fs -jv /dev/sdb |
マニュアルではswapや/homeを別のパーティションに分けることを推奨しているがここではスルー。
1 |
# export LFS=/mnt/lfs |
1 2 |
# mkdir -pv $LFS # mount -v -t ext3 /dev/<xxx> $LFS |
1 |
# mkdir -v $LFS/sources |
1 |
# chmod -v a+wt $LFS/sources |
このファイルにパッケージのURL一覧がある。
1 |
# wget http://www.linuxfromscratch.org/lfs/downloads/7.1/wget-list |
たくさんダウンロードする
1 2 3 |
# wget -i wget-list -P $LFS/sources FINISHED --2012-04-14 07:48:54-- Downloaded: 79 files, 283M in 17m 42s (273 KB/s) |
ないファイルやダウンロード失敗があるかもしれないのがこのmd5チェックが成功するまで頑張る。
ないファイルは他の場所から探す。
1 2 3 4 |
# wget http://www.linuxfromscratch.org/lfs/downloads/7.1/md5sums cp md5sums /mnt/lfs/sources/ cd /mnt/lfs/sources/ # md5sum -c md5sums |
1 |
# mkdir -v $LFS/tools |
1 2 |
# ln -sv $LFS/tools / `/tools' -> `/mnt/lfs/tools' |
ユーザとグループ lfs を作成
1 2 3 |
# groupadd lfs # useradd -s /bin/bash -g lfs -m -k /dev/null lfs # passwd lfs |
-k /dev/nullはスケルトンを参照しない
1 2 |
# chown -v lfs $LFS/tools # chown -v lfs $LFS/sources |
lfsでログイン
1 |
# su - lfs |
スケルトンを参照しないのでここでbashを起動
1 2 3 |
$ cat > ~/.bash_profile << "EOF" $ exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash $ EOF |
set +h はPATHのハッシュを無効にする。
1 2 3 4 5 6 7 8 9 |
$ cat > ~/.bashrc << "EOF" > set +h > umask 022 > LFS=/mnt/lfs > LC_ALL=POSIX > LFS_TGT=$(uname -m)-lfs-linux-gnu > PATH=/tools/bin:/bin:/usr/bin > export LFS LC_ALL LFS_TGT PATH > EOF |
p32 5.4. Binutils-2.22 – Pass 1
Binutilsにはリンカやアセンブラなどオブジェクトファイルを扱うツールが入っている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$ cd /mnt/lfs/sources/ $ tar xfvj binutils-2.22.tar.bz2 $ mkdir -v $ mkdir -v binutils-build mkdir: created directory `binutils-build' $ cd binutils-build/ $ ../binutils-2.22/configure --target=$LFS_TGT --prefix=/tools --disable-nls --disable-werror checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking target system type... i686-lfs-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether ln works... yes checking whether ln -s works... yes checking for a sed that does not truncate output... /bin/sed checking for gawk... no checking for mawk... mawk checking for gcc... no checking for cc... no checking for cl.exe... no configure: error: in `/mnt/lfs/sources/binutils-build': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details. $ |
lubuntuにgccが入ってないので入れる。一般ユーザに戻ってからインストールしてまたlfsユーザに戻る。
1 |
$ sudo apt-get install gcc |
もう一回、今度は成功してMakefileができた。
1 |
$ ../binutils-2.22/configure --target=$LFS_TGT --prefix=/tools --disable-nls --disable-werror |
–target=$LFS_TGTはこのbinutilsがクロスコンパイラ用であることを示す。
–prefix=/tools インストールする場所、実際には/lfs/tools
–disable-nls i18n機能を無効化、このbinutilsは一時的なものなので
–disable-werror 警告を無効
メイクする、が、またmakeが入ってないのでインストール(記述は省略)
1 |
$ make |
インストールする。/toolsに入るためlfsユーザのままでいいはず
1 2 3 4 |
$ make install $ ls /tools bin i686-lfs-linux-gnu lib share $ |
p34 5.5. GCC-4.6.2 – Pass 1
1 2 3 4 5 6 7 8 9 10 11 |
$ pwd /mnt/lfs/sources lfs@ebisu-virtual-machine:/mnt/lfs/sources$ $ tar jfxv gcc-4.6.2.tar.bz2 $ cd gcc-4.6.2 $ tar -jxf ../mpfr-3.1.0.tar.bz2 $ mv -v mpfr-3.1.0 mpfr $ tar -Jxf ../gmp-5.0.4.tar.xz $ mv -v gmp-5.0.4 gmp $ tar -zxf ../mpc-0.9.tar.gz $ mv -v mpc-0.9 mpc |
なんか知らないがクロスコンパイル用でエラーが出ないためのパッチを当てる、が、またpatchがないのでインストールしてからやる。
1 2 3 4 5 6 |
$ patch -Np1 -i ../gcc-4.6.2-cross_compile-1.patch patching file configure Hunk #1 succeeded at 2800 (offset -1 lines). patching file configure.ac Hunk #1 succeeded at 261 (offset -1 lines). $ |
ビルドは別のディレクトリでやる
1 2 3 |
$ mkdir -v ../gcc-build mkdir: created directory `../gcc-build' $ cd ../gcc-build/ |
configureする
1 2 3 4 5 6 7 8 9 10 |
$ ../gcc-4.6.2/configure \ > --target=$LFS_TGT --prefix=/tools \ > --disable-nls --disable-shared --disable-multilib \ > --disable-decimal-float --disable-threads \ > --disable-libmudflap --disable-libssp \ > --disable-libgomp --disable-libquadmath \ > --disable-target-libiberty --disable-target-zlib \ > --enable-languages=c --without-ppl --without-cloog \ > --with-mpfr-include=$(pwd)/../gcc-4.6.2/mpfr/src \ > --with-mpfr-lib=$(pwd)/mpfr/src/.libs |
–disable-shared スタティックリンクする
–enable-languages=c Cコンパイラだけビルドする
そのほかいろいろ無効にする。
メイクする
1 2 |
$ make $ make install |
–disable-sharedでコンフィグしたのでlibgcc_eh.aが作られない。これはGlibcが内部的に使うのでlibgcc.aにシンボリックリンクを張ることで回避する。libgcc.aにはlibgcc_eh.aの内容が入っている、らしい。
1 2 3 |
$ ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'` `/mnt/lfs/tools/bin/../lib/gcc/i686-lfs-linux-gnu/4.6.2/libgcc_eh.a' -> `libgcc.a' $ |
p.36 5.6. Linux-3.2.6 API Headers
GlibcのためにカーネルAPIを公開する。
1 2 3 |
$ cd /mnt/lfs/sources/ $ tar Jxfv linux-3.2.6.tar.xz $ cd linux-3.2.6 |
.configとかを削除してきれいにする。
1 |
$ make mrproper |
カーネルヘッダをエクスポートする
1 2 3 |
$ make headers_check $ make INSTALL_HDR_PATH=dest headers_install $ cp -rv dest/include/* /tools/include |
p37 5.7. Glibc-2.14.1
Glibcをインストールする。Cの基本的な機能を提供する。
1 2 3 |
$ cd /mnt/lfs/sources/ $ tar xfvj glibc-2.14.1.tar.bz2 $ cd glibc-2.14.1 |
パッチを当てる。
1 2 |
$ patch -Np1 -i ../glibc-2.14.1-gcc_fix-1.patch $ patch -Np1 -i ../glibc-2.14.1-cpuid-1.patch |
1 2 3 4 |
$ mkdir -v ../glibc-build mkdir: created directory `../glibc-build' lfs@ebisu-virtual-machine:/mnt/lfs/sources/glibc-2.14.1$ cd ../glibc-build/ lfs@ebisu-virtual-machine:/mnt/lfs/sources/glibc-build$ |
1 2 3 4 5 6 |
$ case `uname -m` in > i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;; > esac $ cat configparms CFLAGS += -march=i486 -mtune=native $ |
コンフィグする。
1 2 3 4 5 |
$ ../glibc-2.14.1/configure --prefix=/tools \ > --host=$LFS_TGT --build=$(../glibc-2.14.1/scripts/config.guess) \ > --disable-profile --enable-add-ons \ > --enable-kernel=2.6.25 --with-headers=/tools/include \ > libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes |
メイクする。
1 2 3 4 5 6 7 8 9 |
$ make nptl/sysdeps/pthread/Subdirs sysdeps/unix/inet/Subdirs sysdeps/unix/Subdirs assert/Depend intl/Depend catgets/Depend stdlib/Depend stdio-common/Depend libio/Depend malloc/Depend string/Depend wcsmbs/Depend time/Depend posix/Depend iconvdata/Depend nss/Depend localedata/Depend rt/Depend debug/Depend > /mnt/lfs/sources/glibc-build/sysd-sorted-tmp mawk: scripts/gen-sorted.awk: line 19: regular expression compile failed (bad class -- [], [^] or [) /[^ mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ] mawk: scripts/gen-sorted.awk: line 19: runaway regular expression /, "", subd ... make[1]: *** No rule to make target `/mnt/lfs/sources/glibc-build/Versions.all', needed by `/mnt/lfs/sources/glibc-build/abi-versions.h'. Stop. make[1]: Leaving directory `/mnt/lfs/sources/glibc-2.14.1' make: *** [all] Error 2 |
エラーが出た、gwakをインストールして再トライ(コンフィグから)
1 2 3 4 5 6 7 |
$ which awk /usr/bin/awk $ file /usr/bin/awk /usr/bin/awk: symbolic link to `/etc/alternatives/awk' $ file /etc/alternatives/awk /etc/alternatives/awk: symbolic link to `/usr/bin/gawk' $ |
1 2 3 4 5 6 |
$ ../glibc-2.14.1/configure --prefix=/tools \ > --host=$LFS_TGT --build=$(../glibc-2.14.1/scripts/config.guess) \ > --disable-profile --enable-add-ons \ > --enable-kernel=2.6.25 --with-headers=/tools/include \ > libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes $ make |
インストールする。
1 |
$ make install |
長いのでとりあえずここまで。また続く。