Raspberry Piで実行するVPN上のWordPress

Raspberry Piの良いところ、Linuxが扱えることができるマイコンであるという点ですかね。さて、このRaspberry Piを使ってVPN上でWordPressを運用させると言うことは、本人もしくはVPNに参加する人間のみが編集、閲覧することが出来るサイトです。一種のクローズドサイトと呼ばれるものです。自分専用の忘備録であったり、日記であったり、仲間内での共同サイトであったりとVPNという閉鎖的回線を用いることによってプライバシが担保されるものです。簡易的な様子を図示しました。実際にはもっと複雑な処理をしていますが省いています。

vision_1.png
VPNを使えばどこでもWordPressを見ることができる。

因みに今回の設定は外部公開に向きませんのでご留意下さい(ポート開放等の公開行為)。あくまでもVPN上での運用が大前提です。

#1:Raspberry Piのセットアップ

Raspberry Piをセットアップする必要があります。筆者自身もはじめからセットアップを行いました。

#1-1:Raspberry Piに必要なイメージをダウンロード

Raspberry Piに必要なイメージとして、Raspbianを使います。今回筆者が使ったものはRaspbian Jessie LiteというものでRaspbian Jessie With Pixelではありません。Raspbian Jessie LiteはGUIモードがなくCUIモードのみとなっています。しかし、結局のところWordPressというWEB GUIを使用するので何ら問題ありません。また、個人の好みにもよるもので、With Pixelを選択してもLiteを選択しても動作には変わりありませんが、容量を少なく済ませたいのであればLiteをおすすめします。公式サイトよりダウンロードすることができます。

項目
OS Raspbian Jessie Lite
ヴァージョン November 2016
リリース日 2016年11月25日
カーネルバージョン 4.4

#1-2:ダウンロードしたイメージをMicro SDに書き込む

ダウンロードしたファイルを解凍(展開)し、Win32 Disk Imagerで対象のMicro SDに書き込む作業を行って下さい。Win32 Disk ImagerはOSDNよりダウンロードすることができます。詳しい書き込み方法はこちらを参考にして下さい。

#1-3:初期起動の設定

初期起動時、SSHはデフォルトで有効でしたが今回リリースされたヴァージョンではデフォルトでSSHが無効になっているため初期段階からSSHでログインすることができませんでした。有効にするには下記のコマンドを入力し、[5]=>[P5]の順に移動します。

$ sudo raspi-config

最後に自分自身のIPアドレスを確認します。有線LANの場合、eth0を参照し、無線LANの場合、wlan0を参照して下さい。割り当てられたIPアドレスはinet アドレスにて確認することができます。筆者の場合ですと、192.168.11.14に今回割り当てられました。

$ ifconfig
eth0 Link encap:イーサネット ハードウェアアドレス b8:27:eb:05:fc:33
     inetアドレス:192.168.11.14 ブロードキャスト:192.168.11.255 マスク:255.255.255.0

Windowsパソコンで操作する場合はTera TermでSSH接続を行います。Tera Termはこちらでダウンロードすることができます。先程取得したIPアドレスを入力して、ユーザ名とパスワードを入力して下さい。デフォルトのユーザ・パスワードは下記の表のとおりです。

項目
ユーザ名 pi
パスワード raspberry

ログインが完了したら、次にRaspbianのアップデートを行います。

$ sudo apt-get update
$ sudo apt-get upgrade

日本語化とタイムゾーンの変更を行います。下記のコマンドを実行し、必要な処理を行います。[2]よりpiのパスワードを変更して下さい。次に[4]=>[I1]より[en_GB.UTF-8 UTF-8]と[ja_JP.EUC-JP EUC-JP]と[ja_JP.UTF-8 UTF-8]を選択し、デフォルトで使用するロケールを[ja_JP.UTF-8]として下さい。最後に[4]=>[I2]を選択して[Asia]=>[Tokyo]と進んで下さい。

$ sudo raspi-config

次に日本語フォント等を導入します。

$ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

vimエディタを追加(viが必要な場合のみ、nanoでも対応可能)

$ sudo apt-get install vim

以上を終えたら、下記のコマンドで再起動して下さい。

$ sudo reboot

#2:VPNの導入

VPNとして使うのはHamachiと呼ばれるものでSoftEtherよりも導入が簡単であり5台まで無料というメリットがあります。また、最近ではRaspberry Piへの導入が難なくできるのでおすすめであります。

#2-1:Hamachiへの登録

VPN.net – Hamachi by LogMeInにて登録を行います。

#2-2:クライアントへダウンロード&インストール

指示に従ってダウンロードを行って下さい。筆者の場合、Windowsにインストールしました。追加でiPhoneにもHamachiへ参加させました。

#2-3:Raspberry PiをHamachi VPNに参加させる

HamachiをRaspberry Pi (Raspbian)にインストールするのがとても簡単になりました。以前であればややこしい設定が必要でしたが、最近では自動起動まで勝手にやってくれます。Raspberry Piの操作に戻り、実際にHamachiをRaspberry Piに追加します。また、最新のヴァージョンはこちらで確認できます。選択する場合、『ARM HF version (BETA) *.deb』を選択して下さい。

$ wget https://www.vpn.net/installers/logmein-hamachi_2.1.0.174-1_armhf.deb
$ sudo dpkg -i logmein-hamachi_2.1.0.174-1_armhf.deb

次に参加要求を行います。最後のsudo hamachi joinの部分ですが、自動承認を選択した場合実行して下さい。通常であれば最後のsudo hamachi joinを実行せず、Hamachiの設定画面より『参加要求』から対象であるRaspberry Piを選択し、承認して下さい。

$ sudo hamachi login
$ sudo hamachi attach [Your Hamachi Email Address]
$ sudo hamachi set-nick [Whatever Nickname You Make]
$ sudo hamachi join [Network ID] [Password]

これでVPNへの参加を完了することができました。

#3:サイトに必要な条件を整える

Raspberry PiをウェブサーバとするにはApacheやPHPを導入する必要があります。これがなければ表示することが出来ません。

#3-1:Apache2を導入する

ApacheはHTMLを表示するためのものです。下記のコマンドより導入します。

$ sudo apt-get install apache2

先程ifconfigで調べた自身のIPアドレスをブラウザに入力すると次の表示がされます。

2016-12-24
It works!

#3-2:PHP5の導入

PHP5を導入する必要があります。下記のコマンドより導入します。

$ sudo aptitude install php5

#3-3:MySQLの導入

MySQLを導入します。途中でMySQLに設定するパスワードを聞かれますので、設定して下さい。ここでは例として”raspass”とします。二度聞かれるのでどちらも同じパスワードを入力して下さい。

$ sudo apt-get install mysql-server php5-mysql

#3-4:データベースの作成

実際に運用させるためのデータベースを作成します。今回は”wordpress”というデータベースを作成します。因みにMySQLにログインするには例として”mysql -uroot -praspass”で入ることができます。詳しく説明すると”mysql -u[User Name] -p[Password]”となっています。今回はwordpressというデータベースを作成します。

$ mysql -uroot -praspass
mysql> CREATE DATABASE wordpress;
mysql> exit

#3-5:phpMyAdminの導入

phpMyAdminを導入します。こちらも途中パスワードを聞かれますので問題なければ先程と同じパスワードを使います。嫌だと思う場合は、phpMyAdminで聞かれるパスワードのみを変え、2度目に同じものを入力して下さい。

$ sudo apt-get install phpmyadmin

#4:WordPressの導入

いよいよWordPressの導入です。日本語版を使って導入していきたいと思います。

#4-1:WordPress 4.7 日本語版をダウンロード

英語版が良いとお望みでしたら英語版もあるので参照するかと。ここでは日本語版について解説します。また、最新のWordPressについてはこちらから確認することが出来ます。

$ wget https://ja.wordpress.org/wordpress-4.7-ja.zip
$ unzip wordpress-4.7-ja.zip

#4-2:Apache上に配置する

Apache上でWordPressを再現する必要があるため、移動します。

$ sudo cp -r wordpress /var/www/html/wordpress

#4-3:権限問題の解決

どうしても生じるのが権限問題です。このまま実行してもwp-config.phpを手動で変更する必要がありますが、www-dataに権限を移行することによって今後生じる面倒事が無くなります。

$ sudo chown -R www-data:www-data /var/www/html/wordpress

#4-4:WEB上でWordPressの設定を行う

先程のifconfig IPアドレス値をブラウザ上に入力し、設定していきます。今回の場合ですと、私の場合、http://192.168.11.14/wordpressとなっています。環境が違うわけですからhttp://192.168.xxx.xxx/wordpressです。

2016-12-24 (1).png
正常表示

次に設定画面に先程設定したデータベース名などを入力していきます。データベースであるMySQLのパスワードは例として”raspass”を使用していますのでご自身が設定したパスワードを入力して下さい。その他の設定はそのままで十分です。

2016-12-24 (3).png
必要事項の入力

正しい値が入力されると以下の画面が出てきます。インストールの実行を行います。

2016-12-24 (5).png
正常にデータベースへ接続完了

 #4-5:サイトの基本情報の入力

サイトタイトルやユーザ名、パスワード、メールアドレスなどご自身のお好きな設定で。ここでは例を挙げているだけです。一応、公開はしませんが『検索エンジンがサイトをインデックスしないようにする』にチェックマークをつけましょう。

2016-12-24 (6).png
サイト基本情報の指定

#4-6:ログインをして動作を確認する

実際にログインを行って動作を確認して下さい。

2016-12-24 (7).png
管理画面
2016-12-24 (8).png
実際のサイト画面

#5:VPN上での改善

VPN上で表示するとレイアウトが崩れて正しく表示されない現象が発生します。これはWordPress上のアドレスがhttp://192.168.xxx.xxxであってVPNのアドレスであるhttp://25.xxx.xxx.xxxに対応していない為です。もし、正しく表示されているとしても、http://192.168.xxx.xxxに転送されているだけかもしれません。

因みに、これをVPN上のアドレスに対応させるだけでは不十分で次はローカルIP上からアクセス出来なくなります。

つまりIPアドレスである、http://192.168.xxx.xxx及びhttp://25.xxx.xxx.xxx (とhttp://raspberry.local)、に対応する必要があります。つまりWordPressのURLであるIPアドレスが2つ以上、つまり能動的(可変的)に動作する必要があります。

IP.png
処理のイメージ

#5-1:wp-config.phpの編集

wp-config.phpを編集し、サイトのURLを優先的に決定させ、能動的(可変的)にURLを変更可能にする設定を行います。ファイルの編集を行って下記の行を追加します。基本的に指定ありませんが(91行以下から制限あり)、データベースの照合順序[define(‘DB_COLLATE’, ”);](44行目)の下に追加するのが順当だと思います。

$ sudo vi /var/www/html/wordpress/wp-config.php
/** 動的URLに対応するめの設定 */
define('WP_SITEURL', 'http://' .$_SERVER['HTTP_HOST']. '/wordpress');
define('WP_HOME', 'http://' .$_SERVER['HTTP_HOST']. '/wordpress');

#5-2:記事本文中の画像等のURLを能動的(可変的)なものにする

wp-config.phpの設定のみでは不十分で、本文中の画像等のURLは変化しません。記事中で対応させるために『Insert PHP』というプラグインを新規追加します。[insert_php]XXXXXXX[/insert_php]で囲まれた範囲はphpが実行されます。つまりHTTP_HOSTが出力されるPHPを挿入すると可変的なURLにもメディアが対応することができます。[insert_php]echo $_SERVER[‘HTTP_HOST’];[/insert_php]をhttp://192.168.xxx.xxxの部分に置換することで対応することができます。IMGのURL部分に置換することで画像の能動的(可変的)な改善が得られます。

現在のアクセスURLは『http://[insert_php]echo $_SERVER['HTTP_HOST'];[/insert_php]』です。

#6:WordPress(PHP)のメディアアップロード容量を増やす

通常であれば、2MBですがこれは少ないのでメディアの許容アップロード値を増加させるべく対応させます。php.iniの変更を行います。

#6-1:php.iniの編集

$ sudo vi /etc/php5/apache2/php.ini
#393行
memory_limit = 128M
#660行
post_max_size = 80M
#820行
upload_max_filesize = 60M

#6-2:.htaccessの編集

次に.htaccessを編集します。以下を追加します。

$ sudo vi /var/www/html/wordpress/.htaccess
php_value memory_limit 128M
php_value post_max_size 80M
php_value upload_max_filesize 60M

#7:あとがき

最後に再起動を済ませると良いかもしれませんね。

$ sudo reboot

#7-0:

さて、ここまでどうでしたか?筆者も実行のみだと1時間くらいで終わりました。しかし、記事にするとなると3倍以上の時間がかかります。意外と大変…。でも、自分の忘備録ともなりますし、まぁ多分将来約に立つのかも。なにかエラー等が出ましたらコメント欄もしくは、お問い合わせページより報告お願いします。(クリスマスになに書いてるんだろ…。)

以上

RaspberryPiと携帯回線網(+VPN)の死活監視プログラム

こんにちは、筆者です。RaspberryPiと携帯回線網の組み合わせは最強です。しかし、時々ですが携帯回線がダウンしてしまう場合があります。それの対策として死活監視プログラムの作成が必須となります。L-02Cのファームアップデートだけでは対処できないかも…。

Pythonを使ったPingの確認

Pythonを使ったPingの確認は前回の記事に詳しくかいています。pypingを使う方法です。pypingを使うためにはpipで追加する必要があります。

$sudo pip install pyping

LEDを組み合わせる

GPIO 17,27,22 (Board 11, 13, 15)を使います。LEDと抵抗を準備してください。

Pythonで作ってみる(ベータ版)

ちょっと急いで作ったので使用は自己責任で。多分大丈夫だとは思う。送り先と繰り返し調整は注意して下さい。間違えがあればコメントよろしくお願いします。一応確認はしていますが…。

※追記:pypingは多分pingを送るinterfaceがないとエラーが発生します。つまり、エラーが繰り返してしまうトラブルが発生します。これを解消するためpypingのエラーに対して例外処理を施して再起動を円滑に行えるように対処しました。

$vi ping_monitor.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pyping
import RPi.GPIO as GPIO
import time
import os
import sys
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
################################################
#確認したいアドレス
host_dns     = "8.XXX.XXX.XXX"
host_vpn_A   = "25.XXX.XXX.XXX"
#代替比較アドレス
host_vpn_B   = "25.XXX.XXX.XXX"
################################################
#tが時間,sがtime sleep
def led_n3_f(t, s):
   n  = 0
   ts = t / (s * 2)
   while n < ts:
      GPIO.output(11, True)
      GPIO.output(13, True)
      GPIO.output(15, True)
      time.sleep(s)
      GPIO.output(11, False)
      GPIO.output(13, False)
      GPIO.output(15, False)
      time.sleep(s)
      n += 1
def led_n1_f(led_no, t, s):
   n  = 0
   ts = t / (s * 2)
   while n < ts:
      GPIO.output(led_no, True)
      time.sleep(s)
      GPIO.output(led_no, False)
      time.sleep(s)
      n += 1
def ping_tp(host_name, led_no, t):
   try:
      r_host = pyping.ping(host_name)
      if r_host.ret_code == 0:
         led_n1_f(led_no, t, 0.1)
         GPIO.output(led_no, True)
         return 0
      else:
         led_n1_f(led_no, t, 0.5)
         GPIO.output(led_no, False)
         return 1
   except:
      led_n1_f(led_no, t, 0.5)
      GPIO.output(led_no, False)
      return 1
def ping_sb(host_name_A, host_name_B, led_no, t):
   try:
      rA_host = pyping.ping(host_name_A)
      rB_host = pyping.ping(host_name_B)
      rAB     = (rA_host.ret_code) * (rB_host.ret_code)
      if rAB == 0:
         led_n1_f(led_no, t, 0.1)
         GPIO.output(led_no, True)
         return 0
      else:
         led_n1_f(led_no, t, 0.5)
         GPIO.output(led_no, False)
         return 1
   except:
      led_n1_f(led_no, t, 0.5)
      GPIO.output(led_no, False)
      return 1
def led_wait(t, s):
   n  = 0
   ts = t / (s * 2)
   while n < ts:
      GPIO.output(15, False)
      GPIO.output(11, True)
      time.sleep(s)
      GPIO.output(11, False)
      GPIO.output(13, True)
      time.sleep(s)
      GPIO.output(13, False)
      GPIO.output(15, True)
      time.sleep(s)
      n += 1
#EX:)解説:ホスト名, GPIOのPIN, 指定時間
#EX:)ping_tp(host_vpn_A, 11, 5)
#待ち時間
led_n3_f(10, 0.7)
led_wait(50, 0.25)

############################################################
while True:
   try:
      cn = 0
      while cn < 30:
         led_n1_f(15, 10, 1.5)
         GPIO.output(15, True)
         time.sleep(50)
         cn += 1
      tt1 = ping_tp(host_dns, 11, 20)
      if tt1 == 0:
         kk1 = ping_sb(host_vpn_A, host_vpn_B, 13, 20)
         if kk1 == 0:
            pass
         else:
            led_n1_f(15, 10, 0.5)
            os.system('sudo hamachi login')
            kk2 = ping_sb(host_vpn_A, host_vpn_B, 13, 20)
            if kk2 == 0:
               pass
            else:
               led_n1_f(15, 20, 0.05)
               os.system('sudo reboot')
               sys.exit()
      else:
         tt2 = ping_tp(host_dns, 11, 20)
         if tt2 == 0:
            kk3 = ping_sb(host_vpn_A, host_vpn_B, 13, 20)
            if kk3 == 0:
               pass
            else:
               led_n1_f(15, 10, 0.5)
               os.system('sudo hamachi login')
               kk2 = ping_sb(host_vpn_A, host_vpn_B, 13, 20)
               if kk2 == 0:
                  pass
               else:
                  led_n1_f(15, 20, 0.05)
                  os.system('sudo reboot')
                  sys.exit()
         else:
            led_n1_f(15, 20, 0.05)
            os.system('sudo reboot')
            sys.exit()
   except:
      led_n3_f(1800, 0.05)
      os.system('sudo reboot')
      sys.exit()

自動起動するようにする

再起動後自動起動することによってまた監視を続行する。

$sudo vi /etc/rc.local

#最後らへんに追加 先程作ったディレクトリを選択してください。ここではusr
python /usr/local/bin/ping_monitor.py &

exit 0

以上

自動起動を止めたい場合はrc.localの追加部分をコメントアウトするか削除してください。

PythonでPingの確認を行う

こんにちは筆者です。RaspberryPiとL-02Cにハマりまして必須と思われるPingを送信して確認するプログラムを作りたいと思います。

pypingを使う

Pythonでpingを送りたいのならosを使うかsubprocessを使うかのどちらかだけだと思っていたが実はpypingというものがあるらしい。シンプルで簡単なので今回はこちらを試してみた。

pipでpypingをインストールする。

$sudo pip install pyping

お好きなエディタ(viとかnanoとか)を使ってping.pyを作ります。この構成では到達を確認するものです。

$vi ping.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pyping

#確認したいアドレス
host = "192.168.11.1"
RPing = pyping.ping(host)

if RPing.ret_code == 0:
    print("到達を確認しました。")

else:
    print("到達を確認できませんでした。")

以上が基本的な構成となっています。

色々使ってみる

GoogleにPingを送る場合で色々やってみた。たぶんPingを3回ほど送信して最大値と最小値、そして平均値を求めていると思う。

$vi ping.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pyping

#確認したいアドレス
host = "www.google.com"
RPing = pyping.ping(host)

#送り先
print "ADD:"+str(RPing.destination)
#送り先IP
print "AIP:"+str(RPing.destination_ip)
#最大往復秒
print "MAX:"+str(RPing.max_rtt)+"ms"
#最小往復秒
print "MIN:"+str(RPing.min_rtt)+"ms"
#平均往復秒
print "AVG:"+str(RPing.avg_rtt)+"ms"

必ず管理者権限を使って実行してください。Windows Pythonでも同じことが言えます。

$sudo python ping.py
ADD:www.google.com
AIP:216.XXX.XXX.XXX
MAX:109.266ms
MIN:98.217ms
AVG:103.011ms

死活監視にも使えますので是非使ってみて下さい。以上、忘備録でした。

以上

cheeroモバイルバッテリーの利用 RaspberryPiとの組み合わせ [U-UPS]

こんにちは筆者です。実はとある噂を聞いてCheeroのモバイルバッテリーを買ってみた。

cheero Power Plus3 Premium 20100mAh

Amazon.co.jp – cheero Power Plus3 Premium 20100mAh Auto-IC機能搭載 モバイルバッテリー USB×3ポート ホワイト CHE-062

意外とない「追っかけ充電」対応バッテリー

実は昔パナソニック製のモバイルバッテリーを使っていたが記憶では「モバイルバッテリーを充電しながらスマホを充電すること」が可能だった。しかし、最近のAnkerなどは「モバイルバッテリーを充電しながらスマホを充電すること」が出来なかった。安く品質もよく安価であるが、これが出来ないのはちょっと辛い。

このことをなんと言うのか。バッファロー社のサイトではこの「モバイルバッテリーを充電しながらスマホを充電すること」「追っかけ充電」と呼んでいる。もちろん商品として実在する。

Amazon.co.jp – iBUFFALO モバイルバッテリー 超急速チャージ Voltissimo 4000mAh ブラック BSMPB0140BK

Amazon.co.jp – iBUFFALO 【iPhone6,iPhone6 Plus 動作確認済】スマートフォン用モバイルバッテリー 超急速チャージ Voltissimo 4000mAh ホワイト BSMPB0140WH

しかし4000mAhと心許ないのが実情なのだ!だって、今まで使ってるAnkerのモバイルバッテリーは16000mAhなのだから1/4である。公式で対応を表明してるのはこれくらい?

実はあった大容量「追っかけ充電」バッテリー(非推奨)

そうこれが噂の正体である。『cheeroのモバイルバッテリーは「追っかけ充電に対応」しているらしい』という情報を聞いた。しかも、一番高いクラスが20100mAhである。今回はそれを購入した。「追っかけ充電」が対応しているという噂を聞いたのはこれよりも容量が低いモデルであるから購入には若干不安であった。

購入後に気づいたことだが、公式サイトには非推奨であることが記載されていた。

-バッテリー充電中にスマホへ充電しても問題ないか
–バッテリーを充電しながらの携帯充電は安全上お控えください。

[BATTERY | cheero よくあるご質問より引用]

な、なんだってー!せっかく買ったのに!完全に確認してない筆者が悪い!でも使えるなら使っちゃおう精神。もちろん自己責任でよろしくお願いしたい。

結果

事実として今回買ったcheeroバッテリーは「充電しながらスマホを充電すること」つまり「追っかけ充電」が可能であった。何度も言おう非推奨であると。

検証:Ankerのモバイルバッテリーでcheeroのモバイルバッテリーを充電してRaspberryPi Zeroに給電する様子

筆者にとって何故「追っかけ充電」が重要なのか

一般の方からすると不要な機能である「追っかけ充電」。タイトルにちょこっと書いているがU-UPSという運用法を考えたのだ。USB充電可能な無停電電源装置これをU-UPSと勝手に名付けた。つまり今回買ったcheeroのモバイルバッテリーをUPSとして利用することを考えている。RaspberryPiをサーバーとして運用している人には必見かもしれない。簡易UPSとしての運用も考えることができる。

そしてソーラーパネルとの組み合わせも可能。簡易的な運用法としてモバイルソーラーパネルとcheeroのバッテリーを組み合わせて利用するというもの。Ankerのモバイルソーラーパネルの出力はUSBなので簡単に接続することができちゃうのだ。

Anker Power Port Solar

Amazon.co.jp – Anker PowerPort Solar (21W 2ポート USB ソーラーチャージャー) iPhone 6 / 6 Plus / iPad Air 2 / mini 3 / Xperia / Galaxy S6 / S6 Edge / Android各種他対応 【PowerIQ搭載】

運用例

どんな感じであるのか。こんな感じである。

UPS_pp.png
ソーラーパネルとの組み合わせ

天候がしばらく悪いので後日画像を載せます。

RaspberryPi用UPSとして

非推奨であるがRaspberryPi用のUPSとして使用可能である。

以上

RaspberryPi ZeroにL-02Cを導入

こんにちは筆者です。RaspberryPi ZeroにL-02Cが使えることを知って興奮のあまりTwitterに連投してしまった次第であります。基本的にはRaspberryPi ZeroもRaspberryPi 2と同じですので設定もそのままで良いかと。

環境と必要機器

環境はこんな感じ。

機器 詳細情報
RaspberryPi Zero OSにRaspbian Jessie With Pixelを使用。2016/09/23にリリースされた最新版。こちらからダウンロード可能。
L-02C L-02Cはファーム更新済み。使用バージョンはV10e。
MicroSD 8GB以上をおすすめ。筆者は今回8GBを使用。
給電用MicroUSBケーブル そこいらに落ちてるMicroUSBケーブルでも十分です。
USB給電アダプター 1A出力で十分です。
USB OTGケーブル OTGケーブルを使わないとL-02Cを接続することができないので必須。
USBハブ(不要な場合あり) マウスやキーボードを接続するなら必要。
MicroSDカード 8GB以上がおすすめ。筆者は8GBのMicroSDを使った。

実際に使用

実際に使ってみた。見やすくするため撮影時間がごちゃごちゃですがご理解ほど…。

接続完了。
小さい箱に詰め込んでみた
温度センサーとWEBカメラ、モバイルバッテリーと箱
大きさはこれくらい。ハンディータイプ。
ハンディータイプサーバー!
5.2V * 0.65A = 3.38W
友人の車に搭載して、運用できているか確認。

あとがき

RaspberryPi ZeroとL-02C、WEBカメラ、温度センサーをあわせた消費電力はおおよそ3.4Wであり今回使用したAnkerのバッテリー容量は59.2Whであるからにして[59.2Wh / 3.4W = 17.41h] おおよそ17時間の連続運用が可能であるという結果。あくまでも理論値ですけどね。

L-02Cの接続が途切れる問題に関して、ファーム更新で対策したのと再接続系の設定を追加して行ったらPingが途切れることなく行きました。

ちなみにバッテリーにはcheeroを購入。明後日に届く模様。こちらはバッテリー給電中でもRaspberryPiに電源を供給できるみたいなのでUPSとして運用できますし、USBタイプのソーラーパネルも組み合わせることができると思っています。

最終目標は森に置いて熊が映ったらいいな!…なんて。

Raspberry PiにHamachiのインストール及び自動起動

Hamachi便利ですよね。私の研究する内容と深く関わるソフトであります!さて、最近記憶力の低下のため備忘録がてらこちらに書き留めておきます。

必要なパッケージを追加

Hamachiに必要なlsb、lsb-coreを追加しましょう。今後も外部パッケージを追加する時があれば便利なのでぜひぜひ。

$sudo apt-get update
$sudo apt-get install --fix-missing lsb lsb-core

Hamachiをダウンロード&インストール

ホームディレクトリに移動しwgetなりでHamachiをダウンロードします。ダウンロードしたバージョンは(2.1.0.165-1 ARM HF)です。最新のバージョンに関してはこちらから確認できます。URLを書き換えダウンロードしてみてください。

$cd ~
$wget https://www.vpn.net/installers/logmein-hamachi_2.1.0.165-1_armhf.deb

ダウンロードが終わったら次にインストールを行います。

$sudo dpkg -i logmein-hamachi_2.1.0.165-1_armhf.deb

エラーがメッセージが出てもインストールできてればOKです。

起動とログイン

起動はこれでGO。

$sudo /etc/init.d/logmein-hamachi start

ログインについて。設定したメールアドレス、ニックネーム、ネットワークIDとパスワードを入力してログインが完了します。もし、hamachi joinができない場合は登録限界数を確認してください。

$sudo hamachi login
$sudo hamachi attach [Your Hamachi Email Address]
$sudo hamachi set-nick [Whatever Nickname You Make]
$sudo hamachi join [Network ID] [Password]

これでHamachiに参加できます。ここまでが任意のタイミングで起動です。再度起動する場合はsudo /etc/init.d/logmein-hamachi startで起動すると良いでしょう。

自動起動設定

イチイチコマンド毎回打つのがだるい!自動起動を設定すればそんな鬱陶しい手間が省けます。rc.local(コマンド起動時実行のためのファイル)を編集、exit 0より手前に追加します。

$sudo vi /etc/rc.local
#追加はじめ
sleep 1
/etc/init.d/logmein-hamachi start
hamachi login
#追加おわり
exit 0

以上で終了です。

備考:BananaPiにもHamachiをインストールすることができました。ARM HFで問題ないかと。

Raspberry Pi Zeroのセットアップ

以前にRaspberry Pi Zeroをポチッたとお話しました。それが今日届いたのです!ふぁーーー。

【7/18】注文と出荷
【7/28】自宅に到着

イギリスからジャスト10日できました。ちなみに買ったサイトはPIMORONIです。それより中国に頼んでる荷物が来ない。イギリスより近いというのに…。

非常に小さい。メモリは下がセンチ、上がインチ。
重さも 8.7g と非常に軽い。

準備するもの

基本的にSSH接続で使うことを前提にします。実際キーボードや、miniHDMIは必要ないかもしれません。Zero買う人ってRaspberry Pi 2や3持ってそうですから。持ってなかったらキーボードやminiHDMIは必要になります。

USB充電器

関連

Amazon.co.jp – Anker 24W 2ポート USB急速充電器 【急速充電 / iPhone&Android対応 / 折畳式プラグ搭載】 (ホワイト) A2021121

Amazon.co.jp – 急速充電器 スマホ充電器 5V 2A 10W タブレット充電器 AC アダプター USB 式 iPhone 6 plus XPERIA z3 z4 GALAXY S6 edge AQUOS zeta Andoroid アイフォン アンドロイド エクスペリア ギャラクシー アクオス 各種 スマートフォン 対応 モバイルバッテリー 充電 モバイル iphone6s plus

OTGケーブル

関連

Amazon.co.jp – 【ノーブランド品】OTGケーブル タブレットPC用 ミニ micro (micro OTGケーブル)

MicroUSB

関連

Amazon.co.jp – ルートアール スマートフォン・タブレットPC対応 超急速充電microUSBケーブル 1.0m (取説付) RC-UHCM10R2

Amazon.co.jp – ルートアール スマートフォン・タブレットPC対応 超急速充電microUSBケーブル 2.0m+0.2m RC-UHCM2002R

MicroSD

関連

Amazon.co.jp – 東芝 Toshiba 超高速U3 4K対応 microSDHC 32GB + SD アダプター + 保管用クリアケース [バルク品 ]

Amazon.co.jp – 【Amazon.co.jp限定】Transcend microSDHCカード 32GB Class10 UHS-I対応 400× (無期限保証) Newニンテンドー3DS 動作確認済 TS32GUSDU1PE (FFP)

無線LANアダプタ

関連

Amazon.co.jp – BUFFALO 11n対応 11g/b 無線LAN子機 親機-子機デュアルモード対応モデル WLI-UC-GNM2

セットアップする

Raspberry Pi 2を使ってセットアップした。セットアップ方法はむかーしに書いた記事を使えばいいよ。Raspberry Pi 2でインストールやアップデートをしてからRaspberry Pi ZeroにMicroSDを差し込めばOK。miniHDMIやキーボード、マウスを使わずに済む。

こんな感じですっきりコンパクト

インターネット側にはPingが通るが、ローカルネットワーク側にPingが通らない事象解決

はじめに突っ込みたくなるほど長いタイトル。さて筆者はなにを言いたいのだろうか。手っ取り早い話図解すれば明解である。

network_0001.png
図解:構成図

上図は構成図である。端末AからWAN側のGoogle DNS (インターネット)に向けてPingを発信、端末AからLAN内の端末Bに向けてPingを発信。

Network_0002.png
図解:端末Aを中心とした場合

端末AからWAN側であるGoogle DNS (インターネット)にはPingが到達するのに対して、LAN側である端末BにはPingが到達しない。

Network_0003.png
図解;端末Bを中心とした場合

また端末BからWAN側であるGoogle DNS (インターネット)にはPingが到達するのに対して、LAN側である端末AにはPingが到達しない。

つまり、原因として考えられるのは以下の4項である。

1.端末Aの設定がおかしい。
2.端末Bの設定がおかしい。
3.ルーターの設定がおかしい。
4.アクセスポイント (ハブ)がおかしい。

単項的なものであるかまたは複項的なものと考える。結論を先に、深く考えることはなく問題解決は至って簡単なのである。すべての機器を再起動すると何事もなかったかのようにPingが通る。『え?そんなバナナ!』と思ってるかもしれないが事実筆者はこれで解決しちまったのである。ちなみに具体的な問題はよくわからない。

端末Aが問題である場合は端末Aを再起動すると解決するかもしれない。一つ一つ再起動して問題の機器を探すというのもアリだ。

でも中には解決しない場合がある。その場合端末のファイアーウォールに問題があるか、ルーターの設定に問題があるか、また両方に問題があるかであると考えられる。

問題解決:以上

さて、ここから下は読まなくてもいいかもしれない。筆者自身が自信を持ってそう断言する。

お気づきの方は多分、『端末Cを用意すれば全体図が見えるんじゃね?』って思ってるかもしれない。しかし、筆者もその時焦っていた…。なぜならWindowsからRaspberry PiにSSH接続できなくて参っていたからだ。

NET2.png
関係図

ローカル内 (LAN内)にあるWindowsとRaspberry PiがなぜSSH接続出来ないのかずっと悩んでいた。WindowsからRaspberry PiにPingを出してみると到達しない。

記憶から原因を考えてみた。

【07/21 17:00】
YAMAHAルータの設定を弄る。
【07/21 17:30】
そのまま帰宅。
【07/22 09:00】
『SSH接続できないよぉー、Pingも通らないよー』と悩む。

原因はもしかしたらYAMAHAルーターの設定を弄くったからかもしれない…。ちなみにRTX1000 (画像にはWANと書いてるが実はローカルルーター)を使ってた。セーブしてなかったから再起動で初期値に戻った?たぶんこれからもしれない。

原因は自分?:以上

ガイガーカウンターをRaspberry Piで運用

前回組み立てたRadiation Detector DIY Kit Arduino Compatible Ver. 2.01を使ってRaspberry Piに読み込ませることにしました。

serial.png
よく解る図解

CPMってなんだ?って話ですが、カウント毎秒 (= Counts per Minute)で、GM管に1分間あたりに入ってきた放射線数を計測するもの。もしもシーベルト (Sievert)に換算したいならGM管の性能を考慮する必要があります。

ぶっちゃけ放射線について無知なので今回はCPMの取得までで終わらせたい。ArduinoとRaspberry Piのシリアル通信は初めてだったが、Pythonで意外とあっさり接続出来てしまった・・・(笑)

gc_arduino
CPM取得プログラム

まだまだ未完成な部分もあるけどこれでいいかな。ソースコードを載せたいところだが、力技的な部分が多くあるので載せない…(汗)

ちなみにKitとRaspberry Piを直接つなげることもできるみたいで、試したが上手くいかないのでやめた。

以上

UKショップからRaspberry Pi Zeroポチッた話

実は前々から気になっていたRaspberry Pi Zeroを遂に買っちゃいました。といってもまだ手元に届いてはいませんが…。

Raspberry Pi – Raspberry Pi Zero

在庫が唯一あったPIMORONIというイギリスにあるオンラインショップから購入しました。読み方はパイモロニかな?

PIMORONI – Raspberry Pi Zero – Max 1 Pi Zero Per Customer!

実は複数台欲しかったのに…。1台しか買えないようです。Raspberry Pi Zeroの価格は4 GBPです。でも決済終えたら3.33 GBPになってました。うーん、なんでだろ。まぁ送料は5.5 GBPですけどね。合わせて8.83 GBPです。日本円で1290円(2016年7月18日現在 PayPal [1 JPY = 0.00684675 GBP])で支払いました。まぁ日本で買うよりはうーと安い!日本じゃ普通に3000円以上というボッタクリ価格で売ってる…。普通にRaspberry Pi 3買いますわ!

配送方法についてですが国際標準を選択。5-7営業で届くらしい。たぶんEMSかな?他にもUPSだったりと選択肢があった。1週間で届くなら待てる!中国の発送からお届けよりも速いぞ!

届いたらレビューしますんで。よろしくです。

以上

関連記事:後日談

Raspberry Pi Zeroのセットアップ