謎のシンクライアント,ION A603 で遊ぶ (1)

 無くなりそうで無くならない秋葉原某店の300円ジャンクシンクライアントの話。記事を書こうと思いつつ棚から無くなりつつあるのを見て「やっぱりいいか……」となるのを何度か繰り返しましたが,先週行った時にはまたみっちり並んでいたので,まだたくさん隠し持っている(?)と見なしてひとまず記事にします。
 
 まず,本体シールからこいつの機種名は「ION A603」であることが判明しています。これで検索してみると,いくらか情報が出てきます。早速タイトルの「謎」が謎でなくなっていますが,気にしないこと。
・製造元らしき FIC のページ http://www.fic.com.tw/product/iona603.aspx
・AMD ウェブサイトでも紹介されている http://wwwd.amd.com/catalog/salescat.nsf/doclookupweb/CEF3492F57763CCF8625725800148E8D
 これらの表によると,CPU は AMD Geode LX800 (500MHz) のようです。この石の性能は同クロックの C3 よりはマシという程度の模様。もっともグラフィックやメモリのおかげか体感的にはもうちょっと速いです。また,4ポート USB 2.0,100M イーサ,RAM は最大1GB対応と,今でもアプライアンスサーバ的な使い方なら充分使えるスペックだということがわかります。また,定格電流が3.33Aであることも判明しました(以前 AC 付きも売られていた時にも購入しており,その AC アダプタも 12V 3.33A センタープラスで,Li Shin International Enterprise Corp. 製 LSE0107A1240 というものでした。FIC ロゴなどはありませんが,おそらくこれが純正品だと思います)。3A でも代用可能だと思います。HDD の消費電力分を考えると 2.5A でもたぶん行けるでしょう。

 それでは実物を見ていきましょう。「ROUTER」のシールは自分で貼ったものなので気にしないように(ラズパイルータの代替ハードウェアとして導入予定……だがなかなか取り掛かれず)。金属製のしっかりした上質な筐体です。萌えー
 前面には USB 2.0 ポートが4つ,インジケータ,電源ボタン,スピーカ,マイク端子とヘッドフォン端子。

 背面には LINE OUT,VGA 端子,LAN,電源コネクタ,ケンジントンロック用の穴。電源コネクタは一般的な外径5.5mm/内径2.1mmではなく5.5mm/2.5mmですが,千石などでアダプタを購入できます(100円程度)。入力は上記の通り 12V 3.33A センタープラスです。

 マザーボードはこんな感じ 1。筐体に排気口がないことからもわかりますが,ファンレス仕様です。萌えー
 一般的なケーブルを用立てれば 2.5 の IDE HDD が乗るようです。コンデンサは変なのも多いですが大きいやつは一応三洋の105℃品です。

 裏側。オンボードではなく 512MB の DDR SODIMM が挿されています。これはなかなか!

 ところでこれ…… SoC にヒートシンクも何も付いてないんですが,元々こんなものなんでしょうか? どうも心配です。HDD マウンタまで熱を逃してやりたいところですが,基板から直接外装へ熱を逃がす作りになっているようにも見え,かえってキャパシタの寿命を縮めるのではないかという感じもします。

 組み立ては逆にすればいいのですが,少々コツがいります。まず,下の赤丸の部分にプラスティックのツメがあるので,筐体下側から先にはめること。

 また,下の赤丸部分に金属の細かな接点?があるので,これを破壊しないよう,気をつけながら挿していきます。

 BIOS は一般的な Award BIOS で,特に面白そうな項目はありませんでした。
 目論見通り USB ブートに対応しており,Debian Jessie を USB メモリに普通の i586 用インストールメディアを使って難なくインストールできました。
 (なお,今回インストールした環境では,そのままでは”atempt to read or write outside of disk ‘hd0′”というエラーが出て起動できませんでした。起動ドライブの UUID が変わって発生するエラーのようだと踏んで,Grub の設定を UUID でなく /dev/* の指定を渡すよう記述を変えましたが効果はないようです。とりあえず起動時に Grub のオプションを適当にいじる 2,たとえば noacpi を指定してやる 3と(なぜか)起動できるので,今回はそれで済ませました。しばらく前に別のマシンにインストールした環境は大丈夫なのでカーネル絡み,何らかのデータ破損,BIOS 設定のいずれかだと思いますが目下検証する時間がないので……時間ができたらまた書きます。)

/proc/cpuinfo はこんな感じ。

processor		: 0
vendor_id		: AuthenticAMD
cpu family		: 5
model			: 10
model name		: Geode(TM) Integrated Processor by AMD PCS
stepping		: 2
microcode		: 0x8b
cpu MHz			: 498.027
cache size		: 128 KB
fdiv_bug		: no
f00f_bug		: no
coma_bug		: no
fpu				: yes
fpu_exception	: yes
cpuid level		: 1
wp				: yes
flags			: fpu de pse tsc msr cx8 sep pge cmov clflush mmx mmxext 3dnowext 3dnow vmmcall
bogomips		: 996.05
clflush size	: 32
cache_alignment	: 32
address sizes	: 32 bits physical, 32 bits virtual
power management:

 一応 i686 互換対応っぽいです。

lspci はこんな感じ。ちゃんと 100M イーサですね。

00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] Host Bridge (rev 33)
00:01.1 VGA compatible controller: Advanced Micro Devices, Inc. [AMD] Geode LX Video
00:01.2 Entertainment encryption device: Advanced Micro Devices, Inc. [AMD] Geode LX AES Security Block
00:0d.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8100/8101L/8139 PCI Fast Ethernet Adapter (rev 10)
00:0f.0 ISA bridge: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] ISA (rev 03)
00:0f.2 IDE interface: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] IDE (rev 01)
00:0f.3 Multimedia audio controller: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] Audio (rev 01)
00:0f.4 USB controller: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] OHC (rev 02)
00:0f.5 USB controller: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] EHC (rev 02)

 lsusb には 1.1/2.0 の root hub しかありませんでした。
 とりあえず今回はこんな感じで!

Notes:

  1. 特にこの季節は,基板類に触る前に必ず大きな金属製品などに触れて静電気を逃しましょう!
  2. リスト画面で E キー,起動は Ctrl-X
  3. “linux /boot/vmlinux-… ro quiet” とある行が起動時カーネルオプションです。

Linux におけるラップトップマシン向け電力管理スイートの紹介(Pm-utils, Laptop-mode-tools, Powertop, TLP)

 Linux をラップトップマシンにインストールすると Windows に比べてバッテリの持ちが悪い,ということが言われることがあります。
 これは事実でしょう。最大の理由は,電力管理の設定が最適化されていないことです。Windows ではメーカが機種ごとに作成した環境のリカバリディスク,あるいはドライバやユーティリティ類がありますが,大半の Linux ディストリビューションでは,32コアのワークステーションでもポケットサイズのモバイルマシンでも同じ DVD を使ってインストールします。したがって初期設定はまずはどんな環境でもそつなく動くようにしておく必要があり,マシンの特性に合わせた最適化は施されていないのです。
 幸い,Linux ではさまざまな省電力機能がサポートされていますし,それらを一括して管理できる見通しの良いツールもあります。数十分ほどの時間をかければメーカが用意した Windows 環境並み,そして(大抵は Linux 環境の方が負荷が軽いこともあり)それを超える電力管理をも実現できます。私のメインモバイルマシンである CF-SX1 は Windows より Debian の方がファンが静かな上に快適に動きますし,バッテリの持ちも良いです。
 この記事では Linux 環境の代表的な電力管理スイートを4つ簡単に紹介します。あくまでも私の個人的な意見であることに注意してください。公式サイトに加え Arch Linux Wiki (Arch Linux ユーザでなくとも極めて役立つ必見リソースです)の該当記事へのリンクも付けましたので参考にしてください。

Pm-utilsArch Linux Wiki 記事
 他のツールと組み合わせることで電源管理にも利用できるため Laptop-mode-tools 等と並べて名前が出ることも多いですが,pm-utils 自身はあくまでもコマンドラインから電源を操作するためのツールです。
 電源管理スイートとして使うためには様々な設定・スクリプト作成が必要で,しかも利用できる機能は限定的です。そのうえ systemd 移行により機能が被ってメリットが失われ,それどころか問題の原因となりうることもあって,今ではあまり人気がないようです。既に pm-utils を利用するスクリプトを多く書いて利用しているという方はともかく,今から導入するメリットは薄いように思います。

Laptop-mode-toolsArch Linux Wiki 記事
 長らくラップトップ用電源管理スイートとしてスタンダードの地位を占めてきたツールです。名称は,カーネルに組み込まれている機能である「Laptop mode」を利用する(しやすくする)ためのツールという意味で,ラップトップマシンのための電源管理スイートの草分け的存在と言えるでしょう。私が最初に導入したツールがこれで,4年ほど前まで使用していました。
 現在でも使われていますが,いかんせん古いソフトという印象で,どうも設定が煩雑でわかりにくいです。よいソフトではあるのですが,他と比較すると,今から導入するメリットは薄いかもしれません。
 もっとも現在も開発は続いていますし,最近は github のコミットも活発になっているようです。これから大きく変わることもありえます。今後の発展に期待です。

PowertopArch Linux Wiki 記事
 Intel 謹製の電源管理スイート……というより,電源管理診断ツールといったものです。公式ウェブサイトでも「a Linux tool to diagnose issues with power consumption and power management」とされています。電源管理機能はあくまでも診断の便宜のためといったスタンスで,再起動すると設定は失われてしまいます。設定を永続化させるためには起動時に自動で powertop に命令するスクリプトを組むなどする必要がありますが,これが少々手間です。また,あくまでも診断のための機能のため,バッテリ駆動時と AC 駆動時でプロファイルを分けるといったこともできず(やるならこれも自前でスクリプトを組んでステートが変わるたびいちいち命令させる必要がある),あまり細かいことをするとデバッグの手間が出てきます。手抜きの荒業としては rc.local に(今なら systemd のサービスを)書いて /usr/sbin/powertop --auto-tune を起動時に自動実行させるというのもありますが(TLP 導入に先立って一時期そうしていました),細かい設定ができないことによる副作用があるうえ,マシンによっては大きな問題が発生することもありえます。
 一方で設定のチューニングには非常に使いやすいツールです。下記の TLP と併用している人が多いようです。概算の消費電力が表示されるのもなんだか楽しいです。

TLPArch Linux Wiki 記事
 結論です。今から入れるならコレ! 機能と手軽さの両面で他の3つを上回っています。
 公式サイトには「TLP comes with a default configuration already optimized for battery life, so you may just install and forget it」と頼もしいことが書かれています(もちろん,実際にはマシンや利用スタイルに合わせた調整もしたほうがより良いのですが)。Powertop と違いシステムの一部を構成する電源管理スイートとして設計されており,解説付きの設定ファイルを少しいじるだけで電源管理を最適化することができます。また,バッテリ駆動時と AC アダプタ利用時での別のプロファイルの利用に標準対応しています。systemd との親和性も高いです。
 現状では主として linrunner 氏という匿名の個人のみによって開発されていて開発の継続性や方向性がやや不透明なのが短所といえば短所ですが(cf. xscreensaver),既に6年以上開発が続いており,実績は充分です。
 Debian の場合,TLP はターミナルから以下を実行することで導入され,機能を開始します(詳しくは Arch Linux Wiki を参照)。

$ su
# aptitude update
# aptitude install tlp tlp-rdw
# systemctl enable tlp.service
# systemctl enable tlp-sleep.service
# systemctl disable systemd-rfkill.service
# tlp start

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 + L-02C でバッチリ安定する多機能 LTE ルータをつくったメモ

 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 の準備
 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無効化することが可能です。
 手順は以下を参照のこと。

L-02Cを最初からUSBモデムで認識させる/手動でAPN登録する – /dev/stkinosh

wvdial の設定,IP フォワーディング・IP マスカレード
 書こうと思ったのですが,こちらも既に素晴らしい記事が多くありますので紹介のみにとどめます。私が見つけた中で最も網羅的でかつわかりやすい記事は以下です 13

L-02CでLTEルータ作成 – /dev/stkinosh

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

  • 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 サーバなどを自分の好みに変更。

ほか,以下のページも参考にしました。
格安SIM(MVNO)とRaspberry Pi(ラズベリーパイ)でモバイルルータを作った 〜初期設定から完成まで〜 – $yuzu->log();
Qaplaの覚書・メモ・備忘録・独言 Raspberry Pi をUSBモデムでインターネット接続
Berrbear: Raspberry piでUSBモバイルモデム
SORACOM Air が使える USB 3G/LTE モデム、WiFi ルーターのまとめ – bearmini’s blog
Raspberry PiをL-02C+IIJmioでつないでみた: EeePCの軌跡
Raspberry Pi 2で0SIMをL-02Cで使ってみた。
Raspberry Pi 2 Model BをSORACOM Airに接続してみました。 #soracom |
デジモノステーション2016年2月号付録の0SIMをRaspberry Piで試す | matoken’s meme

ルータ以外の機能のセットアップ
 ルータ以外の機能をセットアップします。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")"

朝日新聞社ウェブサイトの見出し読み上げ。(流石に結構待たされる)
RaspberryPiにOpenJTalkをインストールする – 試したこととか困ったこととか
Debian Jessie に OpenJtalk を入れてテキストを読み上げてみた – 残しときます(自分用)
Linux – シェルスクリプトで天気予報取得! – mk-mode BLOG

テンキーで操作できるようにする
 入力は 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 の部分は環境によって異なります)
 いやあ〜よかったよかった。
モーション検出でUSBライトのON・OFF
LinuxからUSB HUBの電源のON/OFFを制御してみる – memoメモ
電源制御型USBハブでUSBチューナーの見失い状態を解消する。(PX-W3U3、S3U2ほかUSBチューナー汎用): Vladiのブログ
IoTでアボカドの発芽促進とカビを防止する – Part2: BeagleBone Blackで植物育成LEDライトを制御する – Qiita
えびめも(2011-05-30)
GitHub – codazoda/hub-ctrl.c: Control USB power on a port by port basis on some USB hubs.

感想
 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ヶ月使ってみての感想を追記

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 のものはどれも電源連動に対応していますし,規格上対応が必須になるなどしたのではないか? という気がします。

ThinkPad T61 に Debian 8 + xfce をインストールしたメモ

 ジャンクの ThinkPad T61 を買ったので Debian 8 + xfce セットアップのメモ。

1, まず普通にインストール

2, sources.list 編集

# nano /etc/apt/sources.list

cdrom: 行をコメントアウト。
contib/non-free が必要な場合、ついでに追加。

3, 最低限使うソフトをインストール

# aptitude update
# aptitude install sudo vim keepassx arandr xfce4-whiskermenu-plugin icedove icedove-l10n-ja zotero-standalone xul-ext-zotero

4, 自分をグループ sudo に入れる

# gpasswd -a hoge sudo

一度ログアウトするまで反映されない。

5, ユーザに戻って ~/ をデフォルト(英語)に

$ LANG=C xdg-user-dirs-update --force

6, トラックポイントでのスクロールを有効化

$ sudo vi /usr/share/X11/xorg.conf.d/20-thinkpad.conf

以下をコピペ。

 Section "InputClass"
     Identifier "Trackpoint Wheel Emulation"
     MatchProduct       "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|ThinkPad Compact USB Keyboard with TrackPoint|USB Trackpoint pointing device"
     MatchDevicePath    "/dev/input/event*"
     Option             "EmulateWheel"          "true"
     Option             "EmulateWheelButton"    "2"
     Option             "Emulate3Buttons"       "false"
     Option             "XAxisMapping"          "6 7"
     Option             "YAxisMapping"          "4 5"
 EndSection

もうちょっと詳しい話は Debian 公式 Wiki の当該項目を参照のこと

7, xfce の設定
– 標準からパネル1削除、パネル2を画面下端へ。
– ワークスペースを1つに。
– 標準メニューボタン、ワークスペーススイッチャー、アクションボタンを削除。
– Whisker Menu とシステム負荷モニターを追加。
– 合成処理有効化ほか、環境や気分に合わせ設定。
– 初回ログアウト時には確認画面の「次回ログインのためセッションを保存する」のチェックを外す。

8, Mozc の設定
 なにやら難しくてよくわからない理由により標準では一部の設定項目が変更できません。仕様の違いが原因のため、バグとしては扱われていません。なので何年も前からこの状態ですし、修正する予定もないようです。ワークアラウンドとしては、いったん uim-mozc を削除したうえで mozc-utils-gui を起動し設定を行えば問題なし。

$ sudo aptitude remove uim-mozc

句読点変更、サジェスト自動表示・リアルタイム変換を無効化したうえで

$ sudo aptitude install uim-mozc

9, CapsLock を Ctrl に
「設定>セッションと起動>自動開始アプリケーション」から「setxkbmap -option “ctrl:nocaps”」を追加。
液晶が見にくく感じる場合は、このとき「xgamma -gamma X.X」も追加してガンマ値を下げるなどしておくと良いかもしれません。バックライトが黄ばんでいる古いマシンでは -bgamma を上げるのもおすすめ。

10, 画面ロックを xscreensaver から light-locker に変更
先日の記事参照のこと。

11, 完了
やったぜ。

 この機種 T61 についてですが,1960年代にソビエト連邦が開発した第2世代主力戦車で……じゃなかった,2007年発売の14.1型ラップトップです。数字が同じ X61 と同世代のようです。
 T シリーズは初めてなのですが,なかなかいいですねコレ。X をそのまま引き伸ばした感じで,X 独特の“秘密基地感”のようなもの(伝われ)が出ています。その一方で画面が物理的に広々として見やすく,キーボードも無理がありません。スピーカもステレオで,ついつい用もなく音楽をかけてしまいます。それでいて「小脇に抱える」ことができる程度のフットプリント・軽さ・薄さを保っており,モバイルマシンならではのわくわく感(伝われ)が損なわれていません。Core2 Duo T7100 1.8GHz + GM965 Express のモデルなので性能は大したこと無いはずなのですが,インタフェースにゆとりがあるためか,体感としてはなかなか快適です。リース落ちが一気に出たようでかなり安かった(PC-NET で3千円)ので,買った翌週にも秋葉原に寄って実家用にもう一台確保してしまいました。
 
参照:
製品の概要 – ThinkPad T61, T61p – Lenovo Support (JP)
Hothotレビュー レノボ「ThinkPad T61」レビュー ~Santa Rosaとワイド液晶で強化

Debian 8 で Bluetooth DUN

 Debian 8 Jessie で Bluetooth DUN しようとして……泥沼にハマった。
 Bluez のバージョンが 5 に入り仕様が大きく変わったようで,これまでの定石が通用しません。一応 blueman や gnome-bluetooth なども入れて試してみましたが,やはりうまくいかない。つなぐ先も「BlueDUN」という市販のアプリを入れた Android スマートフォンで,こっちが特殊な仕様である可能性もあります。せめて他にいくつかモデムがあればいいのですが……なんとか調べながら設定してはみるものの,正体不明のエラーとか……検索してみるとバグがうんたらかんたらとか言ってるし……うわこのコマンドも無くなったのか……このエラーは何だ?……しかし眠い……寒い……外明るくなってきた……つらい……などと合計10時間以上を無為に費やし,「これは複雑なバグまたは心霊現象が関与しており自分の手には負えない」という結論に達したところで以下のページを見つけました。

delx » Bluetooth DUN Tethering with Linux and a Nokia Symbian Phone

 2014年? Arch? もしや,これでいける? 藁にもすがる気持ちで試してみると……いやっほううう!!! 繋がった!!! 何度再起動して試してもオーケー。引っ掛かりポイントは Debian では「python-dbus」ではなく「python3-dbus」が必要であるという点と始めに wlan の接続を切ってから試さないとダメという2点くらいで,本当に書いてあるとおりにコピペして書き換えて実行するだけ。恐ろしく簡単。
 スクリプトを眺めてみるとなにやら見たことのないことをしている部分がある。やっぱり仕様変更絡みで別のやり方をする必要があったらしい。この辺はそのうちちゃんと調べないといけませんね。
 いやあ,ありがたやありがたや。

ジャンクの VersaPro VC-7 を買ったメモ

秋葉原 PC-NET でジャンクの NEC VersaPro VC-7 (PC-VY14A/C-7) を買ったメモ。

・C2D SU9400,RAM 1GB(DDR3,MAX 3GB,非公式ながら5GBまで認識可),HDD 120GB
・むっちゃ軽い。バッテリ込みで実測900g切ってる。軽さに惹かれて衝動買い。
・こう軽けりゃ当然 SSD に換装するしかない(?)けど,軽さの代償として,分解を前提とした作りにはなっていない。構造上,ダメージ無く分解することはほぼ不可能。この手の作業には慣れてるつもりだけどキータッチが少しおかしくなってしまった…… なお分解レポートを公開してくださっている方がいることもあり,分解自体は比較的簡単(参照:2011年05月04日の記事 | nana1451@たぶん日記 – 楽天ブログ
・AC がちょっと特殊な 10V 4A のブツ 1で,秋葉原でも発見が難しい。幸いネット通販でなら中古2000円ほどで入手可。
・RAM は DDR3 で,4GB 追加の合計5GBまで認識することを確認。初期の DDR3 モデルに共通の仕様として,2Gbit チップまでの対応なので注意 2
・腑分けしてびっくり,無線 LAN 非搭載モデルだった 3。残念。
・Debian Wheezy が普通に動く。
・自分の個体のバッテリはそれほど劣化していなかった。互換バッテリが売られていないので,バッテリの劣化が激しい個体を引き当てるとけっこうつらいかも。

かかった費用(本体以外は概算)
・本体 – ジャンク3780円
・AC ケーブル – 中古2000円
・DDR3 SODIMM 2GB – 中古500円
・SSD 32GB – 新品3500円
・PC カード wlan アダプタ – 中古300円
合計:10080円

本体は安かったものの,というジャンク品の王道パターンにはまってしまったなあ。そして,これで実戦可能なモバイル機が意味もなく4台に……

参照:
公式スペック表
公式周辺機器表,バッテリの型番など
公式ドライバ配布ページ,~Win7
NECモバイルノート LaVie J/VersaPro VY/UltraLiteタイプVC・VM @ ウィキ – 7代目(3代目Ultralite) タイプVC・タイプVM パワーアップ情報(2ch スレ由来の wiki)
価格.com – 「VersaPro UltraLite タイプVC」レビュー(発売当時の広告記事,ベンチなど)

15/2/8 スペック(CPU,RAM)情報修正,リンク追加

Notes:

  1. 何種類かある。自分が購入したのは ADP69 という機種。
  2. 簡単な見分け方としては,4GB の場合,裏表8枚ずつ全部で16枚チップがついてるやつ。2Gbit*16=32Gbit=4GB。
  3. PCI-E half size スロット(筐体の構造上フルサイズは入らない)はある。アンテナは無し。

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 の一つに数えられており,活発に開発されているようですが,まだ万全ではないようです。これを機に可能な限りの協力と支援を行うべきです。

Linux 用 Twitter クライアントの決定版:「gFeedLine」

普段私が PC で Twitter へアクセスするときには公式 web か Hootsuite を使うことが殆どなのですが,最近ちょっとミュート機能が必要となる場面があり,Linux の Twitter クライアントを調べてみました。すると,「gFeedLine」というものがよさそうとの情報を発見。なんでも開発者は日本人の方だそう。日本における Twitter の使い方は他の国とは少し違いますので,これは期待できます。

依存関係を満たし .deb をインストールして起動し,「編集(V) > 設定(P)」からアカウントや表示するフィードの設定を終えた画面はこんな感じです。一見何の変哲もない画面ですが,User Stream 対応で API 切れの心配がありません(これが欧米発のプロジェクトでは対応するつもりもない場合が大半)。
snapshot7

同じく(ほぼ)日本独自の機能であるミュート設定も充実しており,特定の語を含むツイートや特定のユーザーによるツイートを隠すことができるのはもちろん,語やユーザーごとにミュートを続ける期間を細かく(最短1時間刻み)設定することができます。映画などのネタバレツイートの流れ弾被弾を防ぐのに役立つこと請け合い。
snapshot5

テーマを変更することもできます。
snapshot6

難点は投稿時のキーショートカットが(あまり一般的でないように見受けられる)Ctrl + U で変更不可という点くらいで,(→事実誤認でした。一般的な Ctrl + Enter でもポスト可能です。お詫びして訂正いたします)軽くて安定動作,ミュートや Userstream など日本人ユーザーのツボをおさえた機能アリと素晴らしいクライアントです。Linux 用 Twitter クライアントは他にもいくつか試してみましたが,日本で求められる機能を備えつつ万人におすすめできるものというとやはりコレが一番でしょう。

追記:
自分は最初からアルファ版を試したので気づきませんでしたが,執筆時点現在の正式版 2.4.1 には「システムがサスペンドからレジュームした時に user stream が切れたままになる」という問題があるようです。この問題はアルファ版 2.4.2 では修正されています。アルファ版とのことではありますが,かなり安定していますので,特別な理由のない限り 2.4.2 を選ぶべきでしょう。

参照:
gfeedline – Social Networking Client – Google Project Hosting
GFeedLine: GNOME 向け SNS クライアント | yendo weblog
Geeekooo: Twitterクライアント(Ubuntu編) [追記]
GFeedLine: A Social Networking Client For Twitter, Facebook And Tumblr

xfce でセッションを保存させないには

最近の xfce にはログアウト時にセッション内容(起動しているアプリケーションとその状態)を保存して次回ログイン時に復元してくれる機能が付いているみたいです。流行ではありますが自分にとっては要らんおせっかい。設定項目にこの機能を無効化するものがなかったので弱っていましたが,なんのことはない,ログアウト時の選択画面で「次回ログインのセッションを保存する」のチェックを外せばいいだけでした。一度チェックを外せば次回以降も記憶していてくれます。