目的
Fedora12/armベースのオーディオNAS RockDiskNextをRSEL6化した話
http://qiita.com/hkato/items/1b220ac5bf9a6fdf0fd7
http://qiita.com/hkato/items/afa36fdc146f6f6d176f
こいつに追加のRPMなどをビルドするクロス環境を作ろうと思ったが挫折。そこでQEMU/ARMのエミュレーション環境でRSEL6を動かしてみた。
RaspberryPi/RSEL6等の開発環境にもなるはず。
参考URL
これをMacでやった感じですが...
環境
ホスト環境はMacOSXで行った。LinuxやWindowsの場合は適宜読み替えること。
下準備
ホスト側
私はbrewでqemuとxzを入れた(結局xzはtar.xzの中身をホスト側で調べるために使った、下記手順での展開はエミュレーション環境で行ってるので実際は不要です)
$ brew install qemu
$ brew install xz
適当なディレクトリにQEMUのファイルを置く場所を作る。
私は~/QEMUの下に作ることとした。
$ mkdir -p ~/QEMU/rsel6
$ cd ~/QEMU/rsel6
Debian環境の用意
まずDebianを起動させてからRedSleeve化する。
その為、Debian/squeezeのARM/QEMU環境を拾ってくる。
URL: https://people.debian.org/~aurel32/qemu/armel/
$ curl -O https://people.debian.org/~aurel32/qemu/armel/vmlinuz-2.6.32-5-versatile
$ curl -O https://people.debian.org/~aurel32/qemu/armel/initrd.img-2.6.32-5-versatile
$ curl -O https://people.debian.org/~aurel32/qemu/armel/debian_squeeze_armel_standard.qcow2
RedSleeve rootfs ISOイメージ作成
rsディレクトリの下にrselのrootfsを持ってきてISOファイル化する。
ちなみにrsel6-rootfsやrsel6-minimalを試したが動かなかった。
$ mkdir rs
$ cd rs
$ curl -O http://ftp.redsleeve.org/pub/yum/os/rsel6-rootfs-big.tar.xz
$ cd ..
$ hdiutil makehybrid -iso -joliet -o rsel6-rootfs.iso rs/
hdiutil makehybrid は MacOSX独自のコマンド、Linux等の場合は、
$ mkisofs -J -R -o rsel6-rootfs.iso rs/
RedSleeve用QEMUイメージ
qemu-img createで作成する方が良いと思うが、debainのイメージをコピーした
$ cp debian_squeeze_armel_standard.qcow2 redsleeve_armel_rootfs.qcow2
Debian環境からRedSleeveを作る
起動
hdbにRedSleeveのqcow2イメージ、cdromに作成したRedSleeveのISOを指定しDebianを起動
$ qemu-system-arm -M versatilepb \
-kernel vmlinuz-2.6.32-5-versatile \
-initrd initrd.img-2.6.32-5-versatile \
-hda debian_squeeze_armel_standard.qcow2 \
-hdb redsleeve_armel_rootfs.qcow2 \
-cdrom rsel6-rootfs.iso \
-nographic \
-append "root=/dev/sda1 console=ttyAMA0"
root/rootでログイン
RedSleeve QEMUイメージの作成
Debian/ARM上での操作
ファイルシステム初期化
root@debian-armel:~# mkfs.ext3 /dev/sdb1
root@debian-armel:~# mkswap /dev/sdb5
ちなみにext4を試したがのちの処理でコケてダメだった
RedSleeve関連マウント
ISOとターゲットとなるイメージをマウント
root@debian-armel:~# mkdir -p /mnt/cdrom
root@debian-armel:~# mkdir -p /mnt/disk
root@debian-armel:~# mount -r /dev/cdrom /mnt/cdrom
root@debian-armel:~# mount /dev/sdb1 /mnt/disk
ISOから展開
root@debian-armel:~# cd /mnt/disk/
root@debian-armel:/mnt/disk# tar --strip-components 1 -xvJf /mnt/cdrom/rsel6-rootfs-bigtar.xz
root@debian-armel:/mnt/disk# cd /
root@debian-armel:/# umount /mnt/disk
Ctrl-a x でQEMU終了
RedSleeveの起動(bash)と調整
まずはinitでなくbashで起動する
$ qemu-system-arm -M versatilepb \
-kernel vmlinuz-2.6.32-5-versatile \
-initrd initrd.img-2.6.32-5-versatile \
-hda redsleeve_armel_rootfs.qcow2 \
-nographic \
-append "root=/dev/sda1 console=ttyAMA0 init=/bin/bash"
/を再マウント
bash-4.1# mount -o rw,remount /
fstabの修正
bash-4.1# cp -p /etc/fstab /etc/fstab.orig
bash-4.1# vim /etc/fstab
/dev/sda1 / ext3 defaults,noatime 1 1
/dev/sda5 swap swap defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
# tmpfs /tmp tmpfs defaults 0 0
# tmpfs /var/tmp tmpfs defaults 0 0
# tmpfs /var/cache/yum tmpfs defaults 0 0
# tmpfs /var/lib/yum tmpfs defaults 0 0
不要なサービスの停止
bash-4.1# chkconfig dnsmasq off
bash-4.1# chkconfig gpm off
bash-4.1# chkconfig haldaemon off
bash-4.1# chkconfig messagebus off
bash-4.1# chkconfig nfslock off
bash-4.1# chkconfig nscd off
bash-4.1# chkconfig rpcbind off
bash-4.1# chkconfig rpcgssd off
bash-4.1# chkconfig rpcidmapd off
MMCとCPU関連のオプション設定の無効化
RaspberryPiの実ハードなら必要なのかな。コメントアウト。
bash-4.1# cp -p /etc/rc.d/rc.local /etc/rc.d/rc.local.orig
bash-4.1# vim /etc/rc.d/rc.local
# !/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
# echo deadline > /sys/block/mmcblk0/queue/scheduler
# echo 256 > /sys/block/mmcblk0/queue/iosched/fifo_batch
# echo 100 > /sys/block/mmcblk0/queue/iosched/read_expire
# echo 10000 > /sys/block/mmcblk0/queue/iosched/write_expire
# echo 256 > /sys/block/mmcblk0/queue/nr_requests
# echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# echo ondemand > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
init(Upstart)で使われないもの削除
ちとわからないが参考にしたURLの通り
bash-4.1# mv /etc/init/kexec-disable.conf /etc/init/kexec-disable.conf.orig
bash-4.1# mv /etc/init/serial.conf /etc/init/serial.conf.orig
gettyの設定
ttyAMAってなんだか知らないけど
bash-4.1# vim /etc/init/ttyAMA.conf
#
start on stopped rc RUNLEVEL=[2345]
stop on starting runlevel [016]
respawn
pre-start exec /sbin/securetty ttyAMA0
exec /sbin/agetty -L /dev/ttyAMA0 9600 vt102
準備完了
Ctrl-a x でQEMUを抜ける。
RedSleeveの起動
いよいよ本番
$ qemu-system-arm -M versatilepb \
-kernel vmlinuz-2.6.32-5-versatile \
-initrd initrd.img-2.6.32-5-versatile \
-hda redsleeve_armel_rootfs.qcow2 \
-nographic \
-append "root=/dev/sda1 console=ttyAMA0"
エラーは出るがログインできるようになる(root/password)。
なにやらディレクトリが無い様なので掘っておく。
[root@ac100 ~]# mkdir -p /var/lock/subsys
[root@ac100 ~]# mkdir -p /var/run/netreport
ネットワークが使えないので、一旦終了。
[root@ac100 ~]# shutdown -h now
Ctrl-a x で抜ける。
ネットワークの有効化
hdbにDebianイメージを指定して起動
$ qemu-system-arm -M versatilepb \
-kernel vmlinuz-2.6.32-5-versatile \
-initrd initrd.img-2.6.32-5-versatile \
-hda redsleeve_armel_rootfs.qcow2 \
-hdb debian_squeeze_armel_standard.qcow2 \
-nographic \
-append "root=/dev/sda1 console=ttyAMA0"
カーネルモジュールをコピーする
[root@ac100 ~]# mkdir -p /mnt/disk
[root@ac100 ~]# mount /dev/sdb1 /mnt/disk
[root@ac100 ~]# cp -R /mnt/disk/lib/modules/2.6.32-5-versatile /lib/modules/2.6.32-5-versatile
インターフェース設定
DHCPとかQEMUのNATのDNS指定とか
[root@ac100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=52:54:00:12:34:56
ONBOOT=yes
TYPE=ethernet
USERCTL=no
PEERDNS=yes
DNS1=10.0.2.3
IPv6無効化
[root@ac100 ~]# vim /etc/sysctl.conf
最終行に追加
# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
ホスト名設定
[root@ac100 ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rsel6.local
インターフェース初期化
[root@ac100 ~]# service network restart
念のため再起動
# reboot
インストール状況
[root@rsel6 ~]# uname -a
Linux rsel6.local 2.6.32-5-versatile #1 Wed Sep 25 00:01:55 UTC 2013 armv5tejl armv5tejl armv5tejl GNU/Linux
[root@rsel6 ~]# cat /etc/redhat-release
Red Sleeve Enterprise Linux release 6.1 (Leap)
とりあえず動いている様です。