トップ > 最小システムの構築 > 新システムの作成(前半) >
基本ファイルシステムの作成

  

基本ファイルシステムの作成

新システム作成の最初の作業は、基本ファイルシステムの作成です。 最低限必要とされるディレクトリやファイルを作成します

ビルド・インストール前リストの生成

最初に、ビルド・インストール前リストを生成します。


/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ファイルの作成

/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ファイルの作成

/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ファイルのシンボリックリンクの作成

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ファイルを作成したためです。

  
  

まとめ

最低限必要とされるディレクトリやファイルを作成しました。

メニュー