玄箱Pro、直します。

超初心者が、玄箱PROでLinuxを勉強する無謀なブログです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
別窓 | スポンサー広告
∧top | under∨

debootstrapでetch化(1)

念願のdebootstrapによるDebian etch化を実現しました。
理屈ではわかっており、何度か実験していたのですが、玄箱PROに「あれがない、これがない」と言われ失敗の連続でまとめるまでに時間がかかってしまいました。

まだまだ未完成な印象もありますが、ひとまず忘れないためのメモ。
しかし完全なログを取り忘れていましたので、半分程度は記憶によるものです。

参考にしたサイト:
Pyon's Diaryさん
KURO-BOX/PRO (其乃廿參) Debian (etch) を入れる。
メインに参考にさせていただいたページです。具体的な手順だけではなく基本的な考え方まで勉強させていただきました。
作業ひとつひとつに導入の理由と解説があり、めちゃめちゃわかりやすかったです。

Jun's Homepageさん
玄箱PROのDebian Etch化の手順
もともとPyonさんもここを参考にされていましたが、私は補足的に参考にさせていただきました。

開発人生さん
玄箱プロにDebian
ひとつのHDDだけでdebootstrapによるDebian化をされていた方です。ただし詳細な方法は掲載されておりません(笑)。
思えばここを読んだがために「やってみよう」と思ってしまったのが始まりです。

LinkStation/玄箱をハックしようさん
debian 起動時のエラーをつぶす
fsck.xfsのエラー修復方法を勉強させていただきました。

玄い三連星さん
KUROBOX-PROのEABIなDebian化(とりあえず)
基本的な発想を再確認させていただきました。


これらのサイトを参考にしながら以下の条件でDebian化を行いました。

■標準ファーム・フラッシュブートの玄箱PRO(工場出荷状態)
■シリアルコンソール不要(あれば最善)
■玄箱PROに接続するHDDは1台のみ(未フォーマット)

手順の概略

標準ファーム・フラッシュブートの玄箱PROに一台のHDDを接続し、そのHDDにDebian環境を構築し、最後に起動先をフラッシュからHDDに替えて終了です。
/mnt/disk1/debian/boot
とHDDにディレクトリを作成し、それぞれ以下のようにする。

■/mnt/disk1⇒sda4
まずはここにhddrootfs.tar.gzを展開し、ここにchrootすることで開発環境とする。

■/mnt/disk1/debian⇒sda2
開発環境上からdebootstrapで作成したDebian環境をここに構築し、Debian化のルートファイルとする。ある程度構築できたらここにchrootし、Debian環境を整える。

■/mnt/disk1/debian/boot⇒sda1
ここにカーネルイメージであるuImage.buffaloを置いておく。


HDDの準備

まずはHDDのパーティションです。
私の今の環境が80GBのHDDですので、ファイルシステムと容量は以下のように切りました。

/dev/sda1 128MB ext3
/dev/sda2 5120MB xfs
/dev/sda3 1024MB swap
/dev/sda4 残り xfs

具体的なfdiskとmkfsは以下。

~ # fdisk /dev/sda <<EOF
>n
>p
>1
>(改行)
>+128MB
>n
>p
>2
>(改行)
>+5120MB
>n
>p
>3
>(改行)
>+1024MB
>t
>3
>82
>n
>p
>(改行)
>(改行)
>w
>(改行)
>EOF
~ # mkfs.ext3 /dev/sda1
~ # mkfs.xfs /dev/sda2 -f
~ # mkswap /dev/sda3
~ # mkfs.xfs /dev/sda4 -f


これでHDDの準備はOKです。次に開発環境の下ごしらえです。

開発環境の構築

まずは最低限のマウント。

~ # mount /dev/sda4 /mnt/disk1
~ # chmod 777 /mnt/disk1


Windowsとのsamba共有でhddrootfs.tar.gzを玄箱PRO(/mnt/disk1)にコピーします。
それを/mnt/disk1上に展開しておきます。
ここにchrootして後々開発することになります。

~ # tar xzf /mnt/disk1/hddrootfs.tar.gz -C /mnt/disk1/


そして、この/mnt/disk1に

~ # mkdir /mnt/disk1/debian
~ # mount /dev/sda2 /mnt/disk1/debian
~ # mkdir /mnt/disk1/debian/boot
~ # mount /dev/sda1 /mnt/disk1/debian/boot


と、マウントしていきます。
ゆくゆくは
/mnt/disk1/debian → Debian化後の/
/mnt/disk1/debian/boot → Debian化後の/boot

となります。

標準ファームではデフォルトで使えるwgetも、開発環境では自前で用意しなければなりません。
外部への接続設定を施して、開発環境にchrootする前に、wgetだけでもwgetしておきます。

~ # cd /mnt/disk1
/mnt/disk1 # wget http://ftp.gnu.org/pub/gnu/wget/wget-1.10.2.tar.gz


開発環境の/mnt/disk1/etcにも外部への接続設定をしておく必要があります。
そして開発環境に入ります。

/mnt/disk1 # chroot /mnt/disk1


開発環境にwgetを

まずは先ほどのwgetを導入します。
configureの時点でcppエラーが出るのがわかっているので、最初から/usr/bin/cppを/libにコピーしておきます。

/ # cp /usr/bin/cpp /lib


そしてwgetの展開→導入。

/ # tar xzf wget-1.10.2.tar.gz
/ # cd ./wget-1.10.2/
/wget-1.10.2 # ./configure
/wget-1.10.2 # make
(略)
/bin/sh: msgfmt: not found
make[1]: *** [bg.gmo] Error 127
make[1]: Leaving directory `/wget-1.10.2/po'
make: *** [po] Error 2
/wget-1.10.2 # make install
(略)
/bin/sh: msgfmt: not found
make[1]: *** [bg.gmo] Error 127
make[1]: Leaving directory `/wget-1.10.2/po'
make: *** [install.mo] Error 2


configureで、「C preprocessor "gcc -E" fails sanity check」エラーが出るかもしれませんが、もう一度configureすれば大丈夫です。
make以降もエラーが出ますが問題ありません。

これでwgetが導入できましたので、必要なソースをどんどん取ってきます。

必要なソースの導入


バージョンなどで悩んだ場合は導入実績が公開されているPyon's Diaryさんのサイトを参考にしました。
というか私は丸ごと同じバージョン使ってます(笑)。
各ソース名・用途・入手先は以下。

・makedev
MAKEDEVを導入するためのスクリプトです。ttyS0、ttyS1などもこのスクリプトで作成するため、必須です。
http://ftp.debian.org/debian/pool/main/m/makedev/makedev_2.3.1.orig.tar.gz

・debootstrap
Debianの基本ファイルシステムを構築してくれる魔法のようなスクリプトです。めちゃめちゃ簡単に作れてしまうので、拍子ぬけするほどでした。
http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_0.3.3.3.tar.gz

・makedevの差分ファイル
本質的に「必要なソース」という意味ではないが、差分があるのでこれも取っておく。
http://ftp.debian.org/debian/pool/main/m/makedev/makedev_2.3.1-83.diff.gz

・patch
となるとこれも当然必要になるが、Debian化に必要、という意味ではない。
http://ftp.gnu.org/pub/gnu/patch/patch-2.5.4.tar.gz


これらを/mnt/disk1(chroot後の/)に導入しておきます。

/wget-1.10.2 # cd /
/ # wget http://ftp.debian.org/debian/pool/main/m/makedev/makedev_2.3.1.orig.tar.gz
/ # wget http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_0.3.3.3.tar.gz
/ # wget http://ftp.debian.org/debian/pool/main/m/makedev/makedev_2.3.1-83.diff.gz
/ # wget http://ftp.gnu.org/pub/gnu/patch/patch-2.5.4.tar.gz


もしもこの時に「wget: ftp.gnu.org: Unknown host」などのエラーが出るなら、外部への接続設定が出来ていないはず。
たぶんnsswitch直すだけでwgetは動きそうですけど、あとあとresolv.confでひっかかるので今のうちにすべて整えておきましょう。
次にmakedevの差分にパッチをあてるため、patchを導入します。

/ # tar xzf patch-2.5.4.tar.gz
/ # cd ./patch-2.5.4/
/patch-2.5.4 # ./configure
/patch-2.5.4 # make
/patch-2.5.4 # make install


別に何の障害もありません。
そしてmakedevを導入します。

/patch-2.5.4 # cd /
/ # tar xzf makedev_2.3.1.orig.tar.gz
/ # gunzip -dc makedev_2.3.1-83.diff.gz | patch -p0


そして、実行権限を与えsbinにコピーを置き、/dev/MAKEDEVというリンクを作っておきます。
まだこのあたりは理解しやすいと思います。

/ # cd ./makedev-2.3.1.orig/
/makedev-2.3.1.orig # chmod +x MAKEDEV
/makedev-2.3.1.orig # cp -i MAKEDEV /sbin/
/makedev-2.3.1.orig # ln -s /sbin/MAKEDEV /dev/MAKEDEV


さてここからがdebootstrapの導入です。
開発環境の/etc/groupがないとdebootstrapはエラーを吐きます。あらかじめ標準ファームの/etc/groupを開発環境の/etc/group(実際は/mnt/disk1/etc/group)にコピーしておきます。
そのために一旦開発環境から抜け、再度chroot。

/makedev-2.3.1.orig # exit
~ # cd /etc
/etc # cp -a group /mnt/disk1/etc/
/etc # chroot /mnt/disk1


ではdebootstrapです。
まずは展開。

/ # tar xzf debootstrap_0.3.3.3.tar.gz
/ # cd ./debootstrap-0.3.3.3/


そしてMakefileの一部分だけ修正します。
修正箇所は

generic

generic-arm


これだけです。修正したらmakeし、インストールまで行きます。

/debootstrap-0.3.3.3 # vi Makefile
/debootstrap-0.3.3.3 # make
/debootstrap-0.3.3.3 # make install-arch


そして実行。

/debootstrap-0.3.3.3 # cd /
/ # debootstrap --arch arm etch /debian http://cdn.debian.or.jp/debian


長いこと待たされます。
出来上がった/debian(実際は/mnt/disk1/debian)がスカスカのDebianルートファイルです。
ここにchrootすればフラッシュブートのままDebianが使えるわけです。
しかしその前に、もう少し残った処理をしておきます。

HDDブートの環境を整える

Windowsからsamba経由でCD-ROMのuImage.buffaloを/mnt/disk1にコピーしておきます。そして/dev/sda1にコピーします。

/ # cp -i uImage.buffalo /debian/boot


次にカーネルモジュールをコピーする・・そうですが、何の事かよくわかりません(笑)。
ひとまず書かれている通りに進めておきます。

/ # cp -air /lib/modules/2.6.12.6-arm1/ /debian/lib/modules/



Debian環境にchrootして細かな設定

いよいよDebian環境に入ります。

/ # exit
/etc # chroot /mnt/disk1/debian
sh-3.1#


このあたりまでくるとテンション最高潮となっています(笑)。
まずはapt-getが使えるようにします。
/etc/apt/sources.listの内容を編集します。apt命令でここに記載されたURLへリストを取りにいくわけですね・・。

sh-3.1 # vi /etc/apt/sources.list


ひとまずPyon's Diaryさんと同じ内容にしました。


deb http://ftp2.jp.debian.org/debian/ etch main
deb-src http://ftp2.jp.debian.org/debian/ etch main
#
deb http://security.debian.org/ etch/updates main
deb-src http://security.debian.org/ etch/updates main


3行目の#が何なのかよくわかりませんがこのまま入力しました。
また、/etc/hostnameというファイルがないと、Debianのプロンプトが(none)となってしまいますので、内容をKUROBOX-PROと1行書いただけの/etc/hostnameを用意します。
KUROBOX-PROの部分を好きなものに変えてもOKです。

sh-3.1# echo KUROBOX-PRO > /etc/hostname


次は/etc/hostsです。
玄箱PRO自身に、自分は何と呼ばれるのかを認識させる書類でしょうか。最後のKUROBOX-PROは環境や好みに合わせて変えてもいいものです。

sh-3.1# echo 127.0.0.1 localhost KUROBOX-PRO > /etc/hosts


次は「DHCPからIPアドレスを取得する設定」らしいのですが、実は何のことかわかりません(笑)。
書いてある通りに設定します。

sh-3.1# vi /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
iface lo inet loopback
iface eth0 inet dhcp
auto lo
auto eth0


基本的なネットワークの設定ができたところで、apt-get update、upgradeを実行します。

sh-3.1# apt-get update
sh-3.1# apt-get upgrade


次は/etc/fstabで起動時にマウントされるデバイスを設定します。
ここも実はよく理解できていません。
バックアップ指定はext系だけだと思っていたのにxfsでも1としている点がわかりません・・・。
まぁとりあえずお得意の全コピーです(笑)。

sh-3.1# vi /etc/fstab
# UNCONFIGURED FSTAB FOR BASE SYSTEM
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
/dev/sda2 / xfs defaults 1 1
/dev/sda3 none swap sw 0 0
/dev/sda4 /home xfs defaults 1 1


次です。
シリアルコンソールからのログインを可能にするため、/etc/inittabを編集します。

sh-3.1# vi /etc/inittab


#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
という行を、#を取って数値を2か所変更し
T0:12345:respawn:/sbin/getty -L ttyS0 115200 vt100
と変えます。これだけです。

さて次はシステム時刻をJSTに変更します。
/etc/default/rcSの「UTC=yes」を「UTC=no」と編集するだけです。

sh-3.1# vi /etc/default/rcS


それとタイムゾーンの設定です。

sh-3.1# tzconfig


質問に答える形で「y」「5」「Tokyo」と答えればいいみたいです。

次に/etc/default/halt。
コマンド入力で電源を落とすための処理です。

sh-3.1# vi /etc/default/halt


「HALT=poweroff」を「HALT=halt」と変えるだけです。

次。rootのパスワード設定と一般ユーザー作成です。
telnetへrootでのログインはできませんので、一般ユーザー作成は必須です。
下の例では一般ユーザー名をkuroとしています。

sh-3.1# passwd
sh-3.1# adduser kuro


続いて、ttyS0、ttyS1をMAKEDEVです。

sh-3.1# mount -t proc proc /proc
sh-3.1# cd /dev
sh-3.1# MAKEDEV ttyS0
sh-3.1# MAKEDEV ttyS1


実はPyonさんの記事を見る前に、何度やっても

INIT: Id "T0" respawning too fast: disabled for 5 minutes


というエラーでDebianの起動が止まってたんです。
ttyS0しかMAKEDEVしていなかったからだと知ったのはPyonさんのおかげです。

(続く)
スポンサーサイト
別窓 | memo:Debian化 | コメント:0 | トラックバック:0
∧top | under∨
<<debootstrapでetch化(2) | 玄箱Pro、直します。 | 標準ファームにapache(1)>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

トラックバックURL

FC2ブログユーザー専用トラックバックURLはこちら
∧top | under∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。