歌詞パート
子供の頃、私たちのうち誰がおもちゃを作らなかったのでしょうか。 私も例外ではありませんでした。 ほんの数年しかかからず、Linuxはおもちゃの1つになりました。 「壊して見たい」という抽象的な欲求から、それはいくつかの非常に特殊なタスクに形式化されました。そのうちの1つは、開始点を見つけることでした。 何度かlfの収集を始めましたが、終わりには至りませんでした。 組み込み開発に関するいくつかの記事を読みましたが、すべてがあまりにも真面目で大人っぽいものでした。さまざまなアーキテクチャとリモートデバッグ用のクロスコンパイル環境を構築するという提案の後、パニックでインターネットをオフにしました。 いくつかのミニライブCDをレビューしましたが、それらはすべてメガデシマル(カーネル2.4以下)であるか、必然的にグラフィックスとDEを使用しているため、実験に理想的なミニミニスターのアイデアに適合しませんでした。
そして、少し前に、私が探しているものがinitramfsと呼ばれ、私の鼻の下にあることを偶然見つけました。
HOWTOパート
特別な努力をせずに、小さくて居心地の良い、できれば何か有用な配布物を手に入れるタスクを自分で設定しましょう。 概して、ローダー、カーネル、およびinitramfsイメージが必要です。 それらを入手する最も簡単な方法は、既成のディストリビューションからそれらをプルすることです。 少なくとも何らかの形で有用にするために、そこにbusyboxを挿入し、いくつかのネットワークサービスを構成します。 CentOSでこれを行う方法を紹介しますが、原則として誰でもできます。 それでは始めましょう:
initrdをどこかに展開します。
mkdir /root/myimage
cd /root/myimage
gzip -d < /boot/initrd-2.6.18-128.el5 | cpio --extract --verbose --make-directories --no-absolute-filenames
busyboxをインストールしてminilinuxにコピーします(busyboxは何にもリンクしないため、安全にコピーします)
yum install busybox
cp -a /sbin/busybox /root/myimage/bin
initには最も必要な最小限のみを残します:procfsおよびsysfs、メインデバイスファイルを作成し、必要なドライバーをロードし(私のネットワークでは、メインディストリビューションの/ libからそれらをコピーする必要があります)、いくつかのサービスを実行します。 ここに:
/ init
#!/bin/nash
mount -t proc /proc /proc
mount -t sysfs /sys /sys
mount -o mode=0755 -t tmpfs /dev /dev
mkdir /dev/pts
mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
mkdir /dev/shm
mknod /dev/null c 1 3
mknod /dev/zero c 1 5
mknod /dev/systty c 4 0
mknod /dev/tty c 5 0
mknod /dev/console c 5 1
mknod /dev/ptmx c 5 2
mknod /dev/rtc c 10 135
mknod /dev/tty0 c 4 0
mkblkdevs
insmod /lib/libphy.ko
insmod /lib/tg3.ko
mkblkdevs
echo WELCOME!!!
/bin/busybox ln -s /bin/busybox /bin/ash
/bin/busybox ln -s /bin/busybox /bin/telnetd
/bin/busybox ifconfig eth0 192.168.1.1 netmask 255.255.255.0
/bin/busybox httpd
/bin/busybox inetd /etc/inetd.conf
/bin/ash
/ etc / passwd
root:x:0:0:root:/:/bin/ash
/etc/inetd.conf
23 stream tcp nowait root /bin/telnetd telnetd -l /bin/ash
initramfsを収集してその場所に戻ります。
find . | cpio -H newc --create --verbose | gzip -9 > /boot/initrd-2.6.18-128.el5
出来上がり。 mini-Linuxの準備ができました。 / bootディレクトリ以外のすべてを破棄して再起動できます。 ただし、信頼性を高めるには、USBフラッシュドライブに転送してください。
フラッシュドライブがカーネルによって/ dev / sdbとして定義されているとします。 太いセクションは1つだけです。 fdiskを使用して、起動可能にします
fdisk /dev/sdb
アスタリスクがブート列にあるかどうかを確認します。 そうでない場合は、aを押してからwを押します。
フラッシュドライブをどこかにマウントし、コピー/ブートします
mount /dev/sdb1 /mnt
cp -a /boot /mnt
umount /dev/sdb1
GRUBを使用して、フラッシュドライブのブートセクターを書き換えます
grub
>find (hd1,0)/boot/grub/stage2
>root (hd1,0)
>setup (hd0)
>quit
ここでは、grubがUSBフラッシュドライブをディスク2として「見た」と仮定しました。そうでない場合、findはエラーをスローします(検出または起動しません)。 find(hd2,0)... find(hd3,0)...などの結果を、フラッシュドライブが見つかるまで見てください。
合計
まあ、それだけです。 リブートし、BIOSでリムーバブルメディアからのブートをオンにすると、ミニLinuxのコマンドプロンプトが表示されます。 また、telnetクライアントを使用して192.168.1.1に接続し、ブラウザで192.168.1.1/initを開くことを試みます。自分の小さなディストリビューターを作成するトピックに触発された場合は、さらに調査するためのいくつかの指示があります。
-busyboxユーティリティを参照してください。 http、dhcp、tftp、smtp、tod、inetdなど、多くの便利なネットワークサービスがあります。 tar + gzip + ftpputから、優れた「無人バックアップ」が得られます。 FSを操作するためのユーティリティも多数あり、レスキューCDを作成できます。
-より多くのデバイスを特定します。 お気づきかもしれませんが、initスクリプトからすべてのディスクデバイスドライバーとfsを削除しました。 ああ!!! ところで、ホットプラグとUSBドライバーも無効になっているため、USBキーボードを使用している場合は、何よりもまずそれらを元の場所に戻します。
この記事が誰かに役立つことを願っています。