rpm

上田さん後藤さん、「フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門」発売決定おめでとうございます!私は勝手にこれを記念しまして、シェルスクリプト一撃インストールシリーズ第2弾、今回もさくらのクラウドで、「ログイン後に一発シェルスクリプトを叩くだけでRedMineを動かす」をやってみました。

一撃インストールシリーズとは

chefもpuppetもDockerfileも使わず、シェルスクリプトと設定ファイルのひな形を用意すれば、コマンドを1回実行するだけで環境構築ができてしまうというスグレモノ。学校で、職場で家庭で商店で、是非お試しいただければと思います。

第1弾のWordPressはこちらをご確認くださいね。前提条件となる環境構築はこちらで取り上げたスタートアップスクリプトを実行済みであることとします。また、RedMineのインストールバージョンなどはこちらに合わせてあります。

■ 仕様

  • WEBサーバはNginx+Unicorn。RedMineはデーモンとして動かす
  • NginxはCentALTリポジトリからインストールする
  • Rubyは ftp://ftp.ruby-lang.org/pub/ruby/ からRedmine推奨バージョンをダウンロードし、rpmbuildでrpm化する
  • ドキュメントルートは /home/vhosts/IPアドレス/public_html (今回はドキュメントルートへのコンテンツ配置を省略します)
  • アクセスログは /home/logs/IPアドレス/ 以下に保存
  • Nginx全体のアクセス制御(IPアドレスによる制限) は /etc/nginx/denyhosts で行う
  • /etc/logrotate.d/nginx のローテーション対象ログに、バーチャルホストのアクセスログを含め、366世代保管にする
  • MySQLのrootパスワード、RedMine用ユーザのパスワードはインストール時に生成する
  • RedMine用のDB名、ユーザ名は変数で指定する
  • キックするシェルスクリプトの他には、/etc/nginx/conf.d/default.conf の元ファイル、/etc/nginx/denyhostsの元ファイル、rubyのrpm作成用specファイル、rubyダウンロードスクリプト、RedMineのスタートスクリプトを準備し、シェルスクリプトと同じディレクトリにアップロードする

さくらのクラウドには、RedMine用のインスタンスもありますが、Apacheとの連携だったので、どうせだったらNginxと連携させてみたいなー、というのがやってみたキッカケになります。なお、RedMineのデフォルトユーザ「admin/admin」でログインするところまでしか確認してませんので、インストール後はすぐにパスワードを変更しましょう。また、MySQLも mysql_secure_installation コマンドで最低限のセキュリティ設定を行いましょう!

 

■ デプロイ対象一覧

今回は6つのファイルをホームディレクトリへアップロードしますので、それぞれのファイルについて、役割を表にして整理したいと思います。

INSTALLER  インスタンス起動〜yumアップデートからの再起動後にsshログインして実行するスクリプト
ruby.spec.orig ~/rpm/SPECS/ディレクトリ配下に置くspecファイルの元ファイル
rubycheck rubyの公式FTPサイトにあるアーカイブ一覧を取得するために使用するスクリプト
900_denyhosts Nginxのアクセス制御ファイル
901_nginx.conf Nginx設定ファイルのひな形
910_redmine-init RedMineのスタートスクリプト

次のページに続きます。 Redmine超入門 (日経BPムック)

nullpopopo96x96皆さんこんばんは。夜のシェル芸人 (っ´∀`)っ ゃー です。yumコマンドのhelpやmanを見るとわかるのですが、「-v」オプションをつけることで処理の詳細が見えて結構便利だったりします。ただでさえ依存関係のあるパッケージを一緒にインストールしてくれたりして便利なのですが、どのライブラリに依存してるかとかが見えるので、特にいろんなリポジトリを有効にしている環境だとトラブルシュートに重宝するでしょう(私は本当に必要なときだけenablerepoしていますが)。

[ec2-user@ip-10-100-248-210 ~]$ sudo yum -v install mailx
Loading "priorities" plugin
Loading "security" plugin
Loading "update-motd" plugin
Loading "upgrade-helper" plugin
Config time: 1.914
Yum Version: 3.2.29
Setting up Package Sacks
amzn-main                                                                                                                                       | 2.1 kB     00:00     
amzn-updates                                                                                                                                    | 2.3 kB     00:00     
pkgsack time: 4.020
rpmdb time: 0.000
Setting up Install Process
Obs Init time: 0.848
Resolving Dependencies
--> Running transaction check
---> Package mailx.x86_64 0:12.4-6.6.amzn1 will be installed
Checking deps for mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('config(mailx)', 'EQ', ('0', '12.4', '6.6.amzn1')) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libssl3.so(NSS_3.2)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libnss3.so(NSS_3.2)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libnss3.so(NSS_3.7)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libc.so.6(GLIBC_2.3.4)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libc.so.6(GLIBC_2.4)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libc.so.6(GLIBC_2.3)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libsmime3.so(NSS_3.6)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libc.so.6(GLIBC_2.2.5)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libnss3.so(NSS_3.4)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('rtld(GNU_HASH)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libc.so.6(GLIBC_2.7)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('/bin/sh', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libsmime3.so(NSS_3.2)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libgssapi_krb5.so.2(gssapi_krb5_2_MIT)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libc.so.6(GLIBC_2.11)(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libnspr4.so()(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libnss3.so()(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libc.so.6()(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libssl3.so()(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libsmime3.so()(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libplc4.so()(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
looking for ('libgssapi_krb5.so.2()(64bit)', None, (None, None, None)) as a requirement of mailx.x86_64 0:12.4-6.6.amzn1 - u
--> Finished Dependency Resolution
Dependency Process ending
Depsolve time: 20.668

Dependencies Resolved

=======================================================================================================================================================================
 Package                             Arch                                 Version                                        Repository                               Size
=======================================================================================================================================================================
Installing:
 mailx                               x86_64                               12.4-6.6.amzn1                                 amzn-main                               250 k

Transaction Summary
=======================================================================================================================================================================
Install       1 Package(s)

Total download size: 250 k
Installed size: 452 k
Is this ok [y/N]: y
Downloading Packages:
mailx-12.4-6.6.amzn1.x86_64.rpm                                                                                                                 | 250 kB     00:00     
Running rpm_check_debug
Member: mailx.x86_64 0:12.4-6.6.amzn1 - u
Adding Package mailx-12.4-6.6.amzn1.x86_64 in mode u
rpm_check_debug time: 0.127
Running Transaction Test
Member: mailx.x86_64 0:12.4-6.6.amzn1 - u
Adding Package mailx-12.4-6.6.amzn1.x86_64 in mode u
Transaction Test Succeeded
Transaction Test time: 2.975
Member: mailx.x86_64 0:12.4-6.6.amzn1 - u
Adding Package mailx-12.4-6.6.amzn1.x86_64 in mode u
Running Transaction
  Installing : mailx-12.4-6.6.amzn1.x86_64                                                                                                                         1/1 
  Verifying  : mailx-12.4-6.6.amzn1.x86_64                                                                                                                         1/1 
VerifyTransaction time: 3.930
Transaction time: 11.354

Installed:
  mailx.x86_64 0:12.4-6.6.amzn1                                                                                                                                        

Complete!

こんな感じで出力されます。

CentOS はRHELのクローンOSなので、Fedoraと違いパッケージは多少古くても安定したものを採用しています。このため、Rubyの最新版で開発しようとしてもソースからインストール・・・というのも、1台だけならまだしも多数インストールするとなると面倒くさい話です。そこで、最新版のRubyをrpmパッケージ化してしまおうというお話です。

CentOS 6.3にruby 1.9.3-p194 をインストールしようとした際、当初は checkinstall でのパッケージ化を試みましたが、docしかインストールされないパッケージが出来上がったりするなどして大ハマり。みんな「出来たー」「できたー」って言ってるけどそんなにハマらないものなのだろうか?と途方に暮れつつググったところ、 checkinstall ではなく rpmbuild で rpm を作成されていた方がいらっしゃいました

基本的には↑のサイトに書いてある通りの手順でできました。SPECファイルは lnxchk/ruby-1.9.3-rpm  を利用しましたが、マイナーバージョンだけ書き換えるだけでビルドが通ります。(※ 2012/08/06 現在) SPECファイルを取得するのに、gitをインストールしておくと何かと捗ります。

■ 必要なもの

OS: CentOS 6.3 (私はx86_64でビルドしました)
パッケージ: "Development Tools" を yum groupinstall でインストール
zlib-devel
openssl-devel
readline-devel
ncurses-devel
gdbm-devel
db4-devel
libffi-devel
tk-devel
libyaml-devel (※ EPELリポジトリからインストール)

以上、自分のやってみたメモでした。