Raspberry Piに手を出してみた

眠れないのでブログでも。

いたってフツーのLAMP環境での開発ばかりしてきた自分ですが、
最近は仕事の関係でIoTに染まっております。

ということで、Raspberry Piに手を出してみました。
まずはラズパイ3。
公式の7インチタッチディスプレイを使ってPiPadを作ってみました。

プログラム書いたりハード追加したり、色々やりたいことはあるんですが
まずはPiPad動いたので、ラズパイ3は一旦放置。

まぁ、普通にRaspbian入れたりセットアップしたり、なんてものは
検索してくれば文献腐る程出てくるので、ここでは割愛。

で、次のステップとして、ラズパイゼロとIoT pHATを買ってみました。
(とはいえ船便なので着くのは多分11月末)

IoT用のルータってくっそ高いんすよね。
ラズパイゼロとIoT pHATなら、3000円ちょいで購入できたし
サイズも超ちっちゃいし、ある程度の稼働が見込めるなら
全然アリだと思うわけですよ。

100均とかで売ってる小さな缶ケース?薬入れ?みたいのに入れれば
放熱も考慮したものが作れそうかもと思うし、
WiFi+BluetoothだけのIoTモバイルルータ、OSもCLIで動かせば負荷低いだろうし。
悪くはないアイディアだと思うんだけどなぁ。

…とはいえRAM512MBなんで、そこが若干不安。
本当はRAM DISKに全部プログラム書き込んで動かしたいんだよね、破損の心配も減るし。
MicroSDだと多分数年で破損しちゃうからね。

ラズパイ3ならRAM1GBあるし、最悪そっちでもアリかなーとは思ってます。
国内で簡単に手に入るしね。
まぁこのへんは、ラズパイゼロが来るまでプログラム書いてみて考えればいいかな。

ラズパイ3に関しては、某社の某機械とスペック似てるんで、
某機械用のノウハウが流用できる気もしてるんだよね。

まぁ近況報告も兼ねて。こんな感じです。

さくらのVPSをCentOS7にしようとしてくっそハマった件

CentOS6と7、やっぱり結構違うなあ、と。

もともとCentOS6で動いていたこのlaboサーバ。
時代に追いつくために思い切ってCentOS7にしてみた。

【バックアップ】
せっかくOSを上げるので、最低限必要なものだけ持っていくことに。
qmail(vpopmail)
→ postfixにして最初から設定しなおすので必要なし。
apache
→ 2.2系から2.4系になるのでこれも設定仕直し、基本必要ないのだが
2.4系で断念したら2.2系に戻すために念のために各種コンフィグバックアップ。
そして各サイトの公開ディレクトリをtar czvfで固める。
別にgzipでもいいけど、tarコマンドを手が覚えてるうちはtarでいいかな、と。w
bind
→セキュリティ追いかけるの面倒だし、さくらのDNS機能を使うように切り替えたいので破棄。
mysql
→MariaDBに変えるので、各DBだけdump。privilegesはgrant文を再発行するので不必要。
いずれはmysql5.7系とMariaDB10系をサーバ内で共存させたいなー、程度で。
php
→5系から7系に上げるのでこちらも再度php.ini検討。バックアップせず。
svn
→制作物のソースはローカルにあるので破棄、いずれ必要ならgithubで作り直す

【インストール】
カスタムインストールでCentOS7。
マニュアルにもあるので詳細は省略。
最小構成で入れたらwgetも入ってなくて序盤苦しみまくったのは内緒。

【設定】
◇SELinuxを切る
今はまだわからないので、いずれ習得したら使いたいな、と。

$ set enforce 0
$ vi etc/sysconfig/selinux

#SELINUX=enforcing
SELINUX=disabled

◇firewalldを設定
こいつで超絶ハマった。これが書いてある参考サイトがどこにもなかったからな!w
iptablesじゃなくてfirewalldなのね、もうこれは絶対に忘れないと思うwww
22番ポートは開いてるのに80番開いてないから本当に1週間苦しんだわ。

# どこのポートが開いてるか確認
$ firewall-cmd –list-all
# http(80/TCP)を開ける
$ firewall-cmd –add-service=http –permanent
# 8080/TCPを開ける(いずれapacheとnginxを80と8080で共用したい)
$ firewall-cmd –add-port=8080/tcp –permanent
# firewalld再起動
$ systemctl restart firewalld

◇apache2.4、PHP7.0.6、MariaDB10、nginx1.10を入れる
ここはどんな文献でも出てくるのでサラっと。

# apache2.4
$ yum install httpd
$ systemctl start httpd
$ systemctl enable httpd

# PHP7.0.6
# nginxでphp-fpmを使いたいので、そちらもついでに。
$ rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ yum –enablerepo=remi-php70 install php php-fpm php-devel php-mysql php-mbstring
$ systemctl start php-fpm
$ systemctl enable php-fpm

# MariaDB
$ yum install mariadb-devel mariadb-client mariadb-server
$ systemctl start mariadb
$ systemctl enable mariadb
# rootのパス設定したり不要なものを消したりetc…
$ mysql_secure_installation

# nginx
$ yum install nginx
$ systemctl start nginx
$ systemctl enable nginx

◇リストア
DBはバックアップから復元。
各サイトのデータは適当にディレクトリを用意してtar xzvfで解凍。
apacheはVirtualhostの設定、PHPはphp.iniにdate.timezone=”Asia/tokyo”だけ記述。

とりあえずこれでapache、PHP、mariaDB側は問題なし。
php-fpmとnginxについては、動いたらまた記述しようかと。
UNIXドメインソケットというのがよくわからぬので、まだ進んでないので。

あ、あとpostfixもね。まだそこまで手が追いつかないんで。w

MacにMariaDB入れようと思ってくっそハマった件

そもそもMariaDBだろうがMySQLだろうがbrewで簡単にいくでしょ、と思ったら
とんでもなくめんどくさかった。

$ brew update

この時点でまずくっそめんどくさかった。
エラー出まくり。
たぶんOSのメジャーアップデートをしたのが原因っぽかった。
この時点で発狂して、brew自体を入れ直す。

$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)”
$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
$ brew update

これでとりあえず進める。

$ brew remove mysql
$ brew install mariadb
$ unset TMPDIR
$ mysql_install_db

はいここでまたエラー。
mysqlを消した時に残っているdataディレクトリやらmy.cnfやらが邪魔をする。

$ sudo rm -rf /usr/local/var/mysql
$ rm -f /etc/my.cnf
$ unset TMPDIR
$ mysql_install_db

これでやっとできた。

$ mysql.server start

無事に起動。
ついでにセキュリティ対策も。

$ mysql_secure_installation

最後に起動時に自動起動するように設定。

$ cp /usr/local/Cellar/mariadb/10.1.11/homebrew.mxcl.mariadb.plist ~/Library/LaunchAgents/

ここまでくるのに数時間…いやぁつらかった。
PHP7を入れるのは明日にしようorz

kohanaのauthモジュールでくっそハマった件

諸事情によりkohanaのバージョンを3.2から3.3.2(最終版)に上げて、
その誤差を吸収していたら、むちゃむちゃ大きくハマった。

作ったCMS管理画面にログインできなくなった。

原因を先に書くと、ディレクトリ名やファイル名を変更した際に
ちゃんとクラス名を同時に書き換えなかったせいで、継承が狂って
「こんなクラスないよ?」って言われていただけなんだけれど。

PHP Fatal error:  Class ‘XXXXXXXXXXXXXXX’ not found

みたいなエラーをちゃんと吐いてくれればいいのに、

Error reading session data.

としか出てこない。

おまけにこれでググるとえらいたくさん文献が見つかる。
発狂寸前だった。

で、とりあえずどこかのページで見つけた方法にたどり着いたわけだが…

bootstrap.php内で、kohana::init()としている中で

‘errors’ => false

と追記するとちゃんとapache側にエラーログが出るようになるので、
そこで始めて上記のPHP Fatal errorとお目見えできる。

これ多分今後も重要。

既にkohana phpが終わっていた事も知らなかった件について

備忘録。

そもそも本州を離れて九州にいる時点で情報収集能力はガタ落ちしているわけだが、
それでもまさか自分がメインとして使っていたPHPフレームワークの開発が終了していることまで
知らなかったとは…。

もうろくしましたね。

http://forum.kohanaframework.org/discussion/12509/final-releases-of-kohana-beginning-of-ohanzee
どうやらコミュニティ内で、2014/4/9に終了宣言されていた模様。
今後も遺産として…みたいな事が書かれているようですね(英語は得意ではない。)

PHPが5.3の壁を超える時、kohanaは終わるんでしょう。
その終わった先は…何で追えばいいんでしょうね。
まさか自分が廃業するわけにもいきませんし。

FuelPHPに移行するのが一番賢いのかもしれませんが…
というか時代は既にJavaのものなのかもしれませんが…

さて。これで今の案件に有用な情報がほぼ入ってこないのが確定した。
自力でなんとかするしかないのか。
困った困った。

久しぶりに開発環境を触ってみたら…

いやぁハマったハマった(汗

開発環境(macbook)のmysqlが自動でアップデートされていたようで
(homebrewの設定どうしてあったか覚えてないなぁ…まぁいいや)

その関連でmysql_upgradeかけずに動かしていたわけですが…

エラーでまくってました。
直そうとしたらmysqlが起動もしなくなりました。

原因はエラーログの所有者が勝手に_mysqlに変わっていたことだったので
さっさと自分に所有者を変更して再起動で助かりました。

mysql_upgradeをかけてwarningを1つずつつぶしていますが…

timestampの変更やばいですね。
結構手軽に使っていたので、意識してcreate文を作らないと。

また勝手に自動更新されて上手く動かなくなるパターンなのが見え見えなのでw

やっとfacebookとwordpressが繋がった。

私的備忘録としてwordpressでlaboやってて、
生存報告的にfacebookもやっていて、
繋がれば楽なのにと思っていたら、
wordpressにfacebook公式のプラグインがあるではないか。

…と思って設定していたが、全くうまく動かなかった。
仕方がないので色々探して、やっと設定できた。

http://wandonoweb.com/facebook-for-wordpressの、social-publishingの設定がうまくいかない方、あな/

というか、このプラグイン自体が凄いスピードでバージョンアップしているようで、
ネットで記事を探しても古いものしか見つからない。
相当探して、やっと見つけて、やっと設定できたよ…orz

簡単に画面遷移図が作りたい。

ということで模索開始。

blockdiagなるものを入れてみることに。
公式?:http://blockdiag.com/ja/blockdiag/introduction.html

前提条件としてpython2.4以降(3.xは未対応)とか色々あるらしい。
とりあえず当方の環境ではpythonから入れないといけないが、
下記でうまくいった…はず。
※色々あって当方はfreetype2を自力で入れているから楽だったのです。
freetype2を入れてない人はbrewのformulaを書いてfreetype2を入れるのが
良いのかもしれません。

brew install python
sudo easy_install pil
sudo easy_install blockdiag

で、インストールが終わったらテキスト形式で簡単に記載して、

/usr/local/share/python/blockdiag sample.diag

とかやってやれば、simple.diagと同じパスにsimple.pngとして画面遷移図になってくれるみたい。

画面遷移図の書き方も非常に簡単で、

blockdiag{ a -> b;}

みたいな書き方をするだけ。
書式にかなり惹かれた。

あとは、毎回/usr/local/share/python/blockdiagとか書くのが面倒なので、
.bashrcに下記のように追記してやって、ターミナル再起動すれば話が早くなる。

# for python(homebrew)
export PATH=/usr/local/share/python:$PATH

これで、さっきの長いコマンドが

blockdiag sample.diag

で動くようになった。

macでPHP開発環境をつくる 細かい設定

色々とモジュールやら何やらは入ったが、じゃあ実際開発…となると
更に色々設定しないといけないので、そのあたり。

・hosts
hostsは

sudo vi /private/etc/hosts

で書き加えた後に

sudo dscacheutil -flushcache

でdnsのcacheをクリア。
その後ping飛ばして、実際に動くかどうかチェックという感じでしょうか。

macでmkpasswd

brew install expect

こんだけ。
私的には、
mkpasswd -2 -l 12
とかって感じでよく使ってた記憶がありますね。