レスキューディスクの作成(4) |
今まで作成してきた、レスキューディスクはモジュールをサポートしていなかったので、今回はカーネルモジュールをサポートするように修正します。
モジュールをサポートする事で、カーネルの機能を十分に活用出来るようになります。今回作成したレスキューディスクと、別の機能ディスクを作成し、そこに必要なモジュール等を入れておけば使用方法は格段に広がるはずです。
前回までの内容 | |
|
Loadable module support カーネルモジュールをサポートする為には必須項目です。 [*] Enable loadable module support [*] Kernel module loader 今回、試しに以下の項目をモジュールとして組み込むようにしました。 IDE, ATA and ATAPI Block devices <*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support <M> Include IDE/ATAPI CDROM support <-CDROM File systems <M> DOS FAT fs support <-DOSファイルシステムサポート <M> VFAT (Windows-95) fs support <-FAT32のサポート <M> ISO 9660 CDROM file system support <-ISO CDのサポート |
make dep <-- 依存関係の更新 make clean <-- 前回のオブジェクト削除 make bzImage <-- カーネルの作成 make modules <-- モジュールの作成 |
[root kernel]# fdformat /dev/fd0u1722 |
[root kernel]# ls -lh /usr/src/linux/arch/i386/boot/bzImage カーネルサイズの確認 -rw-r--r-- 1 root root 343k May 30 01:11 bzImage [root kernel]# mkfs -tminix /dev/fd0u1722 370 カーネルファイルシステムフォーマット [root kernel]# mount /dev/fd0u1722 /mnt/floppy |
[root kernel]# cd /mnt/floppy/ [root floppy]# rmdir lost+found [root floppy]# mkdir boot dev [root floppy]# cd dev [root dev]# mknod null c 1 3 [root dev]# mknod fd0 b 2 0 [root dev]# mknod fd0u1722 b 2 60 [root dev]# cd ../boot/ [root boot]# cp /boot/boot-text.b boot.b [root boot]# cd .. [root floppy]# vi bdlilo.conf <--内容については下記を参照。 [root floppy]# cp /usr/src/linux/arch/i386/boot/bzImage . |
boot=/dev/fd0u1722 install=/boot/boot.b map=/boot/map read-write backup=/dev/null prompt timeout=100 image=bzImage label=Bootdisk root=/dev/fd0u1722 |
[root floppy]# lilo -v -C bdlilo.conf -r /mnt/floppy |
[root floppy]# rdev -r /mnt/floppy/bzImage 16754 [root floppy]# rdev /mnt/floppy/bzImage /dev/fd0u1722 |
[root floppy]# cd .. [root /mnt]# umount /dev/fd0u1722 <-- FDのアンマウント [root /mnt]# dd if=rootfs.gz of=/dev/fd0u1722 bs=1k seek=370 <--370Kバイトseekした位置からの書き込み。 |
#!/bin/sh #-- RAMディスク準備 -- RAMディスクエリアフォーマット後、マウントします。。 dd if=/dev/zero of=/dev/ram bs=1k count=4096 mkfs -tminix /dev/ram 4096 mkdir -p /mnt/ramdisk mount -t minix /dev/ram /mnt/ramdisk RAMディスク上に必要となるディレクトリを作成します。 cd /mnt/ramdisk mkdir root dev proc etc sbin bin lib mnt usr tmp var chmod +t tmp スティッキービット付与 デバイススペシャルファイルを作成します。 #------ /dev ------ cd /mnt/ramdisk/dev mknod console c 5 1 mknod cua0 c 5 64 mknod cua1 c 5 65 mknod cua2 c 5 66 mknod cua3 c 5 67 mknod mem c 1 1 mknod kmem c 1 2 mknod null c 1 3 mknod zero c 1 5 mknod tty c 5 0 mknod tty0 c 4 0 mknod tty1 c 4 1 mknod tty2 c 4 2 mknod tty3 c 4 3 mknod tty4 c 4 4 mknod ttyS1 c 4 65 mknod fd0 b 2 0 mknod fd0H1440 b 2 28 mknod fd0h1440 b 2 40 mknod fd0u1722 b 2 60 mknod ram b 1 1 mknod ram0 b 1 0 mknod ram1 b 1 1 ln -s ram0 ramdisk mknod hda b 3 0 mknod hda1 b 3 1 mknod hda2 b 3 2 mknod hda3 b 3 3 mknod hda4 b 3 4 mknod hda5 b 3 5 mknod hda6 b 3 6 mknod hda7 b 3 7 mknod hda8 b 3 8 mknod hda9 b 3 9 mknod hda10 b 3 10 mknod hdb b 3 64 mknod hdb1 b 3 65 mknod hdb2 b 3 66 mknod hdb3 b 3 67 mknod hdb4 b 3 68 mknod hdb5 b 3 69 mknod hdb6 b 3 70 mknod hdb7 b 3 71 mknod hdb8 b 3 72 mknod hdb9 b 3 73 mknod hdb10 b 3 74 mknod hdc b 22 0 ln -s hdc cdrom システムにて必至なファイルを配置します。 # ------ /etc ------ cd /mnt/ramdisk/etc/ mkdir pam.d touch ld.so.cache echo /lib > /mnt/ramdisk/etc/ld.so.conf echo /lib/security >> /mnt/ramdisk/etc/ld.so.conf #--issueファイルを作成します。-- echo Ryocho Linux > /mnt/ramdisk/etc/issue echo "VC: \\l" >> /mnt/ramdisk/etc/issue #--motdファイルを作成します。-- echo Welcome to Ryocho Linux. > /mnt/ramdisk/etc/motd #--rcファイルを作成します。-- echo '#!/bin/sh' > /mnt/ramdisk/etc/rc echo /bin/mount -av >> /mnt/ramdisk/etc/rc echo /bin/loadkeys /etc/jp106.kmap >> /mnt/ramdisk/etc/rc echo /bin/hostname ryouto.jp >> /mnt/ramdisk/etc/rc chmod +x /mnt/ramdisk/etc/rc #--fstabファイルを作成します。-- echo /dev/ram0 / ext2 defaults 1 1 > /mnt/ramdisk/etc/fstab echo /proc /proc proc defaults 1 1 >> /mnt/ramdisk/etc/fstab #--inittabファイルを作成します。-- echo id:2:initdefault: > /mnt/ramdisk/etc/inittab echo si::sysinit:/etc/rc >> /mnt/ramdisk/etc/inittab echo 1:2345:respawn:/sbin/mingetty tty1 >> /mnt/ramdisk/etc/inittab echo 2:2345:respawn:/sbin/mingetty tty2 >> /mnt/ramdisk/etc/inittab echo l0:0:wait:/etc/rc.halt 0 >> /mnt/ramdisk/etc/inittab echo l6:6:wait:/etc/rc.halt 6 >> /mnt/ramdisk/etc/inittab #--rc.haltファイルを作成します。-- echo '#!/bin/sh' > /mnt/ramdisk/etc/rc.halt echo "echo \"Sending all processes the TERM signal...\"" >> /mnt/ramdisk/etc/rc.halt echo "killall5 -15" >> /mnt/ramdisk/etc/rc.halt echo "sleep 2" >> /mnt/ramdisk/etc/rc.halt echo "echo \"Sending all processes the TERM signal...\"" >> /mnt/ramdisk/etc/rc.halt echo "killall5 -9" >> /mnt/ramdisk/etc/rc.halt echo "sleep 2" >> /mnt/ramdisk/etc/rc.halt echo "echo \"Unmounting file systems\"" >> /mnt/ramdisk/etc/rc.halt echo "umount -a -f" >> /mnt/ramdisk/etc/rc.halt echo "case \"\$1\" in" >> /mnt/ramdisk/etc/rc.halt echo " 0)" >> /mnt/ramdisk/etc/rc.halt echo " echo \"The system is halted\"" >> /mnt/ramdisk/etc/rc.halt echo " eval halt" >> /mnt/ramdisk/etc/rc.halt echo " ;;" >> /mnt/ramdisk/etc/rc.halt echo " 6)" >> /mnt/ramdisk/etc/rc.halt echo " echo \"rebooting the system...\"" >> /mnt/ramdisk/etc/rc.halt echo " eval reboot" >> /mnt/ramdisk/etc/rc.halt echo " ;;" >> /mnt/ramdisk/etc/rc.halt echo "esac" >> /mnt/ramdisk/etc/rc.halt chmod +x /mnt/ramdisk/etc/rc.halt # --pam.d/otherファイルを作成します。-- echo auth optional /lib/security/pam_permit.so > /mnt/ramdisk/etc/pam.d/other echo account optional /lib/security/pam_permit.so >> /mnt/ramdisk/etc/pam.d/other echo password optional /lib/security/pam_permit.so >> /mnt/ramdisk/etc/pam.d/other echo session optional /lib/security/pam_permit.so >> /mnt/ramdisk/etc/pam.d/other #--passwd,groupファイルを作成します。-- echo root:x:0:0:root:/root:/bin/ash > /mnt/ramdisk/etc/passwd echo root:x:0:root > /mnt/ramdisk/etc/group #--profileファイルを作成します。-- echo export PATH=/usr/bin:/bin:/sbin > /mnt/ramdisk/etc/profile echo stty erase ^H >> /mnt/ramdisk/etc/profile #--shellsファイルを作成します。-- echo /bin/sh > /mnt/ramdisk/etc/shells echo /bin/ash >> /mnt/ramdisk/etc/shells #--keyマップファイルの作成-- dumpkeys > jp106.kmap レスキューに必要と思われるファイル群を配置しておきます。 #------/bin------ cd /mnt/ramdisk/bin cp /bin/{ash,cat,chmod,chown,cp,dd,df,hostname,ln,login,ls,mkdir,mknod,more,mount,mv,ps, pwd,rm,stty,umount,loadkeys,kill} . ln -s ash sh /binや/sbinのコマンドで使用されるライブラリ全てを追加する必要があります。 #------/lib------ cd /mnt/ramdisk/lib #--ライブラリファイルのコピー-- cp /lib/{libc-2.2.4.so,ld-2.2.4.so,libcom_err.so.2.0,libcrypt-2.2.4.so,libdl-2.2.4.so,libext2fs.so.2.4, libnsl-2.2.4.so,libnss_files-2.2.4.so,libpam.so.0.75,libpam_misc.so.0.75,libproc.so.2.0.6, libutil-2.2.4.so,libuuid.so.1.2,librt-2.2.4.so,libe2p.so.2.3} . #-- シンボリックファイルのコピー-- cp -a /lib/{ld-linux.so.2,libcom_err.so.2,libcrypt.so.1,libdl.so.2,libext2fs.so.2,libnsl.so.1,libnss_files.so.2, libpam.so.0,libpam.so,libpam_misc.so.0,libpam_misc.so,libutil.so.1,libuuid.so.1,librt.so.1,libe2p.so.2} . #--他のディレクトリにあるファイルのコピー-- cp /usr/lib/libz.so.1.1.3 . cp -a /usr/lib/libz.so.1 . #--pamで使用するライブラリのコピー-- mkdir -p /mnt/ramdisk/lib/security cd /mnt/ramdisk/lib/security cp /lib/security/pam_permit.so . ldconfigを実行し、ルートファイルシステムのシェアードライブラリ情報を作成します。 #------ldconfigの実行------ /sbin/ldconfig -r /mnt/ramdisk レスキューに必要と思われるファイル群を配置しておきます。 #------/sbin------ cd /mnt/ramdisk/sbin cp -a /sbin/{restore,fdisk,mingetty,halt,shutdown,init,mke2fs, mkfs,mkfs.ext2,mkfs.ext3,mkswap,swapon,killall5,reboot} . cp -a /sbin/{insmod,modprobe,lsmod,rmmod} . log,runなどのファイルを置いておきます。 #------/var------ cd /mnt/ramdisk/var mkdir /mnt/ramdisk/var/{log,run} touch /mnt/ramdisk/var/run/utmp #----- モジュールのインストール ------------ モジュールは通常/lib/modusにインストールされますが、環境変数"INSTALL_MOD_PATH"を指定する事で、インストール先を変更する事が可能になります。 export INSTALL_MOD_PATH=/mnt/ramdisk cd /usr/src/linux make modules_install #モジュールインストールで不要ファイルまで作成されるので削除 cd /mnt/ramdisk/lib/modules/2.4.9-3 rm -rf block modules.generic_string modules.isapnpmap modules.parportmap modules.pcimap modules.usbmap pcmcia scsi 完成したルートフィルシステムを圧縮ファイルにまとめます。 これを先ほどの手順のとおりFDに書き込みます。 #------圧縮ルートファイルシステムの作成------ cd /mnt umount /dev/ram dd if=/dev/ram bs=1k | gzip -v9 > rootfs.gz |
簡単に、依存関係について説明です。 下記の例ではcdromとide-cdの関係を例にとって説明します。 これらはどちらもCD-ROMを利用する際に必要となります。 [root root]# insmod ide-cd.o ide-cd.o: unresolved symbol cdrom_mode_select ide-cd.o: unresolved symbol ... ide-cd.o: unresolved symbol ... ide-cd.o: unresolved symbol ... と、cdrom.oに含まれる関数がないと言われます。 これは、cdrom.o -> ide-cd.oの順にinsmodを実行しない為です。 これを自動化させるのが、modprobeであり、依存関係ファイルを作成するのがdepmodです。 カーネル作成時に、「Loadable module support」-「Kernel module loader」を有効にしていれば、必要な時(例えばmount時など)に、カーネルが自動的にモジュールをロードしてくれますが、そうでない場合は、手動で組み込まなくてはなりません。 今回はmodule loaderも有効にしてカーネルを作成しているので、CD-ROMをマウントするだけで、モジュールのロードはカーネルが行ってくれます。 # mount /dev/cdrom /mnt CDROMのマウント # lsmod モジュールが自動的に読み込まれている事を確認します。 Module size Used by isofs 15680 1 (autoclean) ide-cd 23604 1 cdrom 25280 0 [ide-cd] |
お問い合わせはwebmaster@ryouto.jpまで。
Copyright (C)2003 ryouto.jp. All Rights Reserved.