2016年4月28日木曜日

yum の Local Repository に RabbitMQ をインストール

はじめに

みなさんミドルウェアのインストールってどうしてます?
わたしはディストリビューションのパッケージで用意されているのもをそのままインストールしています。
わたしの場合、CentOS なので yum でインストールすることになるのですが
yum でインストールするとだいたい最新のものでなかったりします。
わたしはどちらかというと開発者寄りなので、とりあえず開発ができれば少々古くても気になりません。
ところが yum で提供されていなかったりすると非常に困ってしまいます。
また、どうしても最新のものが使いた場合も同様です。
さぁどう考えるか?
まず他にだれか Repository を公開してくれていないか探します。
PostgreSQL は本家のサイトで最新の Repository を公開してくれているので助かります。
Samba4 は以前 SerNet というところのが使えたのですが 4.3 系から有償になったので使えません。
yum の Repository が見つからなかった場合、rpm を探します
無ければ泣く泣くソースからインストールになります。
手順どうりやればソースからインストールしても全然問題ないのですが
わたしの場合、Makefile の管理が悪いのでバーションアップに困って OS からやり直す場合が多いです。
(最近は VM を使っていたりするので OS からやり直すことは少なくなりました。
まぁ開発機なのでこれもOKかなと...
RabbitMQ は、EPEL で提供されているようですが
今回は、RabbitMQ の本家のサイトにある最新の rpm を利用しようと思います。
rpm はビルドこそしなくていいものの、その依存関係まではみてくれません。
RabbitMQ の場合、Erlang が依存関係にあるので
先にインストールしておくか、一緒にインストールしないといけません。
実際、この依存関係を調べるのもなかなかだったりします。
なにか、こう、一撃でインストールできる方法はないかと考えていたところ
yum の LocalRepository に至った訳です。
今回は、LocalRepository を使った RabbitMQ のインストールと
ユーザ設定などを中心に進めていきたいと思います。
ではでは!Getting Started!

環境

IP 192.168.10.110
ミドルウェア RabbitMQ server 3.6.1
  ユーザ  user01   パスワード  passwd
Apache 2.4.6
OS CentOS-7-x86_64-Minimal-1511.iso
VirtualBox 5.0.16


LocalRepository の作成

repository 作成のために creatrepo コマンドと LocalRepository を内部ネットワーク向けに
PrivateRepository として公開したいので Apache もインストールします。

yum install createrepo httpd

repository用のディレクトリを作成します。
mkdir -p /var/www/repo/centos/7/x86_64/rpms
場所はどこでもいいのですが、今回は、Apache のディレクトリの中に作成しました。

repository を作成します。
createrepo /var/www/repo/centos/7/x86_64
LocalRepository の作成としてはこんな感じです。

LocalRepository を yum の repository に追加します。
local.repo ファイルを以下のような内容で作成します。
/etc/yum.repos.d/local.repo
[local]
name=CentOS-$releasever - local
baseurl=file:///var/www/repo/centos/$releasever/$basearch
enabled=1
gpgcheck=0
protect=1
repo ファイルで使える変数
以下の変数が使えるようです。
  • $releasever
    Red Hat Linux のリリースバージョン
    $basearch
    システムのベースアーキテクチャー
    i686 と i586 は i386
    AMD64 と Intel64 は x86_64 など
    $arch
    CPU アーキテクチャー
    i586、i686、x86_64 など
以下のコマンドでリポジトリ一覧に LocalRepository が追加されていれば OK です。
LANG=C yum repolist

repo id             repo name           status
...
local/7/x86_64      CentOS-7 - local    0
...


PrivateRepository の作成

今度は、内部ネットワーク向けの PrivateRepository を作成したいと思います。
Repository のディレクトリは、先ほど作成した LocalRepository を流用します。
Repository のディレクトリを公開ディレクトリにする訳ですが
Apache の公開ディレクトリの設定方法にはいろいろあると思います。
今回は、手っ取り早く Apache の DocumentRoot の下に
LocalRepository のディレクトリのシンボリックリンクを張ります。
ln -s /var/www/repo/centos /var/www/html/centos 
念のため Apache を再起動します。
systemctl enable httpd
systemctl restart httpd

PrivateRepository の private.repo ファイルを以下のような内容で作成します。
/etc/yum.repos.d/private.repo
[private]
name=CentOS-$releasever - private
baseurl=http://192.168.10.110/centos/$releasever/$basearch
enabled=1
gpgcheck=0
protect=1

リポジトリ一覧に追加されているか確認します。
LANG=C yum repolist

repo id             repo name           status
...
private/7/x86_64      CentOS-7 - private  0
...


RabbitMQ のインストール

Repository が完成したところで RabbitMQ をインストールしたいと思います。 
LocalRepository と PrivateRepository のどちらを使ってもいいと思います。
Erlang が依存関係にあるのですが、これが EPEL での提供になっているようなので
先に EPEL の Repository を追加します。
yum install epel-release.noarch

RabbitMQ の rpm をダウンロードしてきて Local/PrivateRepository のディレクトリに置きます。
cd /var/www/repo/centos/7/x86_64/rpms
curl -o rabbitmq-server-3.6.1-1.noarch.rpm \
  http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm
Erlang のインストール
わたしの場合、Erlang は最新でなくても気にならないので EPEL のものにしました。
気になる場合はLocal/PrivateRepository に最新のものを持ってきて
一緒にインストールするのもよいと思います。
createrepo コマンドで Repository を再設定します。
createrepo /var/www/repo/centos/7/x86_64

yum のキャッシュをクリアします。
yum clean all

後は yum で RabbitMQ をインストール します。
yum install rabbitmq-server

サービスの設定をして終わりです。
systemctl enable rabbitmq-server
systemctl start rabbitmq-server


rabbitmqctl コマンドで RabbitMQ の設定

ユーザを作成します。
rabbitmqctl add_user user01 passwd
user01 ユーザを作成してパスワードを passwd にしています。

作成したユーザがリソースにアクセスできるように権限を付与します。
rabbitmqctl set_permissions -p / user01 ".*" ".*" ".*"
user01 がすべてのリソースに対して write と read の権限を付与しています。

ユーザ一覧、パスワード変更、削除など。
rabbitmqctl list_users
rabbitmqctl change_password user01 newpasswd
rabbitmqctl delete_user user01

ユーザタグの設定と削除。
rabbitmqctl set_user_tags user01 administrator
rabbitmqctl set_user_tags user01 administrator test
rabbitmqctl set_user_tags user01

権限一覧、ユーザ権限一覧、権限取り消しなど。
rabbitmqctl list_permissions -p /
rabbitmqctl list_user_permissions user01
rabbitmqctl clear_permissions -p / user01

Queue、Exchange、Binding の一覧。
rabbitmqctl list_queues -p / name durable messages
rabbitmqctl list_exchanges -p / name durable type
rabbitmqctl list_bindings -p / source_name source_kind destination_name destination_kind routing_key
詳しいコマンドのパタメータについては man 参照。

ManagementPlugin を有効にする

Queue や Exchange などを Web 画面から管理できる ManagementPlugin を有効にします。

rabbitmq-plugins enable rabbitmq_management
Web の管理コンソール を利用できるように tag を使ってユーザに Role を設定します。
rabbitmqctl set_user_tags user01 administrator
Web の管理コンソールを開く前に一旦、RabbitMQ サーバーを再起動させます。
systemctl stop rabbitmq-server
systemctl start rabbitmq-server
ブラウザから「http://192.168.10.110:15672/」にアクセスします。
先ほどの Role を設定したユーザでログインできれば OK です。

CommandLineTool も合わせてインストールしておきます。
インストール方法としては、Web の管理コンソールのページから rabbitmqadmin のスクリプトを
ダウンロードしてきて /usr/local/bin に置くといった流れになります。
cd /usr/local/bin
curl -o rabbitmqadmin http://localhost:15672/cli/rabbitmqadmin
chmod 755 rabbitmqadmin
各コマンドのヘルプが表示されればインストールは、OK です。
rabbitmqadmin --help
rabbitmqadmin help subcommands
rabbitmqadmin help config

さらに CommandLineTool の bash 補完を有効にしておきます。
bash-completion がインストールされていない場合は、yum でインストールした後、
CommandLineTool の bash 補完を有効にします。
yum install bash-completion

rabbitmqadmin --bash-completion > /etc/bash_completion.d/rabbitmqadmin
再ログイン後に有効になるようです。
以下のように入力して
rabbitmqadmin he
「TAB」キーを押すと
rabbitmqadmin help
のように補完されれば OK です。


おわりに

とりあえず、わたしの Makefile 紛失問題は解決しそうです。
rpm の管理もいい感じに yum で一元化できるかなぁと思いました。
参考URL
https://wiki.centos.org/HowTos/CreateLocalRepos
http://www.serverlab.ca/tutorials/linux/network-services/creating-a-yum-repository-server-for-red-hat-and-centos/
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Yum_Variables.html
http://www.rabbitmq.com
http://www.rabbitmq.com/man/rabbitmqctl.1.man.html