2009年7月 3日
Capistrano の本格導入
会社のlinux サーバの台数が多いため、Capistrano を導入しました。
テストではやっていたのですが早めに入れたほうがあとで楽できるかなとか思いながら導入。
さすがにCapistrano 用のアカウントを300台近く作るのは疲れました。
Capistrano で今後やること。
・アプリのインストール・アップデート(脆弱性があった場合など)
・ユーザアカウントの作成・削除
・ユーザアカウントのパスワード変更(半年に1回だかするらしい)
・設定ファイルの配置
・初期構築
すでにやってるもの
cron タスクの取得
shell でやる部分と、Capistrano でやる部分を考えながらある程度作りこめば、
いろいろと自動化できそう。
3時間とかかかっていた作業が1時間に減ると思う。
構築内容がわかってないとスクリプトとか作れないのがネック。
投稿者 hideki : 19:33 | コメント (0) | トラックバック
2009年6月10日
sudo でのroot 権限の有効範囲
Capistrano でsudo でコマンドをリダイレクトするときに、操作がうまくできなかったが
とりあえず動くようになったまでのメモ。
オライリー bash クックブックによると
sudo bash -c 'command1 && command2 || command3'
コマンドのリダイレクトの有効範囲を「' '」の間で可能らしい。
sudo bash -c 'echo 'nrpe 5666/tcp' >> /etc/service'
→nrpe を実行とかいう状態で書き込み失敗。
どうもスペースが入ってると都合が悪いらしい。スペースの無い内容だと書き込みができる。
たとえば
sudo bash -c 'echo 'root:/dev/null >> /etc/aliases'
の場合は問題なく書き込める。
なので、nrpe 5666/tcp を書いたファイルを/tmp とかにおいて読み込む。
sudo bash -c 'cat /tmp/hoge >> /etc/services'
→問題なく書けた。
sudo bash -c 'echo nrpe\t5666/tcp >> /etc/services'
で書けた。「\t」はtab の文字列。こんなんで良いんだね。
echo じゃなくて他の標準出力とかでやればできるのかもしれない。
これを「su -」 でroot になって同じことをすると書き込めるので 「sudo」の仕様なのかもしれない。
投稿者 hideki : 22:17 | コメント (0) | トラックバック
2009年5月28日
Capistrano でssh ユーザの自動作成
初期導入で結構だるい作業の自動化中
最初に、Capistrano 用にアカウントの作成を行う。
いままでコピペしてた作業が省略できた。
初めに、デプロイ先のサーバにログインして以下のようなアカウントを作成。
ssh-key -t rsa でssh key を作成しておく。
id_rsa id_rsa.pub ができる。
cp id_rsa.pub authorized_keys などとしておく。またデプロイ先にコピーします。
スクリプト内のecho 'ssh-rsa AAAAhoge......" に書く。
groupadd -g 1101 admin
useradd infra -g admin -u 1400
mkdir -m 700 -p /home/infra/.ssh
echo "ssh-rsa AAAAhoge................= infra@master" > /home/infra/.ssh/authorized_keys
chown -R infra:admin /home/infra/.ssh
chmod 600 /home/infra/.ssh/authorized_keys
#sudoers設定
echo "infra ALL=(ALL) ALL" >> /etc/sudoers
#SSH 設定-----------------------------------------------------
vi /etc/ssh/sshd_config
PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
PasswordAuthentication no
ChallengeResponseAuthentication no
------------------------------------------------------------------
/etc/init.d/sshd restart
config/deploy.rb
set :application, "ntp restart"
set :user, "hideki"
#set :password, "hogehoge"
set :use_sudo, false
set :default_run_options, :max_hosts => 1
default_run_options[:pty] = true
ssh_options[:config]=false
ssh_options[:auth_methods] = "publickey"
#ssh_options[:verbose] = :debugr
ssh_options[:forward_agent] = true
task :user_add do
user_key_add
user_add_hoge
end
task :user_key_add do
upload("key/ssh_key_hoge", "/tmp", :via => :scp, :max_hosts =>1)
end
task :user_add_hoge, :roles => [:server] do
sudo "/usr/sbin/useradd hoge -u 1105 -g admin -G wheel"
sudo "mkdir -m 700 -p /home/hoge/.ssh"
sudo "cp /tmp/ssh_key_hoge /home/hoge/.ssh/authorized_keys"
sudo "chmod 600 /home/hoge/.ssh/authorized_keys"
sudo "chown -R hoge:admin /home/hoge/.ssh"
end
あとはcap user_add で作成。
もっと楽な方法もあるぽいんだが、とりあえずはこれで( ・ω・)∩
upload でssh_key を送る方法に変えてみた。
投稿者 hideki : 23:42 | コメント (0) | トラックバック
2009年5月20日
Capistrano を使ってみる 定常作業の自動化
昨日テストで書いてたのだが、実際に使ってみると複数処理してるときにうまくいかなかった。
動くまでのメモ。
数百台試しに(ntpq -pのみ)やったけど普通に動くようになった。
もう少しrole をうまく使うことと、定常的にやっている作業の自動化をいろいろ作ろうと思う。
さすがにcrontab -l を見る作業を数百台、手動ログインで確認したら疲れるよね。
そのときにCapistrano が便利です。
自分の記事にPuppet を載せていますが、Puppet ,Ruby を数百台インストールして動作確認
を行うことを考えると結構きつい気がしてきました。
Ruby はできるだけやる内容を明確に書くだけって話でPuppet もRuby で作っていると
言われているが、使っている会社(オープンソース系)で利用されていますが、
情報もあまり無いような。(あるにはあるが使えるかは別)
自分としては、実際に使えて自分の時間を増やすことのできるこのようなツールの
使い方は公開していこうと思います。(自分の仕事が減ったらさむいが)
いろいろやっててて実際にntpd の再起動 と、 ntpq -p 動くようにしたときのdeploy.rb
set :application, "ntp restart"
set :user, "hideki"
#set :password, "hogehoge"
set :use_sudo, false
set :default_run_options, :max_hosts => 1
default_run_options[:pty] = true
ssh_options[:config]=false
ssh_options[:auth_methods] = "publickey"
#ssh_options[:verbose] = :debugr
ssh_options[:forward_agent] = true
role :server do
[
"192.168.2.1",
"192.168.2.2",
"192.168.2.3",
"192.168.2.4",
]
end
task :ntpd_restart, :roles => [:server] do
sudo "/etc/init.d/ntpd restart"
end
task :ntpq_chk, :roles => [:server] do
run "/usr/sbin/ntpq -p"
end
[ntpd の再起動]
cap -f deploy.rb ntpd_restart
Password: (sudo のパスワードを 入力)
[ntpq -p で動作確認]
cap -f deploy.rb ntpq_chk
一番最初に複数、role, roles で複数書いた場合に、動かないときがあった。
動く時もあったのですが、原因がわからずにいました。
ssh_options[:verbose] = :debug を追加することによってどこで止まっているかわかった。
run , sudo で実行してる際に複数動いてるとうまくいってなかったのですが、
:max_hosts => n を追加したところうまく動くようになった。
パラで動く必要は全然ないので、:max_hosts => 1 で問題ないのですが、数字を増やしたら
また動かなかった。実行環境によるのかもしれません。
set :default_run_options, :max_hosts => 1 で動かないとき、
task :ntpq_chk, :max_hosts => 1, :roles => [:server] do としても使えるのでこっちで実行。
投稿者 hideki : 00:10 | コメント (0) | トラックバック
2009年5月19日
Capistrano を使ってみる
最近、管理する台数が多くてデプロイツールが必要になってきていろいろしています。
puppet も検討にいれていたが、クライアント(Web,DB サーバ)にruby,puppet をインストールする
かと思うと気が遠くなる...
Capistrano は管理サーバに設定をすれば良いので管理は楽です。
ただし、管理するクライアントのユーザとパスワードをある程度統一されている必要がある。
とりあえず、ntp の再起動と、その後のntpq -p の確認までの手順。
Cent OS 5.x で行いました。
[管理サーバ]
ruby-1.8.7-p160.tar.bz2
rubygems-1.3.3.tgz
を用意します。
bzip2 -d ruby-1.8.7-p160.tar.bz2
tar xvf ruby-1.8.7-p160.tar
cd ruby-1.8.7-p160
./configure
./make
./make install
tar xvzf rubygems-1.3.3.tgz
ruby setup.rb
gem install capistrano
/root/deploy.rb
set :application, "ntp restart"
set :user, "hideki"
set :password, "hogehoge"
set :use_sudo, false
role :hoge1, "192.168.2.1"
role :hoge2, "192.168.2.2"
task :restart, :roles =>[:hoge1, :hoge2] do
sudo "/etc/init.d/ntpd restart;"
sudo "/usr/sbin/ntpq -p"
end
task :start, :roles =>[:hoge1, :hoge2] do
sudo "/etc/init.d/ntpd start;"
sudo "/usr/sbin/ntpq -p"
end
task :stop, :roles =>[:hoge1, :hoge2] do
sudo "/etc/init.d/ntpd stop;"
sudo "/usr/sbin/ntpq -p"
end
[ログイン先のサーバ]
/etc/sudoers
hideki ALL=(ALL) ALL
[管理サーバ]
cap -f deploy.rb restart
[root@localhost ~]# cap -f deploy.rb restart
* executing `restart'
* executing "sudo -p 'sudo password: ' /etc/init.d/ntpd restart;"
servers: ["192.168.2.1"]
[192.168.2.1] executing command
*** [err :: 192.168.2.1]
** [out :: 192.168.2.1] Shutting down ntpd:
** [out :: 192.168.2.1] [
** [out :: 192.168.2.1] OK
** [out :: 192.168.2.1] ]
** [out :: 192.168.2.1]
** [out :: 192.168.2.1] Starting ntpd:
** [out :: 192.168.2.1] [ OK ]
command finished
* executing "sudo -p 'sudo password: ' /usr/sbin/ntpq -p"
servers: ["192.168.2.1"]
[192.168.2.1] executing command
** [out :: 192.168.2.1] remote refid st t when poll reach delay offset jitter
** [out :: 192.168.2.1] =====================================================================
** [out :: 192.168.2.1] ntp1.jst.mfeed. .INIT. 16 u - 64 0 0.000 0.000 4000.00
** [out :: 192.168.2.1] ntp2.jst.mfeed. .INIT. 16 u - 64 0 0.000 0.000 4000.00
** [out :: 192.168.2.1] ntp3.jst.mfeed. .INIT. 16 u - 64 0 0.000 0.000 4000.00
command finished
と出力されればおkです。role などをうまく利用してグループ操作をすれば簡易化できそうです。
参考記事
http://www.howgry.com/page/view/id/56
http://doruby.kbmj.com/tacchi_on_rails/20080725/capistrano_1