2017/07/21

Laravel 5.1 の quickstart を Laravel 5.4 で実行する

Laravel には tutorial 的な quickstart があるのですが、ドキュメントは 5.1 までしか提供されていない。
5.4 の tutorial 的なものは laracast という形で動画で提供されています。
動画を見てコードを書くのが性に合わなかったので 5.4 で 5.1 の quickstart をやってみたログ。
ちなみに作るものは所謂 TODO リストというやつで、よくチュートリアルで作るやつですね。
index, create, delete があるだけ、って感じ。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • PHP 5.6.30
  • Laravel 5.4.22
  • Apache httpd 2.4.26


5.1 -> 5.4 変更点

具体的な変更点は実は1つしかなくて、Routing の `app/Http/routes.php` の内容を `routes/web.php` に置くだけ。
どうやら Laravel 5.4.22 は api/web/console/channel ごとに routes を分けられる構成になっているっぽい。
書いてて思ったけれど割とモダン。
OR-mapper も extends するだけて使えるタイプっぽいし。
個人的には Routing 部分に処理が出てきたりするのは Sinatra っぽいな、と感じました。
あと html template の名前が blade でかっこ良い。が、宿命的に書きづらい。
ということで作った Repository はこちら。5.4 環境でも何ら問題無く動きます。



Apache 2.4.26 で動かす

Apache 2.4.26 で動かすためには `public` を DocumentRoot にする必要があります。
例えば
DocumentRoot "/home/atton/quickstart/public/"
<Directory "/home/atton/quickstart/public/">
とか。 permission もきちと整えておくこと。
あと DirectoryIndex は index.php にしておいた方が良いかも。
それと AllowOverride All と Requite all granted を書いておくこと必要があります。
加えて LoadModule rewrite_module modules/mod_rewrite.so をコメントインしておく。
.htaccess とかは Laravel が用意してくれるので問題無し。

さらに言えば、使うDatabase が MySQL なら MySQL の PDO が必要なので ./configure の段階で
  • ./configure --with-openssl --with-zlib --enable-mbstring --enable-zip --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
とかしておく必要があります。つまり前記事の段階ではオプションが足りていなかったってことですね。
ということで 5.1 の quickstart を 5.4 で動かしたログでした。


参考

2017/07/18

ActiveLDAP が Timeout Module を使っていた

かなり前の記事になりますが、ActiveLDAP が Process.fork を使っているせいで PostgreSQL との相性が悪いバグがありました。
具体的には Timeout を指定すると fork したプロセスを使って Timeout を確認しているせいで pg の connection を使いはたしてしまう、というのが原因でした。

本当に具合が悪い時は Ruby がコアダンプを吐いて死ぬ時もあったので、直してしまってRuby会議2017のLTネタ にでもしようと思って調査を続行。
最新版では再現しないのでソースを読んでみたらそもそも Process.fork をしていない。
Timeout というものに block を渡している
なんと Timeout なる Module があるようで、それに時間の処理を一任しているようです。

Timeout Module 知らなかった。
Timeout の処理って面倒なので自分が次に Timeout の処理を書くことがあったら使おうと思いましたまる。
ソース読むのはおもしろかったけれどネタが無くなってしまったな。どうしようかな。

2017/07/13

Scientific Linux 7 に NeoVim を入れる

これまたタイトル通りの作業ログ。
CheckHealth が通る NeoVim にプラグインを入れるまで。

環境

  • Scientific Linux release 7.3 (Nitrogen)
  • NeoVim 0.1.7


インストール方法

NeoVim 公式ドキュメントを見るとどうやら epel から入れられるっぽい?
  • # yum -y install epel-release
  • # curl -o /etc/yum.repos.d/dperson-neovim-epel-7.repo https://copr.fedorainfracloud.org/coprs/dperson/neovim/repo/epel-7/dperson-neovim-epel-7.repo
  • # yum install --enablerepo=epel jemalloc
  • # yum -y install neovim
で NeoVim 0.1.7 が入った。


CheckHealth を通す

どうせなので CheckHealth が通るように gem とかを入れる。
  • # yum --enablerepo=epel install -y python-neovim msgpack msgpack-devel ruby ruby-devel python2 python2-devel python34 python34-devel python34-pip
  • # gem install neovim
  • # easy_install pip
  • # pip install neovim
  • # pip3 install neovim
これで CheckHealth で怒られなくなった。


dein.vim を入れる

NeoVim に移った際にプラグインマネージャを dein に変更したのでそれのインストールも。公式の通り
  • $ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
  • $ sh ./installer.sh ~/.config/nvim
としておしまい。
あとは :call dein#install() として他のプラグインをインストールして環境構築完了、と。

2017/07/12

PHP 5.6.30 + Laravel 5.4 の環境を整える

タイトル通りな環境を作った時のログ。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • composer 1.4.2
  • PHP 5.6.30
  • Laravel 5.4


PHP の再ビルド

最初からネタバレ全開でいくと、前回入れたPHPでは Laravel は動きません。
openssl や zlib や mbstring や zip が必要らしい。なので正解な最小の config は
  • ./configure --with-openssl --with-zlib --enable-mbstring --enable-zip --with-apxs2=/usr/local/apache2/bin/apxs
っぽい。こいつで再 make + make install



Composer を入れる

Laravel 公式の Installation を見ると composer という package manager を使うと良いらしい。
書かれている通りに
  • $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  • $ php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
  • $ php composer-setup.php
  • $ php -r "unlink('composer-setup.php');"
とすると composer.phar なるファイルが直下にできる。
これが package manager の実行ファイルっぽい。
適当な場所に放置して大丈夫かと思っていたら /usr/local/bin とかに置くと良いっぽい。
  • # mv composer.phar /usr/local/bin/composer
これで package manager が入った。


Laravel を入れる

composer が入ったのであとは
  • $ composer global require "laravel/installer"
する。
ログに "Changed current directory to /home/atton/.config/composer" とか出ているので config は $HOME/.config/composer あたりに書かれるらしい。
その下を漁ってみると .config/composer/vendor/bin に laravel があるのを発見したので
  • export PATH=$HOME/.config/composer/vendor/bin:$PATH 
とかして PATH に追加。これで laravel が使えるようになった。試しに
  • $ laravel new blog
すると blog が生成されたので動いているっぽい。


参考

Apache Solr 6.6 を Scientific Linux 7.2 にインストールする

表題の通り。インストールしたログです。あとちょっと遊んだログ。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • Apache Solr 6.6


インストール

  • # yum install -y java
  • # wget http://ftp.jaist.ac.jp/pub/apache/lucene/solr/6.6.0/solr-6.6.0.tgz
  • # tar xzf solr-6.6.0.tgz
  • # solr-6.6.0/bin/install_solr_service.sh solr-6.6.0.tgz
でおしまい。service にも systemctl にも登録されている。便利。


チュートリアル

QuickStart が用意されているので遊んでみる。
xml とか json とかのデータを食わせることができて、それらを検索できるっぽいです。
  • # systemctl start solr
しておいて
  • $ /opt/solr/bin/solr create -c gettingstarted
とかでコレクションを作る。コレクションに情報を集約する感じかな。
ちなみに root で bin/solr create とかすると怒られる。
su - solr するとデータのディレクトリとかがあるので、ここにデータが入るのだろう。

QuickStart を参考に
  • /opt/solr/bin/post -c gettingstarted /opt/solr/docs
  • /opt/solr/bin/post -c gettingstarted example/exampledocs/*.xml
  • /opt/solr/bin/post -c gettingstarted example/exampledocs/books.json
  • /opt/solr/bin/post -c gettingstarted example/exampledocs/books.csv
とかでデータを食わせる。食わせたデータは RESTful に検索できるとのこと。

ということでいろいろと検索してみる。
  • $ curl "http://localhost:8983/solr/gettingstarted/select?indent=on&q=*:*&wt=json"
    • でとりあえず何にでもマッチするクエリを投げる
    • 検索は key:value ってフォーマットらしい
    • なので *:* はなんでもマッチする感じですね
  • $ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation"
    • で "foundation" を含むデータを探す。
    • 返ってくるデータの形式は json
    • たぶん json 以外にも対応している
  • $ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation&fl=id"
    • 返すフィールドを id のみに制限。
    • fl が field の略か。
とかとかいろいろあるらしい。

ブラウザからもアクセス可能でその場合はデフォルトだと 8983 番で listen している。
マルチバイト文字の扱いが地味に気になるがその辺りも対応しているのなら便利そうだ。
でも始めて聞いたな Solr 。界隈では有名なのだろうか。


参考

2017/07/07

Redis 3.2.x を ScientificLinux 7 に入れる

表題の通り。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • Redis: 3.2.9


インストール

  • # wget http://download.redis.io/releases/redis-3.2.9.tar.gz
  • # tar xzf redis-3.2.9.tar.gz
  • # cd redis-3.2.9
  • # cat INSTALL
    • see README とある
  • # make
    • いきなり make で良いらしい
    • あと make test してね、と
  • # make test
    • tcl が無いとテストしてくれないらしい。
  • # yum install -y tcl
  • # make test
    • 通った
  • # make install
    • /usr/local/bin/redis-server とかに入っている。
    • redis-cli が  client かな


systemd 管理下に置く

どうやら init.d 用のスクリプトはあるらしいが systemd の unit  は無いっぽい。
それはともあれ install_server.sh があるので設定くらいは置いて欲しいので実行


service は当然無いので abort したが /etc/redis/6397.conf とかは作ってくれた。
作られた conf を適当なところに置いて service ファイルを書く。

  • # mv /etc/redis/6397.conf /etc/redis.conf
  • # rm -rf /etc/redis
  • # vi /usr/lib/systemd/system/redis.service
  • # systemctl daemon-reload
  • # systemctl start redis
で動いた。
ちなみに --daemonize no を消すと起動してくれなかった。


参考

MySQL 5.7.x を rpm から入れる

タイトルの通り。MySQL 5.7 系の最新版を rpm から入れます。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • mysql-5.7.18


インストール方法

今回は結構シンプルで、公式 が rpm を提供しています。
今回必要なのは mysql-client と mysql-server なので、この二つとその依存先を入れます。
rpm -i した時に依存先が無いよって怒ってくるので、そのあたりを察すると良いです。
  • $ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
  • $ tar xf mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
  • # rpm -i mysql-community-common-5.7.18-1.el7.x86_64.rpm
  • # rpm -i mysql-community-libs-5.7.18-1.el7.x86_64.rpm
  • # rpm -i mysql-community-client-5.7.18-1.el7.x86_64.rpm
  • # rpm -i mysql-community-server-5.7.18-1.el7.x86_64.rpm
くらいで。


MySQL を使う

まずは起動。 systemd 登録とかしてくれるので楽だ。
  • # systemctl start mysql
公式によれば
  • # grep 'temporary password' /var/log/mysqld.log
すれば temporary password があるのでそれを使ってログインしろ、と
  • # mysql -u root -p
先程 grep したパスワードを入れてログイン。パスワード変更のために
  • mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'hogehoge';
とかする。結構パスワード強度に厳しい。
これで MySQL 5.7.x が使えるようになった。
チュートリアルとかも充実しているのでサポート強い。


参考

2017/07/06

php 5.x + apache httpd 2.4.x を make する

php 5.x 系の最新版と httpd 2.4.x 系の最新版を make したログ


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • Apache httpd 2.4.26
  • php 5.6.30



httpd 2.4.26 の make

  • # yum install -y wget apr apr-devel apr-util apr-util-devel gcc pcre pcre-devel perl perl-devel libtool libtool-devel systemd-devel
  • # wget http://ftp.tsukuba.wide.ad.jp/software/apache//httpd/httpd-2.4.26.tar.gz
  • # tar xzf httpd-2.4.26.tar.gz
  • # cd httpd-2.4.26
  • # ./configure --enable-rewrite
    • とりあえず rewrite くらいで。
    • 必要なものは ./configure --help にあるものから確認して追加していけば良い
  • # make
  • # make install
ちなみに /usr/local/apache2 の下に bin とかが入ります。


httpd を systemd 管理下に置く

このままだと起動するのが面倒なので systemd 経由で起動できるように。
この記事を参考に service を作る。
私は apr も apr-util も pcre も yum にあるものを作ったのでこんな感じ。


こいつで systemd に認識させてやるといつも通りの
  • # systemctl status httpd
  • # systemctl start httpd
とかできるようになります。

  • $ curl http://localhost
して It Works! が出たら httpd が動いています。



php 5.x を make する

  • # yum install -y libxml2 libxml2-devel
  • # wget http://jp2.php.net/get/php-5.6.30.tar.gz/from/this/mirror -O php-5.6.30.tar.gz
  • # tar xzf php-5.6.30.tar.gz
  • # cd php-5.6.30
  • # ./configure --with-apxs2=/usr/local/apache2/bin/apxs
    • ポイントはここ。
    • libphp5.so を作るために apx を指定します。
    • これを書いておくと httpd.conf で LoadModule できる場所に libphp5.so ができる。
  • # make
  • # make test
  • # make install
これで php が入りました。
/usr/local/apache2/modules/libphp5.so とかができているはずです。


httpd に php を認識させる

両方とも make できたのであとは設定。
httpd の DocumentRoot はデフォルトでは /usr/local/apache2/htdocs/ なので
  • # vi /usr/local/apache2/htdocs/hoge.php
    • <?php phpinfo() ?>
    • とか。
  • # vi /usr/local/apache2/conf/httpd.conf
    • LoadModule php5_module modules/libphp5.so
    • <FilesMatch \.php$>
    •     SetHandler application/x-httpd-php
    • </FilesMatch>
    • あたりを追記。
    • LoadModule は勝手に追記されてたりします。
  • # systemctl restart httpd
  • $ curl http://localhost/hoge.php
大量の html が流れてきたら php が動いています。
ブラウザからアクセスすると php の情報が見られるはずです。やったね。



参考

2017/07/05

rpm を tar.bz2 や .spec ファイルからビルドする

rpm ファイルをビルドする機会があったのでそのログ。


環境

  • Scientific Linux release 6.8 (Carbon)
  • rpmbuild 4.8.0(たぶん)
  • httpd 2.4.26
  • distcache 1.5.1


tar.gz ファイルから直接ビルドする

アーカイブ内部に *.spec ファイルがある場合は直接 rpmbuild で指定できます。
  • $ wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.26.tar.bz2
  • $ rpmbuild -tb httpd-2.4.26.tar.bz2
/root/rpmbuild/RPMS 以下に .rpm ファイルが作成されます。
アーカイブ指定の時は -tb オプション。


.spec ファイルからビルドする

アーカイブに *.spec が無かったりする場合もあります。
その場合は *.spec ファイルを作ってそれを指定してビルドします。
例えば distcache 1.5.1-1 の spec ファイルはこちらのブログ にサンプルがあります。
*.spec ファイルから rpm を作る場合は SOURCES に必要なソースを配置します。
  • $wget https://downloads.sourceforge.net/project/distcache/1.%20distcache-devel/1.5.1/distcache-1.5.1.tar.gz
  • $ mv distcache-1.5.1.tar.gz ~/rpmbuild/SOURCES/
  •  wget -O /root/rpmbuild/SOURCES/distcache-1.5.1.patch https://ja.osdn.net/users/matsuand/pf/LFScripts/scm/blobs/master/BLFS/patch/distcache-1.5.1.patch?export=raw
  • $ rpbuild -bb distcace.spec
スペックファイル指定の場合は -bb オプション。

rpm のインストール

rpm -i とか。消す時は rpm -e。
リストは rpm -aq とかなので rpm のオプションは結構素っ気無い感じ。


参考文献

2017/07/03

NeoVim に移行した

そろそろ NeoVim に移行したいなー、と思っていたので気合を入れて移行しました。


環境

  • macOS Sierra 10.12.5
  • NeoVim 0.2.0
  • Homebrew 1.2.3-121-gb5529084
  • Homebrew/homebrew-core (git revision 72126; last commit 2017-07-02)
  • tmux 2.5 + EastAsianAmbiguous Patch


やったこと

まずは neovim の install 。
  • brew tap neovim/neovim
  • brew install neovim
くらいで。

その後は NeoVim の CheckHealth が通るようにいろいろと。
  • tmux.conf の default-terminal を screen-256-color に変更
  • gem install neovim
  • python2 を入れて easy_install neovim
  • python3 を入れて pip3 install neovim
とかとか。自己診断機能便利。

次に .vimrc の移動。
neovim はデフォルトで ~/.config/nvim/init.vim を読みにいくのでそこに元の .vimrc を配置。
.vimrc は source ~/.config/nvim/init.vim を見るようにした。
それからプラグインの変更。
  • NeoBundle から dein へ
  • neocomplete から deoplete へ
  • Unite から Denite へ
Unite 以外はそんなに問題無く移行できました。
Unide は file_rec のオプションとか grep のオプションとかを denite 用に書き直す。
あとは自作していた unite command を denite に対応させる。
help が充実していてありがたいですね。流石は暗黒美無王さん。

とかなんとかしていたgitのログはこの辺からこの辺までかな。


まとめ

移行にかかった時間は合計して丸一日くらい?
file_rec が超高速になったのでうれしい。
Unite とちょっと使い勝手が違うけれど、その辺りも変更するオプションがありそう。
help の example が大変ありがたかった。
あと先人の知恵は貴重だった。質問に高速で返答が来るのはありがたい。

ということで Vim から NeoVim へと移行しました。