新システム作成の最初の作業は、基本ファイルシステムの作成です。 最低限必要とされるディレクトリやファイルを作成します。
最初に、ビルド・インストール前リストを生成します。
/sources/genprevlist.sh > /dev/null 2>&1
最低限必要となるディレクトリを作成します。
mkdir -vp /bin mkdir -vp /boot mkdir -vp /etc mkdir -vp /etc/opt mkdir -vp /etc/skel mkdir -vp /home mkdir -vp /lib mkdir -vp /lib/firmware mkdir -vp /media mkdir -vp /media/floppy mkdir -vp /media/cdrom mkdir -vp /mnt mkdir -vp /opt mkdir -vp /root mkdir -vp /sbin mkdir -vp /srv mkdir -vp /tmp mkdir -vp /usr mkdir -vp /usr/bin mkdir -vp /usr/include mkdir -vp /usr/lib mkdir -vp /usr/local/bin mkdir -vp /usr/local/include mkdir -vp /usr/local/lib mkdir -vp /usr/local/sbin mkdir -vp /usr/local/share/doc mkdir -vp /usr/local/share/info mkdir -vp /usr/local/share/locale mkdir -vp /usr/local/share/dict mkdir -vp /usr/local/share/color mkdir -vp /usr/local/share/man mkdir -vp /usr/local/share/man/man1 mkdir -vp /usr/local/share/man/man2 mkdir -vp /usr/local/share/man/man3 mkdir -vp /usr/local/share/man/man4 mkdir -vp /usr/local/share/man/man5 mkdir -vp /usr/local/share/man/man6 mkdir -vp /usr/local/share/man/man7 mkdir -vp /usr/local/share/man/man8 mkdir -vp /usr/local/share/misc mkdir -vp /usr/local/share/terminfo mkdir -vp /usr/local/share/zoneinfo mkdir -vp /usr/local/src mkdir -vp /usr/sbin mkdir -vp /usr/src mkdir -vp /usr/share/doc mkdir -vp /usr/share/info mkdir -vp /usr/share/locale mkdir -vp /usr/share/dict mkdir -vp /usr/share/color mkdir -vp /usr/share/man mkdir -vp /usr/share/man/man1 mkdir -vp /usr/share/man/man2 mkdir -vp /usr/share/man/man3 mkdir -vp /usr/share/man/man4 mkdir -vp /usr/share/man/man5 mkdir -vp /usr/share/man/man6 mkdir -vp /usr/share/man/man7 mkdir -vp /usr/share/man/man8 mkdir -vp /usr/share/misc mkdir -vp /usr/share/terminfo mkdir -vp /usr/share/zoneinfo mkdir -vp /usr/libexec mkdir -vp /var mkdir -vp /var/cache mkdir -vp /var/lib mkdir -vp /var/lib/locate mkdir -vp /var/lib/misc mkdir -vp /var/lib/color mkdir -vp /var/local mkdir -vp /var/log mkdir -vp /var/mail mkdir -vp /var/opt mkdir -vp /var/spool mkdir -vp /var/tmp
パーミッションを変更します。
chmod 0750 /root chmod 1777 /tmp chmod 1777 /var/tmp
/rootについては、一般ユーザからの閲覧を防ぐためのパーミッション変更です。 /tmpと/var/tmpについては、誰でもファイルを作成できるが、所有者以外は削除できないようにするためのパーミッション変更です。
互換性のためのシンボリックリンクを作成します。
ln -vsf /run /var/run ln -vsf /run/lock /var/lock
上記は単なる互換性維持のためです。
/etc/passwdファイルを作成します。
cat > /etc/passwd << "EOF" root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/dev/null:/bin/false nobody:x:99:99:Unprivileged User:/dev/null:/bin/false EOF
最低限必要とされるユーザアカウントの情報を作成しています。
/etc/groupファイルを作成します。
cat > /etc/group << "EOF" root:x:0: bin:x:1: sys:x:2: kmem:x:3: tty:x:4: tape:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: usb:x:14: cdrom:x:15: mail:x:34: nogroup:x:99: EOF
最低限必要とされるグループの情報を作成しています。
ログイン履歴ファイルを作成します。
touch /var/log/btmp touch /var/log/lastlog touch /var/log/wtmp chgrp -v utmp /var/log/lastlog chmod -v 0664 /var/log/lastlog chmod -v 0600 /var/log/btmp
上記のログイン履歴ファイルは、自動的には生成されません。 空のファイルを用意しておくことで、初めて追記されるようになります。
エラー回避のためのシンボリックリンクを作成します。
ln -vsf /tools/bin/bash /bin ln -vsf /tools/bin/cat /bin ln -vsf /tools/bin/echo /bin ln -vsf /tools/bin/pwd /bin ln -vsf /tools/bin/stty /bin ln -vsf /tools/bin/perl /usr/bin ln -vsf /tools/lib/libgcc_s.so /usr/lib ln -vsf /tools/lib/libgcc_s.so.1 /usr/lib ln -vsf /tools/lib/libstdc++.so /usr/lib ln -vsf /tools/lib/libstdc++.so.6 /usr/lib
これから行う新システムの構築で使われる実行ファイルの中には、他の実行ファイルを絶対パス(例:/bin/cat)で呼び出しているものがあります。 その呼び出しが正常に行われるよう、最終的な配置場所からのシンボリックリンクを作成しています。
mtabファイルのシンボリックリンクを作成します。
ln -vsf /proc/mounts /etc/mtab
Linux系OSでは、マウント中のファイルシステムの情報が/etc/mtabに記録されます。 ただし、チェンジルート中である今、/etc/mtabファイルは存在していません。
そこで、同じくマウント中のファイルシステムの情報を記録する/proc/mountsを参照するようシンボリックリンクを作成しています。
ハードコーディング対策のためのシンボリックリンクを作成します。
ln -vsf bash /bin/sh
これから行う新システムの構築で使われるシェルスクリプトの中には、シェルのパスを/bin/shとしてハードコーディングしているものもあります。 その参照が正常に行われるよう、bashへのシンボリックリンクを作成しています。
最後に、インストールリストを生成します。
/sources/genpostlist.sh > /dev/null 2>&1 /sources/gendifflist.sh basefiles
...(省略)... ---------------- 97 basefiles ----------------
実行結果の先頭に数字が表示されますが、数字は作成されたディレクトリやファイルなどの数を表しています。 上記の例では、97個のディレクトリやファイルが作成されたことがわかります。
ここで、一度チェンジルート環境から抜け、再度チェンジルートします。 理由は、シェルプロンプトの表示を "I have no name!" から "root" にするためです。
exit
Fedoraに戻りますので、再度チェンジルートします。
/root/chroot.sh
[root@localhost mylinux]# /root/chroot.sh mount: /dev bound on /mylinux/dev. mount: devpts mounted on /mylinux/dev/pts. mount: proc mounted on /mylinux/proc. mount: sysfs mounted on /mylinux/sys. mount: tmpfs mounted on /mylinux/run. MYLINUX@root:/#
シェルプロンプトに "root" と表示されるようになりました。 これは、/etc/passwdファイルや/etc/groupファイルを作成したためです。