Raspberry Pi 4 Model B 発売

Raspberry Pi の最新機種,Raspberry Pi 4 Model B が発売されました。

主な変更点は以下の通り。

CPU コアが省電力モデルの A53 から高性能モデルの A57 に変わったことで大きなパフォーマンス向上が期待できます(その代わり,これまでもシビアであった発熱はますます厳しくなりそうですが。電力消費も増えますが、電源供給が Type C となったため、相性問題は減るはずです)。GPU も最新の VideoCore VI に刷新されました。GbE や USB 3.0 への対応など,これまで要望が多かったアップグレードも盛り込まれています。ユニークなところとしては、2画面出力に対応しています。

そして注目したいのは,従来の 1GB モデルに加え 2GB,4GB の RAM を搭載したモデルも登場したことです。1GB モデルが35ドルと据え置きで,2GB モデルは45ドル,4GB モデルは55ドルとなっています。LPDDR2 から LPDDR4 となったことで大幅な速度向上が見込めることも相まって,利用の幅はかなり広がるのではないかと思います。

2 Model B 以来の全面刷新と言ってよいでしょう。Raspberry Pi に対する高い期待を更に上回る,素晴らしいアップグレードです。

2019/07/01追記:
4B のベンチマークを取って過去の機種と比較している方がいます。
CPU 性能で従来の2〜4倍,GPU 性能で従来の1.5倍といったところのようです。Cortex-A57,恐るべし。さらに I/O についても,USB3.0・GbE 対応に加え RAM 帯域がほぼ倍,microSD も読み込み速度が倍と大幅に性能向上しています。そこに Raspberry Pi ならではの充実したソフトウェアサポートまであってこの値段なのですから,価格破壊も次のステージに進んだ感じがします。

Debian with Raspberry Pi Desktop を試してみる(日本語化等の手順紹介)

Debian with Raspberry Pi Desktop とは

青い空,白い雲。絶好の Liunx 日和ですね。

そこで今日は“ Debian with Raspberry Pi Desktop ”(以下 Debian with RPD)を試してみました。

Debian with RPD は昨年末に「PIXEL」として公開された Debian GNU/Linux ベースのディストリビューションで,その後「Debian with Raspberry Pi Desktop」という名前に変更されたようです。このディストリビューションはRaspberry Pi の標準 OS である Raspbian 同様 Raspberry Pi Foundation の主導で開発されているものであり,Raspbian に近い見た目とバンドルアプリを備えていることが特徴です。公開時,このブログでも簡単に紹介しました。

以前紹介した際は Live DVD としてしか利用できませんでしたが,現在では通常のデスクトップディストリビューションとして利用できるようになっています。今のところ RPD は LXDE のテーマに近い状態ですので,機能や安定性は既に実用的な水準に達しています。

早速起動してみる

Debian with RPD スクリーンショット

GRUB2 は Debian テーマのままながら,起動時に Raspberry Pi Desktop オリジナルのスプラッシュスクリーンが表示されます。デスクトップが開いてしまえば見た目は完全に Raspbian ですね。なお,標準ではキーボードレイアウト選択以外のローカライズは何もありません。スクリーンショットはローカライズ後のものです(あくまでも Debian なので翻訳も揃っており,簡単にローカライズできます)。

Debian with RPD スクリーンショット

ソフトウェアも Raspbian と同じものがプリインストールされて,設定も素の Debian ではなく Raspbian と同様になっています。

Debian with RPD スクリーンショット

この特徴的なアイコン等,テーマとしては「PiX」という名前が付けられているようでした。

ローカライズ

以下,ローカライズ(日本語化等)の方法等について解説します。シェルスクリプトになっており,そのまま実行して動くはずですが,例外処理などはしていないので適宜修正してお使いください。

Raspi.sh(root として実行)

#/bin/sh

apt-get update
apt-get upgrade

# 1. 最低限あったほうがいいパッケージの導入
apt-get install compton tlp tlp-rdw
# apt-get install aptitude vim xscreensaver
echo @compton >> /etc/xdg/lxsession/LXDE-pi/autostart
systemctl enable tlp.service
systemctl enable tlp-sleep.service
systemctl disable systemd-rfkill.service
# compton はコンパクトなコンポジットマネージャで,グラフィックが極端に古くなければ(GMA 900 とか以降なら),これを起動時に開始することで CPU 負荷を軽減し体感スペックを上げることができます。
# 万が一トラブルが発生した場合は Ctrl+Alt+F1 でシェルからログインして自動起動を削除するか(/etc/xdg/lxsession/LXDE-pi/autostart を開いて"@compton"の記述を削除), compton をアンインストール(apt-get remove compton)してください。

# 2. IM 導入
# 軽快さ重視なら Anthy がオススメ。
#   apt-get install uim uim-anthy kasumi
apt-get install uim uim-mozc mozc-utils-gui

# 3. ロケール・タイムゾーン変更
# 手動で raspi-config でもできます。というかそっちが正攻法?
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/g' /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
locale
timedatectl set-timezone Asia/Tokyo
timedatectl

# あとはユーザに戻って sourcehan-raspi.sh を実行すればローカライズは完成。

# 以下はお好みでどうぞ
# フォント導入
# apt-get install fonts-vlgothic fonts-ipafont-gothic fonts-ipafont-mincho
# 他のディストリビューションに通常標準搭載されている日本語フォントを入れておきたい場合は導入しておきましょう。なお,Droid と Unifont が標準で入っているため,特に入れなくても(表示品質はともかく)日本語表示に問題はありません。

# 標準アプリケーションの削除(Raspberry Pi 関係なく純然たる軽量 OS として利用する場合)
#   apt-get purge bluej geany greenfoot idle idle3 scratch scratch2 sense-emu-tools sonic-pi python3-thonny  claws-mail chromium
#   apt-get autoremove
#   mv /usr/share/raspi-ui-overrides/applications/raspi_resources.desktop /usr/share/raspi-ui-overrides/applications/raspi_resources.desktop.bck
#   mv /usr/share/raspi-ui-overrides/applications/magpi.desktop /usr/share/raspi-ui-overrides/applications/magpi.desktop.bck
#   mv /usr/share/raspi-ui-overrides/applications/python-games.desktop /usr/share/raspi-ui-overrides/applications/python-games.desktop.bck
# "Raspberry Pi Resources" と "The MagPi" はブラウザを起動するショートカット,"Python Games" は ./python_games/launcher.sh を起動するショートカットです。
# geany や chromium は残しておいてもいいかも。Claws Mail は軽量 MUA です。

# 自分がよく使うアプリケーションを入れていく
#   apt-get install firefox-esr firefox-esr-l10n-ja keepassx

# 用途によっていろいろ追加
#   apt-get install thunderbird thunderbird-l10n-ja simple-scan gimp filezilla vlc radiotray brasero easytag gparted ltris freeciv-client-gtk freeciv-server

# ある程度のグラフィック性能(目安:GMA X3100 以降)があるマシンならちょっとした 3D ゲームなんかも
#   apt-get install minetest megaglest extremetuxracer

# あとは普段使っている設定ファイルを ./ にコピーするといい感じに。
# お疲れさまでした。

sourcehan-raspi.sh(一般ユーザとして実行)

#/bin/sh

# Source Han フォントファミリを導入します。
# このスクリプトに実行権限を付与するか,"sh ./sourcehan-raspi.sh" して実行してください。
# フォントはこのスクリプトを実行したユーザのみに導入されます。

cd
if [ ! -d .fonts ]; then
    mkdir ./.fonts
fi
wget -t 3 -T 60 https://github.com/adobe-fonts/source-han-serif/raw/release/OTF/SourceHanSerifJ_EL-M.zip
unzip ./SourceHanSerifJ_EL-M.zip
mv SourceHanSerifJ_EL-M/SourceHanSerif-*.otf .fonts/
wget -t 3 -T 60 https://github.com/adobe-fonts/source-han-serif/raw/release/OTF/SourceHanSerifJ_SB-H.zip
unzip ./SourceHanSerifJ_SB-H.zip
mv SourceHanSerifJ_SB-H/SourceHanSerif-*.otf .fonts/
wget -t 3 -T 60 https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SourceHanSansJ.zip
unzip ./SourceHanSansJ.zip
mv SourceHanSansJ/SourceHanSans-*.otf .fonts/
ls ./.fonts
fc-cache -v -f .fonts
rm -rf SourceHan* __MACOSX

# Debian with RPD 用
sed -i -e 's/Roboto Light/源ノ角ゴシック Light/g' ~/.config/openbox/lxde-pi-rc.xml
sed -i -e 's/Roboto Light 12/源ノ角ゴシック Light 12' ~/.config/lxsession/LXDE-pi/desktop.conf
sed -i -e 's/Roboto Light 12/源ノ角ゴシック Light 12' ~/.config/gtk-3.0/gtk.css

参考:
Linux におけるラップトップマシン向け電力管理スイートの紹介(Pm-utils, Laptop-mode-tools, Powertop, TLP) – 怠惰の形而上学
Debian Jessie + Xfce で UIM ツールバーのアイコンの背景色がおかしいのを直すには – 怠惰の形而上学
Debian 上の GTK デスクトップ(Xfce, Gnome 等)で Qt アプリの外観を統合したい – 怠惰の形而上学

Debian with RPD,とても気に入りました。これからも使っていきたいです。

Raspberry Pi Foundation,PC 向け GNU/Linux ディストリビューションを公開

PIXEL for PC and Mac – Raspberry Pi
Raspberry Pi Foundation releases operating system for PCs, Macs • The Register

Introducing PIXEL – Raspberry Pi

今年9月,Raspberry Pi Foundation は,Raspbian のデスクトップ環境に “PIXEL” という新しい名前を与えました。PIXEL という名前は「Pi Improved Xwindows Environment, Lightweight」の(ちょっと苦しい)略とのことですが,「ZX81 で BASIC のプログラムを勉強していた頃を思い出させてくれるもの」とのことでもあります。この変化はどちらかといえば目立たないものでしたが,デスクトップ環境が Raspbian から切り離されたことで面白いことができるようになりました。Raspbian のデスクトップ環境 PIXEL を Raspbian 以外の環境でも使う,ということです。

上記記事では,デスクトップ環境として PIXEL を使用した Debian の実験版へのリンクが貼られています。書きぶりからすると,独立したデスクトップ環境としてというよりは Debian ベースの x86 用 GNU/Linux ディストリビューションとして開発してゆくものと見られます(elementary OS と Pantheon の関係に似ています。Linux Mint の Cinnamon・MATE のように専用から始めてだんだんと独立したデスクトップ環境としても成熟させてゆく考えかもしれません)。少々ややこしいですが,このディストリビューションも PIXEL と呼んでいるようです。

PIXEL のベースとなっている LXDE 自体軽量デスクトップ環境として代表的なもので,しかもその見た目を Raspberry Pi 用に調整してきたものであるため,とても軽量なうえ低解像度環境にも向いたものとなっています。Eben Upton 氏の記事では「512MB以上の RAM があれば私の ThinkPad X40 のようなビンテージ物のマシンでも動く」として実際に X40 で PIXEL が動作している写真がアップされています。これまで「軽い Linux ディストリビューション」が現れては消えてきましたが,使いやすさとシンプルさのバランスが取れているのみならず開発の継続性に実績がある Raspberry Pi Foundation によって提供されることとなる PIXEL は新しい定番となるでしょう。

PIXEL が公開されることにより Raspberry Pi に及ぼされる影響は,今のところよくわかりません。記事中では,学校では PIXEL・家では Raspberry Pi の Raspbian を利用するなどしてほぼ同様の環境を容易に提供できるようになる,デスクトップ環境としての PIXEL をより良いものとしてゆくために役立つ,という2つの理由が挙げられています。逆に,たとえば学校の授業で Raspberry Pi を使っている子どもが Windows に慣れるより先に Raspbian に慣れて,家に帰っても慣れた環境,すなわち PIXEL を使うようになる,ということもあるかもしれません。

ともあれ,今後に期待ができそうです。

Raspberry Pi Zero が日本国内発売へ

ニュース – 5ドルPCボード「Raspberry Pi Zero」、2017年第1四半期に日本で発売:ITpro

 これまで(残念なことに)英・米のショップにしか供給されていなかった Raspberry Pi Zero ですが,来年春からついに! 日本でも発売されるそうです!
 これまでも Pimoroni など海外ショップから入手することは可能でしたが,送料が本体価格の倍くらいかかるという問題がありました。
 最近日本にも製造ラインが作られたようで,先月から 3B が国内生産品に切り替わっており,ひょっとしたらこのことも関係あるかもしれません。
 Zero は PC ライクな用途には不向きですが,マイコンボードとしてはかなりの高性能,かつ Debian が動作するマシンとしてはかなりの低消費電力であり,いわゆる IoT モノ,ウェアラブル,デジタルサイネージ,画像や音声の処理を伴わないロボットなどの DIY プロジェクトにうってつけです。気軽に手を出せる価格であることから 1,詳しくないが DIY や Linux に興味のある人の「お試し」購入,あるいはそういう人を沼に突き落とす道具としても最適でしょう(?)

関連記事:
CPU1GHz,RAM512MB で5ドル! Raspberry Pi Zero 登場 – 怠惰の形而上学

Notes:

  1. PC のように使うためには追加のコスト(8GB 以上の microSD カードに加え,AC-USB アダプタ,電源用 microUSB ケーブル,microUSB ホストアダプタ,miniHDMI-HDMI アダプタ,HDMI ケーブル)が必要ですが,液晶・キーボード/マウスを除けば,通販と百円均一で1000-2000円程度で揃います。

Raspberry Pi + L-02C でバッチリ安定する多機能 LTE ルータをつくったメモ

*注意*
この記事は Raspbian が Jessie ベースの頃に書かれたものであり,現行の Raspbian Stretch では手順を適宜修正する必要があるかもしれません。また,筆者が回線付きの部屋へ引っ越したことに伴い,この LTE ルータは今のところ使用していません。
18年1月10日追記

3大キャリアが横並びの料金・制度を維持している一方で,ドコモの回線網を利用する MVNO 業界はますます盛り上がりを見せています。各社とも特色あるプランを用意し,様々なニーズに応えられる便利かつわかりやすいシステムを発達させています。そしてそのどれもが3大キャリアの同等プランの数分の一の料金なのです。

この春の契約見直しで,私は IIJmio のファミリーシェアプランを契約しました。音声通話オプションを付けて月額3520円,1ヶ月に10GBが利用でき,同一回線で SIM カードが3枚まで追加料金無しで利用できるというものです。10GBの高速通信容量の利用は回線ごとではなく SIM ごとに手軽にオン・オフすることができ,オフにすると最大200kbpsでの通信となります。スマートフォンならこんなものでも困りませんから,常時オフで使えば,スマートフォンでのデータ通信では容量が減らないことになります 1。これで,光回線と DTI の490円 SIM を置き換えることを狙いました。

今回は,その IIJmio 回線で使う LTE ルータを Raspberry Pi + L-02C で仕立てたメモです。

全体像

  • Raspberry Pi をルータにする。回線は ドコモ LTE ネットワーク(MVNO : IIJmio)とし,L-02C で接続する。
  • RPi ルータには無線アクセスポイント機能を持たせず,市販のブロードバンドルータ(光回線で使っていたもの)を AP モードで運用,有線 LAN で RPi ルータに接続する。
  • apt-cacher-ng を導入する。
  • その他,BGM 再生機能,時報チャイム機能などを搭載する。

使ったもの

  • Raspberry Pi B 3500円 2
  • LG L-02C 2000円
  • システムトークス USB ハブ SUGOI HUB 4X AC アダプタ付き 2600円 バッファロー BSH4AE12 1600円(重要)
  • Transcend 16GB UHS-1 microSDHC カード 500円
  • テンキー 300円
  • アクティブスピーカ 500円
  • Raspberry Pi 用 USB-AC アダプタ 3 1000円
  • microUSB ケーブル 100円
  • 筐体(100均の箱・蝶番,ネジ) 600円

計:11100円
(価格は100の位までに四捨五入してあります)

L-02C,USB ハブ,SD カードと筐体以外は実際には流用。後述しますが USB ハブの選択肢は非常に限られます。この機種を強く推奨します。

侮るなかれ熱暴走

最初,こんな感じで使っていました。
DSCF2397
DSCF2405

蓋を閉めて,すっきりしていいなあと満足していたのですが,なぜか止まってしまうことがあります。止まった状態でしばらく放置しても,SoC に電力は行っているようで,触ってみると熱を持っています。どうも熱暴走っぽい雰囲気です。SoC 温度のログを取ってみると,室温25度で60度近くまで行くようです。大した数字ではないようにも思いますが,初代 B で CPU が古い設計なので熱に弱いのかもしれません。熱で壊れたという話もちらほら聞くので,冷却は重要です。

ファンをつけるというのが最も確実な対策ですが,ファンレスは男のロマンですので,なるべくファンレスの枠内でのエアフロー改善を目指しました。その結果,こんな感じになりました。
DSCF2416
DSCF2419

はい,また100均です。前はもうちょっと精度の高いメッシュの小物入れも置いてあったのですが,近所3軒回ってなかったのでオシャレグッズコーナーにあったへなへなの小物入れで妥協しました。蝶番も100均で調達,ネジはホームセンターで購入した M3 の 8mm です。絶縁とホコリ除けのため,蓋側となる Raspberry Pi の下にはクリアフォルダから切り出したポリプロピレンのシートを敷いてあります。コンパクトさ重視のためエアフローは合理的とは言えませんが,効果はかなりあり,同条件で概ね43度以下で推移するようになりました。今のところハングアップもありません。夏場はどうなるかわかりませんが,50度を超えることはないでしょう。

(16/5/4追記)ウワーだめだ。カーテンを開けたまま部屋のサーキュレータを止めて散歩に出かけて帰ってきたら春の陽気に誘われて意識不明の重体になっていました。室温はそれでも28度。残念ながら,部屋の隅に置く通信機器としては,来たるべき夏をファンレスで乗り切るのは難しそうです。とりあえず普段使っているBIGFAN 80Uを筐体の横に置いてみました。ファンコンスイッチを挟んで回転数を抑えてありますが冷える冷える。室温28度ですが32度で安定しています。ロマンの敗北は残念ですが,やむをえまい。次に秋葉原に行った時にでも静かそうで5V以下でも動きそうなファンを買ってきて筐体に組み付けたいと思います。

仕様

LTE 回線の仕様

MVNO の LTE 回線には,プライベート IP アドレスが割り振られるものとグローバル IP アドレスが割り振られるものが存在しています 4。私が今回契約した IIJmio は前者です。プライベート IP アドレスはローカルエリアネットワーク内での居場所を指し示すものに過ぎず,インターネットの向こう側からこちらにアクセスすることはできません。したがって,LTE 回線を利用してサーバを公開したり,P2P ファイル交換を利用することはできません。逆に言えば,セキュリティについてはそれほど心配する必要はないでしょう。この記事はプライベート IP が割り当てられる回線を念頭に置いたものですのでご注意ください。グローバル IP が割り当てられる環境の場合,ファイアウォールやサーバ設定をより慎重に行い,ソフトウェアアップデートを欠かさず行う必要があります。

ハードウェアの仕様・問題

Raspberry Pi は,誰もが忘れていますがあくまでも教育用のマイコンボードであり,常時稼動でバリバリ使う前提で作られているデバイスではありません。電源アダプタはノーブランド品を避け容量に余裕があるものを選択するだとか,SoC と LAN コントローラにヒートシンクをつけるだとかいった基本は抑えておきましょう。また,第一世代では USB 端子の出力電流が少なく,各ポート 100mA となっています 5。最大で 740mA 消費する 6L-02C はバスパワー駆動では全く足りないので,セルフパワーの USB ハブを用意する必要があります。B+/2B では設定の変更によって, 7,3B では,デフォルトで全ポート合計で最大 1.2A まで供給可能 8なので,一時的な使用であればバスパワーでも問題なさそうですが,後述のように安定して運用するためには USB ポートの電源を制御する機能が必須であり,B/B+/2B/3B の内蔵ハブともにその機能はないようですので,やはり SUGOI HUB を購入する必要が有ります。

L-02C について,当初は問題が多かったようですが,最新ファームウェア V10e では安定しているようです 9。ただし,いくつか注意すべき点があります。
・初期設定では,始めに CD ドライブとして認識され,それを eject するとモデムとして改めて認識されるというわけのわからない仕様になっています。これは無効化できます(後述)。
・SIM カードの認識がシビアなようで,mini/micro/nano SIM にアダプタを噛ませた状態で挿入すると SIM を認識できません(インジケータが赤く点滅していたら,SIM を認識できていないということ) 10。これは厚みに起因するらしく,アダプタの「背」の部分を切り抜くことで解決します。

Raspberry Pi の準備

SD カードへのイメージ書き込み

OS として「Raspbian Jessie Lite」を使います。これは Raspbian から X 等を除いた最小版で,今回のように Raspberry Pi をデスクトップ用途でない目的に使用する場合に適しています。

まず,Raspberry Pi Foundation 公式サイトから,Raspbian Lite のイメージをダウンロードします。

zip ファイルを解凍のうえ,dd で SD カードに書き込みます。もし SD カードが /dev/sdc として認識されていれば,コマンドは以下のようになります。

$ sudo dd bs=1G if=Downloads/2016-03-18-raspbian-jessie.img of=/dev/sdc

書き込み終えたら Raspberry Pi に挿入して起動し,ユーザ名 pi,パスワード raspberry でログインします。

raspi-config でもろもろの設定をする

$ sudo raspi-config

“Internationalization Options” および “Expand Filesystem”を実行,設定。Boot Options から Console Autologin を選択(後述するテンキーでの操作を可能とするため)。Advanced Options の SSH から SSH サーバ有効化。好みで Hostname や Memory Split 11も設定。
続きは SSH から。

ユーザ名を変更

まあ好みの問題です。

$ sudo adduser hoge
$ sudo nano /etc/systemd/system/getty.target.wants/getty@tty1.service

自動ログインするユーザを変更します。

ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM

となっている行の「pi」を新しく作ったユーザにします。

$ sudo gpasswd -a hoge adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi

pi が入っているもろもろのグループに入っておきます。

$ sudo passwd

su できたほうが便利なこともあるので,root のパスワードを設定して su できるようにします。

音が出るようにする

Raspbian Lite では標準ではオーディオドライバが読み込まれていないので,これを読み込みます。

$ sudo modprobe snd-bcm2835
$ amixer sset PCM 100%
$ speaker-test

音が出たら,起動時にカーネルモジュールを自動で読み込ませるようにします。

$ sudo nano /etc/modules

末尾に以下の一行を追加。

snd-bcm2835

ルータ機能のセットアップ

L-02C のファームウェアアップデート,リセット,CD として認識される機能の無効化

ファームウェアアップデートと端末リセットは Windows でやります。ドコモの製品ページに書いてあるとおりにやるだけです。

次に CD として認識される機能を無効化します。AT コマンドを送ることで恒久的に 12無効化することが可能です。

手順は以下を参照のこと。

wvdial の設定,IP フォワーディング・IP マスカレード

書こうと思ったのですが,こちらも既に素晴らしい記事が多くありますので紹介のみにとどめます 13。私が見つけた中で最も網羅的でかつわかりやすい記事は、上の記事と同じサイトのこちらの記事です。

ほぼ上のとおりにやりました。違うことをしたのは以下のみです。

  • usb_modeswitch は今は導入不要。
  • wvdial.conf で,
    Init3 AT+CGDCONT=1,"IP","iijmio.jp"

    を追加(フラッシュメモリに APN をあらかじめ書き込んでおいて使うのではなく,接続時に ID・パスワードと一緒に渡す)。元々の Init3 は Init4 に。

  • wvdial.conf で,/dev/ttyUSB2 ではなく /dev/serial/by-path/platform-bcm2708_usb-usb-[ここは環境によって違うはず].2-port0 を指定。こちらは(ttyUSB* と違い)物理的に同じ場所に挿される限り不変なので,L-02C を再起動した(抜いて挿し直した)場合にも Raspberry Pi の再起動が不要になる。
  • $ sudo vi /etc/network/interfaces
    iface eth0 inet manual

    となっているのを,

    auto eth0
    iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0

    などとし,固定 IP を指定する。

  • iptables の設定保持用に netfilter-persistent (iptables-perssstent) を導入。仕上がったら
    $ sudo netfilter-persistent save

    するだけで保存して次回起動時にも読み込んでくれる。

  • まあ念の為ということで ssh は 192.168.0.0./24 および 192.168.1.0/24,domain および bootp (dhcp) は 192.168.1.0/24 からのアクセスのみを許可するよう変更。グローバル IP が振ってくる回線の人は必須です。別の回線から当該回線の IP に nmap -Pn してみて出てこなければオーケー。このへんがわかりやすい→iptablesの設定方法|さくらインターネット公式サポートサイト
  • ディレクトリ,ログ,DNS サーバなどを自分の好みに変更。

ほか,以下のページも参考にしました。

ルータ以外の機能のセットアップ

ルータ以外の機能をセットアップします。apt-cacher-ng を導入する以外は以前書いた「Raspberry Pi ホームオートメーション計画(1)」とほぼ同じです 14。それぞれの機能は USB テンキーで操作できるようにします。

apt-cacher-ng

Apt-Cacher Next Generation は,APT の deb ファイルをキャッシュしてくれるソフトウェアです。これを導入することによって,アップデートに伴うデータ通信を削減することができます。LAN 内に Debian 系で同じアーキテクチャ(i386 など)の同じディストリビューションが導入されたマシンが複数台ある場合に有用です。サーバにインストールしたうえでクライアントでプロキシの設定をするだけで利用できます。なお,場合によっては大量のデータをローカルに書き込みますので,SD カードの寿命を大きく削ることが予想されます。最初 USB メモリや USB HDD などに書き出すことも考えましたが,一度設定が完成したらオリジナルの(消えたら困る)データは蓄積されませんので 15,SD カード一本で行って壊れたら都度買い直して dd でイメージを書き戻すようにした方が手間を考えると低コストであると考え,とりあえずそれで様子を見ることにしました。

# aptitude install apt-cacher-ng

次にポートを開けます。ローカルネットワークから,ポート3142への通信を許可します。上で紹介したページでの IP アドレスレンジ,rules の場合の例。

$ sudo iptables -I OPENNEW 4 -p tcp --dport 3142 -s 182.168.1.0/24 -j ACCEPT

よくある凡ミスでパケットを全部 drop した後ろにルールを追加して反映されないというのがありますので気をつけてください 16。iptables は上から順番に逐次マッチングされて,最初に見つかった合致するルールだけが使われます。

LAN 内のマシン全てに以下のファイルを作ります。

# vi /etc/apt/apt.conf.d/02proxy

中身はこんな感じで。

Acquire::http::Proxy "http://192.168.1.1:3142/";

update のうえで何かインストールしてみて,/var/log/apt-cacher-ng/apt-cacher.log にきちんとログが残っていたらうまくいっています。http://192.168.1.1:3142/ にブラウザでアクセスすると,キャッシュのヒット率などを見てニヤニヤすることができます。
第315回 apt-cacher-ngを使ってAPT用キャッシュプロキシの構築:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

音楽再生

次に ogg123 を導入します。この手の用途では mplayer がよく使われますが,多機能な一方 X に依存しているなどヘッドレス環境で使うにはあまり便利でないので,単機能でコンパクトなこちらのソフトを選択しました。

$ sudo aptitude install vorbis-tools

たとえば,~/Music/Classical にある全ての ogg ファイルをシャッフルして無限ループさせる場合は以下のようにします。

$ ogg123 -r -z -q Music/Classical/*.ogg &

mp3 ファイルを使用する場合は,mpg321 を使用します。ソフト名は mpg321 ですが,コマンドとしては mpg123 でもデフォルトでパスが通っています。逆に ogg321 はダメなので,ごっちゃにならないよう mpg123 として使うことをおすすめします。

$ sudo aptitude install mpg321
$ mpg123 -r -z -q Music/Classical/*.mp3 &

これを後で alias に設定します。

チャイムを鳴らす

部屋にいることが多い学生身分なので,だらだら過ごしてしまわないよう時報を鳴らすようにしています。私の設定は以下で,朝8時〜夜10時まで1時間ごとにチャイムが鳴ります。

$ crontab -e
0 8-22 * * * ogg123 -q [パス]/chime.ogg

なお,「crontab -e」しようとして「crontab -r」しちゃうというのは定番ネタですので,.bashrc に alias ‘crontab’=’crontab -i’ を加えておくのがおすすめです。
cron の設定ガイド

データ通信量を出す

本当は「みおぽん API」を使おうと思ったのですが,この辺になるとそろそろめんどくさい短い人生の限りある時間を大切に使おうという気持ちが強まってきたので,/proc/net/dev を使って簡易的に済ませます。

$ grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $(((x2+x10) / 1024 / 1024)); done

これで eth0 を通った上り・下りのデータ量の合算を表示できます。単位は MB です。後述のように LTE の接続が切れて ppp0 が消えてしまうことがあり,その時に累積が消えてしまうので,入口の ppp0 ではなく LAN への出口の eth0 を見ています。Raspberry Pi 自体の通信(ソフトウェアアップデートなど)は反映されませんが,このさい細かいことは気にしない。

/proc/net/dev は再起動するとリセットされるので,電源を切るときはどこかに書きだしておく必要があります。/var/log/packetcount.log に書き出すとして,以下のようにすると合算して表示できます。

$ grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done

このまま実行するとファイルが存在せず何も挿入されず文法エラーになるので,/var/log/packetcount.log を作って 0 とだけ書いて保存しておいてください(雑

これを毎月リセットするために,crontab を設定します。Raspberry Pi には RTC がなく,たとえば1日0時5分などとすると5分以内に NTP サーバとの通信がうまくいかなかった場合に実行されてしまいますので,余裕を持った時間指定にしておきます。

$ sudo crontab -e
1 10 1 * * echo '0' > /var/log/packetcount.log

ネットワークの転送量を調べる方法 – ぴょぴょぴょ? – Linuxとかプログラミングの覚え書き –

OpenJTalk で喋らせる

$ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001

オプションを引数で指定するのが必須だったり,wav ファイルとして出力されるのでそれを別途再生する必要があったりといろいろ煩雑なので,引数として文字列を渡せばそのまま喋ってくれるスクリプトを用意しておきます。なお,Raspbian のベースが Wheezy から Jessie に変わった関係で,OpenJTalk の使い方もやや変わっているのでお気をつけ下さい。

$ nano /usr/local/bin/ojsay
#!/bin/bash
TEMP=$HOME/ojsay.wav
echo $1 | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -ow $TEMP
aplay --quiet $TEMP
rm $TEMP
$ chmod +x ojsay
$ ojsay 誰かがヨーゼフ・Kを中傷したにちがいなかった。悪いこともしていないのに,ある朝,逮捕されたのだ。

少し待たされて,読み上げられるはずです。むちゃくちゃお手軽ですね。処理に時間がかかるのと,一文が長くなると突然読み上げがやたら遅くなるというバグ?があるようなので,一度に喋らせるのは一言二言にしておくのがおすすめです。
他のコマンドの出力やウェブスクレイプイングと組み合わせれば,可能性は無限大です。

$ ojsay "$(date +"%B%d日 %I時%M分")"

日時を読み上げ。

$ ojsay "現在のコア温度は $(echo $(($(cat /sys/class/thermal/thermal_zone0/temp)/1000)) | sed s/\.[0-9]+$//g)度 です"

SoC の温度を読み上げ。

$ sudo aptitude install curl
$ ojsay "$(curl http://www.tenki.jp/forecast/3/16/4410/13101-daily.html 2> /dev/null | grep -e "wethreDrtalIiconText" | sed "-e s/<[^>]*>//g" "-e s/^ *\(.*\)\$/今日の天気は \1 です/" | head -n1)" | head -n1"

天気を読み上げ。

$ ojsay "$(curl http://www.asahi.com/ 2> /dev/null | grep -A 1 "iref=comtop_6" | sed "-e s/<[^>]*>//g")"

朝日新聞社ウェブサイトの見出し読み上げ。(流石に結構待たされる)

テンキーで操作できるようにする

入力は USB テンキーから行います。最初はプログラマブルテンキー「NT-19UH2BK」を検討したのですが,金欠なので無駄をなくし環境負荷を軽減するために棚に転がっている普通のテンキーを有効活用することにしました。入力そのものは数字だとか記号だけですので alias でそれぞれにコマンドを割り当てます。まあ,今回の用途なら特に不足はありません。

とりあえず,こんな感じで割り当てました。

* 再起動
*** 停止
7 SoC 温度読み上げ
8 ニュース見出し読み上げ
9 音声出力オン
+ データ通信量読み上げ
+++ データ通信量リセット
4 天気予報読み上げ
5 日付読み上げ
6 音声出力オフ
1 再生開始1
2 再生開始2
3 再生停止
0 ping
00 L-02C 電源リセット(詳細は後述)
000 アップデート試行
000000 とてもつらい

以下を ~/.bashrc に追加します。

alias '*'='ojsay '再起動します'; if [ "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $(((x2+x10) / 1024 / 1024)); done)" != "" ]; then sudo sh -c "echo "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done)" > /var/log/packetcount.log"; fi; sudo sh -c "shutdown -r now"'
alias '***'='ojsay '停止します'; if [ "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $(((x2+x10) / 1024 / 1024)); done)" != "" ]; then sudo sh -c "echo "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done)" > /var/log/packetcount.log"; fi; sudo sh -c "shutdown -h now"'
alias '7'='ojsay "現在のコア温度は $(echo $(($(cat /sys/class/thermal/thermal_zone0/temp)/1000)) | sed s/\.[0-9]+$//g)度 です"'
alias '8'='ojsay "$(curl http://www.asahi.com/ 2> /dev/null | grep -A 1 "iref=comtop_6" | sed "-e s/<[^>]*>//g")"'
alias '9'='amixer sset PCM on'
alias '+'='ojsay "今月のデータ通信量は $(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done)メガバイト です"'
alias '+++'='ojsay "データ通信量の記録をリセットします"; sudo sh -c "echo '0' > /var/log/packetcount.log"; sudo sh -c "shutdown -r now"'
alias '4'='ojsay $(curl http://www.tenki.jp/forecast/[お住まいの地域の URL] 2> /dev/null | grep -e "wethreDrtalIiconText" | sed "-e s/<[^>]*>//g" "-e s/^ *\(.*\)\$/今日の天気は \1 です/" | head -n1)'
alias '5'='ojsay "$(date +%B%d日%I時%M分)"'
alias '6'='amixer sset PCM off'
alias '1'='ogg123 -r -z -q ~/Music/Jazz/*.ogg &'
alias '2'='ogg123 -r -z -q ~/Music/Classical/*.ogg &'
alias '3'='sudo sh -c "pkill -f 'ogg123'"'
alias '0'='ojsay "$(ping=$(echo "$(ping -c1 8.8.8.8)"|grep " 0% packet loss"); if [ "$ping" = "" ]; then echo "ネット接続に問題があります"; else echo "ネット接続は正常です"; fi)"'
alias '00'='sudo sh -c "checkppp0"'
alias '000'='sudo sh -c "aptitude update; sudo aptitude upgrade -y"'
alias '000000'='ojsay "とてもつらい"'

このままだと sudo sh がパスワード入力待ちで止まってしまいますので,これらのパスワード入力を不要にします(雑

$ sudo visudo
hoge ALL=(ALL) NOPASSWD: /bin/sh

を追加。ま,今回の場合パスワード入力は自分のフールプルーフになればいいのでこれでよしとします。

テンキーにシールを貼るなどして割り当てた機能を書いておくとわかりやすいです。

L-02C の自動再起動を実現する

よし完成,めでたしめでたし……と思ったら,ときどき通信が切れて,L-02C の電源を一度切るまで(ポートから一度抜いて挿しなおすまで)使えなくなることがあることに気が付きました。どうも L-02C のファームウェアの安定性に何かしら問題があるようです。数分おきに ping を飛ばすなどして自動切断の回避を試みるなどしても 17,あまり効果はないようです。他は完璧なのに,ここだけはどうやってもうまくいきません。
MR-GM2運用テスト、とりあえず失敗・・・ | めざせ東京リーマンの千葉週末田舎暮らし
MR-GM2運用テスト、その後・・・|めざせ東京リーマンの千葉週末田舎暮らし ー太陽光発電の売電収入で別荘が買えるかー
格安simをパソコンで使えるようにする曲者デバイスL-02cを紹介(オススメするとはいわない)|投げて、捨てて、シンプルライフ

残念ながら AT コマンドでハードウェアを再起動させる方法はない模様です。しかしまあ,要するに,一度電源を切ってやればよいのです。/sys/bus/usb/drivers/unbind や /sys/bus/usb/devices/*/power/control 18 19 20から電源を切れますし……と思ったら,できない。前者は認識はしなくなるけど電源は切れない。後者は存在すらしない。なんで。

しばらくさまよい歩くと,「hub-ctrl.c」というイカしたツールを見つけました。これを使えば,USB ポートの電源をより手軽に制御できるとのことです。――自分の環境ではできませんでしたが。なんでも,lsusb -v してみて Hub Descriptor に「Per-port power switching」とあるものでしか電源制御はできないらしい。「No power switching」や「Ganged power switching」とあるものはそもそもそのための回路が入っていないとのこと。最初に購入した U2HS-T201SBK という USB ハブは,案の定というか「Ganged power switching」でした。なんてこった。名前からはできそうな雰囲気が漂っているんですけどね…..光学マウスを付けて試してみたら,(全てのポートに一斉に反映されるのではなく)特定の1ポートのみに反映され,ランプが消えました。これは行けるか? と L-02C につなぎ替えてみたら無理でした。USB ランプ(単に電力を取ってるだけでなんの制御回路もなし)をつないでいると p=0 にしても光ったままですから,電源自体は供給されたままのようです。手元にあった U2HS-T201SBK(バスパワー)および BSH5U03(セルフパワー)の2機種で同じ挙動。また,実機が手元にないのと情報が少ないのでなんともいえませんが,今回使用した B に加え B+/2B/3B の内蔵ハブもポート個別の電源制御はできないようです。

じゃ「Per-port power switching」なハブってどんなのがあるのというと,マザーボード内蔵のものを除き殆ど無いんだそうな。まあ確かに USB ハブのポートを個別に制御しようという需要なんてあんまりないでしょうからねえ。動作報告のある現行品で唯一の選択肢が,「SUGOI HUB 4X (USB2-HUB4X)」というものらしい。なんとなく不安になる製品ページですが,ともかく,4つあるポートの内なぜか2つだけですがちゃんと電源を制御でき,USB ランプのような電源ラインしか使っていない機器もオンオフできるらしい。ということで購入。予算オーバーつらい。

喜び勇んで /sys/bus/usb/ 方面を漁ってみたのですが,power/control がない。ああそうだった。調べてみると,Raspbian が採用している4.1系のカーネルではこの制御方法は廃止されているようです。unbind にデバイス ID を書き込むやり方は使えて,無事にオンオフできましたが,両方のポート一斉にしかできません 21。まあそれでも困りませんが,せっかく買ったので実力を出し切りたい。幸い,先述の hub-ctrl を試してみたところ今のカーネルでもそのまま使えましたので,これを採用することにしました。

$ wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c
$ sudo aptitude install libusb-dev
$ gcc -o hub-ctrl hub-ctrl.c -lusb
$ chmod +x ./hub-ctrl
$ mv ./hub-ctrl /usr/bin/
$ sudo hub-ctrl -b 001 -d 004 -P 2 -p 0
$ sudo hub-ctrl -b 001 -d 004 -P 2 -p 1

おー,いけるいける。lsusb して NEC Corp. HighSpeed Hub とあるものの Bus を -b, Device を -d,ポート番号(向かって左から1,2)を -P で指定しています 22。-p 0 でオフ,-p 1 でオン。これさえあればこっちのものです。
というわけで,

$ sudo vi /usr/local/bin/checkppp0
#!/bin/sh
pppalive=$( /sbin/ifconfig | grep "ppp0" ); if [ "$pppalive" = "" ]; then /usr/bin/hub-ctrl -b 001 -d 004 -P 2 -p 0; sleep 10; /usr/bin/hub-ctrl -b 001 -d 004 -P 2 -p 1; fi

(crontab に一行で書こうと思ったけどなんかうまくいかなくて面倒くさくなってそのまま外部のスクリプトにしたというアレ)

(16/9/11追記)追記し忘れていましたが,ハブを BSH4AE12 に交換して,1)ハブしか接続していなくても Device の番号がたまに変わるようになる,2)ポートのひとつひとつを選択して入切してやらないといけないっぽい?という仕様の違いがあったので,それに対応するために checkppp0 を修正しました。BSH4AE12 対応版は以下です。たぶん大丈夫と思いますがちゃんとチェックしてないのであんまり自信ない。
#!/bin/sh
pppalive=$( /sbin/ifconfig | grep "ppp0" )
if [ "$pppalive" = "" ]
        then
        HUB=`/usr/bin/lsusb -v 2>/dev/null | grep ^Bus | grep "Genesys Logic, Inc. USB-2.0 4-Port HUB"`
        BUS=`echo $HUB | awk '{print $2}'`
        DEV=`echo $HUB | awk '{print $4}' | sed -e "s/\(.*\)\:/\1/p;d"`
        for i in 1 2 3 4
        do
                /usr/local/bin/hub-ctrl -b $BUS -d $DEV -P $i -p 0
        done
        sleep 20
        for i in 1 2 3 4
        do
                /usr/local/bin/hub-ctrl -b $BUS -d $DEV -P $i -p 1
        done
fi

ここまで何日もいじっていて,圏外(ランプ黄色),接続待機でのハングアップ?(ランプ白),接続再試行中のハングアップ?(ランプ青点滅)問わず通信ができなくなった時には確実にセッションも切れて(そしてそう認識されて) ppp0 が消えるらしいということがわかったので,単に ppp0 の存在確認をしています。ping を飛ばすのと違いネットワークに負担がかかりませんし,CPU も食いませんので,毎分だって実行できます。これによって,ダウンタイムを最小化でき,自宅回線としてストレス無く利用することができるようになります。15分の load average を見ても 0.1 を超えることはない(おおむね0.05〜0.07で推移)ようなので,更にチェックの頻度を上げるのもアリでしょう。

(16/5/1追記)と書きましたが,ダメっぽいです。時々ひっそりと死んでいることがあります。理由は特定できていませんが,ログに出てないのでハードウェア側っぽく,熱は大丈夫なので電源周りっぽい雰囲気があります。2.4A対応アダプタ+ケーブルで試してもダメなので,本体の問題の模様 23。だとしたら,B+以降やポリヒューズ改造後の個体なら大丈夫かもしれません。そのへんはまた後で検討するとして,とりあえず毎分ではなく5分おきに実行するようにしてみたところ安定しています。
(16/11/2追記)別ハードウェアで毎分の実行を試してみて気付きましたが,wvdial の自動再接続で事が済むような“正常な”接続断にまで L-02C 再起動で対応することが増えてしまうため,却ってダウンタイムが一気に増えてしまいます。やはりチェックのインターバルは数分程度はあったほうが良いようです。

なお,今回は Raspberry Pi 本体にハブしか挿しておらず数字が変わらないのでベタ指定してますが,他のデバイスも挿している場合は,こちらを参考に lsusb から自動取得するようにするとよいでしょう 24

では,最後の敵をいざ倒さん。

$ sudo crontab -e
*/5 * * * * /usr/local/bin/checkppp0

ふー,倒した。長かった。ともあれ,これでやっと RPi ルータが完全体になりました。

(16/8/14追記)SUGOI HUB 4X が早くも故障してしまいました。享年4ヶ月という夭折です。改めてネットを眺めてみると,比較的ニッチな製品の割に故障報告が多く目に付きます。じっさい製品の値段もそう高くありませんし,回路は奢っていてもコンポーネントの質は高くないのかもしれません。修理をしても(これがまた販売店への持ち込み不可で最初にメールであれこれしないといけないとやたら煩雑なのですが,それはまた別の話……)また壊れてしまうかもしれません。そこで代替機種を調べてみることにしました。白羽の矢が立ったのが,「節電 USB ハブ」を謳うバッファロー BSH4AE06 です。とても小さい上,手にとってみると非常に軽く,おそらく中はスカスカでしょう。しかしその分,部品点数が少なく壊れにくいことが期待できます。この機種は既にディスコンになっており,後継機種として BSH4AE12 というものが出ています。型番や能書きを見る限り,中身は miniUSB 対応から microUSB 対応に修正された以外は同じものではないかと思われます。今はまだ BSH4AE06 の方が安いですが,まもなく入れ替わることになると思います。なお,USB 3.0 ハブにも目を向けると,電源制御に対応しているという報告のあるものがいくつもあります。 25ただし,セルフパワー対応のものはまだ値段がこなれていません。

さて BSH4AE06 ですが,結論としては「当たり」でした。Per-port power switching ではなく ganged power switching ですが,先述のような,実際には電源制御できないのに(おそらくは設計上の不備によって)情報だけはそう渡していると思われるものではなく,「本物の」 ganged power switching ですので,ポートごとの電源制御はできませんが,ハブの全ての電源を一度にオンオフすることであれば可能です。lsusb すると「Genesys Logic, Inc. USB-2.0 4-Port HUB」というのがありますので,/usr/local/bin/checkppp0 を先述の要領で書き換えます。また,/etc/wvdial.conf のモデムのパスも書き換える必要があります。

あと,この件に関する修正を加えるにあたって,この記事がものすごく役に立ちました。当然といえば当然ですが,何かするときに記録を細かく残すのは大切ですね。

しばらく運用してみて大丈夫そうなら,完成です! おめでとう! 忘れずにバックアップしておきましょう。shutdown -h now したあとカードを別のマシンに刺して,わかりやすいファイル名で保存しておきます。圧縮をかけると未使用領域が縮んでナイス。

$ sudo sh -c "dd if=/dev/sdc | gzip -c > RPI-LTE-ROUTER-$(date "+%y-%m-%d").gz"

(/dev/sdc の部分は環境によって異なります)

いやあ〜よかったよかった。

感想

3,4年周回遅れなだけあり情報が多く,基本機能については OS 導入から DHCP で IP アドレスを貰ってネットに出られるようになるまでが1時間くらいで終わりました。が,そこからが長かった。ちょっとした問題を潰すために試行錯誤したり,問題の原因を探るために勉強しなおしたりで,期間で一週間以上,丸何日かを費やしました。この記事を書くにあたっても,調べなおしたり再現するか確かめたりしてさらに1日潰れました。いちおう2週間近く実用したうえでの記事公開ですが,まだ何か起こるかもしれないとヒヤヒヤです。しかし,市販のモバイルルータも常時稼動に対応するほどには安定してはいないらしく,データ通信ドングルに対応したルータもいまいち痒いところに手が届かないようですから,LTE 回線を自宅回線として使いたいのであれば,「Raspberry Pi で DIY する」というのがいまのところ最良の選択肢でしょう。ネットワークの復習を含めなかなか勉強になるので,時間に余裕があればやってみると面白いはずです。

4ヶ月使ってみての感想

記事公開から4ヶ月ほど経ちました。しばらく光と併用していたので正味では2ヶ月くらいですが,中間報告をば。

  • 1ヶ月10GBに収めるためには1日あたり333MBまでの通信に収める必要があります。これはけっこう厳しいですが,ストリーミング系は禁止とし,漫然とウェブブラウジングすることもやめれば,特に問題ない範囲です。この負のインセンティブにより時間を有効に使えるようになるというメリットもあります(?) ブラウザを起動しない日を週に何日か取るようにすれば完璧です。土日は古今東西の名著を手にとったり近場を散歩したりして過ごしましょう。なんて健康的なんだ。
  • 通信速度はそれなりですが,LTE なので ping が速めで,体感としては割と快適です。テキストベースのサイトであれば光回線と違いがわかりませんし,画像の多いサイトでも少し引っかかる程度です。混雑する時間帯でも体感としては ADSL の遅いとき程度です。
  • 自動再接続のおかげで「使おうと思ったら繋がらない」ということはほとんどありませんが,回線が混雑する時間帯には複数のタブを同時に開くと読み込み中のまま止まったり接続がタイムアウトしたりすることがあり,その場合にはページを再読込する必要があります。
  • Linux ディストロのインストールディスクなど大きなファイルのダウンロードは困難です。通信速度が充分でも途中で失敗してしまうことが多いです。Wget などのダウンローダを使用すると多少改善しますが,それでも失敗が多いです。Bittorrent は“無駄”な通信が多いので容量制限のある回線では避けたほうが無難ですが,IIJmio では遮断されているようでそもそも使えません。ダウンロードに失敗するとその分のデータ容量が無駄となり痛いので,大きなファイルのダウンロードはなるべく避けましょう。なお,OS のアップデート程度であれば,回線が空いている時間帯であれば特に問題なくできます。
  • 空冷にしてからとても安定していますが,帰宅したらラズパイが落ちていたことが一度だけありました。電源か熱でしょうが,再現しないのでなんともいえません。思えば今使っている初代Bはもう4年くらい前に買ったブツですので,ハードウェアの変更も視野に入れています。
更新履歴
16/05/01 接続確認の頻度が高すぎて動作が不安定になることがあった件を修正
16/05/04 ファンレスの夢が破れた件について追記
16/08/14 SUGOI HUB 4X がすごいすぐ壊れた話と BSH4AE06 への乗り換えについて追記
16/09/08 4ヶ月使ってみての感想を追記
19/10/09 見出しを整形し,目次が生成されるようにしました。しかし改めて読み返してみると,メモとはいえ随分混沌としてますね……せめて文の順番ぐらいは整えようかとも思ったのですが,当時の前のめりっぷりが少し懐かしくなったのでこのままにしておきます。

Notes:

  1. もっとも,高速通信オフ時は3日で366MBまでという制限があります。 通信規制はありますか? | IIJmio
  2. Raspberry Pi (1) B+ の現在の価格より
  3. SUGOI HUB 付属 AC アダプタの出力は 5V2A なので数値上は USB ハブから余裕を持って取れそうなのですが,なぜか正常動作しませんでした。気になりますが,面倒なので今回は調べません。
  4. 一般的には前者が多く,OCN 系や Biglobe 等はグローバル IP らしい。Interlink のように安価に固定 IP を提供しているところもあります。
  5. USB – Raspberry Pi Documentation
  6. マニュアル p.120
  7. Raspberry Piブログ : [コラム] Raspberry Pi Model B+でUSBの最大出力を1.2Aにグレードアップしよう, なお safe_mode_gpio=4 は古いバージョンでのオプションで,互換性のために書かれているだけのため,最近のバージョンを使っている場合は max_usb_current=1 だけで大丈夫です。
  8. Raspberry Pi • View topic – RPi 3 – Very poor wifi performance, 16/4/19 Raspberry Pi Foundation エンジニアの Dom 氏曰く,”1.2A is the default and max_usb_current has no effect on Pi3.”
  9. 価格.com – 『バージョンV10eで安定化』 docomo L-02C [レッド] のクチコミ掲示板
  10. L-02C SIM(UIM)カードが認識しなくて困っていたが解決のようです|ぽちびろの日々ツイート
  11. ディスプレイに繋いでも CUI のみで VRAM はほぼ使うことはないのでがっつり減らしてよい。その分,システムに割かれるメモリ容量を増やせる。ただ,最小値は16MBらしい。 RPiconfig – eLinux.org – http://elinux.org/RPiconfig
  12. 設定がフラッシュメモリに保存されます。
  13. 一方で、さすがに LTE 回線を自宅回線にしようというニーズはまだ殆どないようで,安定しそうにない構成だったり,重要な情報が抜けていたり,中には明らかに問題のあることをしている記事も散見されますので,実際に作業を始める前に検討する必要があります。
  14. なお part2 は結局まだ書けていません。音声入力はやたら手間がかかる割にうまく行っても他の入力手段より実用上快適にはならないということがわかったので pending という名の放置中です。そのうちやる気と時間がある時にでも……
  15. 犯罪に巻き込まれたような場合にログが残ってなかったら困るな,という程度
  16. またやっちまった。
  17. 定期的に ping を飛ばす手順はこちらを参照のこと。 常時接続の維持 (PING コマンド)
  18. Controlling a USB power supply (on/off) with linux – Stack Overflow
  19. kernel – Turning off power to usb port. Or turn off power to entire usb subsystem – Unix & Linux Stack Exchange
  20. Power OFF and ON USB device in linux (ubuntu) – login: root
  21. 細かく指定しようとするとエラーが出る。
  22. そこに挿しているデバイスではなく,ハブを見ることに注意してください。
  23. Minecraft Pi もできたので,Bとはいえ改良後のリビジョンのはずなのですが……
  24. ただし,手数が増える分 CPU 負荷はやや増えるはずです。
  25. 詳しくないですが,USB HDD エンクロージャも USB 3.0 のものはどれも電源連動に対応していますし,規格上対応が必須になるなどしたのではないか? という気がします。

Raspberry Pi 3 model B の国内販売が開始

「Raspberry Pi 3 Model B」発表のお知らせ – Raspberry Pi Shop by KSY
Raspberry Pi 3 Model B – Raspberry Pi

 先月末に発表・発売された Raspberry Pi 3 model B の国内販売が始まったようです。3 B は無線 LAN と Bluetooth の内蔵が大きな特徴ですが,「技術基準適合証明等 1」を取得したうえでの発売であるため,日本国内において合法的に使用することができます

 Raspberry Pi Foundation 公式サイトで 2 と比較しての特長として挙げられているのは以下。

  • A 1.2GHz 64-bit quad-core ARMv8 CPU
  • 802.11n Wireless LAN
  • Bluetooth 4.1
  • Bluetooth Low Energy (BLE)


そのほかにも細かな改良や仕様変更があります。詳細は冒頭にリンクを貼った KSY のプレスリリースを参照のこと。注意すべき点として,推奨される電源電流が 2.5A に引き上げられています。もっとも,2 でも無線ドングル込みで安定動作させるにはそれくらい用意するのが普通でしたので,そういう意味ではこれまで通りと言えましょう。

 気になる点として,価格が税抜5250円(税込5670円)と,米国の35ドル 2 や英国の25ポンド 3を考えると,かなり割高な印象を受けます。よく不満の声を聞く EU でも 35,65 ユーロ 4となっています(以上全て税抜価格)。実に1ドル150円・1ポンド210円・1ユーロ147円という世界です。為替が不安定とはいえ,ここ30年くらいを振り返ってみても,そこまで行くことはなかったはずです。
 もちろん技適証明にもけっこうなコストがかかりますし,そもそも原価ギリギリと思われるので,輸送や在庫のコストも直接反映されてしまうのでしょう。しかし,いくらなんでも高すぎるような気がしないでもありません。国内で販売してくれるというだけでもありがたいところではありますが,多くの人の善意のうえに成り立っている競争のないジャンル・製品ですので,一応言及させていただきました。

 そんなわけで,ますますパワフルかつ便利になった Raspberry Pi,手に入れたら何に使いましょうか?

Notes:

  1. として言及されているが,たぶん工事設計認証
  2. 16年3月26日現在1ドル=約113円なので約3957円
  3. 同上約159.8円,約3995円
  4. 同上約126.2円,約4500円

CPU1GHz,RAM512MB で5ドル! Raspberry Pi Zero 登場

本日,Raspberry Pi Zero の即時の頒布開始をお知らせできることをうれしく思います。メイド・イン・ウェールズ,そして価格はちょうど5ドルです。Zero は Raspberry Pi ファミリの一人前の構成員で,以下を搭載しています:

  • Broadcom BCM2835 アプリケーションプロセッサ
    • 1GHz ARM11 core (Raspberry Pi 1 より 40% 高速)
  • 512MB LPDDR2 SDRAM
  • micro-SD カードスロット
  • mini-HDMI ソケット,1080p60 映像出力
  • Micro-USB ソケット,データ入出力および電源用
  • 端子未実装の 40-pin GPIO ヘッダ
    • Model A+/B+/2B と同一のピンアウト
  • 端子未実装のコンポジット出力ヘッダ
  • これまでの Raspberry Pi で最小のフォームファクタ,65mm x 30mm x 5mm
  • Raspberry Pi Zero: the $5 computer – Raspberry Pi

 あの Raspberry Pi に新モデルが登場しました。価格は衝撃の5ドル。しかし価格以上に衝撃なのは,この値段で完成したコンピュータとして機能し,しかも第1世代の Raspberry Pi を超える基本スペックを持っているという点です。
 だって……5ドル。5ドルですよ? Arduino より安いどころか PIC ボードのキットより安いですよ? それどころか私が昨日食べたラーメンより安いんですよ? なのに 1GHz の CPU と 512MB の RAM 載っけてて Debian(Raspbian) が動くって……金銭感覚狂いそうです。
 Raspberry Pi A+ と比較して省かれたものはオーディオ出力 1および DSI ポート 2です。GPIO とコンポジット出力もコストカットのため端子が省かれていますが,配線はちゃんと引いてあります(えらい! 素晴らしい!)。USB ポートも micro になっています。HDMI も mini です。販売価格での差が数百円程度までなら通常サイズの方がよかったですが,それは先進国のホビイストの考えというもので,途上国ではまた違った需要があるのかもしれません。ともかく,電子工作ネタやなんちゃって IoT ネタはこれからは Zero で決まりですね。
 日本での価格は,おそらく800円〜1000円といったところでしょうか? 近ごろ為替相場も落ち着いてきているので600円台で出してくる可能性も無きにしもあらず。いずれにせよ非常に安くなるものと思われます。これまで「自分には使いこなせないだろうし……」と敬遠してきた人も手に取りやすくなって,DIY の裾野が広がるといいですね!

Notes:

  1. コメント欄を見ると HDMI での音声出力には対応しているようです。
  2. カメラとか繋ぐアレ。

Raspberry Pi ホームオートメーション計画(1)

経緯
 任意の複数の時刻に(止める必要のあるアラームでなく)時報してくれる時計って値段が意外とするなー,鳴る音もやかましい電子音で理想とは違うようだし → そういや以前 Raspberry Pi でホームオートメーションもどきしてたな,せっかくだからあれを復活させて音を鳴らすようにしようか

使うもの
・Raspberry Pi model B 35ドル  1
・SD カード(4GB, Class10) 約500円
・スピーカ 約500円
・USB マイク 約500円  2
・USB ハブ 100均
・USB 無線 LAN アダプタ 約1000円
・ビットトレードワン USB赤外線リモコンキット 約2200円
・RaspPi と リモコンモジュールを収めるケース 100均のものを加工
・AC-USB アダプタ 約500円  3
・USB ケーブル 100均
計 約9700円 4

載せたい機能
・時報(小中学校のチャイムみたいなイメージ)
・エアコンのリモコン
・ネットラジオ
・合成音声でしゃべる
・音声認識で操作

手順的な
1. SD カードに OS を書き込んでセットアップ
Raspberry Pi Downloads – Software for the Raspberry Pi
 NOOBS が公式の推奨ですが,Raspbian のディスクイメージを書き込むのも単に dd するだけです。お好きな方で。

2. raspi-config でファイルシステム拡張,ロケール等を日本に,ホスト名変更,sshd 有効化。
 ホスト名は hal にしました。乗組員に反逆したりはしないと願いたい。

3. ユーザ pi を消して自分のユーザを登録,sudo できるように設定。
sudo adduser ユーザ名
sudo gpasswd -a ユーザ名 sudo
新しいユーザでログインした後
sudo userdel -r pi

4. アップデート,ssh などの設定
sudo aptitude update
sudo aptitude upgrade

 外部公開はしないので初期設定でも問題はないと思いますが,設定したところで特にデメリットがあるわけでもないので,
・root ログインの禁止
・IP アドレス制限で LAN 内からしかアクセスできないようにする
・公開鍵認証にしてパスワード認証の禁止
・ログイン試行回数の制限
あたりはやっとくといいような気がします。
SSHのアクセス元IPを制限する – エーエイチレフ linuxサーバー技術情報
sshのrootログインを禁止する

5. 機能を追加していく
時報機能
 mplayer を導入,cron とかでパパっと。
倦怠ブ録: 自宅サーバーにアラーム機能を構築する
cronを使ってLinuxデスクトップを目覚し時計にする – Qiita

リモコン機能
 ビットトレードワン社の「USB赤外線リモコンキット」を使用。本来 Windows 専用ながら,kjmkznr 氏という方が使いやすい Linux 用ツールを公開してくださっているのでありがたやと言いながら導入する。詳細は以下。
kjmkznr/bto_ir_cmd · GitHub
ORBIT SPACE
 コマンドだけで動く。まだ詳しくはチェックしてないけど,問題なさそうな雰囲気。

ネットラジオ
 mplayer にプレイリストの URL を与えるだけで再生できる。便利な時代だなあ。
コマンドラインでshoutcastを聞く(mplayer編) – ひゃまだのブログ
raspberry piを簡易インターネットラジオにしてみた ( UNIX ) – ロードバイクときどきiPad/Airなblog – Yahoo!ブログ
 ここで問題発生。音声がすぐに途切れてしまう。キャッシュの指定を充分に大きくしても同様。ちょっと検索してみた限りでは mplayer にバグがあるとかではなさそうなので,安物ドングルでの無線接続なのが原因?

合成音声でしゃべらせる
 Open JTalk をレポジトリから導入するだけ。Raspbian Wheezy での導入および再生支援スクリプトについては,以下を参照のこと。
橋本商会 » Raspberry Piに喋らせる
 バージョンによって仕様がそこそこ違うので注意。Wheezy のレポジトリにあるやつはちょい古。使うファイルの形式の関係から,MMD agent のファイルから mei(女性声)を導入する場合,最新の 1.4 ではなく 1.3 のものを使う必要がある。
 ザ・合成音声という感じの声だけど,ともかくパラメータを与えるだけで問題なく動く。素晴らしい。でも個人的にはもっと若い感じの声がいいなあ

 さて,ここまでで出力側があっという間に整いましたが,入力側がまだです。むしろここからが本番,茨の道で,音声認識はどうやってもマトモに使えなかった記憶が。それで「タブレットで良くね?」ということで廃止したのでした。潔く諦めてウェブアプリとかをインタフェースにしたほうがいいでしょうか……ってそれだとそれこそ「タブレットで良くね?」ってなりそうだなあ。
 来週末に続く(のか?)

Notes:

  1. 今から買うなら B+(3510円,USB ポートいっぱいで有線 LAN も ok)か A+(2,835円,メモリが B+ の半分だけど公称消費電力が3分の1)がおすすめ。
  2. が,感度と指向性の高いもっと高い機種を買うのがおすすめ
  3. 常時稼働なのでもう数百円出してパナのを買うのがおすすめ
  4. もっとも3分の2以上は別件での無駄遣いの流用ですが。

クアッドコアの新型 Raspberry Pi,「Raspberry Pi 2 B」発売

 2日,Raspberry Pi の新型がサプライズ発表・発売されました。今回はマイナーモデルチャンジではなく全面的な刷新で,新機種の名前は「Raspberry Pi 2 model B」。Twitter ではかなりの反響が見られ,公式サイトも一時落ちてしまっていました。嬉しいことに,日本でも同時発売です。
 「2」の特長は 900Mhz のクアッドコア Cortex-A7 プロセッサ「BCM2836」と 1GB に倍増した RAM,そして旧モデルから据え置きの価格(35ドル,RS 日本は4,291円)です。CPU は従来モデルから最大6倍の性能アップになるとのこと。6倍はマユツバな気もしますが,シングルスレッドのベンチ(つまり,1コアあたり)だと約1.5倍の性能だということなので,ヒートシンク付けてしっかり冷却する前提ならなるほど妥当なところかという気もします。
 地味ですが大きな特長として,旧モデルとの完全な互換性が維持されているということがあります。Adafruit のいかした液晶筐体のようなこれまでに発売された拡張機器はどれもそのまま使えるし(追記:Switch Science 社のブログによると,ケースによっては干渉が生じ,加工する必要がある場合もあるようです),これまでに Raspberry Pi についてのレクチャーを受けた子供たちはそのまま「2」に乗り換えることができるわけです。営利企業の製品じゃあ,なかなかこうはいかないでしょうね。それから,今回はマイクロソフトから ARM 版 Windows 10 付きの IoT 開発環境が無償提供される予定のようです。
 
 以下戯言。ネットに上がっている Unixbench の結果報告を見ると,先代 Raspberry Pi B 512MB/B+ System Benchmarks Index Score は概ね100前後(1,2,3)で,Atom N2800 がだいたい800くらい(1,2,3),Atom 230 がだいたい400くらい(1,2,3)のようです。両者の比率は Passmark の表とも一致しますので,ここから強引に換算して BCM2836 の(推定される)ベンチ性能と同じぐらいのものを探してみると,Intel Celeron N2805,PentiumM(Banias?) 2GHz,AMD C-50 などが見つかります。ちなみに先代 BCM2835 はかろうじて VIA Samuel 2 という2001年発売の化石が引っかかる程度です。どうでしょう? なかなかいい感じじゃありませんか?

Imagination Technologies 社が MIPS 搭載シングルボードコンピュータを発表

New MIPS Creator CI20 development board for Linux and Android debuts – Imagination Blog
Imagination Launches MIPS-Based “Creator CI20” Development Board For Linux And Android, Free For Developers

 この手のシングルボードコンピュータはもはや珍しいものではなくなっていますが,コレは(よくある ARM でなく)MIPS CPU を搭載しており,しかも MIPS アーキテクチャの総元締めである Imagination Technologies 社直々の投入ときており,なかなか面白いので紹介。
 MIPS アーキテクチャは,古くからマイクロプロセッサ設計の教材として用いられてきたことで知られているほか,今でも組み込み用途でよく使われているアーキテクチャです。しかし近年では,家電の多機能化などもあるのか,Android を制した ARM に人気が移りつつあるようで,MIPS とってはあまり好ましい状況が続いているようです。2012年の Imagination Technologies による MIPS Technologies の買収はその現れでしょう。このままでは ARM の x86/x64 侵攻も静観するしかない状況です。
 恐らくはそうした現状を打破するためでしょう,突如投入したのがこの開発者向けシングルボードコンピュータ「Creator CI20」というわけです。Debian 7 に対応,Android 4.4 にも対応予定となっています。Raspberry Pi を意識したようなハード構成になっており(公式 Blog からも Raspberry Pi や Linux 「コミュニティ」を多分に意識していることが伺えます),豊富な拡張端子,強力な再生支援,そこそこよい性能を備え持っています。そしてその値段は,なんと無料! ――ただし,自分自身についての情報と予定している Creator CI20 を使ったプロジェクトの詳細を Imagination Technologies 社に送り,認められた人のみです。技術力と影響力を持った人に無料配布し,実際に開発をして広告塔になってもらおうという考えでしょう。Google が Android を発表した時と同じやり方ですね。現在のところ市販の予定はないようです。
 さて,この試みが成功するかどうかですが……個人的には,どれだけ情報をオープンにできるか,どれだけオープンソースコミュニティに貢献できるかにかかっているのではないか思います。Google の Android と違い圧倒的に強力なライバルが存在しているという事実も考慮せねばなりません。今回の発表はつまるところ Linux コミュニティの中でも本職の技術者やハイアマチュアを惹きつけるための施策です。狙いは賢明だと思いますが,彼らの支持を勝ち取るためには,彼らにとっての最大の魅力であるところの「自由さ」「開発のしやすさ」が確保されていなければなりません。たとえば,Creator CI20 は Debian Wheezy をサポートしていますが,Imagination Technologies の Debian Project に対する支援はそれほど積極的でないように見受けられます。本気で Linux コミュニティに訴えかけるつもりがあるのであれば,より積極的な支援を行うべきでしょう。また,このボードをはじめ現状 MIPS をデスクトップ利用しようとすると必ず PowerVR がセットになりますので, 当然 PowerVR についての情報もよりオープンにすべきです(公式 Blog を見る限りその意向であるように思われますが)。Broadcom でさえ Raspberry Pi の GPU ドライバをオープンソース化した今,GPU のパワーを引き出すためにはバイナリ配布されるプロプライエタリドライバが必要,というような状況では早晩愛想をつかされてしまうでしょう。また,PowerVR 用のフリーなドライバの開発は FSF の High Priority Projects の一つに数えられており,活発に開発されているようですが,まだ万全ではないようです。これを機に可能な限りの協力と支援を行うべきです。