capistranoをほんのちょっと動かしてみる②(サーバ情報外だし)
(1)ではすべての情報を./config/deploy/manage.rbに記載した。 今回は./config/servers.rbにサーバ情報を記載。 ./config/deploy/manage.rb実行時に./config/servers.rbをロードするようにする。 また、capistranoは並列処理が出来るので2サーバを定義するようにする。
変更したのは下記の2ファイルのみ。 ./config/deploy/manage.rb ./config/servers.rb
./config/deploy/manage.rbの中身
# サーバ情報を記載した./config/servers.rbをロードするように変更
load './config/servers.rb'
task :mkdir do
dir = '/root/test'
on roles( :client ) do
execute "mkdir -p #{dir}"
execute "ls -ld #{dir}"
end
end
./config/servers.rbの中身。
SSHKit::Backend::Netssh.configure do |ssh|
ssh.ssh_options = {
:user => 'root',
:password => '****',
}
end
# roleにホスト名がchefとopenvzの複数を指定するように変更してみた。
role :client, %w{chef openvz}
実行してみる。
$ cap manage mkdir
INFO [424865a2] Running /usr/bin/env mkdir -p /root/test on openvz
INFO [cd281711] Running /usr/bin/env mkdir -p /root/test on chef
DEBUG [cd281711] Command: mkdir -p /root/test
DEBUG [424865a2] Command: mkdir -p /root/test
INFO [424865a2] Finished in 0.121 seconds with exit status 0 (successful).
INFO [874e0841] Running /usr/bin/env ls -ld /root/test on openvz
DEBUG [874e0841] Command: ls -ld /root/test
DEBUG [874e0841] drwxr-xr-x 2 root root 4096 Jul 7 02:15 /root/test
INFO [874e0841] Finished in 0.023 seconds with exit status 0 (successful).
INFO [cd281711] Finished in 0.325 seconds with exit status 0 (successful).
INFO [025e36b7] Running /usr/bin/env ls -ld /root/test on chef
DEBUG [025e36b7] Command: ls -ld /root/test
DEBUG [025e36b7] drwxr-xr-x. 2 root root 4096 Jul 7 01:36 /root/test
INFO [025e36b7] Finished in 0.034 seconds with exit status 0 (successful).
mkdirコマンドなどが並列実行されているのを確認したら終わり。
capistranoをほんのちょっと動かしてみる①(mkdir実行)
capistrano2.x とcapistrano3.xではかなりコマンドや動きが違うように見えるのでちょっと動かしてみる。
やることはSSH接続で対象サーバにパスワードにてログインし、ディレクトリを作成するだけ。
ワークディレクトリを作成
mkdir cap-pro
雛形を作成
$ cd cap-pro/
$ cap install
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
create Capfile
Capified
ファイルを修正
./Capfileは修正しない。
# Load DSL and set up stages
require 'capistrano/setup'
# Include default deployment tasks
require 'capistrano/deploy'
# Include tasks from other gems included in your Gemfile
#
# For documentation on these, see for example:
#
# https://github.com/capistrano/rvm
# https://github.com/capistrano/rbenv
# https://github.com/capistrano/chruby
# https://github.com/capistrano/bundler
# https://github.com/capistrano/rails
# https://github.com/capistrano/passenger
#
# require 'capistrano/rvm'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
# require 'capistrano/bundler'
# require 'capistrano/rails/assets'
# require 'capistrano/rails/migrations'
# require 'capistrano/passenger'
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
./libディレクトリ配下は修正しない。
./config/deploy.rbの中身を下記以外削除する。 ※不要なのでバージョン情報のみ残す。
lock '3.4.0'
./config/deploy/manage.rbに実際にやりたいタスクを記載する。
# userがroot,パスワードが****にてログインさせる
SSHKit::Backend::Netssh.configure do |ssh|
ssh.ssh_options = {
:user => 'root',
:password => '****',
}
end
# chefというホスト名のサーバのロール名をclientとする
server 'chef', :roles => [ :client ]
# タスク名をmkdirにする
task :mkdir do
# dir変数を設定する
dir = '/root/test'
# ロール名がclientに対し,do~endまでに記載したコマンドを実行する
on roles( :client ) do
# mkdirとlsコマンドを実行する
execute "mkdir -p #{dir}"
execute "ls -ld #{dir}"
end
end
Capfileがあるディレクトリでcapコマンドを実行する。
$ cap manage mkdir
INFO [f7c8ab7c] Running /usr/bin/env mkdir -p /root/test on chef
DEBUG [f7c8ab7c] Command: mkdir -p /root/test
INFO [f7c8ab7c] Finished in 0.326 seconds with exit status 0 (successful).
INFO [54178f59] Running /usr/bin/env ls -ld /root/test on chef
DEBUG [54178f59] Command: ls -ld /root/test
DEBUG [54178f59] drwxr-xr-x. 2 root root 4096 Jul 7 01:36 /root/test
INFO [54178f59] Finished in 0.031 seconds with exit status 0 (successful).
cap : capistranoのコマンド manage: ./config/deploy/manage.rbを指定 mkdir : ./config/deploy/manage.rbにあるmkdirというタスクを指定
CentOSにcapistrano({か,きゃ}ぴすとら~の)をインストール
開発環境
OS:CentOS 6.5 ruby:2.2.2
ざっくりとした説明
capistranoをインストールしたサーバからクライアント(構築対象のサーバ)に対しSSH接続をして設定を行う。
そのため、クライアントの設定はSSH接続の許可のみ。
capistranoのインストールと設定
インストール
$ gem install capistrano
capistranoの拡張系をインストール
$ gem install capistrano_colors
$ gem install capistrano-ext
$ gem install capistrano-deploy
capistranoのバージョン確認
cap -v
Capistrano Version: 3.4.0 (Rake Version: 10.4.2)
Chef-soloにてrpmをビルド
開発環境
OS:CentOS6.6(64bit) ruby:2.2.2p95 rubygems:2.4.5 chef:12.4.0 cookbook:rpm
事前作業
ソースRPMとパッチを取得のレシピを作成 getpatch.rb
src_url = "http://vault.centos.org/6.5/os/Source/SPackages/openssl-1.0.1e-15.el6.src.rpm"
src_file = "openssl-1.0.1e-15.el6.src.rpm"
src_path = "/tmp/#{src_file}"
git_path = "/tmp/openssl"
patch_file = "openssl-1.0.1e-cve-2015-0293.patch"
patch_path = "#{git_path}/SOURCES/#{patch_file}"
rpm_path = "/root/rpmbuild/SOURCES/"
# ソースrpmをダウンロード
remote_file src_path do
not_if { File.exists?("#{src_path}") }
source src_url
end
# ソースの解凍
rpm_package "openssl_install" do
action :install
source "#{src_path}"
end
# gitコマンドを使用するためインストール
yum_package "git" do
not_if "rpm -qa | grep ^git"
action :install
end
# clone元ディレクトリを削除
execute "dir delete" do
only_if "test -d #{git_path}"
command <<-EOC
rm -rf #{git_path}
EOC
end
# gitでclone
git "/tmp/openssl" do
repository "https://github.com/ptudor/centos6-openssl"
revision "master"
action :sync
end
# パッチを展開先ソースディレクトリへコピー
execute "patch copy" do
not_if { File.exists?("#{rpm_path}/#{patch_file}") }
command <<-EOC
cp -fp #{patch_path} #{rpm_path}
EOC
end
# rpm-buildをインストール
yum_package 'rpm-build' do
not_if "rpm -qa | grep ^rpm-build"
action :install
end
# gccをインストール
yum_package 'gcc' do
not_if "rpm -qa | grep ^gcc"
action :install
end
作成したgetpatchレシピを実行
$ chef-solo -o rpm:getpatch
SPECファイルを編集※省略
ビルド用のレシピを作成 build.rb
src_file = "openssl.spec"
src_path = "/root/rpmbuild/SPECS/#{src_file}"
execute "rpm build" do
command <<-EOC
rpmbuild -ba #{src_path}
EOC
end
作成したbuildレシピを実行
$ chef-solo -o rpm:build
RPMパッケージにパッチを当てる方法
ソースRPMを取得し、バッチを追加後、RPMパッケージを作成する方法について デモを交えて説明していきます。
ソースRPMの取得
まず、元となるソースRPMを取得します。 今回は、opensslで実施したいと思います。
$ cd $ wget http://vault.centos.org/6.6/os/Source/SPackages/openssl-1.0.1e-30.el6.src.rpm
ソースRPMのインストール
ダウンロードしたソースRPMをインストールします。
$ rpm -vih openssl-1.0.1e-30.el6.src.rpm
正常終了すると、以下のフォルダが作成されます。
- SOURCES(ソースコード・パッチ格納ディレクトリ)
- SPECS(SPECファイル格納ディレクトリ)
パッチの取得
githubからパッチを取得し、SOURCESディレクトリにコピーします。
$ git install yum $ cd /tmp/ $ git clone https://github.com/ptudor/centos6-openssl $ cp -p /tmp/centos6-openssl/SOURCES/openssl-1.0.1e-cve-2015-0293.patch ~/rpmbuild/SOURCES/
SPECファイルの修正
以下の通り、パッチ定義を追加します。
vi ~/rpmbuild/SPECS/openssl.spec @@ -105,6 +105,7 @@ Patch104: openssl-1.0.1e-cve-2014-3509.patch Patch105: openssl-1.0.1e-cve-2014-3510.patch Patch106: openssl-1.0.1e-cve-2014-3511.patch +Patch107: openssl-1.0.1e-cve-2015-0293.patch License: OpenSSL Group: System Environment/Libraries @@ -231,6 +232,7 @@ %patch104 -p1 -b .tlsext-race %patch105 -p1 -b .adh-dos %patch106 -p1 -b .frag-downgrade +%patch107 -p1 -b .hoge sed -i 's/SHLIB_VERSION_NUMBER "1.0.0"/SHLIB_VERSION_NUMBER "%{version}"/' crypto/opensslv.h
RPMの作成
RPMをビルドするために必要となるパッケージをインストールします。
$ yum install rpm-build $ yum install gcc
ビルドの実行
SPECファイルを指定してビルドしてみます。
$ rpmbuild -ba SPECS/openssl.spec ... エラー: ビルド依存性の失敗: krb5-devel は openssl-1.0.1e-30.el6.x86_64 に必要とされています zlib-devel は openssl-1.0.1e-30.el6.x86_64 に必要とされています
openssl をビルドするのに必要なパッケージが足りないようなので追加します。
yum install krb5-devel zlib-devel
再びビルドを実行します。
$ rpmbuild -ba SPECS/openssl.spec ... 実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.4121ir + umask 022 + cd /root/rpmbuild/BUILD + cd openssl-1.0.1e + '[' /root/rpmbuild/BUILDROOT/openssl-1.0.1e-30.el6.x86_64 '!=' / ']' + rm -rf /root/rpmbuild/BUILDROOT/openssl-1.0.1e-30.el6.x86_64 + exit 0
無事に成功しました。
rpmbuild ディレクトリ配下を確認すると以下のディレクトリが確認できます。
- BUILD(ビルドする際に使用される作業用ディレクトリ)
- BUILDROOT()
- RPMS(ビルド後に生成されるRPM格納ディレクトリ)
- SOURCES(ソースコード・パッチ格納ディレクトリ)
- SPECS(SPECファイル格納ディレクトリ)
- SRPMS(ビルドにて生成されるソースRPM格納ディレクトリ)
RPMS ディレクトリ配下を確認すると、rpmが生成されていることが確認できます。
$ tree ~/rpmbuild/RPMS/ /root/rpmbuild/RPMS/ └── x86_64 ├── openssl-1.0.1e-30.el6.x86_64.rpm ├── openssl-devel-1.0.1e-30.el6.x86_64.rpm ├── openssl-perl-1.0.1e-30.el6.x86_64.rpm └── openssl-static-1.0.1e-30.el6.x86_64.rpm
WordPress での Markdown の書き方
WordPress でも Markdown の書き方について こちらの公式サイトを参考にまとめました。
https://en.support.wordpress.com/markdown-quick-reference/
強調
_斜体2_
斜体1 斜体2
__太字2__
太字1 太字2
リンク
リンクです。
注釈
Wordpress^1 の Markdown に関する説明です。
リスト
* アイテム2
- アイテム3
- アイテム4
- アイテム1
- アイテム2
- アイテム3
- アイテム4
番号リスト
2. アイテム2
- アイテム1
- アイテム2
引用
テキスト
ハイライト
テキスト
シンタックスハイライト
public class HelloWorld { public static void main (String args) { System.out.println("Hello World !!"); } } ~~~~
~~~~ public class HelloWorld { public static void main (String args) { System.out.println("Hello World !!"); } } ~~~~
public class HelloWorld {
public static void main (String[] args) {
System.out.println("Hello World !!");
}
}
```
public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World !!"); } }
public class HelloWorld {
public static void main (String[] args) {
System.out.println("Hello World !!");
}
}
```
public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World !!"); } }
見出し
## 見出し2
### 見出し3
#### 見出し4 ####
##### 見出し5 #####
###### 見出し6 ######
見出し1
見出し2
見出し3
見出し4
見出し5
見出し6
Mondo Rescue でバックアップ
サーバのフルバックアップを取っておこうと思い、Mondo Rescue を導入してみましたので手順を残します。
Mondo Rescue とは
Mondo Rescue は、GPLライセンスのディザスタリカバリするためのソフトウェアです。
Linux (i386, x86_64, ia64)、およびFreeBSD (i386)がサポートされています。
使用環境
CentOS 6.6 (64bit)
バックアップ手順
Mondo Rescue のインストール
OS丸ごとバックアップする為、MondoRescueを導入する。
まずは、Mondo Rescue 本体をインストールします。
$ su - root $ mv mondorescue.repo /etc/yum.repos.d/ $ wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondorescue.repo $ yum -y install mondo
Mondo Rescue でのバックアップで必要となるため、高速圧縮パッケージ(lzo)をインストールする。
$ vi /etc/yum.repos.d/dag.repo [dag] name=Dag RPM Repository for Red Hat Enterprise Linux baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag gpgcheck=1 gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt enabled=0 $ yum -y install lzop lzo --enablerepo=dag
バックアップ
バックアップ先ディレクトリとして /backup を作成する。
$ mkdir /backup
調査のため、バックアップ前のファイルサイズを調べます。
$ du -sh / 3.8G /
いよいよバックアップです。 以下の通り実行し、ISO形式でのバックアップとしました。
$ mondoarchive -Oi -d /backup -E /backup -p `hostname`-`date +%Y%m%d`
オプション | 説明 |
---|---|
-O | バックアップの実行 |
-V | バックアップファイルの検証 |
-c speed | CD-R にバックアップします。 |
-w speed | CD-RW にバックアップします。 |
-r | DVD にバックアップします。 |
-p prefix | ISOイメージ名を指定します。 設定しない場合、"mondorescue-n.iso"というファイル名で保存されます。 |
-i | ISO 形式でバックアップします。 |
-n | NFSを使用してバックアップします。 |
-t | テープストリーマにバックアップします。 |
-U | USBデバイスにバックアップします。 |
-D | |
-E "dir|..." | バックアップ対象から除外したいディレクトリを指定します。 |
-I "dir|..." | バックアップ対象に含めたいディレクトリを指定します。 |
-J file | バックアップ対象に含めたいディレクトリの一覧ファイルを指定します。 |
-N | マウントされているNFSを除外します。 |
-d dev|dir | バックアップ先のデバイス(CD/tape/USB)、またはディレクトリ(NFS/ISO)を指定します。 |
-g | GUI モードで実行します。 |
-k path | カーネルのフルパスを指定 |
-s size | バックアップする際の分割サイズを姉弟します。 |
-x 'dev ..' | バックアップしたい non-Linux パーティション(NTFS、BeOS 等)を指定します。 |
今回の場合、10分弱で完了しました。
バックアップファイルを確認しました。 ISO形式の場合、約1/2程度のサイズとなるようです。
$ ls -lh /backup 合計 1.8G -rw-r--r-- 1 root root 639M 7月 5 05:16 2015 sakura-vps-20150705-1.iso -rw-r--r-- 1 root root 642M 7月 5 05:19 2015 sakura-vps-20150705-2.iso -rw-r--r-- 1 root root 507M 7月 5 05:21 2015 sakura-vps-20150705-3.iso
バックアップを定期実行したいので、以下の通り、crontab に追記します。
$ vi /etc/crontab ... 0 5 * * * root mondoarchive -Oi -d /backup -E /backup -p `hostname`-`date +\%Y\%m\%d` && rm -f /backup/`hostname`-`date -d '1 day ago' +\%Y\%m\%d`*