レスキューディスクの作成(5) |
レスキューディスクを1枚で作成すろと、どうしても容量不足になりがちです。 特に容量を圧迫させているのがglibcであり、Turbolinux7で使われているglibc-2.2.4では、libc.so.6(libc-2.2.4.so)だけでもそのサイズは1.4Mバイトにもなります。 そこで、今回はバージョンの低いglibcを使う事で容量削減を実現しようと思います。(今回使うglibcは2.1.3です。2.2.4から2.1.3にするだけでも、libc.so.6のサイズは400Kバイトほど削減できます。) ただ、面倒な事に、glibcを入れ替えると既存のコマンド(glibc2.2.4でコンパイルされている物)で動作しないものが多くあります。この為、利用する全てのプログラムやライブラリを新しいglibcでもってコンパイルし直す事とします。本ページではレスキューディスク作成において利用する全てを新しいglibcとリンクさせてmakeしています。 今回使用するTurbolinux7環境ではglibc-2.2.4がインストールされています。 今回新しくコンパイルするglibc-2.1.3はレスキューディスク用なので、/libなどにはインストールしません。 /usr/i686-linuxglibc2ディレクトリにインストールし、そこのglibでもって他のプログラムやライブラリをコンパイルする環境を構築します。 言い換えると、gccを利用してコンパイルする際に、既存のglibc-2.2.4と新しくインストールするglibc-2.1.3のどちらのライブラリとリンクするかをコンパイル時に指定出来ると言う事です。 作業の流れは次のようになります。 1.glibc-2.1.3環境の構築 2.gcc環境の構築(コンパイル時のglibc指定) 3.各種プログラムのコンパイル 4.レスキューディスクの作成 5.今回作成したレスキューディスク |
前回までの内容 | |
|
[root resq]# tar zxvf sysvinit_2.85.orig.tar.gz [root resq]# cd sysvinit-2.85.orig/ [root sysvinit-2.85.orig]# gzip -d ../sysvinit_2.85-13.diff.gz [root sysvinit-2.85.orig]# patch -p1 < ../sysvinit_2.85-13.diff [root sysvinit-2.85.orig]# cd src レスキューディスク用途のGlibc2を使うようにMakefileを修正します。 [root src]# vi Makefile 13行目付近のCFLAGS,LDFLAGSオプションの後に以下の2行を追加します。 CFLAGS += -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include LDFLAGS += -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib ROOT=/usr/local/resq-disk/root また、インストールしようとするとディレクトリがなく、エラーとなる為次の1行を追加しました。 install: <-install項目の直後に mkdir -p $(ROOT)/bin/ $(ROOT)/sbin/ $(ROOT)/usr/include/ $(ROOT)/usr/bin/ $(ROOT)/etc/ $(ROOT)$(MANDIR)/man1/ $(ROOT)$(MANDIR)/man5/ $(ROOT)$(MANDIR)/man8/ [root src]# make [root src]# make install |
[root archive]# rpm -ivh ash-0.2-21.src.rpm [root resq]# mv /var/src/rpm/SOURCES/* ./ [root resq]# tar zxvf ash-linux-0.2.tar.gz [root resq]# cd ash-linux-0.2/ [root ash-linux-0.2]# patch -p1 < ../ash-linux-0.2-glibc21.patch [root ash-linux-0.2]# patch -p1 < ../ash-0.2-make.patch [root ash-linux-0.2]# patch -p1 < ../ash-installer-lib.patch レスキューディスク用途のGlibc2を使うようにMakefileを修正します。 [root ash-linux-0.2]# vi Makefile 以下の2行を付け足します。 CFLAGS += -O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include LDFLAGS += -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib インストール先も変更してしまいます。 install: all install sh /usr/local/resq-disk/root/bin/ash # install -m 644 sh.1 /usr/man/man1/ash.1 [root ash-linux-0.2]# make [root ash-linux-0.2]# make install |
[root resq]# tar zxvf console-tools_0.2.3.orig.tar.gz [root resq]# cd console-tools-0.2.3/ [root console-tools-0.2.3]# gzip -d ../console-tools_0.2.3-23.3.diff.gz [root console-tools-0.2.3]# patch -p1 < ../console-tools_0.2.3-23.3.diff --enable-shared=noを付けないと、複数のシェアードライブラリを使う事になって面倒なので、sharedはなしにします。 [root console-tools-0.2.3]# CFLAGS=" -O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include \ -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include \ -L/usr/i686-linuxglibc2/lib -Wl,-rpath=/usr/i686-linuxglibc2/lib" \ LDFLAGS=" -b i686-linuxglibc2 -L/usr/i686-linuxglibc2/lib -Wl,-rpath=/usr/i686-linuxglibc2/lib" \ ./configure --enable-shared=no --prefix=/usr/local/resq-disk/root/ [root console-tools-0.2.3]# make ドキュメントの作成で、sgml2txtが無いと文句を言われましたが、関係ないので無視しました。 [root console-tools-0.2.3]# make install |
[root resq]# tar zxvf fileutils-4.0.tar.gz [root resq]# cd fileutils-4.0/ cflagsに-Wl,-rpath=/usr/i686-linuxglibc2/libまで付加しないと、configureでエラーになります。 [root fileutils-4.0]# CFLAGS=" -O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include -Wl,-rpath=/usr/i686-linuxglibc2/lib" \ ./configure --prefix=/usr/local/resq-disk/root/ --disable-nls [root fileutils-4.0]# make 以下のようなエラーが出ましたが、エラー発生箇所をコメントアウトする事で解決です。 path-concat.c:34: conflicting types for `malloc' /usr/i686-linuxglibc2/include/stdlib.h:474: previous declaration of `malloc' lib/path-concat.cファイルを開き、34行目をコメントアウトします。編集後は再度makeを実行します。 //char *malloc (); [root fileutils-4.0]# make install |
[root resq]# tar zxvf e2fsprogs-1.22.tar.gz [root resq]# cd e2fsprogs-1.22/ [root e2fsprogs-1.22]# ./configure --prefix=/usr/local/resq-disk/root/ --enable-elf-shlibs \ --with-ccopts=" -O2 -b i686-linuxglibc2 -nostdinc -I../lib -I../lib -I../include -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ --with-ldopts=" -b i686-linuxglibc2 -L/usr/i686-linuxglibc2/lib -Wl,-rpath=/usr/i686-linuxglibc2/lib" [root e2fsprogs-1.22]# make [root e2fsprogs-1.22]# make install make installではヘッダファイルがインストールされなかったので、make install-libsで再度ヘッダ、ライブラリをインストール。 [root e2fsprogs-1.22]# make install-libs |
[root resq]# tar zxvf dump_0.4b27.orig.tar.gz [root resq]# cd dump-0.4b27/ [root dump-0.4b27]# gzip -d ../dump_0.4b27-4.diff.gz [root dump-0.4b27]# patch -p1 < ../dump_0.4b27-4.diff ./configure --prefix=/usr/local/resq-disk/root/ \ --with-ccopts=" -O2 -b i686-linuxglibc2 -nostdinc -I/usr/local/resq-disk/root/include/ext2fs -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ --with-ldopts=" -b i686-linuxglibc2 -L-I/usr/local/resq-disk/root/lib -L/usr/i686-linuxglibc2/lib -Wl,-rpath=/usr/i686-linuxglibc2/lib" --with-manowner=root エラーになりました。以下エラー内容 checking for ext2fs/ext2fs.h... no checking for ext2fs_open in -lext2fs... no configure: error: You need to install the Ext2fs libraries from the E2fsprogs distribution first - hint: make install-libs configureがext2fs.hファイルを見つけてくれないので(通常のincludeパスにない為でしょう)、configureをちょっといじります。もちろんエラーのでなかった環境では不要です。読み飛ばして下さい。 [root dump-0.4b27]# vi configure.in 295行目あたり~340行目あたりまでを以下のように修正します。ようは、configureでext2fs.hのチェックを外してしまいます。 (省略) if [0] ; then <-- 追加 dnl dnl Check for Ext2fs headers and libraries dnl (省略) fi <-- 追加 dnl dnl Check for termcap libraries (省略) [root dump-0.4b27]# autoconf <-- configure ファイルを作成後、再びconfigure。 [root dump-0.4b27]# ./configure --prefix=/usr/local/resq-disk/root/ --with-manowner=root \ --with-ccopts=" -O2 -b i686-linuxglibc2 -nostdinc -I/usr/local/resq-disk/root/include/ -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ --with-ldopts=" -b i686-linuxglibc2 -L/usr/local/resq-disk/root/lib -L/usr/i686-linuxglibc2/lib -Wl,-rpath=/usr/i686-linuxglibc2/lib:/usr/local/resq-disk/root/lib" --with-manowner=root [root dump-0.4b27]# make /usr/i686-linuxglibc2/include/asm/types.h:21: redefinition of `__s64' /usr/i686-linuxglibc2/include/sys/types.h:37: `__s64' previously declared here /usr/i686-linuxglibc2/include/asm/types.h:22: redefinition of `__u64' /usr/i686-linuxglibc2/include/sys/types.h:38: `__u64' previously declared here 以上の様なコンパイルエラーが出たので、以下のヘッダファイルをいじってしまった。 /usr/i686-linuxglibc2/include/sys/types.hの37,38行目をコメントアウトします。ただし、暫定処理なので、コンパイル後は元に戻しておきましょう。 //typedef __quad_t quad_t; //typedef __u_quad_t u_quad_t; [root dump-0.4b27]# make またエラー。 traverse.c:112: conflicting types for `ext2_ino_t' //typedef ino_t ext2_ino_t; traverse.cファイルの112行目をコメントアウトします。 [root dump-0.4b27]# make install |
[root resq]# tar zxvf gzip-1.2.4.tar.gz [root resq]# cd gzip-1.2.4/ [root gzip-1.2.4]# ./configure --prefix=/usr/local/resq-disk/root/ [root gzip-1.2.4]# make \ CFLAGS="-O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ LDFLAGS=" -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib " [root gzip-1.2.4]# make install |
[root resq]# tar zxvf mingetty_1.06.orig.tar.gz [root resq]# cd mingetty-1.06/ [root mingetty-1.06]# gunzip ../mingetty_1.06-2.diff.gz [root mingetty-1.06]# patch -p1 < ../mingetty_1.06-2.diff Makefieを一部修正します。 MANDIR=/usr/local/resq-disk/root/usr/share/man/man8 <-- 修正 SBINDIR=/usr/local/resq-disk/root/sbin <-- 修正 以下の2行を追加 CFLAGS += -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include LDFLAGS = -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib [root mingetty-1.06]# make [root mingetty-1.06]# make install |
[root resq]# tar zxvf modutils_2.4.15.orig.tar.gz [root resq]# cd modutils-2.4.15/ [root modutils-2.4.15]# gunzip -d ../modutils_2.4.15-1.diff.gz [root modutils-2.4.15]# patch -p1 < ../modutils_2.4.15-1.diff [root modutils-2.4.15]# CC=gcc \ CFLAGS="-O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ LDFLAGS=" -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib " \ BUILDCFLAGS=" -O2 " \ ./configure --prefix=/usr/local/resq-disk/root --enable-strip [root modutils-2.4.15]# make [root modutils-2.4.15]# make install |
[root resq]# tar zxvf procps_2.0.7.orig.tar.gz [root resq]# cd procps-2.0.7.orig/ [root procps-2.0.7.orig]# gunzip ../procps_2.0.7-8.woody1.diff.gz [root procps-2.0.7.orig]# patch -p1 < ../procps_2.0.7-8.woody1.diff ./Makefileファイルの修正 export DESTDIR = /usr/local/resq-disk/root <--編集します。 export INCDIRS = -I/usr/i686-linuxglibc2/include/ncurses -I/usr/X11R6/include<--編集します。 以下の2行を追加します。 CFLAGS += -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include LDFLAGS += -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib ps/Makefileファイルの修正 ファイルの先頭に以下の1行を追加 CFLAGS = -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include psのリンクオプションを編集 $(CC) -o ps escape.o global.o help.o select.o sortformat.o output.o parser.o display.o -L../proc -lproc -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib proc/Makefileファイルの修正 TOPDIR = /usr/local/resq-disk/root <--編集します。 export MANDIR = /man <--編集します。 SHLIBDIR = $(TOPDIR)/lib# <--編集します。 リンクオプションの修正 gcc -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib -shared -Wl,-soname,$(SONAME) -o $@ $^ -lc [root procps-2.0.7.orig]# make [root procps-2.0.7.orig]# make libinstall |
[root resq]# tar zxvf sh-utils-2.0.tar.gz [root resq]# cd sh-utils-2.0/ [root sh-utils-2.0]# CC=gcc \ CFLAGS=" -O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ LDFLAGS=" -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib " \ ./configure --prefix=/usr/local/resq-disk/root [root sh-utils-2.0]# make [root sh-utils-2.0]# make install |
[root resq]# tar zxvf textutils-2.0.tar.gz [root resq]# cd textutils-2.0/ [root textutils-2.0]# CC=gcc \ CFLAGS="-O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ LDFLAGS=" -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib " \ ./configure --prefix=/usr/local/resq-disk/root [root textutils-2.0]# make [root textutils-2.0]# make install |
[root resq]# tar zxvf termcap-1.3.1.tar.gz [root resq]# cd termcap-1.3.1/ [root termcap-1.3.1]# ./configure --prefix=/usr/local/resq-disk/root --disable-install-termcap Makefile編集 CFLAGS = -O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include <-- CFLAGSの値を修正します。 [root termcap-1.3.1]# make [root termcap-1.3.1]# make install |
[root resq]# tar zxvf util-linux_2.11n.orig.tar.gz [root resq]# cd util-linux-2.11n/ [root util-linux-2.11n]# gunzip ../util-linux_2.11n-7.diff.gz [root util-linux-2.11n]# patch -p1 < ../util-linux_2.11n-7.diff まずはMCONFIGの編集を行います。 [root util-linux-2.11n]# vi MCONFIG 206行目あたりの既存のCFLAGSの宣言下あたりに以下の1行を追加 CFLAGS += -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include -I/usr/local/resq-disk/root/include それ以外のオプションの設定を行います。 HAVE_PAM=yes <-- noに変更(レスキューディスクでPAMをわざわざ使う必要はないでしょう。) HAVE_SHADOW=yes <-- noに変更 HAVE_SLANG=yes <-- noに変更 [root util-linux-2.11n]# export DESTDIR=/usr/local/resq-disk/root [root util-linux-2.11n]# LDFLAGS=" -b i686-linuxglibc2 -L/usr/local/resq-disk/root/lib -Wl,-rpath=/usr/i686-linuxglibc2/lib " \ ./configure configureにて出来上がったmake_includeファイルを修正します。 これはライブラリの比較的大きいncursesを使わないようにする為です。 [root util-linux-2.11n]# vi make_include HAVE_NCURSES=no <-- yesならnoにする LIBCURSES=-lncurses <-- あればこの行を削除する。 HAVE_TERMCAP=yes <-- noならばyesに LIBTERMCAP=-ltermcap <-- なければ追加する。 more.cでコンパイルエラーが出てしまったのでMakefileを編集します。 [root util-linux-2.11n]# vi text-utils/Makefile feq "$(HAVE_TERMCAP)" "yes" CFLAGS+=-DHAVE_termcap <-- 追加 BIN:=$(BIN) more ifeq "$(HAVE_TERMCAP)" "yes" more: more.o $(CC) $(CFLAGS) $(LDFLAGS) $(LIB)/xstrncpy.o $^ -o $@ $(LIBTERMCAP) <--修正 また、util-linux_2.11n-7はglibc2.2.4以上を必要とする為、2.1.3では一部(text-utils以下の一部)コンパイルできない物があります。それらは、Makefileを書き換え、コンパイルのリストから外します。 USRBIN= hexdump line <-- 修正 [root util-linux-2.11n]]# make [root util-linux-2.11n]# make install |
[root resq]# cd zlib-1.2.1/ CC=gcc \ CFLAGS="-O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ LDFLAGS=" -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib " \ ./configure --prefix=/usr/local/resq-disk/root --shared すこしばかし、Makefileの修正をします。 [root zlib-1.2.1]# vi Makefile LDSHARED=gcc -shared -Wl,-soname,libz.so.1 -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib <--オプション追加 [root zlib-1.2.1]# make [root zlib-1.2.1]# make install |
[root resq]# tar zxvf levee_3.4o.orig.tar.gz [root resq]# cd levee-3.4o.orig/ [root levee-3.4o.orig]# gunzip ../levee_3.4o-6.diff.gz [root levee-3.4o.orig]# patch -p1 < ../levee_3.4o-6.diff Makefileを一部修正します。 [root levee-3.4o.orig]# vi Makefile 以下の2行を追加します。 CFLAGS+= -O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include -I/usr/local/resq-disk/root/include/ LDFLAGS+= -b i686-linuxglibc2 -L/usr/local/resq-disk/root/lib -Wl,-rpath=/usr/i686-linuxglibc2/lib DESTDIR=/usr/local/resq-disk/root lev: $(OBJS) $(CC) $(CFLAGS) -o lev $(OBJS) $(LIBES) $(LDFLAGS) <--修正します install: install lev $(DESTDIR)/bin <-- /usr/binから/binへ # install lev.1 $(DESTDIR)/usr/share/man/man1 <-- コメントにします。 [root levee-3.4o.orig]# make [root levee-3.4o.orig]# make install また、termcapライブラリを利用するので、/etc/termcapファイルが必要になります。今回はvt100の設定を自分の環境より書き写しています。 termcapファイルの設定は環境変数TERMで指定する必要があります。今回のレスキューディスクでは/etc/profileでTERM=vt100環境変数を指定しています。 |
[root resq]# tar zxvf grep_2.4.2.orig.tar.gz [root resq]# cd grep-2.4.2/ [root grep-2.4.2]# gunzip ../grep_2.4.2-3.diff.gz [root grep-2.4.2]# patch -p1 < ../grep_2.4.2-3.diff [root grep-2.4.2]# CC=gcc \ CFLAGS=" -O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ LDFLAGS=" -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib " \ ./configure --prefix=/usr/local/resq-disk/root --disable-nls [root grep-2.4.2]# make [root grep-2.4.2]# make install |
[root resq]# tar zxvf tar-1.12.tar.gz [root resq]# cd tar-1.12/ [root tar-1.12]# CC=gcc \ CFLAGS=" -O2 -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include " \ LDFLAGS=" -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib " \ ./configure --prefix=/usr/local/resq-disk/root --disable-nls [root tar-1.12]# make [root tar-1.12]# make install |
[root lib]# cd /usr/i686-linuxglibc2/lib [root lib]# strip -g ld-2.1.3.so [root lib]# strip -g libc-2.1.3.so [root lib]# strip -g libdl-2.1.3.so [root lib]# strip -g libutil-2.1.3.so [root lib]# strip -g librt-2.1.3.so [root lib]# strip -g libnss_files-2.1.3.so [root lib]# strip -g libcrypt-2.1.3.so [root bin]# cd /usr/local/resq-disk/root/bin/ [root bin]# strip cp [root bin]# strip dd [root bin]# strip df [root bin]# strip du [root bin]# strip gzip [root bin]# strip kill [root bin]# strip ln [root bin]# strip loadkeys [root bin]# strip login [root bin]# strip ls [root bin]# strip mkdir [root bin]# strip mknod [root bin]# strip mount [root bin]# strip mv [root bin]# strip ps [root bin]# strip pwd [root bin]# strip rm [root bin]# strip sleep [root bin]# strip stty [root bin]# strip sync [root bin]# strip umount [root bin]# strip grep [root bin]# strip more [root bin]# strip tar [root bin]# strip hostname [root bin]# cd /usr/local/resq-disk/root/sbin [root sbin]# strip fdisk [root sbin]# strip halt [root sbin]# strip init [root sbin]# strip insmod [root sbin]# strip killall5 [root sbin]# strip mingetty [root sbin]# strip mke2fs [root sbin]# strip mkfs [root sbin]# strip mkfs.ext2 [root sbin]# strip mkswap [root sbin]# strip restore [root sbin]# strip shutdown [root sbin]# strip swapon [root bin]# cd /usr/local/resq-disk/root/lib [root lib]# strip -g libcom_err.so.2.0 [root lib]# strip -g libext2fs.so.2.4 [root lib]# strip -g libproc.so.2.0.7 [root lib]# strip -g libuuid.so.1.2 [root lib]# strip -g libe2p.so.2.3 [root lib]# strip -g libz.so.1.2.1 |
[root kernel]# fdformat /dev/fd0u1722 |
[root kernel]# ls -lh /usr/src/linux/arch/i386/boot/bzImage カーネルサイズの確認 -rw-r--r-- 1 root root 335k Apr 7 23:21 bzImage [root kernel]# mke2fs -i 8192 -m 0 /dev/fd0u1722 -b 1024 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した位置からの書き込み。 |
#-- RAMディスク準備 -- dd if=/dev/zero of=/dev/ram bs=1k count=4096 mkdir -p /mnt/ramdisk mke2fs -m 0 -i 20000 -b 1024 /dev/ram 4096 mount -t ext2 /dev/ram /mnt/ramdisk cd /mnt/ramdisk mkdir root dev proc etc sbin bin lib mnt usr tmp var chmod +t tmp rmdir lost+found #------ /dev ------ 必要となるデバイススペシャルファイルを作成します。/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 vcs1 c 7 1 mknod vcs2 c 7 2 mknod vcs3 c 7 3 mknod vcs4 c 7 4 mknod vcsa1 c 7 129 mknod vcsa2 c 7 130 mknod vcsa3 c 7 131 mknod vcsa4 c 7 132 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/ #--ld.so.cache,ld.so.confファイルを作成します。ld.so.cacheは後でldconfigを実行した際に完成します。-- touch ld.so.cache vi /mnt/ramdisk/etc/ld.so.conf 内容はについてはここを参照 #--issueファイルを作成します。-- vi /mnt/ramdisk/etc/issue 内容はについてはここを参照 #--motdファイルを作成します。-- vi /mnt/ramdisk/etc/motd 内容はについてはここを参照 #--rcファイルを作成します。-- vi /mnt/ramdisk/etc/rc 内容はについてはここを参照 #--fstabファイルを作成します。-- vi /mnt/ramdisk/etc/fstab 内容はについてはここを参照 #--inittabファイルを作成します。-- vi /mnt/ramdisk/etc/inittab 内容はについてはここを参照 #--nsswitch.confァイルを作成します。-- vi /mnt/ramdisk/etc/nsswitch.conf 内容はについてはここを参照 #--rc.haltファイルを作成し、実行権限を与えます。-- vi /mnt/ramdisk/etc/rc.halt 内容はについてはここを参照 chmod +x /mnt/ramdisk/etc/rc.halt #--termcapファイルを作成します。-- vi /mnt/ramdisk/etc/termcap 内容はについてはここを参照 #--passwd,groupファイルを作成します。-- ユーザーもグループもrootのみ用意します。そしてrootのパスワードは空です。 vi /mnt/ramdisk/etc/passwd 内容はについてはここを参照 vi /mnt/ramdisk/etc/group 内容はについてはここを参照 #--profileファイルを作成します。-- vi /mnt/ramdisk/etc/profile 内容はについてはここを参照 #--shellsファイルを作成します。-- vi /mnt/ramdisk/etc/shells 内容はについてはここを参照 #--keyマップファイルの作成-- dumpkeys > jp106.kmap #------/bin------ cd /mnt/ramdisk/bin 下のcpコマンドは1行で記述できますが、見やすくする為わざわざ2行にして書いています。 cp /usr/local/resq-disk/root/bin/{ash,cat,chmod,chown,cp,dd,df,du,ln,login,ls,mkdir,mknod,more,tar,hostname} . cp /usr/local/resq-disk/root/bin/{mount,mv,ps,pwd,rm,stty,sync,umount,loadkeys,gzip,kill,sleep,lev,grep} . ln -s ash sh ln -s lev vi #------/lib------ cd /mnt/ramdisk/lib #--ライブラリファイルのコピー 見やすくする為、行を分けて記述しています。-- cp -a /usr/i686-linuxglibc2/lib/{libc-2.1.3.so,ld-2.1.3.so,libdl-2.1.3.so,libutil-2.1.3.so} . cp -a /usr/i686-linuxglibc2/lib/{librt-2.1.3.so,libnss_files-2.1.3.so,libcrypt-2.1.3.so} . cp -a /usr/local/resq-disk/root/lib/{libcom_err.so.2.0,libext2fs.so.2.4,libproc.so.2.0.7} . cp -a /usr/local/resq-disk/root/lib/{libuuid.so.1.2,libe2p.so.2.3,libz.so.1.2.1} . #-- シンボリックファイルのコピー-- ln -s libc-2.1.3.so libc.so.6 ln -s ld-2.1.3.so ld-linux.so.2.1 ln -s ld-2.1.3.so ld-linux.so.2 既存のコマンドはld-linux.so.2にリンクされているはずなので、用意しておきます。 ln -s libcom_err.so.2.0 ibcom_err.so.2 ln -s libdl-2.1.3.so libdl.so.2 ln -s libext2fs.so.2.4 libext2fs.so.2 ln -s libnss_files-2.1.3.so libnss_files.so.2 ln -s libuuid.so.1.2 libuuid.so.1 ln -s libutil-2.1.3 libutil.so.1 ln -s librt-2.1.3.so librt.so.1 ln -s libcrypt-2.1.3.so libcrypt.so.1 ln -s libz.so.1.2.1 libz.so.1 ln -s libe2p.so.2.3 libe2p.so.2 #------ldconfigの実行------ /sbin/ldconfig -r /mnt/ramdisk #------/sbin------ cd /mnt/ramdisk/sbin cp -a /usr/local/resq-disk/root/sbin/{restore,fdisk,mingetty,halt,shutdown,init,mke2fs,mkswap} . cp -a /usr/local/resq-disk/root/sbin/{swapon,killall5,reboot,insmod,modprobe,lsmod,rmmod} . #------/var------ cd /mnt/ramdisk/var mkdir /mnt/ramdisk/var/{log,run} touch /mnt/ramdisk/var/run/utmp #----- モジュールのインストール ------------ 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 #------圧縮ルートファイルシステムの作成------ cd /mnt umount /dev/ram dd if=/dev/ram bs=1k | gzip -v9 > rootfs.gz |
fdformat /dev/fd0u1722
<--FDのフォーマット gzip -d ryocho-linux.bin.gz <--gzipの解凍 dd if=ryocho-linux.bin of=/dev/fd0u1722 bs=1k <--FDへのコピー |
gzip -d ryocho-linux.bin.gz <--gzipの解凍 mkdir kernelfs rootfs <-- マウント用ディレクトリ作成 mount -o loop ryocho-linux.bin kernelfs/ <-カーネルファイルシステムのマウント dd if=ryocho-linux.bin of=filesystem.gz skip=370 bs=1k <--ルートファイルシステムデータ取りだし gunzip filesystem.gz mount -o loop filesystem ./rootfs <--ルートファイルシステムのマウント |
お問い合わせはwebmaster@ryouto.jpまで。
Copyright (C)2003 ryouto.jp. All Rights Reserved.