Linux化計画(15)–RのUpdate

Rのバージョンが古い(3.1.1)ので、Update(3.3.2)したくなりました。
例によって、何度もやっている

sudo apt-get install r-base

とやっても、「最新です」というメッセージが。

Windows版のほうがlinux版よりも新しいはずがないのでCRANをのぞいたら案の定でした。
多分、何か忘れていますね。
ここCRANのトップページにヒントがありました。

Supported branches
Debian jessie (stable)

For a backport of R 3.3.2 to jessie, simply add something like

deb /bin/linux/debian jessie-cran3/

to the file /etc/apt/sources.list on your computer. You need to substitute by one of the mirror URLs listed in the mirror list.

これによれば、アップデートサイトを登録しておかなければならないようです。CRANのミラーは統計数理研究所にあるので、さっそくnanoを使って、/etc/apt/sources.listに以下の一行を追加して、再度apt-get updateを実行。

deb http://cran.ism.ac.jp/bin/linux/debian jessie-cran3/

すると今度は次のようなエラーが・・・(´・ω・`) なにこれ?

W: GPG エラー: http://cran.ism.ac.jp jessie-cran3/ Release: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 06F90DE5381BA480

とりあえずもう一度、apt-get updateしたら、またもや同じメッセージが出たのですが、upgradeしてみると

警告: 以下のパッケージは認証されていません!
r-doc-html r-base-html
検証なしにこれらのパッケージをインストールしますか? [y/N]

と聞かれます。ここでYesを選択すればインストールはできるのでしょうけど、せっかくのセキュリティ対策を使わないのはばかげていますし、ここで勉強しなければ意味ありません。

CRANトップページに以下の解説が。

Secure apt

The Debian backports archives on CRAN are signed with the key of Johannes Ranke (CRAN Debian archive) with key fingerprint 6212 B7B7 931C 4BB1 6280 BA13 06F9 0DE5 381B A480. You can fetch and import this with

apt-key adv --keyserver keys.gnupg.net --recv-key 6212B7B7931C4BB16280BA1306F90DE5381BA480

初めて公開鍵認証というものを意識しました。
指示通りapt-keyを何度か試してもエラーばかり。う~ん、とうなること数回。あ、そうだ。sudoが抜けてます。

gpg: 鍵381BA480をhkpからサーバーkeys.gnupg.netに要求
gpg: 鍵381BA480: 公開鍵“Johannes Ranke (CRAN Debian archive) ”を読み込みました
gpg: 処理数の合計: 1
gpg: 読込み: 1

今度はうまくいきました。
この後、

sudo apt-get update
sudo apt-get upgrade

さらなるエラーが

インストールすることができないパッケージがありました。おそらく、あり得ない状況を要求したか、(不安定版ディストリビューションを使用しているのであれば) 必要なパッケージがまだ作成されていなかったり Incoming から移動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
r-base : 依存: r-base-core (>= 3.3.2-1~jessiecran.0) しかし、3.1.1-1 はインストールされようとしています
依存: r-recommended (= 3.3.2-1~jessiecran.0) しかし、3.1.1-1 はインス トールされようとしています
r-base-dev : 依存: r-base-core (>= 3.3.2-1~jessiecran.0) しかし、3.1.1-1 はインストールされようとしています
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

「満たせない依存関係」?どうやらバージョンの前後関係が合っていないと言っているようですが、よくわかりませんが、r-baseがr-base-coreの3.3.2-1に依存しているにもかかわらず、3.1.1-1をインストールしようとしているという意味でしょうか(日本語が少し変です)。

こちらのサイト「apt-getのはまりどころ」によるとどうやらはまりどころのようですね。結局、

sudo apt-get remove r-base-core r-recommended

してもう一度、updateからupgradeでやり直しです。しかしどうもうまくいきません。
このサイトを参考にして、aptitudeを試してみました。

UbuntuのOSバージョンアップなどでaptの依存関係がおかしくなったときはaptitudeが便利

sudo aptitude install r-base

すると、いろいろな提案をしてくれます。とりあえず全部Noを選んで、すべての提案を確認。そのうえで、3.3.2ではなく3.1の安定板を使うのがよさそうだったので、その提案でインストールをしなおし。

pi@raspberrypi:~ $ sudo aptitude install r-base
以下の新規パッケージがインストールされます:
autotools-dev{a} cdbs{a} icu-devtools{a} libblas-dev{a} libbz2-dev{a}
libicu-dev{a} liblapack-dev{a} liblzma-dev{a} libncurses5-dev{a}
libpcre3-dev{a} libpcrecpp0{a} libreadline-dev{a} libreadline6-dev{a}
libtinfo-dev{a} r-base{b} r-base-core{a} r-base-dev{ab} r-base-html{a}
r-cran-boot{ab} r-cran-class{a} r-cran-cluster{a} r-cran-codetools{ab}
r-cran-foreign{a} r-cran-kernsmooth{a} r-cran-lattice{a} r-cran-mass{a}
r-cran-matrix{a} r-cran-mgcv{a} r-cran-nlme{a} r-cran-nnet{a}
r-cran-rpart{a} r-cran-spatial{a} r-cran-survival{a} r-doc-html{a}
r-recommended{ab}
更新: 0 個、新規インストール: 35 個、削除: 0 個、保留: 3 個。
アーカイブ 45.8 M バイト中 8,280 k バイトを取得する必要があります。展開後に 101 M バイトのディスク領域が新たに消費されます。
以下のパッケージには満たされていない依存関係があります:
r-cran-codetools : 依存: r-base-core (>= 3.3.1-1~jessiecran.0) [3.1.1-1 がイン ストール予定となっています]
依存: r-api-3[仮想パッケージです]
r-recommended : 依存: r-base-core (>= 3.3.2-1~jessiecran.0) [3.1.1-1 がインストール予定となっています]
r-base : 依存: r-base-core (>= 3.3.2-1~jessiecran.0) [3.1.1-1 がインストール予 定となっています]
r-cran-boot : 依存: r-base-core (>= 3.3.1-1~jessiecran.0) [3.1.1-1 がインストール予定となっています]
依存: r-api-3[仮想パッケージです]
r-base-dev : 依存: r-base-core (>= 3.3.2-1~jessiecran.0) [3.1.1-1 がインストー ル予定となっています]
以下のアクションでこれらの依存関係の問題は解決されます:

以下のパッケージを現在のバージョンに一時固定する:
1) r-base [インストールされていません]
2) r-base-dev [インストールされていません]
3) r-cran-boot [インストールされていません]
4) r-cran-codetools [インストールされていません]
5) r-recommended [インストールされていません]

以下の依存関係を未解決のままにする:
6) r-base-core が r-recommended を推奨
7) r-base-core が r-base-dev を推奨

この解決方法を受け入れますか? [Y/n/q/?]n
以下のアクションでこれらの依存関係の問題は解決されます:

以下のパッケージをインストールする:
1) r-base-dev [3.1.1-1 (stable)]
2) r-cran-boot [1.3-13-1 (stable)]
3) r-cran-codetools [0.2-9-1 (stable)]
4) r-recommended [3.1.1-1 (stable)]

以下のパッケージを現在のバージョンに一時固定する:
5) r-base [インストールされていません]

この解決方法を受け入れますか? [Y/n/q/?]n
以下のアクションでこれらの依存関係の問題は解決されます:

以下のパッケージをインストールする:
1) r-base-dev [3.1.1-1 (stable)]

以下のパッケージを現在のバージョンに一時固定する:
2) r-base [インストールされていません]
3) r-cran-boot [インストールされていません]
4) r-cran-codetools [インストールされていません]
5) r-recommended [インストールされていません]

以下の依存関係を未解決のままにする:
6) r-base-core が r-recommended を推奨

この解決方法を受け入れますか? [Y/n/q/?]n
以下のアクションでこれらの依存関係の問題は解決されます:

以下のパッケージをインストールする:
1) r-base [3.1.1-1 (stable)]
2) r-base-dev [3.1.1-1 (stable)]
3) r-cran-boot [1.3-13-1 (stable)]
4) r-cran-codetools [0.2-9-1 (stable)]
5) r-recommended [3.1.1-1 (stable)]

この解決方法を受け入れますか? [Y/n/q/?]

結局、最後の方法を受け入れてインストールは終わり。つまりアップデートはできないまま前のバージョンに戻しました。


Linux化計画(14)–VcXsrvを使う

RのプロットがTeratermからできないことを諦めていた件につき、解決策が見つかりました。

Windows上にX-Serverを構築してしまえば、Windows側でRPIのLXWindowsやIDLEが使えるようです。
VcXsrvというパッケージがありました。

実際にインストールしてみましたが、うまくいきませんでした。

ディスプレイ・マウス・キーボードを接続せずにRaspberry Piを利用する
http://raspibb.blogspot.jp/2016/04/raspberry-pi.html

但しこの方法は邪道なようでして、上記解説に以下のような記述がありました。

実際、よりLinuxに慣れている方は、上記のようにRaspberry PiのGUIアプリケーションをWindows上に表示して用いる、ということはほとんど行いません。

どうするかというと、Raspberry Pi上で行う全ての処理を、上記のターミナルソフトウェアTera Term上で行ってしまうのです。Tera TermはRaspberry Piとコマンド(文字)のやりとりしかしませんから、ネットワーク経由でも動作が軽快なわけです。

ついでに、日本語文字化け予防のためにこちらの記述に従って、fonts-vlgothicもインストールしておきました。
http://raspibb.blogspot.jp/2015/04/blog-post.html

sudo apt-get install fonts-vlgothic

このサイトはブルーバックスの解説本の補助サイトになっているので、かなり使えそうです。

「Raspberry Piで学ぶ電子工作」補足情報 http://raspibb.blogspot.jp/


Linux化計画(13)–Rのインストール

病膏肓に入る。

一通りRPi3が使えるようになったので、次はラズパイをRのサーバとして使えないかという野望が生まれました。
一般のパッケージの導入と同じように、

sudo apt-get install r-base

と叩くと関連するcoreとパッケージも一緒にインストールしてくれます。本当に便利ですね。

使ってみたところ、キャラクターベースのコマンドは受け付けてくれましたが、plot()はエラーにはならないものの何も表示してくれませんでした。ターミナルアクセスの限界なのでしょうか。

こちらを参考にしました。

Getting the latest version of R on the Raspberry Pi
http://raspberrypi.stackexchange.com/questions/41226/getting-the-latest-version-of-r-on-the-raspberry-pi

ラズパイにはTeraTermを使ってSSHで入っていますが、RのプロットはCLIとは別のグラフィックデバイスに出力するようになっていますから、TeraTermの画面に出ないだけで、裏では動いているはずです。

そこでVNCを使って入ってみたところ、Rがメニュに存在することが確認できたとともに、plot()も普通に使えました。


Linux化計画(12)–コンポジット出力・他課題

コンポジットでTV画面に表示させる。

ラズパイにはコンポジット経由でアナログTVに画面を表示させることができるようになっています。さすが、小学生用のPCです。

調べてみると、/root/config.txtにパラメータを設定すればよいということが書いてあります。

Raspberry Pi2 model B のコンポジット出力をアナログTV(S●NY WEGA)につなぐ
http://blog.goo.ne.jp/sabotenboy_london/e/75226283a18d5e551b128f5733d0eb0d

config.txt
https://www.raspberrypi.org/documentation/configuration/config-txt.md

この通りに設定をして、リブートをかけました。
すると、TV画面にRPのデスクトップが表示されました。

しかし課題があります。
自分のPCからVNCでみられる画面と、TVでみる映像は異なっています。つまりTV画面を利用してRPを操作するのはまだできていません。

もう一つの課題は、WEBカメラが映らなくなってしまったことでしょう。
config.txtを外してリブートしてもダメです。
もともとのWEBカメラの設定の際にいろいろ試したので、その中でたまたま条件が一致したので前回はうまくいったと言えますが、再現性がないのであればできたとは言えません。

本当ならば、WEBカメラを使って撮影したものをTVでモニターすることを考えていたのですが、両方できなくなってしまいました。

さらに、昨日設定したはずの時計が既に2時間遅れています。ずっと一晩中オフにしていないので、遅れとしてはかなりひどいです。
sysctrlを見ると、ntpdateがfailedになっていました。

(追記)
時計をコマンドで強制的に合わせました。再度遅れの状況を把握します。⇒ /etc/rc.local の中の、ntpdateはsudoで実行に変更します。
さらに、WEBカメラはなぜか映るようになりましたが、少し設定を変えようとするとすぐにエラーが生じます。
おそらく非常に微妙な条件で映っているのでしょうから、最低限のスペックを保持するようにします。

2017年1月29日追記
systemctlでみると、rc.localとntpでエラーが生じていました。rc.localにはntpを起動するようになっていたのですが、chronyを使っているので不要ですから、コメントアウト。
さらに、ntpがどこで読み込まれているかは不明ですが、

chkconfig --list

で起動されていることが分かったので、オフにします。

sudo chkconfig ntp off

こちらを参考にしました。

エコな毎日
Raspberry Pi 2 不要サービス停止
http://ecoday.jp/841/raspberry-pi-2-%E4%B8%8D%E8%A6%81%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E5%81%9C%E6%AD%A2/


Linux化計画(11)–WEBカメラ

たまたま数年前に入手した古いUSB WEBカメラ(当時すでに中古品)があるので、ラズパイにつないでカメラとして使ってみます。
RPには回路に直接つなげるオプションが販売されているようですが、今回は興味本位で何でもやってみようということなので、わざわざ高級品を買い求めるつもりもなく、有合わせでチャレンジ。

さっそく、USBにつないで、lsusbを叩いてデバイスが認識できているかどうか調べますが、カメラは一発で認識されました。
次はViewerが必要です。

最初はfswebcamというのを使ってみたのですが、これはViewerというよりは撮影のためのツールのようです。
コマンドを叩くと指定したファイル名の写真を撮影してくれるので、便利ではあります。

Raspberry Pi 公式ドキュメントを日本語訳
一般的なWebカメラを使用する
http://igarashi-systems.com/sample/translation/raspberry-pi/usage/webcam.html

調べてみると、motionとかMJPG-streamerなどがよさそうなので、両方試してみましたが、どうもうまくいきません。実はこのカメラ、相性が悪くて、入手した際もなかなかつながらず苦労した覚えがあります。またこれらのパッケージは監視カメラを意識してか、画面に動くものが入った場合に録画するようになっているようです。

しかし、SDカードのトップフォルダには、何やらファイルが増えています。Windowsならこれをクリックすれば画像ソフトが起動するのですが、自分で探さねばなりません。コマンドラインからいろいろ試しましたが、うまくいかず・・・エラーメッセージを見ると、X Serverが起動されていない・・・あ、そうか。

またやってしまいました。GUI系のパッケージはXサーバが起動していないと使えないので、ここは先日試したVNCを使ってみることに。

vncserverを叩いてRP側にデスクトップ環境を設定し、WindowsPC側はJavaのTightVNCを使います。前回も簡単にできたのですが、今回もさくっと進みました。

RPのデスクトップから画像ソフトを立ち上げでフォルダを見ると、天井の蛍光灯が写っていました。昨日は見れなかったのですが、一応、駆動はしていたようです。

もっと軽いパッケージがよかろうということで、guvcviewを使うことに。

sudo apt-get install guvcview uvccapture uvcdynctrl

をssh端末からたたいて設定し、デスクトップからguvcviewを起動します。
画面が真っ黒で、何も見えません。しかもRPのデスクトップの「残像」も一緒です。

通信回線が細いので、フレームレートや解像度などを最低レベルに下げてさらに白黒にして情報量をさげてみました。これにはGUIツールがついているので、それを借りたら便利でした。

するとどうでしょう。私の作業場の横の窓とカーテンが写っていました。WEBカメラは成功です。

こちらを参考にしました。

Raspberry Pi3とUSB WEBカメラでストリーミング
http://qiita.com/sp_ice/items/7f15e262fffd69d3375c
https://www.raspberrypi.org/documentation/usage/webcams/

Raspberry Pi 3 とウェブカメラ(ロジクール C270)

Raspberry Pi 3 Model Bでネットワーク ライブカメラを構築する方法 Motion編
http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_3_camera_motion/