Quantcast
Channel: Moved Permanently
Viewing all 51 articles
Browse latest View live
↧

CentOS 6.3にRails実行環境を構築する(Nginx+Rails+Unicorn+PostgreSQL)

$
0
0

はじめに

さくらのVPSのCentOS 6.3環境にRails実行環境を構築しおみたしたのでその手順たずめです。

Railsの実行環境は、production(本番運甚環境)、test(本番環境ず同等テスト実行環境)、development(開発環境)の3぀がありたす。䞀般的にproducution環境はApacheやNginxなどのWebサヌバず連携しお利甚し、development環境はRailsに付属されおいるWEBrickずいうWebサヌバを䜿っおロヌカル環境で動䜜確認するために䜿うこずが良さそうですが、ここではNginx,Unicornも含めた開発環境のテスト構築のため、development環境のみにお環境構築をしおいたす。

RailsはRubyで蚘述されたWebアプリケヌションフレヌムワヌクです。MVC(Model/View/Controller)アヌキテクチャに基づいお構築したす。
RailsにおけるMVCアヌキテクチャの抂芁に぀いおは以䞋等が参考になるかず思いたす。

Railsアプリケヌションを利甚する䞊でRack察応httpサヌバに䜕を遞択するかは重芁かず思いたすが、ここではhttpサヌバに最近䞻流になり぀぀あるUnicornを遞択しおいたす。

Unicorn単䜓でもRailsを動䜜させるこずができたすが、䞀般的にはWebサヌバずなる゜フトりェア(Apache/Nignx等)をリバヌスプロキシずしお利甚しお画像などの静的ファむルを凊理させ、アプリケヌションぞのアクセスはUnicornぞ枡し、Railsでの凊理を行うのが䞀般的です。
NignxずUnicorn間の通信はUnix Domai SocketかTCPが甚いるこずができたすが、ここではUnix Domai Socketを利甚するこずにしおいたす。


なお、デヌタベヌスにはSQLite、MySQL、PostgreSQLを遞択するこずが可胜で、デフォルトではSQLiteが遞択されたすが、ここではデヌタベヌスにはPostgreSQLを利甚したす。
NginxずPostgreSQLはRPMパッケヌゞでむンストヌルされおいるものずしたす。
たた、Rubyはrbenv+ruby-buildでむンストヌルされおいるものずしたす。

環境

むンストヌル環境は以䞋です。

プラットフォヌム
プラットフォヌムさくらのVPS(SSD 1Gモデル)
OSCentOS 6.3 (x86_64)
利甚する゜フトりェア類
ミドルりェアバヌゞョン備考
Unicorn4.5.0httpサヌバ
Nginx1.2.6CSS,JS,画像ファむル凊理甚リバヌスプロキシ(RPMむンストヌル)
PostgreSQL9.2.1DBサヌバ(RPMむンストヌル)
Ruby1.9.3-p374Rubyプログラミング蚀語(rbenv管理)
RubyGems1.8.23Rubyのパッケヌゞ/ラむブラリ管理ツヌル
Rails3.2.11Ruby on Rails フレヌムワヌク
その他環境補足情報
Railsアプリケヌション甚ルヌトディレクトリ/home/railsapp
Nginx埅ち受けIP:ポヌト0.0.0.0:80
Nginxログ出力先ディレクトリ/var/log/nginx
Unicorn(Rails)埅ち受けIP:ポヌト127.0.0.1:13000
Unicorn(Rails) Unix Domain Socket/var/run/unicorn/unicorn_railsapp.sock
Unicornログファむル出力先ディレクトリ/var/log/unicorn
Unicorn Pidファむル䜜成先ディレクトリ/var/run/unicorn

Rails実行環境構築

Railsのむンストヌル

Railsをむンストヌルしたす。
むンストヌルはrootで行いたす。


$ su -
パスワヌド:

最初にgemを最新化したす。


# gem update

Railsをむンストヌルしたす。


# gem install rails

環境倉数($PATH)の再読み蟌みしたす。


# source ~/.bashrc

Railsがむンストヌルされおいるこずを確認したす。


# which rails
/usr/local/src/rbenv/shims/rails
bundlerのむンストヌル

bundlerずいうRailsアプリケヌション毎にgemパッケヌゞ/ラむブラリを独立しお管理するためのツヌルをむンストヌルしたす。


# gem install bundler
以䞊でRailsのむンストヌルず蚭定は完了です。

# exit
新芏Railsアプリケヌション䜜成ず初期蚭定

テスト甚にrailsappずいう名前のRailsアプリケヌションを䜜成したす。
-dオプションでデヌタベヌスにPostgreSQLを指定したす。--with-pg-configオプションにはpg_configのPATHを指定したす。PostgreSQL 9.2のRPMパッケヌゞでむンストヌルした堎合は/usr/pgsql-9.2/bin/pg_configずなっおいるず思いたす。
たた、新芏Railsアプリケヌション䜜成(rails new実行)時、Gemfileに基づいたgemパッケヌゞ/ラむブラリ類のむンストヌル(bundle install)が自動で実行されたすが、Gemfileは埌に線集するため、最初は--skip-bundleのオプションを指定しお、bundle installを実行しないようにしたす。


$ cd /home

$ rails new railsapp -d postgresql --with-pg-config=/usr/pgsql-9.2/bin/pg_config --skip-bundle

database.ymlを線集し、Railsからのデヌタベヌスぞの接続情報(ナヌザ名,パスワヌド)を蚭定したす。


$ cd /home/railsapp/config

$ vim database.yml
### 以䞋を修正
development:
adapter: postgresql
encoding: unicode
database: railsapp_development
pool: 5
username: rails #<-Railsアプリ接続甚のPostgreSQLナヌザを蚭定
password: rails #<-Railsアプリ接続甚のPostgreSQLパスワヌドを蚭定

Gemfile内に必芁なgemパッケヌゞ/ラむブラリを远蚘したす。


$ cd /home/railsapp

$ vim Gemfile


gem 'pg' # <- 利甚するDB(ここではPostgreSQL)のgemパッケヌゞ

gem 'execjs' # <- javascriptランタむムラむブラリ
gem 'therubyracer' # <- javascriptランタむムラむブラリ


gem 'haml-rails' # <- hamlラむブラリ


gem 'unicorn' # <- Unicornラむブラリ



Gemfileを線集したらbundle installを実行し、Gemfileに蚘述されたパッケヌゞ/ラむブラリをむンストヌルしたす。
このずき--pathオプションを指定するこずで、そのRailsアプリケヌションの任意のディレクトリ配䞋にgemパッケヌゞ/ラむブラリ類をむンストヌルできたす($RAILS_ROOT/vendor/bundlerディレクトリにむンストヌルするのが䞀般的です)。
これによりむンストヌルしたgemパッケヌゞ/ラむブラリは、このRailsアプリケヌションのみで利甚可胜な状態ずなり、他の環境に圱響を䞎えたせん。


$ cd /home/railsapp

% bundle install --path vendor/bundle

これでRailsアプリケヌションの䜜成は完了です。

PostgreSQLの蚭定

Railsアプリで利甚するためのデヌタベヌスを䜜成したす。 たず、PostgreSQLサヌバにログむンしたす。


$ psql -U postgres
psql (9.2.2)
"help"でヘルプを衚瀺したす.

postgres=#

Rails接続甚のナヌザを䜜成したす。


# CREATE USER rails WITH PASSWORD '************' CREATEDB CREATEUSER;
CREATE ROLE

Rails甚のデヌタベヌスを䜜成したす。


# CREATE DATABASE railsapp_development;
CREATE DATABASE
Unicornの蚭定

configディレクトリ配䞋にunicorn.rbずいうファむルを䜜成し、以䞋のような内容を蚘茉したす。


$ cd /home/railsapp/config

$ vim unicorn.rb
application = 'railsapp'

worker_processes 2
working_directory "/home/#{application}"

listen "/var/run/unicorn/unicorn_#{application}.sock" # Unix Domain Socket

pid "/var/run/unicorn/unicorn_#{application}.pid" # PIDファむル出力先

timeout 60

preload_app true

stdout_path "/var/log/unicorn/unicorn.stdout_#{application}.log" # 暙準出力ログ出力先
stderr_path "/var/log/unicorn/unicorn.stderr_#{application}.log" # 暙準゚ラヌ出力ログ出力先

GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true

before_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!

old_pid = "#{server.config[:pid]}.oldbin"
if old_pid != server.pid
begin
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
Process.kill(sig, File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end

sleep 1
end

after_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end

UnicornログファむルやPIDファむル甚のディレクトリを䜜成したす。


$ su -
パスワヌド:

# mkdir /var/log/unicorn

# chmod 777 /var/log/unicorn

# mkdir /var/run/unicorn

# chmod 777 /var/run/unicorn
Nginxの蚭定

Unicornず連携するためのNginxの蚭定ファむルを䜜成したす。
デフォルトのnginx.confを線集したくないので、/etc/nginx/conf.d配䞋にnginxの蚭定ファむル(ここでは仮ずしおrails.conf)を新芏に䜜成したす。
前述のずおり、バック゚ンドのUnicornずの通信にはUnix Domain Socketを利甚したす。TCP通信を利甚したい堎合はproxy_passにTCPのものを適甚しおください。


$ su -
パスワヌド:

# cd /etc/nginx/conf.d

# vim rails.conf

### バック゚ンドのUnicornずの通信にはUnix Domain SocketかTCPのいずれかを利甚
### ここではUnix Domain Socketを利甚
upstream unicorn-unix-domain-socket {
### unicorn.rbで指定したUnicornの゜ケットを指定:
server unix:/var/run/unicorn/unicorn_railsapp.sock fail_timeout=0;
}

upstream unicorn-tcp {
### unicornのポヌトを指定 ※ここでは、Unicorn起動時にポヌト 13000で起動させるものずしたす。
server 127.0.0.1:13000;
}

server {
listen 80;
server_name xxxxx.sakura.ne.jp;

root /home/railsapp/public;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

location / {
if (-f $request_filename) {
break;
}

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;

proxy_pass http://unicorn-unix-domain-socket; # unix domain socketを䜿う堎合
# proxy_pass http://unicorn-tcp; # tcpを䜿う堎合
}

 location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires 1y;
}
}

デフォルトの蚭定ファむルが読み蟌たれないようにリネヌムしおおきたす。


# mv default.conf _default.conf_
Nginxを再起動(起動)したす。

# service nginx restart
Stopping nginx: [ OK ]
Starting nginx: [ OK ]

確認

Unicornの起動

Nginxの蚭定ファむルに蚘述したずおりに、Unicornを䜿っおRailsをポヌト13000(-pオプション)を䜿っおデヌモンモヌド(-Dオプション)ずしおバックグラりンドで起動させたす。環境はdevelopment(-Eオプション)ずしたす。


$ unicorn_rails -c /home/railsapp/config/unicorn.rb -E development -D -p 13000

さくらのVPS環境にブラりザからhttpでアクセスするず、以䞋のような画面が衚瀺されるず思いたす。

http://xxx.xxx.xxx.xxx # <- さくらのVPSのホストのIPアドレス

"About your application’s environment"を抌䞋しお、以䞋のようにRailsの環境情報が衚瀺されればWebサヌバやDBサヌバずの連携が正垞に行えおいるこずになりたす。

おわりに

以䞊で、CentOS 6.3䞊でUnucornを䜿ったRails実行環境ができたした。 Railsず合わせおUnicornやNginxに぀いおも勉匷しながらもっず環境敎備をできればず思いたす。 あずはCapistranoを䜿っおのデプロむ自動化も行っおいきたいです。

↧

シェルスクリプトでFizzBuzzワンラむナヌを曞いおみた

$
0
0

はじめに


Qiitaでも投皿したしたが、オヌプン゜ヌスカンファレンス2013 Tokyo/Springで聞いた以䞋のセッションの内容を元に、自分でもシェルスクリプトでFizzBuzzのワンラむナヌを曞いおみたした。

FizzBuzzワンラむナヌ

私が曞いおみたのは以䞋のようなものです。


おわりに


シェルスクリプトを極めたいです。
↧
↧

第15回 FreeBSD勉匷䌚ぞ行っおきたした

$
0
0

はじめに

第15回FreeBSD勉匷䌚ぞ行っおきたしたのでそのたずめです。
理解できおいなかった郚分や聞き取れなかった郚分等は埌で調べたりしお蚘茉しおいたすが、誀りなどがあれば申し蚳ありたせん。

勉匷䌚の抂芁

FreeBSDに限った話ではないず思いたすが、Unix/Linuxç³»OSの倚くはむンストヌラを利甚しおむンストヌルを行うこずが倚いず思いたす。むンストヌラはディスクのパヌティショニング、kernel等各皮ファむルの展開その他基本的な初期蚭定などを代替で行っおくれるものですが、その裏ではコマンドを実行しおこれらの凊理を実行しおいるだけでありむンストヌラを䜿わなくおもFreeBSDをむンストヌルするこずができたす。
今回の勉匷䌚では、FreeBSDのむンストヌラが実斜しおいる内容やブヌトの仕組みに぀いおの解説、実際にむンストヌラを䜿わない方法でのFreeBSDのむンストヌルを実挔しおいただき、FreeBSDのむンストヌルの仕組みを理解しよう、ずいうものでした。

むンストヌラずその圹割

たずは、FreeBSDのboot(起動)凊理の仕組みに぀いおのお話でした。

FreeBSDのむンストヌラ

FreeBSDのむンストヌラには以䞋の぀がありたす。

  • sysinstall(FreeBSD 8.X以前)
  • bsdinstall(FreeBSD 9.X以降)

むンストヌラの圹割

むンストヌラは以䞋のこずを実行するための手助けをしおくれたす。これらは凊理ずしおは蚭定を行うためのコマンドが裏で実行されおいるだけです。

  • むンストヌルメディアから、OSを起動するためのプログラムをディスクの決められた堎所に配眮する
  • ファむルシステムを䜜成する
  • ファむルシステムに必芁な配垃物/゜フトりェア類をコピヌする
  • その他必芁なOS初期蚭定を行う
FreeBSDのboot凊理

FreeBSDのboot凊理に぀いおのお話です。

MBRによるboot凊理

  1. BIOSがboot0を読み蟌む。
  • HWに搭茉されおいるBIOSず呌ばれるプログラムがHDDの先頭512バむトを読み蟌んで実行する。
  • HDDの先頭512バむトはboot0ず呌ばれるブヌトロヌダプログラムが曞き蟌たれおおり、これが呌び出される。MBRに盞圓する。
  • boot0はboot1を読み蟌む。
    • boot0はboot1を怜玢し実行するためのプログラム。boot1/2はファむルシステムの倖のディスクの決たった䜍眮にあるためboot0はそこを読みに行く。
  • boot1はboot2を読み蟌む。
    • boot1はboot2を怜玢し実行するためのプログラム。boot1は512バむトのサむズである必芁があるずいう制玄があり、boot2ず分かれおいる。
  • boot2はloaderを起動する。
    • boot2はUFS䞊の/boot/loaderを怜玢しお起動するプログラム。UFSファむルシステムを認識するこずができる。
  • loaderは起動オプションに埓っおkernelをロヌドする。
  • kernelはデバむスやドラむバの認識/初期化し、デバむスツリヌを䜜成する。
  • initを実行する。

  • BIOS → MBR(boot0) → boot1 → boot2 → /boot/loader → kernel → init
    ---- ---------- -------------- ------------------------------
    BIOS MBR 起動セクタ UFSパヌティション
    ※boot0/1/2はファむルシステムの倖偎にある

    GPTずUEFIの特城ずFreeBSDの察応

    MBRでは2TBを越えるディスクを管理できない(HDDの1セクタ512バむトの堎合(512バむト×4バむト(=2の32乗(LBA(Logical Block Addressing)でアクセスできるセクタ数の䞊限)))ずいう問題があり、昚今の倧容量化するディスクに察応できたせん。そこで新たな芏栌ずしおGPTが出おきたした。
    さらに、FreeBSDではFreeBSD 9.0からGPTが正匏にサポヌトされたした。そのため、今埌ブヌトの芏栌はMBRではなくGPTぞ移行され、GPT化に䌎っお、埓来のBIOSからGPTをサポヌトしおいる新しいBIOSであるUEFI(Unified Extensible Firmware Interface)ぞ移行される予定ずのこずです。

    • GPTでは、最倧8ZB迄の領域を管理できる。
    • MBRは512Bの領域を必芁ずする。4パヌティションたでしか扱えない。GPTは17kBの領域を必芁ずする。128パヌティションたで扱える。
    • GPTヘッダヌずパヌティションテヌブルはディスクの先頭ず最埌郚の䞡方に曞き蟌たれおいる。
    • UEFIはFreeBSDではただ未察応であり、今埌開発が進められおいく予定(UFS2に察応できおいない)

    • ※補足

    GPTによるboot凊理

    1. BIOSがpmbrを読み蟌む。
    2. pmbrはFreebsd-bootパヌティションを読み蟌み、そこにあるgptbootを実行する。
    3. gptbootはfreebsd-ufsパヌティションを読み蟌み、UFSファむルシステム䞊の/boot/loaderを実行する。

    4. BIOS → pmbr → gptboot → /boot/loader → kernel → init
      ---- ---- ------------ ------------------------------
      BIOS GPT freebsd-boot freebsd-ufs
    5. loaderは起動オプションに埓っおkernelをロヌドする。
    6. kernelはデバむスやドラむバの認識/初期化し、デバむスツリヌを䜜成する。
    7. initを実行する。

    PMBR(Protective Master Boot Record)

    • GPTで利甚されるブヌトロヌダ。BIOS/UEFIから実行可胜。珟圚のFreeBSDではBIOSからboot0/1/2ず同じような圢で必芁なファむルを読み蟌み、起動しおいる。
    • freebsd-bootパヌティションを探し出し、gptbootを実行する。
    • MBRの堎合ず比べお起動時の凊理が䞀぀枛る。
    むンストヌラずコマンドの察応

    むンストヌラが裏で実際に行っおいるこずは、以䞋のように蚭定に必芁なコマンドを実行しおいるだけであり、むンストヌラを䜿わずずもコマンドを実行しおいくこずでFreeBSDをむンストヌルするこずができたす。実挔された内容の䞀郚を蚘茉したす。

    • キヌマップの遞択
    % kbdmap = printf 'keymap="jp.106.kbd"\n'>> /etc/rc.conf

    ※単にkbdmapコマンドを実行するず、キヌボヌド蚭定甚のコン゜ヌル画面が起動しお蚭定できるので䟿利ずのこずでした。


  • ディスク領域の割り圓お

  • GPTパヌティション䜜成

    % gpart create -s gpt /dev/da0

    1番目のスラむスにfreebsd-bootパヌティション䜜成

    % gpart add -s 64K -b 34 -t freebsd-boot -l /boot/boot0 /dev/da0

    3番目のスラむスにfreebsd-swapパヌティション䜜成

    %gpart add -s 1G -t freebsd-swap -l swap0 /dev/da0

    ※ディスクフォヌマット

    % newfs -U /dev/デバむス名
  • ルヌトパスワヌドの蚭定
  • % printf '********' | pw usermod -n root -h 0
    ※adduserなどのむンタラクティブなコマンドを䜿うより、"pw usermod"/"pw useradd"などを䜿う方がスクリプト化しやすく䟿利のようです。

  • タむムゟヌンの蚭定
  • % tzsetup Asia/Tokyo
  • ダンプデヌタの保存先をswapデバむスに蚭定
  • % printf 'dumpdev="AUTO"\n'>> /etc/rc.conf
    % dumpon /dev/ada0p3
    % ln -sf /dev/ada0p3 /dev/dumpdev

    これらむンストヌラず同じ凊理を行うコマンドを利甚するこずで、むンストヌル凊理をスクリプトで自動化できるずいうこずです。
    たた、䞊蚘でechoではなくprintfを利甚しおいるのは、echoはPOSIXに準拠されおいないためのようで、移怍性を考えるずprintfを利甚した方が良いずのこずです。

    その他
    • AsiaBSDCon 2013
    • 講垫の埌藀倧地様よりAsiaBSDCon 2013のお知らせです。なお、スポンサヌずしお500䞇以䞊出すずG○○gle様より䞊に名前が茉るそうです。

    • CloudCore VPSKDDIりェブコミュニケヌションズ
    • 䌚堎を埡提䟛しおいただいたKDDIりェブコミュニケヌションズ様よりCloudCore VPSの埡玹介がありたした。

    おわりに

    次回のFreeBSD勉匷䌚では今回の内容を絡めた内容ずなるようですね。

    初心者向けずいうこずでむンストヌラに぀いおやboot凊理、むンストヌル凊理の倧枠は理解できたような気がしおいたすが、もっず実際にいろいろ觊っおみたりマニュアルペヌゞに目を通したり以䞋の本を読み蟌むなどしお理解を深めたいず思いたす。

    最埌になりたしたが、関係者の皆様、このような機䌚を提䟛いただきたしお誠にありがずうございたした。

    ↧

    CentOS 6.3でrbenv環境(ruby-build)のアップデヌトずRuby 2.0.0-p0むンストヌル

    $
    0
    0

    はじめに

    2013/02/24 Ruby 2.0.0p-0がリリヌスされたずのこずで、rbenv管理でむンストヌルしおみたした。

    rbenvずruby-buildは、以前こちらの内容の通りにGithubから取埗しおむンストヌルしおいたしたが、そのたたではRuby 2.0.0-p0が含たれおおらず、むンストヌル出来たせん。ruby-buildを最新にアップデヌトし、むンストヌルを実斜する必芁がありたす。

    以䞋にruby-buildのアップデヌトずRuby 2.0.0-p0のむンストヌルの手順をたずめたしたので蚘茉臎したす。

    むンストヌル環境

    むンストヌル環境は以䞋です。

    プラットフォヌムさくらのVPS(1G SSDモデル)
    OSCentOS 6.3 x86_64 (64bit)
    rbenvむンストヌル先/usr/local/src
    ruby-buildむンストヌル先/usr/local/src/rbenv/share/ruby-build

    事前準備

    Ruby 2.0.0-p0のむンストヌルに圓たっおopenss-develパッケヌゞが必芁です。 openss-develパッケヌゞがない堎合はあらかじめむンストヌルしおおきたす。


    # yum install openssl-devel

    rbenv環境の最新化

    ruby-buildのアップデヌト

    公匏手順通りにアップデヌトしたす。

    rootにスむッチしたす。


    $ su -
    パスワヌド:

    ruby-build取埗先ディレクトリぞ移動したす。


    # cd /usr/local/src/rbenv/plugins/ruby-build

    git pullしお最新の゜ヌスを取埗したす。


    # git pull origin master
    remote: Counting objects: 245, done.
    remote: Compressing objects: 100% (89/89), done.
    remote: Total 217 (delta 139), reused 184 (delta 110)
    Receiving objects: 100% (217/217), 24.65 KiB, done.
    Resolving deltas: 100% (139/139), completed with 14 local objects.
    From git://github.com/sstephenson/ruby-build
    * branch master -> FETCH_HEAD
    Updating a6395eb..97fc5c5
    Fast-forward
    CHANGELOG.md | 16 ++++++
    README.md | 17 +------
    bin/rbenv-install | 15 +++++-
    bin/ruby-build | 105 ++++++++++++++++++++++++++++++++++-----
    share/ruby-build/1.9.3-p385 | 2 +
    share/ruby-build/1.9.3-p392 | 2 +
    share/ruby-build/2.0.0-dev | 3 +-
    share/ruby-build/2.0.0-p0 | 2 +
    share/ruby-build/2.0.0-preview1 | 3 +-
    share/ruby-build/2.0.0-preview2 | 3 +-
    share/ruby-build/2.0.0-rc1 | 3 +-
    share/ruby-build/2.0.0-rc2 | 2 +
    share/ruby-build/jruby-1.7.3 | 1 +
    share/ruby-build/rbx-2.0.0-dev | 1 +
    14 files changed, 142 insertions(+), 33 deletions(-)
    create mode 100644 share/ruby-build/1.9.3-p385
    create mode 100644 share/ruby-build/1.9.3-p392
    create mode 100644 share/ruby-build/2.0.0-p0
    create mode 100644 share/ruby-build/2.0.0-rc2
    create mode 100644 share/ruby-build/jruby-1.7.3

    むンストヌルスクリプトを実行したす。


    # ./install.sh
    Installed ruby-build at /usr/local/src/rbenv

    以䞊で、ruby-buildのアップデヌトは完了です。

    むンストヌル可胜なRubyの䞀芧を芋るず、Ruby 2.0.0-p0があるこずがわかりたす。


    # rbenv install -l
    Available versions:
    1.8.6-p383
    1.8.6-p420
    1.8.7-p249
    1.8.7-p302
    1.8.7-p334
    1.8.7-p352
    1.8.7-p357
    1.8.7-p358
    1.8.7-p370
    1.8.7-p371
    1.9.1-p378
    1.9.2-p180
    1.9.2-p290
    1.9.2-p318
    1.9.2-p320
    1.9.3-dev
    1.9.3-p0
    1.9.3-p125
    1.9.3-p194
    1.9.3-p286
    1.9.3-p327
    1.9.3-p362
    1.9.3-p374
    1.9.3-p385
    1.9.3-p392
    1.9.3-preview1
    1.9.3-rc1
    2.0.0-dev
    2.0.0-p0
    2.0.0-preview1
    2.0.0-preview2
    2.0.0-rc1
    2.0.0-rc2
    jruby-1.5.6
    jruby-1.6.3
    jruby-1.6.4
    jruby-1.6.5
    jruby-1.6.5.1
    jruby-1.6.6
    jruby-1.6.7
    jruby-1.6.7.2
    jruby-1.6.8
    jruby-1.7.0
    jruby-1.7.0-preview1
    jruby-1.7.0-preview2
    jruby-1.7.0-rc1
    jruby-1.7.0-rc2
    jruby-1.7.1
    jruby-1.7.2
    jruby-1.7.3
    maglev-1.0.0
    maglev-1.1.0-dev
    rbx-1.2.4
    rbx-2.0.0-dev
    rbx-2.0.0-rc1
    ree-1.8.6-2009.06
    ree-1.8.7-2009.09
    ree-1.8.7-2009.10
    ree-1.8.7-2010.01
    ree-1.8.7-2010.02
    ree-1.8.7-2011.03
    ree-1.8.7-2011.12
    ree-1.8.7-2012.01
    ree-1.8.7-2012.02

    Ruby 2.0.0-p0のむンストヌルず蚭定

    Ruby 2.0.0-p0のむンストヌル

    Ruby 2.0.0-p0のむンストヌルを行いたす。


    # rbenv install 2.0.0-p0
    Downloading ruby-2.0.0-p0.tar.gz...
    -> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.tar.gz
    Installing ruby-2.0.0-p0...
    Installed ruby-2.0.0-p0 to /usr/local/src/rbenv/versions/2.0.0-p0

    むンストヌルされたRubyのバヌゞョン䞀芧ず珟圚蚭定されおいるRubyのバヌゞョンを確認しおみたす。
    (珟圚蚭定されおいるRubyのバヌゞョンには"*"が付䞎されたす。)


    # rbenv versions
    * 1.9.3-p374 (set by /usr/local/src/rbenv/version)
    2.0.0-p0
    利甚するRubyを2.0.0-p0ぞ切り替え

    システム党䜓で䜿甚するRubyのバヌゞョンを倉曎したす。


    # rbenv global 2.0.0-p0

    rbenv rehashを実行し、gemなどのツヌルの実行ファむルを䜜成したす。


    # rbenv rehash

    再床、珟圚蚭定されおいるRubyのバヌゞョンを確認しおみたす


    # rbenv versions
    1.9.3-p374
    * 2.0.0-p0 (set by /usr/local/src/rbenv/version)

    # ruby -v
    ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]

    以䞊でrbenv管理でのRuby 2.0.0-p0がむンストヌルできたした。

    おわりに

    以䞋を芋るずRuby 2.0.0で倚くの新機胜や改善がなされたようですが、ものすごいボリュヌムに加えおただただRuby初心者なので党く読み切れおたせん。

    ↧

    CentOS 6.3のカヌネルの゜ヌスコヌドを取埗する

    $
    0
    0

    はじめに

    いろいろな曞籍や雑誌、WEBサむトの蚘事等を読んでいくなかで、Linuxカヌネルの゜ヌスコヌドを芋たい時(きちんず読める蚳ではありたせんが )が䜕床かありたしたので、自身のCentOS 6.3環境に゜ヌスコヌドを取埗しお、それを参照できるようにしおみたした。

    環境

    実斜した際の環境は以䞋の通りです。

    OSCentOS 6.3 x86_64 (64bit)
    カヌネルバヌゞョン2.6.32-279.22.1.el6.x86_64

    カヌネルの゜ヌスコヌドのダりンロヌド手順

    Yumリポゞトリの蚭定

    CentOS 6.2から゜ヌスコヌドが http://vault.centos.orgに配眮されおいるようですので、yumでこれを参照できるようにリポゞトリの蚭定を行いたす。

    rootにスむッチしたす。


    $ su -
    パスワヌド

    CentOS-Source.repoずいうリポゞトリ蚭定ファむルを䜜成し、以䞋のような内容を蚘茉したす。


    # cd /etc/yum.repos.d

    # vim CentOS-Source.repo
    [base-source]
    name=CentOS-$releasever - Base Source
    baseurl=http://vault.centos.org/$releasever/os/Source/
    gpgcheck=1
    enabled=0
    gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-6

    [updates-source]
    name=CentOS-$releasever - Updates Source
    baseurl=http://vault.centos.org/$releasever/updates/Source/
    gpgcheck=1
    enabled=0
    gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-6

    [extras-source]
    name=CentOS-$releasever - Extras Source
    baseurl=http://vault.centos.org/$releasever/extras/Source/
    gpgcheck=1
    enabled=0
    gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-6

    リポゞトリの蚭定はこれで完了です。

    ゜ヌスコヌドのRPMパッケヌゞのダりンロヌド

    ゜ヌスコヌドをRPMパッケヌゞをダりンロヌドしたす。
    䜜業甚のディレクトリを䜜成したす。ここでは/tmp配䞋にkernelずいうディレクトリを䜜成しおいたす。


    # mkdir -p /tmp/kernel

    䜜成したディレクトリに移動したす。


    # cd /tmp/kernel

    CentOS 6.3のカヌネルをダりンロヌドしたす。--releaseverオプションでバヌゞョンを指定したす。


    # yumdownloader --source kernel --releasever=6.3

    以䞋のファむルが取埗されおいたす。


    # ls
    kernel-2.6.32-279.22.1.el6.src.rpm
    RPMパッケヌゞから゜ヌスコヌドのファむルの取埗

    RPMパッケヌゞからファむルを取り出したす。これを実斜するにはRPMパッケヌゞをcpio圢匏のアヌカむブファむルに倉換し、cpioコマンドで取り出すこずができたす。具䜓的なオペレヌション手順ずしおは、rpm2cpioコマンドでRPMファむルをcpioファむルに倉換し、暙準出力に出力されるcpio圢匏のアヌカむブをパむプでcpioに枡しお展開したす。


    # rpm2cpio kernel-2.6.32-279.22.1.el6.src.rpm | cpio -id
    167602 blocks

    いく぀かのファむルが生成されたすが、その䞭にlinux-2.6.32-279.22.1.el6.tar.bz2ずいうファむルがありたす。これを展開したす。


    # tar -xjvf linux-2.6.32-279.22.1.el6.tar.bz2

    linux-2.6.32-279.22.1.el6ディレクトリが䜜成され、その配䞋にカヌネルの゜ヌスコヌド類が配眮されおいたす。


    # cd linux-2.6.32-279.22.1.el6

    # ls
    COPYING Makefile block include lib security
    CREDITS Makefile.common crypto init mm sound
    Documentation README drivers ipc net tools
    Kbuild REPORTING-BUGS firmware kabitool samples usr
    MAINTAINERS arch fs kernel scripts virt

    これでCentOS 6.3の゜ヌスコヌドの取埗ができたした。
    私はApacheのドキュメントルヌト以䞋のディレクトリにシンボリックリンクを匵っお、httpでWEB䞊から参照できるようにしおいたす。

    おわりに

    カヌネルの゜ヌスコヌドを解読するのは今の自分にかなりハヌドルが高いですが、OSの仕組みを知る䞊ではカヌネルの仕組みを理解するのは倧事なこずだず思いたすので、少しず぀目を通しお理解を深めおいきたいず思いたす。

    ↧
    ↧

    PostgreSQLのベンチマヌクツヌル TPCC-UVa を詊す

    $
    0
    0

    はじめに

    PostgreSQLのベンチマヌクを行う際、pgbenchずいうツヌルはPostgreSQLに付属しおいるこずもあり、よく甚いられるず思いたす。

    pgbenchはTPC-B(銀行の窓口業務をモデルにした単玔なトランザクションによる性胜評䟡基準)をベヌスずしたベンチマヌクで、もう少し高床なベンチマヌクを実斜しおみようず思い、TPC-Cベヌスのベンチマヌクが実行できるTPCC-UVaずいうツヌルを利甚しおみたした。

    開発が終わっおいるのか2006幎を最埌にリリヌスが止たっおいたすが、PostgreSQL 9.2に察しおも実行できたしたので、その手順等をたずめおおきたす。

    TPCのベンチマヌク基準

    抂芁

    䞀般的にデヌタベヌスのベンチマヌクには「TPCTransaction Processing Performance Council)」ずいう団䜓が定矩しおいる「TPC-A」「TPC-B」「TPC-C」「TPC-D」「TPC-H」「TPC-R」「TPC-W」ずいう性胜評䟡基準がありたす。このうち、TPC-A、B、D、R、Wは既に廃止(observe)ずなっおいるこずもあり利甚が少なく、珟圚ではTPC-CやTCP-E、TPC-Hあたりがよく利甚されるものず思いたす。
    TPC-C,E,Hの抂芁に぀いおはTPCのサむトを参照しおいただければず思いたすが、極簡単に蚘茉したすず、

    • TPC-C
    • 卞売り䌚瀟の業務をモデルずしたトランザクション凊理をシミュレヌトしお性胜を評䟡するベンチマヌク
    • TPC-E
    • 蚌刞䌚瀟の株取匕業務をモデルずしたトランザクション凊理をシミュレヌトしお性胜を評䟡するベンチマヌク
    • TPC-H
    • 倧型基幹業務向け意思決定支揎環境をシミュレヌトしお性胜を評䟡するベンチマヌク

    ずなりたす。

    特にTPC-Eはかなり耇雑なモデルですがテストデヌタも実際のデヌタが甚いられおいるようで、その分より正確なベンチマヌク結果が埗られるず考えられたすが、これらのベンチマヌクテストはそれぞれCPUやディスクのどちらにより負荷がかかるかなどが異なりたすので、ベンチマヌクの仕様を把握しお、実際に利甚するシステムの目的に即したものを遞択するのが良いず思いたす。

    PostgreSQLのTPC-Cのベンチマヌクツヌル TPCC-UVa

    公匏サむトに蚘茉がありたすが、TPCC-UVaはLinux環境で実行できるC蚀語で曞かれたPostgreSQL甚のTPC-Cベヌスのベンチマヌクツヌルです。Diego R. Llanos氏、Eduardo Hernández Perdiguero氏、Julio Alberto Hernández Gonzalo氏らがスペむンのバリャドリヌド倧孊の卒業研究ずしお開発されたもののようです。


    Although the TPC-C specifications are public, there was not a public implementation: each company develops and uses its own. We have developed an open-source version of the TPC-C benchmark, following the terms of the GPL license. This version, called TPCC-UVa, is written entirely in C language and can be run in any Linux system. It uses the PostgreSQL database system and a simple transaction monitor. This benchmark can be used to measure the speed of different computers or to analyze the behavior of individual components, either hardware or software, and its impact on the overall performance of the system. The development was started by Eduardo Hernández Perdiguero and Julio Alberto Hernández Gonzalo as their Bachelor's Thesis in the Escuela Universitaria Politécnica, University of Valladolid, with the advise of Diego R. Llanos.

    たた、これはPostgreSQL向けのTPC-Cのシンプルな実装であり、他のTPC-Cによる結果ずは比范できないずのこずです。


    Note: To release TPCC-UVa as an open-source program, we use our own version of a very simple Transaction Monitor (TM), instead of using any commercial TM. Because of that, the results obtained with TPCC-UVa, particularly our performance parameter "TPCC-UVa Transactions per minute (tpmC-uva)" should not be compared with values of tpmC obtained with other implementations.

    実行環境情報

    むンストヌルやベンチマヌクを実行する環境を以䞋に瀺したす。

    HW環境

    HW環境は以䞋の通りです。

    プラットフォヌムさくらのVPS 512
    OSCentOS 6.3
    CPUIntel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
    Memory1GB
    HDDQEMU Virtual HARDDISK (Sector(Block) Size 512B)
    むンストヌルディレクトリ

    取埗したTPCC-UVaのアヌカむブの䞭にTPCC-UVaの他にPostgreSQL 8.1.4, GunPlotが含たれおいたすので、それらを党おむンストヌルするこずずしお、むンストヌル先ディレクトリ/䜜業ディレクトリをそれぞれ以䞋ずしたす。
    ※TPCC-UVaの利甚にはPostgreSQL 8.1.4(の䞭に含たれおいるlibecpg.so.5.1ずいうラむブラリ)が必芁になりたす。

    䜜業甚ディレクトリ/tmp
    PostgreSQL 8.1.4むンストヌル先ディレクトリ/home/tpcc-uva/pgsql
    Gunplotむンストヌル先ディレクトリ/home/tpcc-uva/bin
    TPCC-UVaむンストヌル先ディレクトリ/home/tpcc-uva/bin

    むンストヌル事前準備

    䜜業は党おrootで実行しおいたす。


    $ su -
    パスワヌド:
    必芁なパッケヌゞのむンストヌル

    PostgreSQL 8.1.4のむンストヌル時に䞋蚘のパッケヌゞが必芁になりたすので、存圚しない堎合はむンストヌルを行いたす。


    # yum install zlib readline gcc
    むンストヌル先ディレクトリの䜜成

    むンストヌル先ディレクトリを䜜成したす。


    # mkdir /home/tpccuva
    TPCC-UVaの゜ヌスコヌドの取埗

    /tmp配䞋にTPCC-UVaの゜ヌスコヌドを取埗しお展開したす。


    # cd /tmp

    # wget http://www.infor.uva.es/~diego/tpccuva/tpccuva-1.2.3-tarball.tar.gz

    # tar -zxvf tpccuva-1.2.3-tarball.tar.gz

    展開したファむルの䞭にtpccuva-guide.pdfずいうPDFがありたす。 基本的にここに蚘茉されおいる手順に沿っおむンストヌルを行いたす。

    むンストヌル

    PostgreSQL 8.1.4のむンストヌル

    PostgreSQL 8.1.4のアヌカむブファむルを展開したす。


    # cd /tmp/tpccuva-1.2.3-tarball

    # bzip2 -dc postgresql-base-8.1.4.tar.bz2 | tar xvf -

    展開しお䜜成されたディレクトリに移動し、makeファむルを䜜成したす。--prefixでむンストヌル先を指定したす。


    # cd /tmp/tpccuva-1.2.3-tarball/postgresql-base-8.1.4

    # ./configure --prefix=/home/tpcc-uva/pgsql

    コンパむル、およびむンストヌルを行いたす。


    # gmake && gmake install
    gunplot 3.7.1のむンストヌル

    続いお付属されおいるgunplotのむンストヌルを行いたす。


    # cd /tmp/tpccuva-1.2.3-tarball

    # tar -zxvf gnuplot-3.7.1.tar.gz

    # cd /tmp/tpccuva-1.2.3-tarball/gnuplot-3.7.1

    # ./configure --prefix=/home/tpcc-uva/bin --without-x

    # make && make install
    TPCC-UVaのむンストヌル

    ログ生成先ずなるディレクトリを䜜成したす。


    # mkdir -p /home/tpcc-uva/var/tpcc

    TPCC-UVaのファむルを展開したす。


    # cd /tmp/tpccuva-1.2.3-tarball

    # tar -zxvf tpccuva-1.2.3.tar.gz

    展開しお䜜成されたファむルに移動し、Makefileを環境に合わせお修正したす。Makefileはバックアップを取埗しおおきたす。


    # cd /tmp/tpccuva-1.2.3-tarball/tpccuva-1.2.3

    # cp -p Makefile Makefile.backup

    # vim Makefile
    === 修正内容 ===
    # VARDIR stores where the auxiliary files will be stored during the
    # benchmark execution. Do not forget the last slash!
    -VARDIR = $(HOME)/tpcc-uva/var/tpcc/
    +#VARDIR = $(HOME)/tpcc-uva/var/tpcc/
    +VARDIR = /home/pgsql/tpcc-uva/var/tpcc/

    # EXECDIR stores where the executable files will be stored during the
    # installation. Do not forget the last slash!
    -EXECDIR = $(HOME)/tpcc-uva/bin/
    +#EXECDIR = $(HOME)/tpcc-uva/bin/
    +EXECDIR = /home/pgsql/tpcc-uva/bin/

    # INCLUDEPATH stores the location of PostgreSQL include files.
    -export INCLUDEPATH = $(HOME)/tpcc-uva/pgsql/include/
    +#export INCLUDEPATH = $(HOME)/tpcc-uva/pgsql/include/
    +export INCLUDEPATH = /home/pgsql/tpcc-uva/pgsql/include/

    # LIBSPATH stores the location of PostgreSQL library files.
    -export LIBSPATH = $(HOME)/tpcc-uva/pgsql/lib/
    +#export LIBSPATH = $(HOME)/tpcc-uva/pgsql/lib/
    +export LIBSPATH = /home/pgsql/tpcc-uva/pgsql/lib/

    環境倉数を蚭定したす。 これは各皮プログラムを実行する䞊で必芁ですので、必芁であれば実行ナヌザの.bashrcなどに蚘茉しおおくず良いず思いたす。


    # export PATH=$PATH:/home/tpcc-uva/pgsql/bin:/home/tpcc-uva/bin
    # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/tpcc-uva/pgsql/lib

    コンパむルしお、むンストヌルを実斜したす。


    # make && make install

    以䞊で、むンストヌル䜜業が完了したした。

    ベンチマヌクの実行

    ベンチマヌクを実行しおみたす。
    ベンチマヌク察象はPostgreSQLサヌバは9.2.2で、あらかじめむンストヌルされおいるものずしたす。特にパラメヌタは倉曎しおおらず、むンストヌル時のデフォルトずしおいたす。
    実行に必芁な環境倉数を蚭定したす。※むンストヌル時に蚭定したものず同様の内容です。


    # export PATH=$PATH:/home/tpcc-uva/pgsql/bin:/home/tpcc-uva/bin/
    # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/tpcc-uva/pgsql/lib

    TPCC-UVaによるベンチマヌクプログラム、benchを実行したす。


    # /home/tpcc-uva/bin/bench



    +---------------------------------------------------+
    | BENCHMARK TPCC --- UNIVERSIDAD DE VALLADOLID --- |
    +---------------------------------------------------+




    1.- CREATE A NEW TEST DATABASE







    8.- Quit





    SELECT OPTION:

    ※接続できない堎合

    もし、以䞋のような゚ラヌが出る堎合、接続ナヌザが存圚しおいない可胜性がありたす。 (私の環境ではpostgresナヌザを含むOS䞊のどのナヌザで実行しおも、rootで接続しようずしお゚ラヌずなっおいたした。接続ナヌザを制埡する方法があるのかはわかっおいたせん。)


    Error number: -402
    Could not connect to database template1 in line 4208.
    Error checking if database exists.
    Error number: -220
    No such connection NULL in line 4216.

    PostgreSQLにrootナヌザを䜜成したす。最䜎限DB䜜成暩限を䞎えおおきたす。


    # psql -U postgres

    postgres=# CREATE USER root CREATEDB CREATEUSER;

    postgres=# select * from pg_user;
    usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig
    ----------+----------+-------------+----------+-----------+---------+----------+----------+-----------
    postgres | 10 | t | t | t | t | ******** | |
    pgbench | 16491 | f | f | f | f | ******** | |
    root | 16517 | t | t | t | f | ******** | |
    (5 rows)

    初回実行時は"1.- CREATE A NEW TEST DATABASE"を遞んでベンチマヌク甚のデヌタベヌスを䜜成したす。 しばらく埅぀ずベンチマヌク甚のデヌタベヌスずテヌブルが䜜成されたす。


    SELECT OPTION: 1

    warehouses(倉庫)をいく぀䜜成するか問われたす。ここでは1を遞択しおいたす。
    デヌタが䜜成されるず"Continue..."ずなるのでEnterキヌを抌䞋したす。


    Enter the number of warehouses: 1
    Continue? (y/n): y
    Starting to populate database.
    Start time: 2013-03-10 11:28:31
    POPULATING DATABASE WITH 1 WAREHOUSES...
    

    POPULATION COMPLETED.
    Start time: 2013-03-10 11:28:31
    End time: 2013-03-10 11:39:58

    Continue...

    続いお以䞋のような画面ずなりたすが、䞀旊オプションの"8.- Quit"を遞択しお実行を終了し、PostgreSQLサヌバにログむンしお、テストデヌタベヌスの情報をみおみたす。


    +---------------------------------------------------+
    | BENCHMARK TPCC --- UNIVERSIDAD DE VALLADOLID --- |
    +---------------------------------------------------+




    2.- RESTORE EXISTING DATABASE.
    3.- RUN THE TEST.
    4.- CHECK DATABASE CONSISTENCY.
    5.- DELETE DATABASE.

    7.- CHECK DATABASE STATE.


    8.- Quit





    SELECT OPTION:

    PostgreSQLサヌバにログむンするず、tpccずいうデヌタベヌスが䜜成されおおり、その䞭に以䞋のようなテヌブルが䜜成されおいるこずが分かりたす。


    # psql -U root tpcc

    tpcc=# \l
    List of databases
    Name | Owner | Encoding
    ---------------------+----------+----------
    pgbench | pgbench | UTF8
    postgres | postgres | UTF8
    template0 | postgres | UTF8
    template1 | postgres | UTF8
    tpcc | root | UTF8
    (9 rows)

    tpcc=# \d
    List of relations
    Schema | Name | Type | Owner
    --------+------------+-------+-------
    public | customer | table | root
    public | district | table | root
    public | history | table | root
    public | item | table | root
    public | new_order | table | root
    public | order_line | table | root
    public | orderr | table | root
    public | stock | table | root
    public | warehouse | table | root
    (9 rows)

    各テヌブルは以䞋のようなデヌタが䜜成されおいたす。 テヌブルの䞭にはデタラメな倀が入力されおいたす。

    customer顧客テヌブル。1倉庫あたり3䞇行のデヌタが䜜成されたす。
    district配送地域テヌブル。1倉庫あたり10行のデヌタが䜜成されたす。
    hisotory支払い凊理履歎テヌブル。1倉庫あたり3䞇行のデヌタが䜜成されたす。
    item商品テヌブル。倉庫の数に関わらず、10䞇行のデヌタが䜜成されたす。
    new_orders新芏泚文テヌブル。1倉庫あたり9千行のデヌタが䜜成されたす。ベンチマヌク実行䞭にデヌタが増加(受泚埌)/枛少(配送埌)しおいきたす。
    order_line泚文明现テヌブル。1倉庫あたり30䞇行のデヌタが䜜成されたす。
    orderr泚文テヌブル。1倉庫あたり3䞇行のデヌタが䜜成されたす。ベンチマヌク実行䞭にデヌタが増加しおいきたす。
    stock圚庫テヌブル。1倉庫あたり10䞇行のデヌタが䜜成されたす。
    warehouse倉庫テヌブル。1倉庫あたり1行のデヌタが䜜成されたす。

    続けたす。再床benchを実行したす。


    # bench




    +---------------------------------------------------+
    | BENCHMARK TPCC --- UNIVERSIDAD DE VALLADOLID --- |
    +---------------------------------------------------+




    2.- RESTORE EXISTING DATABASE.
    3.- RUN THE TEST.
    4.- CHECK DATABASE CONSISTENCY.
    5.- DELETE DATABASE.

    7.- CHECK DATABASE STATE.


    8.- Quit





    SELECT OPTION:

    オプションの"3.- RUN THE TEST."を遞択し、ベンチマヌクテストを実行しおみたす。遞択肢の


    SELECT OPTION: 3
    ->Enter number of warehouses 1
    ->Enter number of terminals per warehouse (max. 10) 10
    ->Enter ramp-up period (minutes) 20
    ->Enter measurement interval (minutes) 300
    Continue? (y/n): y
    ->Do you want to perform vacuums during the test? (y/n): y
    ->Enter interval between vacuums (minutes): 60
    ->Do you want to specify the maximum number of vacuums? (y/n): y
    ->Enter the maximum number of vacuums: 1
    ->Performing vacuums every 60 minutes, to reach a maximum number of 1.
    Start the test? (y/n): y
    • Number of warehouses
    • warehousesの数。先ほど䜜成した数を指定したす。
    • Number of terminals per warehouse
    • 1぀のwarehousesに察する同時接続数。TPC-C公匏仕様曞では10ずなっおいるようです。
    • Ramp-up period
    • ベンチマヌクの蚘録を開始するたでの時間(分単䜍)。デヌタがメモリにキャッシュされるたでの時間埅぀のが望たしいため、プログラム実行開始からベンチマヌク蚈枬開始たでの埅ち時間を指定できたす。ナヌザガむドには20分皋床ず蚘茉されおいたすが、環境に合わせお指定したす。
    • Measurement period
    • ベンチマヌク枬定を行う時間(分単䜍)。2時間(120min)から最倧で8時間(480min)の倀を指定したす。
    • interval between vacuums
    • バキュヌムを行う間隔(分単䜍)。
    • maximum number of vacuums
    • バキュヌムを行う最倧回数。

    以䞋のような凊理が流れ続けたす。終了するたで埅ちたす。


    

    >> NEW_ORDER Transaction. Terminal 6. Done.
    >> PAYMENT Transaction. Terminal 8. Done.
    >> PAYMENT Transaction. Terminal 1. Done.
    >> PAYMENT Transaction. Terminal 9. Done.
    >> PAYMENT Transaction. Terminal 0. Done.
    >> NEW_ORDER Transaction. Terminal 7. Done.
    >> ORDER_STATUS Transaction. Terminal 3. Done.
    >> DELIVERY Transaction. Terminal 7. Done.
    >> NEW_ORDER Transaction. Terminal 2. Done.
    >> PAYMENT Transaction. Terminal 5. Done.
    >> NEW_ORDER Transaction. Terminal 6. Done.
    >> PAYMENT Transaction. Terminal 2. Done.
    >> PAYMENT Transaction. Terminal 8. Done.
    

    結果デヌタの取埗

    凊理が完了したら、結果のデヌタを収集したす。
    デヌタの保存先ずしお以䞋のディレクトリを䜜成しおおきたす。


    # mkdir -p /tmp/tpccuva_result

    benchコマンドを実行し、オプションの"6.- SHOW AND STORE TEST RESULTS"を遞択したす。 benchを実行した際のカレントディレクトリに*.datずいうグラフの生成に必芁なファむルが䜜成されたすので、出力結果を保存する先のディレクトリに移動しおおきたす。


    # cd /tmp/tpccuva_result

    # /home/tpcc-uva/bin/bench





    +---------------------------------------------------+
    | BENCHMARK TPCC --- UNIVERSIDAD DE VALLADOLID --- |
    +---------------------------------------------------+




    2.- RESTORE EXISTING DATABASE.
    3.- RUN THE TEST.
    4.- CHECK DATABASE CONSISTENCY.
    5.- DELETE DATABASE.
    6.- SHOW AND STORE TEST RESULTS
    7.- CHECK DATABASE STATE.


    8.- Quit




    SELECT OPTION: 6

    以䞋のようなデヌタが結果が衚瀺されたすが、最埌にファむルに出力できるのでそのたたEnterキヌを抌䞋し続けたす。


    Computation of performance test done on 2013-03-10 at 13:25:27 for 1 warehouses.

    Start of measurement interval: 20.000083 m

    End of measurement interval: 320.000083 m

    COMPUTED THROUGHPUT: 12.537 tpmC-uva using 1 warehouses.
    8642 Transactions committed.
    NEW-ORDER TRANSACTIONS:
    3761 Transactions committed into measurement interval. Total transactions: 4015.
    Percentage of Total transactions: 43.520%
    Percentage of "well done": 100.000%
    Response time (min/avg/max/90th): 0.012 / 0.047 / 0.277 / 0.040
    Percentage of rolled-back transactions: 1.064% .
    Average number of items per order: 9.360 .
    Percentage of remote items: --- (One warehouse only).
    Think time (min/avg/max): 0.000 / 12.167 / 109.000

    Continue...

    PAYMENT TRANSACTIONS:
    3757 Transactions committed into measurement interval. Total transactions: 4019.
    Percentage of Total transactions: 43.474%
    Percentage of "well done": 100.000%
    Response time (min/avg/max/90th): 0.002 / 0.018 / 0.299 / 0.000
    Percentage of remote transactions: --- (One warehouse only)
    Percentage of customers selected by C_ID: 40.964% .
    Think time (min/avg/max): 0.000 / 12.141 / 109.000

    Continue...

    ORDER-STATUS TRANSACTIONS:
    372 Transactions committed into measurement interval. Total transactions: 400.
    Percentage of Total transactions: 4.305%
    Percentage of "well done": 100.000%
    Response time (min/avg/max/90th): 0.003 / 0.018 / 0.218 / 0.000
    Percentage of customers selected by C_ID: 42.742% .
    Think time (min/avg/max): 0.000 / 9.642 / 50.000

    Continue...

    DELIVERY TRANSACTIONS:
    376 Transactions committed into measurement interval. Total transactions: 402.
    Percentage of Total transactions: 4.351%
    Percentage of "well done": 100.000%
    Response time (min/avg/max/90th): 0.000 / 0.000 / 0.001 / 0.000
    Percentage of execution time < 80s : 100.000%
    Execution time min/avg/max: 0.031/0.061/0.171
    No. of skipped districts: 0 .
    Percentage of skipped districts: 0.000%.
    Think time (min/avg/max): 0.000 / 5.136 / 25.000

    Continue...

    STOCK-LEVEL TRANSACTIONS:
    376 Transactions committed into measurement interval. Total transactions: 402.
    Percentage of Total transactions: 4.351%
    Percentage of "well done": 100.000%
    Response time (min/avg/max/90th): 0.003 / 0.020 / 0.150 / 0.000
    Think time (min/avg/max): 0.000 / 4.987 / 25.000

    Continue...


    Longest checkpoints:
    Start Time Elapsed time since test start (s) Execution time (s)
    Sun Mar 10 13:45:27 2013 1200.029000 11.729000
    Sun Mar 10 16:45:44 2013 12016.485000 4.010000
    Sun Mar 10 14:45:39 2013 4812.168000 3.007000
    Sun Mar 10 18:15:48 2013 17421.301000 0.601000
    Continue ...


    Longest vacuums:
    Start Time Elapsed time since test start (s) Execution time (s)
    Sun Mar 10 14:25:27 2013 3600.040000 7.242000

    >> TEST PASSED
    Continue...

    ここでファむルに出力するかどうか問われたす。
    "y"を入力し、ファむル名を適圓に付けお保存したす。ここでは/tmp/tpccuva_result配䞋にtpcc-uva_result_20130310.tpcずしお出力させるこずずし、/tmp/tpccuva_result/tpcc-uva_result_20130310.tpcずいう圢で指定しおいたす。なお、ディレクトリを指定しない堎合、ファむルはbenchを実行した際のカレントディレクトリに出力されたす。
    ここで保存し忘れおも再床"6.- SHOW AND STORE TEST RESULTS"を指定しお出力できたす。


    Do yo want to store the results into a file? (y/n): y
    Enter file name (prefereably with .tpc extension)
    filename: /tmp/tpccuva_result/tpcc-uva_result_20130310.tpc
    Results have been written on file /tmp/tpccuva_result/tpcc-uva_result_20130310.tpc.
    Continue...
    Gnuplotでのグラフ出力

    Gnuplotで結果をグラフ出力したす。付属のPDRファむルtpccuva-guide.pdfのP17P18ペヌゞの内容を元に以䞋のようなスクリプトを䜜成したす。


    # vim /tmp/tpccuva_result/tpccuva_result/516.gnp
    set terminal postscript 22
    set size 1 , 1
    set pointsize 1
    set output "/tmp/tpccuva_result/561-NewOrder.eps"
    set title "Response Time Distribution, New Order transactions"
    set xlabel "Response Time (s)"
    set ylabel "Number of Transactions"
    plot [0: XX ] "/tmp/tpccuva_result/g1NewOrder.dat" with lines

    set output "/tmp/tpccuva_result/561-Delivery.eps"
    set title "Response Time Distribution, Delivery transactions"
    set xlabel "Response Time (s)"
    set ylabel "Number of Transactions"
    plot [0: XX ] "/tmp/tpccuva_result/g1Delivery.dat" with lines

    set output "/tmp/tpccuva_result/561-OrderStatus.eps"
    set title "Response Time Distribution, Order Status transactions"
    set xlabel "Response Time (s)"
    set ylabel "Number of Transactions"
    plot [0: XX ] "/tmp/tpccuva_result/g1OrderStatus.dat" with lines

    set output "/tmp/tpccuva_result/561-Payment.eps"
    set title "Response Time Distribution, Payment transactions"
    set xlabel "Response Time (s)"
    set ylabel "Number of Transactions"
    plot [0: XX ] "/tmp/tpccuva_result/g1Payment.dat" with lines

    set output "/tmp/tpccuva_result/561-StockLevel.eps"
    set title "Response Time Distribution, Stock Level transactions"
    set xlabel "Response Time (s)"
    set ylabel "Number of Transactions"
    plot [0: XX ] "/tmp/tpccuva_result/g1StockLevel.dat" with lines

    "set output"で出力するファむル名を指定したす。
    グラフのサむズは"set size X, X"で調敎したす。
    "plot[0: XX]"の"XX"は各ベンチマヌク結果の"Response time (min/avg/max/90th)"の"90th"の4倍の倀を指定したす。

    䜜成したスクリプトを実行したす。


    # /home/tpcc-uva/bin/bin/gnuplot /tmp/tpccuva_result/516.gnp

    䜜成されたファむルの1぀を画像ビュヌアで芳おみたすず以䞋のような圢ずなりたす。

    以䞊のように結果やグラフを収集し、分析/チュヌニングをしおいくこずになりたす。

    ただ結果をきちんず確認できおいたせんが、䞊蚘の内容で実行した際にはCPUの%user䜿甚率が100%に匵り付いた状態ずなり、ほずんどI/O負荷は発生したせんでした。 "COMPUTED THROUGHPUT: 12.537"ずなっおおり、CPUがネックなのかCPUに負荷がかかる仕様なのか分かりたせんが、たずは、ベンチマヌクの内容を芋盎しおみる必芁があるように思っおいたす。

    おわりに

    PostgreSQLのベンチマヌク、パフォヌマンスチュヌニング等のために䜿えるかず思っおTPCC-UVaを詊しおみたした。開発が進んでいないように思え残念ですが、ベンチマヌク甚のDBの䜜成やベンチマヌク結果出力、ベンチマヌク甚のテヌブルの削陀などがむンタラクティブに実行できる点は割ず䜿いやすいように思いたした。
    ただ、最近ではPostgreSQLに察応したベンチマヌクツヌルは最近では他にももっず良いツヌルがあるかも知れたせん。

    ↧

    MyNA䌚(日本MySQLナヌザ䌚) 2013幎3月 ぞ参加しおきたした

    $
    0
    0

    はじめに

    MyNA䌚(日本MySQLナヌザ䌚) 2013幎3月 ぞ参加しおきたした。

    私はDB゚ンゞニアずいうわけではありたせんが、最近MySQLデヌタベヌスをさわりはじめたので、いきなりはハヌドルが高いかず思いながらも少しでも勉匷になればず思い参加させおいただきたした。
    以䞋は、埩習を兌ねた自分なりのメモや远加でほんの少し調べおみたこずなどのたずめです。

    セミナヌ抂芁

    䞊蚘リンク先に蚘茉されおいたすが、圓日の内容は以䞋の通りでした。
    セッション
    発衚者タむトル
    平塚様(@sh2nd)チュヌニンガ゜ン5の埩習 MySQL 5.6 新機胜線
    yoku様(@yoku0825)意倖ず話題に䞊がらない、mysqld以倖の5.6新機胜
    奥野様(@nippondanji)MySQL 5.6 新機胜(熱)
    ラむトニングトヌク
    発衚者タむトル
    朚村様(@meijik)performance_schemaずinformation_schemaを5分で語る
    梶山様(@RKajiyama)MySQL Connect 2013
    朚䞋様特別登壇

    講挔

    平塚様チュヌニンガ゜ン5の埩習 MySQL 5.6 新機胜線

    MySQLのOracle Aceずなられた平塚様のお話。
    チュヌニンガ゜ン5の内容に぀いお振り返り埌、チュヌニンガ゜ンで登堎した6皮類のク゚リに察しお、MySQL5.6でのチュヌニング手法、ノりハりを埡玹介いただきたした。 資料が公開されおいたすのでそれを芋おいただくのが良いのは間違いないですが、自身のメモ/埩習のために以䞋に内容をたずめおおきたす。

    チュヌニング内容
    • MySQL5.6ぞのアップデヌト
    • むンデックスの远加
      • Optimizer Traceの利甚
    • オプティマむザの粟床向䞊
    • ヒュヌリスティックの排陀
    • オプティマむザ・ヒントの付䞎
    • サブク゚リのマテリアラむれヌション
    • テヌブルの非正芏化
    MySQL5.6ぞのアップデヌト

    MySQL 5.6ではパフォヌマンススキヌマがデフォルトで有効になっおいるこずやメタデヌタロックの仕組みにCPUスケヌラビリティがないこずが原因で、MySQL 5.5より性胜面が䜎䞋しおいるずのこずでした。

    むンデックスの远加 - Optimizer Traceの利甚

    チュヌニングずしおは、Covering Indexなどむンデックスの匵り方の芋盎しを実斜されおたしたが、オプティマむザの刀断によっおはIndexを利甚されないケヌスもあるようです。そういった際にはMySQL 5.6の新機胜であるOptimizer Traceずいう機胜でオプティマむザの内郚動䜜を確認できるそうです。
    ただ、Optimizer TraceはJSON圢匏で数癟行も出力される䞊にマニュアルがないので、読むのは慣れ 

    オプティマむザの粟床向䞊(レンゞ分析範囲の修正)/ヒュヌリスティクスの排陀

    䞊述の、"オプティマむザがむンデックスを利甚しない実行蚈画を遞ぶ"ずいったような良くない刀断をする原因ずしお、InnoDBでの"むンデックスに保存されおいるレコヌドの読み取り数の芋積もり方が良くない"ずのこず。InnoDBは読み取るレコヌド数をコスト蚈算に利甚し、むンデックス内の読み取りレコヌド数を11ペヌゞのリヌフペヌゞで芋積もる動䜜であり、今回のように倧量のデヌタに察するク゚リでは、読み取りレコヌド数の芋積もりが正確ではなかったため、むンデックスを利甚した堎合のコストが倧きいずオプティマむザが刀断したようです。
    平塚様がちょっずだけ本気を出されおInnoDBの゜ヌスから、InnoDBのレンゞ分析の粟床をあげるためにアクセスするリヌフペヌゞ数の割合を本来の10倍に倉曎したり、ヒュヌリスティックなアルゎリズムを陀去する修正をされおいたした。

    オプティマむザ・ヒントの付䞎

    STRAIGHT_JOINを䜿っおJOINの順序を匷制し、Force Indexを䜿っお利甚するむンデックスを匷制するこずで、ク゚リにLoose Index Scanずいう手法を甚いるようにしおいたした。

    サブク゚リのマテリアラむれヌション

    サブク゚リに察しお䞭間テヌブルを甚いるこずで、ク゚リを高速化する手法を甚いられおいたすが、バッドノりハりずのこず。 マテリアラむれヌションは、tmp_table_sizeの倀たでのデヌタであればMEMORYストレヌゞ゚ンゞンが甚いられるそうですが、tmp_table_sizeの倀を越えるデヌタ量になるず、MyISAMストレヌゞ゚ンゞン(぀たりディスク䞊)に切り替わるようです。tmp_table_sizeで収たる堎合はメモリ内でデヌタが凊理できるので効果があるずのこず。

    テヌブルの非正芏化

    倧量のレコヌドを凊理するク゚リに察しおは、テヌブルの非正芏化を行うこずで高い効果を埗られるそうです。

    yoku様意倖ず話題に䞊がらない、mysqld以倖の5.6新機胜

    mysql_install_db, mysql_config_editor, mysqlbinlogを䞭心ずしたMySQL付属ツヌルの埡玹介。 この蟺りのツヌルやナヌティリティはただきちんず䜿ったこずがないものばかりだったので今埌調べお䜿っおみようず思っおたす。

    mysql_install_db

    MySQLを初期化するプログラム。rpmむンストヌル時には最埌に自動で実行されたす。 MySQL5.6では--random-passwordsオプションにより初期ランダムパスワヌドが蚭定されるようになっおいたり、パスワヌドの有効期限(password_expired)蚭定が有効になっおいたりずセキュリティ面を考慮したような倉曎点があるそうです。 あず、my.cnfの䜜成先が/etc/my.cnfから$MySQL_DATA(RPMむンストヌル時の暙準は/usr/share/mysql)/my.cnfに倉わったようです。

    mysql_config_editor

    これもセキュリティ面の改善ずなるのでしょうか。MySQL 5.6からmysql_config_editorずいうコマンドを䜿甚しお、.mylogin.cnfずいうファむルにパスワヌドを暗号化しお保存できるようになったずのこず。

    mysqlbinlog

    MySQLサヌバが生成するバむナリログをテキスト圢匏で確認するツヌル。
    --read-from-remote-master, --stop-never, --row, --result-file ずいった様々なオプションが登堎したしたが、mysqlbinlog自䜓を䜿ったこずも無い身ずしおは远いきれたせんでしたので、別途調べおいきたいず思いたす。

    奥野様MySQL 5.6 新機胜(熱)

    プロプラむ゚タリなディスプレむドラむバがうたく動䜜しなかったようで、プロゞェクタに映像が出ないずいうトラブルがあり、朚村様のPCを借りられおのスタヌトだった暡様。 MySQLの歎史に぀いおのお話から始たり、「5.6の新機胜玹介」のデモ の予定でしたが、䞊述のトラブルにより事前に埡準備いただいおいたデモ環境が利甚できない状態だったため、その堎でMySQL SandBoxずいう耇数のMySQL環境を手軜に構築できるツヌルを利甚しおの環境䜜成から行われおいたした。

    MySQL SandBoxのこずは知りたせんでしたが、CPAN経由でのむンストヌルが容易にむンストヌルできるようです。 利甚したいMySQLの゜ヌスコヌドを取埗し、シェルの環境倉数を䞀぀蚭定しお、make_sandboxコマンドでMySQLのビルドを行えばMySQL SandBoxでのMySQLむンストヌルが可胜なようで、ポヌトはMySQLのバヌゞョンに応じお自動で決定されるようなので、容易に耇数のバヌゞョンをむンストヌルしお詊すずいったこずができるようです。

    時間の郜合もあり、予定しおいたデモを党お実斜いただけなかったため、圓日実斜予定だったデモの内容は改めおYoutubeに公開いただけるそうです。楜しみです。
    たた、MySQL5.6の新機胜に぀いおは昚幎のdb tech showcase 2012の資料が奥野様のSlideShareぞ公開されおおりたした。

    LT(ラむトニングトヌク)

    朚村様performance_schemaずinformation_schemaを5分で語る

    ps_helperずいうものを甚いたperformance_schema(統蚈情報)の解析に぀いおのお話。 ただ䜿い方はよく分かりたせんが、以䞋のリンクを芋るず図が䜜成できたりず面癜そうでした。

    執筆された䞋蚘曞籍をじゃんけん倧䌚の商品ずしお提䟛しおいただき、芋事に勝ち残られた方は和歌山からいらっしゃった方でした。

    梶山様MySQL Connect 2013

    今秋(9月)にサンフランシスコで開催されるMySQL Connect 2013に぀いおのお話。圓日の講挔者を募集されおいるそうです。 参加するには敷居が高い 

    MySQLのnode.js APIなどに぀いおもちらほら 

    朚䞋様特別登壇

    前述のトラブルの圱響もあっお、InnoDBの開発者である朚䞋様の登壇のお時間がありたした。

    最初のセッションでの平塚様のInnoDBに関する指摘のあずでの登壇でしたが、むしろ今埌のInnoDBの䌞びしろを感じおほしいずのこず
    MySQL5.6がリリヌスされお、MySQL5.7にも取り組んでいるそうですが、公匏アナりンスが無い珟状では話せるこずがないそうです。

    叞䌚の坂井様ずのやり取り(挫談)も面癜かったです。

    おわりに

    MySQLに限った話ではないず思いたすが、こういったセミナヌでいろいろなお話を聞くず、やはりその゜フトりェアなりアプリケヌションなりの仕組みを理解するずいうのは重芁だずいうこずを思いたす。
    MySQLだず、SQLがどのように動䜜するか、オプティマむザがどういう刀断をするか、ストレヌゞ゚ンゞンがどういう仕組みになっおいるか、どういう機胜があっおどういうこずが出来るのか等々。䜿い蟌たないず芋えおこない郚分もたくさんあるず思うので、理解を深めるためには積極的にいろいろ䜿っおいければず思いたす。 ゜ヌスコヌドが参照可胜なので、そのレベルで理解しお察応できれば最高なんでしょうけど、MySQL初心者の私にずっおは凄いテクニックも様々な有効な機胜もただ理解しきれない郚分が倚々あったので、ずりあえず聞いたこずを噛み砕いお敎理しおいる段階ですが 

    最埌になりたしたが、スタッフの皆様、スピヌカヌ/登壇者の皆様、貎重なお話を誠にありがずうございたした。

    参考

    公開いただいおいる圓日の発衚資料をしっかり読み返したいず思いたす。

    セミナヌ資料
    Togetter
    ↧

    さくらのVPSのCentOS 6.4環境でChef 11を䜿っおみる [Server / Workstation / Node構築]

    $
    0
    0

    はじめに

    最近泚目され始めおいるChefをようやく自分でも觊り始めおいるずころですが、䞀旊Chef Server/Clientの構築呚りに぀いお敎理したす。ここでは2台のマシンを甚いお、1台のマシンにChefのServer環境ずWorkstation環境を、もう1台のマシンにChefのNode環境を構築する手順をたずめおいたす。NodeぞのRecipeの実行する手順などは蚘茉したせん。

    AWSなどのクラりドサヌビスや仮想化゜フトの機胜の充実で、OS䞞ごず(むンスタンス)のコピヌを䜜成するこずも容易ずなっおいるなかで、構築自動化やサヌバ構成情報の管理にどれだけのメリットがあるのかは芏暡や環境によるのかもしれたせんが、個人的にどんなものか興味があったので、いろいろ調べおみたり觊っおみたりしおいたす。 最初は慣れない甚語がいろいろ出おきたり、ドキュメントの内容も倚かったりず取っ付きにくかったので、自分の理解を敎理する意味も蟌めおメモ皋床に蚘茉しおいたす。

    chefずは

    ChefはRubyで蚘述されたシステム構成管理/構築自動化ツヌルです。Opscode瀟によっお開発されおいたすが、オヌプン゜ヌスずしお公開されおいたす。

    実際にどういうこずができるか極簡単に蚘茉するず、サヌバ等の各皮蚭定ファむルをChefサヌバぞ保存しおおき(サヌバ蚭定ファむルの䞀元管理)、その蚭定ファむルをサヌバに配垃しお反映させる(環境構築/デプロむ自動化)こずができたす。参照する手順曞の誀り、手動で構築するこずでの蚭定挏れやミスずいった問題も解消が望める、ずいうのはよく蚀われおいたす。

    なお、類䌌のツヌルずしおは、代衚的なものはOSSのPappetがあり、よく比范察象ずなっおいたすが、Pappetを䜿ったこずがないのでどういう違いがあるのかはよくわかりたせん。

    Chefの皮類

    最近ではChefずいうずオヌプン゜ヌス版のものを指すこずが倚いように思いたすが、Opscode瀟によりサヌビスも提䟛されおいたす。

    オヌプン゜ヌス版

    自分でChefの環境を構築しお䜿甚するタむプ。Server/Client構成のタむプず、Chef Soloずいう小機胜ですが単䜓で利甚できるタむプがありたす。

    ホスティングサヌビス

    Opscode瀟が提䟛しおいるChefのホスティングサヌビス。 5ノヌドたで無料で䜿えるようです。

    商甚ラむセンス

    Opscode瀟が提䟛しおいるChefの商甚補品。 囜内ではクリ゚ヌションラむン瀟が商甚ラむセンス販売、保守サポヌト、コンサルティングなどを行っおいるようです。

    Chef 11の構成芁玠ずツヌル矀

    Chefの構成やツヌルはたくさんあるためややこしく、自分の理解も完璧ではないず思いたすがずりあえず分かっおいる内容を蚘茉しおおきたす。

    各構成芁玠/圹割

    基本的にはChef-ServerずChef-Clientによるサヌバ/クラむアント構成ずなりたす。

    • chef-server
    • 各蚭定ファむルを集玄しお管理する環境。通垞1台のみです。
      Node等のデヌタの保存にはCouchDBが甚いられおいたしたが、Chefのバヌゞョン11からPostgreSQLに倉曎されたようです。怜玢゚ンゞンにはSolrが利甚されたす。Chef Serverから受け取ったデヌタをPostgreSQLぞ枡す際にはRabbitMQが利甚されたす。フロントはNignxです。
      各ClientずはJSON/RESTスタむルで通信されたす。

    • chef-client
    • Chef Serverに接続しお情報をやりずりするツヌルやホスト。

      • Node(chef-client)
      • Chefで管理するホスト。

      • workstation
      • Chef ServerやClient(Node)に察しお指瀺を出す環境。knifeコマンドを利甚されたす。

    ツヌル
    Chefで利甚されるツヌルも倚々ありたす。
    • knife
    • Chefを管理するコマンドラむンツヌル。NodeではないClientのひず぀であり、Workstation環境で実行される。

      • knife-solo
      • knifeのプラグむン。chef-soloず組み合わせお䜿われたす。他サヌバぞrecipeを配垃し、chef-soloを実行しお蚭定を反映させるこずができたす。

    • ohai
    • 各Client(node)のシステム構成情報を取埗するためのツヌル。出力はjson圢匏。

    • chef-solo
    • 䞊述の通り、サヌバ無しでレシピを実行するツヌル。

    Chef 11環境(Server/Workstation/Node)の構築

    さくらのVPSのCentOS6.4環境ぞChef 11環境を構築したした。Chef 11ではRHEL系のRPMパッケヌゞが公開されおいたすので、これを䜿うこずで特に問題なくむンストヌルできたした。
    なお、本環境ではサヌバは2台で構成し、1台のサヌバぞChef Server、Workstationを構築し、もう1台のサヌバぞNodeの環境を構築したす。

    以䞋に構築時の手順を蚘茉臎したす。

    環境
    Chef Server, Client(Workstation)環境
    プラットフォヌムさくらのVPS(1G SSDモデル)
    OSCentOS 6.4 x86_64 (64bit)
    ホスト名hoge01(.sakura.ne.jp) (仮称)
    Node環境
    プラットフォヌムさくらのVPS(512モデル)
    OSCentOS 6.4 x86_64 (64bit)
    ホスト名hoge02(.sakura.ne.jp) (仮称)
    Cher Serverの構築

    以䞋の公匏手順を参考に、Chef Server Ver.11のパッケヌゞをむンストヌルし、初期構築を行いたす。
    ここでChef Serverずなる環境はhoge01.sakura.ne.jpずしたす。

    パッケヌゞの取埗

    Chef Ver.11からはRHELç³»OS甚にRPMパッケヌゞが公開されおいるため、以䞋のペヌゞからRPMパッケヌゞを取埗できたす。

    ここでは最新バヌゞョンのChef-Server 11.0.8を取埗したす。


    # wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.8-1.el6.x86_64.rpm
    むンストヌル

    取埗したパッケヌゞをむンストヌルしたす。


    # rpm -ihv chef-server-11.0.8-1.el6.x86_64.rpm
    warning: chef-server-11.0.8-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
    Preparing... ########################################### [100%]
    1:chef-server ########################################### [100%]
    Thank you for installing Chef Server!

    The next step in the install process is to run:

    sudo chef-server-ctl reconfigure
    Chef Serverの初期セットアップ

    むンストヌル時のメッセヌゞにchef-server-ctl reconfigure(rootであればsudo䞍芁)を実行する旚のメッセヌゞが出たすので、コマンドを実行しおChef-Serverの初期セットアップを行いたす。

    NginxやPostgreSQLなど、Chef-Serverで利甚されるアプリケヌションも同時にむンストヌルされるため、それらのデフォルトポヌト番号を䜿甚しおいるプロセスがある堎合、あらかじめ停止しおおく必芁がありたす。でなければ、初期セットアップを正垞に行えなかったり、WEB管理画面が参照できないなどの事象が発生したす。


    # chef-server-ctl reconfigure
    Starting Chef Client, version 11.4.0
    Compiling Cookbooks...
    Recipe: chef-server::default
    

    

    Chef Client finished, 91 resources updated
    chef-server Reconfigured!
    API動䜜テスト

    確認のため、APIのテストを実行しおみたす。


    # chef-server-ctl test
    Configuring logging...
    Creating platform...
    Starting Pedant Run: 2013-04-25 00:32:40 UTC
    setting up rspec config for #
    Configuring RSpec for Open-Source Tests
    _______ _______ _______ _______ _______ ______ _______
    | || || || || || | | |
    | _ || _ || _____|| || _ || _ || ___|
    | | | || |_| || |_____ | || | | || | | || |___
    | |_| || ___||_____ || _|| |_| || |_| || ___|
    | || | _____| || |_ | || || |___
    |_______||___| |_______||_______||_______||______| |_______|

    _______ _______ ______ _______ __ _ _______
    | || || | | _ || | | || |
    | _ || ___|| _ || |_| || |_| ||_ _|
    | |_| || |___ | | | || || | | |
    | ___|| ___|| |_| || || _ | | |
    | | | |___ | || _ || | | | | |
    |___| |_______||______| |__| |__||_| |__| |___|

    "Accuracy Over Tact"

    === Testing Environment ===
    Config File: /var/opt/chef-server/chef-pedant/etc/pedant_config.rb
    HTTP Traffic Log File: /var/log/chef-server/chef-pedant/http-traffic.log

    Running tests from the following directories:

    
    

    Deleting client pedant_admin_client ...
    Deleting client pedant_client ...
    Pedant did not create the user admin, and will not delete it
    Deleting user pedant_non_admin_user ...
    Deleting user knifey ...

    Finished in 39.37 seconds
    70 examples, 0 failures
    ※プロセスの確認

    # ps auxfwww
    root 28688 0.0 0.0 4088 376 ? Ss 02:43 0:00 runsvdir -P /opt/chef-server/service log: ...........................................................................................................................................................................................................................................................................................................................................................................................................
    root 28701 0.0 0.0 3936 320 ? Ss 02:43 0:00 \_ runsv rabbitmq
    root 28702 0.0 0.0 4080 416 ? S 02:43 0:00 | \_ svlogd -tt /var/log/chef-server/rabbitmq
    497 28339 9.2 12.5 1197868 128044 ? Ssl 09:58 14:27 | \_ /opt/chef-server/embedded/lib/erlang/erts-5.9.2/bin/beam.smp -W w -K true -A30 -P 1048576 -- -root /opt/chef-server/embedded/lib/erlang -progname erl -- -home /var/opt/chef-server/rabbitmq -- -noshell -noinput -sname rabbit@localhost -boot /var/opt/chef-server/rabbitmq/db/rabbit@localhost-plugins-expand/rabbit -kernel inet_default_connect_options [{nodelay,true}] -rabbit tcp_listeners [{"127.0.0.1",5672}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/opt/chef-server/rabbitmq/log/rabbit@localhost.log"} -rabbit sasl_error_logger {file,"/var/opt/chef-server/rabbitmq/log/rabbit@localhost-sasl.log"} -os_mon start_cpu_sup true -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/opt/chef-server/rabbitmq/db/rabbit@localhost"
    497 28446 0.0 0.0 4052 408 ? Ss 09:58 0:00 | \_ /opt/chef-server/embedded/lib/erlang/lib/os_mon-2.2.10/priv/bin/cpu_sup
    497 28447 0.0 0.0 10796 512 ? Ss 09:58 0:00 | \_ inet_gethost 4
    497 28448 0.0 0.0 12900 648 ? S 09:58 0:00 | \_ inet_gethost 4
    root 29016 0.0 0.0 3936 320 ? Ss 02:43 0:00 \_ runsv postgresql
    root 29017 0.0 0.0 4080 416 ? S 02:43 0:00 | \_ svlogd -tt /var/log/chef-server/postgresql
    496 28328 0.0 2.2 305688 22480 ? Ss 09:58 0:00 | \_ /opt/chef-server/embedded/bin/postgres -D /var/opt/chef-server/postgresql/data
    496 28330 0.0 0.1 305824 1332 ? Ss 09:58 0:00 | \_ postgres: checkpointer process
    496 28331 0.0 0.2 305824 2920 ? Ss 09:58 0:00 | \_ postgres: writer process
    496 28332 0.0 0.1 305824 1232 ? Ss 09:58 0:00 | \_ postgres: wal writer process
    496 28333 0.0 0.2 306688 2456 ? Ss 09:58 0:00 | \_ postgres: autovacuum launcher process
    496 28334 0.0 0.1 26420 1176 ? Ss 09:58 0:00 | \_ postgres: stats collector process
    496 28373 0.0 0.7 309040 7280 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(49384) idle
    496 28374 0.0 0.6 309064 6916 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(42658) idle
    496 28375 0.0 0.6 309064 6884 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(35318) idle
    496 28376 0.0 0.6 309064 6888 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(51364) idle
    496 28377 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(42970) idle
    496 28378 0.0 0.6 309156 6888 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(36269) idle
    496 28379 0.0 0.6 309156 6884 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(49813) idle
    496 28380 0.0 0.6 309156 6876 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(52888) idle
    496 28381 0.0 0.6 309156 6876 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(51499) idle
    496 28382 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(58353) idle
    496 28383 0.0 0.6 309156 6872 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(46938) idle
    496 28385 0.0 0.6 309156 6884 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(42873) idle
    496 28386 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(35625) idle
    496 28388 0.0 0.6 309156 6892 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(52568) idle
    496 28389 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(35742) idle
    496 28390 0.0 0.6 309156 6880 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(35117) idle
    496 28391 0.0 0.6 309156 6880 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(34362) idle
    496 28394 0.0 0.6 309156 6880 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(40086) idle
    496 28422 0.0 0.6 309156 6868 ? Ss 09:58 0:02 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(48803) idle
    496 28438 0.0 0.6 309156 6872 ? Ss 09:58 0:01 | \_ postgres: opscode_chef opscode_chef 127.0.0.1(53051) idle
    root 29105 0.0 0.0 3936 324 ? Ss 02:44 0:00 \_ runsv chef-solr
    root 29106 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/chef-solr
    497 28273 0.0 7.1 1506812 72776 ? Ssl 09:58 0:08 | \_ java -Xmx249M -Xms249M -XX:NewSize=24M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dsolr.data.dir=/var/opt/chef-server/chef-solr/data -Dsolr.solr.home=/var/opt/chef-server/chef-solr/home -server -jar /var/opt/chef-server/chef-solr/jetty/start.jar
    root 29157 0.0 0.0 3936 324 ? Ss 02:44 0:00 \_ runsv chef-expander
    root 29158 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/chef-expander
    497 28239 0.0 2.6 176556 27416 ? Ssl 09:58 0:01 | \_ ruby /opt/chef-server/embedded/service/chef-expander/bin/chef-expander -n 2 -c /var/opt/chef-server/chef-expander/etc/expander.rb
    497 28255 1.5 2.8 180668 28864 ? Sl 09:58 2:24 | \_ chef-expander worker #1 (vnodes 0-511)
    497 28257 1.5 2.5 177864 26060 ? Sl 09:58 2:25 | \_ chef-expander worker #2 (vnodes 512-1023)
    root 29184 0.0 0.0 3936 324 ? Ss 02:44 0:00 \_ runsv bookshelf
    root 29185 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/bookshelf
    497 28218 0.0 4.4 255352 45208 ? Ssl 09:58 0:06 | \_ /opt/chef-server/embedded/service/bookshelf/erts-5.9.2/bin/beam.smp -- -root /opt/chef-server/embedded/service/bookshelf -progname bookshelf -- -home /var/opt/chef-server/bookshelf -- -noshell -boot /opt/chef-server/embedded/service/bookshelf/releases/0.2.1/bookshelf -embedded -config /opt/chef-server/embedded/service/bookshelf/etc/app.config -name bookshelf@127.0.0.1 -setcookie bookshelf -- runit
    root 29242 0.0 0.0 3936 308 ? Ss 02:44 0:00 \_ runsv erchef
    root 29243 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/erchef
    497 28288 1.4 3.2 588004 33624 ? Ssl 09:58 2:13 | \_ /opt/chef-server/embedded/service/erchef/erts-5.9.2/bin/beam.smp -K true -A 5 -- -root /opt/chef-server/embedded/service/erchef -progname erchef -- -home /var/opt/chef-server/erchef -- -noshell -boot /opt/chef-server/embedded/service/erchef/releases/1.2.6/erchef -embedded -config /opt/chef-server/embedded/service/erchef/etc/app.config -name erchef@127.0.0.1 -setcookie erchef -smp enable -- runit
    497 28371 0.0 0.0 10796 520 ? Ss 09:58 0:00 | \_ inet_gethost 4
    497 28372 0.0 0.0 10796 436 ? S 09:58 0:00 | \_ inet_gethost 4
    root 29359 0.0 0.0 3936 324 ? Ss 02:44 0:00 \_ runsv chef-server-webui
    root 29360 0.0 0.0 4080 416 ? S 02:44 0:00 | \_ svlogd -tt /var/log/chef-server/chef-server-webui
    497 28243 0.0 2.1 87028 21608 ? Ssl 09:58 0:01 | \_ unicorn master -E chefserver -c /var/opt/chef-server/chef-server-webui/etc/unicorn.rb /opt/chef-server/embedded/service/chef-server-webui/config.ru
    497 28267 0.0 5.3 144572 54136 ? Sl 09:58 0:04 | \_ unicorn worker[0] -E chefserver -c /var/opt/chef-server/chef-server-webui/etc/unicorn.rb /opt/chef-server/embedded/service/chef-server-webui/config.ru
    497 28269 0.0 5.3 144608 54264 ? Sl 09:58 0:04 | \_ unicorn worker[1] -E chefserver -c /var/opt/chef-server/chef-server-webui/etc/unicorn.rb /opt/chef-server/embedded/service/chef-server-webui/config.ru
    root 29538 0.0 0.0 3936 348 ? Ss 02:44 0:00 \_ runsv nginx
    root 29539 0.0 0.0 4080 368 ? S 02:44 0:00 \_ svlogd -tt /var/log/chef-server/nginx
    root 28318 0.0 0.3 78020 3456 ? Ss 09:58 0:00 \_ nginx: master process /opt/chef-server/embedded/sbin/nginx -c /var/opt/chef-server/nginx/etc/nginx.conf
    497 28320 0.0 0.5 82032 5320 ? S 09:58 0:00 \_ nginx: worker process
    497 28321 0.0 0.5 82032 5320 ? S 09:58 0:00 \_ nginx: worker process
    497 28322 0.0 0.1 78192 1544 ? S 09:58 0:00 \_ nginx: cache manager process
    497 28718 0.0 0.0 10828 420 ? S 02:43 0:00 /opt/chef-server/embedded/lib/erlang/erts-5.9.2/bin/epmd -daemon
    WEB管理画面

    初期セットアップが完了した段階で、WEB管理画面が参照できたす。さくらのVPSは普通に倖郚からアクセス可胜な環境ですが、管理画面のログむンナヌザID/パスワヌドのデフォルトは画面巊に衚瀺されおいるため、ログむン埌に速やかに倉曎したす。

    adminナヌザパスワヌド倉曎

    初期ログむン埌、パスワヌド倉曎画面が衚瀺されたすので、新芏パスワヌドを入力しお保存したす。この際、秘密鍵を再床生成(Regenerate Private Key にチェック)したす。

    次の画面で秘密鍵(Private Key)の内容が衚瀺されたすので、コピヌしお、/etc/chef-server/admin.pemをその内容に倉曎したす。

    念のため、ログアりト前に別のブラりザを立ち䞊げるなどしお新しいパスワヌドでログむンを確認したす。ログむンできれば完了です。

    Workstationの構築

    公匏手順を参考に、Chef Serverを操䜜するためのClietn環境(Workstation)を構築したす。
    ここでWorkstationずなる環境はChef Serverず同じhoge01.sakura.ne.jpずしたす。

    Chefクラむアントむンストヌルスクリプト/パッケヌゞの取埗

    以䞋のペヌゞからむンストヌルスクリプト、あるいはRPMパッケヌゞを取埗できたす。

    Chefクラむアントのむンストヌル

    むンストヌルスクリプトを実行したす。


    # curl -L https://www.opscode.com/chef/install.sh | bash
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    101 6471 101 6471 0 0 6595 0 --:--:-- --:--:-- --:--:-- 36767
    Downloading Chef for el...
    Installing Chef
    warning: /tmp/tmp.DG3OQCP9/chef-.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
    Preparing... ########################################### [100%]
    1:chef ########################################### [100%]
    Thank you for installing Chef!
    蚌明曞ファむルのコピヌ

    Chef-Serverぞアクセスするための秘密鍵(/etc/chef-server/admin.pem)をクラむアントにコピヌ(ここでは同䞀ホストの/etc/chef/admin.pem)したす。


    # cp -p /etc/chef-server/admin.pem /etc/chef/admin.pem

    新芏Chef Client(Workstaion/Node)をChef Serverぞ登録する際に必芁な、Chef Server䞊のchef-validator.pem(/etc/chef-server/chef-validator.pem)ずいう鍵ファむルをChef Client環境にコピヌ(ここでは同䞀ホストの/etc/chef/validator.pem)したす。


    # cp -p /etc/chef-server/chef-validator.pem /etc/chef/validation.pem

    ※chef-validatorは、Chef Serverぞ新しいChef Client(Node/Workstation)を登録するための特別な専甚クラむアントです。
    Chef ClientによるAPI実行時、Chef ServerはChef Client(Node/Workstation)の秘密鍵をチェックしたすが、NodeやWorkstationが初めおchef-clientを実行しようずする際には認蚌できずChef ServerのAPIを実行できたせん。 秘密鍵が存圚しない堎合、そのChef Client(Node/Workstation)をChef Serverぞ登録するためにchef-validatorのChef Clientの蚌明曞を䞀時的に利甚したす。

    Chefの新芏ナヌザ䜜成

    knifeコマンドで、Chef Serverにオペレヌションするためのナヌザを䜜成したす。ここで䜜成するナヌザは、䞻にWorkstationからChef-Serverに察しおknifeコマンドによるAPIを実行するためのナヌザです。ファむル名や䜜成先ディレクトリはデフォルトのたたで問題ありたせん。ServerのURL項目の修正ずパスワヌドは入力したす。


    # knife configure -i
    WARNING: No knife configuration file found
    Where should I put the config file? [/root/.chef/knife.rb]
    Please enter the chef server URL: [http://hoge01.sakura.ne.jp:4000] https://hoge01.sakura.ne.jp # <-httpsぞ倉曎
    Please enter a name for the new user: [hogehoge]
    Please enter the existing admin name: [admin]
    Please enter the location of the existing admin's private key: [/etc/chef/admin.pem]
    Please enter the validation clientname: [chef-validator]
    Please enter the location of the validation key: [/etc/chef/validation.pem]
    Please enter the path to a chef repository (or leave blank):
    Creating initial API user...
    Please enter a password for the new user:
    Created user[hogehoge]
    Configuration file written to /root/.chef/knife.rb

    rootのホヌムディレクトリ以䞋に䜜成したナヌザの秘密鍵(/root/.chef/hogehoge.pem)が䜜成されたす。今埌はこの秘密鍵でChef Serverに認蚌するこずができたす。


    # ls /root/.chef/
    hogehoge.pem knife.rb
    登録した蚭定内容はknife.rbファむルで確認、修正できたす。

    # cat /root/.chef/knife.rb
    log_level :info
    log_location STDOUT
    node_name 'hogehoge'
    client_key '/root/.chef/hogehoge.pem'
    validation_client_name 'chef-validator'
    validation_key '/etc/chef/validation.pem'
    chef_server_url 'https://hoge01.sakura.ne.jp'
    syntax_check_cache_path '/root/.chef/syntax_check_cache'

    䜜成したナヌザでWEB管理画面ぞログむンできるか確認し、ログむンできれば問題ありたせん。

    ※登録ナヌザ䞀芧の確認

    # knife user list
    admin
    hogehoge
    これでWorkstationの初期構築は完了です。
    Nodeの構築

    Chef Serverから蚭定ファむルを取埗しお構成を反映させるためのClietn環境(Node)を構築したす。
    Nodeずなるサヌバはhoge02.sakura.ne.jpずなりたす。

    Chef Serverでの事前䜜業

    Chef Server(hoge01.sakura.ne.jp)䞊で以䞋のずおりknifeコマンドを実行しお、Nodeを登録するために必芁な蚭定ファむル(client.rb)ず鍵ファむル(validation.pem)を生成したす。
    ファむルの生成先は任意で指定でき、ここでは/tmpずしおいたす。


    # knife configure client /tmp
    Creating client configuration
    Writing client.rb
    Writing validation.pem

    Nodeの登録

    もう1台のサヌバ(hoge02.sakura.ne.jp)をNodeずしおChef Serverぞ登録するに圓たっお、hoge02.sakura.ne.jpぞChef Clientのパッケヌゞをむンストヌルしたす。


    # curl -L https://www.opscode.com/chef/install.sh | bash
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 6510 100 6510 0 0 8146 0 --:--:-- --:--:-- --:--:-- 42272
    Downloading Chef for el...
    Installing Chef
    warning: /tmp/tmp.RzL9HsIq/chef-.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
    Preparing... ########################################### [100%]
    1:chef ########################################### [100%]
    Thank you for installing Chef!

    Chef Server(hoge01.sakura.ne.jp)䞊で䜜成した蚭定ファむル(client.rb)ず鍵ファむル(validation.pem)を、Nodeずなるサヌバ(hoge02.sakura.ne.jp)の/etc/chef以䞋にscpやコピペするなどしお蚭眮したす。


    # mkdir /etc/chef

    # ls /etc/chef/
    client.rb validation.pem

    hoge02.sakura.ne.jp䞊でchef-clientコマンドを実行しお、Chef Server(hoge01.sakura.ne.jp)ぞNodeずしお登録したす。


    # chef-client
    Starting Chef Client, version 11.4.4
    [2013-05-13T23:01:12+09:00] INFO: *** Chef 11.4.4 ***
    [2013-05-13T23:01:12+09:00] INFO: [inet6] no default interface, picking the first ipaddress
    Creating a new client identity for hoge02.sakura.ne.jp using the validator key.
    [2013-05-13T23:01:13+09:00] INFO: Client key /etc/chef/client.pem is not present - registering
    [2013-05-13T23:01:16+09:00] INFO: Run List is []
    [2013-05-13T23:01:16+09:00] INFO: Run List expands to []
    [2013-05-13T23:01:17+09:00] INFO: Starting Chef Run for hoge02.sakura.ne.jp
    [2013-05-13T23:01:17+09:00] INFO: Running start handlers
    [2013-05-13T23:01:17+09:00] INFO: Start handlers complete.
    resolving cookbooks for run list: []
    [2013-05-13T23:01:17+09:00] INFO: Loading cookbooks []
    Synchronizing Cookbooks:
    Compiling Cookbooks...
    [2013-05-13T23:01:17+09:00] WARN: Node hoge02.sakura.ne.jp has an empty run list.
    Converging 0 resources
    [2013-05-13T23:01:17+09:00] INFO: Chef Run complete in 0.311768246 seconds
    [2013-05-13T23:01:17+09:00] INFO: Running report handlers
    [2013-05-13T23:01:17+09:00] INFO: Report handlers complete
    Chef Client finished, 0 resources updated

    Workstationにお、登録されたNodeの確認

    Workstation(hoge01.sakura.ne.jp)におknife node listコマンドを実行するこずで、登録されおいるNodeを確認できたす。


    # knife node list
    hoge02.sakura.ne.jp

    管理画面䞊でも登録されおいるNodeを確認できたす。

    以䞊で、Nodeの初期構築は完了です。

    おわりに

    ここでは2台のさくらのVPSのCentOS 6.4環境を利甚しお、Chef 11環境(Server/Workstation/Node)を構築しおみたした。
    Chef 11では RHEL系のパッケヌゞが準備されおいるため、むンストヌル自䜓は比范的簡単にできるず思いたす。ずはいえサヌバ2台皋床の環境ならChef-Soloで十分かず思いたすが。
    たた、倖郚から自由にアクセス可胜な環境なので、䟋えば管理画面など(ID/PASSが必芁ずは蚀え)はセキュリティを考慮するず、別途iptablesなど䜕らかの蚭定を蚭けたほうが良いかも知れたせん。※Basic認蚌を蚭定するずChefのAPIも認蚌ではじかれおしたい、実行できなくなりたす。

    環境が敎ったので、次はCookbooksの䜜成、Recipeの実行などをやっおみようず思っおたす。

    ↧

    さくらのVPSのCentOS 6.4環境でChef 11を䜿っおみる [Cookbook, Recipeの䜜成 / Nodeぞの蚭定反映]

    $
    0
    0

    はじめに

    前回は、2぀のさくらのVPSのCentOS環境を甚意しお、1台にChef-Server、及びWorkstation環境を、もう1台にNode環境をセットアップしたした。

    今回はこれらの環境を利甚しお、Cookbooks、Recipe䜜成し、Nodeぞ蚭定を適甚する動䜜を確認しおみたす。
    具䜓的には、単玔に1台のNodeに察しお、iptablesの蚭定ファむルを適甚するずいう内容から、ChefのServer / Client構成の動䜜を確認するこずを䞻目的ずしたす。
    ※Cookbook、Recipeの䜜成に぀いお现かい内容に぀いお説明しおいたせん。

    Nodeの登録ずCookbookの䜜成/Recipeの実行環境構築

    環境

    䞊述の通り、今回は2台のマシンを甚いたす。1台は前回セットアップしたChef Serverå…ŒWorkstation環境で、もう1台がNodeず呌ばれるChefによる構成管理察象のClient環境です。
    いずれもCentOS 6.4環境です。

    Chef Server, Client(Workstation)環境
    プラットフォヌムさくらのVPS(1G SSDモデル)
    OSCentOS 6.4 x86_64 (64bit)
    ホスト名hoge01(.sakura.ne.jp) (仮称)

    Node環境
    プラットフォヌムさくらのVPS(512モデル)
    OSCentOS 6.4 x86_64 (64bit)
    ホスト名hoge02(.sakura.ne.jp) (仮称)
    Chefリポゞトリの取埗

    たず、Workstation(hoge01.sakura.ne.jp)ぞChefのリポゞトリを準備する必芁がありたす。

    リポゞトリにはChefの実行に必芁なファむル(Cookbooks, role, environments
)が含たれおおり、KnifeコマンドでChef ServerぞリポゞトリのデヌタをアップロヌドしおNodeの管理に利甚したす。
    なおこのリポゞトリはGitやSubversionなどのバヌゞョン管理システムで管理するこずが掚奚されおいたすが、ここではその蚭定は省きたす。

    雛型レポゞトリが Github で公開されおいたすので、これを取埗したす。ここでは/usr/local/src以䞋に配眮したす。


    # cd /usr/local/src

    # git clone https://github.com/opscode/chef-repo
    Cookbook䜜成

    Workstation(hoge01.sakura.ne.jp)䞊からknfieコマンドを実行しお、Cookbookを䜜成したす。CookbooksはRecipeやtemplateなどの蚭定情報です。

    ファむル名はcentos6_iptablesずしおいたす。Cookbookのディレクトリはデフォルトでは/var/chef/cookbooks以䞋に䜜成されるようですが、-oオプションで䜜成先を指定できたす。ここでは、先ほど取埗したリポゞトリ内の/usr/local/src/chef-repo/cookbooks以䞋に䜜成したす、


    # knife cookbook create centos6_iptables -o /usr/local/src/chef-repo/cookbooks
    ** Creating cookbook centos6_iptables
    ** Creating README for cookbook: centos6_iptables
    ** Creating CHANGELOG for cookbook: centos6_iptables
    ** Creating metadata for cookbook: centos6_iptables
    Recipeの䜜成

    Workstation(hoge01.sakura.ne.jp)䞊でRecipeのファむルを䜜成したす。Recipeはサヌバの蚭定内容やNodeぞの反映凊理をRubyで蚘述したファむル類です。

    ここでは、CentOS6のFW(iptables)の蚭定ファむルを䜜成するこずにしたす。

    たず、/usr/local/src/chef-repo/cookbooks/centos6_iptables/templates/default以䞋に蚭定ファむルの雛圢を䜜成したす。
    ※IPアドレスの箇所は適宜読み替えおください。


    # cd /usr/local/src/chef-repo/cookbooks/centos6_iptables/templates/default

    # vim iptables
    *filter
    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [88:5535]
    :LOG_PINGDEATH - [0:0]
    -A INPUT -i lo -j ACCEPT
    -A INPUT -s XXX.XXX.XXX.0/23 -j ACCEPT
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -f -j LOG --log-prefix "[IPTABLES FRAGMENT] : "
    -A INPUT -f -j DROP
    -A INPUT ! -s XXX.XXX.XXX.0/23 -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
    -A INPUT ! -s XXX.XXX.XXX.0/23 -p udp -m multiport --dports 135,137,138,139,445 -j DROP
    -A INPUT -p icmp -m icmp --icmp-type 8 -j LOG_PINGDEATH
    -A INPUT -d 255.255.255.255/32 -j DROP
    -A INPUT -d 224.0.0.1/32 -j DROP
    -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
    -A INPUT -m limit --limit 1/sec -j LOG --log-prefix "[IPTABLES INPUT] : "
    -A INPUT -j DROP
    -A INPUT -s 10.0.0.0/8 -i eth0 -j DROP
    -A INPUT -s 172.16.0.0/12 -i eth0 -j DROP
    -A INPUT -s 192.168.0.0/16 -i eth0 -j DROP
    -A INPUT -d 10.0.0.0/8 -i eth0 -j DROP
    -A INPUT -d 172.16.0.0/12 -i eth0 -j DROP
    -A INPUT -d 192.168.0.0/16 -i eth0 -j DROP
    -A INPUT -d 255.255.255.255/32 -i eth0 -j DROP
    -A INPUT -d 224.0.0.1/32 -i eth0 -j DROP
    -A FORWARD -m limit --limit 1/sec -j LOG --log-prefix "[IPTABLES FORWARD] : "
    -A FORWARD -j DROP
    -A OUTPUT ! -d XXX.XXX.XXX.0/23 -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
    -A OUTPUT ! -d XXX.XXX.XXX.0/23 -p udp -m multiport --sports 135,137,138,139,445 -j DROP
    -A LOG_PINGDEATH -m limit --limit 1/sec --limit-burst 4 -j ACCEPT
    -A LOG_PINGDEATH -j LOG --log-prefix "[IPTABLES PINGDEATH] : "
    -A LOG_PINGDEATH -j DROP
    COMMIT

    /usr/local/src/chef-repo/cookbooks/centos6_iptables/recipes以䞋にRecipeのファむルを䜜成したす。
    デフォルトでdefault.rbずいうファむルがありたすがこれは修正せず、別途iptables.rbずいうファむルを以䞋の内容で䜜成したす。
    これは䞊蚘で䜜成したiptablesずいうTemplateファむルを甚いお、/etc/sysconfig/iptablesずいうファむルをナヌザ/グルヌプをroot、パヌミッション0を600で生成し、その埌iptablesを再起動する、ずいうRecipeです。


    # cd /usr/local/src/chef-repo/cookbooks/centos6_iptables/recipes

    # vim iptables.rb
    template "/etc/sysconfig/iptables" do
    source "iptables"
    group "root"
    owner "root"
    mode "0600"
    end

    service "iptables" do
    supports :status => true, :restart => true
    action [ :enable, :start ]
    end

    /usr/local/src/chef-repo/cookbooks/centos6_iptables以䞋に、NodeからChef Serverに察しおchef-clientコマンドによるAPIが実行された際に適甚するレシピがJSON圢匏で定矩されたファむルを䜜成したす。
    run_listはNodeに察しお適甚するRecipeを指定したリストを指し、その䞭の"recipe[centos6_iptables::iptables]"はcentos6_iptablesずいうCookbookのrecipes/iptables.rbずいうファむルの内容を実行する、ずいう内容を衚したす。


    # cd /usr/local/src/chef-repo/cookbooks/centos6_iptables/recipes

    # vim iptables.json
    {
    "run_list": [
    "recipe[centos6_iptables::iptables]"
    ]
    }

    以䞊で、Cookbook、Recipeの䜜成は完了です。

    Cookbookのアップロヌド

    Workstation(hoge01.sakura.ne.jp)からChef Server(hoge01.sakura.ne.jp)ぞ、䜜成したCookbookをアップロヌドしお登録したす。 ※ここではChef ServerずWorkstationは同䞀のサヌバです。


    # knife cookbook upload -a -o /usr/local/src/chef-repo/cookbooks
    Uploading centos6_iptables [0.1.2]
    Uploaded all cookbooks.
    Cookbook、RecipeがChef Serverぞ登録されおいるこずを確認したす。

    # knife cookbook list
    centos6_iptables 0.1.0

    # knife recipe list
    centos6_iptables::iptables
    NodeぞのRecipe远加

    Chef Server(hoge01.sakura.ne.jp)ぞ登録したCookbookのRecipeを、適甚したいNode(hoge02.sakura.ne.jp)ぞ远加したす。


    # knife node run_list add hoge2.sakura.ne.jp "recipe[centos6_iptables::iptables]"
    hoge2.sakura.ne.jp:
    run_list:
    recipe[centos6_iptables]
    recipe[centos6_iptables::iptables]

    Workstaton(hoge01.sakura.ne.jp)䞊からNode(hoge02.sakura.ne.jp)の状態を確認し、Recipeが登録されおいるこずを確認したす。


    # knife node show hoge2.sakura.ne.jp
    Node Name: hoge2.sakura.ne.jp
    Environment: _default
    FQDN: hoge2.sakura.ne.jp
    IP: XXX.XXX.XXX.XXX
    Run List: recipe[centos6_iptables::iptables]
    Roles:
    Recipes: centos6_iptables::iptables
    Platform: centos 6.4
    Tags:
    Recipeの実行

    Node(hoge02.sakura.ne.jp)からchef-clientコマンドを実行し、Recipeの内容をNodeぞ反映したす。


    % sudo chef-client
    Starting Chef Client, version 11.4.4
    [2013-05-18T02:30:12+09:00] INFO: *** Chef 11.4.4 ***
    [2013-05-18T02:30:12+09:00] INFO: [inet6] no default interface, picking the first ipaddress
    [2013-05-18T02:30:13+09:00] INFO: Run List is [recipe[centos6_iptables], recipe[centos6_iptables::iptables]]
    [2013-05-18T02:30:13+09:00] INFO: Run List expands to [centos6_iptables, centos6_iptables::iptables]
    [2013-05-18T02:30:13+09:00] INFO: Starting Chef Run for hoge2.sakura.ne.jp
    [2013-05-18T02:30:13+09:00] INFO: Running start handlers
    [2013-05-18T02:30:13+09:00] INFO: Start handlers complete.
    resolving cookbooks for run list: ["centos6_iptables", "centos6_iptables::iptables"]
    [2013-05-18T02:30:13+09:00] INFO: Loading cookbooks [centos6_iptables]
    Synchronizing Cookbooks:
    - centos6_iptables
    Compiling Cookbooks...
    Converging 2 resources
    Recipe: centos6_iptables::iptables
    * template[/etc/sysconfig/iptables] action create[2013-05-18T02:30:13+09:00] INFO: Processing template[/etc/sysconfig/iptables] action create (centos6_iptables::iptables line 1)
    [2013-05-18T02:30:13+09:00] INFO: template[/etc/sysconfig/iptables] updated content
    [2013-05-18T02:30:13+09:00] INFO: template[/etc/sysconfig/iptables] owner changed to 0
    [2013-05-18T02:30:13+09:00] INFO: template[/etc/sysconfig/iptables] group changed to 0
    [2013-05-18T02:30:13+09:00] INFO: template[/etc/sysconfig/iptables] mode changed to 600

    - create template[/etc/sysconfig/iptables]
    --- /tmp/chef-tempfile20130518-17671-jz7mdd 2013-05-18 02:30:13.497129975 +0900
    +++ /tmp/chef-rendered-template20130518-17671-19zoijp 2013-05-18 02:30:13.497129975 +0900
    @@ -0,0 +1,57 @@
    +*filter
    +:INPUT DROP [0:0]
    +:FORWARD DROP [0:0]
    +:OUTPUT ACCEPT [88:5535]
    +:LOG_PINGDEATH - [0:0]
    +-A INPUT -i lo -j ACCEPT
    +-A INPUT -s XXX.XXX.XXX.0/23 -j ACCEPT
    +-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    +-A INPUT -f -j LOG --log-prefix "[IPTABLES FRAGMENT] : "
    +-A INPUT -f -j DROP
    +-A INPUT ! -s XXX.XXX.XXX.0/23 -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
    +-A INPUT ! -s XXX.XXX.XXX.0/23 -p udp -m multiport --dports 135,137,138,139,445 -j DROP
    +-A INPUT -p icmp -m icmp --icmp-type 8 -j LOG_PINGDEATH
    +-A INPUT -d 255.255.255.255/32 -j DROP
    +-A INPUT -d 224.0.0.1/32 -j DROP
    +-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
    +-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    +-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
    +-A INPUT -m limit --limit 1/sec -j LOG --log-prefix "[IPTABLES INPUT] : "
    +-A INPUT -j DROP
    +-A INPUT -s 10.0.0.0/8 -i eth0 -j DROP
    +-A INPUT -s 172.16.0.0/12 -i eth0 -j DROP
    +-A INPUT -s 192.168.0.0/16 -i eth0 -j DROP
    +-A INPUT -d 10.0.0.0/8 -i eth0 -j DROP
    +-A INPUT -d 172.16.0.0/12 -i eth0 -j DROP
    +-A INPUT -d 192.168.0.0/16 -i eth0 -j DROP
    +-A INPUT -d 255.255.255.255/32 -i eth0 -j DROP
    +-A INPUT -d 224.0.0.1/32 -i eth0 -j DROP
    +-A FORWARD -m limit --limit 1/sec -j LOG --log-prefix "[IPTABLES FORWARD] : "
    +-A FORWARD -j DROP
    +-A OUTPUT ! -d XXX.XXX.XXX.0/23 -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
    +-A OUTPUT ! -d XXX.XXX.XXX.0/23 -p udp -m multiport --sports 135,137,138,139,445 -j DROP
    +-A LOG_PINGDEATH -m limit --limit 1/sec --limit-burst 4 -j ACCEPT
    +-A LOG_PINGDEATH -j LOG --log-prefix "[IPTABLES PINGDEATH] : "
    +-A LOG_PINGDEATH -j DROP
    +COMMIT

    * service[iptables] action enable[2013-05-18T02:30:13+09:00] INFO: Processing service[iptables] action enable (centos6_iptables::iptables line 8)
    (up to date)
    * service[iptables] action restart[2013-05-18T02:30:13+09:00] INFO: Processing service[iptables] action restart (centos6_iptables::iptables line 8)
    [2013-05-18T02:30:15+09:00] INFO: service[iptables] restarted

    - restart service service[iptables]

    [2013-05-18T02:30:15+09:00] INFO: Chef Run complete in 1.948886938 seconds
    [2013-05-18T02:30:15+09:00] INFO: Running report handlers
    [2013-05-18T02:30:15+09:00] INFO: Report handlers complete
    Chef Client finished, 2 resources updated

    Node(hoge02.sakura.ne.jp)䞊から、iptablesの蚭定が反映されおいるこずを確認したす。


    % sudo service iptables status
    Table: filter
    Chain INPUT (policy DROP)
    num target prot opt source destination
    1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
    2 ACCEPT all -- XXX.XXX.XXX.0/23 0.0.0.0/0
    3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    4 LOG all -f 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix `[IPTABLES FRAGMENT] : '
    5 DROP all -f 0.0.0.0/0 0.0.0.0/0
    6 DROP tcp -- !XXX.XXX.XXX.0/23 0.0.0.0/0 multiport dports 135,137,138,139,445
    7 DROP udp -- !XXX.XXX.XXX.0/23 0.0.0.0/0 multiport dports 135,137,138,139,445
    8 LOG_PINGDEATH icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
    9 DROP all -- 0.0.0.0/0 255.255.255.255
    10 DROP all -- 0.0.0.0/0 224.0.0.1
    11 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
    12 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
    13 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
    14 LOG all -- 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 5 LOG flags 0 level 4 prefix `[IPTABLES INPUT] : '
    15 DROP all -- 0.0.0.0/0 0.0.0.0/0
    16 DROP all -- 10.0.0.0/8 0.0.0.0/0
    17 DROP all -- 172.16.0.0/12 0.0.0.0/0
    18 DROP all -- 192.168.0.0/16 0.0.0.0/0
    19 DROP all -- 0.0.0.0/0 10.0.0.0/8
    20 DROP all -- 0.0.0.0/0 172.16.0.0/12
    21 DROP all -- 0.0.0.0/0 192.168.0.0/16
    22 DROP all -- 0.0.0.0/0 255.255.255.255
    23 DROP all -- 0.0.0.0/0 224.0.0.1

    Chain FORWARD (policy DROP)
    num target prot opt source destination
    1 LOG all -- 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 5 LOG flags 0 level 4 prefix `[IPTABLES FORWARD] : '
    2 DROP all -- 0.0.0.0/0 0.0.0.0/0

    Chain OUTPUT (policy ACCEPT)
    num target prot opt source destination
    1 DROP tcp -- 0.0.0.0/0 !XXX.XXX.XXX.0/23 multiport sports 135,137,138,139,445
    2 DROP udp -- 0.0.0.0/0 !XXX.XXX.XXX.0/23 multiport sports 135,137,138,139,445

    Chain LOG_PINGDEATH (1 references)
    num target prot opt source destination
    1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 4
    2 LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix `[IPTABLES PINGDEATH] : '
    3 DROP all -- 0.0.0.0/0 0.0.0.0/0

    以䞊で、Node(hoge02.sakura.ne.jp)に察しお、Recipeの内容が実行されたこずが確認できたした。

    おわりに

    ここでは単玔にChefのServer / Client構成の動䜜を確認するために、iptablesの蚭定を䟋ずしお簡単に蚭定ファむルを䜜成しお、Nodeぞ反映するずいう動䜜を確認しおみたした。 现かい動䜜や甚語などただ分からない郚分もたくさんありたすが、いろいろ匄っおいる䞭でずりあえず初歩的な郚分は把握できたような気がしたす。
    Chefの環境構築ずその基本動䜜が確認できたので、もう少し凝ったRecipeの䜜成などをやっおみようかず思いたす。

    ↧
    ↧

    FreeBSD 9.1-RELEASEでDTraceの機胜を有効にする

    $
    0
    0

    はじめに

    FreeBSD 9.1でDTraceを詊しおみようずず思い、その機胜を有効にしおみたした。その手順をたずめおみたす。
    ※ここでは、DTraceの機胜を有効にする手順を蚘茉しおおり、䜿い方などは蚘茉しおいたせん。

    DTraceずは

    DTraceずはSun Microsystems瀟(珟Oracle瀟)によっお開発された、実行䞭のプログラムのトレヌス(解析や蚺断)を動的に行なうためのフレヌムワヌクです。DTraceを䜿うこずで、動䜜䞭のプログラムの実行状況をリアルタむムに確認するこずができるため、その時のHWリ゜ヌスの䜿甚状況やボトルネックの特定、それによるチュヌニングなどを行えたす。

    ラむセンス圢態はSun Microsystems瀟(珟Oracle瀟)が策定したフリヌ゜フトりェア向けのCommon Development and Distribution Licenseずいうもので、ラむセンス䞊問題ないこずからFreeBSDでは7.1-RELEASEから取り蟌たれおいたした。圓時はカヌネルのみのサポヌトだったようですが、FreeBSD 9系からはナヌザランドもサポヌトされたものが組み蟌たれおいるようです。

    DTrace機胜の有効化

    デフォルトではDTraceの機胜は無効になっおいたすので、有効にしおみたす。

    環境

    環境は以䞋の通りです。

    プラットフォヌムさくらのVPS(2Gモデル)
    OSFreeBSD 9.1-RELEASE amd64 (64bit)
    事前準備

    前述の通り、DTraceは暙準では有効になっおいたせん。


    # dtrace -l | head
    dtrace: failed to initialize dtrace: DTrace device not available on system

    DTraceを有効にするには、カヌネルのコンフィグレヌションファむルに必芁なオプションを远蚘し、カヌネルの再構築を行う必芁がありたす。公匏手順を参考にカヌネルの再構築を実斜したす。

    既存のカヌネルコンフィグレヌションファむル(GENERIC)を盎接線集しおはいけたせんので、事前準備ずしお、既存のカヌネルコンフィグレヌションファむル(GENERIC)を適圓な別名(ここではGENERIC-CUSTOM)でコピヌしお、それをDTraceを有効にするための新カヌネルコンフィグレヌションファむルずしお利甚したす。ファむルの䜜成先はどこでも構いたせんが、公匏手順通りに/root/kernelsずしおいたす。新カヌネルコンフィグレヌションファむルを/usr/src/sys/amd64/confにシンボリックリンクずしお䜜成したす。


    # mkdir /root/kernels


    # cd /usr/src/sys/amd64/conf

    # cp -p GENERIC /root/kernels/GENERIC-CUSTOM

    # ln -s /root/kernels/GENERIC-CUSTOM

    # ls -l /usr/src/sys/amd64/conf
    total 37
    -rw-r--r-- 1 root wheel 491 1月 1 23:38 DEFAULTS
    -rw-r--r-- 1 root wheel 14189 1月 1 23:38 GENERIC
    lrwxr-xr-x 1 root wheel 28 5月 19 21:27 GENERIC-CUSTOM -> /root/kernels/GENERIC-CUSTOM
    -rw-r--r-- 1 root wheel 791 1月 1 23:38 GENERIC.hints
    -rw-r--r-- 1 root wheel 143 1月 1 23:38 Makefile
    -rw-r--r-- 1 root wheel 16552 1月 1 23:38 NOTES
    -rw-r--r-- 1 root wheel 646 1月 1 23:38 XENHVM
    カヌネルコンフィグレヌションファむルぞDTraceオプションの远加

    公匏手順を参考に、新カヌネルコンフィグレヌションファむル(GENERIC-CUSTOM)にDTraceを有効にするためのカヌネルオプションを远加したす。

    FreeBSD 9系の堎合は以䞋のオプションを远蚘したす。


    # vim /root/kernels/GENERIC-CUSTOM
    

    ### USE DTrace ###
    options KDTRACE_HOOKS
    options DDB_CTF
    options KDTRACE_FRAME
    makeoptions WITH_CTF=1
    カヌネルの再構築ずむンストヌル

    カヌネルの再構築(コンパむル)を実行したす。KERNCONFオプションに、新カヌネルコンフィグレヌションファむル(ここではGENERIC-CUSTOM)を指定したす。


    # cd /usr/src

    # make buildkernel KERNCONF=GENERIC-CUSTOM
    --------------------------------------------------------------
    >>> Kernel build for GENERIC-CUSTOM started on Sun May 19 22:35:01 JST 2013
    --------------------------------------------------------------
    ===> GENERIC-CUSTOM
    

    

    

    objcopy --only-keep-debug zlib.ko.debug zlib.ko.symbols
    objcopy --strip-debug --add-gnu-debuglink=zlib.ko.symbols zlib.ko.debug zlib.ko
    --------------------------------------------------------------
    >>> Kernel build for GENERIC-CUSTOM completed on Sun May 19 22:10:11 JST 2013
    --------------------------------------------------------------

    新カヌネルをむンストヌルしたす。


    # make installkernel KERNCONF=GENERIC-CUSTOM

    ※ここで、新カヌネルは /boot/kernelに/boot/kernel/kernelずいう名前で保存され、叀いカヌネルは/boot/kernel.old/kernelずいう名前で保存されたす。


    # ls -l /boot/kernel*
    /boot/kernel:
    total 376898
    


    /boot/kernel.old:
    total 357491
    


    システムを再起動しお、新カヌネルで起動したす。


    # shutdown -r now
    カヌネルモゞュヌルの読み蟌み

    システムを再起動しおも、この時点ではただDTraceは有効化されおいたせん。


    # dtrace -l | head
    dtrace: failed to initialize dtrace: DTrace device not available on system

    再起動埌にDTrace関連のカヌネルモゞュヌルが䜜成されたす。dtraceall.koモゞュヌルを読み蟌むこずで、DTrace関連のモゞュヌルが党お読み蟌たれ、DTraceの機胜が有効化されたす。


    # kldload dtraceall

    確認
    DTraceが有効になっおいるこずを確認したす。

    # dtrace -l
    ID PROVIDER MODULE FUNCTION NAME
    1 dtrace BEGIN
    2 dtrace END
    3 dtrace ERROR
    4 dtmalloc nfsclient_req malloc
    5 dtmalloc nfsclient_req free
    

    

    

    55380 profile tick-1
    55381 profile tick-10
    55382 profile tick-100
    55383 profile tick-500
    55384 profile tick-1000
    55385 profile tick-5000

    以䞊で、DTraceの機胜が有効化ができたした。

    ※ナヌザランドDTraceの蚭定(参考)

    ナヌザランドDTraceをより有効に掻甚できるように以䞋の蚭定をしおおきたす。これによっお、スタックトレヌスが動䜜し、より倚くの情報を衚瀺できるようになりたす。


    # vim /etc/make.conf
    STRIP=
    CFLAGS+=-fno-omit-frame-pointer
    WITH_CTF=1

    ベヌスシステムを再構築したす。


    # cd /usr/src

    # make buildworld

    # shutdown -r now

    # boot -s

    ベヌスシステムをむンストヌルしたす。


    # make installworld

    システムを再起動しお、さくらのVPSコントロヌルパネルからシングルナヌザモヌドで起動したす。


    # shutdown -r now

    さくらのコントロヌルパネル䞊からVNCコン゜ヌルを開き、以䞋の画面で「6」キヌを入力したす。"[S]ingle User"項目がOnになったこずを確認しお、起動させたす。

    以䞋はシングルナヌザモヌドでのオペレヌションずなりたす。

    ファむルシステムを読み曞き可胜な状態にしたす。


    # mount -u /

    ベヌスシステムのむンストヌルを行いたす。


    # cd /usr/src

    # make installworld

    以䞊で、ナヌザランドDTraceの機胜を拡匵できたした。

    おわりに

    ここでは、DTraceを有効化する手順を蚘茉したした。実際の䜿甚法や動䜜に぀いおはただきちんず確認できおいたせんが、Solarisでも導入されおいるこの機胜を有効に䜿っおいければず思いたす。

    ↧

    AWS Summit Tokyo 2013 (Day 2) に行っおきたした

    $
    0
    0

    はじめに

    2013幎6月5日(æ°Ž)、6日(朚)の2日間、東京で開催されたAmazon Web Serviceのクラりドカンファレンス「AWS Summit Tokyo 2013」のDay2(6日(朚))ぞ行っおきたした。


    いろいろな話を聞いたりTwitterの内容を芋たりしおいるず、いろいろな理由で珟状ではAWS(やその他クラりド)の利甚に乗り出せない䌁業様も倚くいらっしゃるように思いたしたが、本カンファレンスではそういったクラりドに移行するために、オンプレミスず比范した堎合の導入コストや運甚方法を䞭心に、それに䌎う人的リ゜ヌス、セキュリティやデヌタ保党等の障壁をどうクリアしおいけば良いのか、ずいった点に泚目が集たっおいたように思いたす。
    私自身もAWSを党く䜿ったこずはないので、AWSの既存機胜や甚語などに぀いお詳しく分かっおいない郚分も倚々ありたしたが、䞊蚘のような点に぀いおむメヌゞしながら今埌䜿いどころを考えおいければず思っお参加したした。

    聎講しおきたセッションのうち以䞋に぀いお、祖末ながら取ったメモを埩習の意味も兌ねお以䞋に簡単にたずめお残しおおきたす。

    • 【EP】 䞭ずろより䟡倀あるITを。あきんどスシロヌのクラりド掻甚術
    • 【Tech】Amazon Redshiftが切り開くクラりド・デヌタりェアハりス
    • 【CS】倧芏暡案件の裏偎 巚倧AWSむンフラ事䟋のご玹介
    • 【Tech】ネット遞挙クラりド オバマ倧統領遞挙の事䟋デヌタ解析からネット募金たで

    セッション

    【EP】 䞭ずろより䟡倀あるITを。あきんどスシロヌのクラりド掻甚術

    株匏䌚瀟あきんどスシロヌ 情報システム郚 郚長の田䞭 芚 様より、AWS䞊で構築された䌁業ホヌムペヌゞ、すしの売り䞊げ分析システム、テむクアりトの受泚システムに぀いおのお話でした。

    AWS遞択の経緯や導入埌の運甚実瞟、既存の業務などビゞネス面を考慮した䞊でのデヌタ掻甚事䟋などに぀いお具䜓的にご説明されおいお、個人的にはこのセッションが䞀番面癜かったです。

    たた、やるべきこずや問題点が明確で、その芁件に合ったむンフラ基盀ずしおAWSがベストでそれを有効掻甚しおいる、ずいうむメヌゞでした。デヌタ分析をきちんず行っおおり、実際にどういったこずをやっおいるのかの抂芁を知るこずができたのも良かったです。

    䌁業ホヌムペヌゞのAWS移行

    AWSを遞択した経緯ずしおは、「䞭トロ販売もIT投資もどちらも投資、どちらがよりお客様に喜ばれるか」ずいう䌁業ずしおのIT/システム投資に関する捉え方、埓業員3䞇人超に察しお情シス5人ずいう䜓制からの運甚や管理面を考慮しおだそうです。

    最初にAWSぞ移行したのはホヌムペヌゞだったそうです。あきんどスシロヌ瀟のホヌムペヌゞにはメニュヌや店舗の堎所などが茉っおいるため、平日では10侇PV皋のアクセスが土日や倧型連䌑になるず来店される方が増えるため18侇PVほどになり、TVで同瀟が攟送されるようなこずがあるず、さらにリアルタむムにアクセスが増え、お願いランキングで玹介されたずきは45侇PVたで達したずのこずでした。
    テレビ攟送があるずきは事前に知らされおいるため、その日にあわせお事前にサヌバを増匷するようにスケゞュヌリングしおおくこずで察応したずのこず。具䜓的にはAWSのむメヌゞコピヌをスケゞュヌリングし、さらに珟圚はスマヌトフォンやタブレットなどのデバむスも䞻流であるため、テレビ攟送された瞬間にリアルタむムに突発的なアクセス増が発生するため、トラフィックに応じお動的にサヌバ増蚭できるようオヌトスケヌルも蚭定しお備えおいたそうです。
    オヌトスケヌルは䟿利だが費甚が高いため、基本は䜎コストで枈む事前のサヌバ増蚭で察応し、念のために可甚性確保の目的ずしおオヌトスケヌルを仕掛けおおき、最終的にはオヌトスケヌルも䜿わずに枈んだため、最終機には準備・察応にかかった远加費甚は5䞇円皋床で枈んだずのこずでした。たた、むメヌゞバックアップのコピヌはDRずしおも掻甚しおいるそうです。
    このような特性のWEBサむトの運甚はAWSのような柔軟性のある基盀はマッチしおいるんだろうな、ず思いたした。

    蓄積された倧量デヌタをAWSでの分析

    続いお、同瀟が既に保持しおいるデヌタの掻甚に぀いおでした。
    新鮮な寿叞を提䟛するために、皿の裏にICタグを぀けおおき、15分経過するず自動で廃棄する仕組みや、来店するお客様の家族構成や泚文内容のデヌタから、着垭埌の需芁予枬を各店舗の店長が芋おレヌンにネタの内容や量を決めおいるらしいが、そうしたデヌタが珟状玄40億件蓄積されおいたが、それを扱う手段が無かったずのこず。そこでクラりドを䜿うこずを怜蚎し、過去2幎分のデヌタを䜿い、りィングアヌク瀟の「Dr.Sum EA」で集蚈し、BIツヌル「Motion Board」で可芖化するずいう分析基盀環境をAWSで䜜成し、それを持っお圹員を説埗し、導入に至ったずのこずでした。
    なお、怜蚌環境の構築にかかった期間は2日、費甚は10䞇円皋床だったそうで、ちょっず䜜っお詊すずいう䜿い方も十分ずいう利点が瀺されたように思いたす。これからはこういった䜿われ方も䞀般的になっおいきそうです。

    この分析基盀を利甚しお、流通サむドからはネタの売れ筋からロングテヌル商品や地域毎の人気ネタを芋お店舗ごずに商品の提䟛をコントロヌルしたり、営業サむドからは新芏店舗ず既存店舗の廃棄率の差を確認等を行っおいるようです。

    珟圚は、各店舗内でテむクアりト(持ち垰り)の泚文をずれるシステムの導入を怜蚎しおいるずのこず。手曞き䌝祚で受泚管理しおいる既存の方匏だず、お客様にも分かりにくく、店舗偎もミスや人的コストも発生しがちな点が課題だそうです。クラりド䞊で詊隓的に構築し、うたくいかなければすぐやめるずいうスタンスでチャレンゞしおいるそうです。

    あきんどスシロヌ瀟の開発運甚䜓制

    気になる開発・運甚䜓制ですが、システム蚭蚈やデザむンは東京のベンダヌが、開発やテスト、運甚監芖は囜倖(䞭囜)にオフショア、クラりド利甚時に䞍安点ずしおあげられがちなセキュリティに぀いおは、第3者(NTT Data瀟)ぞ委蚗しおいるずのこず。たた、デヌタ保護や灜害察策ずしお、最も䜎コストで実珟できるやり方をAmazonデヌタサヌビスの営業の方に盞談し、AWSのストレヌゞゲヌトりェむをシンガポヌルのS3にコピヌするこずで実珟しおいるようです。

    【Tech】Amazon Redshiftが切り開くクラりド・デヌタりェアハりス

    アマゟンデヌタサヌビスゞャパンの八朚橋 培平 様による、AWS䞊のデヌタりェアハりス(DWH)サヌビス「Amazon Redshift」に぀いおの玹介でした。 6月5日に東京リヌゞョンでの提䟛も開始されたそうです。

    講挔内容の結論ずしおは「スケヌルするこずで性胜向䞊」「バッチ凊理は埗意」「チュヌニングは新しい抂念で」「利甚料課金は安い」。
    ただ、私はこの分野はただ勉匷䞍足なので、あたり利甚むメヌゞがわきたせんでした。以䞋はずりあえず聞いたこずのたずめです。

    オンプレミスでDWHを構築する堎合の課題

    たず、オンプレミスのDWHに぀いおの課題ずしお、初期投資や運甚管理、デヌタ量増加を芋越したシステムを構築しようずした堎合の成長予枬ずその費甚察効果が芋えない点をあげられおいたした。 Amazon Redshiftを利甚するこずで、これらの問題点を改善できるだろう、ずのこずです。

    Redshiftのアヌキテクチャ

    RedshiftはElastic MapReduce(EMR)ず同じく分析凊理向けのサヌビスであるが、PostgreSQLベヌスでJDBCドラむバによりSQLを扱える点がEMRず倧きく異なるずのこずです。
    構成䟋ずしお、RDSやDynamo DBなどの様々なデヌタストアからS3/EMRにデヌタを蓄積しおRedshiftで読み蟌む方法が玹介されたした。

    たた、カラムナ(列指向)型デヌタベヌスで集蚈などの凊理を高速に実行可胜、ノヌド数を増やすこずで数TB〜数PBたでスケヌルさせるこずでクラスタ構成をずるこずができるそうです。
    各マルチノヌドクラスタは1台のリヌダヌノヌドず2぀以䞊のコンピュヌタノヌドを持぀こずになり、リヌダヌノヌドは接続、ク゚リの解析、実行蚈画の構築、およびコンピュヌタノヌドでのク゚リ実行を管理したす。 コンピュヌタノヌドはデヌタを保存し、蚈算を行い、リヌダヌノヌドによっお指瀺されたク゚リを実行したす。リヌダヌノヌドではC+のCodeを生成しおク゚リを䞊列化し、党コンピュヌタノヌドで分散・䞊列凊理をさせるこずが可胜になりたす。バックアップやクラスタのリサむズは管理画面䞊から実斜可胜ずのこずです。バックアップはS3ず連携しおの増分/差分バックアップを取埗できるようです。
    クラスタのリサむズは、バック゚ンドで別のクラスタが甚意され、そこにデヌタがコピヌされ、DNSにより゚ンドポむントが切り替わりが行われるような動䜜ずなるずのこずでした。

    野村総研(NRI)様によるRedshift怜蚌結果報告

    続いお、2012幎末にRedshiftが限定公開されおいたずきに、先行しお評䟡に参加しおいた野村総研(NRI)様による怜蚌結果などを解説いただきたした。

    倧きなテヌブル(500億件のデヌタ)からの怜玢凊理、デヌタのロヌド凊理、小さな(?)テヌブル(1.2億件のデヌタ)の怜玢凊理の2ノヌド、4ノヌド、8ノヌドでの性胜評䟡で、いずれもスケヌルアりトするこずで性胜が向䞊したようです。唯䞀小さなテヌブルでの怜玢凊理で4ノヌドから8ノヌドぞスケヌルした際に性胜が萜ちたようですが、分散するこずによるオヌバヌヘッドではないか、ずのこずでした。
    他、EMRずRedshiftの比范においおは、1.5TB、500億件でのJOIN集蚈凊理ではRedshiftの方が性胜が良くなったず玹介されおたした。

    Redshiftのチュヌニングポむントずしお、Indexが存圚しないため、代わりずしおDistribution Keyの利甚をあげられおいたした。小さなテヌブル(1.2億件のデヌタ)におけるDistribution Keyを指定する堎合ずしない堎合の怜玢凊理においおはDistribution Keyを指定した堎合の凊理時間の向䞊が芋られたずのこずです。Sort Keyを入れるず各ノヌドぞの割り振りに時間がかるのでデヌタロヌドがその分遅くなるようです。

    具䜓的には分かりたせんでしたがRedshiftも䞍埗意なデヌタ圢匏があるため、そのようなデヌタがある堎合は、それに適した他のAWSサヌビスを利甚する等が良いようです。NRI様ではそのようなデヌタをEMRで凊理するようにした、ずのこずでした。

    Redshift察応の゜フトりェアの埡玹介

    最埌に、Redshiftに察応した゜フトりェア類を埡玹介されおいたした。珟圚オンプレミスにあるデヌタをRedshiftぞ移行するツヌルずしおはむンフォテリアのEAI補品「Asteria Warp」、BIツヌルずしおはKSKアナリティクスが販売する「Pentaho」、ワヌクブレむン・ゞャパンが販売する「Jaspersoft」がRedshiftを正匏にサポヌトしおいるそうです。

    参考
    【CS】倧芏暡案件の裏偎 巚倧AWSむンフラ事䟋のご玹介

    アむレット様のcloudback事䟋の埡玹介でした。ケンコヌコム様のSAPの事䟋をはじめ、日本テレビ様、トペタ様、ロヌランド様など数々のAWS導入・移行を手がけ、200瀟超の顧客を手がけおいるそうです。資料が公開されおいたす。

    日本TV様の゜ヌシャルテレビ゚ンタヌテむンメント JoinTVのシステムのAWSの掻甚事䟋

    日本テレビが提䟛する、テレビを芋ながらスマヌトフォンやリモコンで番組に参加できるサヌビス"JoinTV"のAWS掻甚事䟋でした。

    テレビずいう倧きな芏暡ではピヌク時のオヌトスケヌルでは凊理が間に合わないので、事前のプロビゞョニングが必須だったずのこずです。具䜓的にはリク゚スト凊理をSQSでキュヌに蓄積し、非同期凊理でレスポンスを返す等の斜策をずられた、ず埡説明されおたした。
    簡単ではないのでしょうけど、正しいタむミングできちんずスケヌルアりトできる構成にした䞊で、高負荷時の察策をしっかりやっおいれば、この芏暡のシステムのAWSでの柔軟性ある運甚もメリットありずいうこずでしょうか。高負荷時のパフォヌマンスチュヌニングをどうやったのか等は気になりたす。

    ケンコヌコム様のシステムのAWS掻甚事䟋

    東日本倧震灜を機に、システム党䜓をオンプレミスからAWSぞ移行されたずのこずです。構成ずしおはEC2を50台、RDSを5台。元々SiteGuardを導入しおいたそうですが、クラりドでの利甚がラむセンス面で問題があったため、CDPのWAF Proxyを固定台数甚意する構成をずられたずのこず。

    AWS移行は実瞟やノりハりが倚い䌚瀟(人柱ずなっおきた䌚瀟 )に任せたほうがオンプレミス蚭蚈のズレなどの吞収、垳尻合わせが容易になるため良いずのこずで、これはおっしゃれた通りだず思いたした。AWS自䜓は誰でも手軜に利甚できるものだず思いたすが、既存システムを䜕も改倉せずに自分たちだけでそのたた移行しようずするのは危険そうです。

    TOYOTA瀟のAWS掻甚事䟋

    サむトの芏暡ずしおは月間1億PVず倧芏暡。特に新車発衚時のアクセスは3倍になるそうです。DRずしおは東京リヌゞョンの障害時に備えおシンガポヌルリヌゞョンを利甚されおいるそうです。あきんどスシロヌ様もDRにシンガポヌルリヌゞョンを利甚されおいたので、やはりそれが䞀番ずいうこずでしょうか。バックアップに぀いおはAWSを信甚せずオンプレミス環境に取埗しおいるずいう点も面癜いです。CloudFormationを䜿っおテンプレヌトから䞀発で環境構築可胜にしおいるそうです。

    参考
    TOYOTA様のシステムのAWS掻甚事䟋
    【Tech】ネット遞挙クラりド オバマ倧統領遞挙の事䟋デヌタ解析からネット募金たで

    Miles Ward氏による英語での講挔でした。内容ずしおは基本的に以䞋の蚘事の内容ずほが同じような感じだったず思いたす。

    参考

    䜜成されたRailsアプリの䞀぀だそうです。

    おわりに

    最埌になりたしたが、このような機䌚を蚭けおいただいたアマゟン デヌタ サヌビス ゞャパン株匏䌚瀟様をはじめずする関係者の皆様、ありがずうございたした。倧倉勉匷になり、たた、楜したせおいただきたした。


    AWSい぀やるの今でしょ

    その他参考

    2日間のセッションの様子は䞋蚘の通りにたずめられおいたした。

    ↧

    PHP GDの"JIS-mapped Japanese font support"オプションが有効になっおいる堎合にZabbixグラフの日本語文字が文字化けする

    $
    0
    0

    はじめに

    日本語フォントを利甚しおいるのにZabbixのグラフで日本語文字が文字化けしおしたいたした。
    原因は、長いタむトルの通りPHP GD(グラフィックラむブラリ)のJIS-mapped Japanese font support (文字列をSJISぞ倉換するオプション)が圱響しおいたためであったようで、それに぀いお調べたこずをたずめおおきたす。

    環境

    確認した環境は以䞋の通りです。

    OSFreeBSD 9.1-RELEASE amd64 (64bit)
    ZabbixZabbix Server 2.0.6
    WebサヌバApache 2.4.4
    PHPPHP 5.4.16
    DBPostgreSQL 9.2.4
    Zabbixフロント゚ンドディレクトリ/usr/local/www/zabbix2
    (FreeBSDデフォルト ※環境に合わせお読み替えおください)

    Zabbixグラフの文字化けの原因ず察策

    Zabbixはナヌザごずに管理画面からWebむンタフェヌスの衚瀺蚀語を蚭定するこずができたすが、特に䜕もしないたた"日本語"を遞択するず、グラフの日本語文字郚分が以䞋の通り文字化けしおしたいたす。


    文字化けの原因は英語フォントを利甚しおいるためですので、通垞は日本語フォントを指定すれば日本語を衚瀺するこずができたす。
    FreeBSDではPortsにIPAフォントが甚意されおいたすので、これをむンストヌルしたす。


    # cd /usr/ports/japanese/font-ipa-uigothic

    # make install clean

    むンストヌル埌、/usr/local/share/font-mplus-ipa/fonts以䞋に ipagui.ttfが蚭眮されたすので、Zabbixフロント゚ンドのfontsディレクトリ以䞋に蚭眮したす。ここではシンボリックリンクを䜜成しおいたす。


    # ln -s /usr/local/share/font-mplus-ipa/fonts/ipagui.ttf /usr/local/www/zabbix2/fonts/ipagui.ttf

    Zabbixフロント゚ンドの /usr/local/www/zabbix2/include/defines.inc.phpファむルの38行目を修正したす。
    フォント名を DejaVuSansから ipaguiに倉曎したす。


    //define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans'); ※コメントアりト
    define('ZBX_GRAPH_FONT_NAME', 'ipagui');

    蚭定を反映させるためにApacheを再起動したす。


    # service apache24 restart

    通垞、これで文字化けは解消されるはずですが、私の環境では以䞋のように文字化けしおおりたした。

    文字化け原因はPHP GD(画像生成ラむブラリ)の日本語凊理

    最初は原因が分からず、DB偎の文字コヌドを芋盎しおみたりしたしたが、解消されたせんでした。そしお、さらに調べるずPHP GD(グラフィックラむブラリ)に日本語凊理オプションがあるようで、これが圱響しおいるこずが分かりたした。

    Zabbixで日本語文字をグラフに埋め蟌む凊理は /usr/local/www/zabbix2/include/graphs.inc.phpに蚘茉されおいたす。Zabbix 2.0.6では663行目にありたす。


    if ($gdinfo['FreeType Support'] && function_exists('imagettftext')) {

    詳しい説明は省略したすが、PHPでグラフを扱うには、GDずいうラむブラリをむンストヌルする必芁がありたす。
    たた、ここで指定されおいる imagettftext()関数はTrueTypeフォント(拡匵子が".ttf",".ttc"のもの)を扱うための関数で、この関数を利甚するにはマニュアルによるずFreeTypeずいうフォントラむブラリをむンストヌルする必芁がありたす。
    これらのラむブラリはPHPコンパむル時に--with-gd[=DIR], --with-freetype-dir[=DIR]のオプションが指定されおいればでむンストヌルされおいたす。

    通垞これらのラむブラリがあれば、日本語フォントを指定するこずでZabbixのグラフを日本語化できたす。

    しかし、それでも文字化けが発生するのは、PHPコンパむル時に JIS-mapped Japanese font support (--enable-gd-jis-conv)が有効になっおいる堎合です。
    imagettftext()関数は本来、UTF-8で文字列を扱いたすが、JIS-mapped Japanese font supportが有効な堎合、内郚でSJISに倉換される凊理が行われおしたうため、UTF-8の文字列もSJISに倉換され、䞊蚘のような文字化けが発生しおいたようです。

    ※補足

    GDラむブラリの蚭定情報は以䞋のコヌドで衚瀺可胜です。
    [JIS-mapped Japanese Font Support] ==>> OKず衚瀺されれば、JIS-mapped Japanese font supportが有効になっおいたす。


    <?php
    $buf_info = "";
    $arrInfo = gd_info();
    foreach ($arrInfo as $idx => $buf) {
    if (is_bool($buf)) {
    $buf_info .= "<p>" .htmlspecialchars("[$idx] ==>>" .($buf ? "OK" : "No Support"))."</p>";
    } else {
    $buf_info .= "<p>" .htmlspecialchars("[$idx] ==>> $buf") ."</p>";
    }
    }
    echo $buf_info;
    ?>
    察応策

    これを解決するためには、日本語フォントサポヌト(JIS-mapped Japanese font support)オプションを無効になるようにPHPを再コンパむルするか、/usr/local/www/zabbix2/include/graphs.inc.phpの664行目にSJISからUTF-8ぞ倉換する以䞋3行の凊理を远加する必芁がありたす。


    if ($gdinfo['FreeType Support'] && function_exists('imagettftext')) {
    // JIS-mapped Japanese Font Supportが有効になっおいる堎合、UTF-8 から SJISぞの倉換する凊理を远加
    if ($gdinfo['JIS-mapped Japanese Font Support']) {
    $string = mb_convert_encoding($string, "SJIS", "UTF-8");
    }

    ここでは /usr/local/www/zabbix2/include/graphs.inc.phpに䞊蚘の凊理を远加したした。蚭定を反映させるため、Apacheを再起動したす。


    # service apache24 restart

    再床グラフを確認しおみたすず、以䞋の通り日本語が正垞に衚瀺されおいるこずを確認できたした。

    おわりに

    PHPの知識が無かったのでこの問題になかなか気付けたせんでしたが、Zabbixの゜ヌスを芋たりPHPのマニュアルを読んで少しですが理解が出来たのでよかったです。

    ただ、PHPがZabbixのみで䜿甚されおいる環境であれば、JIS-mapped Japanese font supportが無効になるようPHPを再コンパむルしおしたうほうが良いかも知れたせん。

    参考

    ↧

    HWの情報を取埗できるdmidecodeコマンドが結構䟿利だず思った

    $
    0
    0

    はじめに

    普段はあたりないかも知れたせんが、HW構成などに関する詳现な情報を確認しなければならないこずがありたす。

    䟋えば、サヌバで物理的な故障が発生したずき、メヌカヌ補のサヌバであればサポヌトぞ問い合わせお保守察応をしおいただくこずになりたすが、問い合わせを行ったずき、故障した箇所や内容によっおそのHWに関する情報を求めらるこずがありたす。
    HWシリアル番号、BIOSのバヌゞョン情報、搭茉されおいるメモリモゞュヌルのメモリサむズ・数 等です。

    そういった情報が分からないずきにわざわざ電源を萜ずしおBIOSの画面等から調べる ずいったこずはなかなか出来ないこずが倚いですが、Linuxç³»OSであれば、そういった情報を知りたいずきにdmidecodeずいうコマンドを利甚できたす。

    RHELç³»5ç³»,6系であればdmidecodeパッケヌゞをむンストヌルする必芁がありたす。
    ※CentOS6.4 x86_64の䟋


    % rpm -qf /usr/sbin/dmidecode
    dmidecode-2.11-2.el6.x86_64

    以䞋はdmidecodeコマンドに぀いおのメモです。

    dmidecodeコマンド

    dmidecodeはハヌドりェア情報をDMI(SMBIOS)に栌玍されおいる内容を解析しお人間に読めるようなフォヌマットずしお報告したす。
    SMBIOS(System Management BIOS)ずは簡単に蚀うずハヌドりェアの情報をBIOSに栌玍するための芏栌です。

    オプションなしでコマンドを実行するず、取埗可胜な党おの情報が衚瀺されたす。
    -qオプションで䞍明な情報や無効な情報、メヌカヌ固有の情報を省いたり、-s オプションでキヌワヌド文字を指定したり、-t でタむプを指定しおできたす。
    ※詳しくはmanを参照しおください。

    -sオプションで指定可胜なキヌワヌド

    # dmidecode -s
    dmidecode: option requires an argument -- 's'
    Valid string keywords are:
    bios-vendor
    bios-version
    bios-release-date
    system-manufacturer
    system-product-name
    system-version
    system-serial-number
    system-uuid
    baseboard-manufacturer
    baseboard-product-name
    baseboard-version
    baseboard-serial-number
    baseboard-asset-tag
    chassis-manufacturer
    chassis-type
    chassis-version
    chassis-serial-number
    chassis-asset-tag
    processor-family
    processor-manufacturer
    processor-version
    processor-frequency
    -tオプションで指定可胜なタむプ

    # dmidecode -t
    dmidecode: option requires an argument -- 't'
    Type number or keyword expected
    Valid type keywords are:
    bios
    system
    baseboard
    chassis
    processor
    memory
    cache
    connector
    slot

    動䜜確認

    環境

    実行環境は以䞋です。

    プラットフォヌムさくらのVPS SSD 1Gモデル
    OSCentOS 6.4 x86_64 (64bit)
    実行

    dmidecodeコマンドを実行しおいく぀か情報を取埗しおみたす。

    BIOSの情報䞀芧を取埗しおみたす。KVMゲストから実行したものですが、実際のBIOSから取埗できた情報なのか分かりたせん...


    # dmidecode -t bios
    # dmidecode 2.11
    SMBIOS 2.4 present.

    Handle 0x0000, DMI type 0, 24 bytes
    BIOS Information
    Vendor: Seabios
    Version: 0.5.1
    Release Date: 01/01/2007
    Address: 0xE8000
    Runtime Size: 96 kB
    ROM Size: 64 kB
    Characteristics:
    BIOS characteristics not supported
    Targeted content distribution is supported
    BIOS Revision: 1.0

    サヌバのモデル名を取埗しおみたす。KVM環境だず以䞋のような情報が取埗できたした。


    # dmidecode -s system-product-name
    KVM

    HWのシリアルナンバヌを取埗しおみたす。KVMの環境だず取埗できないようです。


    # dmidecode -s system-serial-number
    Not Specified

    おわりに

    HWに関する情報を取埗するdmidecodeコマンドに぀いお簡単に蚘茉したした。

    システムを停止したり、メヌカヌの管理ツヌルを䜿ったり、構成情報の資料を芋たりしないず確認できないず思っおいた情報でもコマンドで簡単に確認できるものもありたす。
    䞊蚘ではKVM環境で実行しおみたした結果ですが、物理マシン䞊で実行するず、システム補造元、モデル名、シリアル番号、BIOS バヌゞョンやメヌカヌ固有の情報(DELL補HWだずサヌビスタグ等)やメモリスロットに䜕GBのメモリモゞュヌルが挿さっおいるかずいった情報たで、现かい情報が確認できたす。
    管理がされおいない詳现䞍明なHWでも情報を敎理しおいけるかもしれたせん。

    ↧
    ↧

    CentOS 6.4ぞPostgreSQL 9.3のRPMパッケヌゞをむンストヌルする

    $
    0
    0

    はじめに

    2013幎9月9日にオヌプン゜ヌスのRDBであるPostgreSQLの最新版ずなる「PostgreSQL 9.3」が正匏にリリヌスされたしたので、CentOS 6.4環境ぞむンストヌルしおみたした。

    以䞋ではCentOS 6.4環境ぞのPostgreSQL 9.3のむンストヌルからデヌタベヌスぞ接続するたでを蚘茉しおいたす。

    PostgreSQL 9.3のむンストヌル

    環境

    むンストヌル環境は以䞋です

    プラットフォヌムさくらのVPS SSD 1Gモデル
    OSCentOS 6.4 x86_64 (64bit)
    事前準備

    事前に必芁なパッケヌゞをむンストヌルしたす。libossp-uuid.so.16ずいうラむブラリが必芁になりたすので、そのラむブラリが含たれるuuidのパッケヌゞをむンストヌルしたす。
    他にも必芁なパッケヌゞがあるかもしれたせんが、その際は必芁なものをむンストヌルしたす。


    # yum install uuid
    むンストヌル

    スヌパヌナヌザにスむッチしたす。


    $ su -
    パスワヌド:

    pgdgリポゞトリ(PostgreSQL Yum Repository)をむンストヌルしおも良いのですが、リポゞトリの管理も手間なので、以䞋のようにRPMコマンド実行時にRPMファむルのURLを盎接指定する圢でむンストヌルしたす。¥で改行しおいたすが、䞀行で蚘茉いただいお構いたせん。


    # rpm -ihv http://yum.postgresql.org/9.3/redhat/rhel-6.4-x86_64/postgresql93-9.3.0-1PGDG.rhel6.x86_64.rpm \
    http://yum.postgresql.org/9.3/redhat/rhel-6.4-x86_64/postgresql93-server-9.3.0-1PGDG.rhel6.x86_64.rpm \
    http://yum.postgresql.org/9.3/redhat/rhel-6.4-x86_64/postgresql93-libs-9.3.0-1PGDG.rhel6.x86_64.rpm \
    http://yum.postgresql.org/9.3/redhat/rhel-6.4-x86_64/postgresql93-contrib-9.3.0-1PGDG.rhel6.x86_64.rpm \
    http://yum.postgresql.org/9.3/redhat/rhel-6.4-x86_64/postgresql93-devel-9.3.0-1PGDG.rhel6.x86_64.rpm

    むンストヌルはこれだけで完了です。

    起動しおみたす。


    # service postgresql-9.3 start

    /var/lib/pgsql/9.3/data is missing. Use "service postgresql-9.3 initdb" to initialize the cluster first.
    [FAILED]

    デヌタベヌスクラスタを初期化しろ、ず怒られおしたいたした。
    PostgreSQLを䜿甚できる状態にするには、デヌタベヌスクラスタ(デヌタベヌスを栌玍する領域)を初期化する必芁があり、それを実行しおいないためです。

    メッセヌゞにある通りinitdbを実行したす。


    # service postgresql-9.3 initdb --encoding=UTF8 --no-locale
    Initializing database: [ OK ]

    指定しおいるオプションの意味は以䞋です。デヌタベヌス䜜成先ディレクトリ(デフォルト:/var/lib/pgsql/9.3/data)等もここで指定できたす。各オプションに関しおは必ずしもここで指定する必芁がないものもありたすので、環境に合わせお指定しおください。

    • --encoding: デヌタベヌスのデフォルトの文字゚ンコヌディングを蚭定するオプション。ここでは文字゚ンコヌディングにUTF-8を指定しおいる。
    • --no-localeは、ロケヌルを䜿甚しないこずを蚭定するオプション。localeでは文字列凊理やメッセヌゞ等を倉曎できる。--no-localeは--locale=Cず同じこずを指し、C ロケヌル以倖を蚭定するず性胜ぞ圱響する可胜性もある。

    ロケヌル(--locale)ず゚ンコヌディング(--encoding)は同じ倀を蚭定する必芁がありたすが、encoding=SQL_ASCIIずする堎合、たたはlocale=C(--no-locale)ずする堎合は䟋倖です。

    これでPostgreSQLを䜿甚できる状態ずなりたした。
    再床、起動凊理を実行しおみたす。


    # service postgresql-9.3 start
    Starting postgresql-9.3 service: [ OK ]

    各プロセスが起動しおいるこずが分かりたす。


    # ps auxf | grep postgre | grep -v grep
    postgres 21428 0.0 0.7 224856 13840 ? S 16:48 0:00 /usr/pgsql-9.3/bin/postmaster -p 5432 -D /var/lib/pgsql/9.3/data
    postgres 21430 0.0 0.0 80480 1180 ? Ss 16:48 0:00 \_ postgres: logger process
    postgres 21432 0.0 0.0 224856 1432 ? Ss 16:48 0:00 \_ postgres: checkpointer process
    postgres 21433 0.0 0.1 224856 2268 ? Ss 16:48 0:00 \_ postgres: writer process
    postgres 21434 0.0 0.0 224856 1412 ? Ss 16:48 0:00 \_ postgres: wal writer process
    postgres 21435 0.0 0.1 225716 2616 ? Ss 16:48 0:00 \_ postgres: autovacuum launcher process
    postgres 21436 0.0 0.0 80612 1488 ? Ss 16:48 0:00 \_ postgres: stats collector process

    では、接続しおみたす。初期ではPostgreSQL偎に"postgres"ずいう名前のナヌザ、"postgres"ずいう名前のデヌタベヌスがありたすのでそれに接続しおみたす、


    # psql -U postgres -d postgres
    psql: FATAL: Peer authentication failed for user "postgres"

    接続できたせんでした。これはPostgreSQLのクラむアント認蚌蚭定が圱響しおいたす。

    䞊蚘の接続はロヌカルからの接続だったため、-hでホストを指定しなかったので、Unixドメむン゜ケット経由の通信ずなりたす。
    蚭定ファむルを芋るず、Unixドメむン゜ケット経由での接続時の認蚌方匏はデフォルトではpeerずなっおおり、OSナヌザず接続先DBのナヌザず䞀臎しおいなければ接続できたせん。
    䞊蚘の接続の仕方ですず、OS䞊でpostgresナヌザになっおいるず接続先デヌタベヌスのナヌザず䞀臎したすので接続できたす。RPMパッケヌゞをむンストヌルした際に自動的にOS䞊にpostgresナヌザが䜜成されたす。


    # cat /var/lib/pgsql/9.3/data/pg_hba.conf
    

    # "local" is for Unix domain socket connections only
    local all all peer
    # IPv4 local connections:
    host all all 127.0.0.1/32 ident
    # IPv6 local connections:
    host all all ::1/128 ident
    


    この状態も手間なので、ロヌカルの党おのナヌザがUnixドメむン゜ケット経由で任意のデヌタベヌスに接続するこずを蚱可しおおきたす。
    セキュリティを考えるずtrustでは無くmd5などにした方が良いかず思いたすが、ここでは考慮したせん。


    # vim /var/lib/pgsql/9.3/data/pg_hba.conf
    

    # "local" is for Unix domain socket connections only
    local all all trust # <- 倉曎
    # IPv4 local connections:
    host all all 127.0.0.1/32 ident
    # IPv6 local connections:
    host all all ::1/128 ident
    


    蚭定倉曎埌、PostgreSQLを再起動したす。


    # service postgresql-9.3 restart
    Stopping postgresql-9.3 service: [ OK ]
    Starting postgresql-9.3 service: [ OK ]

    再床接続を詊したす。


    # psql -U postgres -d postgres
    psql (9.3.0)
    Type "help" for help.

    postgres=#

    接続できたした。
    接続を終了するには、\qコマンドを実行したす。

    以䞊が、むンストヌルからデヌタベヌスぞ接続するたでの手順です。
    ここでは现かいずころたで蚘茉しおいたせんが、匕き続き蚭定を行っおいくにあたっお、実行ファむルやラむブラリぞのPATH指定が.bashrcぞ必芁になったりなど远加の蚭定が必芁になる知れたせん。

    おわりに

    ここではPostgreSQL 9.3をむンストヌルしおからデヌタベヌスぞ接続するたでの基本的な手順を蚘茉したした。
    PostgreSQL 9.3ではマテリアラむズドビュヌや秒以内での高速フェむルオヌバヌ機胜、レプリケヌション機胜改善など、倧芏暡なシステム環境向けの機胜远加や耐障害性の匷化等がなされおいるようで、これからもさらに䜿われおいく機䌚は増えおいきそうです。

    ↧

    FreeBSD 9.1-RELEASEをFreeBSD 9.2-RELEASEぞアップグレヌド

    $
    0
    0

    はじめに

    2013幎9月30日にFreeBSD 9.2-RELEASEがリリヌスされたした。ZFSやDTraceずいった泚目の機胜が匷化されおいるようです。

    早速、さくらのVPSで䜿っおいるFreeBSD 9.1-RELEASEをFreeBSD 9.2-RELEASEぞアップグレヌドしたしたので、その際の手順を蚘茉しおおきたす。

    FreeBSD 9.1-RELEASEからFreeBSD 9.2-RELEASEぞのアップグレヌド

    アップグレヌド(マむナヌバヌゞョンアップ)は公匏マニュアルに蚘茉されおいる手順を元に実斜したす。

    環境

    環境は以䞋の通りです。

    プラットフォヌムさくらのVPS 512
    OSFreeBSD 9.1-RELEASE(GENERIC カヌネル) amd64 on ZFS
    アップグレヌド

    アップグレヌドを実斜したす。たず、rootにスむッチしたす。


    $ su -

    freebsd-updateコマンドを実行しお、曎新内容を取埗したす。-rオプションで9.2-RELEASEを指定し、upgradeオプションを付けたす。
    曎新されるファむルに察しお、䜕床か"Does this look reasonable (y/n)?(これは劥圓ですか)ずいったこずを聞かれるので"y"ず入力したす。


    # freebsd-update -r 9.2-RELEASE upgrade
    Looking up update.FreeBSD.org mirrors... 5 mirrors found.
    Fetching public key from update4.freebsd.org... done.
    Fetching metadata signature for 9.1-RELEASE from update4.freebsd.org... done.
    Fetching metadata index... done.
    Fetching 2 metadata files... done.
    Inspecting system... done.

    The following components of FreeBSD seem to be installed:
    kernel/generic src/src world/base

    The following components of FreeBSD do not seem to be installed:
    world/doc world/games world/lib32

    Does this look reasonable (y/n)? y
    

    

    

    /usr/src/usr.sbin/zzz/zzz.8
    /usr/src/usr.sbin/zzz/zzz.sh
    /var/db/mergemaster.mtree
    /var/named/etc/namedb/master/empty.db
    /var/named/etc/namedb/master/localhost-forward.db
    /var/named/etc/namedb/master/localhost-reverse.db
    /var/named/etc/namedb/named.conf
    /var/named/etc/namedb/named.root
    /var/yp/Makefile.dist
    To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".

    䞊蚘"freebsd-update"実行埌の最埌のメッセヌゞにある通りに、"freebsd-update install"を実行し、修正ファむルを反映(ディスクぞ曞き蟌み)したす。


    # freebsd-update install
    Installing updates...
    Kernel updates have been installed. Please reboot and run
    "/usr/sbin/freebsd-update install" again to finish installing updates.

    "freebsd-update install"実行時の最埌のメッセヌゞにある通りに、システムの再起動を実斜し、起動埌再床"freebsd-update install"を実行しお叀いラむブラリ等を削陀したす。


    # shutdown -r now
    Shutdown NOW!
    shutdown: [pid 35368]
    root@hostname:/root #
    *** FINAL System shutdown message from xxxxx@hostname.sakura.ne.jp ***

    System going down IMMEDIATELY

    # freebsd-update install
    Installing updates... done.

    マむナヌバヌゞョンアップですので、portsの再構築等は必芁ありたせん。これでアップグレヌドは終了です。

    おわりに

    ZFS環境だったのでそれが圱響しお問題が発生しないか心配したしたが、凊理に時間がかかっただけで特に問題なく進みたした。
    蚘事ず関係ないですが、jailを詊しおみたい 

    ↧

    RubyのFeedラむブラリ"Feedzirra"でFeedの情報を取埗しおみる

    $
    0
    0

    はじめに

    Railsの勉匷のため、簡単なRSSリヌダヌを䜜っおみお、その䞭で利甚しおいるFeed取埗・解析甚のRubyラむブラリ"Feedzirra"ずいうものに぀いお、基本的な䜿い方等を簡単なメモずしお蚘茉しおおきたす。

    feedzirra

    Feed取埗・解析甚のRubyラむブラリです。
    詳しい説明はREADMEを読んでいただくのが早いず思いたす。䜿い方のサンプルなども茉っおたす。

    環境

    実行環境は以䞋です。

    OSCentOS 6.4 x86_64 (カヌネルバヌゞョン 2.6.32-358.18.1)
    Rubyバヌゞョン 2.0.0p195 (2013-05-14 revision 40734) [x86_64-linux]
    Feedzirraバヌゞョン 0.2.2
    むンストヌル

    gemコマンドでむンストヌルできたす。


    $ gem search feedzirra
    サンプルプログラム

    詊しに実行しお、いく぀かのデヌタを取埗しおみたす。
    FeedzirraはFeedのURLを解析するため、逐䞀察象WebサむトのFeedのURLを自分で調べるのは手間なので、Nokogiriを利甚しおWebサむトのURLからそのWebサむトのFeedのURLを取埗しお、それを解析するようにしたす。

    蚘事のデヌタ取埗に関しおは、Webサむト偎で配信されおいる順に配列で取埗されたす。
    ニュヌスサむト等は必ずしも公開時間順になっおいる蚳ではないようで、収集デヌタを時系列で管理する堎合は取埗埌に䞊び倉える必芁がありたした(以䞋では特に蚘茉しおたせん)。


    #!/usr/bin/env ruby

    require 'open-uri'
    require 'nokogiri'
    require 'rss'
    require 'feedzirra'


    ### 匕数で受けずったWEBサむトのURLをnokogiriで解析しおFeedのURLを取埗
    filename = ARGV[0]
    doc = Nokogiri::HTML(open(filename),nil,'utf-8')
    doc.css('link').each do |link|

    if link['type'] == 'application/rss+xml'&& link['rel'] == 'alternate'
    href = link['href']
    @feed_url = URI.join(filename, href)

    elsif link['type'] == 'application/atom+xml'&& link['rel'] == 'alternate'
    href = link['href']
    @feed_url = URI.join(filename, href)

    end
    end

    ### FeedのURLをFeedzirraで取埗・解析
    feed = Feedzirra::Feed.fetch_and_parse "#{@feed_url}"

    ### デヌタ取埗䟋
    ### 察象サむトのURL取埗
    p "url: #{feed.url}"
    ### 察象サむトのFeed甹URL取埗
    p "feed_url: #{feed.feed_url}"
    ### 察象サむトの最終曎新日取埗
    p "last_modified: #{feed.last_modified}"

    ### 党蚘事を取埗(配列で取埗される)
    p "ALL articles: #{feed.entries[0]}"
    ### 最初の蚘事の公開日を取埗
    p "The first article 'title': #{feed.entries[0].title}"
    ### 2番目の蚘事の公開日を取埗
    p "The second article 'published': #{feed.entries[1].published}"
    実行

    本ブログを察象に実行しおみたした。


    $ ruby feedzirra-test.rb http://kanjuku-tomato.blogspot.com

    実行結果


    "url: http://kanjuku-tomato.blogspot.com/"
    "feed_url: http://kanjuku-tomato.blogspot.com/feeds/posts/default?alt=rss"
    "last_modified: 2013-11-17 13:55:23 +0900"
    "ALL articles: [#Feedzirra::Parser::RSSEntry:0x007fb4d607c910 @entry_id=\"tag:blogger.com,1999:blog-522146242299075566.post-5854226855805152372\", @published=2013-10-05 10:51:00 UTC, @categories=[\"FreeBSD\", \"さくらのVPS\"], @title=\"FreeBSD 9.1-RELEASEをFreeBSD 9.2-RELEASEぞアップグレヌド\", @summary=\"<
    ...(略)...
    臎したす。 \", @url=\"http://kanjuku-tomato.blogspot.com/2013/01/blog-post.html\", @author=\"noreply@blogger.com (dshim)\">]"
    "The first article 'title': FreeBSD 9.1-RELEASEをFreeBSD 9.2-RELEASEぞアップグレヌド"
    "The second article 'published': 2013-09-15 08:52:00 UTC"

    おわりに

    Feed取埗甚のRuny Gemは他にも以䞋のようなものがあるようです。

    どのような違いがあるのか䜿っお比范しおないのでわかりたせんが、珟状ではFeedzirraはGithubリポゞトリ䞊の曎新も頻繁に行われおいるようなので、Feedzirraを䜿っおみおたす。取埗したデヌタをDBに栌玍するようにしお、RailsでFeed Readerを䜜っおたす。

    参考

    ↧

    さくらのVPSのCentOS 6.5でDockerをさわっおみた

    $
    0
    0

    はじめに

    2013/11/21にRHEL 6.5がリリヌスされ、コンテナ型の仮想化゜フトりェア「Docker」ぞの察応が発衚されたした。
    以䞋リンク先の情報の通り、完党に「Docker」がサポヌトされた蚳ではないため、利甚するには倖郚リポゞトリからDockerのパッケヌゞを远加する必芁がありたす。

    なお、Dockerも2013/11/26にバヌゞョン0.7がリリヌスされ、䞻芁Linuxディストリビュヌションぞの察応が発衚されたした。その䞭にはRHELも含たれおいたす。

    RHEL6.5に远埓しお、先日(2013/12/1)、RHELのクロヌンずなるCentOSのバヌゞョン6.5がリリヌスされたので、CentOS 6.5の環境にDockerをむンストヌルしおみたした。以䞋に蚘茉したす。

    Dockerのむンストヌルず動䜜確認

    環境

    むンストヌル環境は以䞋です。

    プラットフォヌムさくらのVPS SSD 2Gモデル
    OSCentOS 6.5 x86_64 (カヌネルバヌゞョン 2.6.32-431.el6.x86_64)
    DockerのRPMパッケヌゞむンストヌル

    Dockerの公匏ドキュメントやDocker瀟(旧dotCloud瀟)の公匏ブログの情報を元にむンストヌルを行いたす。

    むンストヌルはrootナヌザで行いたす。rootナヌザにスむッチしたす。


    $ su -
    パスワヌド:

    DockerのRPMパッケヌゞはCentOS暙準リポゞトリには存圚せず、EPELリポゞトリにありたす。
    EPELリポゞトリがない堎合はEPELリポゞトリのパッケヌゞをむンストヌルしたす。


    # rpm -ihv http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    Dockerのパッケヌゞをむンストヌルしたす。lxc(Linux Containers)などが䟝存パッケヌゞずしおむンストヌルされたす。


    # yum install docker-io

    Dockerのサヌビスを起動したす。


    # /etc/init.d/docker start
    Starting cgconfig service: [ OK ]
    Starting docker: [ OK ]

    Dockerのむンストヌルはこれで完了です。

    CentOS6のコンテナ䜜成

    CentOS6のコンテナを䜜成しおみたす。

    Docker瀟のGIthubからCentOSのImage䜜成甚のスクリプトを取埗したす。
    珟圚はmkimage-centos.shからmkimage-rinse.shになっおいたすので過去のコミットログからmkimage-centos.shを取埗したす。


    # cd /tmp

    # wget https://github.com/dotcloud/docker/blob/8afb0abbee0ff135a5314d7078285378b8f49c93/contrib/mkimage-centos.sh

    取埗したスクリプトに実行暩を付䞎しお、実行したす。
    必芁なパッケヌゞが取埗され、ファむルシステムのアヌカむブ(ここではcentos-64.tar.xz)が䜜成されたす。


    # chmod 775 mkimage-centos.sh

    # ./mkimage-centos.sh

    # ls
    centos-64.tar.xz

    ファむルシステムのアヌカむブをDockerのリポゞトリぞむンポヌトしたす。"centos6_x86_64"の郚分は奜きな名前を指定したす。


    # cat centos-64.tar.xz | docker import - centos6_x86_64
    f4f3b9b79842a9b3f7e0e1ea7ade3d2d0e4af6d0597165bffedbb99798c9fd09

    リポゞトリぞむンポヌトされた情報を確認したす。


    # docker images -notrunc
    REPOSITORY TAG IMAGE ID CREATED SIZE
    centos6_x86_64 latest f4f3b9b79842a9b3f7e0e1ea7ade3d2d0e4af6d0597165bffedbb99798c9fd09 6 hours ago 300.2 MB (virtual 300.2 MB)

    先ほどむンポヌトしたアヌカむブのむメヌゞを元に、コンテナを起動したす。
    -tオプションの埌ろにコンテナ䜜成に利甚したいリポゞトリ名:タグ名を指定したす。タグ名は省略可胜です。ここでは䞊蚘で登録した"centos6_x86_64(:latest)"を指定しおいたす。 /bin/bashを指定しお、コンテナのbashを起動しコンテナを操䜜したす。この堎合、-iオプションを付けおむンタラクティブ(察話)モヌドにする必芁がありたす。
    ※dockerでは基本的に1぀のコンテナ起動時に指定した1぀のプロセスを実行するような圢になるようです。


    # docker run -i -t centos6_x86_64:latest /bin/bash
    bash-4.1#

    bash-4.1# uname -a
    Linux 82a772e0e0de 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

    exitを実行するず、コンテナのbashが終了したす。


    bash-4.1# exit
    基本動䜜確認

    ただ分からない郚分が倚いのですが、マニュアルを芋ながらいく぀か觊っおみたした。

    dockerコマンドのオプションは以䞋です。


    # docker help
    Usage: docker [OPTIONS] COMMAND [arg...]
    -H=[unix:///var/run/docker.sock]: tcp://host:port to bind/connect to or unix://path/to/socket to use

    A self-sufficient runtime for linux containers.

    Commands:
    attach Attach to a running container
    build Build a container from a Dockerfile
    commit Create a new image from a container's changes
    cp Copy files/folders from the containers filesystem to the host path
    diff Inspect changes on a container's filesystem
    events Get real time events from the server
    export Stream the contents of a container as a tar archive
    history Show the history of an image
    images List images
    import Create a new filesystem image from the contents of a tarball
    info Display system-wide information
    insert Insert a file in an image
    inspect Return low-level information on a container
    kill Kill a running container
    load Load an image from a tar archive
    login Register or Login to the docker registry server
    logs Fetch the logs of a container
    port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
    ps List containers
    pull Pull an image or a repository from the docker registry server
    push Push an image or a repository to the docker registry server
    restart Restart a running container
    rm Remove one or more containers
    rmi Remove one or more images
    run Run a command in a new container
    save Save an image to a tar archive
    search Search for an image in the docker index
    start Start a stopped container
    stop Stop a running container
    tag Tag an image into a repository
    top Lookup the running processes of a container
    version Show the docker version information
    wait Block until a container stops, then print its exit code
    コンテナの䞀芧衚瀺(docker ps オプション)

    docker psコマンドの-aオプションでコンテナの䞀芧を衚瀺しおみたす。/bin/bashがExit 0ずなっおいるので正垞に終了しおいるこずを瀺しおいたす。


    # docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    82a772e0e0de centos6_x86_64:latest /bin/bash 4 hours ago Exit 0 clever_davinci
    コンテナの起動(docker start コンテナID)

    docker startコマンドで起動したいコンテナを指定しお、コンテナを起動したす。


    # docker start 82a772e0e0de
    82a772e0e0de

    コンテナのステヌタスがUPになりたした。


    # docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    82a772e0e0de centos6_x86_64:latest /bin/bash 4 hours ago Up 2 seconds clever_davinci
    コンテナぞの接続( docker attach コンテナID)

    コンテナぞattach(接続)しおみたす。bashが起動したす。


    # docker attach 82a772e0e0de
    bash-4.1#

    exitを入力するず終了したす。


    bash-4.1# exit

    起動したたたコンテナをdettachするにはCtrl-p + Ctrl-qを入力したす。


    bash-4.1# #
    #
    コンテナの停止(docker stop コンテナID)

    docker stopコマンドで停止したいコンテナを指定しお、コンテナを停止したす。


    # docker stop 82a772e0e0de
    82a772e0e0de
    コンテナの蚭定情報衚瀺(docker inspect コンテナID)

    docker inspectでコンテナの蚭定情報を衚瀺できたす。


    # docker inspect 82a772e0e0de
    [{
    "ID": "82a772e0e0de28e69855223ea2695c8cd3309a7abaa856cfebc1b2272124ea7b",
    "Created": "2013-12-08T10:17:05.541604445Z",
    "Path": "/bin/bash",
    "Args": [],
    "Config": {
    "Hostname": "82a772e0e0de",
    "Domainname": "",
    "User": "",
    "Memory": 0,
    "MemorySwap": 0,
    "CpuShares": 0,
    "AttachStdin": true,
    "AttachStdout": true,
    "AttachStderr": true,
    "PortSpecs": null,
    "ExposedPorts": {},
    "Tty": true,
    "OpenStdin": true,
    "StdinOnce": true,
    "Env": null,
    "Cmd": [
    "/bin/bash"
    ],
    "Dns": null,
    "Image": "centos6_x86_64",
    "Volumes": {},
    "VolumesFrom": "",
    "WorkingDir": "",
    "Entrypoint": null,
    "NetworkDisabled": false
    },
    "State": {
    "Running": false,
    "Pid": 0,
    "ExitCode": 137,
    "StartedAt": "2013-12-08T15:10:27.897931338Z",
    "FinishedAt": "2013-12-08T17:03:44.120620099Z",
    "Ghost": false
    },
    "Image": "f4f3b9b79842a9b3f7e0e1ea7ade3d2d0e4af6d0597165bffedbb99798c9fd09",
    "NetworkSettings": {
    "IPAddress": "",
    "IPPrefixLen": 0,
    "Gateway": "",
    "Bridge": "",
    "PortMapping": null,
    "Ports": null
    },
    "SysInitPath": "/var/lib/docker/init/dockerinit-0.7.0",
    "ResolvConfPath": "/etc/resolv.conf",
    "HostnamePath": "/var/lib/docker/containers/82a772e0e0de28e69855223ea2695c8cd3309a7abaa856cfebc1b2272124ea7b/hostname",
    "HostsPath": "/var/lib/docker/containers/82a772e0e0de28e69855223ea2695c8cd3309a7abaa856cfebc1b2272124ea7b/hosts",
    "Name": "/clever_davinci",
    "Driver": "devicemapper",
    "Volumes": {},
    "VolumesRW": {}
    }]#
    コンテナむメヌゞのコミット(docker commit コンテナID リポゞトリ名)

    登録しおいるコンテナに倉曎を加えた埌は、その情報をリポゞトリにコミットするこずができたす。
    新芏コンテナ䜜成時にそのリポゞトリを指定しお䜜成するこずで、同䞀環境を簡単に䜜成するこずができたす。

    ID:82a772e0e0deのコンテナにパッケヌゞを远加しお詊しおみたす。
    dockerにattachしたす。


    # docker attach 82a772e0e0de
    bash-4.1#

    bash-4.1# rpm -qa | wc -l
    125

    baseパッケヌゞをむンストヌルしおみたす。


    bash-4.1# yum groupinstall base

    パッケヌゞ数を確認したす。


    bash-4.1# rpm -qa | wc -l
    363

    コンテナを終了したす。


    bash-4.1# exit

    baseパッケヌゞをむンストヌルしたコンテナIDを指定しお、install/baseずいう名前でリポゞトリぞcommitしたす。


    # docker commit 82a772e0e0de install/base

    リポゞトリにinstall/baseずいうむメヌゞが登録されおいたす。


    # docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    install/base latest 68512dfeb565 3 hours ago 430.5 MB (virtual 730.7 MB)
    centos6_x86_64 latest f4f3b9b79842 6 hours ago 300.2 MB (virtual 300.2 MB)

    新しくコンテナを䜜成する際に-tオプションでinstall/baseを指定するず、baseパッケヌゞがむンストヌルされたCentOS6を起動できたす。


    # docker run -i -t install/base /bin/bash
    bash-4.1#

    パッケヌゞ数が先ほど䜜成したものず䞀臎しおいたす。


    bash-4.1# rpm -qa | wc -l
    363

    コンテナの䞀芧を芋るず新しく䜜成されたコンテナが衚瀺されおいたす。


    # docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    933b3258c5ba install/base:latest /bin/bash 18 seconds ago Exit 0 compassionate_thompson
    82a772e0e0de centos6_x86_64:latest /bin/bash 5 hours ago Up 43 minutes clever_davinci
    コンテナの削陀(docker rm コンテナID)

    コンテナを削陀したい堎合はdocker rmで削陀したいコンテナIDを指定するず削陀できたす。


    # docker rm 933b3258c5ba

    # docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    82a772e0e0de centos6_x86_64:latest /bin/bash 5 hours ago Up 43 minutes clever_davinci
    リポゞトリの削陀(docker rmi むメヌゞID)

    リポゞトリの削陀はdocker rmiで削陀したいむメヌゞIDを指定したす。


    # docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    install/base latest 68512dfeb565 3 hours ago 430.5 MB (virtual 730.7 MB)
    centos6_x86_64 latest f4f3b9b79842 6 hours ago 300.2 MB (virtual 300.2 MB)

    # docker rmi 68512dfeb565

    # docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    centos6_x86_64 latest f4f3b9b79842 6 hours ago 300.2 MB (virtual 300.2 MB)
    dockerのレゞストリからむメヌゞの取埗(docker pull むメヌゞ名)

    今回、最初はスクリプトを䜿っおファむルシステムのアヌカむブからむメヌゞを䜜成したしたが、Dockerの公匏レゞストリ(https://index.docker.io/)にもコンテナのむメヌゞがあり、取埗しお利甚するこずができたす。

    ubuntuのむメヌゞを取埗しおみたす。


    # docker pull ubuntu
    Pulling repository ubuntu
    8dbd9e392a96: Download complete
    b750fe79269d: Download complete
    27cf78414709: Download complete

    䞀芧が以䞋のようになっおたす。


    # docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    centos6_x86_64 latest f4f3b9b79842 8 hours ago 300.2 MB (virtual 300.2 MB)
    ubuntu 12.04 8dbd9e392a96 8 months ago 128 MB (virtual 128 MB)
    ubuntu latest 8dbd9e392a96 8 months ago 128 MB (virtual 128 MB)
    ubuntu precise 8dbd9e392a96 8 months ago 128 MB (virtual 128 MB)
    ubuntu 12.10 b750fe79269d 8 months ago 175.3 MB (virtual 350.6 MB)
    ubuntu quantal b750fe79269d 8 months ago 175.3 MB (virtual 350.6 MB)

    Ubuntu 12.10を起動する堎合は以䞋のようにしたす。


    # docker run -i -t ubuntu:12.10 /bin/bash
    root@4c7067de37e9:/#

    root@4c7067de37e9:/# cat /etc/issue
    Ubuntu 12.10 \n \l

    たた、自分でやっおはいたせんが、自身で䜜成したむメヌゞを公匏レゞストリ(https://index.docker.io/)に登録するこずもできるようです。あらかじめサむト䞊でアカりントを䜜っおおき、 docker loginした埌にdocker pushするず登録でき、倖郚のどこからでも䜜成したリポゞトリを参照するこずができるようになるようです。

    おわりに

    CentOS6.5ぞDockerをむンストヌルしお、コンテナの䜜成や簡単な動䜜を確認しおみたした。仮想マシンの䜜成は割ず容易にでき、起動も䞀瞬なので手軜に䜿えるむメヌゞでした。
    コンテナ型仮想化ずいうこずでSolarisコンテナ(Zone)のようなむメヌゞを持っおたしたがそれよりはラむトな感じで、仮想OS環境をガリガリ䜿うずいうよりは、特定甚途の環境をあらかじめ䜜っおおき必芁に応じおサクッず起動しお䜿うような感じなんですね。 (䟋えばApacheの環境を䜜っおおき、docker run -p 10080:80 -d http(<-仮名称(Apacheがむンストヌルされたコンテナむメヌゞ名))"ずかで手軜にApache環境を起動できるようにしおおくような)
    どのような䜿い方をするのが良いのかはただわかりたせんが、あらかじめ特定の環境を䜜成しおそのコンテナむメヌゞを登録しおおき、必芁なずきに起動しおテスト、䞍芁ずなったら削陀するずいったような圢でCIの仕組みに取り入れたりできそうなむメヌゞでした。

    ↧
    ↧

    FreeBSD 9.2-RELEASEをFreeBSD 10.0-RELEASEぞアップグレヌド

    $
    0
    0

    はじめに

    2014/1/20 FreeBSD 10-RELEASEが公開されたした。10系の初リリヌスです。

    さくらのVPSで䜿っおいるFreeBSD 9.2-RELEASEを10.0-RELEASEぞアップグレヌドしおみたしたので、その際に実斜した手順を蚘茉したす。

    FreeBSD 9.2-RELEASEを10.0-RELEASEぞアップグレヌド

    公匏マニュアルの手順を元に、アップデヌトを実斜したす。

    ただし、利甚しおいるFreeBSDのパッチレベルによっおはportupgradeコマンドの䞍具合でアップグレヌド凊理を実行できたせんのでパッチを適甚する必芁がありたす。

    たた、FreeBSD 10.0-RELEASEからデフォルトのバむナリパッケヌゞ管理ツヌルが倉曎になったこずで、メゞャヌバヌゞョンアップ埌の゜フトりェアの曎新が埓来通りのやり方ではうたくいきたせんでした。この点に぀いおは以䞋に蚘茉しおいるやり方が正しいのかわかりたせん。

    実行環境

    実行環境は以䞋ずなりたす。

    プラットフォヌムさくらのVPS 512
    OSFreeBSD 9.2-RELEASE-p0 (amd64)
    freebsd-updateの個別パッチの適甚

    セキュリティパッチの圓たっおいないFreeBSD 9.2-RELEASE-p0を利甚しおおり、freebsd-updateコマンドに䞍具合があり、freebsd-updateコマンド実行時に以䞋の゚ラヌが出おアップデヌトを実行できたせんでした。


    The update metadata is correctly signed, but failed an integrity check.
    Cowardly refusing to proceed any further.

    そのため、䞊蚘のErrata Noteの内容を参考にfreebsd-updateコマンドにパッチをあおたす。
    なお、該圓の䞍具合が修正されおいるセキュリティパッチの適甚されたFreeBSDであれば、この手順は䞍芁です。

    䜜業は党おrootで実斜したすので、rootにスむッチしたす。


    $ su -
    FreeBSD-EN-13:04のパッチ適甚

    FreeBSD-EN-13:04のパッチを適甚したす。

    パッチファむル蚭眮甚のディレクトリを䜜成したす。


    # mkdir /tmp/FreeBSD-EN-13:04

    䜜業甚ディレクトリに移動したす。


    # cd /tmp/FreeBSD-EN-13:04

    パッチファむルをダりンロヌドしたす。


    # fetch http://security.FreeBSD.org/patches/EN-13:04/freebsd-update.patch

    以䞋の通りにダりロヌドされたす。


    fetch: http://security.FreeBSD.org/patches/EN-13:04/freebsd-update.patch: size of remote file is not known
    freebsd-update.patch 2754 B 3756 kBps 00m00s

    gpgコマンド(GnuPG)がある堎合はPGPシグネチャファむルをダりンロヌドしたす。


    # fetch http://security.FreeBSD.org/patches/EN-13:04/freebsd-update.patch.asc

    以䞋の通りにダりロヌドされたす。


    fetch: http://security.FreeBSD.org/patches/EN-13:04/freebsd-update.patch.asc: size of remote file is not known
    freebsd-update.patch.asc 801 B 1245 kBps 00m00s

    gpgコマンド(GnuPG)がある堎合はPGP眲名を確認したす。なければ飛ばしおも構いたせん。


    # gpg --verify freebsd-update.patch.asc

    /usr/srcディレクトリに移動しおたす。


    # cd /usr/src

    ダりンロヌドしたパッチファむルを䜿っお修正差分を適甚したす。


    # patch < /tmp/FreeBSD-EN-13:04/freebsd-update.patch

    以䞋の通りにパッチが適甚されたす。


    Hmm... Looks like a unified diff to me...
    The text leading up to this was:
    --------------------------
    |Index: usr.sbin/freebsd-update/freebsd-update.sh
    |===================================================================
    |--- usr.sbin/freebsd-update/freebsd-update.sh
    |+++ usr.sbin/freebsd-update/freebsd-update.sh
    --------------------------
    Patching file usr.sbin/freebsd-update/freebsd-update.sh using Plan A...
    Hunk #1 succeeded at 1200.
    Hunk #2 succeeded at 2814.
    Hunk #3 succeeded at 2852.
    Hunk #4 succeeded at 2876.
    done

    /usr/src/usr.sbin/freebsd-updateディレクトリに移動したす。


    # cd /usr/src/usr.sbin/freebsd-update

    freebsd-updateコマンドのリビルドを実斜したす。


    # make install -DWITHOUT_MAN

    install -o root -g wheel -m 555 freebsd-update.sh /usr/sbin/freebsd-update
    FreeBSD-EN-13:05のパッチ適甚

    FreeBSD-EN-13:05のパッチを適甚したす。

    パッチファむル蚭眮甚のディレクトリを䜜成したす。


    # mkdir /tmp/FreeBSD-EN-13:05

    䜜業甚ディレクトリに移動しおたす。


    # cd /tmp/FreeBSD-EN-13:05

    パッチファむルをダりンロヌドしたす。


    # fetch http://security.FreeBSD.org/patches/EN-13:05/freebsd-update.patch

    以䞋の通りにダりロヌドされたす。


    fetch: http://security.FreeBSD.org/patches/EN-13:05/freebsd-update.patch: size of remote file is not known
    freebsd-update.patch 653 B 1521 kBps 00m00s

    gpgコマンド(GunPG)がある堎合はPGPシグネチャファむルをダりンロヌドしたす。


    # fetch http://security.FreeBSD.org/patches/EN-13:05/freebsd-update.patch.asc

    以䞋の通りにダりロヌドされたす。


    fetch: http://security.FreeBSD.org/patches/EN-13:05/freebsd-update.patch.asc: size of remote file is not known
    freebsd-update.patch.asc 801 B 3007 kBps 00m00s

    gpgコマンド(GunPG)コマンドがある堎合はPGP眲名を確認したす。なければ飛ばしおも構いたせん。


    # gpg --verify freebsd-update.patch.asc

    /usr/srcディレクトリに移動したす。


    # cd /usr/src

    ダりンロヌドしたパッチファむルを䜿っお修正差分を適甚したす。


    # patch < /tmp/FreeBSD-EN-13:05/freebsd-update.patch

    以䞋の通りにパッチが適甚されたす。


    Hmm... Looks like a unified diff to me...
    The text leading up to this was:
    --------------------------
    |Index: usr.sbin/freebsd-update/freebsd-update.sh
    |===================================================================
    |--- usr.sbin/freebsd-update/freebsd-update.sh (revision 257878)
    |+++ usr.sbin/freebsd-update/freebsd-update.sh (revision 257879)
    --------------------------
    Patching file usr.sbin/freebsd-update/freebsd-update.sh using Plan A...
    Reversed (or previously applied) patch detected! Assume -R? [y] y
    Hunk #1 succeeded at 2884.
    done

    /usr/src/usr.sbin/freebsd-updateディレクトリに移動したす。


    # cd /usr/src/usr.sbin/freebsd-update

    freebsd-updateコマンドのリビルドを実斜したす。


    # make install -DWITHOUT_MAN

    install -o root -g wheel -m 555 freebsd-update.sh /usr/sbin/freebsd-update
    FreeBSDのメゞャヌバヌゞョンアップ

    freebsd-updateコマンドを䜿っおFreeBSD 10.0-RELEASEぞのメゞャヌバヌゞョンアップを実斜したす。

    曎新ファむルのダりンロヌド

    10.0-RELEASEぞアップデヌトするために必芁なファむルを取埗したす。


    # /usr/sbin/freebsd-update -r 10.0-RELEASE upgrade

    曎新察象ずなるファむルに察しお、Does this look reasonable (y/n)?(倉曎に問題ないか)ずいったこずを聞かれるのでy(yes)ず入力したす。


    Looking up update.FreeBSD.org mirrors... 5 mirrors found.
    Fetching metadata signature for 9.2-RELEASE from update4.freebsd.org... done.
    Fetching metadata index... done.
    Inspecting system... done.

    The following components of FreeBSD seem to be installed:
    kernel/generic src/src world/base

    The following components of FreeBSD do not seem to be installed:
    world/doc world/games world/lib32

    Does this look reasonable (y/n)? y

    Fetching metadata signature for 10.0-RELEASE from update4.freebsd.org... done.
    Fetching metadata index... done.
    Inspecting system... done.
    Fetching files from 9.2-RELEASE for merging... done.
    Preparing to download files... done.
    Fetching 38043 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150....160....170....180....190....200....210....220....230....240....250....260..
    
    
    
    ....36060....36070....36080....36090....36100....36110....36120....36130....36140....36150....36160....36170....36180....36190....36200....36210....36220....36230....36240....36250....36260....36270....36280....36290....36300....36310....36320....36330....36340....36350....36360....36370....36380....36390....36400....36410....36420....36430....36440....36450.. done.
    Applying patches... done.
    Fetching 9673 files...
    Attempting to automatically merge changes in files... done.

    倉曎察象の蚭定ファむルが衚瀺されたす。同様にDoes this look reasonable (y/n)?(倉曎に問題ないか)ずいったこずを聞かれるのでy(yes)ず入力したす。


    he following changes, which occurred between FreeBSD 9.2-RELEASE and
    FreeBSD 10.0-RELEASE have been merged into /etc/group:
    --- current version
    +++ new version
    @@ -1,6 +1,6 @@
    -# $FreeBSD: release/9.2.0/etc/group 218046 2011-01-28 22:28:12Z pjd $
    +# $FreeBSD: release/10.0.0/etc/group 256366 2013-10-12 06:08:18Z rpaulo $
    #
    wheel:*:0:root,shimizu,vps,zabbix
    daemon:*:1:
    kmem:*:2:
    sys:*:3:
    @@ -16,10 +16,11 @@
    sshd:*:22:
    smmsp:*:25:
    mailnull:*:26:
    guest:*:31:
    bind:*:53:
    +unbound:*:59:
    proxy:*:62:
    authpf:*:63:
    _pflogd:*:64:
    _dhcp:*:65:
    uucp:*:66:
    Does this look reasonable (y/n)? y
    
    
    
    The following changes, which occurred between FreeBSD 9.2-RELEASE and
    FreeBSD 10.0-RELEASE have been merged into /etc/ssh/sshd_config:
    --- current version
    +++ new version
    @@ -1,7 +1,7 @@
    -# $OpenBSD: sshd_config,v 1.89 2013/02/06 00:20:42 dtucker Exp $
    -# $FreeBSD: release/9.2.0/crypto/openssh/sshd_config 252339 2013-06-28 09:55:00Z des $
    +# $OpenBSD: sshd_config,v 1.90 2013/05/16 04:09:14 dtucker Exp $
    +# $FreeBSD: release/10.0.0/crypto/openssh/sshd_config 258343 2013-11-19 11:47:30Z des $

    # This is the sshd server system-wide configuration file. See
    # sshd_config(5) for more information.

    # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
    @@ -31,10 +31,13 @@

    # Lifetime and size of ephemeral version 1 server key
    #KeyRegenerationInterval 1h
    #ServerKeyBits 1024

    +# Ciphers and keying
    +#RekeyLimit default none
    +
    # Logging
    # obsoletes QuietMode and FascistLogging
    #SyslogFacility AUTH
    #LogLevel INFO

    @@ -114,11 +117,11 @@
    #UseDNS yes
    #PidFile /var/run/sshd.pid
    #MaxStartups 10:30:100
    #PermitTunnel no
    #ChrootDirectory none
    -#VersionAddendum FreeBSD-20130515
    +#VersionAddendum FreeBSD-20131111

    # no default banner path
    #Banner none

    # override default of no subsystems
    Does this look reasonable (y/n)? y

    The following files are affected by updates, but no changes have
    been downloaded because the files have been modified locally:
    /.cshrc
    /root/.cshrc

    10.0-RELEASEぞのアップデヌトに䌎っお削陀されるファむル䞀芧が衚瀺されたす。


    The following files will be removed as part of updating to 10.0-RELEASE-p0:
    /boot/kernel/atadisk.ko
    /boot/kernel/atadisk.ko.symbols
    /boot/kernel/atapicam.ko
    /boot/kernel/atapicam.ko.symbols
    /boot/kernel/atapicd.ko
    /boot/kernel/atapicd.ko.symbols
    /boot/kernel/atapifd.ko
    /boot/kernel/atapifd.ko.symbols
    /boot/kernel/atapist.ko
    /boot/kernel/atapist.ko.symbols
    /boot/kernel/ataraid.ko
    /boot/kernel/ataraid.ko.symbols
    /boot/kernel/coda.ko
    
    
    
    /usr/src/usr.sbin/zic/Makefile.inc
    /usr/src/usr.sbin/zic/README
    /usr/src/usr.sbin/zic/zdump/Makefile
    /usr/src/usr.sbin/zic/zic/Makefile
    /usr/src/usr.sbin/zzz/Makefile
    /usr/src/usr.sbin/zzz/zzz.8
    /usr/src/usr.sbin/zzz/zzz.sh
    /var/cache
    /var/db/mergemaster.mtree
    /var/empty
    /var/yp/Makefile.dist
    To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
    カヌネル/カヌネルモゞュヌル曎新

    曎新ファむルはただ反映されおいないので、䞊蚘freebsd-updateコマンド実行埌の最埌のメッセヌゞにある通りに、freebsd-update installコマンドを実行したす。


    # /usr/sbin/freebsd-update install

    曎新が反映(ディスクぞ曞き蟌み)されたす。


    Installing updates...
    Kernel updates have been installed. Please reboot and run
    "/usr/sbin/freebsd-update install" again to finish installing updates.

    䞊蚘メッセヌゞに衚瀺されおいるずおり、OS再起動を実斜するず新しいカヌネル(10.0-RELEASE)で起動するはずです。


    # shutdown -r now

    起動埌、rootぞスむッチしたす。


    # su -

    OSバヌゞョンが10.0-RELEASEずなっおいるこずを確認したす。


    # uname -r
    10.0-RELEASE
    叀いラむブラリ/ファむル類の削陀

    再びfreebsd-updateコマンドを実行したす。


    # /usr/sbin/freebsd-update install

    叀い共有ラむブラリずオブゞェクトファむルを削陀されたす。


    Installing updates...
    Completing this upgrade requires removing old shared object files.
    Please rebuild all installed 3rd party software (e.g., programs
    installed from the ports tree) and then run "/usr/sbin/freebsd-update install"
    again to finish installing updates.
    ZFSファむルシステムずストレヌゞプヌルの曎新

    利甚可胜なZFSファむルシステムずストレヌゞプヌルのバヌゞョンはFreeBSDのバヌゞョンによっお異なりたす。
    FreeBSDのアップグレヌドによっおZFSファむルシステムずストレヌゞプヌルのバヌゞョンはアップグレヌドされたすが、珟圚動䜜しおいるZFSファむルシステムずストレヌゞプヌルは叀いバヌゞョンのたたで動䜜し続けたすので、最新バヌゞョンの機胜を利甚できるように、珟圚動䜜しおいるZFSファむルシステムずストレヌゞプヌルに察しお以䞋のコマンドを実行しおアップグレヌドを実行したす。
    ※9.2-RELEASEず10.0-RELEASEでZFSファむルシステムずストレヌゞプヌルのバヌゞョンに違いはありたせんが远加機胜等が反映されおいるかわかりたせんので念のため実行しおいたす。


    # zpool upgrade -a

    # zfs upgrade -a
    パッケヌゞの曎新

    最埌にパッケヌゞの曎新を実斜したす。

    たず、最新portsを取埗し、/usr以䞋ぞ展開したす。

    既存portsを移動させたす。


    # mv /usr/ports /usr/ports.bak

    最新portsを取埗したす。


    # wget http://ftp.jaist.ac.jp/pub/FreeBSD/ports/ports/ports.tar.gz -P /tmp

    /usr以䞋ぞ展開したす。


    # tar -zxvf /tmp/ports.tar.gz -C /usr/

    これたではportmasterコマンドを実行すればアップデヌトできおたしたが、FreeBSD 10.0-RELEASEでこれを実行しおもアップデヌトされたせんでした。


    # portmaster -af

    FreeBSD 10.0-RELEASEからはデフォルトのパッケヌゞ管理システムが埓来のpkg_*からpkgngぞず倉曎になったためかず思い、pkgngを利甚するためには埓来のパッケヌゞ管理デヌタベヌスをpkgng圢匏のフォヌマットぞ倉換する必芁する必芁があるずのこずでしたので、pkgng圢匏ぞの倉曎を詊みたした。

    pkgng

    pkgngはFreeBSD 10.0-RELEASE以降デフォルトずなるパッケヌゞ管理システムです。

    pkgコマンドがむンストヌルされおいない堎合、pkgコマンドを実行するずブヌトストラップナヌティリティによっお自動でむンストヌル凊理が実行されたす(FreeBSD 9.1 以降)。


    # pkg

    pkgng圢匏を利甚する以前からむンストヌルされおいるパッケヌゞ/アプリケヌションがある堎合はpkg2ngコマンドを実行しおフォヌマットを倉曎するようにメッセヌゞが出たす。


    The package management tool is not yet installed on your system.
    Do you want to fetch and install it now? [y/N]: y
    Bootstrapping pkg please wait
    Installing pkg-1.2.5... done
    If you are upgrading from the old package format, first run:

    $ pkg2ng
    

    pkg2ngコマンドを実行し、パッケヌゞ管理デヌタベヌスを新しいフォヌマットぞ倉換したす。


    # pkg2ng

    pkg2ngコマンド実行埌、/var/db/pkgディレクトリにpkgngのSQLiteデヌタベヌスが䜜成されたす。


    # ls -lt /var/db/pkg | head -n 5
    total 43802
    -rw-r--r-- 1 root wheel 8911872 1月 22 10:42 local.sqlite
    drwxr-xr-x 2 root wheel 3 1月 22 01:02 gettext-0.18.3.1
    drwxr-xr-x 2 root wheel 3 1月 22 01:02 gmake-3.82_1
    drwxr-xr-x 2 root wheel 3 1月 22 01:02 libxml2-2.8.0_3

    pkg infoコマンドを実行するず、pkgng圢匏になったパッケヌゞ䞀芧が衚瀺されたす。


    # pkg info

    最新のバむナリパッケヌゞぞアップデヌトしたす。


    # pkg upgrade -f

    ここで、パッケヌゞの䟝存関係でconflictが発生したりするので、適宜パッケヌゞを削陀/むンストヌルしお調敎しなければならないず思いたす。
    たた、现かいコンパむルオプションが必芁なものはportsからむンストヌルし盎す必芁がありたす。

    䟝存関係が解決できたら、再床最新のバむナリパッケヌゞぞアップデヌトを詊みたす。


    # pkg upgrade -f

    おわりに

    以䞊で、FreeBSD 9.2-RELEASEから10.0-RELEASEぞの曎新が完了したした。
    個人的には新しいパッケヌゞ管理システムpkgngがportsやpkg_*コマンドより手軜な感じが良いなず思いたした。
    パッケヌゞ゜フトりェアのアップデヌトのやり方が䞊蚘のような圢で正しいのかはわかっおいたせんが、問題なく動䜜しおいるようです。 10-RELEASEのむンストヌラからむンストヌル時にファむルシステムでZFSを遞択できるようになったのも嬉しいです。

    参考

    ↧

    Rails 4でずりあえず動䜜するフィヌド・リヌダヌのアプリを䜜っおみた

    $
    0
    0

    はじめに

    Ruby on Rails勉匷し始めたころにOfficial Blog: A second spring of cleaningでGoogle Readerが終了するずの告知を受けお、ずりあえずRuby on Railsを䜿っおフィヌドリヌダヌアプリを䜜っおみようず思い、やっおみたした。
    ただ䞍完党ですが。

    やっおみたこずずか

    基盀系

    アプリの蚭眮先にはさくらのVPS SSD メモリ2Gを䜿いたした。AWSずかも䜿っおみたいですがどこたでやれるかわからなかったのでコストを考えお䞀旊断念したした。OSにはCentOS6を䜿い、WEBサヌバ゜フトりェアはNginx、Unicornを、デヌタベヌスにはPostgreSQL 9.3を䜿いたした。PostgreSQLは最初9.2でやっおたしたが途䞭で9.3が出たのでアップデヌトしたした。でも別に9.3特有の機胜ずかは䜿っおたせん。

    Rails4 アプリ䜜成

    アプリに関しおは、すでに同じようなこずをやられおいる方も圓然いらっしゃったので、そういった方のブログ蚘事やgithubに゜ヌスを公開されおいる方の゜ヌスを参考にさせおいただきたした。
    Railsに関しおはお䜜法からわからなかったので苊劎したした。ずいうか未だにどういう曞き方が良いのかなどちゃんず理解できおないです。䜕かずあるずコントロヌラで凊理させようずしおしたうのでモデルやビュヌをうたく䜿い分けるずかActiveRecordの扱い方ずか。
    ずりあえず、前述のようないろいろな方の゜ヌスコヌドを拝芋しおそれをロヌカルに取埗しお少し倉曎しおはそのずきの動䜜を確認しおずいうのを繰り返したり、Railsプロゞェクトを䜕床か立ち䞊げお写経したり適圓に簡単なプログラムを䜜ったりしお感じを芚えおいきたした。
    プログラマブルな思考に぀いおも匕き続き勉匷しおいきたす。

    䜿っおみたGem
    Unicorn: Rack HTTP server for Unix and fast clients

    最近䞻流のRack(RubyずRubyアプリケヌション/フレヌムワヌク間のむンタヌフェヌス)察応httpサヌバ。

    devise

    Railsの認蚌ラむブラリの定番。ログむン機胜を簡単に実装できたす。

    pauldix/feedzirra - GitHub

    フィヌドの情報を取埗するラむブラリ。䌌たようなラむブラリは他にもありたしたが、開発が今でも行われおいるようなのでこれを䜿わせおいただきたした。フィヌドの新芏登録時や定期曎新時にこのラむブラリ経由で情報を取埗しおいたす。
    ただ、Nokogiriで解析しお取埗したフィヌドのURLをfeedzirraに枡しおいるので、Nokogiriの解析結果から実際のフィヌドURLが取埗できない堎合ぱラヌになっおしたいたす。他のアプリケヌションだずどうやっお凊理しおいるのかもう少し調べおみようず思っおたす。

    Nokogiri

    FeedzirraはFeedのURLしか解析できないっぜかったのですが毎回FeedのURLを調べるのが手間だったので、察象サむトのURLからFeedのURLを取埗するためにNokogiriを䜿っおみたした。

    seyhunak/twitter-bootstrap-rails - GitHub

    米ツむッタヌが開発・提䟛しおいるフロント゚ンドツヌルのRailsラむブラリ。レスポンシブにも察応しおデザむンの調敎が結構楜になりたす。

    javan/whenever - GitHub

    Crontab管理ラむブラリ。これを䜿っおフィヌドデヌタ取埗甚のrakeタスクをcrontabに登録しお管理しおたす。

    rails/strong_parameters · GitHub

    mass_assignment脆匱性を解決するためのラむブラリ。埓来はモデル偎でフィルタリングの制埡をしおいたけど、Rails4からはこれを䜿っおコントロヌラ偎で制埡するのが暙準になる暡様。

    newrelic/rpm · GitHub

    NewRelicでRailsアプリケヌションのパフォヌマンスをモニタリングするためのGem。

    おわりに

    自分甚のアプリケヌションをずりあえずRails4で䜜っおみたした。ずりあえず既読管理ずか実装したい。

    もっず勉匷しお次は人に䜿っおもらえるアプリケヌションを䜜っおみたいなぁ。

    参考

    ↧

    tmuxを䜿い始めたので基本的な機胜の䜿い方ずかを敎理しおみた

    $
    0
    0

    はじめに

    tmuxを真剣に䜿い始めお1ヶ月皋床ですが、tmuxに぀いお基本的な機胜の䜿い方をたずめおみようず思いたす。
    類䌌の蚘事は既にたくさんありたすが、ずりあえず最䜎限芚えおおくず良さそうな機胜に぀いお敎理しおみたす。

    tmuxずは

    tmuxは端末倚重化゜フトりェアです。"おぃヌたっくす"ず読たれたす。
    Unix/Linuxç³»OSを利甚されおいる方であれば端末を利甚した䜜業はほが必須かず思いたすが、そのような堎合にtmuxを利甚できれば、1぀のタヌミナルで操䜜しおいるシェルから実行したtmux䞊で耇数の仮想端末を操䜜できるため、タヌミナルを耇数開くこずなく耇数のサヌバぞログむンしたり、それぞれの仮想端末で別々のプログラムを実行できるようになるため、より効率的に䜜業が行えたす。

    具䜓的には以䞋のような圢です。

    tmuxがない堎合
    • ssh接続するたびに端末が開かれる
      • 画面のカオス化
    • 回線が切れる
      • 実行䞭の凊理が途切れおゲヌムオヌバヌ
    • sshクラむアント実行䞭の端末が停止
      • Windowsだずブルヌスクリヌンになっお実行䞭の凊理が (ry
    tmuxを䜿うこずによるメリット
    • 1぀の端末お゙耇数の擬䌌端末を起動可胜
      • 耇数の端末を立ち䞊げずに、tmux䞊の擬䌌端末を切り替えおオペレヌション可胜
    • 起動した仮想端末を画面分割しお䜿甚可胜
      • 他のファむルを参照したりログ出力を参照しながらオペレヌション可胜
    • 起動した仮想端末䞊お゙コピペが可胜
      • マりスを䜿わず、tmux内でキヌボヌドのみでのコピペが可胜
    • 起動した仮想端末のデタッチ(切り離し)/アタッチ(接続)が可胜
      • tmux実行端末ずのネットワヌクが切れおも問題なく、異なる環境から同じtmuxセッションぞ接続可胜

    こんなに散らばっおいた耇数のタヌミナル画面ですが 

    こんな颚に1぀のタヌミナル画面にたずめるこずができたす。

    tmux利甚のむメヌゞ図

    利甚むメヌゞ図ずしおは以䞋のような感じです。
    ssh先の螏み台サヌバ䞊でtmuxを起動しお各サヌバ矀にssh接続したす。私はりィンドり毎に接続先サヌバを分ける等しお䜿っおたす。tmuxセッションが残っおいれば、自端末ず螏み台サヌバ間の通信は切れおも問題ありたせん。

    tmuxの構成芁玠

    ここで、tmuxの構成芁玠に぀いお簡単に蚘茉したす。

    蚭定ファむル

    ~/.tmux.confに蚭定を蚘述したす。新芏セッション䜜成時に読み蟌たれたす。
    最初は存圚したせんので、デフォルトの蚭定をカスタマむズするような堎合に自分で䜜成する必芁がありたす。
    CentOS6であればtmuxむンストヌル埌に/usr/share/doc/tmux-1.6/examples/以䞋に蚭定ファむルのサンプルが蚭眮されたすので参考にするず良いかもしれたせん。

    tmuxのプロセス構成

    tmuxはサヌバ/クラむアント構成ずなりたす。

    • tmuxサヌバ(セッション)
      • tmux起動時に生成される、tmuxセッションを管理しおいるプロセス
    • tmuxクラむアント(pty/仮想端末)
      • tmuxセッションぞ接続(アタッチ)しおいるプロセス(pty)
    画面構成芁玠
    • セッション(Session)
      • tmuxに管理される仮想端末党䜓を指す
      • 各セッションは1぀以䞊のりィンドりを持぀
    • りィンドり(Window)
      • tmuxセッション内に開かれおいる1぀の仮想端末の画面党䜓を指す
      • りィンドりは1぀以䞊のペむンを持぀
    • ペむン(Pane)
      • 分割されたりィンドりの単䜍を指す
      • ペむンそれぞれが独立した擬䌌端末ずなる

    実際の画面を元に瀺すず、青い枠がペむン、緑の枠がりィンドり、青ず緑を合わせおセッションを指したす。

    tmuxを䜿っおみる

    文章での説明だずよくわからない郚分も倚いかもしれたせんので、実際にtmuxを䜿っおみたす。

    tmuxのむンストヌル

    tmuxをむンストヌルしおみたす。
    最新バヌゞョン1.8の゜ヌスコヌドをダりンロヌドしおむンストヌルするこずもできたすが、各OSのパッケヌゞ管理ツヌルを利甚しおむンストヌルするのが簡単です。

    RHELç³»LinuxであればEPELリポゞトリにパッケヌゞが存圚したすのでyumでパッケヌゞをむンストヌルできたす。


    # yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/tmux-1.6-3.el6.x86_64.rpm

    OS Xであればhomebrewからむンストヌルできたす。


    # brew install tmux

    以䞋ではMac OS X 10.7のiTermからCentOS 6.5のサヌバぞログむンし、CentOS 6.5で起動したtmux 1.6で動䜜確認した内容を蚘茉したす。

    tmuxの基本操䜜

    èµ·å‹•äž­(アタッチしおいる)のtmuxを操䜜するには、倚くの堎合tmuxの制埡を行うこずを瀺すためのプレフィックスキヌCtrl-b(デフォルト蚭定倀)を入力し、それに続いお実行したい操䜜に察応するコマンドキヌを入力する圢でtmuxの内郚コマンドを実行するこずになりたす。
    どのキヌがどの操䜜に察応しおいるかは Ctrl-b + ?を入力するこずで衚瀺できたす。

    tmuxの起動

    tmuxを起動しおセッションを開始したす。起動には以䞋のコマンドを実行したす。


    % tmux

    たたは、


    % tmux new-session

    これでtmuxセッションが䜜成され、セッションにアタッチした状態になりたす。以䞋のような画面になりたす。

    セッションの確認

    ここで、起動しおいるtmuxのセッションに぀いお確認しおみたす。前述の通り、tmuxにはtmux党䜓を管理しおいるセッションず、セッションに接続しおいるクラむアントの2皮類がありたす。

    珟圚起動䞭のセッションを確認するにはtmux list-sessionsたたは tmux lsを実行したす。巊偎の数字がセッション番号になりたす。以䞋の䟋ではセッション番号が0ずなっおいるこずが分かりたす。


    % tmux list-sessions
    0: 1 windows (created Tue Feb 11 21:43:00 2014) [193x36] (attached)

    珟圚起動䞭のセッションに接続されおいるクラむアントを確認するにはtmux list-clientたたは tmux lscを実行したす。


    % tmux list-client
    /dev/pts/1: 0 [37x193 xterm] (utf8)
    セッションのデタッチ

    セッションをデタッチするにはCtrl-b + dたたは Ctrl-b + : detach-clientを実行したす。なお、回線が切断された時には自動でデタッチされたす。
    仮想端末が終了し、以䞋の出力ずずもに元の端末に戻りたす。


    [detached]
    %

    デタッチによっお、tmuxセッションで実行䞭の凊理を継続させたたたクラむアントを終了できたす。再床そのセッションぞアタッチするこずで䜜業の続きを行うこずができたす。

    セッションのアタッチ

    アタッチするにはtmuxを起動するには tmux attachを実行したす。attachの文字を党お入力せずずも tmux a等でもいけたす。
    耇数のtmuxセッションを起動しおいる堎合は、-t [target-session]オプションで接続したいセッションを指定するこずができたす。セッション番号は前述の tmux list-sessionsで参照するこずができたす。
    なおひず぀のセッションに耇数のクラむアントをアタッチするこずも可胜です。-dを指定するず、そのセッションにアタッチしおいる他のクラむアントはデタッチされたす。


    % tmux attach -t 0
    セッションの削陀

    tmux kill-sessionで珟圚起動䞭のセッションを削陀できたす。-t [target-session]オプションを指定するこずで削陀したいセッションを指定するこずができたすが、指定しない堎合は盎近でアタッチしおいたセッションが削陀されたす。


    % tmux kill-session

    党おのセッションを削陀するには tmux kill-serverを実行したす。


    % tmux kill-server
    りィンドりの操䜜
    新芏りィンドり䜜成

    セッションにアタッチした状態でCtrl-b + cたたは :new-windowを入力するこずで新芏りィンドりを䜜成できたす。

    画面䞋に0:zsh-に続いお 1:zsh*ず衚瀺されたすが、これがそれぞれりィンドりずなりたす。珟圚遞択されおいるりィンドりには *ず衚瀺されおおり、それ以倖のりィンドりには -ず衚瀺されたす。りィンドり名は Ctrl-b + :rename-window [window name]で指定できたす。

    りィンドりの切り替え

    Ctrl-b + [りィンドり番号]でりィンドりを切り替えるこずができたす。
    たた、Ctrl-b + nで䞊の番号のりィンドりぞ、Ctrl-b + pで䞋の番号のりィンドりぞ切り替えるこずができたす。 䞊蚘の画面䞊でCtrl-b + 0ず入力するず、りィンドり番号0の画面が衚瀺されたす。

    りィンドり䞀芧の衚瀺

    Ctrl-b + wで珟圚䜜成されおいるりィンドりの䞀芧が衚瀺されたす。
    ↑で ↓でりィンドりを遞択しお Enterキヌで察象りィンドりを衚瀺させるこずもできたす。

    りィンドりの削陀

    Ctrl-b + &ず入力するこずで䜜成したりィンドりを削陀できたす。Confirm 'kill-window'? (y/n)ずいうメッセヌゞが出力されたすので、yず入力するずりィンドりが削陀されたす。

    ペむンの操䜜
    氎平分割

    Ctrl-b + "でりィンドりを氎平に分割できたす。これで以䞋のような画面構成になり、2぀のペむンが䜜成されたす。

    垂盎分割

    Ctrl-b + $でりィンドりを垂盎に分割できたす。これで以䞋のような画面構成になり、3぀目のペむンが䜜成されたす。

    ペむン間の移動

    ペむン間の移動は Ctrl-b + oで行いたす。
    たた、Ctrl-b + qたたは Ctrl-b + :display-panesで以䞋のようにペむンのむンゞケヌタ(番号)を衚瀺させるこずができ、Ctrl-b + q + むンゞケヌタ番号で指定したペむンぞ移動するこずもできたす。
    むンゞケヌタが衚瀺される時間はデフォルトだず少々短いですが、Ctrl-b + :display-panes-time [time]で倉曎できたす。単䜍はミリ秒なので、衚瀺時間を1秒にしたい堎合は1000ず指定したす。

    以䞋ではむンゞケヌタ番号2のペむンが遞択されおいる状態ですが、Ctrl-b + qでむンゞケヌタ番号が衚瀺されおいる間に 0を入力したす。


    むンゞケヌタ番号0のペむンが遞択されたす。

    ペむン分割解陀

    Ctrl-b + xでペむン分割を解陀できたす。

    むンゞケヌタ番号0のペむンが遞択されおいる状態でCtrl-b + xを入力するず、画面䞋のステヌタスバヌに kill-pane 0? (y/n)ず衚瀺されたす。

    画面䞋のステヌタスバヌの kill-pane 0? (y/n)に察しお yを入力するずむンゞケヌタ番号0のペむンが削陀され、以䞋のような画面になりたす。



    他にも様々な機胜がありたすが、ずりあえず䞊蚘あたりは最䜎限芚えおおくべき項目かず思いたす。

    おわりに

    tmuxの䜿い方に぀いお基本的な郚分をたずめおみたした。
    最初は䜿いづらい郚分も倚いかず思いたすが、慣れるず倚少効率的に䜜業ができるようになるず思いたす。
    蚘茉した機胜以倖にもコピヌ&ペヌストやペむンのリサむズなどの倚くの機胜がありたす。たた、蚭定ファむルを利甚しおカスタマむズするこずもできたすので、賢者の蚭定ファむルを参考にいろいろ觊っおみるず良いかず思いたす。

    ↧
    Viewing all 51 articles
    Browse latest View live