トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

UNIX/Linux Knowledge

このページの文章は現在鋭意作成中です

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 を可能にする

参考:Ellinikonblue.com Weblog「 HS-DHGL Hack #2: HS-DHGL 側の下準備」

 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 ファイルの変更

参考:Ellinikonblue.com Weblog 「 HS-DHGL Hack #1: mkimage でいきなりはまる」

 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/sda183ext3256MB
//dev/sda283xfs2.5GB
(swap)/dev/sda382(swap)256MB
(拡張領域)/dev/sda45(拡張領域)残り全部
/mnt/dev/sda583xfs100GB
/home/dev/sda683xfs残り全部
(総容量 300GB の HDD を実際には使用しました)

KNOPPIX で debootstrap

参考:Ellinikonblue.com Weblog 「 HS-DHGL Hack #3: KNOPPIX で HDD の仕込み作業」

 上記で用意した 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 化を実施したときにダウンロードしたファイルで、最新版でない可能性がありますので、適宜最新版をダウンロードしてください。

パッケージ名ダウンロードするファイル(参考)説明
debootstrapdebootstrap_0.2.45-0.2_arm.debDebian GNU/Linux の最低限の実行環境を構築するコマンド
wgetwget_1.9.1-12_arm.debコマンドプロンプトから HTTP プロトコルでデータを取得するコマンド
binutilsbinutils_2.15-6_arm.debUNIX の基本的なコマンドセット
libssllibssl0.9.7_0.9.7e-3sarge4_arm.debSSL 用のライブラリ。wget の実行に必要

 以上ダウンロードしたファイルはすべてと Debian GNU/Linux 起動用 initrd.buffalo を /mnt/debinst/tmp にコピーしておきます。以上で KNOPPIX 上での作業は終了です。

HS-DHGL/LS-GL で debootstrap

参考:Ellinikonblue.com Weblog 「 HS-DHGL Hack #4: いよいよ二度目の bootstrap 」

 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

起動環境の整備

参考:Ellinikonblue.com Weblog 「 HS-DHGL Hack #5: Debian 起動環境の整備」

 次に上記で 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 イメージのバックアップ

参考:Ellinikonblue.com Weblog「 HS-DHGL Hack #0: HDD 換装」

 これから行う HS-DHGL/LS-GL を Debian 化 は、当然のことながらメーカーが推奨する使い方ではありません。バックアップしたところで、本体をあけたところでサポート対象外ですが、最悪、元に戻せる準備はしておいた方が良いと思います。

 ということで、下記の工場出荷時のパーティションから /dev/sda1, /dev/sda2, /dev/sda6 を保存しておいてください。KNOPPIX に含まれている Partition Image を使うと簡単にパーティションごとバックアップがとれます。

参考:@IT Linux Square > Linux Tips Index「パーティションを丸ごとバックアップするには」

【参考 2 】 HS-DH250GL の工場出荷時のパーティション設定

 リストアの際のパーティションわりの参考にしてください。

デバイスStartEndBlocksIDファイルシステム
/dev/sda112520078183ext3
/dev/sda2268749801583xfs
/dev/sda488304012434972055(拡張領域)
/dev/sda58810413652182(swap)
/dev/sda61053040124336062183xfs
( HS-DH250GL の場合。デバイス名は変換アダプタなどを用いて USB 接続し /dev/sda として認識された場合です。)

リンク集



*1 それ故、すべての作業は root 権限で行われますので細心の注意を払って実施してください。
*2 このときの戻し作業の前に /mnt/debinst/boot 以下のファイルを KNOPPIX を起動した PC 側にコピーしておくと、あとのハック本作業での手間が一つ減ります :)
*3 最新版ではありません。最新版でのコンパイルは研究中…
*4 KNOPPIX であれば、別途インストールしなくても bzip2 をふつうに展開できます
*5 chroot した時点で / が変わっています
*6 これらのファイルをへたに設定すると、HDD をつなぎなおしたときにアクセスできなくなる可能性があるので注意が必要です。そのためここでは記述例は書きません
*7 ファームを掘ったら出てくるかもしれませんが…

© 2004-2011 Ellinikonblue.com All Rights Reserved.