前回,
それらのファイルを過不足なく揃え,
/sbin/ mkinitramfs
前回,
mkinitramfsはシンプルなシェルスクリプトなものの,
必要なコマンドの準備
mkinitramfsでは,
36 printf "Creating $INITRAMFS_FILE... "
37
38 binfiles="sh cat cp dd killall ls mkdir mknod mount "
39 binfiles="$binfiles umount sed sleep ln rm uname"
40 binfiles="$binfiles readlink basename"
...
45 sbinfiles="modprobe blkid switch_root"
46
47 #Optional files and locations
48 for f in mdadm mdmon udevd udevadm; do
49 if [ -x /sbin/$f ] ; then sbinfiles="$sbinfiles $f"; fi
50 done
これらのうち,
また,
作業用ディレクトリの作成
次に/tmpディレクトリに作業用の一時ファイル
52 unsorted=$(mktemp /tmp/unsorted.XXXXXXXXXX)
...
57 # Create a temporary working directory
58 WDIR=$(mktemp -d /tmp/initrd-work.XXXXXXXXXX)
59
$unsortedは先に指定した27個の実行ファイルが必要とする共有ライブラリを調べる際に使うファイルで,
次に,
60 # Create base directory structure
61 mkdir -p $WDIR/{bin,dev,lib/firmware,run,sbin,sys,proc,usr}
62 mkdir -p $WDIR/etc/{modprobe.d,udev/rules.d}
63 touch $WDIR/etc/modprobe.d/modprobe.conf
64 ln -s lib $WDIR/lib64
65 ln -s ../bin $WDIR/usr/bin
initrd用の/dev/
67 # Create necessary device nodes
68 mknod -m 640 $WDIR/dev/console c 5 1
69 mknod -m 664 $WDIR/dev/null c 1 3
実行ファイルと共有ライブラリのコピー
まず,
71 # Install the udev configuration files
72 if [ -f /etc/udev/udev.conf ]; then
73 cp /etc/udev/udev.conf $WDIR/etc/udev/udev.conf
74 fi
75
76 for file in $(find /etc/udev/rules.d/ -type f) ; do
77 cp $file $WDIR/etc/udev/rules.d
78 done
代入している部分は省略したものの,
88 # Install the init file
89 install -m0755 $DATADIR/$INITIN $WDIR/init
ドライバ・
91 if [ -n "$KERNEL_VERSION" ] ; then
92 if [ -x /bin/kmod ] ; then
93 binfiles="$binfiles kmod"
94 else
95 binfiles="$binfiles lsmod"
96 sbinfiles="$sbinfiles insmod"
97 fi
98 fi
次に$binfilesに指定したコマンド
100 # Install basic binaries
101 for f in $binfiles ; do
102 if [ -e /bin/$f ]; then d="/bin"; else d="/usr/bin"; fi
103 ldd $d/$f | sed "s/\t//" | cut -d " " -f1 >> $unsorted
104 copy $d/$f bin
105 done
同様に$sbinfilesに指定したコマンド
110 for f in $sbinfiles ; do
111 ldd /sbin/$f | sed "s/\t//" | cut -d " " -f1 >> $unsorted
112 copy $f sbin
113 done
次に,
153 # Install libraries
154 sort $unsorted | uniq | while read library ; do
155 if [ "$library" == "linux-vdso.so.1" ] ||
156 [ "$library" == "linux-gate.so.1" ]; then
157 continue
158 fi
159
160 copy $library lib
161 done
このあたり,
udevは/lib/
163 if [ -d /lib/udev ]; then
164 cp -a /lib/udev $WDIR/lib
165 fi