現在位置: ホーム / みらくるブログ / Linux From Scratch で自作ディストリビューションづくり-3

Linux From Scratch で自作ディストリビューションづくり-3

さて前回は、私の書いたスクリプトに従って自作ディストリビューションをつくっていく、という説明でしたね。 どんな名前をつけるかは自由ですから、好きな名前を考えておいてくださいね。 では、さっそく VirtualBox上に自作OSを構築していこうと思っています。 その前に、環境作りをしなければいけません。私の書いたスクリプトにはそこが抜けているので、ここは指南書を参照します。

第3日目ですね。

ニックネーム たいちょう です。今年も頑張っていきましょう。

さて前回は、私の書いたスクリプトに従って自作ディストリビューションをつくっていく、という説明でしたね。

どんな名前をつけるかは自由ですから、好きな名前を考えておいてくださいね。

では、さっそく VirtualBox上に自作OSを構築していこうと思っています。

その前に、環境作りをしなければいけません。私の書いたスクリプトにはそこが抜けているので、ここは指南書を参照します。

Fedora23の livecd をダウンロードしました。
VirtualBox で新規作成したハードディスクにインストールをして、とりあえず以下のコマンドを実行しておきました。

# dnf update

さて、これで環境はできたのだろうか。

指南書ではLFSを進めるにあたり、ホスト環境として以下のパッケージが必要と言われています。

Bash-3.2 (/bin/sh should be a symbolic or hard link to bash)
Binutils-2.17 (Versions greater than 2.25.1 are not recommended as they have not been tested)
Bison-2.3 (/usr/bin/yacc should be a link to bison or small script that executes bison)
Bzip2-1.0.4
Coreutils-6.9
Diffutils-2.8.1
Findutils-4.2.31
Gawk-4.0.1 (/usr/bin/awk should be a link to gawk)
GCC-4.1.2 including the C++ compiler, g++ (Versions greater than 5.2.0 are not recommended as they have not been tested)
Glibc-2.11 (Versions greater than 2.22 are not recommended as they have not been tested)
Grep-2.5.1a
Gzip-1.3.12
Linux Kernel-2.6.32
M4-1.4.10
Make-3.81
Patch-2.5.4
Perl-5.8.8
Sed-4.1.5
Tar-1.18
Texinfo-4.7
Xz-5.0.0

これらを、一つ一つ確かめて行くのは大変ですね。
ということで、指南書には確認するためのスクリプトが張ってあります。
これをコピペすればファイルが作成されるようになっているのです。
ちょっと見てみると一番上の行に、

cat > version-check.sh << "EOF"

と書かれています。最後の行にEOFがあるので、そこまでをversion-check.sh
に書き出すようです。
複数の行をファイルにしたい場合は便利な書き方です。コピペもできますし。

export LC_ALL=C

は、このスクリプトの動作環境を英語にしているみたいですね。これやらないと
不都合があるらしいです。おまじないとして覚えておくといいかもです。

bash --version | head -n1 | cut -d" " -f2-4

必要なプログラムのバージョンを表示しています。他も同様です。
リンクの場合は、指し示しているところを辿っています。

if [ -h /usr/bin/yacc ]; then
     echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
     echo yacc is `/usr/bin/yacc --version | head -n1`
else
     echo "yacc not found"
fi

シェルスクリプトの if の構造は、次のようでしたね。

if 条件式1;then

処理1

elif 条件式2;then

処理2

else

処理3

fi

if [  条件 ];then の [ 条件 ] は、test 条件 と同じです。

[ -h <file> ] は[ -L <file>] と同じで、<file> がシンボリックリンクであれば真になります。

[ -x <file> ] は、<file> が実行可能であれば真になります。

次は、何をしているのでしょうか。

echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
then echo "g++ compilation OK";
else echo "g++ compilation failed"; fi
rm -f dummy.c dummy

コンパイルができるかどうかを確かめています。
この書き方もこの先、何回か出てきます。
EOF が続き、これでファイルができました。

このファイルを作成したのちに、以下のコマンドで実行しています。
実行権限をつけなくても大丈夫なんです。

bash version-check.sh

Fedora23 の livecd をハードディスクにインストールして dnf update をかけた直後でこのスクリプトを実行した結果です。

# bash version-check.sh

bash, version 4.3.42(1)-release
/bin/sh -> /usr/bin/bash
Binutils: version-check.sh: line 6: ld: command not found
version-check.sh: line 7: bison: command not found
yacc not found
bzip2,  Version 1.0.6, 6-Sept-2010.
Coreutils:  8.24
diff (GNU diffutils) 3.3
find (GNU findutils) 4.5.16
GNU Awk 4.1.3, API: 1.1
/usr/bin/awk -> /usr/bin/gawk
version-check.sh: line 31: gcc: command not found
version-check.sh: line 32: g++: command not found
(GNU libc) 2.22
grep (GNU grep) 2.22
gzip 1.6
Linux version 4.2.8-300.fc23.x86_64 (mockbuild@bkernel01.phx2.fedoraproject.org) (gcc version 5.3.1 20151207 (Red Hat 5.3.1-2) (GCC) ) #1 SMP Tue Dec 15 16:49:06 UTC 2015
version-check.sh: line 37: m4: command not found
GNU Make 4.0
version-check.sh: line 39: patch: command not found
Perl version='5.22.1';
sed (GNU sed) 4.2.2
tar (GNU tar) 1.28
version-check.sh: line 43: makeinfo: command not found
xz (XZ Utils) 5.2.1
version-check.sh: line 46: g++: command not found
g++ compilation failed

なんだか、色々足りないみたいだなぁ。
どうすればいいかしら?
今日はこれくらいにしておきましょう。

家に帰っておいしい刺身を食べようかな。

家まで 車で10分、東京の生活とくらべたら贅沢な夜を過ごしている、ニックネーム たいちょう でした。

次回もお楽しみに。

 

タグ: