min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

RaspberryPi 初代 mplayer の Segmantation Fault エラーの原因を探る

 

ラズパイ(初代)で便利にラジオを聴いていたんだけど、突然再生できなくなった。ラジを再生スクリプトを叩くと、mplayer が Segmantation Fault エラーで落ちている。

スクリプトはこれ。

$ vim play_tachikawa.sh

f:id:min117:20170806162133p:plain

エラーはこう。

f:id:min117:20170806162236p:plain

sudo apt-get -y update してみたけど改善しない。「SDカードを初期化して raspbian を再インストールする」という手もあるけど、それだと分からないことに蓋をしただけになってしまう(もしこれがインフラの本番環境だったらそんなことは絶対できないわけで)。今回はSegmantation Fault を真面目に調べてみることにする。

このへんが参考になりそう。

sarface2012.hatenablog.com

きになる記述はこのへん。

f:id:min117:20170806163229p:plain

まずは、ulimit -a して、設定情報を見る。

$ ulimit -a

f:id:min117:20170806162551p:plain

core file size が 0 なので、制限(limit)が掛かっているのが分かる。/etc/profile を編集して制限を解除する必要あり。

編集前に、/etc/profile をバックアップしておく。

f:id:min117:20170806163107p:plain

$ sudo vim /etc/profile

f:id:min117:20170806163757p:plain

↑ 最終行に「 ulimit -c unlimited > /dev/null 2>&1 」を追加。Pi を reboot する

$ sudo reboot

再起動後、もう一度 ulimit の設定を確認する。

$ ulimit -a

f:id:min117:20170806164509p:plain

core file size が unlimited になっている。うまく設定されたようだ。この状態で、Segmantation Fault を起こすと、/tmp 以下にダンプファイルができる とあるのでやってみる。

f:id:min117:20170806165018p:plain

たしかに、「 core dumped 」という表示が出た。/tmp に cd して、core ファイルがあるか見てみる。

$ sudo -s && cd /tmp

$ ll

f:id:min117:20170806170055p:plain

なんと、coreファイルが無い…Piは仕様が違うのか?調べる。

RaspberryPi ZERO W を使ってスマホからテレビにラジオを流す

 

iPhoneからRaspberryPi ZERO を操作して、ラジオを再生する。音はテレビから

出す。イメージはこんな感じ。

f:id:min117:20170730110027j:plain---HDMI---f:id:min117:20170806030150j:plain

 ↑

iPhone または iPad または Android

f:id:min117:20170806030611p:plain

UIはhtml。サーバ側は php で受けて、ラジオ再生するシェルコマンドを叩く。Pi に必要なものは apachephp。どちらもインストールされている。

ーーー

うまく動いた。Pi にあるファイルは以下のとおり。

f:id:min117:20170806030854p:plain

ソース(radio.html

f:id:min117:20170806032154p:plain

ソース(radio.php

f:id:min117:20170806031848p:plain

ソース(inputDesign.css

f:id:min117:20170806032450p:plain f:id:min117:20170806032507p:plain

RaspberryPi 3 SSH接続できない場合の対処

 

手元のiMacからリモートのRaspberryPi 3(無線接続)にSSH接続できなくなった。タイムアウトしてしまう。

f:id:min117:20170805064508p:plain

昨日までは通じていたのになぜ?たぶんroute設定が原因だと思うゲートウェイの設定がおかしいのかも。ちゃんと調べることにした。

ーーー

構成はこう。

iMac[192.168.3.27]

|(無線)

ルータ---(無線)--- 中継機 ---(有線)--- fedora[192.168.3.11]

|(無線)

② Pi3[192.168.3.41]

ーーー

①から②へのSSH接続ができない。ところが、

①から③にSSH接続したうえで、③から②へのSSH接続はできる

f:id:min117:20170805065830p:plain

ーーー

①の通信状態を調べる。

まずは①から②へ ping を飛ばしてみる。

$ ping 192.168.3.41

f:id:min117:20170805070903p:plain

タイムアウトしてしまう。

ーーー

次は 接続情報を見る。netstat -r コマンド。Gateway も確認できる。

$ netstat -r

f:id:min117:20170805070607p:plain

たしかに、pi3 のアドレス 192.168.3.41 がない。接続が確立していないから当たり前か。

ーーー

通信経路を調べてみる。traceroute コマンド。

$ traceroute 192.168.3.41

f:id:min117:20170805071223p:plain

Host is down なので、ホスト自体を見つけられていない(?)ようだ。

ーーー

$ route

f:id:min117:20170805070453p:plain

ーーー

調査途中で突然①から②へのSSH接続ができるようになってしまった。どうも、中継機にしているWEX-1166DHPが原因ぽい(それを再起動したら通信できたので)。

f:id:min117:20170806024713p:plain

f:id:min117:20170806024939p:plain

f:id:min117:20170806024951p:plain

これ以上追うこともできないので、今回の調査はここで終了。

 

RaspberryPi 3 cgi-binでpython3 スクリプトを動かす

 

せっかく作った Python 3 スクリプト。コンソールだけで動かすのはもったいないから、WebでUIを作って、iPhoneからでも実行できるようにしたい。

ーーー

RaspberryPi3 で apache を動かして、cgi-bin の Python3 を叩けるようにする。Apache はインストール済みの前提。ポートは8083に変えてある。

$ cd /etc/apache2/

$ cat ports.conf

f:id:min117:20170730113429p:plain

http://自分のサーバアドレス:8083 にアクセス。

f:id:min117:20170730113243p:plain

cgi-bin を作っていく。参考はこのへん。

qiita.com

まずは、UserDirの有効化 なるものが必要らしい。a2enmod fedoraには無いコマンドだ。Debian系だけなのか。

$ sudo a2enmod userdir

f:id:min117:20170730120859p:plain

次に Webアクセスした時に最初に表示されるフォルダ(DocumentRoot)を変更する。

(変更前)/var/www/html/

(変更後)/home/pi/Desktop/public_html/

f:id:min117:20170730121601p:plain

設定ファイルで DocumentRoot の記述を変える。

$ sudo vim /etc/apache2/sites-available/000-default.conf

f:id:min117:20170730121606p:plain

DocumentRoot の行 と、<Directory で始まる行 の記述を変更する。

f:id:min117:20170730121611p:plain

サービスを再起動。

$ sudo systemctl restart apache2.service

$ sudo systemctl daemon-reload

f:id:min117:20170730122112p:plain

$ sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load

f:id:min117:20170730123324p:plain

$ sudo vim /etc/apache2/sites/available/000-default.conf

f:id:min117:20170730123328p:plain

Include conf-available/serve-cgi-bin.conf」のコメントを外して有効化する。

↓ この例では36行目 

f:id:min117:20170730123333p:plain

$ sudo vim /etc/apache2/mods-available/mime.conf

f:id:min117:20170730123400p:plain

ハンドラのコメントを外して .cgi と .py を有効化する。

(変更前)#AddHandler cgi-script .cgi

(変更後)AddHandler cgi-script .cgi .py

↓ この例だと220行目

f:id:min117:20170730123406p:plain

$ sudo vim /etc/apache2/conf-available/serve-cgi-bin.conf

f:id:min117:20170730123414p:plain

ScrpitAlias の行と、<Directory の行 を変更する。

↓ この例だと12行目 と 14行目

f:id:min117:20170730123418p:plain

サービスを再起動する。

$ sudo service apache2 restart

f:id:min117:20170730123424p:plain

cgi-bin フォルダを作る。

$ mkdir cgi-bin

f:id:min117:20170730124612p:plain

テストスクリプト test.py を置いてみる。

f:id:min117:20170730124837p:plain

アクセスして実行を確認。

http://Pi3IPアドレス:8083/cgi-bin/test.py

f:id:min117:20170730125030p:plain

動いてしまった。cgi-bin は、実行するのにパーミッションの設定がかなり面倒なはずなのに。以下の状態で実行できた。

cgi-bin 所有者がpiのまま(rootでない)

cgi-bin パーミンションは drwxr-xr-x のまま

Debian系だからなのか?

DocumentRootを /var/www から移したからなのか?

たぶん後者。もう少しスクリプトを置いて検証する。

RaspberryPi ZERO W に python3 をインストールする

 

RaspberryPi ZERO W 。先日 Pimori でイギリスから取り寄せたもの。

Raspberry Pi Zero - Pimoroni

f:id:min117:20170730110027j:plain

Raspbian Jessie を使用中。今回、Python3 を使いたいのでインストールする。以前の記事そのまま進める。

min117.hatenablog.com

$ python -V

$ sudo apt-get install build-essential libncursesw5-dev

f:id:min117:20170730110643p:plain

$ sudo dpkg --configure -a

f:id:min117:20170730110649p:plain

$ sudo apt-get install build-essential libncursesw5-dev

f:id:min117:20170730110653p:plain

f:id:min117:20170730110719p:plain

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

f:id:min117:20170730110925p:plain

f:id:min117:20170730111011p:plain

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile

$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile

$ echo 'eval "$(pyenv init -)"' >> ~/.profile

$ vim ~/.profilef:id:min117:20170730111210p:plain

$ pyenv install 3.5.1f:id:min117:20170730111528p:plain

すごい時間がかかる。

 

 

RaspberryPi 検索単語と枚数指定してGoogle Custom Search API で画像収集(Python 3)

前回記事のソースを改良。検索単語と画像枚数を指定して検索できるようにした。

min117.hatenablog.com

RaspberryPi で画像を一括ダウンロードできる。使い方はこう。

ーーー

「ガッキー」という単語で、10枚の画像を検索してダウンロードする場合。

$ python3 ./get_image_Arg.py ガッキー 10

f:id:min117:20170724023022p:plain

ダウンロードできている。

f:id:min117:20170724023957p:plain

自作の画像ビューア(php製)で見てみる。

f:id:min117:20170724022928p:plain

ーーー

「ガッキー 逃げ」という単語(複数単語)で、20枚の画像を検索してダウンロードする場合。複数単語はダブルクオートで囲む

$ python3 ./get_image_Arg.py "ガッキー 逃げ" 20

f:id:min117:20170724030047p:plain

これもうまくいく。

f:id:min117:20170724025838p:plain

ーーー

ソースはこれ。Python3 。引数指定できるようにした。うまく動かないときは

$ pip install httplib2

したか要確認。

f:id:min117:20170724025340p:plain

f:id:min117:20170724025401p:plain

あとは html で入力画面作って、cgi-bin で動くようにする。iPhone で出先から一括ダウンロードしたいので。

RaspberryPi Google Custom Search API で画像収集(Python 3)

 

このサイトのとおりやってみる。

qiita.com

まずは カスタム検索 で新しい検索エンジンを作成する。

カスタム検索

・「検索するサイト」には www.google.co.jp と入れておく(この後削除する)。

・「言語」は日本語に変更する。

・「作成」をクリック。

f:id:min117:20170722182931p:plain

・「コントロールパネル」を開く。

f:id:min117:20170722183037p:plain

・「画像検索」を オン にする。

・「言語」が日本語なのを確認。

・「検索するサイト」は「追加したサイトを重視して、ウェブ全体を検索する」に。

・「www.google.co.jp」を選択して「削除」する。

f:id:min117:20170722183157p:plain

・「検索エンジンID」をクリックして、出てくる文字列を控えておく。

f:id:min117:20170722183353p:plain

ーーー

Custom Search API を獲得するために、Google Cloud Platform Cosole に行く。

Google Cloud Platform Console

f:id:min117:20170722183655p:plain

左メニュー「認証情報」から、サーバーキーを控える。

f:id:min117:20170722183730p:plain

Python スクリプトについては、冒頭のサイトどおり。

f:id:min117:20170722183752p:plain

 ソース記述。まんま写しだけど、あえてコピペでなく手書きする。

Python3 にて。

$ vim get_image.py

f:id:min117:20170722212754p:plain

実行してみる。

$ ./get_image.py

f:id:min117:20170722210608p:plain

httplib2 でエラーになった。このへん参照して解消する。

HTTPウェブサービス - Dive Into Python 3 日本語版

f:id:min117:20170722211752p:plain

なんだか分かりやすい文章。あとでじっくり読む。

f:id:min117:20170722211805p:plain

httplib2 のインストールはこのへん。

ytsuda.hateblo.jp

$ pip install httplib2

f:id:min117:20170722212009p:plain

インストール完了。再度実行してみる。

$ ./get_image.py 

f:id:min117:20170722210516p:plain

あれ?エラーだ。python3 を明示して実行してみる。

$ python3 ./get_image.py

f:id:min117:20170722212523p:plain

url は取れている。なぜかダウンロードだけ失敗しているようだ。

原因調査。31行目が間違っていた。

(誤)splittext

(正)splitext

f:id:min117:20170722214455p:plain

直したので再度実行してみる。

※ ついでなので、41行目と43行目(検索対象文字列)を変えて、スクリプト名も少し変えた。

$ python3 ./get_image_gakki.py

f:id:min117:20170722215007p:plain

うむ。うまくいった。APIの制限によるとMAXで10枚までの検索ができるらしい。今回は5枚。

f:id:min117:20170722215317p:plain

しっかりダウンロードできている(1枚は変な画像が入っているが気にしない)。あとで改造して、cgi-binから枚数指定してダウンロードできるようにしてみる。