harry’s memorandum

おれおれメモ

瞳孔が開くほど簡単にredmineを構築できる「Bitnami」 (2)

bitnamiネタで幾つか備忘録を残して置くつもりがすっかり忘れていました。
redmineAPIのテスト環境作るときに、複数テスト環境あると便利ですよね。bitnamiを使って1つのサーバーに簡単に複数redmineを作るTIPSを載せておきます。

構成

3つのredmineを1つのサーバーにインストールしてみます。以下はインストール先とポート番号です。最初のredmineがメインになります。

prefix http https mysql subversion
メインredmine /opt/release 80 443 33860 36900
サブredmine /opt/staging 80 443 33861 36901
サブredmine /opt/dev 80 443 33862 36902

インストール方法

メインredmineのインストール(/opt/release)

普通にインストールします。違うのはオプションでapachemysqlなどのポートを指定してインストールします。イントールが終わったらすぐにredmineのサービスを停止します。次のredmineをインストールする際にポートが衝突するからです。

$ ./bitnami-redmine-2.4.3-0-linux-x64-installer.run \
  --prefix /opt/release \
  --apache_server_port 80  \
  --apache_server_ssl_port 443 \
  --mysql_port 33860  \
  --subversion_port 36900 \
   --installer-language en

$ /opt/release/ctlscript.sh stop

こんな感じで次のredmineをインストールする際に、apacheやmysqやsubversionのポートを違うものにしてインストールすれば、1つのサーバーに複数redmineのインストールが可能です。

サブredmineのインストール(/opt/starging)

最初のredmineのインストールが終わったら2つ目をインストールします。

$ ./bitnami-redmine-2.4.3-0-linux-x64-installer.run \
  --prefix /opt/staging \
  --apache_server_port 80  \
  --apache_server_ssl_port 443 \
  --mysql_port 33861 \
  --subversion_port 36901 \
  --installer-language en

$ /opt/staging/ctlscript.sh stop

サブredmineのインストール(/opt/dev)

3つ目をインストールします。

$ ./bitnami-redmine-2.4.3-0-linux-x64-installer.run \
  --prefix /opt/dev \
  --apache_server_port 80 \
  --apache_server_ssl_port 443 \
  --mysql_port 33862 \
  --subversion_port 36902  \
  --installer-language en

$ /opt/dev/ctlscript.sh stop

設定方法

サブredmineapacheを起動しないようにします。

$ ls -l /opt/{staging,dev}/apache2/scripts/ctl.sh
-rwxr-xr-x 1 root root 2475 Feb 15 16:51 /opt/dev/apache2/scripts/ctl.sh
-rwxr-xr-x 1 root root 2491 Feb 15 16:47 /opt/staging/apache2/scripts/ctl.sh
$ mv /opt/dev/apache2/scripts/ctl.sh /opt/dev/apache2/scripts/ctl.sh.backup
$ mv /opt/staging/apache2/scripts/ctl.sh /opt/staging/apache2/scripts/ctl.sh.backup

メインredmineとサブredmineのサブディレクトリ名を変更

http://example/redmine -> http://example/release のようなURLでアクセス出来るようにします。修正は以下のように。

$ vim /opt/release/apps/redmine/conf/httpd-app.conf
<Directory "/opt/release/apps/redmine/htdocs/public">
    PassengerEnabled on
    Options -MultiViews
    AllowOverride All
    <IfVersion < 2.3 >
    Order allow,deny
    Allow from all
    </IfVersion>
    <IfVersion >= 2.3>
    Require all granted
    </IfVersion>
    #SetEnv RAILS_RELATIVE_URL_ROOT "/redmine"
    SetEnv RAILS_RELATIVE_URL_ROOT "/release"
    PassengerAppRoot "/opt/release/apps/redmine/htdocs"
    <IfModule pagespeed_module>
        ModPagespeedDisallow "*"
    </IfModule>
</Directory>

#PassengerPreStart http://127.0.0.1:80/redmine
PassengerPreStart http://127.0.0.1:80/release

面倒なのでsedで編集すると楽です。

$ sed -i -e "s@\"/redmine\"@\"/release\"@g" -e "s@80/redmine@80/release@g" /opt/release/apps/redmine/conf/httpd-app.conf
$ sed -i -e "s@\"/redmine\"@\"/staging\"@g" -e "s@80/redmine@80/staging@g" /opt/staging/apps/redmine/conf/httpd-app.conf
$ sed -i -e "s@\"/redmine\"@\"/dev\"@g"     -e "s@80/redmine@80/dev@g"     /opt/dev/apps/redmine/conf/httpd-app.conf

Aliaseの設定を変更

$ vim /opt/release/apps/redmine/conf/httpd-prefix.conf
#Alias /redmine/ "/opt/release/apps/redmine/htdocs/public/"
#Alias /redmine "/opt/release/apps/redmine/htdocs/public"
Alias /release/ "/opt/release/apps/redmine/htdocs/public/"
Alias /release "/opt/release/apps/redmine/htdocs/public"

Include "/opt/release/apps/redmine/conf/httpd-app.conf"

これも面倒なのでsedで編集すると楽です。

$ ls -l /opt/*/apps/redmine/conf/httpd-prefix.conf
-rw-r--r-- 1 root daemon 161 Feb 15 16:56 /opt/dev/apps/redmine/conf/httpd-prefix.conf
-rw-r--r-- 1 root daemon 173 Feb 15 16:48 /opt/release/apps/redmine/conf/httpd-prefix.conf
-rw-r--r-- 1 root daemon 173 Feb 15 16:52 /opt/staging/apps/redmine/conf/httpd-prefix.conf
$ sed -i -e "s@Alias /redmine@Alias /release@g" /opt/release/apps/redmine/conf/httpd-prefix.conf
$ sed -i -e "s@Alias /redmine@Alias /staging@g" /opt/staging/apps/redmine/conf/httpd-prefix.conf
$ sed -i -e "s@Alias /redmine@Alias /dev@g"     /opt/dev/apps/redmine/conf/httpd-prefix.conf

Includでconfを統合

メインredmineのbitnami-apps-prefix.confでサブredmineのconfをincludeします。

$ vim /opt/release/apache2/conf/bitnami/bitnami-apps-prefix.conf
# Bitnami applications installed in a prefix URL
Include "/opt/release/apps/phpmyadmin/conf/httpd-prefix.conf"
Include "/opt/release/apps/redmine/conf/httpd-prefix.conf"
# add
Include "/opt/staging/apps/redmine/conf/httpd-prefix.conf"
Include "/opt/dev/apps/redmine/conf/httpd-prefix.conf"

redmineを起動

サブredmineから起動します。

$ /opt/staging/ctlscript.sh start
$ /opt/dev/ctlscript.sh start
$ /opt/release/ctlscript.sh start

メインredmineとサブredmineへアクセス

以下へアクセスできれば成功です。

アウトバンド管理 (Out-of-band Management)のメモ

アウトバンド管理というのが一般的なのか、リモートKVMスイッチというのが一般的なのかわからないけど、今まではHPのiLOシリーズを使っていたけど、DELLCISCOにも似たようなのがあるんだな、ということでメモをしておきます。

アウトバンド管理って何よ?

ハードウェアに組み込まれたリモートアクセスコントローラーです。大手のサーバーベンダーではLAN経由でアクセスすることが多いです。リモートから、BIOS/EFIを変更、リブート、仮想DVDでISOをマウントしてOSをインストール、インベントリ情報取得など、遠隔操作で色々できます。

Hewlett-Packard

HP Integrated Lights-Out (iLO)

f:id:dharry:20140212030750p:plain
http://h50146.www5.hp.com/products/servers/proliant/essentials/ilo-adv_sh.html
アイロと読みます。たまに業者さんがエルアイオーと言う時がありますが、どっちでもいい気がします。

CISCO

Cisco Integrated Management Controller (CIMC)

f:id:dharry:20140212030735p:plain
http://www.cisco.com/web/JP/campaign/123_ucsc/management.html
シスコのユニファイドコンピューティングシステムに搭載されているやつですね。

DELL

Integrated Dell Remote Access Controller (iDRAC)

f:id:dharry:20140212030800p:plain
http://www.dell.com/learn/jp/ja/jpbsd1/campaigns/dell-poweredge-idrac6
アイドラックと読むことが多いです。

IBM/Lenovo

Integrated Management Module (IMM)

f:id:dharry:20140212030952p:plain
http://www-06.ibm.com/jp/domino04/pc/support/Sylphd07.nsf/jtechinfo/SYJ0-0183244
使ったことがないのでよくわからない。

Fujitsu

Remote Management Controller (iRMC)
f:id:dharry:20140212030827p:plain
http://jp.fujitsu.com/platform/server/primergy/svs/pdf/maintain04-irmc-setting.pdf
これも使ったことがない。さくらの専用サーバはこれみたい。

TWINBIRD サイクロンスティック型クリーナー TC-E117W

TWINBIRD サイクロンスティック型クリーナー ホワイト TC-E117W というのを購入しました。
実家用にたまに使う掃除機だから3,130円の掃除機をチョイス。
2014年1月1日の朝3時ぐらいにポチって1月2日の午前中に届きました。いい時代になりましたよ。

TWINBIRD サイクロンスティック型クリーナー ホワイト TC-E117W

TWINBIRD サイクロンスティック型クリーナー ホワイト TC-E117W


組み立ては説明書はまったく必要ないぐらい簡単です。
f:id:dharry:20140102154438j:plain
f:id:dharry:20140102154440j:plain


コードレスじゃないのでコードが鬱陶しいです。ヘッドもあまり快適な動きじゃないです。
でも値段から考えると十分だと思います。吸引力はそこそこあるし、スティック型なので、隅に置いておけば邪魔にならないです。少し掃除したところ結構なゴミが。写真じゃわかりにくいけど、3000円程度にしてはよいお買い物だと思います。
f:id:dharry:20140102154434j:plain

俺的に最強のクリップボード履歴とメモツール

Windows/Office武勇伝 <Surface Proが当たる! 開発者グループOPENキャンペーン>

競馬の予想ソフトが欲しくて、VAIO PCV-T510R というやつを買ったのがWindowsとの初対面でした。Windows98は本当に脆いOSで結構泣かされました。いまはSurface Proが欲しいので自分の使っているWindowsツールを紹介します。

はたくり + EvMEMO
この2つの組み合わせが最強です。いくつか最強な理由を述べていきます。

動作が軽い

搭載メモリが32GBでも、高速SSDに換装しても、CPUがHaswellでも、やっぱり軽いアプリが一番です。はたくり+EvMEMOはWindows95で動かしても十分な軽さでした。

はたくり

f:id:dharry:20130914003143p:plain
クリップボード履歴です。viキーバインドが使えます。これは強い。履歴を "j" で移動して "yy" でヤンクや、いらない履歴を "dG" で全部消したりできます。香り屋さんのvimのバッファを使いつつ、はたくりでWindowsのクリップボードを駆使すると、もうコピーペーストだけしかしていない気分になれます。
また、はたくりは、ctrl-qで表示して、Escでタスクトレイに隠れてくれます。左手だけで完結します。

EvMEMO

f:id:dharry:20130914003152p:plain
ただのシンプルなメモツールです。これの強みはalt-zで表示して、Escでタスクトレイに隠れると同時に保存してくれるところです。*1はたくり、EvMEMO、どちらもEscで閉じることができるのは嬉しいです。



理由を色々つけましたが、結局は慣れたツールが一番ですね。

*1:設定でescで閉じるにチェックを入れる必要があります

rubyでQRコード生成

ライブラリはたくさんあって何を使えばいいのやら。いくつか試して良さそうなものを。

rqrcode

インストール

rqrcodeとrqrcode_pngは一緒にいれると便利。

 $ gem install rqrcode
 $ gem install rqrcode_png
require 'rubygems'
require 'rqrcode'
require 'rqrcode_png'

qr = RQRCode::QRCode.new('hoge', :size => 4, :level => :h )
png = qr.to_img
#png.resize(90,90).save("hoge0.png")
png.save("hoge0.png")

barby

インストール

ネーミングセンスいいですよね。QRコードだけでなく一次元コード(バーコード)も色々できたり。

require 'rubygems'
require 'barby'
require 'barby/barcode/qr_code'
require 'barby/outputter/png_outputter'

qr = Barby::QrCode.new('hoge', { :size => 4, :level => :h })
File.open('hoge1.png', 'w'){|f|
  f.write qr.to_png
}

やりたかったこと

QRコードで資産データシールを作りたいだけなんですね。

require 'rubygems'
require 'fileutils'
require 'RMagick'
require 'rqrcode'
require 'rqrcode_png'

text = "hoge"
qrimage = text + "-tmp.png"

width, height = 100, 100

qr = RQRCode::QRCode.new(text, :size => 4, :level => :h )
png = qr.to_img
png.resize(width, height).save(qrimage)

height += 20 # margin

image = Magick::Image.read(qrimage).first
image = image.change_geometry("#{width}x#{height}") do |cols,rows,img|
  img.resize!(cols, rows)
  img.background_color = 'white'
  img.extent(width, height)
end

draw = Magick::Draw.new
draw.annotate(image, 0, 0, width / 2 , 110, "id: #{text}") do
  self.fill = '#000000'
  self.align = Magick::LeftAlign
  self.stroke = 'transparent'
  self.pointsize = 10
  self.text_antialias = true
  self.kerning = 1
end
image.write(text + ".png")
FileUtils.rm(qrimage, {:force => true})

f:id:dharry:20130909002150p:plain

やっつけ感が拭いきれませんが、とりあえず目的は達成できました。時間があるときにrqrcodeやRMagickをもっと掘り下げて見たいと思います。