2014/05/21

Ubuntu12.04のJavaをアップデート

さくらVPSのUbuntu12.04のJavaを更新したので作業メモ。
% add-apt-repository ppa:webupd8team/java
% aptitude update
% aptitude install oracle-java7-installer
% aptitude install oracle-java8-installer
変更する。
% update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/lib/jvm/java-8-oracle/jre/bin/java 65 auto mode 1 /usr/lib/jvm/java-6-sun/jre/bin/java 63 manual mode 2 /usr/lib/jvm/java-7-oracle/jre/bin/java 64 manual mode 3 /usr/lib/jvm/java-8-oracle/jre/bin/java 65 manual mode
ん?Java8に自動的になってる?
% java -version
java version "1.8.0_05" Java(TM) SE Runtime Environment (build 1.8.0_05-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
なってた

2014/05/18

RedmineでMarkdownに切り替えやすくするプラグインを作った

tail -f pinzo.log: Redmine がついに Markdown をサポートしたようだ で書いたように、Redmine が 2.5.0 から試験的に Markdown をサポートしたけど、過去の Textile で書いたもろもろが崩れてしまうので、気軽に乗り換えられない。
でも、やっぱり Markdown で書きたい。主流だし。
というわけで redmine_persist_wfmt というプラグインを作った。
これで少しは気軽に Markdown に切り替えられるですよ。

インストール

README.md にある通り。
$ bundle exec rake pwfmt:persist_all FORMAT=textile RAILS_ENV=production で既存のドキュメントを Textile として保存する。もちろん Markdown として保存することもできる。

イメージ

こんな風に Textile で書かれたドキュメントがあったとする。

プラグインをインストール後、Markdownを使うように変更する。

それでも Textile として変換されて表示されます。

もちろん Markdown として保存すれば

Markdown として変換されて表示されます。

作成・編集時にフォーマットを選択できるので、Textile から Markdown に直すこともできます。(もちろん逆も)

機能とメリット

  • 作成時に指定したフォーマットでずっと表示できる
  • 作成・編集時にフォーマットを指定できる(どちらかしかしらないメンバーがいても大丈夫)
  • 編集時にフォーマットを切り替えられる(統一も順次対応できる)

対応箇所

  • Redmineのウェルカムテキスト
  • プロジェクトの概要
  • チケットの概要と履歴
  • Wiki
  • 文書
  • フォーラムの本文とコメント
  • ニュース
基本的に Wiki 記法で書ける場所は全て対応したつもり

注意事項

  • ツールバーの動作は切り替わらない。Redmineの設定に従う
  • プレビューも未対応。Redmineの設定に従う → v1.1.0 で対応しました。
  • プラグインとかで追加された場所は、フォーマットを選択するドロップダウンはでるかもしれないけど書式は保存されないと思う

プレビューぐらいは対応したいけど、その前にテスト書いてリファクタリングをしたい。
似ているようで微妙に違うソースがたくさんなので、もう少し綺麗になるはず。

2014/05/16

[未解決]UbuntuをアップグレードしたらRedmineでRMagick関連が動かなくなっていた

さくらのVPSのUbuntu10.04を12.04に上げたらいつの間にかRedmineのRMagic関連機能が使えなくなっていた。
% convert
convert: error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory
convert が失敗するのが原因のようだ。
10.04の時はリポジトリのバージョンが古くソースからインストールしたので今回も最新版をソースからインストールした。
% wget http://www.imagemagick.org/download/ImageMagick-6.8.9-1.tar.gz
% tar xf ImageMagick-6.8.9-1.tar.gz
% cd ImageMagick-6.8.9-1
% ./configure --enable-lzw=yes --prefix=/opt/ImageMagick/ImageMagick-6.8.9-1
% make
% make install
% /opt/ImageMagick/ImageMagick-6.8.9-1/bin/convert --version
Version: ImageMagick 6.8.9-1 Q16 x86_64 2014-05-16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC Features: DPC OpenMP Delegates: bzlib freetype jng jpeg lcms png tiff x xml zlib
インストールが成功したので、既存と置き換える。
% mv /usr/local/bin/animate{,.bak}
% mv /usr/local/bin/compare{,.bak}
% mv /usr/local/bin/composite{,.bak}
% mv /usr/local/bin/conjure{,.bak}
% mv /usr/local/bin/convert{,.bak}
% mv /usr/local/bin/display{,.bak}
% mv /usr/local/bin/identify{,.bak}
% mv /usr/local/bin/import{,.bak}
% mv /usr/local/bin/Magick-config{,.bak}
% mv /usr/local/bin/Magick++-config{,.bak}
% mv /usr/local/bin/MagickCore-config{,.bak}
% mv /usr/local/bin/MagickWand-config{,.bak}
% mv /usr/local/bin/mogrify{,.bak}
% mv /usr/local/bin/montage{,.bak}
% mv /usr/local/bin/stream{,.bak}
% mv /usr/local/bin/Wand-config{,.bak}

% ln -s /opt/ImageMagick/ImageMagick-6.8.9-1/bin/* /usr/bin
% convert --version
Version: ImageMagick 6.8.9-1 Q16 x86_64 2014-05-16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC Features: DPC OpenMP Delegates: bzlib freetype jng jpeg lcms png tiff x xml zlib
RMagick を再インストール。
bundle exec gem uninstallでエラーは出るけどちゃんと削除はされるらしい。
% cd /var/lib/rails/redmine
% bundle exec gem uninstall rmagick
Successfully uninstalled rmagick-2.13.2 ERROR: While executing gem ... (NoMethodError) undefined method `delete' for #
% bundle install % touch tmp/restart.txt
その結果がこれである。
なんでや・・・

git1.9.3をインストール

バージョン1.7はさすがに古いなと思ったので、さくらVPSのUbuntu12.04にgitの最新版をインストールした。
% wget https://www.kernel.org/pub/software/scm/git/git-1.9.3.tar.gz
早速エラー。https対応をしていなかった。
% echo 'ca-certificate = /etc/ssl/certs/ca-certificates.crt' >> /etc/wgetrc
% wget https://www.kernel.org/pub/software/scm/git/git-1.9.3.tar.gz
% ./configure --prefix=/opt/git/git-1.9.3 --with-openssl --with-curl
% make
/bin/sh: 1: msgfmt: not found
とエラーになった。どうやらgettextが必要らしい。
% aptitude install gettext
% make
% make install
% /opt/git/git-1.9.3/bin/git --version
git version 1.9.3
インストールが成功したので、既存と置き換える。
% aptitude remove git-core
% ln -s /opt/git/git-1.9.3/bin/* /usr/bin
% git --version
git version 1.9.3
お疲れ様でした。

2014/05/12

Ruby 2.1.2 と 2.0.0-p481 をインストール

Hash#reject の挙動が修正され、readline 6.3 に対応した新しい ruby がリリースされたのでインストールした。
# readline のバージョンを最新に
% brew switch readline 6.3.5
# Ruby 2.0.0-p481 をインストール
% CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl` --with-gcc=clang" rbenv install 2.0.0-p481
% rbenv global 2.0.0-p481 && rbenv rehash
% gem install pry bundler
# Ruby 2.0.0-p481 をインストール
% CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl` --with-gcc=clang" rbenv install 2.1.2
% rbenv global 2.1.2 && rbenv rehash
% gem install pry bundler

2014/05/11

さくらの VPS を Ubuntu 10.04 から 12.04 にアップグレード

Ubuntu 14.04 も出たけど、とりあえずさくらの VPS を Ubuntu 10.04 から 12.04 にアップグレードした。
基本的には さくらのVPSでubuntu12.04にアップデートしたら、resolv.confの中身が空っぽになった件 | 流浪のプログラマのブログ を参考に行って、resolv.conf も同じように対応したら、名前解決も無事できた。

しかし、Redmine が動かない。
どうやら、/usr/bin/ruby 等の Ruby 関連のシンボリックリンクが Ubuntu 12.04 デフォルトの 1.8.7 に上書きされたのが原因っぽい。
tail -f pinzo.log: Rubyのアップデートがちゃんとできていなくて、Redmineをアップデートできなかった で作業した ruby2.0.0-p451 の本体は当然ながらしっかり残っていたので、再度シンボリックリンクを貼って apache を再起動したら Redmine も正常稼働した。

2014/04/28

ほとんど誰の役にも立たない Rails 4.1 での変更点

Book.where(category: 'comics')
こんなコードを書いた場合、Rails 4.0 まではこんなログが出力されていました。
Book Load (0.1ms)  SELECT "books".* FROM "books" WHERE "books"."category" = 'comics'
でも Rails 4.1 ではこんなログが出力されます。
Book Load (0.1ms)  SELECT "books".* FROM "books"  WHERE "books"."category" = 'comics'
WHERE の前の半角スペースが 1 つ増えてます。
おかげで rails-flog のテストが Rails 4.1 でコケる。
さて、直そう

rbenv で ruby がインストールできなくなった

おもむろに最新パッチレベルとそろそろruby2.1.1を入れようと思って、

CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl` --with-gcc=clang" rbenv install 2.0.0-p451
を叩いたらエラーでインストールできなかった。
エラーログを見てみると下記のようなエラーメッセージが出ていたので、どうやら readline 関連でエラーが出ているらしい。
readline.c:1886:26: error: use of undeclared identifier 'Function'
    rl_pre_input_hook = (Function *)readline_pre_input_hook;
                         ^
readline.c:1886:36: error: expected expression
    rl_pre_input_hook = (Function *)readline_pre_input_hook;

調べてみると、どうやら readline が 6.3 になって rbenv でインストールしようとしたらエラーになるということらしい。
参考:MacでRuby 2.x.xがインストールできないバグ (homebrew + rbenv) - Qiita
readline を以前のバージョンに戻せばインストールできるとのことなので、

pinzolo@ileach % brew info readline
readline: stable 6.3.3 (bottled) http://tiswww.case.edu/php/chet/readline/rltop.html This formula is keg-only. OS X provides the BSD libedit library, which shadows libreadline. In order to prevent conflicts when programs look for libreadline we are defaulting this GNU Readline installation to keg-only. /usr/local/Cellar/readline/6.2.2 (30 files, 1.6M) /usr/local/Cellar/readline/6.2.4 (30 files, 1.6M) /usr/local/Cellar/readline/6.3.3 (40 files, 2.1M) * Poured from bottle From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/readline.rb
6.2.4 が入っていることを確認して、
pinzolo@ileach % brew switch readline 6.2.4
Cleaning /usr/local/Cellar/readline/6.2.2 Cleaning /usr/local/Cellar/readline/6.2.4 Cleaning /usr/local/Cellar/readline/6.3.3 Opt link created for /usr/local/Cellar/readline/6.2.4
readline を切り替えて再度インストールしたら無事インストールできた。

2014/04/13

Redmine がついに Markdown をサポートしたようだ

Redmine.org の issue を眺めていると Feature #15520: Markdown formatting - Redmine が上に上がっていた。
この要望は定期的にあがるよなーと思って読んでいると、なんととうとうサポートしたとのこと。 2.5.0 - Redmineを見ると、確かに 2.5.0 で追加されてる。
Github, Gist, Qiita, はてなブログ, wri.pe などなど Markdown はエンジニアのメモ記法のデファクトスタンダードになっているので、これは嬉しいニュース。待ち望んでいた人も多いのでは。

設定

確かに experimental となっていますが、Markdown が選択できるようになってます。
プロジェクト単位ではなく、Redmine全体での選択になるけど、もともと書式選択が全体なのは従来の仕様なのでこれはしかたない。

試してみた

早速こんな markdown で wiki を書いてみた。 これがこんなふうになる。
内部では Redcarpet 2.3 を使用しているので当然ながら GFM なシンタックスハイライトまでサポートされているのは嬉しい。

周辺サポート

experimental ながらしっかり周辺もサポートされてて、markdown を選んだ場合には wiki 用のツールバーも markdown 用になっており、各ボタンを押すと markdown に対応した書式を追加してくれる。
ちなみに下記の場所で Markdown が使えているのを確認済み。ほぼ漏れ無く対応されている感じ。
  • Wiki
  • 文書
  • プロジェクトの概要
  • チケットの説明
  • チケットの履歴の注記

残念なところも

ちなみに事前に textile でこんな文書を書いておいて、設定変更後に確認してみるとこうなる。
残念ながら書式は保存されないようです。
textile に設定を戻すと、markdown で書いた文書も textile で解釈された見れたもんじゃない文書になってしまう。
つまり現時点で markdown を使おうと思えば、過去の資産を全て捨てる、もしくは書き換えるしかないということになりますね。
残念だけど正式サポートの頃にはなんとかなるんだろうか?書いた時の書式を保存するとか。

markdown のサポートは現時点で experimental なのでこれから進化していくと思うとドキドキですね。

2014/04/12

Rubyのアップデートがちゃんとできていなくて、Redmineをアップデートできなかった

さくらのVPSで使用している Redmine を最新にしようと思い立った。

% cd work
% wget http://www.redmine.org/releases/redmine-2.5.1.tar.gz
% tar xf redmine-2.5.1.tar.gz
% mv redmine-2.5.1 /etc/lib/rails
% cd /etc/lib/rails/redmine-2.5.1
% cp ../redmine/config/database.yml config/
% cp ../redmine/config/configuration.yml config/
% bundle install --path vendor/bundle
% bundle exec rake generate_secret_token

ここまで順調に来たが、ここでエラー。

Could not find rake-10.1.1 in any of the sources
なぜか、bundler から bundler で今しがたインストールしたはずの gem が参照できないらしい。
調べてみると、どうやら bundler が実行時に参照するのは vendor/bundle/ruby/2.0.0 以下、しかしインストール時にインストールしていたのは vendor/bundle/ruby/1.9.1 以下というちぐはぐな状態になっていた。

思い当たることは、ruby を 2.0.0 にアップデートしたこと。
「今の Redmine をインストールした → ruby 2.0.0 をインストール → 今回」なので今までの Redmine は問題なく動いていたんだろうな
しかも ruby 2.0.0 をインストールした時、手順を間違えて ruby 1.9.3 の実行ファイルを正しく更新できていなかったようだ。
つまり、gem は ruby 1.9.3 の頃のものが動いていて bundler によるインストールは 1.9.1 以下に配置するが、実行時は ruby 2.0.0 で動いているので 2.0.0 以下を参照しようとしていたということだな。

というわけなので、rubyの最新版からちゃんとインストールし直すことにした。

% wget http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p451.tar.gz
% tar xf ruby-2.0.0-p451.tar.gz
% cd ruby-2.0.0-p451
% ./configure --prefix=/usr/local/ruby-2.0.0-p451
% make
% make install
% rm /usr/bin/erb
% rm /usr/bin/gem
% rm /usr/bin/irb
% rm /usr/bin/rake
% rm /usr/bin/rdoc
% rm /usr/bin/ri
% rm /usr/bin/ruby
% rm /usr/bin/testrb
% ln -s /usr/local/ruby-2.0.0-p451/bin/* /usr/bin/

手順をミスった ruby-2.0.0-p353 が動かないように変更

% mv /usr/local/bin/erb{,.bak}
% mv /usr/local/bin/gem{,.bak}
% mv /usr/local/bin/irb{,.bak}
% mv /usr/local/bin/rake{,.bak}
% mv /usr/local/bin/rdoc{,.bak}
% mv /usr/local/bin/ri{,.bak}
% mv /usr/local/bin/ruby{,.bak}
% mv /usr/local/bin/testrb{,.bak}

bundler をインストール

% gem install bundler
% ln -s /usr/local/ruby-2.0.0-p451/bin/bundle /usr/bin/

passenger の最新をインストールして変更

% gem install passenger
% cd /usr/local/ruby-2.0.0-p451
% ./bin/passenger-install-apache2-module

# /etc/apache2/mods-available/passenger.load を下記に変更
LoadModule passenger_module /usr/local/ruby-2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.41/buildout/apache2/mod_passenger.so

# /etc/apache2/mods-available/passenger.conf を下記に変更
PassengerRoot /usr/local/ruby-2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.41
PassengerDefaultRuby /usr/bin/ruby

redmine-2.5.1 のインストールのやり直し

# 同じなので省略
% bundle install --path vendor/bundle
% bundle exec rake generate_secret_token
% bundle exec rake db:migrate RAILS_ENV=production
% bundle exec rake tmp:cache:clear RAILS_ENV=production
% bundle exec rake tmp:sessions:clear RAILS_ENV=production
% mkdir public/plugin_assets
% cd ../
% chown -R www-data:www-data redmine-2.5.1
% ln -s /var/lib/rails/redmine-2.5.1 /var/lib/rails/redmine
% service apache2 restart

ちゃんと表示されて一安心