Redmineのバージョンアップ

 alminiumで入れたRedmineのバージョンが2.3.1で、最新のバージョンが2.3.2に上がっていたので入れ替えた。この手順ですべてにおいて正しいのかはちょっと不明。一応動いてはいるっぽい。
 MySQLのバックアップとかもして置いた方が良いだろうが、同一サーバ内での入れ替えかつマイナーバージョンの違いだけなら平気だろうということで省略した。

手順

Apache/Redmineの停止
# service https stop
ダウンロードしたredmineの展開
# tar zxf redmine-2.3.2.tar.gz
既存のディレクトリをリネーム
# mv /opt/alminium/ /opt/alminium.bak
新しいredmineをコピー。ディレクトリ名もalminiumにしておく。
# cp -Rap redmine-2.3.2 /opt/alminium
旧バージョンから新バージョンへのファイルのコピー
# cd /opt/
# cp -Rap alminium.bak/files/* alminium/files/
# cp -Rap alminium.bak/log/* alminium/log/
# cp -Rap alminium.bak/plugins/* alminium/plugins/
# cp -Rap alminium.bak/config/*.yml alminium/config/
# cp -Rap alminium.bak/public/themes/gitmike/ alminium/public/themes/
# cp -Rap alminium.bak/public/themes/railsgun/ alminium/public/themes/
パーミッションの変更
# chown apache:apache -R .
マイグレーションの実行。

ディレクトリの移動

# cd /opt/alminium

ここでいろいろエラーが出た。

# rake db:migrate RAILS_ENV="production"
You cannot specify the same gem twice with different version requirements.
You specified: nokogiri (< 1.6.0) and nokogiri (>= 0)      

"plugins/redmine_backlogs/"ディレクトリの削除

# rm -rf  plugins/redmine_backlogs/ 

再度マイグレーション実行

# rake db:migrate RAILS_ENV="production"
Could not find gem 'rails (= 3.2.13) ruby' in the gems available on this machine.
Run `bundle install` to install missing gems.
bundle installを実行
# bundle install
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.1.0)
Installing i18n (0.6.1)
Installing multi_json (1.7.7)
Installing activesupport (3.2.13)
Installing builder (3.0.0)
Installing activemodel (3.2.13)
Installing erubis (2.7.0)
Installing journey (1.0.4)
Installing rack (1.4.5)
Installing rack-cache (1.2)
Installing rack-test (0.6.2)
Installing hike (1.2.3)
Installing tilt (1.4.1)
Installing sprockets (2.2.2)
Installing actionpack (3.2.13)
Installing mime-types (1.23)
Installing polyglot (0.3.3)
Installing treetop (1.4.14)
Installing mail (2.5.4)
Installing actionmailer (3.2.13)
Installing arel (3.0.2)
Installing tzinfo (0.3.37)
Installing activerecord (3.2.13)
Installing activeresource (3.2.13)
Using bundler (1.3.5)
Installing nokogiri (1.5.10)
Installing ffi (1.9.0)
Installing childprocess (0.3.9)
Installing rubyzip (0.9.9)
Installing websocket (1.0.7)
Installing selenium-webdriver (2.33.0)
Installing xpath (1.0.0)
Installing capybara (2.0.3)
Installing coderay (1.0.9)
Installing diff-lcs (1.1.3)
Installing gherkin (2.12.0)
Installing multi_test (0.0.2)
Installing cucumber (1.3.5)
Installing rack-ssl (1.3.3)
Installing json (1.8.0)
Installing rdoc (3.12.2)
Installing thor (0.18.1)
Installing railties (3.2.13)
Installing rails (3.2.13)
Installing cucumber-rails (1.3.1)
Installing database_cleaner (1.1.1)
Installing jquery-rails (2.0.3)
Installing metaclass (0.0.1)
Installing mocha (0.13.3)
Installing mysql2 (0.3.13)
Installing net-ldap (0.3.1)
Installing ruby-openid (2.1.8)
Installing rack-openid (1.3.1)
Installing redcarpet (3.0.0)
Installing rmagick (2.13.2)
Installing rspec-core (2.11.1)
Installing rspec-expectations (2.11.3)
Installing rspec-mocks (2.11.3)
Installing rspec (2.11.0)
Installing rspec-rails (2.11.4)
Installing shoulda-context (1.0.2)
Installing shoulda-matchers (1.4.1)
Installing shoulda (3.3.2)
Installing sqlite3 (1.3.7)
Installing yard (0.8.7)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
Post-install message from rdoc:
Depending on your version of ruby, you may need to install ruby rdoc/ri data:

<= 1.8.6 : unsupported
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
再度マグレーションを実行
# rake db:migrate RAILS_ENV="production"
プラグインのマグレーションを実行

"db:migrate:upgrade_plugin_migrations"の方は実行するとエラーになったので、結局無視した。

# rake db:migrate:upgrade_plugin_migrations RAILS_ENV=production
rake aborted!
Don't know how to build task 'db:migrate:upgrade_plugin_migrations'

(See full trace by running task with --trace)

"db:migrate_plugins"はdeprecatedなようなので、"redmine:plugins:migrate"を使った方が良いかも。

# rake db:migrate_plugins RAILS_ENV=production
Migrating clipboard_image_paste (Clipboard image paste)...
Migrating redmine_banner (Redmine Banner plugin)...
Migrating redmine_charts (Redmine Charts)...
Migrating redmine_code_review (Redmine Code Review plugin)...
Migrating redmine_drafts (Redmine Drafts plugin)...
Migrating redmine_git_branch_hook (Redmine Git Branch Hook plugin)...
Migrating redmine_hudson (Redmine Hudson plugin)...
Migrating redmine_importer (Issue Importer)...
Migrating redmine_local_avatars (Redmine Local Avatars plugin)...
Migrating redmine_plugin_views_revisions (Redmine plugin views revisions plugin)...
Migrating redmine_redcarpet_formatter (Redcarpet Markdown Wiki formatter)...
Migrating redmine_scm (SCM Creator)...
Migrating redmine_spent_time_column (Redmine Spent Time Column)...
Migrating redmine_xls_export (Issues XLS export)...

Note: The rake task db:migrate_plugins has been deprecated, please use the replacement version redmine:plugins:migrate
秘密鍵の作成
# rake generate_secret_token
Apache/Redmineの起動
# service httpd start 

bashとzshで連想配列

shellの中で連想配列を使ってみたかったので備忘録。bashzshで試してみたけど、結果にちょっと違いがあった。

bashの場合

$ declare -A hoge
$ hoge["A"]="a"
$ hoge["B"]="b"
$ echo ${hoge}

$ echo ${hoge["A"]}
a
$ echo ${hoge["B"]}
b
$ unset hoge
$ echo ${hoge}

$ echo ${hoge["A"]}

$ echo ${hoge["B"]}

zshの場合

% declare -A hoge
% hoge["A"]="a"
% hoge["B"]="b"
% echo ${hoge}
b a
% echo ${hoge["A"]}
a
% echo ${hoge["B"]}
b
% unset hoge
% echo ${hoge}

% echo ${hoge["A"]}
zsh: bad math expression: operand expected at `"A"'
% echo ${hoge["B"]}
zsh: bad math expression: operand expected at `"B"'

変数自体を参照した場合とunsetした後に参照した場合で、bashzshで表示結果が変わっていた。

curlコマンド

curlコマンドでダウンロードしたHTMLをそのままgzip圧縮する。

curl http://www.yahoo.co.jp | gzip > yahoo.gz

解凍する場合はgunzipコマンドを使用する。-cオプションを使うと標準出力する。

gunzip -c  yahoo.gz

xargsの-Pオプション

 xargsで-Pオプションを使うと、プロセスが複数立ち上がると言うことで試してみる。コマンド実行前後をdateコマンドで挟んで、1〜10までの数を引数で渡してsleepする。

/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 20 sleep && date
201375日 金曜日 011815秒 JST
201375日 金曜日 011825秒 JST
/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 10 sleep && date
201375日 金曜日 011839秒 JST
201375日 金曜日 011849秒 JST
/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 5 sleep && date
201375日 金曜日 011855秒 JST
201375日 金曜日 011910秒 JST
/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 2 sleep && date
201375日 金曜日 011916秒 JST
201375日 金曜日 011946秒 JST
/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 1 sleep && date
201375日 金曜日 011951秒 JST
201375日 金曜日 012046秒 JST

 一番sleep時間が長くなるのがsleep 10を実行したときなので、キッチリ10秒掛かっている。同時実行するプロセスを減らすと、それに伴って処理時間が長くなる。
 -P 0を指定すると可能な限りプロセスを立ち上げるらしいが、Macで試したら「xargs: max. processes must be >0」というエラーメッセージが表示された。Linuxだと平気だった。

net.USBクライアントがバージョンアップしていた

 I・ODATAの方は更新されてなかったけど、それの元になっているSX Virtual Linkのクライアントが2013年2月18日に3.11.2にバージョンが上がっていた。これで確認したら、スリープ復帰時に強制再起動が起きる問題が解消された。

 これでMacBookAirでも問題なく使用できそうだ。

Moutain Lionでnet.USBクライアント使用する場合の設定

 IO DATAのWN-DS/USを購入してプリンタなどをネットワーク化したまでは良かったが、どういうわけかMountain Lion環境にnet.USBクライアントをインストールすると、スリープ復帰時に「コンピュータを再起動する必要があります。」というメッセージが表示される。
 いろいろためしてみると、スリープ状態によって正常に復帰できる時とできない時がある。
 Macのスリープの場合、デフォルトの設定だと1時間くらいはメモリーに対して情報を保存しておくが、それを超えるとメモリーの内容をストレージに書き込んで消費電力を抑えるようにしている。hibernatemodeで検索すると情報がいろいろ出てくる。
 net.USBクライアントは、ストレージに書き込まれた状態から復帰しようとすると正常に復帰できなかった。

 結局のところ、回避方法としてはhibernatemodeを変更するくらいしかなかった。以下のようにしたところ、ひとまずエラーは出なくなったような気がする。

sudo pmset -a hibernatemode 0

ただし、このように設定すると当然スリープ時の消費電力は増えるわけだけど。

追記

 一晩放置してスリープから解除したら、また「コンピュータを再起動する必要があります。」と表示された。どうもhibernatemodeの変更設定がうまく機能していないような。もしくは他に設定が影響しているのか。どちらにしても自分のMountain Lion環境だとnet.USBクライアントは正常に動かないわけだが。(正確にはクライアントソフトは使えるけど、一定時間以上経ってからスリープ復帰すると必ず再起動がかかる)

追記2

 hibernatemode0にして、合わせて[システム環境設定]-[省エネルギー]で「可能な場合はハードディスクをスリープさせる」のチェックを外すとうまく動いているように見える。
 チェック外した状態でhiberntemodeの変更をするとwarningが出るけど平気なのだろうか。

Warning: Idle sleep timings for "Battery Power" may not behave as expected.

  • Disk sleep should be non-zero whenever system sleep is non-zero.

Warning: Idle sleep timings for "AC Power" may not behave as expected.

  • Disk sleep should be non-zero whenever system sleep is non-zero.

追記3

設定を変えてみたけどあまり効果は無かった。上記で試していたのは2012年の13インチだけど。
試しにということで、手元にある2010年の11インチにSnow LepardとMoutain Lion入れて試した見たけど状況的には変わらない。こうなるとOSではなくハードの相性の可能性がありそう。
普段メインで使っているSnow Leopardの入ったMacBookProだと今のところはうまく動いている。スリープ復帰に失敗するとかはこれまで無かった。Moutain Lionにしたときに動くは分からないけど、ハードの問題とかだとなんか動きそうな気もする。