7.5.8.FreeBSD で遊ぼう(Sheeva編)
(0) はじめに
2012年12月31日にFreeBSDの新Ver 9.1-Releaseがリリースされました。 これを記念し、FreeBSD 9Release (ARM版) をインストールします。
FreeBSD は残念ながらNANDフラッシュ、SDカードに未対応なので、USBメモリにインストールします
(1) 用意するもの
上記3章で示したもののほかに、OSをインストールするUSBメモリで、4GB以上、中身消しても良いものも用意してください
FreeBSD 9Release が走っている母艦を用意してください。(筆者はVMware上で用意)
(2) 母艦にてソースの取得
cvsup を用いてコースコードを取得します
① cvsup をまだインストールされていない方は、パッケージ devel/cvsup-without-gui をインストール下さい。
② 9Release のソースを取得するためのsupfile を以下のように作成 /usr/local/etc/cvsup/supfile に置きます
*default host=cvsup.jp.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_9
*default delete use-rel-suffix
*default compress
src-all
③ 以下コマンド実行で、/usr/src に ソースが展開されます
# cvsup /usr/local/etc/cvsup/supfile
(3) 母艦にてカーネルコンフィグの設定
/usr/src/sys/arm/conf/SHEEVAPLUG が sheevaplug用 カーネルコンフィグ の初期ファイルです。
これを cp SHEEVAPLUG SHEEVAICHMY などとコピーして使います
筆者は以下のように修正しましたが、各自の環境に合わせてください
(コメントアウトした行、ネットワークブートは今回しないため)
#options NFSCL #New Network Filesystem Client
#options NFSLOCKD #Network Lock Manager
#options NFS_ROOT #NFS usable as /, requires NFSCLIENT
#options BOOTP
#options BOOTP_NFSROOT
#options BOOTP_NFSV3
#options BOOTP_WIRED_TO=mge0
#options NO_SWAPPING (←筆者はSWAPを用意したため、SWAP不要時はそのまま)
(内容修正した行)
ident SHEEVAICHMY ← カーネルの名前です。気に入った名前を付けてください
# Root fs on USB device
options ROOTDEVNAME=\"ufs:/dev/da0s2a\" ← カーネルが掴みに行く"/"の位置
(追加した行、玄柴やSheevaPlug+ ではE-SATAガ使えます)
# SATA
device ata
device atadisk
(4) 母艦にてコンパイル
以下コマンド実行
# cd /usr/src
# export TARGET_ARCH=arm
# export CROSS_BUILD_TESTING=yes
# make buildworld TARGET_ARCH=arm -DWITH_FDT
# make buildkernel TARGET_ARCH=arm KERNCONF=SHEEVAICHMY
最近のカーネルコンフィグでは FDT が有効になっているので、ユーザーランドもそれに対応して -DWITH_FDT で作成します。
また、KERNCONF= の先は、先ほど作成したカーネルコンフィグファイル名を指定してください
(5) 母艦にてUSBパーティション切り
以下コマンド実行、筆者のUSBメモリはda1として認識されています。
# gpart destroy da1
# gpart create -s MBR da1
# gpart add -s 32M -t freebsd da1
# gpart add -t freebsd da1
# bsdlabel -w /dev/da1s2
# bsdlabel -e /dev/da1s2
筆者のUSBメモリは15Gを用意し、/=512M、swap=1536M、/var=2048M、/tmp=1024M、/usr=残り としましたので、bsdlabelはまず以下のように入力
# /dev/da1s2:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 512M * 4.2BSD 0 0
b: 1536M * swap 0 0
c: 31260600 0 unused 0 0 # "raw" part, don't edit
d: 2048M * 4.2BSD 0 0
e: 1024M * 4.2BSD 0 0
その後、残りの/usrも切り、最終的に以下のようになりました。
# /dev/da1s2:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 1048576 16 4.2BSD 0 0 0
b: 3145728 1048592 swap
c: 31260600 0 unused 0 0 # "raw" part, don't edit
d: 4194304 4194320 4.2BSD 0 0 0
e: 2097152 8388624 4.2BSD 0 0 0
f: 20774824 10485776 4.2BSD 0 0 0
ご自身の環境に合わせて切ってください。編集せず初期設定のままでも問題ありません
swap はあとでファイルにでも取れますし、全容量"/"にしても問題ありません
続いて以下のようにフォーマットします
# newfs_msdos /dev/da1s1 (第1パーティションはFAT でフォーマットしてください。u-bootが読めるように)
# newfs -n da1s2a (da1s2d da1s2e da1s2fも同様にフォーマットしてください)
![(tips)](/images/tips2.gif)
そういう時はGNOMEからログオフしてSSHからリモートログインして作業すると解消します。
(6) 母艦にてUSBにインストール
① カーネルのインストール
以下のコマンドを実行。SHEEVAICHMYのところは、ご自身のカーネル名で読み替えてください
# mount -t msdosfs /dev/da1s1 /mnt
# cp /usr/obj/arm.arm/usr/src/sys/SHEEVAICHMY/kernel.bin /mnt
# umount /mnt
② ユーザーランドのインストール
まず、ユーザーランドのインストールをするのに、auditdistd 用のユーザーを作らなければならないらしい
まだ、auditdistd というユーザーを作っておられない方は # vipw コマンドで/etc/passwd に以下の行を追加
auditdistd:*:78:77::0:0:Auditdistd unprivileged user:/var/empty:/usr/sbin/nologin
以下のコマンドを実行し、USBパーティションをマウント(2行目以降は必要な方のみ)
# mount /dev/da1s2a /mnt
# mkdir /mnt/var; mount /dev/da1s2d /mnt/var
# mkdir /mnt/tmp; mount /dev/da1s2e /mnt/tmp
# mkdir /mnt/usr; mount /dev/da1s2f /mnt/usr
次に /etc 周りを設定
# cd /usr/src
# export DESTDIR=/mnt
# mergemaster -p
ここで聞かれる質問は、さいしょの2つは「i」を押して/etc/groupと/etc/master.passwdを新しいファイルで
上書きを選択し、3つの質問には「y」を押してpasswdファイルを更新を選択します。
次にユーザーランドのインストール
# make installworld TARGET_ARCH=arm
# make distrib-dirs TARGET_ARCH=arm
# make distribution TARGET_ARCH=arm
③ 初期設定
(a) /mnt/etc/rc.conf をたとえば以下のように設定
hostname="ichmy.0t0.jp"
ifconfig_mge0="DHCP"
defaultrouter="192.168.24.1"
sshd_enable="YES"
(b) /mnt/etc/fstab をたとえば以下のように設定
# Device Mountpoint FStype Options Dump Pass#
/dev/da0s2b none swap sw 0 0
/dev/da0s2a / ufs rw,noclusterr,noclusterw 0 0
/dev/da0s2d /var ufs rw,noclusterr,noclusterw 0 0
/dev/da0s2e /tmp ufs rw,noclusterr,noclusterw 0 0
/dev/da0s2f /usr ufs rw,noclusterr,noclusterw 0 0
最後にすべて umount して、USBメモリを抜いてください
(7) SheevaPlug 起動
① 起動に必要な u-boot の環境変数の設定
立ち上げに必要な環境変数を以下のように実施してください
setenv bootcmd 'usb start;fatload usb 0:1 900000 kernel.bin;go 900000'
saveenv
② 起動
リセットして起動。 初期ユーザはroot パスワードなしです。起動したらすぐにパスワード設定してください
(8) Ports のアップデート
FreeBSD(ARM版) はまだ正式対応に至っていないので、パッケージがありません
かなり時間が掛かりますが、各アプリケーションはportsを使って自分でコンパイルします
1回コンパイルすれば、パッケージが手元に残りますので、2回目以降はそれを使います
まず、以下の行を /etc/portsnap.conf に追加して、不要なportsを指定します
REFUSE arabic chinese french german hebrew hungarian
REFUSE korean polish portuguese russian ukrainian vietnamese
REFUSE x11 x11-clocks x11-fm x11-fonts
REFUSE x11-servers x11-themes x11-toolkits x11-wm
続いて以下実行
# portsnap fetch
# portsnap extract (2回目以降から不要)
# portsnap update
# mkdir /usr/ports/packages (これも2回目以降から不要)
これで /usr/ports 以下にポーツが展開されます。あとの使い方はPCと同じなので省略
(9) FreeBSD/ARM での Ports の注意点(バッドノウハウ)
残念なことに、いくつかのPorts は ARM版ではコンパイルエラーが出ます
筆者の環境で発生したのは参考までに
① mysql 5.5.20 : お手上げ。
ichmy本家サイト
ガジェットで遊ぼうのこーなー
- ガジェットで遊ぼうのこーなー
- Linuxガジェットを比較するこーな
- フィジカルで遊ぼうのこーなー
- Espressobinで遊ぼうのこーな
- ODROIDで遊ぼうのこーな
- ODROID-M1で遊ぼうのこーな
- ODROID-N2で遊ぼうのこーな
- Raspberry Pi5で遊ぼうのこ-な
- Pine64 で遊ぼうのこーな
- Rock64pro で遊ぼうのこーな
- Quartz64 で遊ぼうのこーな
- BeagleBoneBlackで遊ぶこーな
- Radxa ROCK 5aで遊ぶこーな
- HummingBoard で遊ぶこーな
- OrangePi PC で遊ぼうのこーな
- TinkerBoard2Sで遊ぼうのこな
- Mac-miniで遊ぼうのこーな
- PandaBoard ESで遊ぼうのこな
- Beagleboard-xMで遊ぼうのこーな
- Wandboardで遊ぼうのこーな
- CubieBoard3で遊ぼうのこーな
- pcDuino8 Unoで遊ぼうのこな
- Trim-Sliceで遊ぼうのこーな
- GuruplugDisplayで遊ぼうのこーな
- PogoPlugで遊ぼうのこーな
- GuruplugStandardで遊ぼうのこな
- SheevaPlugで遊ぼうのこーな
-- 各ガジェット毎の紹介記事
-- ちょっと古め
-- 旧記事ですが参考まで