ここまでの作業で、最低限必要なソフトウェア群のビルド・インストールが終わりました。 ただし、現時点では、Linuxシステムとして機能するまでには完成していません。
なぜなら、
が、不足しているからです。
ここでは、不足している上記対応を行います。
まず、システム設定ファイルを作成します。
最初に、ビルド・インストール前リストを生成します。
/sources/genprevlist.sh > /dev/null 2>&1
/etc/sysconfigディレクトリを作成します。 システム設定ファイルを置くディレクトリです。
mkdir -vp /etc/sysconfig
/etc/sysconfig/rcファイルを作成します。 後ほど作成するシステム起動ファイルによって参照される設定ファイルです。
cat > /etc/sysconfig/rc << "EOF" export RCBASE=/etc/rc.d export RCFUNCTIONS=${RCBASE}/init.d/functions EOF
環境変数 RCBASE に、システム起動ファイルを置くトップディレクトリを設定しています。 環境変数 RCFUNCTIONS に、システム起動ファイルが呼び出すシェル関数が記述されたファイルのパスを設定しています。
/etc/sysconfig/clockファイルを作成します。 システムクロックおよびハードウェアクロックに関する設定ファイルです。
cat > /etc/sysconfig/clock << "EOF" UTC=0 CLOCKPARAMS= EOF
ハードウェアクロックをローカル時間にセットしています。
/etc/sysconfig/consoleファイルを作成します。 コンソールの設定ファイルです。 なお、X Window System上の仮想端末等には影響はしません。
cat > /etc/sysconfig/console << "EOF" KEYMAP="jp106" EOF
/etc/fstabファイルを作成します。 mount コマンドなどから参照される、ファイルシステム情報を記述するファイルです。
cat > /etc/fstab << "EOF" /dev/<@デバイス名@> / ext4 defaults 1 1 /dev/<@デバイス名@> swap swap defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 EOF
/etc/inputrcファイルを作成します。 この設定ファイルは、Readlineライブラリを使ったコマンドライン入力機能によって参照されます。
cat > /etc/inputrc << "EOF" set meta-flag on set input-meta on set output-meta on set convert-meta off set bell-style none "\e[1~": beginning-of-line "\e[4~": end-of-line "\e[5~": beginning-of-history "\e[6~": end-of-history "\e[3~": delete-char "\e[2~": quoted-insert "\e[5C": forward-word "\e[5D": backward-word "\e[1;5C": forward-word "\e[1;5D": backward-word # for xterm "\eOH": beginning-of-line "\eOF": end-of-line # for freebsd console "\e[H": beginning-of-line "\e[F": end-of-line EOF
最後に、インストールリストを生成します。
/sources/genpostlist.sh > /dev/null 2>&1 /sources/gendifflist.sh systemconfigfiles
続いて、システム起動ファイルを作成します。
本ウェブサイトの記事では、システムの起動・終了処理を行うためのソフトウェアとして、Sysvinit を導入しました。 ここでは、Sysvinit のルールに従ってシステムの起動ファイルを作成します。
最初に、ビルド・インストール前リストを生成します。
/sources/genprevlist.sh > /dev/null 2>&1
ディレクトリを作成します。 システム起動ファイルを配置するディレクトリです。
mkdir -vp /etc/rc.d mkdir -vp /etc/rc.d/init.d mkdir -vp /etc/rc.d/rc0.d mkdir -vp /etc/rc.d/rc1.d mkdir -vp /etc/rc.d/rc2.d mkdir -vp /etc/rc.d/rc3.d mkdir -vp /etc/rc.d/rc4.d mkdir -vp /etc/rc.d/rc5.d mkdir -vp /etc/rc.d/rc6.d ln -vsf rc.d/init.d/ /etc/ ln -vsf rc.d/rc0.d/ /etc/ ln -vsf rc.d/rc1.d/ /etc/ ln -vsf rc.d/rc2.d/ /etc/ ln -vsf rc.d/rc3.d/ /etc/ ln -vsf rc.d/rc4.d/ /etc/ ln -vsf rc.d/rc5.d/ /etc/ ln -vsf rc.d/rc6.d/ /etc/
/etc/rc.d/xxxx を /etc/xxxx としてもアクセスできるように、シンボリックリンクも作成しています。
/etc/inittabファイルを作成します。 デフォルトのランレベルの指定、システム共通初期化スクリプト、各ランレベル別初期化スクリプト、ランレベル共通初期化スクリプトの呼び出しなどを記述します。
cat > /etc/inittab << "EOF" id:3:initdefault: si::sysinit:/etc/rc.d/rc.sysinit r0:0:wait:/etc/rc.d/rc 0 r1:1:wait:/etc/rc.d/rc 1 r2:2:wait:/etc/rc.d/rc 2 r3:3:wait:/etc/rc.d/rc 3 r4:4:wait:/etc/rc.d/rc 4 r5:5:wait:/etc/rc.d/rc 5 r6:6:wait:/etc/rc.d/rc 6 lc:2345:once:/etc/rc.d/rc.local c1:2345:respawn:/sbin/agetty tty1 9600 c2:2345:respawn:/sbin/agetty tty2 9600 c3:2345:respawn:/sbin/agetty tty3 9600 c4:2345:respawn:/sbin/agetty tty4 9600 c5:2345:respawn:/sbin/agetty tty5 9600 c6:2345:respawn:/sbin/agetty tty6 9600 ca::ctrlaltdel:/sbin/shutdown -t3 -r now EOF
/etc/rc.d/init.d/functionsファイルを作成します。 システム起動ファイルが参照するファイルで、中身はシェル関数の集まりです。
cat > /etc/rc.d/init.d/functions << "EOF" export PATH="/bin:/usr/bin:/sbin:/usr/sbin" EOF
なお、現在は環境変数 PATH を設定しているだけで関数は含んでいません。 将来的にシステム起動ファイルの共通処理が必要になった場合に、このファイルに関数を定義してください。
/etc/rc.d/rc.systemファイルを作成します。 このファイルは、システム起動時に最初に呼び出される初期化スクリプトです。
cat > /etc/rc.d/rc.sysinit << "EOF" . /etc/sysconfig/rc . ${RCFUNCTIONS} echo "mounting /proc" mount -n /proc echo "mounting /sys" mount -n /sys echo "remounting root filesystem" mount -n -o remount / echo "mounting filesystems" mount -a #echo "enable swap" #swapon -a touch /var/run/utmp chgrp -v utmp /var/run/utmp chmod -v 0664 /var/run/utmp sleep 1 EOF chmod 0755 /etc/rc.d/rc.sysinit ln -vsf rc.d/rc.sysinit /etc/
/etc/rc.d/rcファイルを作成します。 このファイルは、システム共通初期化スクリプト(/etc/rc.d/rc.system)の後に呼び出される初期化スクリプトです。
cat > /etc/rc.d/rc << "EOF" . /etc/sysconfig/rc . ${RCFUNCTIONS} previous=${PREVLEVEL} runlevel=${1} if [ "${previous}" = "" ] ; then previous="N" fi echo "previous = [${previous}]" echo "runlevel = [${runlevel}]" if [ "${previous}" != "N" ] ; then for script in /etc/rc${runlevel}.d/K* ; do if [ -f "${script}" ] ; then ${script} stop > /dev/null 2>&1 fi done fi for script in /etc/rc${runlevel}.d/S* ; do if [ -f "${script}" ] ; then ${script} start > /dev/null 2>&1 fi done EOF chmod 0755 /etc/rc.d/rc ln -vsf rc.d/rc /etc/
/etc/rc.d/rc.localファイルを作成します。 このファイルは、各ランレベル別初期化スクリプト(/etc/rc.d/rc)の後に呼び出される初期化スクリプトです。
cat > /etc/rc.d/rc.local << "EOF" . /etc/sysconfig/rc . ${RCFUNCTIONS} EOF chmod 0755 /etc/rc.d/rc.local ln -vsf rc.d/rc.local /etc/
/etc/rc.d/init.d/haltファイルを作成します。 このファイルは、システムを停止するスクリプトです。
cat > /etc/rc.d/init.d/halt << "EOF" # chkconfig: 0 99 99 # description: Execute The Halt Command. . /etc/sysconfig/rc . ${RCFUNCTIONS} case "${1}" in start) halt -d -f -i -p ;; *) exit 1 ;; esac EOF chmod 0755 /etc/rc.d/init.d/halt ln -vsf ../init.d/halt /etc/rc.d/rc0.d/S99halt ln -vsf ../init.d/halt /etc/rc.d/rc1.d/K99halt ln -vsf ../init.d/halt /etc/rc.d/rc2.d/K99halt ln -vsf ../init.d/halt /etc/rc.d/rc3.d/K99halt ln -vsf ../init.d/halt /etc/rc.d/rc4.d/K99halt ln -vsf ../init.d/halt /etc/rc.d/rc5.d/K99halt ln -vsf ../init.d/halt /etc/rc.d/rc6.d/K99halt
/etc/rc.d/init.d/rebootファイルを作成します。 このファイルは、システムを再起動するスクリプトです。
cat > /etc/rc.d/init.d/reboot << "EOF" # chkconfig: 6 99 99 # description: Execute The Reboot Command. . /etc/sysconfig/rc . ${RCFUNCTIONS} case "${1}" in start) reboot -d -f -i ;; *) exit 1 ;; esac EOF chmod 0755 /etc/rc.d/init.d/reboot ln -vsf ../init.d/reboot /etc/rc.d/rc0.d/K99reboot ln -vsf ../init.d/reboot /etc/rc.d/rc1.d/K99reboot ln -vsf ../init.d/reboot /etc/rc.d/rc2.d/K99reboot ln -vsf ../init.d/reboot /etc/rc.d/rc3.d/K99reboot ln -vsf ../init.d/reboot /etc/rc.d/rc4.d/K99reboot ln -vsf ../init.d/reboot /etc/rc.d/rc5.d/K99reboot ln -vsf ../init.d/reboot /etc/rc.d/rc6.d/S99reboot
/etc/rc.d/init.d/sysklogdファイルを作成します。 このファイルは、システムログデーモンとカーネルメッセージデーモンを起動 / 停止するスクリプトです。
cat > /etc/rc.d/init.d/sysklogd << "EOF" # chkconfig: 2345 10 90 # description: Start/Stop System And Kernel Logger. . /etc/sysconfig/rc . ${RCFUNCTIONS} case "${1}" in start) /sbin/syslogd -m 0 /sbin/klogd -c 1 ;; stop) killall -s KILL syslogd killall -s KILL klogd ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac EOF chmod 0755 /etc/rc.d/init.d/sysklogd ln -vsf ../init.d/sysklogd /etc/rc.d/rc0.d/K90sysklogd ln -vsf ../init.d/sysklogd /etc/rc.d/rc1.d/K90sysklogd ln -vsf ../init.d/sysklogd /etc/rc.d/rc2.d/S10sysklogd ln -vsf ../init.d/sysklogd /etc/rc.d/rc3.d/S10sysklogd ln -vsf ../init.d/sysklogd /etc/rc.d/rc4.d/S10sysklogd ln -vsf ../init.d/sysklogd /etc/rc.d/rc4.d/S10sysklogd ln -vsf ../init.d/sysklogd /etc/rc.d/rc6.d/K90sysklogd
/etc/rc.d/init.d/udevファイルを作成します。 このファイルは、デバイスを管理するデーモンを起動 / 停止するスクリプトです。
cat > /etc/rc.d/init.d/udev << "EOF" # chkconfig: 12345 20 80 # description: Save And Restore Random Seed Between Restarts. . /etc/sysconfig/rc . ${RCFUNCTIONS} case "${1}" in start) /sbin/udevd --daemon /sbin/udevadm trigger --action=add --type=subsystems /sbin/udevadm trigger --action=add --type=devices /sbin/udevadm trigger --action=change --type=devices sleep 1 ;; stop) ;; *) echo "Usage: $0 {start}" exit 1 ;; esac EOF chmod 0755 /etc/rc.d/init.d/udev ln -vsf ../init.d/udev /etc/rc.d/rc0.d/K80udev ln -vsf ../init.d/udev /etc/rc.d/rc1.d/S20udev ln -vsf ../init.d/udev /etc/rc.d/rc2.d/S20udev ln -vsf ../init.d/udev /etc/rc.d/rc3.d/S20udev ln -vsf ../init.d/udev /etc/rc.d/rc4.d/S20udev ln -vsf ../init.d/udev /etc/rc.d/rc5.d/S20udev ln -vsf ../init.d/udev /etc/rc.d/rc6.d/K80udev
/etc/rc.d/init.d/randomファイルを作成します。 このファイルは、乱数生成に関連するデバイスファイルを初期化するスクリプトです。
cat > /etc/rc.d/init.d/random << "EOF" # chkconfig: 12345 20 80 # description: Save And Restore Random Seed Between Restarts. . /etc/sysconfig/rc . ${RCFUNCTIONS} case "${1}" in start) if [ -f /var/tmp/randomseed ] ; then cat /var/tmp/randomseed > /dev/urandom fi dd if=/dev/urandom of=/var/tmp/randomseed count=1 > /dev/null 2>&1 ;; stop) dd if=/dev/urandom of=/var/tmp/randomseed count=1 > /dev/null 2>&1 ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac EOF chmod 0755 /etc/rc.d/init.d/random ln -vsf ../init.d/random /etc/rc.d/rc0.d/K80random ln -vsf ../init.d/random /etc/rc.d/rc1.d/S20random ln -vsf ../init.d/random /etc/rc.d/rc2.d/S20random ln -vsf ../init.d/random /etc/rc.d/rc3.d/S20random ln -vsf ../init.d/random /etc/rc.d/rc4.d/S20random ln -vsf ../init.d/random /etc/rc.d/rc5.d/S20random ln -vsf ../init.d/random /etc/rc.d/rc6.d/K80random
最後に、インストールリストを生成します。
/sources/genpostlist.sh > /dev/null 2>&1 /sources/gendifflist.sh systembootfiles
続いて、シェル設定ファイルを作成します。 シェルが起動された時に読み込まれます。
最初に、ビルド・インストール前リストを生成します。
/sources/genprevlist.sh > /dev/null 2>&1
/etc/profileファイルを作成します。 ログインシェルが Bash の場合にログイン時に読み込まれます。
cat > /etc/profile << "EOF" export PATH=/bin:/usr/bin if [ $EUID -eq 0 ] ; then export PATH=$PATH:/sbin:/usr/sbin fi if [ -d /etc/profile.d ] ; then for script in /etc/profile.d/*.sh ; do if [ -x $script ] ; then . $script fi done fi if [ "@""$SKIPPS1" = "@" ] ; then PS1='[\u@\h \w]\$ ' fi EOF
/etc/profile.dディレクトリを作成します。 このディレクトリに置いたスクリプトは、/etc/profile によって探し出され、実行されます。
mkdir -vp /etc/profile.d
/etc/profile.d/readline.shファイルを作成します。 Readlineライブラリのコマンドライン入力時に/etc/inputrcファイルが参照されるようにするスクリプトです。
cat > /etc/profile.d/readline.sh << "EOF" if [ "@""$INPUTRC" = "@" ] ; then export INPUTRC=/etc/inputrc fi if [ -f "$HOME/.inputrc" ] ; then export INPUTRC=$HOME/.inputrc fi EOF chmod 0755 /etc/profile.d/readline.sh
/etc/profile.d/i18n.shファイルを作成します。 環境変数 LANG を日本語UTF-8に設定するスクリプトです。
cat > /etc/profile.d/i18n.sh << "EOF" export LANG="ja_JP.UTF-8" EOF chmod 0755 /etc/profile.d/i18n.sh
/etc/bashrcファイルを作成します。 Bash の起動時に読み込まれます。
cat > /etc/bashrc << "EOF" alias ll='ls -l' EOF
/etc/skel/.bash_profileファイルを作成します。 このファイルは、ユーザを追加した際にユーザのホームディレクトリに .bash_profile という名称でコピーされ、ログインシェルが Bash の場合にログイン時に読み込まれます。
cat > /etc/skel/.bash_profile << "EOF" if [ -f "$HOME/.bashrc" ] ; then . $HOME/.bashrc fi EOF
/etc/skel/.bashrcファイルを作成します。 このファイルは、ユーザを追加した際にユーザのホームディレクトリに .bashrc という名称でコピーされ、Bash の起動時に読み込まれます。
cat > /etc/skel/.bashrc << "EOF" if [ -f "$HOME/.bash_aliases" ] ; then . $HOME/.bash_aliases fi EOF
/etc/skel/.bash_logoutファイルを作成します。 このファイルは、ユーザを追加した際にユーザのホームディレクトリに .bash_logout という名称でコピーされ、ログインシェルが Bash の場合にログアウト時に読み込まれます。
cat > /etc/skel/.bash_logout << "EOF" EOF
/etc/shellsファイルを作成します。 ログインシェルとして利用できるシェルのパスを記述します。
cat > /etc/shells << "EOF" /bin/sh /bin/bash EOF
最後に、インストールリストを生成します。
/sources/genpostlist.sh > /dev/null 2>&1 /sources/gendifflist.sh shellrcfiles
rootのホームディレクトリである /root には、まだ何の設定ファイルもありません。 ここで設定ファイルを用意しておきます。
最初に、ビルド・インストール前リストを生成します。
/sources/genprevlist.sh > /dev/null 2>&1
雛形をコピーします。 /etc/skelの下に作成したシェル設定ファイル、およびVimの設定ファイルをコピーします。
cp -va /etc/skel/.bash_profile /root/.bash_profile cp -va /etc/skel/.bashrc /root/.bashrc cp -va /etc/skel/.bash_logout /root/.bash_logout cp -va /etc/skel/.exrc /root/.exrc
最後に、インストールリストを生成します。
/sources/genpostlist.sh > /dev/null 2>&1 /sources/gendifflist.sh rootrcfiles
最後にネットワークへの対応を行います。 システム設定ファイルおよびシステム起動ファイルの修正や追加を行います。
最初に、ビルド・インストール前リストを生成します。
/sources/genprevlist.sh > /dev/null 2>&1
/etc/sysconfig/rcファイルに追記します。 ネットワークデバイスの設定ファイルを置く場所を、環境変数 NETWORKDEVICES に設定します。
cat >> /etc/sysconfig/rc << "EOF" export NETWORKDEVICES=/etc/sysconfig/networkdevices EOF
/etc/sysconfig/networkファイルを作成します。 ネットワークに関する設定を記述するファイルです。
cat > /etc/sysconfig/network << "EOF" HOSTNAME=<@ホスト名@> EOF
ホスト名を設定しています。
/etc/rc.d/init.d/networkファイルを作成します。 このファイルは、ネットワークを起動 / 停止するスクリプトです。
cat > /etc/rc.d/init.d/network << "EOF" # chkconfig: 345 30 70 # description: Start/Stop Network Interfaces. . /etc/sysconfig/rc . ${RCFUNCTIONS} case "${1}" in start) for script in ${NETWORKDEVICES}/ifconfig.* ; do if [ -f "${script}" ] ; then device=${script##*/ifconfig.} . ${script} if [ ${BOOTPROTO} = "static" ] ; then if [ ${ONBOOT} = "yes" ] ; then ip link set ${device} up if [ ${device} != "lo" ] ; then ip addr add ${ADDRESS}/${CIDRMASK} broadcast ${BROADCAST} dev ${device} fi fi fi if [ ${BOOTPROTO} = "dhcp" ] ; then if [ ${ONBOOT} = "yes" ] ; then dhcpcd -t 10 ${device} & fi fi fi done if [ -f /etc/sysconfig/network ] ; then . /etc/sysconfig/network hostname ${HOSTNAME} ip route add default via ${GATEWAY} fi ;; stop) for script in ${NETWORKDEVICES}/ifconfig.* ; do if [ -f "${script}" ] ; then device=${script##*/ifconfig.} . ${script} if [ ${BOOTPROTO} = "static" ] ; then ip link set ${device} down if [ ${device} != "lo" ] ; then ip addr del ${ADDRESS}/${CIDRMASK} broadcast ${BROADCAST} dev ${device} fi fi if [ ${BOOTPROTO} = "dhcp" ] ; then dhcpcd -k ${device} & fi fi done ;; *) exit 1 ;; esac EOF chmod 0755 /etc/rc.d/init.d/network ln -vsf ../init.d/network /etc/rc.d/rc0.d/K70network ln -vsf ../init.d/network /etc/rc.d/rc1.d/K70network ln -vsf ../init.d/network /etc/rc.d/rc2.d/K70network ln -vsf ../init.d/network /etc/rc.d/rc3.d/S30network ln -vsf ../init.d/network /etc/rc.d/rc4.d/S30network ln -vsf ../init.d/network /etc/rc.d/rc5.d/S30network ln -vsf ../init.d/network /etc/rc.d/rc6.d/K70network
/etc/sysconfig/networkdevicesディレクトリを作成します。 ネットワークデバイスの設定ファイルを置くディレクトリです。
mkdir -vp /etc/sysconfig/networkdevices
/etc/sysconfig/networkdevices/ifconfig.eth0ファイルを作成します。 ネットワークデバイス用のインタフェースの設定を記述します。
cat > /etc/sysconfig/networkdevices/ifconfig.eth0 << "EOF" ONBOOT=yes BOOTPROTO=dhcp EOF
/etc/sysconfig/networkdevices/ifconfig.loファイルを作成します。 ローカルループバック用のインタフェースの設定を記述します。
cat > /etc/sysconfig/networkdevices/ifconfig.lo << "EOF" ONBOOT=yes BOOTPROTO=static ADDRESS=127.0.0.1 CIDRMASK=255.0.0.0 EOF
最後に、インストールリストを生成します。
/sources/genpostlist.sh > /dev/null 2>&1 /sources/gendifflist.sh networkconfigfiles
チェンジルートを終了し、不要ファイルを削除します。
続いて、不要ファイルを削除します。
cd $MYLINUX/tmp rm -fr * .[a-zA-Z0-9]* cd $MYLINUX/var/log mv btmp $MYLINUX/tmp/ mv wtmp $MYLINUX/tmp/ mv lastlog $MYLINUX/tmp/ rm -fr * .[a-zA-Z0-9]* mv $MYLINUX/tmp/btmp . mv $MYLINUX/tmp/wtmp . mv $MYLINUX/tmp/lastlog .
1CD Linux用のパーティションをバックアップしておきます。
cd $MYLINUX tar cvfj ./backups/mylinux.backup-08.tar.bz2 . --exclude=backups --exclude=sources --exclude=lost+found
各種設定ファイル作成後のバックアップです。