Raspberry Pi 2 on FreeBSD 12.0-RELEASE

FreeBSDに初めて触ったのは4.1だったと思います。当時サーバー分野ではlinux系より一歩先を行ってた感じがします。また当時は確かメモリ2Mか4M程度(?)で運用可能という謳い文句があって非常にアマチュアライクな側面もありそこに惹かれてFreeBSDを選択した記憶があります。
Openoffice1.0の正式公開と共にディスクトップもFreeBSDに切り替えました。
時代と共に高度化するマシンやストレージに対応するFreeBSDのバージョンも上がるに連れジャンクなmanやマシンは次第に力尽きてきました。それでもFreeBSDは8まで頑張ったのですがその頃登場したのがRaspberry Piでした。
さすがにPi1(256M)は見送ったのですがPi1Bのリリースとともに参戦、現在に至っています。
そんなことで気になっていたFreeBSDですが25th AnniversaryそしてPi3もマージされたこともあって再びRaspberry PiでFreeBSDにリハビリを兼ねて挑戦してみたいと思います。
基本の設定はFreeBSD ハンドブックにあります。

環境


Raspberry Pi 2 FreeBSD 12.0-RELEASE
Raspberry Pi 3 raspbian 作業マシン、sshクライアント

カード作成

FreeBSDダウンロード FreeBSDを入手する

$ wget https://download.freebsd.org/ftp/releases/arm/armv7/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-arm-armv7-RPI2.img.xz
$ unxz FreeBSD-12.0-RELEASE-arm-armv7-RPI2.img.xz

展開するとFreeBSD-12.0-RELEASE-arm-armv7-RPI2.imgになります
デバイス名は確認 ($ lsblk)

# dd if=FreeBSD-12.0-RELEASE-arm-armv7-RPI2.img of=/dev/sda bs=1M


書き込んだカードを見るとBOOTしか見えませんがraspbianはufsをサポートしていません。
正常に書き込まれていることを想定して起動してみます。

起動・接続

書き込んだカードをpi2にセット、有線Lanに接続して起動
当サイトの環境でnmapを実行するとipが見えます。(nmapはインストール)

$ sudo nmap -sP 192.168.0.0/24
Nmap scan report for generic.dbpro.xyz (192.168.0.153)
Host is up (-0.098s latency).

pi3からsshで接続

$ ssh freebsd@192.168.0.153


sshはユーザーfreebsdで
ログイン名:パスワードは
freebsd:freebsd
root:root
DHCPでipを取得できる環境であれば簡単ですね。

なにはともあれパスワードを変更します。

% passwd
% su で root
それぞれ新しいパスワードを設定します。

IP ホスト名変更

ipを固定IPに変更、ホスト名もgenericは戴けないので適当な名前に変更します。
user rootで(アドレスは各自の環境で)
/etc/rc.conf

hostname="freebsd"
#ifconfig_DEFAULT="DHCP"
ifconfig_ue0="inet 192.168.0.22 netmask 255.255.255.0"
defaultrouter="192.168.0.1"

再起動

# reboot

当サイトではローカルにdnsmasqが動いているのでresolv.confは以下になりました。
/etc/resolv.conf

# Generated by resolvconf
search dbpro.xyz
nameserver 192.168.0.115

ipが取得できればOK

% host yahoo.co.jp
yahoo.co.jp has address 183.79.135.206
yahoo.co.jp has address 182.22.59.229

dnsが無い環境ではnameserverにルーターのアドレスを指定する必要があるかもしれません。
またpi3の/etc/hostsに以下を加えておきます。
freebsd 192.168.0.22
次からは

% ssh freebsd@freebsd

タイムゾーン

# tzsetup /usr/share/zoneinfo/Asia/Tokyo


YES YES

raspberry piは電源を落とすと時計が止まってしまいます。
時刻を取得するにはntpdとntpdateがありますがここではntpdを使ってみます。
初回の同期は1〜2分かかりますが以降起動時に時計を合わせてくれます。
ntp.confはデフォルトで確認しています。

See https://vzaigrin.wordpress.com/2014/04/14/keeping-actual-time-on-raspberry-pi-with-freebsd/

/etc/rc.conf

ntpd_enable="YES"
ntpd_sync_on_start="YES"

.cshrcの編集

各ユーザーの~/.cshrcを編集してロケールやユーザー固有の設定をします。

alias h		history 25
alias j		jobs -l
alias la	ls -aF
alias lf	ls -FA
alias ll	ls -lAF
alias ls	ls -G
alias df	df -h
alias grep	'grep --color=auto'

# These are normally set through /etc/login.conf.  You may override them here
# if wanted.
set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin)
setenv	BLOCKSIZE	K
# A righteous umask
umask 22

setenv  LANG    ja_JP.UTF-8
setenv	EDITOR	vi
setenv	PAGER	less

if ($?prompt) then
	# An interactive shell -- set some stuff up
	#set prompt = "%N@%m:%~ %# "
	set prompt="%{\e[01;32m%}%N@%m:%~%{\e[0m%} %# "
	set promptchars = "%#"

	set filec
	set history = 2000
	set savehist = (2000 merge)
	set autolist = ambiguous
	# Use history to aid expansion
	set autoexpand
	set autorehash
	set mail = (/var/mail/$USER)
	if ( $?tcsh ) then
		bindkey "^W" backward-delete-word
		bindkey -k up history-search-backward
		bindkey -k down history-search-forward
	endif
endif

編集が済んだら

% source .cshrc


/etc/motdはASC文字に変更しています。
lsのカラー化、プロンプトの変更など

当サイトのraspbianもこの設定ファイルでshellはtcshにしています。
ほかのshellではなかなか同じ動作にならないですね。特にhistoryが

pkg

See pkg によるバイナリ package の管理
FreeBSDにアプリケーションをインストールするにはpkgとportsがあります。
以前はportsからmake installしていたのですがpiではpkgからインストールしても時間がかかるように感じます。piからもportsが利用可能とは思いますが(未確認)非力なpiではpkgが適当と思います。

最初に# pkgを実行するとtoolをインストールするか聞かれるのでyで答えます。
pkg info pkg_nameでパッケージ情報を表示
pkg version を実行すると初回パッケージデータを取得します
その他コマンドはpkg -l


pkg search pkg_nameでパッケージ検索


pkg install pkg_name
sudoとvim-consoleをインストール
pkg version 更新があると記号が変わります

サーバー用途の基本パケージは大体揃っている感じがしますがGUIなパケージはほとんど無いに等しい!
それでもXorgは動くということなので次回からはX環境を構築していきたいと思います。

*今日夕方近く附近一帯で停電事故がありました。結局1時間位で復旧したのですが当サイトのPi2サーバーはこれまでuptime600日近く稼働していたものが幻の記録となってしまいました。!!!