玄箱Pro、直します。

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

スポンサーサイト

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

2ヶ月目の日記

更新のペースがあきらかに落ちていますが、実は毎日玄箱PROは触っています。
lighttpdのビルドがどうしてもうまくいかず、その検証ばかりを毎日繰り返しています。

とりあえず楽しくて仕方ありません(笑)。
ゆっくりのんびり、だけどしっかりとLinuxを理解しよう、と始めましたが少しゆっくり過ぎる気もします。

ま、いいか。

■Linuxの全体像
ファイルシステム、ブートローダーなどの大まかな理解は進んだような気がします。
CUIによるディレクトリ表現にも慣れてきたので、他の方の説明を読むのにも以前ほど苦痛はなくなってきたかも。
ブラックボックス的なものがないおかげでコンピュータそのものの動作を理解する機会に恵まれる反面、「こんな仕組みでセキュリティは大丈夫?」と不安に思うところもあります。
案外手作り感たっぷりなところにものすごく魅力を感じています(笑)。

■コマンド
wget、tarなどのコマンドがそれぞれのプログラムでありアプリケーションだということに驚きました。
というか、ひょっとしたらコンピュータでは普通のことなのだろうか・・。
LinuxというOS(Montavista、Debianともに)があらかじめ備えている機能の一部だと思い込んでいたのでびっくりしましたし、この発想が様々な実験の妨げになっていた気もします。
しかし「無ければ導入する」というところが非常に楽しく、カスタムメイドでOSを強化している気にもなり、どんどんLinuxの勉強に魅かれていった要因にもなったと思います。
てか理解するスピード遅すぎ(笑)。

■標準Cライブラリ
やっとここに興味が湧いてきました。
基本中の基本を習得するのにえらい時間がかかってしまった・・。
/lib/cppエラーでlimits.hやらassert.hを探して調べてリンク貼りまくっている内に、CD-ROMにあるdevelopment_kitも調べたくなりました。
しかしまだまださっぱりわかりません(笑)。

■メジャーディストリビューション
あらゆるサイトでDebian化、Debian化と記されていましたが、素人の私にはDebian化するメリットがイマイチよくわかりませんでした。
しかし、ひとたびDebian化して、gccやmake、その他もろもろをapt-getする内に「こりゃ便利だな」と、やっとわかりました(笑)。
標準ファームで四苦八苦しながら順番にビルドして、しかも失敗して悩んで実験してを繰り返していた開発環境が数行のコマンドで簡単に導入できてしまい、なおかつそれらをパッケージ管理できるところがものすごいですよね・・。
そしてサイトに答えがたくさんあるところも心強いし。
ホント、やっと理解できました。
環境的に許されるなら是非ともメジャーディストリビューションを入れるべきだということですね。

■玄箱PROの用途
ここのところしきりにこればかり考えています。
Linuxの学習に最適なんですが、もしも勉強に一段落ついたらどうしようかな、と悩んでいます。
あるいは、何か目標に向けて勉強する方が効率もいいのではないか、と。
で、最近「いいな」と思っているのはDNSサーバとメールサーバ。
webサーバっていっても別に発信することもないし、ファイルサーバはちょっとつまらない。
常時起動できるメリットを活かせる使い方、他にいいのありますかねぇ・・。
スポンサーサイト
別窓 | 日記のようなもの | コメント:0 | トラックバック:0
∧top | under∨

debootstrapでetch化(2)

Debian化でのHDD起動に備えた諸設定を続けます。

前回から引き続き/mnt/disk1/debianにchrootしているものとしています。

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

/dev/sda4を/homeにマウントするために/dev/sdaを作ります。

sh-3.1# cd /dev
sh-3.1# MAKEDEV sda


これも実は失敗から知ったことです。

次にfsck.xfs not foundエラーをつぶすためにxfsprogsを導入します。

sh-3.1# apt-get install xfsprogs


そしてtelnetdの導入。

sh-3.1# apt-get install telnetd update-inetd
sh-3.1# apt-get install xinetd


ひとまずこれでDebian設定は終了です。/procのマウントを外してchrootを抜けます。

sh-3.1# apt-get clean
sh-3.1# umount /proc
sh-3.1# exit



ここで止めておけば、標準ファーム・フラッシュブートのままで高度で柔軟な開発環境が手に入るわけで、これはこれで便利かもしれません。

U-boot環境変数の書き換え

さて、ここからはちょっと慎重に行います。

シリアルコンソールを使ってU-boot環境変数を書き換えれば話は早いのですが、せっかくなのでnvramを使ってHDDブートさせてみます。
なお、これはあくまで私の備忘録であり、ここに記載された内容を実行した結果に対して私は一切の責任を負いません。
もし記載内容を試されるのであれば自己責任でお願いします。
nvramの内容を間違えた場合、シリアルコンソールをお持ちでなければ制御不能に陥りますので十分に注意してください。


後々のことも考えて、この段階のうちに/dev/mtd2を/mnt/disk1/debianのどこかに丸ごとコピーしておいたらいいと思います。
ファンコントロールや電源ボタン制御などの導入につながります。

~ # mkdir /mnt/disk1/debian/mnt/kurobox
~ # mkdir /mnt/mtd2
~ # mount /dev/mtdblock2 /mnt/mtd2
~ # cd /mnt/mtd2
/mnt/mtd2 # tar czf /mnt/disk1/debian/mnt/kurobox/mtd2.tar.gz *
/mnt/mtd2 # cd /mnt/disk1/debian/mnt/kurobox
/mnt/disk1/debian/mnt/kurobox # tar xzf mtd2.tar.gz
~ # umount /mnt/mtd2




まず、シリアルコンソールなら

Marvell>> setenv bootargs_root root=/dev/sda2 rw panic=5
Marvell>> setenv bootargs $(bootargs_base) $(bootargs_root) $(buffalo_ver)
Marvell>> setenv bootcmd 'ide reset; ext2load ide 0:1 $(default_kernel_addr) /$(kernel); bootm $(default_kernel_addr)'
Marvell>> setenv nand_boot no
Marvell>> saveenv
Marvell>> boot


と、これでいいはずです。

しかしせっかくここまでtelnet経由だけで作業できたのですから、最後までシリアルコンソールを使わずに何とかしたいものです。

そこでnvramを使ってみます。
先ほどのU-boot環境変数書き換えを、玄箱PROの標準ファーム上で言い換えると次のようにすればOKです。

~ # nvram -c set bootargs 'console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09'
>nvram_set:bootargs = console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09
~ # nvram -c set bootcmd 'ide reset; ext2load ide 0:1 $(default_kernel_addr) /$(kernel); bootm $(default_kernel_addr)'
>nvram_set:bootcmd = ide reset; ext2load ide 0:1 $(default_kernel_addr) /$(kernel); bootm $(default_kernel_addr)
~ # nvram -c set nand_boot no
>nvram_set:nand_boot = no
~ # reboot


蛇足かもしれませんが、nvram -c setで設定した環境変数は自動的にsaveenvされますので、間違えたら未来永劫戻ってきません(笑)。

これで再度telnetすると

Debian GNU/Linux 4.0
KUROBOX-PRO login:


と表示されていると思います。
telnetにrootでのログインはできないため、前回設定した一般ユーザの名前(例ではkuroとした)とパスワードを入力すれば

Last login: Thu Sep 6 00:48:18 2007 from xp on pts/0
Linux KUROBOX-PRO 2.6.12.6-arm1 #2 Thu Feb 8 15:00:20 JST 2007 armv5tejl

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
No directory, logging in with HOME=/
kuro@KUROBOX-PRO:/$


となります。
root作業する場合はsudoなりsuなりで。

まだまだ未完成ですが、ひとまずはetch化ということです。
別窓 | memo:Debian化 | コメント:0 | トラックバック:0
∧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∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。