RVMでRubyをインストール
Rubyのバージョン管理RVMをつかってcentosにrubyをインストールしてみました。
RVMのインストール
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
$ \curl -sSL https://get.rvm.io | bash -s stable
パスの追加
export PATH=$PATH:/usr/local/rvm/bin/
~/.bashrcに書くとコマンドを打つ手間が省けます
Rubyをインストール
Rubyを使う
$ rvm use ruby-2.1.1
$ ruby -v
無事インストールできました!
コマンド
インストールできるrubyのバージョン表示
$ rvm list -r
トラブルシューティング
エラー1
ERROR: Could not find 'which' command, make sure it's available first before continuing installation.
対処法:whichコマンドをインストール
$ yum install which
エラー2
In case of problems: http://rvm.io/help and https://twitter.com/rvm_io
* WARNING: you are missing '/dev/fd' it is important for shell scripting used by RVM,
You can fix it on most linux systems with:
ln -sf /proc/self/fd /dev/fd
対処法:リンクを張る
$ ln -sf /proc/self/fd /dev/fd
エラー3
++ printf %b 'Error installing EPEL, it is required for libyaml-devel,
either there was an error installing EPEL package,
or there was problem checking if libyaml-devel is available / installed.\n'
Error installing EPEL, it is required for libyaml-devel,
either there was an error installing EPEL package,
or there was problem checking if libyaml-devel is available / installed.
++ return 127
Requirements installation failed with status: 127.
対処法:libyaml-develをインストール
$ yum install libyaml-devel
エラー4
bash-4.1# yum install libyaml-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
No package libyaml-devel available.
Error: Nothing to do
対処法:epelのリポジトリを追加
$ rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
エラー5
# rvm use ruby-1.9.2-head
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for a example.
対処法1:ログインしなおす
/bin/bash --login
対処法2:設定を読み込む
source "/usr/local/rvm/scripts/rvm"
http://stackoverflow.com/questions/9336596/rvm-installation-not-working-rvm-is-not-a-function
エラー6
Warning! Requested ruby installation which requires another ruby available - installing one first.
To proceed rvm requires a ruby-1.9|ruby-2 compatible ruby is installed.
We attempted to install ruby automatically but it failed.
Please install it manually (or a compatible alternative) to proceed.
対処法:2.1.1を先に入れる
rvm install ruby-2.1.1
更新履歴
インストール手順が変わっていたので修正しました。(2015/02/14)
インストールできるrubyのバージョンを表示するコマンドを追加(2015/02/14)
centOSでubuntu環境のテストをするDocker
Dockerを使って実現します。
DockerはVMwareやVirtualBoxの用に仮想環境を作れるツールです。
詳しくはdockerで検索してください。わかりやすい記事がたくさん出てきます。
第8回Jenkins勉強会で「Jenkins with Docker」というLTをしました #jenkinsstudy - Yahoo! JAPAN Tech Blog
これから始める「DockerでかんたんLAMP環境 for CentOS」 - さくらのナレッジ
やりたいことは
- dockerでubuntuの仮想環境を作る
- その仮想環境でテストの実行する
です。
Dockerをインストール
Ubuntuのイメージを取得
Dockerfileの作成
デフォルトのubuntuのイメージではrubyが使えないので、rubyをインストールしたubuntuイメージを作成します。
ubuntu用のDockerfile
# ubuntu
FROM ubuntu:13.10
# author
MAINTAINER kashifuji
# workspace
WORKDIR /home/jenkins/docker/
# env
ENV HOME /home/jenkins/docker/
ENV PATH $PATH:/home/jenkins/docker/.rbenv/bin
# install git
RUN sudo apt-get install git-core -y
RUN sudo apt-get install curl -y
RUN sudo apt-get install gcc -y
RUN sudo apt-get install build-essential -y
RUN sudo apt-get install libssl-dev -y
# install rbenv
RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
RUN eval "$(rbenv init -)"
RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
RUN cd ~/.rbenv/plugins/ruby-build/; pwd; ./install.sh
RUN rbenv install 2.1.1
# for rails
RUN sudo apt-get install libsqlite3-dev -y
# added test file
ADD test.sh /home/jenkins/docker/test.sh
centOS用のDockerfile
# centos
FROM centos:6.4
# author
MAINTAINER kashifuji
# workspace
WORKDIR /home/jenkins/docker/
# env
ENV HOME /home/jenkins/docker/
ENV PATH $PATH:/home/jenkins/docker/.rbenv/bin
# install git
RUN yum install git -y
RUN yum install openssl-devel openssl -y
# install rbenv
RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
RUN eval "$(rbenv init -)"
RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
RUN cd ~/.rbenv/plugins/ruby-build/; pwd; ./install.sh
RUN rbenv install 2.1.1
# for rails
RUN yum install sqlite-devel -y
# added test file
ADD test.sh /home/jenkins/docker/test.sh
イメージの作成
ubuntuテスト環境のイメージの作成
sudo docker build -t kashi/ubuntu-13.10 ./setup/ubuntu-13.10/
centosテスト環境のイメージの作成
イメージの確認
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
kashi/centos-6.4 latest 3741fb61bea0 26 minutes ago 905.5 MB
kashi/ubuntu-13.10 latest 64097b639bf1 39 minutes ago 490.6 MB
ちゃんとイメージができています。
ubuntu環境にログイン
ログイン
OSを確認する
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 13.10
Release: 13.10
Codename: saucy
Ubuntuです!
rubyも使えるか確認
rbenvの設定を何もしてないのでrubyがないと怒られる
# ruby -v
rbenvの設定をする
# eval "$(rbenv init -)"
# rbenv local 2.1.1
# ruby -v
rubyも使えました!
ちなみに一度ログアウトするとコンテナが破棄されるので、rbenvを設定する前の状態に戻ります。
ログアウトする
# exitexit
ログインしなおす
$ sudo docker run -i -t kashi/ubuntu-13.10 /bin/bash
rbenvを設定する前の状態になっている
# ruby -v
※ログインとかログアウトは馴染みやすいので勝手にそう言ってます。
設定を保持しておきたいなら、Dockerfileに書くか、commitをしてイメージにすると可能です。
# docker commit CONTAINER ID レポジトリ
$ sudo docker commit 3b45d4eef673 kashi/ubuntu-13.10
CONTAINER IDはログイン中にdocker psを実行するかdocker ps -aで調べられます。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b45d4eef673 kashi/ubuntu-13.10:latest /bin/bash 6 minutes ago Up 6 minutes hopeful_lumiere
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b45d4eef673 kashi/ubuntu-13.10:latest /bin/bash 7 minutes ago Up 7 minutes hopeful_lumiere
テストの実行
作成したイメージを使ってテストをします。
# ubuntu環境でテスト
sudo docker run -t -v `pwd`/:/var/volume:rw kashi/ubuntu-13.10 /bin/bash test.sh
# centOS環境でテスト
$ sudo docker run -t -v `pwd`/:/var/volume:rw kashi/centos-6.4 /bin/bash test.sh
↑のコマンドはこんな動きをしてます
1.kashi/ubuntu-13.10のイメージを使ってコンテナを作成
2.コンテナ内で/bin/bash test.shを実行
jenkinsも一緒に使うともっと便利で、自動で環境を作ってテストしてくれます。
疑問点
作ったimageファイルをpushできそうなんですが、どうやってpush先を設定するんだろう。。
あとCentOS6.5とかdocker searchででないOSは使えないのだろうか。。
参考
http://docs.docker.io/en/latest/installation/rhel/
第8回Jenkins勉強会で「Jenkins with Docker」というLTをしました #jenkinsstudy - Yahoo! JAPAN Tech Blog
Dockerを使ってJenkinsのジョブごとにテスト実行環境を分離する - orangain flavor
docker のボリュームオプションを使った(Amazon Linux で docker 使えた!) - ようへいの日々精進 XP
memorycraft: Dockerってなんじゃ?(Dockerfileでビルド)
OpenSSLのHeartbleedバグ対応
詳しくはこちらを参照。
CVE-2014-0160 OpenSSL Heartbleed 脆弱性まとめ - めもおきば
CentOS6.5はopensslのバージョンをopenssl-1.0.1e-16.el6_5.7以上にする必要があります。
opensslのバージョンを上げる
$ openssl version
$ yum list updates
$ sudo yum update openssl
# 再起動
$ sudo reboot
# 確認
rbenvの対応
#ruby-buildを最新化
$ cd .rbenv/plugins/ruby-build/
$ git fetch
$ git pull
# ビルドし直す方法がわからなかったのでrubyを入れ直し
$ rbenv versions
1.9.3-rc1
2.0.0-p247
2.1.1
$ rbenv uninstall 1.9.3-rc1
$ rbenv uninstall 2.0.0-p247
$ rbenv uninstall 2.1.1
$ cat 41808.patch | rbenv install --patch 1.9.3-rc1
$ cat 41808.patch | rbenv install --patch 2.0.0-p247
$ rbenv install 2.1.1
ソースコードからRubyをコンパイルした場合
rbenvと同様にopensslをコンパイルし直し
$ cd ruby-1.9.3-p545/ext/openssl
$ ruby extconf.rb
$ sudo make install
rubyを使ったプログラムの再起動をしたらおしまい。
SSLの証明書を作るなどしていたら別途対応が必要。詳しくはここが参考になります。
参考
OpenSSL Severe Vulnerability in TLS Heartbeat Extension (CVE-2014-0160)
CVE-2014-0160 OpenSSL Heartbleed 脆弱性まとめ - めもおきば
rails_best_practicesでrailsのコードチェック
rails_best_practicesとは
rails_best_practices is a code metric tool to check the quality of rails codes
コード解析をしてくれるツールのようです。
便利そう。
物は試しということで、インストールして使ってみます。
インストール
gemなのでgem installかGemfileに記述します。
テストで使うのでgroupはtestにしました。
$ vim Gemfile
…
gem "rails_best_practices", :group => :test$ bundle install
実行
コマンドラインから実行します。
bundle exec rails_best_practices .
結果
$ bundle exec rails_best_practices .Source Codes: |================================================================|C:/Users/hogehoge/git/test/app/helpers/con1_helper.rb:1 - remove empty helpersPlease go to http://rails-bestpractices.com to see more useful Rails Best Practices.Found 1 warnings.-----------------------------------
修正
app/helpers/con1_helper.rbを削除して再度コードチェック
$ bundle exec rails_best_practices .
Source Codes: |================================================================|
Please go to http://rails-bestpractices.com to see more useful Rails Best Practices.
No warning found. Cool!
Cool!
jenkinsおじさんもCoolです!
参考資料
The Ruby Toolbox - Code Metrics
railsbp/rails_best_practices · GitHub
rbenvで複数バージョンのRubyを使う
rbenvを使ってruby 1.9.3-rc1、2.0.0-p247、2.1.1を使い分けられるようにします。
■rbenvのインストール
rbenv本体をインストール
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
PATHの設定
# rbenv
export PATH=$PATH:$HOME/.rbenv/bin
eval "$(rbenv init -)"
確認
$ type rbenv
rbenv is a function
…
■ruby-buildプラグインをインストール
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ cd ~/.rbenv/plugins/ruby-build/$ sudo ./install.sh
インストールしないとrbenv installコマンドが使えません。
$ rbenv install
rbenv: no such command `install'
■インストール
2.1.1のインストール
$ rbenv install 2.1.1
すんなり入りました。
1.9.3のインストール
$ rbenv install 1.9.3-rc
…
ossl_pkey_ec.c:761: 警告: assignment makes pointer from integer without a cast
ossl_pkey_ec.c:815: error: ‘EC_GROUP_new_curve_GF2m’ undeclared (first use in this function)
ossl_pkey_ec.c:815: error: (Each undeclared identifier is reported only once
ossl_pkey_ec.c:815: error: for each function it appears in.)
opensslのエラーでインストールできないらしいので、パッチを使ってインストールします。
$ curl -fsSL https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/41808/diff?format=diff > 41808.patch
ChangeLogのところを手動で削除します$ vim 41808.patch
出来上がったパッチファイル
$ cat 41808.patch
===================================================================--- ext/openssl/ossl_pkey_ec.c (revision 41807)+++ ext/openssl/ossl_pkey_ec.c (revision 41808)@@ -762,8 +762,10 @@method = EC_GFp_mont_method();} else if (id == s_GFp_nist) {method = EC_GFp_nist_method();+#if !defined(OPENSSL_NO_EC2M)} else if (id == s_GF2m_simple) {method = EC_GF2m_simple_method();+#endif}if (method) {@@ -817,8 +819,10 @@if (id == s_GFp) {new_curve = EC_GROUP_new_curve_GFp;+#if !defined(OPENSSL_NO_EC2M)} else if (id == s_GF2m) {new_curve = EC_GROUP_new_curve_GF2m;+#endif} else {ossl_raise(rb_eArgError, "unknown symbol, must be :GFp or :GF2m");}Index: test/openssl/test_pkey_ec.rb===================================================================--- test/openssl/test_pkey_ec.rb (revision 41807)+++ test/openssl/test_pkey_ec.rb (revision 41808)@@ -7,28 +7,28 @@@data1 = 'foo'@data2 = 'bar' * 1000 # data too long for DSA sig- @group1 = OpenSSL::PKey::EC::Group.new('secp112r1')- @group2 = OpenSSL::PKey::EC::Group.new('sect163k1')- @group3 = OpenSSL::PKey::EC::Group.new('prime256v1')+ @groups =+ @keys =- @key1 = OpenSSL::PKey::EC.new- @key1.group = @group1- @key1.generate_key+ OpenSSL::PKey::EC.builtin_curves.each do |curve, comment|+ group = OpenSSL::PKey::EC::Group.new(curve)- @key2 = OpenSSL::PKey::EC.new(@group2.curve_name)- @key2.generate_key+ key = OpenSSL::PKey::EC.new(group)+ key.generate_key- @key3 = OpenSSL::PKey::EC.new(@group3)- @key3.generate_key-- @groups = [@group1, @group2, @group3]- @keys = [@key1, @key2, @key3]+ @groups << group+ @keys << key+ endenddef compare_keys(k1, k2)assert_equal(k1.to_pem, k2.to_pem)end+ def test_builtin_curves+ assert(!OpenSSL::PKey::EC.builtin_curves.empty?)+ end+def test_curve_names@groups.each_with_index do |group, idx|key = @keys[idx]
パッチを使ってインストール
cat 41808.patch | rbenv install --patch 1.9.3-rc1
今度はインストールできました。
エラーが出る場合はyumで該当のものを入れるとよさげです。
/home/kashifuji/.rbenv/plugins/ruby-build/bin/ruby-build: line 849: patch: コマンドが見つかりません
$ sudo yum install patch$ sudo yum install autoconf$ sudo yum install byacc$ sudo yum install zlib-devel$ sudo yum install openssl-devel$ sudo yum install libyaml-devel$ sudo yum install ImageMagick-devel
ほかのバージョンも同じ手順でインストール
$ cat 41808.patch | rbenv install --patch 2.0.0-p247
$ cat 41808.patch | rbenv install --patch 1.9.3-p448
rbenvでrubyを切り替える
バージョンの確認$ rbenv versions* system (set by /home/kashifuji/.rbenv/version)1.9.3-p4481.9.3-rc12.0.0-p2472.1.1バージョンの切り替え$ rbenv local 1.9.3-rc1$ rbenv local 2.1.1$ ruby -v$ rbenv local --unset$ ruby -v
トラブルシューティング
1.rbenv install 2.1.1でインストール時にMissing the OpenSSL lib?と出た場合
$ rbenv install 2.1.1…BUILD FAILEDInspect or clean up the working tree at /tmp/ruby-build.20140511065604.7388Results logged to /tmp/ruby-build.20140511065604.7388.logLast 10 log lines:io-console 0.4.2json 1.8.1minitest 4.7.5psych 2.0.3rake 10.1.0rdoc 4.1.0test-unit 2.1.1.0installing rdoc: /home/kashifuji/.rbenv/versions/2.1.1/share/ri/2.1.0/systemThe Ruby openssl extension was not compiled. Missing the OpenSSL lib?
→ openssl-develをインストールするといいです。
$ sudo yum install openssl-devel
2. pachをつけて実行したときにエラーになった場合
$ cat 41808.patch | rbenv install --patch 1.9.3-rc1
…
Installing ruby-1.9.3-rc1...
/home/kashifuji/.rbenv/plugins/ruby-build/bin/ruby-build: line 852: patch: command not found
→ pachコマンドをインストールします
$ sudo yum install patch
参考資料
目次
目次です。
- インストール
- Gem
- rails_best_practicesでrailsのコードチェック
- RabbitMQでメッセージキューイングシステムを実現する
- Redmine
DB
- Riakのめも
RaspberryPi
- Raspberry Piでリアルアクセスカウンターを作る
環境
- centOSでubuntu環境のテストをするDocker
- chef
Windowsアプリ
redmineとgithubの連携
gituubとredmineの連携ができるようなので実験してみました。
こんな感じの画面がredmine上で出せます。
やりたいこと
・redmine上でgitを表示
1.push
開発機からGIthubにpush
にアカウントと公開鍵を登録して開発環境の準備をします
2.webhookの設定、3.リポジトリ更新設定、4.pull
を使って実現します。
■ミラーリポジトリを作成
Redmine と Git の連携設定 | EasyRamble を参考にリポジトリを作ります
RedmineとGithubの連携 - Qiita のredmineの設定を参考に、リポジトリを設定します
バージョン管理システム:git
識別子:適当に設定する
URL:/var/redmine/gitrepo/hogehoge.git
ファイルとディレクトリの最新コミットを表示する:チェックを入れる
■ redmine_github_hookプラグインをいれる
redmine_github_hookプラグインを追加します
必要なgemをインストール
$ vim Gemfilegem 'json' # これを追加
$ bundle install
プラグインの導入$ git clone git://github.com/koppen/redmine_github_hook.git ./plugins/redmine_github_hook
redmineのリスタート
$ bundle exec thin restart -e production -p 80
■githubのwebhook設定
この辺りを参考にwebhookの設定をします
HowTo keep in sync your git repository for redmine - Redmine
■鍵の作成
Yakst - Gitのリモート操作を5倍から50倍高速化するには
を参考にsshの鍵を作成します
秘密鍵と公開鍵を作成
$ cd ~/.ssh
$ ssh-keygen -t rsa -C "your_email@example.com"
公開鍵をgithubに登録
で出てきた鍵をアカウントのSSH KeysかリポジトリのDeploy keysに登録します
設定終わり。
あとは、開発環境からコミットすれば勝手にredmineと連携してくれます。