d.sunnyone.org
sunnyone.org

ページ

2012-03-12

SheevaPlug復旧の巻(debootstrapによる環境構築とSDカード向け設定)

前エントリの通り、SheevaPlugの/だったSDカードが壊れてしまったので、構築しなおすことにする(muninで監視情報を書き込み続けたらそれは壊れるよな、と思いつつ同じ環境を作る)

<準備>
・armelなDebianの入ったデバイス
・SDカードリーダ/ライタ
・SDカード(以下では16GBを利用)

1. パーティション作成
普通にパーティションを切る(以下では/dev/sdbにつながったと想定)
# fdisk /dev/sdb
 以下のように作った。
/dev/sdb1 100M  (/boot用)
/dev/sdb2 10G  (/用)
/dev/sdb3 1G  (swap用)
/dev/sdb4 残り (/home用)

2. ファイルシステム作成
# mkfs.ext3 /dev/sdb1
# mkfs.ext4 -O ^has_journal /dev/sdb2
# mkswap /dev/sdb3
# mkfs.ext4 -O ^has_journal /dev/sdb4
 どうやらSDカードではext4が速いらしいので、/boot以外に採用。
 そしてジャーナルなしが速いらしいので、ジャーナルは無効化する。
電源断に備えても、書き込みが増えて壊れては意味が無いしね。
 /bootはU-Bootが読めなかったら困るので、ext3のままにしておく。
# tune2fs -l /dev/sdb1 | grep features
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super
# tune2fs -l /dev/sdb2 | grep features
Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
 has_journalがなくなっていることを確認。

3.  debootstrap
debootstrapで初期環境を作る。同一アーキテクチャなので、--foreign と--second-stageに分割する必要はない。
# mount /dev/sdb2 /mnt
# debootstrap --arch=armel --include=linux-image-2.6-kirkwood,module-init-tools,udev,netbase,net-tools,ifupdown,iproute,whiptail,vim-basic squeeze /mnt http://ftp.jp.debian.org/debian/
4. 諸設定
# cd /mnt 
(ファイルシステム設定)

# vi etc/fstab

~~~
#              
proc            /proc           proc    defaults        0       0
/dev/mmcblk0p2 /               ext4    errors=remount-ro,commit=21600,noatime 0       1
/dev/mmcblk0p1 /boot           ext3    defaults        0       2
/dev/mmcblk0p3  none           swap    sw              0       0
/dev/mmcblk0p4 /home           ext4    defaults        0       2
tmpfs          /tmp tmpfs defaults 0 0
~~~
(ホスト名設定)
# echo myhost > etc/hostname
(ネットワーク設定)
# vi etc/network/interfaces
~~~
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
  address 192.168.1.100
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.254
  dns-nameservers 192.168.1.254
  dns-search localdomain.local
~~~
 (コンソール設定)
# vi etc/inittab
一部編集
~~~
##1:2345:respawn:/sbin/getty 38400 tty1
##2:23:respawn:/sbin/getty 38400 tty2
##3:23:respawn:/sbin/getty 38400 tty3
##4:23:respawn:/sbin/getty 38400 tty4
##5:23:respawn:/sbin/getty 38400 tty5
##6:23:respawn:/sbin/getty 38400 tty6
T0:2345:respawn:/sbin/getty -L ttyS0 115200 linux
~~~

てな感じ。

5. おまじない
/etcにあまり書かないようにする。
# ln -s /dev/null etc/blkid.tab
# ln -s /proc/mounts etc/mtab

作っているホストのNIC情報でeth0が固定されてしまうっぽいので、消しておく。
# echo > /etc/udev/rules.d/70-persistent-net.rules
あまり書かないように設定。
# vi etc/sysctl.conf
~~~追記~~~
vm.dirty_background_ratio = 30
vm.dirty_ratio = 60
vm.dirty_expire_centisecs = 500000
vm.dirty_writeback_centisecs = 600000
~~~
6. パスワード設定
# chroot /mnt /bin/bash
# passwd root
7. ブートイメージの作成
chrootの流れで。
# apt-get update
# apt-get install uboot-mkimage
# cd /boot
# mkimage -A arm -O linux -T kernel  -C none -a 0x00008000 -e 0x00008000 \
  -n Linux-2.6.32-5 -d vmlinuz-2.6.32-5-kirkwood uImage
# mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 \
  -n initramfs -d initrd.img-2.6.32-5-kirkwood uInitrd
8. リブート
終わったらいよいよSDカードを差してリブート。U-Bootのカウントダウンで止める。

9. U-Boot環境変数設定
printenvして、期待する値になっていなかったら、以下のようにセットしてしまう。

Marvell>> setenv bootargs_mmc 'console=ttyS0,115200 root=/dev/mmcblk0p2 rw'
Marvell>> setenv bootcmd_mmc 'mmcinit; ext2load mmc 0:1 0x01100000 /uInitrd; ext2load mmc 0:1 0x00800000 /uImage'
Marvell>> setenv bootcmd 'setenv bootargs $(bootargs_mmc); run bootcmd_mmc; bootm 0x00800000 0x01100000'
Marvell>> printenv
Marvell>> saveenv

終わったらbootする。

10. 起動後設定
# date
Thu Nov  5 21:59:39 UTC 1908
さすがにおかしすぎる・・・いったん設定する
# date 031100592012
dateコマンドでセットするときはmmddHHMMyyyyなんだよね。

あとはいつもの感じで設定。
(ロケール設定)
# apt-get install locales
# vi /etc/locale.gen
~~~
ja_JP.UTF-8 UTF-8
~~~
# locale-gen
(スタンダードパッケージをインストール)
# tasksel install standard
(タイムゾーン設定)
# dpkg-reconfigure tzdata
→Tokyo
あとはお好みでsudoを入れたり、openssh-serverを入れたりすれば使えるようになる。

【参考】
http://blog.bofh.it/debian/id_265
http://www.cyrius.com/debian/kirkwood/sheevaplug/install.html
http://d.hatena.ne.jp/yamanetoshi/20090114

0 件のコメント:

コメントを投稿