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日近く稼働していたものが幻の記録となってしまいました。!!!

Raspberry Pi obconf アップデート

以前の記事でダウングレードしたopenboxですが本日updateをかけたところobconfがアップデートされていました。
間違いなくopenbox絡みだろうということで保留を解除、実行してみました。

折角なので続きということで記事にしてみたいと思います。

update && upgrade

$ sudo apt update && sudo apt upgrade
続行しますか? [Y/n] n
中断しました。
$ sudo -i
# apt-mark unhold libobrender32v5 libobt2v5 openbox
# apt update && apt upgrade


一旦中断して保留を解除
(あとから解除、再度実行でもいいのですが)


openbox 3.6.1-4+rpi9 になっていますね。


obconfは起動しました。

lxappearanceは相変わらずSegmentation faultを吐いています。
原因はわかっているはずなので近い内にupdateが入ると思います。

2019年 1月22日
lxappearance-obconfの更新がありました。

やっと正規の状態になりました。

Raspberry Pi 3 stretch オーバークロック

Raspberry Pi 3が発売されたばかりの頃はcpu動作モードがpowersaveに設定されていて600MHzで動作していました。その後まもなくondemand(1.2G)となってさらに2017年なってからと思いますがcpu温度に対してクロックを制御するようになりました。

オーバークロックといっても通常の環境では1.2G –> 1.3Gが限度で大きな改善は期待できません。(1.35Gでは時々ハングアップします)
体感的には多少キビキビ感が増す程度と思います。

これまでcpu温度に対してのクロック制御をよく理解していなかったので簡単な実験をしてみました。

cpuデフォルト

最初にデフォルトの動作を確認してみます。/boot/config.txtに記載したオーバークロック関係を無効、インストールしたcpufrequtilsをdisableにして起動します。

# systemctl disable cpufrequtils
# reboot


起動後無負荷の状態では600MHzで動作しています。
なにか負荷のかかるアプリケーションを実行すると1200MHzにアップ

適当な動画ファイルをダウンロードffmpegでscaleダウンしてcpu温度とクロック周波数の変動をみます。

$ youtube-dl -f mp4 35LwyGtHbzs
[youtube] 35LwyGtHbzs: Downloading webpage
[youtube] 35LwyGtHbzs: Downloading video info webpage
[youtube] 35LwyGtHbzs: Downloading MPD manifest
[youtube] 35LwyGtHbzs: Downloading MPD manifest
[download] Destination: [HD] 会長はメイド様! _ Kaichō wa Maid-sama [01]-35LwyGtHbzs.mp4
[download] 100% of 177.19MiB in 00:41

ffmpeg -y -vsync 1 -i "[HD] 会長はメイド様! _ Kaichō wa Maid-sama [01]-35LwyGtHbzs.mp4" -s 1024x576 "会長はメイド様_01.mp4"

5分位実行しましたが80℃を超えることはありませんでしたがじわじわと温度は上がっていきます。

ffmpeg実行前
frequency(45)=600062000
temp=49.9’C
volt=1.2000V
ffmpeg実行中
frequency(45)=1200000000
temp=74.1’C
volt=1.2938V

cpuクロックアップ

config.txtにオーバークロック設定をしてcpufrequtilsを有効にします。
現在のPi3 config.txt

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# Overclock the arm
arm_freq=1300
over_voltage=4
sdram_freq=400
core_freq=400
gpu_freq=400

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

# Enable OpenGL
dtoverlay=vc4-kms-v3d
gpu_mem=256
# systemctl enable cpufrequtils
# reboot

governor “performance”で実行。1〜2分で80℃を超えてきます。

温度上昇に伴って(80℃)クロック周波数も変動(低下)します。
85℃以上になることが無いようにコントロールしているものと思います。
もし何らかの関係で85℃を超えることがあると温度計マークが出てくると思います。

以上から今回のようにcpu使用率100%附近の連続作業ではデフォルト(1.2G)とほぼ変わらないという結果になりました。
1.3Gをキープするには80℃を超えないようにすればいいのですがPiにとって大型の放熱器、強力なファンを設けることは現実的では無いし、また1.3Gの値もそれほどのメリットもありません。
但し通常のアプリケーション(mp4再生など)ではクロックコントロールするほど温度が上がることは無いのでクロックアップによる多少の改善、効果はあるものと思っています。
現在のクロック設定は今回の結果を踏まえarm_freq以外は1ランク下げています。

Aterm WG1200CR

今回mp4再生の設定しているとpiの処理能力以外にもディスクの転送速度やネットワーク速度なども関係することが見えてきました。

これらからIEEE802.11acに対応していない当サイトはpi4に備えてWG1200CRを購入しました。
条件はGigabit Ethernetに対応していること、Rポイント内で買えること。で、これしか選択肢がありませんでした。
接続はブリッジモードでルーターに接続しています。


Pi3からは802.11g接続ですがこれまでは時々音声がつまり気味だったのですがローカルの低速なpi zeroファイルサーバーからやインターネット経由の動画もほぼストレス無く視聴できるようになりました。

Raspberry Pi surf browser on moOde audio

以前 surf2.0 browserをビルド、インストールした時点では動画や動きのあるページの表示は実質使えませんでした。
最近になって試してみるとmoOde audioではそれほどCpu使用率も上がらずなんとか使えそうです。

但しYoutubeは再生はできるもののCpu使用率はかなり上がり、またpulse audioでも問題があります。

少々問題はありますがmoOde Playerの専用ブラウザとするため新しい起動サイズをビルドしてみたいと思います。

環境

Raspberry Pi 3 2018-11-13-raspbian-stretch
Pi1B moOde audio 4.3

ビルドする

ビルドはdocker上のraspbian RPD
通常のraspbianからでも特に問題ないと思います。

ライブラリのインストール

# apt install make xorg-dev libglib2.0-dev libgtk-3-dev libgcr-3-dev libjavascriptcoregtk-4.0-dev libwebkit2gtk-4.0-dev

surf ダウンロードページ
surfのバージョンも変わってないので以前の手順でOKです。 surf2.0 browserをインストール
適当にディレクトリを作成、ダウンロード

# mkdir ~/ダウンロード/surf2 && cd ~/ダウンロード/surf2
# wget https://dl.suckless.org/surf/surf-2.0.tar.gz
# tar -xvf surf-2.0.tar.gz
# cd surf-2.0

surf.cの編集 1200行目当り(適当なサイズ)

gtk_window_set_default_size(GTK_WINDOW(w), 600, 400);

メイクインストール

# make clean install

リネーム、実行

# mv /usr/local/bin/surf /usr/local/bin/surf_600x400
# surf_600x400 moode


適当な起動サイズをいくつか作成しました。
make installはすぐ完了します。(10sくらい)
hostには/usr/local/bin/にコピーでOK

dmenuを使うには

# apt install suckless-tools


起動サイズは720×405を採用しました。
surfにフォーカスを当てCtrl+gでdmenu(LXPanel上部url)が出現します。
(ほとんど使うことはないのですが)


文字は少し小さくなりますがアルバム選択、選曲は可能です。


ラジオリストは整理して1画面に収まっています。


確認している不具合は日本語を含むディレクトリに収めたアルバムアートが表示できません。
sqlite3データベースに変換した情報をうまく処理できないものと思っています。
表示できるアルバムもありますがほとんどダメ
アルバムアート以外の再生、曲表示は正常
通常のブラウザからの曲選択、登録は即座にsurf側に反映されます。


アルバム情報は新規ウインドウでgoogleページが開きます。基本surfブラウザでは動画再生をしないことなのですが誤操作時を考慮して設定確認をしておきます。
最初の確認時はアンプの電源を切っておきます
pulse audioをスタートしてYouTubeのページに飛ぶと再生を開始します。
再生タブはWebKitWebProcessになります。YouTubeの画面から音量を充分下げます。この時再生タブと連動します。
出力装置タブは50%〜60%前後の値になります。音量コントロールは可能ですが新しい動画再生時はまた出力装置側の音量が戻ってしまいます。次回以降はこの設定で起動するはずです。
pulse audioが正常にスタートしないと音量が100%で出力します。

ファイルマネージャー Nemo

Linux Mintの公式ファイルマネージャー
Nautilusベースのファイルマネージャー(ノーチラス号〜ネモ船長 wiki)ですね

# apt install nemo


pcmanfmと比べると少しUIは違いますがほぼ同様の機能を備えています。

pcmanfmから設定した関連付けなども引き継いています。

当サイトではnemoをmultimedia用に特化して使いたいと思います。
設定で不要なボタンなどを非表示、起動に次のオプションを設定(Main Menu Editor)
geometry(サイズ、位置) メディア関連の親ディレクトリ

nemo -g 420x300-0+100 /home/hda/hda4

pulse control

ボタンの文字列と色だけを変更しました。php部プログラム、動作は変更なし
この状態からpulseボタンクリックでpulseスタート、ラジオを再生中であればpulseボタンクリックでラジオ停止pulseは待受状態
moOdeボタンクリックでpulseはkill、moOde Player再生開始。こっちの方が直感的と思います。

多少問題はありますが当初の目標通りmoOde Playerをsurfブラウザにしたことによってひとつのワークスペースをマルチメディア関連に集中することができました。

Raspberry Pi Guake Terminal + xdotool

高機能で人気のあるターミナルのひとつにGuake Terminalがあります。メインのターミナルとして使っている人も多いと思います。
特長のひとつに起動するとraspbianではLXPanelに常駐します。
もちろん通常のターミナルとして使用できますが当サイトでは主にxdotoolと合わせてサブのターミナルとして利用しています。
guake – Drop-down terminal for GNOME Desktop Environment
xdotool – simulate (generate) X11 keyboard/mouse input events

Guake Terminal

# apt install guake

xdotool

# apt install xdotool

スタートアップに登録

~/.config/autostart/guake.desktop 作成

[Desktop Entry]
Type=Application
Name[ja]=Guake Terminal
Exec=guake
$ lxsession-edit


Guake Terminalにチェック


guakeの設定
メインウインドウ
フォーカスを失ったら隠すにチェック


通常時ウインドウは閉じています。
実行はスクリプトを作成してopenbox右クリックメニューに登録しています。
実行するとウインドウが開いてスクリプトに記載したコマンドを実行します。
実行時は1〜2秒マウスを動かさないようにします。

スクリプトの作成

ホームディレクトリの~/bin以下に適当なファイル名で作成します。(以下、基本の書式は共通)
~/bin/apt.sh

#!/bin/sh
guake
xdotool mousemove 730 50
xdotool click 1
xdotool sleep 0.4
xdotool type --delay 50 'sudo apt update && sudo apt upgrade'
xdotool key Return

実行権限を付けます

$ chmod 755 apt.sh


$ sudo apt update && sudo apt upgrade
.historyからも拾えますがこれはこれで便利です

~/bin/cpu_mode.sh

#!/bin/sh
guake
xdotool mousemove 730 50
xdotool click 1
xdotool sleep 0.4
xdotool type --delay 50 'cpufreq-info -c 0 | grep -e "CPU frequency" -e "The governor"'
xdotool key Return


zenityダイアログ スクリプトの末尾に
~/bin/cpu_mode.sh
を追記しておくとguakeから設定の確認ができます

~/bin/vcgencmd.sh

#!/bin/sh
guake
xdotool mousemove 730 50
xdotool click 1
xdotool sleep 0.4 
xdotool type --delay 50 'vcgencmd measure_clock arm &&
 vcgencmd measure_temp &&
 vcgencmd measure_volts &&
 vcgencmd get_mem arm &&
 vcgencmd get_mem gpu'
xdotool key Return


上記のcpufreq-infoで見る値は設定値で実周波数とは異なるようです。
最新のカーネルではcpu温度が上昇(80℃以上からか?)するとcpu周波数も小刻みに変動(下げてくれる)ようです。
もう少し確認してみたいと思います。


$ sudo nmap -sP 192.168.0.0/24
いざという時は便利なコマンドです。(インストール必要)
.historyから消えた頃にはオプションも忘れてしまいます。


$ youtube-dl –version && sudo youtube-dl -U
更新があれば新しい日付になっているはずです。


$ xwininfo
実行すると+のカーソルに変わります。目的のウインドウをクリックするとウインドウID、サイズ、位置などを取得できます。

openbox右クリックメニューなどのように簡単に実行できる環境があればアイデア次第でいろいろ面白い使い方ができるかもしれません。

Top