CentOS 7 に Crowi をインストールする
手元の CentOS 7 に Markdown で書ける Wiki「Crowi」をインストールしてみました。
Crowi
http://site.crowi.wiki/
crowi/crowi: Crowi - Wiki
https://github.com/crowi/crowi
Node.js のインストール
Crowi は Node.js 製なので、まずは Node.js をインストールします。
Github の Dependencies に「Node.js (4.x)」とあったので 4 系を入れました。
# curl -sL https://rpm.nodesource.com/setup_4.x | bash -
Node.js をインストールします。
また、 native addon 用にビルド用ツールもインストールしました。
# yum install -y nodejs gcc-c++ make
4.7.0 が入りました。
# node -v
v4.7.0
MongoDB のインストール
# vi /etc/yum.repos.d/mongodb.repo
内容は以下。
[mongodb] name=MongoDB repo baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/ gpgcheck=0 enabled=0
インストールします。
# yum --enablerepo=mongodb install -y mongodb-org
サーバを起動して接続。
# systemctl start mongod # mongo
以下のバージョンがインストールされました。
> db.version() 2.6.12
Crowi 用の DB を作成します。
ここでは DB 名は crowidb としました。
> use crowidb
switched to db crowidb
続いてユーザを作成します。
ここでは簡単のため、ユーザ名「crowi」パスワード「password」としました。
実際に構築される際にはもっと複雑で適切な値を設定してください。
> db.createUser({user: "crowi", pwd: "password", roles: [{role: "readWrite", db: "crowidb"}]}) Successfully added user: { "user" : "crowi", "roles" : [ { "role" : "readWrite", "db" : "crowidb" } ] }
Redis のインストール
EPEL からインストールします。
# rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7 # yum install -y http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm # yum --enablerepo=epel install -y redis
インストールしたらサービスを起動。
# systemctl start redis
自動起動設定も有効にしておきます。
# systemctl enable redis
接続確認してみます。
# redis-cli -h localhost INFO Server # Server redis_version:2.8.19 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:c0359e7aa3798aa2 redis_mode:standalone os:Linux 3.10.0-229.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.8.3 process_id:11369 run_id:fa057241b1600d0779010d71588fb19090a42b6b tcp_port:6379 uptime_in_seconds:149 uptime_in_days:0 hz:10 lru_clock:6192911 config_file:/etc/redis.conf
問題なさそうです。
Elasticsearch のインストール
まずは Java をインストールします。
# yum install -y java-1.8.0
yum リポジトリからインストールするため、GPG Key をインストールします。
# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
リポジトリ定義ファイルを作成。
# vi /etc/yum.repos.d/elasticsearch.repo
内容は以下。
[elasticsearch-2.x] name=Elasticsearch repository for 2.x packages baseurl=https://packages.elastic.co/elasticsearch/2.x/centos gpgcheck=1 gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch enabled=0
インストール、起動、自動起動設定の有効化を行います。
# yum --enablerepo=elasticsearch-2.x install -y elasticsearch # systemctl start elasticsearch # systemctl enable elasticsearch
日本語に対応するため、analysis-kuromoji をインストールします。
# /usr/share/elasticsearch/bin/plugin install analysis-kuromoji
elasticsearch を再起動し、プラグインが読み込まれている事を確認します。
# systemctl restart elasticsearch # curl -X GET 'http://localhost:9200/_nodes/plugins?pretty' { "cluster_name" : "elasticsearch", "nodes" : { "5u4vcPnrQhW4pDLRXRVulA" : { "name" : "Wild Child", "transport_address" : "127.0.0.1:9300", "host" : "127.0.0.1", "ip" : "127.0.0.1", "version" : "2.4.3", "build" : "d38a34e", "http_address" : "127.0.0.1:9200", "plugins" : [ { "name" : "analysis-kuromoji", "version" : "2.4.3", "description" : "The Japanese (kuromoji) Analysis plugin integrates Lucene kuromoji analysis module into elasticsearch.", "jvm" : true, "classname" : "org.elasticsearch.plugin.analysis.kuromoji.AnalysisKuromojiPlugin", "isolated" : true, "site" : false } ], ・ ・ ・
Crowi のインストール
これでやっと必要な環境が揃ったので、 Crowi のセットアップを進めて行きます。
まずは git と krb5-devel をインストール。
# yum install -y git krb5-devel
アプリケーション配置用ディレクトリを作成します。
ここでは「/var/apps」にしました。
# mkdir /var/apps && cd /var/apps/
crowi を Github から clone して v1.5.2 タグをチェックアウトします。
# git clone https://github.com/crowi/crowi.git && cd crowi/ # git checkout refs/tags/v1.5.2
npm install を実行します。
ここが結構時間がかかります。
# npm install
CSS, JS のビルドを実行。
画面にアクセスしてデザインが崩れている場合はこれが抜けている可能性が高いです。
# npm run build
systemd で自動起動できるようにするため、service ファイルを作成します。
# vi /etc/systemd/system/crowi.service
内容は以下のようになります。
「WorkingDirectory」は先程 crowi を配置したディレクトリ。
[Unit] Description=Crowi After=network.target mongod.service [Service] WorkingDirectory=/var/apps/crowi EnvironmentFile=/etc/systemd/system/crowi.conf ExecStart=/usr/bin/node app.js [Install] WantedBy=multi-user.target
パスワード seed に使うためにランダム文字列を生成します。
ここでは openssl コマンドを使って以下のようにしました。
この値をメモっておきます。
# openssl rand -base64 128 | head -1
t/yi260BoYViSDiamTzwMOxmV4cuSSkude1X703AnPgpIZDdRTsAJoCPET5pxD5L
service 起動時の環境変数設定ファイルを作成します。
# vi /etc/systemd/system/crowi.conf
内容は以下のようになります。
先程メモった値を「PASSWORD_SEED」に指定しています。
PORT=3000 NODE_ENV=production MONGO_URI="mongodb://crowi:password@localhost/crowidb" REDIS_URL="redis://localhost:6379" ELASTICSEARCH_URI="http://localhost:9200" PASSWORD_SEED="t/yi260BoYViSDiamTzwMOxmV4cuSSkude1X703AnPgpIZDdRTsAJoCPET5pxD5L" FILE_UPLOAD=local
これでインストールは完了したので、crowi を起動します。
# systemctl start crowi
念のためサービスのステータスを確認。
# systemctl status crowi ● crowi.service - Crowi Loaded: loaded (/etc/systemd/system/crowi.service; enabled; vendor preset: disabled) Active: active (running) since 土 2016-12-24 23:24:46 JST; 1s ago Main PID: 11621 (node) CGroup: /system.slice/crowi.service mq11621 /usr/bin/node app.js
問題なく起動したようなので自動起動設定を有効化します。
# systemctl enable crowi # systemctl is-enabled crowi enabled
これでブラウザから対象サーバの 3000 番ポートにアクセスすると、以下のような管理者登録画面が表示されます。
ユーザを作成しログインした後は以下のような感じです。
まだちょっとしか触っていませんが、見た目も綺麗だしシンプルで使いやすいし、必要な機能も一通り揃っているのでかなりいい感じです。
個人的には記事を Markdown でエクスポートする機能が付いていると嬉しかったんですが、それはないようでした。
まぁ MongoDB から直接エクスポートすればいいのか・・・。
使った感じは Qiita Team と似ていると思いました。
Qiita Team は確か結構いい値段するんで、自前で構築するのが嫌でなければこっちの方が気軽に導入できていいかも。
参考サイト
Markdownで書けるWiki - Crowi - Qiita
http://qiita.com/nullsnet/items/a6e69e44087339127b35#crowi-1
Crowiで検索を有効化する(CentOS 6.8) - Qiita
http://qiita.com/oshuya/items/05883de5cc275d87a7b8
Qiita に書いた記事をエクスポートするツールを作ってみた
会社で使っている Qiita Team に投稿した記事を画像ファイルも一緒にエクスポートしたくて書いたスクリプトがあったのですが、せっかくなのでコードを整理して gem にして公開してみました。
https://rubygems.org/gems/qiita-export
以下でインストールできます。
% gem install qiita-export
使い方は以下のような感じです。
# 普通の Qiita の方の記事 % qiita-export -Uakishin -i -o ./outputdir # team の記事 % qiita-export -texample -Uakishin -i -a <API Token> -o ./outputdir
ついでに Mac 版 Kobito の SQLite からエクスポートできる機能もつけてみました。
% qiita-export -k -o ./outputdir
あと毎回全部オプション指定するのはちょっと面倒だったので、$HOME 直下か、実行ディレクトリ直下に .qiita-exportrc というファイルがあればその中のオプションを読み取るようになってます。
Kobito がかなりよく出来ているので余り必要になることは無いかと思いますが良かったら使ってみてください。
ngx_set_misc モジュールを組み込んだ Nginx の RPM を作成する
Nginx に URI エンコード&デコードや Base64 エンコード&デコードなどの機能を追加する ngx_set_misc モジュールを組み込んだ RPM を作成してみたのでメモ。
Set Misc | NGINX
http://mogile.web.fc2.com/nginx_wiki/modules/set_misc.html
openresty/set-misc-nginx-module
https://github.com/openresty/set-misc-nginx-module
素直に OpenResty 使えば?という声が聞こえてきそうな気もしますが、ここでは敢えて公式の SRPM に組み込んでみました。
環境は CentOS 7.1 x86_64 です。
# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) # uname -a Linux centos7-test01 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
RPM 作成環境の構築
まずは RPM 作成環境の構築です。
必要なパッケージをインストール。
$ su -
# yum install -y gcc rpmdevtools redhat-rpm-config
RPM 作成用ユーザを追加。
# useradd rpmdevel # passwd rpmdevel
作成したユーザになって rpmdev-setuptree コマンドを実行。
# su - rpmdevel
$ rpmdev-setuptree
以下のディレクトリと設定ファイルが作成されました。
$ ls -ld ~/rpmbuild/ drwxrwxr-x. 7 rpmdevel rpmdevel 67 12月 20 09:38 /home/rpmdevel/rpmbuild/ $ ls -la ~/.rpmmacros -rw-rw-r--. 1 rpmdevel rpmdevel 620 12月 20 09:38 /home/rpmdevel/.rpmmacros
これで RPM 作成の準備は完了です。
Nginx のビルド
Nginx 公式のCentOS 用 SRPM は以下から辿っていくとダウンロードできます。
http://nginx.org/packages/centos/
CentOS 7 用は以下。
http://nginx.org/packages/centos/7/SRPMS/nginx-1.8.0-1.el7.ngx.src.rpm
RPM 作成用ユーザで SRPM を取得してインストールします。
$ rpm -ivh http://nginx.org/packages/centos/7/SRPMS/nginx-1.8.0-1.el7.ngx.src.rpm
SRPM をインストールしたら「~rpmbuild/SPECS/nginx.spec」内の「BuildRequires」の部分を確認し、一旦 root になって必要なパッケージをインストールします。
$ su -
# yum install -y openssl-devel zlib-devel pcre-devel
再度 RPM 作成用ユーザに戻り、ngx_set_misc モジュールをダウンロードして展開します。
# su - rpmdevel $ wget https://github.com/openresty/set-misc-nginx-module/archive/v0.29.tar.gz $ tar xzf v0.29.tar.gz
モジュールのビルドには ngx_devel_kit も必要なのでこちらもダウンロードして展開。
$ wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz $ tar xzf v0.2.19.tar.gz
それぞれ展開後のパスを確認しておきます。
$ ls -ld /home/rpmdevel/set-misc-nginx-module-0.29/ drwxrwxr-x. 6 rpmdevel rpmdevel 4096 6月 22 22:08 /home/rpmdevel/set-misc-nginx-module-0.29/ $ ls -ld /home/rpmdevel/ngx_devel_kit-0.2.19/ drwxrwxr-x. 9 rpmdevel rpmdevel 4096 9月 26 2013 /home/rpmdevel/ngx_devel_kit-0.2.19/
SRPM に含まれていた SPEC ファイルを編集。
$ vi ~/rpmbuild/SPECS/nginx.spec
「./configure」のところに以下のように「--add-module」を使って先ほど展開した ngx_devel_kit と ngx_set_misc モジュールのパスを指定します。
--add-module=/home/rpmdevel/ngx_devel_kit-0.2.19 \ --add-module=/home/rpmdevel/set-misc-nginx-module-0.29 \
nginx.spec では「./configure」が 2 回定義されているので、ターミナルを狭くして編集している場合など見逃さないように注意が必要です(--with-debug の付いている方と付いていない方があります)。
debug の方は今は特にいらない気もしますが、ここでは取り敢えず両方につけておきました。
追記後の「./configure」の部分は以下のようになります。
%build ./configure \ --prefix=%{_sysconfdir}/nginx \ --sbin-path=%{_sbindir}/nginx \ --conf-path=%{_sysconfdir}/nginx/nginx.conf \ --error-log-path=%{_localstatedir}/log/nginx/error.log \ --http-log-path=%{_localstatedir}/log/nginx/access.log \ --pid-path=%{_localstatedir}/run/nginx.pid \ --lock-path=%{_localstatedir}/run/nginx.lock \ --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp \ --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp \ --user=%{nginx_user} \ --group=%{nginx_group} \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-mail \ --with-mail_ssl_module \ --with-file-aio \ --with-ipv6 \ --with-debug \ --add-module=/home/rpmdevel/ngx_devel_kit-0.2.19 \ --add-module=/home/rpmdevel/set-misc-nginx-module-0.29 \ %{?with_spdy:--with-http_spdy_module} \ --with-cc-opt="%{optflags} $(pcre-config --cflags)" \ $* make %{?_smp_mflags} %{__mv} %{_builddir}/%{name}-%{version}/objs/nginx \ %{_builddir}/%{name}-%{version}/objs/nginx.debug ./configure \ --prefix=%{_sysconfdir}/nginx \ --sbin-path=%{_sbindir}/nginx \ --conf-path=%{_sysconfdir}/nginx/nginx.conf \ --error-log-path=%{_localstatedir}/log/nginx/error.log \ --http-log-path=%{_localstatedir}/log/nginx/access.log \ --pid-path=%{_localstatedir}/run/nginx.pid \ --lock-path=%{_localstatedir}/run/nginx.lock \ --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp \ --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp \ --user=%{nginx_user} \ --group=%{nginx_group} \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-mail \ --with-mail_ssl_module \ --with-file-aio \ --with-ipv6 \ --add-module=/home/rpmdevel/ngx_devel_kit-0.2.19 \ --add-module=/home/rpmdevel/set-misc-nginx-module-0.29 \ %{?with_spdy:--with-http_spdy_module} \ --with-cc-opt="%{optflags} $(pcre-config --cflags)" \ $* make %{?_smp_mflags}
これで準備はできたので rpmbuild コマンドを実行します。
$ rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec
以下の RPM ファイルが作成されました。
$ ll ~/rpmbuild/RPMS/x86_64/ 合計 3288 -rw-rw-r--. 1 rpmdevel rpmdevel 380228 12月 20 10:00 nginx-1.8.0-1.el7.centos.ngx.x86_64.rpm -rw-rw-r--. 1 rpmdevel rpmdevel 1753000 12月 20 10:00 nginx-debug-1.8.0-1.el7.centos.ngx.x86_64.rpm -rw-rw-r--. 1 rpmdevel rpmdevel 1232812 12月 20 10:00 nginx-debuginfo-1.8.0-1.el7.centos.ngx.x86_64.rpm
念の為ビルドされたバイナリを -V してみると、表示されるオプションに先ほど spec ファイル内で指定した --add-module が追加されている事を確認できます。
$ ./rpmbuild/BUILD/nginx-1.8.0/objs/nginx -V nginx version: nginx/1.8.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --add-module=/home/rpmdevel/ngx_devel_kit-0.2.19 --add-module=/home/rpmdevel/set-misc-nginx-module-0.29 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'
問題無さそうです。
ちょっとだけ使ってみる
作成した RPM ファイルを別サーバに持って行ってインストールしてみます。
$ su -
# yum install -y ./nginx-1.8.0-1.el7.centos.ngx.x86_64.rpm
問題なくインストールされたら、動作確認のため /etc/nginx/conf.d/default.conf を編集します。
# vi /etc/nginx/conf.d/default.conf
いくつか簡単に試せるディレクティブを使ってみます。
default.conf 内の server ブロックの中に以下の設定を追加。
location /today { set_local_today $today; rewrite ^(.*)$ http://localhost?date=$today permanent; } location /base64encode { set $a $arg_str; set_encode_base64 $a; set $args ""; rewrite ^(.*)$ http://localhost?result=$a permanent; } location /base64decode { set $a $arg_str; set_decode_base64 $b $a; set $args ""; rewrite ^(.*)$ http://localhost?result=$b permanent; }
設定に問題がないか確認してから Nginx を再起動します。
systemctl 使った方がいいのかも知れませんが取り敢えず使い慣れた service で・・・。
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # service nginx restart Redirecting to /bin/systemctl restart nginx.service
curl で動作確認してみます。
まずは set_local_today ディレクティブ。
# curl -I -L http://localhost/today HTTP/1.1 301 Moved Permanently Server: nginx/1.8.0 Date: Sun, 20 Dec 2015 08:33:25 GMT Content-Type: text/html Content-Length: 184 Connection: keep-alive Location: http://localhost?date=2015-12-20 HTTP/1.1 200 OK Server: nginx/1.8.0 Date: Sun, 20 Dec 2015 08:33:25 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Sun, 20 Dec 2015 01:34:20 GMT Connection: keep-alive ETag: "5676059c-264" Accept-Ranges: bytes
リダイレクト先(Location) の部分に実行日が設定されているのが判ります。
次は set_encode_base64 ディレクティブ。
# curl -I -L http://localhost/base64encode?str=hello HTTP/1.1 301 Moved Permanently Server: nginx/1.8.0 Date: Sun, 20 Dec 2015 08:33:32 GMT Content-Type: text/html Content-Length: 184 Connection: keep-alive Location: http://localhost?result=aGVsbG8= HTTP/1.1 200 OK Server: nginx/1.8.0 Date: Sun, 20 Dec 2015 08:33:32 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Sun, 20 Dec 2015 01:34:20 GMT Connection: keep-alive ETag: "5676059c-264" Accept-Ranges: bytes
Base64 エンコードされた文字列が返って来ました。
上で返って来た文字列を使って今度は set_decode_base64 ディレクティブを使ってみます。
# curl -I -L http://localhost/base64decode?str=aGVsbG8= HTTP/1.1 301 Moved Permanently Server: nginx/1.8.0 Date: Sun, 20 Dec 2015 08:33:40 GMT Content-Type: text/html Content-Length: 184 Connection: keep-alive Location: http://localhost?result=hello HTTP/1.1 200 OK Server: nginx/1.8.0 Date: Sun, 20 Dec 2015 08:33:40 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Sun, 20 Dec 2015 01:34:20 GMT Connection: keep-alive ETag: "5676059c-264" Accept-Ranges: bytes
ちゃんと元の文字列に戻っています。
ngx_set_misc モジュールでは他にもいろいろなディレクティブが追加されます。
https://github.com/openresty/set-misc-nginx-module#directives
上手に使えばアプリケーションに少し楽をさせてあげることも出来そうです。
vim-pukiwiki を更新したら保存ができなくなった
普段技術的なメモを取るのに Mac 上で動いてる Apache の上で PukiWiki を動かし、vim-pukiwiki を使って Vim から更新しています。
syngan/vim-pukiwiki
https://github.com/syngan/vim-pukiwiki
wiki ディレクトリの実体を DropBox 上に置くようにすれば複数の PC でメモを共有するのも簡単だし、Windows なら ひとりWiki で閲覧・編集できたりとこれがまたなかなか快適。
仕事で共有するようなツールは皆 Markdown なので、「今時 Pukiwiki 記法?」と思ったりもするのですが、現状十分快適なため、なかなか乗り換える気になれずに愛用しています。
で、そんな快適なメモ環境だったのですが、この前何気なく NeoBundleUpdate したところ Vim で編集して :w すると以下のエラーが出るようになってしまいました。
write(1) failed: Vital.Web.Http.request(syngan): curl: Too many redirects. When following redirects, curl hit the maximum amount.
そのうち直るかな?と思い数日はブラウザ上から更新していたのですが、やはり不便で我慢できなくなりました。
ということで取り敢えずコミット履歴を見てみると、このエラーメッセージは「547a2bf」のコミットで追加されたものの模様。
Vim Script は詳しくない事もあり、変更内容を見ても直し方が浮かばなかったため、一旦このコミットの前の状態に戻す事にしました。
vimrc で vim-pukiwiki を読み込む設定をしている箇所を以下のように変更し、 rev にひとつ前のコミットのハッシュ値を指定。
NeoBundleLazy 'syngan/vim-pukiwiki', { 'rev': '24ac92f', 'autoload' : { 'commands' : 'PukiWiki' }, }
保存したら以下を実行して vim-pukiwiki を入れ直し。
NeoBundleReinstall vim-pukiwiki
これで試してみると無事 Vim 上から更新できるようになりました。
確認したのは Mavericks と El Capitan です。
curl のバージョンが何か想定されているものと違ったりするのかな?
取り敢えず何とか更新できるようになったのでよかったよかった。
Box-Cutter で CentOS 7.1 の Box を作成する
久しぶりに Packer で CentOS 7 の Box を作成しようと思い、以前も使った Box-Cutter を使おうとしたらちょっと使い方が変わっていたのでメモ。
環境は Windows 7 64bit, Packer のバージョンは 0.8.6 です。
まず、そもそも Box-Cutter の CentOS 用リポジトリが以下のように移動していました。
https://github.com/box-cutter/centos-vm
↓
https://github.com/boxcutter/centos
なので改めて適当なディレクトリに clone。
>git clone https://github.com/boxcutter/centos >cd centos
CentOS 7.1 を作成することにしたので、centos71.json を編集。
memory を増やして iso_url を日本のミラーサーバに変更しました。
{ "_comment": "Build with `packer build -var-file=centos71.json centos.json`", "vm_name": "centos71", "cpus": "1", "disk_size": "65536", "iso_checksum": "1795184136b8bdddabe50453cc2cc2d46f0f7c5e", "iso_checksum_type": "sha1", "iso_name": "CentOS-7-x86_64-DVD-1503-01.iso", "iso_url": "http://ftp.jaist.ac.jp/pub/Linux/CentOS/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso", "kickstart": "ks7.cfg", "memory": "1024", "parallels_guest_os_type": "centos7" }
日本語環境の Box にしたいので、http\ks7.cfg を開き、以下の部分を変更。
# Required settings lang ja_JP.UTF-8 keyboard jp106 rootpw vagrant authconfig --enableshadow --enablemd5 timezone Asia/Tokyo
この状態で普通に packer build を実行したら以下のようなエラーが発生しました。
>packer build -only=virtualbox-iso centos71.json Failed to parse template: 10 error(s) occurred: * Unknown root level key in template: 'cpus' * Unknown root level key in template: 'disk_size' * Unknown root level key in template: 'iso_checksum' * Unknown root level key in template: 'iso_checksum_type' * Unknown root level key in template: 'iso_name' * Unknown root level key in template: 'iso_url' * Unknown root level key in template: 'kickstart' * Unknown root level key in template: 'memory' * Unknown root level key in template: 'parallels_guest_os_type' * Unknown root level key in template: 'vm_name'
centos71.json の _comment の所をよく見ると書いてあるのですが、どうやら最近の Box-Cutter では centos.json に全体的な設定が記述してあり、バージョン番号入りの JSON ではバージョン毎に設定値が異なる変数のみが定義してあるようです。
なので書いてある通りに以下のようにして改めて実行。
>packer build -var-file=centos71.json -only=virtualbox-iso centos.json
これで暫く待つと box/virtualbox/centos71-nocm-0.1.0.box に Box が作成されました。
.tmux.conf 内で tmux のバージョン判定
普段使っている tmux のバージョンが環境毎に違うので、.tmux.conf 内で tmux のバージョンに応じて設定を切り替える方法を調べたのでメモ。
手元の Ubuntu 14.04 では tmux 1.8、Mac の方は 2.1 なのですが、以下のように設定したら同じ .tmux.conf でどちらのバージョンでも new-window 時にパスが引き継がれるようになりました。
ちなみに shell はどちらの環境でも zsh を使っています。
# for tmux 1.9 or higher if-shell "[[ `tmux -V` == *1.9* ]] || [[ `tmux -V` == *2.* ]]" \ 'unbind c; bind c new-window -c "#{pane_current_path}"'
参考
coderwall.com : establishing geek cred since 1305712800
https://coderwall.com/p/tjo3ig/checking-the-version-of-tmux-in-a-tmux-conf
Perl から Errbit にエラーを登録する
Perl から Errbit にデータを登録するところまで試してみたのでメモ。
Errbit のリポジトリ見ると既に v3 の JSON API も使えるみたいですが、手元で立てていたバージョンにはまだ v3 の API は無かったようなので、取り敢えず以下の XML API を使ってみました。
Notifier API V2.3 / API / Knowledge Base - Airbrake Support
https://help.airbrake.io/kb/api-2/notifier-api-v23
こんな感じ。
かなり適当ですが、これでもちゃんとエラーが登録できました。
これで Perl スクリプト内のエラーも Errbit で管理できるな。
Perl の XML 用ライブラリよく分からなかったんで検索して最初に出てきた XML::Simple を使ったんですが、 Plack-Middleware-Errbit とか見ると XML::Generator の方が楽そうかも。
まぁでも XML だとやっぱりちょっと面倒なので、ちゃんと JSON API 使えるバージョンにアップデートしましょうかね・・・。