CentOS5系でGitLab5.2にアップデートするとbundle installでこける

環境

CentOS 5.6
GitLab 5.1 (アップデート前)

問題

GitLabのバージョンを5.1から5.2にアップデートすると、
bundle install時にcharlock_holmsのインストールエラーが発生する。

原因

CentOS5系の標準リポジトリで提供されているICUは3.6だが、
GitLab 5.2が使用するcharlock_holms 0.6.9.4が要求するICUは4.2以降なので、
bundle install時にエラーが発生した。

何故GitLab5.2で発生したか

charlock_holms 0.6.9.3から、ICU 4.2で組み込まれたStringByteSinkを使うようになった。
GitLab 5.1ではcharlock_holms 0.6.9を使用していたが、
GitLab 5.2からcharlock_holms 0.6.9.4を使用するようになったので、
今回のアップデート時に問題が発生した。

対応

古いICUを削除

sudo yum remove libicu

StringByteSinkが組み込まれたICUのソースを取得し展開

cd /tmp
wget http://download.icu-project.org/files/icu4c/4.2.1/icu4c-4_2_1-src.tgz
tar xvf icu4c-4_2_1-src.tgz

コンパイルしてインストール

cd icu/source
./configure
make
sudo make install

後はbundle installして、エラー無くインストールされることを確認

bundle install --without development test postgres --deployment

リモートからJenkinsのジョブが実行中であるか確認する

ジョブがキュー内に存在するか確認する

以下のURLにアクセスしてジョブの情報を取得する。

http://JENKINS_URL/job/JOBNAME/api/json

取得したjsonにinQueueという要素があり、値がtrueであればキュー内にジョブが存在する。

実行中か確認する

以下のURLにアクセスしてジョブの情報を取得する。

http://JENKINS_URL/job/JOBNAME/api/json

lastBuildとlastCompletedBuildのnumber要素の値が異なれば、ジョブが実行中である。

isBuildみたいな要素があると良いなーと思ってます。

もうすぐ春だからPerlCasual#05に行ってきた

f:id:waniji:20130329195759j:plain

PerlCasual#05に行ってきました。

PerlCasual #05 : ATND

スーツで行ったので門前払いされるかとびくびくしていましたが、門番の方に通して頂けて安心しました。

個性的な登壇者の方々のお話を聞いて、Perl初心者が思ったことなど書き連ねようと思います。

何個か作っていれば、慣れる!

@ruikさんのスライドに出てきた言葉なのですが、悩める人達を励ますとてもいい言葉だと思います。
stfuawscをマイルドにした感じですかね。

初心者の私は、

  • 何が良い書き方なんだろう…
  • このモジュール使ってていいのかな…
  • こんな書き方をすると椅子が飛んでくるんじゃ…

ということをうだうだ考えたりして、コードを書く手が止まったり、モチベーションが下がってしまったりします。

もちろん試行錯誤することは大事ですが、囚われ過ぎるのはとても良くない。
それであれば、とりあえず突き進み後で後悔すれば良いんだなと思います。
最初からパーフェクトに出来る人はいませんし、以前した失敗を次に生かしていけば、おのずと洗練されていくはずです。

モチベーションは有限

モチベーションが有限っていうのは本当にその通りで、最初に持った熱は時間とともに冷めていっちゃいます。

  • ミニマルスタートでまず動くものを by @koba04さん
  • 仲間を作ってカジュアルに楽しむ by @uzullaさん

上記の提言がありましたが、とても有効な策だと思います。

ライブコーディング

今回参加して一番面白いと感じたのはこのセッションです。

エディタをどのように使いこなし、エラーが出たらどのように確認し、どういったコードを書くのかをリアルタイムで見れる機会はそうそう無いし、ましてや一緒に仕事が出来ない社外の人となればとても貴重だと思います。

Live Coding Casualが今後開催されるなら、是非参加してみたいです。(閲覧者として)

Perl界隈には面白い人たちが集まっている

おっぱいやからあげなどが出てくる個性的なLTの後に真面目なLTがあったりとカオスでしたが、とても楽しい時間を過ごすことが出来ました。

主催者の@yusukebeさん、登壇者の方々、運営者の方々、会場を提供して頂いたNHN Japanさん、ありがとうございました!

GitLabを5.0にアップデートしたらpush時にエラーが出るようになった件

初めに

GitLab 5.0 Release, Standing on Its Own Two Feet

先日、GitHubのOSSクローンであるGitLabが、4.2から5.0にメジャーバージョンアップ。 大きな変更としては、リポジトリ管理にGitoliteではなくGitLab-Shellを使用するようになったこと。

公式の手順に沿って5.0にしたところ、リポジトリにpushする時にエラーが発生するようになったので、調査したことと問題の解決方法をメモっておこうと思います。

環境

  • CentOS 5.6
  • GitLab 4.2(アップデート前)

アップデート方法

From 4.2 to 5.0 gitlabhq/gitlabhq Wiki

上記手順の通りにアップデートを実施。特に問題は出ずに、5.0にアップデートしたことをブラウザから確認できた。

エラー内容

エラーが発生したのは、GitLabで管理しているリポジトリにpushを行ったタイミング。エラー内容は以下の通り。

$ git push
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 277 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: hooks/update:10: undefined method `require_relative' for main:Object (NoMethodError)
remote: error: hook declined to update refs/heads/XXX_branch
To git@localhost:XXX_repository.git
 ! [remote rejected] XXX_branch -> XXX_branch (hook declined)
error: failed to push some refs to 'git@localhost:XXX_repository.git'

require_relativeメソッドが見つからなくて怒られている……。

調査

require_relativeとはなんぞや

Rubyist Magazine - Ruby 1.9.2 予告編

ruby1.9.2からcoreに追加されたメソッドらしく、処理内容は相対パスでライブラリを読み込むとのこと。

Rubyのバージョン確認した

なるほど、これはrubyのバージョンが古いのではないかと思い確認。

$ ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [i686-linux]

問題なし!

push以外でエラーを発生させてみる

push以外でもエラーが出るのか気になったので、ブラウザからファイルを編集してcommitしてみたところ、下記のエラーが発生。

March 26, 2013 18:45 -> ERROR -> Command failed [1]: /usr/bin/git --git-dir=/home/git/gitlab-satellites/XXX_repository/.git push origin XXX_branch
remote: /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.2.3/lib/bundler/shared_helpers.rb:2:in `require': no such file to load -- rubygems (LoadError)[K
remote: from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.2.3/lib/bundler/shared_helpers.rb:2[K
remote: from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.2.3/lib/bundler/setup.rb:1:in `require'[K
remote: from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.2.3/lib/bundler/setup.rb:1[K
remote: error: hook declined to update refs/heads/XXX_branch[K
To /home/git/repositories/XXX_repository.git
! [remote rejected] XXX_branch -> XXX_branch (hook declined)
error: failed to push some refs to '/home/git/repositories/XXX_repository.git'

push時と異なるエラー……rubygemsがない?

gemの確認

$ gem -v
1.8.23

あった。

複数のrubyが入っていることを疑う

ruby on rails - no such file to load -- rubygems (LoadError) - Stack Overflow

「no such file to load -- rubygems」というキーワードで検索していると上記のQAを発見した。Railsで同じような問題が発生したらしい。

Eimantas氏の回答によると、複数のrubyが入っているとrubygemsのエラーが発生するらしいので、藁にもすがる思いで確認した。

rubyの配置場所を全て表示

$ which ruby
/usr/local/bin/ruby

$ which -a ruby
/usr/local/bin/ruby
/usr/bin/ruby

複数のrubyが入ってる!!

$ /usr/bin/ruby -v
ruby 1.8.5

古い!!!!

対処

古いrubyを削除

どうやら古いrubyはyum経由でインストールしたものらしい。まったく誰だよインストールしたのはと思いながら、下記コマンドで古いrubyを削除。(後にインストールしたのは自分だと発覚)

$ sudo yum remove ruby

再挑戦

再度pushを試してみる。

$ git push
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 277 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@localhost:XXX_repository.git
   2ae45af..e77fe86  XXX_branch -> XXX_branch

来たー!成功!Eimantasさんありがとう!

まとめ

環境をリセットせず使いまわすと痛い目を見る良い例ですね。同様の問題で困っている人の役に立てられれば幸いです。

リモートからJenkinsのパラメータ付きジョブを実行する

Jenkinsのジョブをリモートから実行するには以下のURLにアクセスすれば良いが、パラメータ付きジョブだとエラーとなる。

http://JENKINS_URL/job/JOBNAME/build

公式ドキュメントにはJSONを利用する必要があると書かれているが、buildの代わりにbuildWithParametersを使えば、パラメータ付きで実行可能である。

http://JENKINS_URL/job/JOBNAME/buildWithParameters?PARAM=VALUE

ハマったのでメモ。
オライリーのJenkins本に助けられました。

Jenkins

Jenkins

ThinkPad USB トラックポイントキーボード(55Y9024)を買った

ThinkPadトラックポイントの魅力に取り憑かれたので、仕事で使用しているデスクトップPC用キーボードもトラックポイント付きにしてみた。
型番は55Y9024で価格は6,000円前後。

X201sとの比較


違い

一部キーが大きい

ESCとDELETEキーのサイズが2倍くらいにサイズアップ。
それに伴いInsertの位置やFキーの位置が変更に。
ESCはよく使うキーなので、自分としては押しやすくなってGood。
人によっては結構気になりそう。

キータッチが硬め

これは本家の方が好み。
だけどそこまで気にならず。

困った点

トラックポイントが純正ドライバでうまく動かない……

ドライバの最新版はVer1.07の模様。
lenovo: http://support.lenovo.com/en_US/detail.page?LegacyDocID=MIGR-73235

しかし、このドライバを使用しても一部のアプリケーションではスクロールしてくれない……。
いろいろ調べてみたら、WheelBallというソフトウェアを使うと問題なく動いてくれるそう。
WheelBall: http://kamigaki.la.coocan.jp/wheelball.htm

本家ドライバの方がスクロールの挙動がぬるぬるしてて好きなので、是非とも更新していただきたいですね。

ThinkPad使いには必須

価格もそこまで高くなく、かなり軽いので持ち運びも便利。
トラックポイントに慣れ過ぎて、マウスを使うのが億劫だ!というThinkPad使いの皆様にはお勧めです。

レノボ・ジャパン ThinkPad USB トラックポイントキーボード(日本語) 55Y9024

レノボ・ジャパン ThinkPad USB トラックポイントキーボード(日本語) 55Y9024