| このページの文章は現在鋭意作成中です |
HS-DHGL/LS-GL を Debian 化する †
用意するもの †
- LinkStation HS-DHGL もしくは LS-GL 本体
これがなくては始まりません
- KNOPPIX
DVD 版である必要はなく、CD 版でかまいません。HDD のパーティション割り、最初の debootstrap の実行などを行います。 - 上記の KNOPPIX を起動できる PC
USB が 1port 以上あって、インターネットに接続できる必要があります。 - Debian 化する HDD
今のところ、HS-DHGL/LS-GL に出荷時搭載されている HDD はどうしても必要です。もう一台別に SATA(Serial ATA) I/F の HDD を用意してください。 - SATA/USB 変換アダプタ
HS-DHGL/LS-GL は SATA の HDD を搭載しており、これを USB で KNOPPIX が動作する PC や HS-DHGL/LS-GL に接続する必要があります。 - telnet 接続可能な PC 端末
上記の KNOPPIX を起動できる PC と同一でもかまいません。
HS-DHGL/LS-GL へ telnet を可能にする †
HS-DHGL/LS-GL へ Debian をインストールするにあたり、まず HS-DHGL/LS-GL 本体へ telnet でログインできるようにする必要があります。
HS-DHGL/LS-GL 本体から出荷時に搭載されている HDD を取り出して、SATA/USB 変換アダプタなどを使用して、KNOPPIX を起動した PC に接続してください。これより以下 KNOPPIX で行う作業はすべて通常のコンソールではなくルートコンソール で行ってください*1。
KNOPPIX を起動した PC で /mnt/debinst ディレクトリを作成し、ここに USB 接続した HDD ( /dev/sda として認識されたものとします)の /dev/sda2 をマウントし、さらに/mnt/debinst/boot ディレクトリを作成し、ここに /dev/sda1 をマウントしてから、以下の手順を実施します。
/etc/init.d/rcS の編集 †
KNOPPIX を起動した PC に HS-DHGL/LS-GL 本体から摘出した HDD を USB で接続し、/mnt/debinst ディレクトリにマウントしたところで、/mnt/debinst/etc/init.d/rcS を編集します。
# /usr/sbin/telnetd
というようにコメントアウトしてある行がありますから、これを有効にしてあげると telnetd が( HS-DHGL/LS-GL に戻して起動すれば)起動するようになります。ただし、root アカウントのパスワードは不明ですから、HS-DHGL/LS-GL へ戻しての起動はこれを一度削除してからにしてください。
root パスワードの削除 †
/etc/shadow の編集
次に root パスワードのを削除します。/mnt/debinst/etc/shadow を編集します。
root: (パスワードが暗号化された文字列) :11009:0:99999:7:::
となっている行がありますので、これを
root::11009:0:99999:7:::
と編集してやると、root パスワードが削除されます。
root パスワードの再設定 †
KNOPPIX を起動した PC から USB 接続した HDD をはずし、HS-DHGL/LS-GL に戻してやり起動してやります*2。
HS-DHGL/LS-GL に telnet すると root ユーザでパスワード認証なしでログインできるはずですので、ログインしてからパスワードを設定しておいてください。
initrd.buffalo ファイルの変更 †
initrd.buffalo ファイルは、 HS-DHGL/LS-GL が起動してから RAM ディスク上で展開され、実際に Linux カーネルが起動して通常のブートシーケンスにはいるまでの挙動を決めているファイルで、当然のことながら、初期の状態では HS-DHGL/LS-GL 用の標準ファームウェアの起動のための準備を行いますので、Debian GNU/Linux のディストリビューションのブートシーケンスを起動するには余分なことをしすぎます。
このため、このファイルを編集する必要がありますが、その前に準備しなければならないものがあります。
mkimage のコンパイル †
KNOPPIX を起動した PC で 「 U-Boot プロジェクトのページ」 から v1.1.4 のアーカイブ (u-boot-1.1.4.tar.bz2*3 ) をダウンロードします。
/tmp あたりにダウンロードしたアーカイブを保存して、/tmp ディレクトリに移動して以下のコマンドを実行して展開します *4。
tar jxvf u-boot-1.1.4.tar.bz2
展開してできたディレクトリに移動して、以下のコマンドを実行します。
export TOPDIR=`pwd` cd tools make mkimage
コンパイル自身はほぼ一瞬で終わり、実行ファイルとして mkimage ができますので、これを使用して initrd.buffalo を展開して編集します。
Debian GNU/Linux 起動用 initrd.buffalo ファイルの作成 †
HS-DHGL/LS-GL の HDD から /boot ディレクトリにある initrd.buffalo と言うファイルを KNOPPIX を起動した PC の /tmp ディレクトリにコピーします。先ほど作成した mkimage の実行ファイルもここにコピーしておきます。
次に以下のコマンドを実行して initrd.buffalo を展開します。
dd if=initrd.buffalo of=initrd.gz bs=64 skip=1 gunzip initrd.gz mkdir /tmp/root mount -o loop initrd /tmp/root
以上のコマンドを実行すると initrd の展開された中身が、/tmp/root ディレクトリ以下に見えるようになりますので、 /tmp/root/linuxrc を以下のように編集します。
#!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin echo "---- in modified linuxrc ---" umount -a exit 0
以上の編集が終了してから、initrd を以下のコマンドを実行して再び圧縮します。
cd /tmp umount /tmp/root gzip initrd ./mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initrd -d initrd.gz initrd.buffalo
Debian 化する HDD の準備 †
次に最終的に Debian 化して使う HDD の下準備をします。
KNOPPIX を起動した PC に SATA/USB 変換アダプタなどを使用して、新品の HDD を接続します。このとき、USB 接続した HDD が /dev/sda として認識されたものとして、Debian 化する HDD を準備する手順を説明します。
Debian をインストールする HDD のパーティション構成 †
Debian をインストールする HDD にパーティションを作成します。
以下に、これから Debian をインストールする HDD のパーティション構成の例を示します。Debian 化の手順はこのパーティション構成を前提としています。
| 最終マウントポイント | 最終デバイス名 | ID | ファイルシステム | 容量 |
| /boot | /dev/sda1 | 83 | ext3 | 256MB |
| / | /dev/sda2 | 83 | xfs | 2.5GB |
| (swap) | /dev/sda3 | 82 | (swap) | 256MB |
| (拡張領域) | /dev/sda4 | 5 | (拡張領域) | 残り全部 |
| /mnt | /dev/sda5 | 83 | xfs | 100GB |
| /home | /dev/sda6 | 83 | xfs | 残り全部 |
KNOPPIX で debootstrap †
上記で用意した HDD をマウントします。
mkdir /mnt/debinst mount /dev/sda2 /mnt/debinst mount /dev/sda1 /mnt/debinst/boot mount /dev/sda5 /mnt/debinst/mnt mount /dev/sda6 /mnt/debinst/home
その上で一度目の debootstrap を実行します(下記のコマンドは sarge の実行環境を作る際のコマンドです)。
/usr/sbin/debootstrap --arch arm sarge /mnt/debinst http://http.us.debian.org/debian
エラーで終了しますが、それでかまいません。
二度目の debootstrap に必要なファイルのダウンロード †
HS-DHGL/LS-GL の Debian 化するためには、debootstrap を最低二度実行する必要があります。二度目の debootstrap を実行するために必要なパッケージをあらかじめダウンロードしておいて、先に用意した HDD にコピーしておきます。
ダウンロードするファイルは ARM 用のパッケージであることに注意してください。また「ダウンロードするファイル(参考)」として記載してあるパッケージは、当方で Debian 化を実施したときにダウンロードしたファイルで、最新版でない可能性がありますので、適宜最新版をダウンロードしてください。
| パッケージ名 | ダウンロードするファイル(参考) | 説明 |
| debootstrap | debootstrap_0.2.45-0.2_arm.deb | Debian GNU/Linux の最低限の実行環境を構築するコマンド |
| wget | wget_1.9.1-12_arm.deb | コマンドプロンプトから HTTP プロトコルでデータを取得するコマンド |
| binutils | binutils_2.15-6_arm.deb | UNIX の基本的なコマンドセット |
| libssl | libssl0.9.7_0.9.7e-3sarge4_arm.deb | SSL 用のライブラリ。wget の実行に必要 |
以上ダウンロードしたファイルはすべてと Debian GNU/Linux 起動用 initrd.buffalo を /mnt/debinst/tmp にコピーしておきます。以上で KNOPPIX 上での作業は終了です。
HS-DHGL/LS-GL で debootstrap †
KNOPPIX で起動した PC で仕込んだ HDD を HS-DHGL/LS-GL に USB で接続します。接続した HDD は、 HS-DHGL/LS-GL に /dev/sdb として認識されることに注意してください。
USB 接続した HDD を以下のようにしてマウントします。
mkdir /mnt/debinst mount /dev/sdb2 /mnt/debinst mount /dev/sdb1 /mnt/debinst/boot mount /dev/sdb5 /mnt/debinst/mnt mount /dev/sdb6 /mnt/debinst/home
その上で、以下のように /mnt/debinst に chroot し、 (/mnt/debinst)/tmp/*5 に仕込んであったパッケージをすべて展開します。
chroot /mnt/debinst dpkg -i /tmp/*.deb
次に二度目の debootstrap を /mnt/debinst 以下に対して行います。
mkdir /mnt/debinst /usr/sbin/debootstrap --arch arm sarge /mnt/debinst http://http.us.debian.org/debian
今回はエラーなく進んでいくはずです。使用しているネットワーク環境にもよりますが、光回線でもそこそこ時間が必要です。
すべて終了した時点で chroot から抜け( exit )て、今度は二度目の debootstrap で作った環境と、一度目の debootstrap で作成した環境を入れ替えます。このときに /mnt/debinst/tmp 以下に先ほど作成した initrd.buffalo がありますので、これを移動することを忘れないでください。
cd /mnt/debinst mv mnt xxx mv /boot/* xxx/tmp mv tmp/* xxx/tmp rm -fr bin boot dev etc home lib proc root sbin sys tmp usr var mv xxx/debinst/* . rm -fr xxx
起動環境の整備 †
次に上記で debootstrap して作成した環境に対して、ちゃんと起動するように環境を修正していきます。
Debian GNU/Linux のための設定 †
以下のファイルを順に修正していきます。/mnt/debinst 以下のファイルを修正していきますので、すべての作業は
chroot /mnt/debinst
として行ったほうが混乱が少ないでしょう。以下の説明でもその前提で、以下ではファイル名を指定しています。
/etc/fstab
今、USB 接続している HDD から起動したときに自動マウントされるように、以下のように変更しておきます。
# /etc/fstab: static file system information /dev/sda2 / xfs defaults,noatime 0 0 proc /proc proc defaults 0 0 none /dev/pts devpts gid=103,mode=0622 0 0 /dev/sda3 swap swap defaults 0 0 /dev/sda1 /boot ext3 defaults,noatime 0 1 /dev/sda5 /mnt xfs defaults,noatime 0 2 /dev/sda6 /home xfs defaults,noatime 0 2
/etc/network/interfaces
Debian 化した HS-DHGL/LS-GL のアドレスを 192.168.1.10 とする時の例です。
auto lo eth0 iface lo inet loopback iface eth0 inet static address 192.168.1.10 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1
/etc/hosts
127.0.0.1 localhost.localdomain localhost # 192.168.1.10 hsdhgl hsdhgl.yourdomain.com
/etc/hostname
hsdhgl
/etc/default/rcS
:(略) UTC=no :(略)
/etc/apt/sources.list
# Security deb http://security.debian.org/ stable/updates main contrib # Stable deb ftp://ftp.dti.ad.jp/pub/Linux/debian stable main contrib deb ftp://ftp.dti.ad.jp/pub/Linux/debian-non-US stable/non-US main contrib # Sources deb-src ftp://ftp.dti.ad.jp/pub/Linux/debian stable main contrib deb-src ftp://ftp.dti.ad.jp/pub/Linux/debian-non-US stable/non-US main contrib
/etc/default/halt
HALT=halt
以上が基本的なファイルの修正です。気になる方は /etc/hosts.deny, /etc/hosts.allow*6 なども好みで設定してください。
次に tzconfig を実行してタイムゾーンの設定、あとルートパスワードの設定、一般ユーザの作成、最後に
apt-get install telnetd
として telnetd をインストールすることを忘れないでください。HDD をつなぎなおして起動したときに、HS-DHGL/LS-GL にアクセスする手段がなくなります。わかる方はもちろん telnetd でなくとも SSH 等でもかまいません。
HS-DHGL/LS-GL の固有の設定 †
さてここからが最後の胆になる部分です。HS-DHGL/LS-GL 固有の設定をしていきます。
miconapl 実行環境の準備 †
HS-DHGL/LS-GL は miconapl と言うプログラムによって、その固有のハードウェアリソースを制御しています。これを実行するためには特定の実行環境(ライブラリ)が必要で、この環境は通常の Debian GNU/Linux に含まれるものとは異なるものです。 そこで、このプログラムだけを実行する環境を用意してやり擬似的に Debian GNU/Linux から実行できるようにしてやる必要があります。
一度 chroot を exit してから以下のようにコマンドを順次実行して、 miconapl を実行する環境を整えていきます。
# mkdir /mnt/debinst/usr/local/buffalo # cd / # tar cpf - lib/ld-* lib/libc-2.3.6.so lib/libc.so.6|(cd /mnt/debinst/usr/local/buffalo/; tar xvpf -) # tar cpf - usr/local/lib/libbuffalo_bin.* |(cd /mnt/debinst/usr/local/buffalo/; tar xvpf -) # mkdir /mnt/debinst/usr/local/buffalo/etc # echo /usr/local/lib > /mnt/debinst/usr/local/buffalo/etc/ld.so.conf # tar cpf - sbin/ldconfig|(cd /mnt/debinst/usr/local/buffalo; tar xvpf -) # chroot /mnt/debinst/usr/local/buffalo ldconfig # tar cpf - usr/local/sbin/miconapl |(cd /mnt/debinst/usr/local/buffalo/; tar xvpf -) # tar cpf - dev/ttyS1 dev/null |(cd /mnt/debinst/usr/local/buffalo; tar xvpf -) # mkdir /mnt/debinst/usr/local/buffalo/var # mkdir /mnt/debinst/usr/local/buffalo/var/lock
次に /usr/local/sbin/miconapl を実行すると、自動的に chroot して miconapl の実行ファイルを実行するようにスクリプトを用意します。
# echo 'chroot /usr/local/buffalo $0 $*' > /mnt/debinst/usr/local/sbin/miconapl # chmod +x /mnt/debinst/usr/local/sbin/miconapl
/etc/init.d/kernelmon †
/usr/local/sbin/Fand †
HS-DHGL/LS-GL の場合、ファンコントロールのための仕組みは自分で用意しなければなりません*7。玄箱 Pro があれば、そのファームからスクリプトを奪ってくれば動くはずですが、ここにそれを丸のまま掲載するわけにはいかないということもあるので、当方で以下のようなスクリプトをオリジナルで作成しました。
#!/bin/sh
PATH=$PATH:/usr/local/sbin
export PATH
CONF_FILE=/etc/fan.prof
miconapl -a fan_set_speed full
[ -f ${CONF_FILE} ]||exit 0
while :
do
sleep 60
TEMP=`miconapl -a temp_get|grep temp=|sed -n -e "s/.*=//p"`
SSPD=`miconapl -a fan_set_speed|grep fan_speed=|sed -n -e "s/.*=//p"`
case ${SSPD} in
stop)
H_LIMIT=`grep ${SSPD} ${CONF_FILE}|awk '{print $3}'`
if [ ${TEMP} -gt ${H_LIMIT} ] ; then
miconapl -a fan_set_speed slow
fi
;;
slow)
L_LIMIT=`grep ${SSPD} ${CONF_FILE}|awk '{print $2}'`
H_LIMIT=`grep ${SSPD} ${CONF_FILE}|awk '{print $3}'`
if [ ${TEMP} -lt ${L_LIMIT} ] ; then
miconapl -a fan_set_speed stop
elif [ ${TEMP} -gt ${H_LIMIT} ] ; then
miconapl -a fan_set_speed fast
fi
;;
fast)
L_LIMIT=`grep ${SSPD} ${CONF_FILE}|awk '{print $2}'`
H_LIMIT=`grep ${SSPD} ${CONF_FILE}|awk '{print $3}'`
if [ ${TEMP} -lt ${L_LIMIT} ] ; then
miconapl -a fan_set_speed slow
elif [ ${TEMP} -gt ${H_LIMIT} ] ; then
miconapl -a fan_set_speed full
fi
;;
full)
L_LIMIT=`grep ${SSPD} ${CONF_FILE}|awk '{print $2}'`
if [ ${TEMP} -lt ${L_LIMIT} ] ; then
miconapl -a fan_set_speed fast
fi
;;
*)
;;
esac
done
さらに起動時スクリプトとして、/etc/init.d/FanControl.sh として以下のような内容のファイルを用意します。
#!/bin/sh
start(){
if [ -x /usr/local/sbin/Fand ] ; then
/usr/local/sbin/Fand > /dev/null &
fi
}
stop(){
killall Fand
echo -n "Stopping a fan ."
/usr/local/sbin/miconapl -a fan_set_speed stop
COUNTER=10
while [ ${COUNTER} -gt 0 ]
do
sleep 1
echo -n "."
COUNTER=$((${COUNTER} - 1))
done
echo ""
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage : FanController.sh {start|stop|restart}"
;;
esac
これに対して、起動時に実行されるようにリンクを引きます。
# cd /etc/init.d/ # ln -s ../init.d/FanControl.sh /etc/rc0.d/K81FanControl.sh # ln -s ../init.d/FanControl.sh /etc/rc6.d/K81FanControl.sh # ln -s ../init.d/FanControl.sh /etc/rcS.d/S81FanControl.sh
最後に設定ファイルとして /etc/fan.prof として以下のファイルを作成しておけば、HDD の温度次第でファンの動作速度が変わります。
stop - 30 slow 30 40 fast 40 50 full 50
【参考 1 】 HS-DHGL/LS-GL の出荷時 HDD イメージのバックアップ †
これから行う HS-DHGL/LS-GL を Debian 化 は、当然のことながらメーカーが推奨する使い方ではありません。バックアップしたところで、本体をあけたところでサポート対象外ですが、最悪、元に戻せる準備はしておいた方が良いと思います。
ということで、下記の工場出荷時のパーティションから /dev/sda1, /dev/sda2, /dev/sda6 を保存しておいてください。KNOPPIX に含まれている Partition Image を使うと簡単にパーティションごとバックアップがとれます。
【参考 2 】 HS-DH250GL の工場出荷時のパーティション設定 †
リストアの際のパーティションわりの参考にしてください。
| デバイス | Start | End | Blocks | ID | ファイルシステム |
| /dev/sda1 | 1 | 25 | 200781 | 83 | ext3 |
| /dev/sda2 | 26 | 87 | 498015 | 83 | xfs |
| /dev/sda4 | 88 | 30401 | 243497205 | 5 | (拡張領域) |
| /dev/sda5 | 88 | 104 | 136521 | 82 | (swap) |
| /dev/sda6 | 105 | 30401 | 243360621 | 83 | xfs |
リンク集 †
- LinkStation /玄箱(くろばこ)をハックしよう
- @IT Linux Square
- Partition Image
- SourceForge.net U-Boot プロジェクトのページ
- Ellinikonblue.com Weblog
*1 それ故、すべての作業は root 権限で行われますので細心の注意を払って実施してください。
*2 このときの戻し作業の前に /mnt/debinst/boot 以下のファイルを KNOPPIX を起動した PC 側にコピーしておくと、あとのハック本作業での手間が一つ減ります
*3 最新版ではありません。最新版でのコンパイルは研究中…
*4 KNOPPIX であれば、別途インストールしなくても bzip2 をふつうに展開できます
*5 chroot した時点で / が変わっています
*6 これらのファイルをへたに設定すると、HDD をつなぎなおしたときにアクセスできなくなる可能性があるので注意が必要です。そのためここでは記述例は書きません
*7 ファームを掘ったら出てくるかもしれませんが…
