玄柴に Debian Squeeze をインストールする

前回インストールした時には文章を残さなかったので、2回目の今日はちゃんと書く。 いくつか確認のために調べつつ、失敗と試行錯誤があって一日かかりました。

16GB SD カードの mkfs.ext4 は Notebook PC でやりました。実機(カーネル: 2.6.32-5-kirkwood (Debian 2.6.32-31))ではできませんでした。 8GB miniSD カードをアダプタつけた方は実機でも mkfs できました。

インストール対象は、昨年(2010年) FSIJ で購入した Kuro Sheeva です。

U-boot を書き込んで更新する

入っている U-boot が古いので更新します。 Setting Up OpenOCD Under Linux を参照のこと。

古い U-boot 自身から更新する方法もありますが、こちらは USB が動かなくて TFTP のサーバーを用意することになるので、やめ。

新しめの OpenOCD が squeeze にあるので、これを使って書き込むこめます。

まず、u-boot のバイナリを取ってきます。Martin Michlmayr さんのところから拝借しました。 こちら: u-boot.bin-3.4.19

Sheeva に電源を入れて、PC に USB でつなぎます。僕は OpenOCD を使うため に /etc/modprobe.d/blacklist.conf に

#
blacklist ftdi_sio

と書いてあります。そうでない場合は、rmmod ftdi_sio しましょう。

書き込みは、こんな感じです(openocd は squeeze のではありません):

$ openocd -f board/sheevaplug.cfg -c init -c sheevaplug_reflash_uboot -c exit
Open On-Chip Debugger 0.5.0-dev-00629-g778b789-dirty (2010-12-02-17:53)
Licensed under GNU GPL v2
For bug reports, read
      http://openocd.berlios.de/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
2000 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
adapter_nsrst_delay: 200
jtag_ntrst_delay: 200
dcc downloads are enabled
Warn : use 'feroceon.cpu' as target identifier, not '0'
sheevaplug_load_uboot
Info : clock speed 2000 kHz
Info : JTAG tap: feroceon.cpu tap/device found: 0x20a023d3 (mfg: 0x1e9, part: 0x0a02, ver: 0x2)
Info : Embedded ICE version 0
Info : feroceon.cpu: hardware has 1 breakpoint/watchpoint unit
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x000000d3 pc: 0xffff0000
MMU: disabled, D-Cache: disabled, I-Cache: disabled
NAND flash device 'NAND 512MiB 3,3V 8-bit (Samsung)' found
erased blocks 0 to 5 on NAND flash device #0 'NAND 512MiB 3,3V 8-bit'
$

書き込むのに時間は 2分かかりません。シェルプロンプトまでこなくて止まっちゃうこともあります。

U-boot の設定 (その1)

書き込めたら、U-boot を設定します。Sheeva をリセットします。

PC で ftdi_sio ドライバを load します。

# modprobe ftdi_sio

これでシリアルでつながります。僕は古き UUCP の中の cu を使ってます。:

$ cu -l /dev/ttyUSB1 -s 115200

U-boot を Enter で止めて、下記のコマンドを実行。:

setenv mainlineLinux yes
setenv arcNumber 2678
saveenv
reset

Debian インストーラを起動する

USBメモリに Debian インストーラを置いて、下記のように u-boot で入力しました。:

usb start
fatload usb 0:1 0x00800000 /uImage
fatload usb 0:1 0x01100000 /uInitrd

それで、:

setenv bootargs console=ttyS0,115200n8 base-installer/initramfs-tools/driver-policy=most
bootm 0x00800000 0x01100000

SD カードに Debian をインストール

SD カードを挿入してこれにインストールする。パーティションは全体で一つとしました。

下記のタスクを選択してインストール。

  • DNS server
  • SSH server
  • System utilities

U-boot の設定 (その2)

SD カードから読むようにして boot するようにする。:

setenv bootargs_console console=ttyS0,115200
setenv bootcmd_mmc 'mmcinit; ext2load mmc 0:1 0x00800000 /uImage; ext2load mmc 0:1 0x01100000 /uInitrd'
setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_mmc; bootm 0x00800000 0x01100000'
saveenv

boot させる。:

boot

パッケージの整理

下記のものは削除。apt-get remove --purge

  • dc
  • discover
  • mutt
  • nano
  • nfs-common
  • portmap
  • tcpd
  • whois
  • xauth
  • texinfo
  • ftp
  • lwresd

さらに、apt-get autoremove --purge すると下記もなくなります。

  • libpth20
  • libdiscover2
  • libx11-data
  • libxmuu1
  • libnss-lwres
  • libxcb1
  • libxau6
  • libxdmcp6
  • libx11-6
  • libgpgme11
  • discover-data
  • libxext6

パッケージの導入

下記のパッケージを apt-get install でインストール。

  • mtd-utils
  • ntpdate

ここまでで SD カードに Debian がインストールできました。

時計の設定

ntpdate で時刻が設定されたら hwclock -w で書き込んでおきます。

内蔵 flash ROM をシステムに使う

SD カードに一旦いれましたが、システムは内蔵の flash ROM に UBIFS で入れます。:

ubiformat /dev/mtd2 -s 512
ubiattach /dev/ubi_ctrl -m 2

ubimkvol /dev/ubi0 -N rootfs -m
mount -t ubifs ubi0:rootfs /mnt

として flash ROM を UBIFS として設定してマウント。

ここに SD カードの内容をコピー。

mkdir /tmp/rootfs
mount -o bind / /tmp/rootfs/
cd /tmp/rootfs
sync
cp -a . /mnt/

このファイルシステムを使うように、/etc/fstab を作ります。

cat <<EOF > /mnt/etc/fstab
/dev/root  /               ubifs   defaults,noatime,rw                      0 0
tmpfs      /var/run        tmpfs   size=1M,rw,nosuid,mode=0755              0 0
tmpfs      /var/lock       tmpfs   size=1M,rw,noexec,nosuid,nodev,mode=1777 0 0
tmpfs      /tmp            tmpfs   defaults,nosuid,nodev                    0 0
EOF

で、リブート。:

shutdown -r now

U-boot で下記のように設定を加えました。

setenv bootargs_root 'ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs'
setenv bootcmd 'setenv bootargs $(bootargs_console) $(bootargs_root); run bootcmd_mmc; bootm 0x00800000 0x01100000'
saveenv

別の SD カードに /boot と /home を

その後、もう一つの SD カードに /boot と /home を用意して、/etc/fstab を変更し、もともとあった /boot と /home の内容をこちらに移して運用することにしました。

/etc/ssh/sshd_config の設定

こちらでは、SSH の login で root を許しません。パスワードでの login も止めます。

PermitRootLogin no
PasswordAuthentication no