LS-VLにDebian(Squeeze)をインストールする話

はじめに

新しい「おもちゃ」としてLS-V500Lを手に入れたので、 そのLS-V500Lで「遊ぶ」ためのメモを書くことにする。

この「遊ぶ」というのは、いろいろ設定したり導入したり 改造したりしたりすることで、 このメモで書くのはそのための最初の一歩となる 標準的な?Debianを動かすための方法である。 そのため、ネットワークにつながったLinuxが動くということ以外には、 何もできないシステムができあがるので、 それ以上については各自でがんばって欲しい。

それから、ここで書く中身は LS-XHLの場合と だいたい同じである、と言えばそこで終わりである。

分解

LS-XHLとほぼ変わらない。 上面に3箇所、背面に3箇所、下面のシールに下に2箇所、 突っつくところがあるので、これらを1.5mm程度押しながら、 二枚貝を開くように背面を開く。 (あるいは開くように背面の境目に力を加えながら、前記の突っつきポイントを突っつく。)

既にDebianの動くARMマシンがある場合

既に、SheevaPlugのようなDebian(Linux)の動いている ARMマシンを所有している場合、 debootstrapを使うのが簡単と思われる。

準備するものは以下の通りである。

手順は以下の通りである。

  1. LS-VLに入っていたHDDをUSB-HDDアダプタを経由してARM機につなぐ。
  2. カーネルとモジュール群を取り出しておく

    (あらかじめ"cat /proc/partitions"などとして、つないだHDDが /dev/sdbに割り当てられたことを確認しておくこと)

    # mount /dev/sdb1 /mnt
    # cp -a /mnt/uImage.buffalo /tmp
    # umount /mnt
    # mount /dev/sdb2 /mnt
    # tar zcf /tmp/lsvl-modules.tgz -C /mnt/lib/modules .
    # umount /mnt
    
  3. LS-VLのHDDをARM機から外す
  4. 中身が空のinitrdを(ダウンロードして)用意する
    # cd /tmp
    # wget http://tyche.pu-toyama.ac.jp/~a-urasim/lsvl/data/initrd.buffalo
    
  5. 壊しても良いHDDをUSB-HDDアダプタを経由して、ARM機につなぐ。
  6. ARM機上で、partedを用いてHDDのパーティション設定をする。

    (あらかじめ"cat /proc/partitions"などとして、つないだHDDが /dev/sdbに割り当てられたことを確認しておくこと)
    (partedが無い場合は"apt-get install parted"などとして インストールしておきましょう)

    # parted /dev/sdb mklabel gpt
    # parted /dev/sdb mkpart primary 0 100
    # parted /dev/sdb mkpart primary 100 10000
    

    ("parted /dev/sdb mklabel gpt"でエラーが出る場合は、 "parted /dev/sdb mklabel"と打ってエンターし、その後に出る "New disk label type?"みたいなのに対し、"gpt"と打つと良い。)

  7. 作ったパーティションをフォーマットする
    # mke2fs -I 128 -j /dev/sdb1
    # mke2fs -j /dev/sdb2
    
  8. 一つ目のパーティションにカーネルとinitrdを放り込む
    # mount /dev/sdb1 /mnt
    # cp -a /tmp/uImage.buffalo /mnt
    # cp -a /tmp/initrd.buffalo /mnt
    # umount /mnt
    
  9. 二つ目のパーティションでdebootstrapする

    (debootstrapは"apt-get install debootstrap"で<以下略>)

    # mount /dev/sdb2 /mnt
    # debootstrap squeeze /mnt
    
  10. 保存しておいたカーネルモジュール群を展開する
    # tar zxf /tmp/lsvl-modules.tgz -C /mnt/lib/modules
    
  11. ネットワークの設定をする

    "/mnt/etc/network/interfaces"に以下の記述を加える。

    iface lo inet loopback
    auto lo
    
    iface eth0 inet dhcp
    auto eth0
    
    (LS-XHLと異なり、eth1ではなく、普通にeth0であることに注意)
  12. パスワードの設定とsshの導入をする
    # chroot /mnt
    # passwd
    # apt-get update
    # apt-get install ssh
    # exit
    
  13. 今まで設定してきたLS-VL用のルートファイルシステムをアンマウントする。
    # umount /mnt
    
  14. LS-VLの基板と、ここまでで設定した(壊して良い)HDDをつなぎ、 適当な何かに祈った後、ネットワークに接続して電源を投入する。

    しばらくしてから、DHCPサーバのログを見ると、 取得されたIPアドレスが分かるため、 そこにsshを使ってログインすればよい。

  15. ログイン後の作業

    "apt-get install udev"とかしてudevを入れるとか、 別のユーザを作ってリモートログインできるようにしてから、 /etc/ssh/sshd_configの中のPermitRootLoginをnoにするとか、 好きなようにすると良い。

PCからインストールする場合

手持ちのLinux入りPCがある場合、 そこからインストールすることも可能である。

ただし、ここでの説明は私ビルドのカーネルを使うことになるので、 それ以外を希望するなら適当にがんばってください。

用意するものは以下の通り。

手順は以下の通り。

  1. PCに、壊して良いHDDをつなぐ

    USB-HDDアダプタを介して、Linux-PCに壊して良い HDDをつなぎます。つないだ後、"cat /proc/partitions"などとして つないだHDDのデバイスが何であるかを確かめること。 ここでは、"sdb"であるとして記述しますが、 そのあたりは適当に調整してください。

    注意: 最近の2TBクラスのHDDは4096バイト/セクタである。 しかし、ls-vlのブートローダは512バイト/セクタでの アクセスを行うようである。 一方、昔のSATA-USB変換ケーブルは中身が4096バイト/セクタのHDDであっても 512バイト/セクタとPCに見せていたが、最近の変換ケーブルは、 HDDが4096バイト/セクタだと PCにも4096バイト/セクタと見せるようである。
    そのため、最近の2TクラスのHDDを最近のSATA-USB変換ケーブルでPCにつなぎ、 パーティションの設定を行うと、 ls-vlでブートできないHDDが出来上がってしまう。

    # fdisk -l /dev/sdb
    

    などと打って、セクタサイズが512バイト/セクタとなっていることを確かめてから、 次に進むとよいと思われる。

  2. HDDのパーティション作成とフォーマット

    以下のようにして、HDDの設定をする。 パーティションサイズは適当なので好きに調整して構わない。

    # parted /dev/sdb mklabel gpt
    # parted /dev/sdb mkpart primary 0 100
    # parted /dev/sdb mkpart primary 100 10000
    # mke2fs -I 128 -j /dev/sdb1
    # mke2fs -j /dev/sdb2
    
    先ほどの、4096バイト/セクタの問題の有無を再確認するため、
    # parted /dev/sdb print
    
    などと打って、セクタサイズが512であることを確かめるとよいと思われる。
  3. uImage.buffaloとinitrd.buffaloの取得と配置

    LS-VL用のカーネル(2.6.38)空のラムディスクファイルを ダウンロードして、最初のパーティションに配置する。

    # mount /dev/sdb1 /mnt
    # cd /mnt
    # wget http://tyche.pu-toyama.ac.jp/~a-urasim/lsvl/data/uImage.buffalo
    # wget http://tyche.pu-toyama.ac.jp/~a-urasim/lsvl/data/initrd.buffalo
    # cd /
    # umount /mnt
    
  4. 基本的なファイルの展開

    先ほど取得したカーネル用のカーネルモジュールを含む、 各種のシステムファイルをまとめたもの を取得し、二つ目のパーティションに展開する。 これに含まれているファイルのソースはこのあたりに置いてある。

    # cd /tmp
    # wget http://tyche.pu-toyama.ac.jp/~a-urasim/lsvl/data/base-squeeze-20110320.tar.bz2
    # mount /dev/sdb2 /mnt
    # tar jxf ./base-squeeze-20110320.tar.bz2 -C /mnt
    # umount /mnt
    
  5. 2012年3月までうっかり/etc/udev/rules.d/70-persistent-net.ruleに 手元のls-vlのeth0の記述を入れたまま配布していたので、 以前のファイルを取っていった方はそのファイルを削除してしてください。 起動の際にちゃんとしたものが自動生成されるはずです。 (現在はその辺は修正済み)

  6. つなぎ直して起動

    PCより設定したHDDを取り外し、LS-VLに直接つなぎます。

    後は、適当な何かに祈った後、電源を入れてください。しばらくするとDHCPより IPアドレスを取得し、SSHでリモートログインできるようになっているはずである。 今回のシステムファイルをまとめたものに関しては、 IDが"root"、パスワードが"lsvladmin"でログインできるはずである。

  7. その他設定

    ログイン後はパスワードの変更とsshのホスト鍵の変更を行うべきだろう。 パッケージのアップグレードも忘れずに。

    # passwd
    # rm /etc/ssh/ssh_host_*
    # /var/lib/dpkg/info/openssh-server.postinst configure
    # apt-get update
    # apt-get upgrade
    

    またこのほかに、udevやその他欲しいパッケージの導入を行っても良いだろう。

カーネルのコンパイル

LS-VLはLS-XHLとほとんど同じ作りであるが、 CPUも新しく、またポートの構成も異なるため、 カーネルはLS-VL用のものが必要となる。

(株)Buffalo社のサイトには、GPLに従って、 カーネルのソースが公開されており、 ".config"も付いているため、 それをコンパイルすればLS-VL用のカーネルが生成できる。

しかし、ここではlinux-2.6.38からLS-VL用の カーネルを作る方法について、記すことにする。

  1. カーネルパッケージ生成の準備
    # apt-get install kernel-package
    # apt-get install libncurses5-dev
    # apt-get install uboot-mkimage
    

    (既に導入してあるなら不要)

  2. カーネルの取得と展開
    # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2
    # tar jxf linux-2.6.38.tar.bz2
    

    (カーネルソースはミラーサイトから取ってきた方が良いかも)

  3. LS-VL用パッチの取得と適用
    # wget http://tyche.pu-toyama.ac.jp/~a-urasim/lsvl/data/kernel-2.6.38-lsvl.patch
    # cd linux-2.6.38
    # patch -p1 < ../kernel-2.6.38-lsvl.patch
    
  4. カーネルの設定
    # make kirkwood_defconfig
    略
    # make menuconfig
    略
    

    menuconfigの時には以下の設定を行うこと。

    後は好みでiptablesとかUSB soundとか設定すると良い。

  5. コンパイルとパッケージ作成
    # fakeroot make-kpkg clean
    # fakeroot make-kpkg --initrd --cross_compile - --revision=custom.0.1 kernel_image
    

    これで、一つ上の階層に、 "linux-image-2.6.38_custom.0.1_armel.deb"と言うファイルができているはずである。 この中にカーネルモジュール等が入っている。

  6. u-boot用カーネルの生成

    LS-VLではu-bootを使っているため、 カーネルのファイルもそれ用を用意する必要がある。

    # make uImage
    

    これで、"./arch/arm/boot/uImage"というファイルが生成されているはず。 これを起動用パーティションに、"uImage.buffalo"という名前で置けばよい。

その他

u-bootの中身を変えたのか、ハードウェアに改良があるのか分からないが、 電源OFF状態での電力消費がほとんど無くなっている。 これが正常と言えば正常なのだけど、 LS-XHLの時は電源OFFのモードで数Wは消費していたので良いことだと思う。 もしかするとLS-XHLもfirmwareの更新とやらによって 改善するのかもしれないが、 分解されたLS-XHLはへんてこ用途のtransparent proxy serverとして 改造してしまったので、もう試すことはできない。

apt-get時にsignatureが無効と言われる場合

手持ちのキーが古いらしいので、 とりあえず、以下のようなコマンドでファイルを消せば、 次に進めるようになる。正解はよく知らない。

rm -f /var/lib/apt/lists/ftp.us.debian.org*

その他2

久しぶりに動かしてみると、 起動はするのだがDHCPでIPアドレスを取りにいかなくなったので、 そのあたりの話を LS-VL(LS-XHL)上のDebianでDHCPクライアントとして失敗する話 に書いた。

(2011/03/21 作成)
(2012/03/15 /etc/udev/rules.d/70-persistent-net.ruleについて追記)
(2012/05/23 4096バイト/セクタの問題について追記)
(2015/04/01 DHCPクライアントの問題について追記)