FreeBSD で遊ぼう(Sheeva編)

あなたは
1 4 7 9 7 0 1
人目のお客様です。 (本日331人目、昨日430人) (from 2007-09-30)

6.5.8.FreeBSD で遊ぼう(Sheeva編)
6.5.SheevaPlugで遊ぼうのこーな

6.5.8.FreeBSD で遊ぼう(Sheeva編)

この節では、SheevaPlug に FreeBSD をインストールして遊びます。

(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)
ちなみに、母艦のFreeBSDでGNOMEを入れている方、HALDが頼みもしないのに 勝手にUSBをマウントしてお困りではありませんか?  こちらが、umount した直後に再マウントされたら腹立ちますよね
そういう時は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 : お手上げ。



7.各ガジェットごとの紹介記事(旧記事参考用)
6.5.7.Gentoo Linux で遊ぼう(Sheeva編)

ichmy本家サイト

ガジェットで遊ぼうのこーなー