投稿者「hidekazuna」のアーカイブ

BOSH LiteでCloud Foundryをインストールする(2)

BOSH LiteはVagrnat boxにWardenコンテナを使ったBOSHのローカル開発環境です。BOSH Liteを使って、Vagrant boxにCloud Foundry実行環境を構築できます。手元のMacBook AirにBOSH Liteを使い、Cloud Foundryを構築します。これはBOSH LiteでCloud Foundryをインストールする(1)の続きです。

BOSH Liteを使い、Cloud Foundryをデプロイします。シェルスクリプトで多くが自動化されているようですが、ここでは後学のため手順を追ってデプロイします。

準備

Spiffをインストール

$ brew tap xoebus/homebrew-cloudfoundry
$ brew install spiff
$ spiff -v
spiff version 1.0.3

cf-releaseをクローン

$ cd ~/workspace
$ git clone https://github.com/cloudfoundry/cf-release

これでデプロイする準備ができたので、デプロイします。

releaseのアップロード

releaseはBOSHがソフトウェアをデプロイするのに必要なパッケージやソースコード、設定ファイルの集まりで、ymlファイルで定義されています。一番新しいリリースをアップロードします。cf-release下にあるcf-<version>.ymlでversionが一番大きいものを確認します。今回は189でしたので、cf-189をアップロードします。

$ cd ~/workspace/cf-release
$ bosh upload release releases/cf-189.yml

Warden stemcellのアップロード

stemcellはBOSHがクローンして設定するVMのテンプレートです。BOSH LiteはWarden CPIを使うので、Warden Stemcell をダウンロードします。まず、公式にあるstemcellを確認してダウンロードします。

$ bosh public stemcells
+-----------------------------------------------------------------+
| Name                                                            |
+-----------------------------------------------------------------+
| ....                                                            |
| bosh-stemcell-370-warden-boshlite-ubuntu-trusty-go_agent.tgz    |
| bosh-stemcell-53-warden-boshlite-ubuntu.tgz                     |
| bosh-stemcell-370-warden-boshlite-centos-go_agent.tgz           |
| bosh-stemcell-64-warden-boshlite-ubuntu-lucid-go_agent.tgz      |
+-----------------------------------------------------------------+
$ bosh download public stemcell bosh-stemcell-370-warden-boshlite-ubuntu-trusty-go_agent.tgz

ダウンロードしたWarden Stemcellをアップロードします。

$ bosh upload stemcell bosh-stemcell-370-warden-boshlite-ubuntu-trusty-go_agent.tgz

manifest作成

manifestはreleaseとstemcellをどうデプロイするかを定義した設定ファイルです。spiffを使ってmanifestを作成します。

$ cd ~/workspace/bosh-lite
$ ./bin/make_manifest_spiff

manifests/cf-manifest.ymlが作成されます。作成したmanifestを使い、デプロイします。

$ bosh deployment manifests/cf-manifest.yml
$ bosh deploy

以上で、デプロイは終了です。

BOSH LiteでCloud Foundryをインストールする(1)

BOSH LiteはVagrnat boxにWardenコンテナを使ったBOSHのローカル開発環境です。BOSH Liteを使って、Vagrant boxにCloud Foundry実行環境を構築できます。手元のMacBook AirにBOSH Liteを使い、Cloud Foundryを構築します。MacBook Airの詳細なスペックは以下の通りです。

  • 11-inch, Mid 2012
  • プロセッサ 2GHz Intel Core i7
  • メモリ 8GB 1600 MHz DDR3
  • OS X 10.9.5

ここではVagrant providerはVirtualboxとします。GitHubにはVMware Fusion、AWSの手順も記載があります。

前提

以下のソフトウェアはインストール済みとします。

  • git
  • ruby
  • VirtualBox
  • Vagrant

手元のバージョンは以下の通りでした。

$ git --version
git version 1.8.5.2 (Apple Git-48)
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]

なお、rubyはrbenvでインストールしました。

$ VBoxManage --version
4.3.16r95972
$ vagrant --version
Vagrant 1.6.5

また、MacBookはプロキシなしでインターネットにアクセスできます。

BOSH Liteインストール

bosh_cliをインストール

BOSHのクライアントをインストールします。

$ gem install bosh_cli
$ rbenv rehash
$ bosh -v
BOSH 1.2739.0

bosh-liteをクローン

BOSHは~/workspaceにインストールする慣習があるようなので、~/workspaceにクローンします。

$ mkdir ~/workspace
$ cd ~/workspace
$ git clone https://github.com/cloudfoundry/bosh-lite.git

Vagrant boxをupします。

$ cd bosh-lite
$ vagrant up --provider=virtualbox

BOSH Directorをtargetして、admin/adminでログインします。ここの192.168.50.4はVMに自動で割りあたるアドレスです。

$ bosh target 192.168.50.4 lite
$ bosh login

ローカルのルートテーブルにルートエントリセットを追加します。

$ bin/add-route

以上でBOSH Liteのインストールは終了です。

自宅のOpenStackを Grizzly から Havanaへバージョンアップ

Basic Installation Guide for Ubuntu 12.04 (LTS) and Debian WheezyをIPも含め、完全コピーして自宅で使っていたOpenStack(Grizzly)を、時間がある年末にHavanaにバージョンアップした。

バージョンアップの手順がないので、とりあえずパッケージをアップグレードして、後はインストールガイドを参考に試行錯誤。ダウンタイムは3日程度?。その間に睡眠や買い出し、窓ふきなどの大掃除とか。それでもなんとかバージョンアップ前のインスタンス、ネットワークは使えた。ボリュームは対応途中で削除してしまったけど、そのままで対応すれば動いたかも。せっかくなので、パッケージアップグレードし、設定ファイルを一通り編集して起動した後におこった障害を記録しておく。(いきあたりばったりで起きたものばかりだけど)

その前に、知っていればよかったこと。

パッケージのアップグレード

sudo add-apt-repository cloud-archive:havana
sudo apt-get update
sudo apt-get upgrade

とする。このあと保留になったパッケージをインストールするには

sudo apt-get dist-upgrade

とする。

sudo apt-get -s dist-upgrade

でテストできるのでやってみると便利。

データベースマイグレーション

いろいろ調べて直す前に知っておきたかったこととして、nova,cinder,glance,neutronはデータベースのマイグレーションが勝手に動かないので、パッケージインストールしたあと自分でやる必要がある。keystoneはパッケージ入れたら動いていたので、ほかも動くかと思ったら違う。neutronはリリースノートに書いてあり、アップグレードする前に

quantum-db-manage --config-file /path/to/quantum.conf --config-file /path/to/plugin/conf.ini stamp grizzly

アップグレードした後に

neutron-db-manage --config-file /path/to/quantum.conf --config-file /path/to/plugin/conf.ini upgrade havana

と書いてある。neutronだけはデータベースマイグレーションがalembicなので特別らしい。nova,cinder,glanceは

*-manage db sync

みたいなやつを単純に実行すればいい。

それでは以降でパッケージアップグレードし、設定ファイルを一通り編集して起動した後に起こった障害?を書いていく。

コマンドが実行できない

source openrc

したあとコマンド実行すると

'Client' object has no attribute 'service_catalog'

と表示されて、コマンドがいっさい実行できなかった。これはずばり、
http://abhisarswami.blogspot.jp/2013/01/openstack-keystone-client-object-has-no.html
に書いてあり、

export SERVICE_TOKEN=
export SERVICE_ENDPOINT=

とするなどして、SERVICE_TOKENとSERVICE_ENDPOINTを設定しないようにして解決した。

compute nodeのアップグレードが失敗

compute nodeでアップグレードしたら依存関係で正常終了せず、以下のメッセージが出た。

 以下のパッケージには満たせない依存関係があります:

kvm-ipxe : 依存: ipxe-qemu しかし、インストールされようとしていません

qemu-kvm : 依存: qemu-system-x86 (>= 1.5.0+dfsg-3ubuntu5~cloud0)

E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

これは検索しても解決策が見当たらず。インストールガイドを見ると、compute nodeに明示的にqemu-kvmやkvm-ipxeなどをインストールしていなかったので、エラーになるパッケージをとことん削除する方針にした結果、以下を削除した。

qemu-system-x86 qemu-kvm kvm nova-compute-kvm nova-compute

そして、インストールガイドの通りに。

sudo apt-get install nova-compute-kvm python-guestfs

“Unknown column ‘services.disabled_reason’ in ‘field list'”

このあと、とりあえずHorizonにログインしてみたらエラーが出てた。どんなエラーか忘れてしまったけど、novaのどれかのログに以下のエラーが出ていた。

2013-12-29 22:40:53.848 2119 TRACE nova.api.openstack OperationalError: (OperationalError) (1054, "Unknown column 'services.disabled_reason' in 'field list'") 'SELECT services.created_at AS services_created_at, services.updated_at AS services_updated_at, services.deleted_at AS services_deleted_at, services.deleted AS services_deleted, services.id AS services_id, services.host AS services_host, services.`binary` AS services_binary, services.topic AS services_topic, services.report_count AS services_report_count, services.disabled AS services_disabled, services.disabled_reason AS services_disabled_reason \nFROM services \nWHERE services.deleted = %s' (0,)

検索するとhttps://bugs.launchpad.net/nova/+bug/1194792が出てきて、やはりデータベースマイグレーションが必要だった。

nova-manage db sync

を実行した。

VMにping失敗

novaを直したので、VMが気になりVMにnamespace内からpingしてみたら、まったく反応がなし。来たよneutron、と思ってログを見ると/var/log/neutron/openvswitch-agent.logに

ERROR neutron.plugins.openvswitch.agent.ovs_neutron_agent [-] No tunnel_type specified, cannot create tunnels

と出ていた。設定ファイルを見たところ、追加設定があった。
/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini

[ovs]
tunnel_type=gre
.......
[agent]
tunnel_types = gre
.......

を追加した。

“Table ‘cinder.volume_admin_metadata’ doesn’t exist”

次にボリューム一覧が出なかった。そろそろデータベースマイグレーションを疑いつつログを見ると、

2013-12-30 15:01:32.872 30632 TRACE cinder.service ProgrammingError: (ProgrammingError) (1146, "Table 'cinder.volume_admin_metadata' doesn't exist") 'SELECT volumes.created_at AS volumes_created_at, volumes.updated_at AS volumes_updated_at, volumes.deleted_at AS volumes_deleted_at, volumes.id AS volumes_id, volumes._name_id AS volumes__name_id,

とあり、やはりマイグレーションが必要のようだったので、

cinder-manage db sync

を実行した。

GlanceでExit code: 127

ここまでくるとglanceも疑う。どこかのログに

Exit code: 127
Stdout: ''
Stderr: '/bin/sh: 1: collie: not found\n' Disabling add method.
2013-12-30 14:49:50.507 29642 WARNING glance.store.base [-] Failed to configure store correctly: Store cinder could not be configured correctly. Reason: Cinder storage requires a context. Disabling add method.
2013-12-30 14:49:50.514 29642 WARNING glance.api.v2.images [-] Could not find schema properties file schema-image.json. Continuing without custom properties

とあったので、いちおう

glance-manage db_sync

を実行した。

ルータ一覧がエラー

ネットワークの管理はネットワークトポロジーとネットワークは開けたが、ルーターがエラーになってしまった。ログを見ると

TRACE neutron.openstack.common.rpc.amqp OperationalError: (OperationalError) (1054, "Unknown column 'routers.enable_snat' in 'field list'")

とあった。すでにneutronにしていたので、適当に以下を(たぶん)実行した。

$ neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini stamp grizzly

$ neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini upgrade havana

しかし、portbindingsテーブルはすでに存在する、というようなメッセージが出てマイグレーションが失敗してしまう。実際portbindingsテーブルは存在していて、データはない。やむを得ずテーブルを削除して再度upgradeするとまた別のテーブルがあるというエラーに。。やけになって失敗するたびに存在するテーブルを削除して再実行、何度かやって最終的には成功。(http://alembic.readthedocs.org/en/latest/tutorial.htmlみて、downgrade grizzlyのあとupgradeしても失敗)
最後に

INFO  [alembic.migration] Running upgrade 27ef74513d33 -> havana, havana

と出たのでたぶん成功。

ボリュームのアタッチができない

Horizonですべて表示できていそうだったので、うれしくて使い始めると、今度はボリュームのアタッチができない。Horizonで実行しても元通りになってしまい、コマンドで実行するとなにごともなく返ってくる割にavailableのまま。ログには

2013-12-30 23:11:04.581 31892 TRACE nova.openstack.common.rpc.amqp Command: sudo nova-rootwrap /etc/nova/rootwrap.conf iscsiadm -m node -T iqn.2010-10.org.openstack:volume-8978b858-22d9-4347-9690-0c2a6347d595 -p 10.0.0.10:3260 --rescan
2013-12-30 23:11:04.581 31892 TRACE nova.openstack.common.rpc.amqp Exit code: 255
2013-12-30 23:11:04.581 31892 TRACE nova.openstack.common.rpc.amqp Stdout: ''
2013-12-30 23:11:04.581 31892 TRACE nova.openstack.common.rpc.amqp Stderr: 'iscsiadm: No portal found.\n'

とあった。ここは何も変更してないはずなので、iSCSI周りをいろいろ調べた。10.0.0.10がよくないのかと思い、cinder.conf、nova.confに

iscsi_ip_address=10.10.10.10

を追加しても、状況は変わらず。かなり絶望しつつ検索すると、ずばりhttp://ubuntuforums.org/showthread.php?t=2045883にiscsitargetを削除しろとあった。ねんのため、

apt-get remove --purge iscsitarget

を実行後、リブートした。

以上、起こった障害を書いてみた。実際やってみた感想としては、思ったより難しくなく、かといって簡単でもない、といったところか。

Vagrantでよく使うコマンド

Vagrant 1.2.7 で調べてみた。

VMの起動(最初の起動またはhaltしたvmの起動) vagrant up [vm-name]
VMのシャットダウン(shutoff) vagrant halt [vm-name]
VMを削除 vagrant destroy [vm-name]
VMのリスト vagrant status [machine-name]
VMのパッケージ化 vagrant vagrant package [vm-name] [–base name] [–output name.box]
boxのリスト vagrant box list
box追加 vagrant box add [–provider provider]
boxの削除 vagrant box remove

Vagrantを導入する

Virtualboxはインストール済みとする。
インストールはhttp://www.vagrantup.com/のDOWNLOADSをクリックして最新のバージョンをインストールする。記述時点はv1.2.7。

作業用ディレクトリを作る。

$ mkdir getting_started
$ cd getting_started

初期設定を行う。

$ vagrant init

Vagrantfileができる。

起動する仮想マシンをダウンロードする。ここではUbuntu precise64。

$ vagrant box add precise64 http://files.vagrantup.com/precise64.box

起動するため設定ファイルを修正する。
VirtualboxのホストオンリーアダプターでIPアドレス192.168.50.12にする。

$ vi Vagrantfile
config.vm.box = "precise64_20130831"
config.vm.network :private_network, ip: "192.168.50.12"

起動する。

$ vagrant up

起動を確認する。

$ vagrant status
Current machine states:

default                   running (virtualbox)

仮想マシンにログインする。

$ vagrant ssh

アップデートする。

$ sudo apt-get update
$ sudo apt-get upgrade

アップデートでカーネルモジュールに更新があった場合、VirtualBoxの共有フォルダのマウントが失敗するためGuest Additionsをいれなおす。makeがないと失敗するためmakeも入れる。

$ sudo apt-get install make
$ sudo /etc/init.d/vboxadd setup

起動することを確認する。

$ exit
$ vagrant halt
$ vagrant up

更新した仮想マシンをbox化する。

$ vagrant package
$ vagrant box add precise64_yyyymmdd package.box
$ vagrant box list
$ rm package.box
$ vagrant destroy precise64
Are you sure you want to destroy the 'default' VM? [y/N] y
[default] Forcing shutdown of VM...
[default] Destroying VM and associated drives...

Pluginをインストールする。

$ vagrant plugin install sahara
Installing the 'sahara' plugin. This can take a few minutes...
Installed the plugin 'sahara (0.0.15)'!

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise64_20130831'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant

sandboxを有効にする

$ vagrant sandbox on
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

最後にcommitかonしたときに戻る

$ vagrant sandbox rollback

状態変更を記録。haltしてからのほうがはやい。

$ vagrant sandbox commit

sandboxを解除。最後にcommitかonに戻る。

$ vagrant sandbox off

cinder-backupを使ってみる

OpenStack GrizzlyではブロックストレージをSwiftにバックアップする機能が追加されました。使ってみたくてマニュアルをあさっても、OpenStack Block Storage Service Administration Guideにあるcinder-backupがたぶんそうだろう、というくらいしかわからなかったので、DevStackで使ってみました。DevStackなので、ストレージドライバはLVMです。

前提として当たり前ですが、Swiftに保存するためSwiftを有効にして、DevStackを起動します。http://devstack.org/localrc.htmlを参考に、Swiftを有効にしてください。
ブロックストレージをSwiftにバックアップする機能はcinder-backupサービスが提供しますので、別ウィンドウでcinder-backupを起動します。

$ /usr/local/bin/cinder-backup
2013-05-11 21:31:59     INFO [cinder.service] Starting 1 workers
2013-05-11 21:31:59     INFO [cinder.service] Started child 20987
2013-05-11 21:31:59    AUDIT [cinder.service] Starting cinder-backup node (version 2013.1.2)
2013-05-11 21:31:59    DEBUG [cinder.utils] Running cmd (subprocess): sudo cinder-rootwrap /etc/cinder/rootwrap.conf vgs --noheadings -o name
2013-05-11 21:31:59     INFO [cinder.backup.manager] Cleaning up incomplete backup operations
2013-05-11 21:31:59    DEBUG [cinder.utils] backend <module 'cinder.db.sqlalchemy.api' from '/opt/stack/cinder/cinder/db/sqlalchemy/api.pyc'>
2013-05-11 21:31:59     INFO [cinder.openstack.common.rpc.common] Connected to AMQP server on localhost:5672
2013-05-11 21:31:59    DEBUG [cinder.service] Creating Consumer connection for Service cinder-backup

それではcinder-backupを使ってみます。

rcファイルを読み込みます。

$ source accrc/demo/demo

1GBのボリュームを作ります。

$ cinder create --display-name test 1
+---------------------+--------------------------------------+
|       Property      |                Value                 |
+---------------------+--------------------------------------+
|     attachments     |                  []                  |
|  availability_zone  |                 nova                 |
|       bootable      |                false                 |
|      created_at     |      2013-05-11T12:33:39.811753      |
| display_description |                 None                 |
|     display_name    |                 test                 |
|          id         | 4bab444e-8b6e-4085-8a38-21057aa99de5 |
|       metadata      |                  {}                  |
|         size        |                  1                   |
|     snapshot_id     |                 None                 |
|     source_volid    |                 None                 |
|        status       |               creating               |
|     volume_type     |                 None                 |
+---------------------+--------------------------------------+

正常に作成されたことを確認します。

$ cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
|                  ID                  |   Status  | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| 4bab444e-8b6e-4085-8a38-21057aa99de5 | available |     test     |  1   |     None    |  false   |             |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

作成したボリュームをバックアップします。

$ cinder backup-create --display-name backup_test 4bab444e-8b6e-4085-8a38-21057aa99de5
$

バックアップを実行しても何も表示されませんが、cinder-backupサービスを起動したウィンドウに大量のログが表示されます。create_backup finished.とあれば成功のようです。

2013-05-11 21:36:48     INFO [cinder.backup.manager] create_backup finished. backup: 1df94d11-7e92-4e2f-b4f6-d0b1f87b0670

バックアップが作成できたことを確認します。

$ cinder backup-list
+--------------------------------------+--------------------------------------+-----------+-------------+------+--------------+---------------+
|                  ID                  |              Volume ID               |   Status  |     Name    | Size | Object Count |   Container   |
+--------------------------------------+--------------------------------------+-----------+-------------+------+--------------+---------------+
| 1df94d11-7e92-4e2f-b4f6-d0b1f87b0670 | 4bab444e-8b6e-4085-8a38-21057aa99de5 | available | backup_test |  1   |      22      | volumebackups |
+--------------------------------------+--------------------------------------+-----------+-------------+------+--------------+---------------+
$ cinder backup-show 1df94d11-7e92-4e2f-b4f6-d0b1f87b0670
+-------------------+--------------------------------------+
|      Property     |                Value                 |
+-------------------+--------------------------------------+
| availability_zone |                 nova                 |
|     container     |            volumebackups             |
|     created_at    |      2013-05-11T12:36:15.000000      |
|    description    |                 None                 |
|    fail_reason    |                 None                 |
|         id        | 1df94d11-7e92-4e2f-b4f6-d0b1f87b0670 |
|        name       |             backup_test              |
|    object_count   |                  22                  |
|        size       |                  1                   |
|       status      |              available               |
|     volume_id     | 4bab444e-8b6e-4085-8a38-21057aa99de5 |
+-------------------+--------------------------------------+

Swiftに保存されたことを確認します。

$ swift list
volumebackups
$ swift list volumebackups
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00001
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00002
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00003
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00004
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00005
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00006
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00007
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00008
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00009
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00010
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00011
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00012
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00013
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00014
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00015
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00016
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00017
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00018
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00019
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00020
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670-00021
volume_4bab444e-8b6e-4085-8a38-21057aa99de5/20130511123621/az_nova_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670_metadata

確かに保存されたようです。

リストアします。ヘルプをみてみます。

$ cinder help backup-restore
usage: cinder backup-restore [--volume-id <volume-id>] <backup>

Restore a backup.

Positional arguments:
  <backup>              ID of the backup to restore.

Optional arguments:
  --volume-id <volume-id>
                        Optional ID of the volume to restore to.

ヘルプをみると、リストアするのと、新しくボリュームを作るのと、2つあるようです。
まずは–volume-id なしでやります。

$ cinder backup-restore 1df94d11-7e92-4e2f-b4f6-d0b1f87b0670
$ 

リストアを実行しても何も表示されませんが、cinder-backupサービスを起動したウィンドウにrestore_backup finishedとあれば成功のようです。

2013-05-11 21:54:16     INFO [cinder.backup.manager] restore_backup finished, backup: 1df94d11-7e92-4e2f-b4f6-d0b1f87b0670 restored to volume: 1c9df004-4eda-4023-b92f-59017532a9a7

ボリュームが増えたことを確認します。

$ cinder list
+--------------------------------------+-----------+-----------------------------------------------------+------+-------------+----------+-------------+
|                  ID                  |   Status  |                     Display Name                    | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+-----------------------------------------------------+------+-------------+----------+-------------+
| 1c9df004-4eda-4023-b92f-59017532a9a7 | available | restore_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670 |  1   |     None    |  false   |             |
| 4bab444e-8b6e-4085-8a38-21057aa99de5 | available |                         test                        |  1   |     None    |  false   |             |
+--------------------------------------+-----------+-----------------------------------------------------+------+-------------+----------+-------------+

もうひとつボリュームが増えたようです。バックアップはあいかわらず存在しています。

$ cinder backup-list
+--------------------------------------+--------------------------------------+-----------+-------------+------+--------------+---------------+
|                  ID                  |              Volume ID               |   Status  |     Name    | Size | Object Count |   Container   |
+--------------------------------------+--------------------------------------+-----------+-------------+------+--------------+---------------+
| 1df94d11-7e92-4e2f-b4f6-d0b1f87b0670 | 4bab444e-8b6e-4085-8a38-21057aa99de5 | available | backup_test |  1   |      22      | volumebackups |
+--------------------------------------+--------------------------------------+-----------+-------------+------+--------------+---------------+

今度は最初に作ったボリュームにリストアしてみます。

$ cinder backup-restore --volume-id 4bab444e-8b6e-4085-8a38-21057aa99de5 1df94d11-7e92-4e2f-b4f6-d0b1f87b0670

やはりリストアを実行しても何も表示されませんが、cinder-backupサービスを起動したウィンドウにrestore_backup finished〜restored to volumeとあれば成功のようです。

2013-05-11 22:02:13     INFO [cinder.backup.manager] restore_backup finished, backup: 1df94d11-7e92-4e2f-b4f6-d0b1f87b0670 restored to volume: 4bab444e-8b6e-4085-8a38-21057aa99de5

ボリュームが正常であることを確認します。

$ cinder list
+--------------------------------------+-----------+-----------------------------------------------------+------+-------------+----------+-------------+
|                  ID                  |   Status  |                     Display Name                    | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+-----------------------------------------------------+------+-------------+----------+-------------+
| 1c9df004-4eda-4023-b92f-59017532a9a7 | available | restore_backup_1df94d11-7e92-4e2f-b4f6-d0b1f87b0670 |  1   |     None    |  false   |             |
| 4bab444e-8b6e-4085-8a38-21057aa99de5 | available |                         test                        |  1   |     None    |  false   |             |
+--------------------------------------+-----------+-----------------------------------------------------+------+-------------+----------+-------------+

ん〜リストアされたかわからないですね。。

RabbitMQにrabbitmq_tracing をインストールする

RabbitMQはプラグインをインストールして、WebUIの管理ツールを使うことができます。Ubuntu 12.04 LTSにインストールしたRabbitMQに、rabbitmq_tracingをインストールする方法を説明します。
まず、Ubuntu 12.04 LTSにRabbitMQをインストールします。なお、RabbitMQの最新バージョンは3.0.2ですが、Ubuntuのパッケージでは、2.7.1になります。

$ sudo apt-get rabbitmq-server

次に、RabbitMQ Managementをインストールします。

$ cd /usr/lib/rabbitmq/lib/rabbitmq_server-2.7.1/sbin
$ sudo ./rabbitmq-plugins enable rabbitmq_management

RabbitMQを再起動後、http://localhost:55672 にアクセスします。ベーシック認証が求められます。ユーザ名はguest、パスワードはpasswordでログインします。

RabbitMQ Managementがインストールできたことを確認したら、次にrabbitmq_tracingをインストールします。

$ cd /usr/lib/rabbitmq/lib/rabbitmq_server-2.7.1/sbin
$ sudo ./rabbitmq-plugins enable rabbitmq_tracing

RabbitMQを再起動後、http://localhost:55672 にアクセスし、RabbitMQ Managementの画面を開きます。Virtual Hosts の右側に、Tracingが追加されていることを確認します。

RabbitMQ Management Tracing

Tracingが追加されていなかった場合は、一度サーバを再起動して、以下を実行してrabbitmq_tracingが有効になっていることを確認します。Eが明示的に有効したプラグイン、eが依存するため有効になったプラグインであることを表しています。

$ cd /usr/lib/rabbitmq/lib/rabbitmq_server-2.7.1/sbin
$ sudo ./rabbitmq-plugins list
[e] amqp_client                       0.0.0
[ ] eldap                             0.0.0-git
[ ] erlando                           0.0.0
[e] mochiweb                          1.3-rmq0.0.0-git
[ ] rabbitmq_auth_backend_ldap        0.0.0
[ ] rabbitmq_auth_mechanism_ssl       0.0.0
[ ] rabbitmq_consistent_hash_exchange 0.0.0
[ ] rabbitmq_federation               0.0.0
[ ] rabbitmq_jsonrpc                  0.0.0
[ ] rabbitmq_jsonrpc_channel          0.0.0
[ ] rabbitmq_jsonrpc_channel_examples 0.0.0
[E] rabbitmq_management               0.0.0
[e] rabbitmq_management_agent         0.0.0
[ ] rabbitmq_management_visualiser    0.0.0
[e] rabbitmq_mochiweb                 0.0.0
[ ] rabbitmq_shovel                   0.0.0
[ ] rabbitmq_shovel_management        0.0.0
[ ] rabbitmq_stomp                    0.0.0
[E] rabbitmq_tracing                  0.0.0
[ ] rfc4627_jsonrpc                   0.0.0-git
[e] webmachine                        1.7.0-rmq0.0.0-hg

また、RabbitMQ Managementのユーザにguestがいる必要があります。存在することを確認してください。

vimでPythonを書く環境を整える

Ubuntu 12.04でPythonをviで書く環境を作ります。Pythonを書く環境は作成済みとします。

  • コードのハイライト
  • PEP8に対するコードチェック
  • pyflakesによるソースチェック

ができるようになります。viのプラグインはvundleで行います。

まず、gitとvimをインストールします。

$ sudo apt-get install git
$ sudo apt-get install vim

vundleをインストールします。

$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

.vimrcを編集します。

set nocompatible               " be iMproved
filetype off                   " required!

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" let Vundle manage Vundle
" required!
Bundle 'gmarik/vundle'

" My Bundles here:
Bundle 'The-NERD-tree'
Bundle 'python.vim'

filetype plugin indent on     " required!

viを開き、:BundleInstallを実行します。

~/.vim/ftplugin/python.vimを開き、下記を記述します。

setlocal softtabstop=4
setlocal shiftwidth=4
setlocal textwidth=80
setlocal smarttab
setlocal expandtab
setlocal nosmartindent

flake8のPythonパッケージをインストールします。

pip install flake8

.vimrcにvim-flake8を追加します。

" My Bundles here:
Bundle 'The-NERD-tree'
Bundle 'python.vim'
Bundle 'vim-flake8'

viを開き、:BundleInstallを実行します。

以上でPythonを書く環境が整いました。Pythonのコードを開いて、F7を押すとチェックが走ります。Enterを押すと、該当行へ移動します。コードを修正したら、再度F7を押します。

vimでPythonコードを表示

Pythonを書く環境を作る

Ubuntu 12.04でPythonを書く環境を作ります。Pythonと関連パッケージをインストールしたあと、Pythonパッケージを管理するpipと、仮想環境を作成するvirtualenvをインストールします。

パッケージをインストールします。

$ sudo apt-get  update
$ sudo apt-get upgrade
$ sudo apt-get install build-essential
$ sudo apt-get install libsqlite3-dev
$ sudo apt-get install libreadline6-dev
$ sudo apt-get install libgdbm-dev
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install libbz2-dev
$ sudo apt-get install sqlite3
$ sudo apt-get install tk-dev
$ sudo apt-get install zip

Python関係のパッケージをインストールします。

$ sudo apt-get install python-dev

pipをインストールするため、前提となるdistributeをインストールします。

$ wget http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py

pipをインストールします。

$ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ sudo python get-pip.py
$ pip --version

virtualenvとvirtualenvwrapperをインストールします。

$ sudo pip install virtualenv
$ virtualenv --help
$ pip freeze
$ pip install virtualenvwrapper

virtualenvを作るディレクトリを設定します。.bashrcに下記を記述し、有効化すると、virtualenvで作られる環境が$HOME/.virtualenvsに作られるようになります。

if [ -f /usr/local/bin/virtualenvwrapper.sh ];then
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
fi

.bashrcを有効化します。

$ source ~/.bashrc

仮想環境を作って、抜けてみます。

$ mkvirtualenv newenv
$ ls -la $HOME/.virtualenvs
$ workon newenv
$ workon
$ deactivate

pipは仮想環境ごとなので、注意します。

WordPressをNginxで動かす

Nginxって?

NginxがApacheに次いでアクティブサイトシェア2位になったそうです。あのIISを抜いて本当ですか?私はまだインストールしたこともなく、リバースプロキシに特化したWebサーバで、ロシア人が作っている、くらいしか知りませんでした。久しぶりに検索すると、公式サイトのトップは相変わらず殺風景でしたが、Wikiはかなり充実していました。なぜこっちがトップではないのか。。

なぜそんなにきてるの?というのはWikiに書いてあって、非同期のイベント駆動アーキテクチャの、C10K問題に対応したWebサーバだそう。そう、クラウド時代のWebサーバ。実際、PHPはPHP-FPM、RubyはUnicornと組み合わせて使うのが常識のようです。

WordPressでも動いているそうなので、Ubuntu 10.04(LTS)でWordPressを動かす手順をなぞってみました。

NginxとPHP-FPMのインストール

UbuntuのNginxを入れると、とっくに1.0が出ているのに0.8.xが入ってしまいます。また、php-fpmも含まれていません。さいわいPPAがあるので、PPAを追加してインストールします。

$ sudo apt-get install python-software-properties
$ sudo apt-get add-apt-repository ppa:nginx/stable
$ sudo apt-get add-apt-repository ppa:nginx/php5
$ sudo apt-get update
$ sudo apt-get install nginx php5-fpm php5-mysql

インストールされたことを確認します。

$ sudo service nginx status
$ sudo service php5-fpm status

php5-fpmでstatusはないので、Usage:が出てくるはずです。とりあえずインストールされたことはわかります。また、ブラウザでhttp://127.0.0.1/を開くとWelcome to nginx!と書いてあるページが出てきます。

Nginxの設定

Nginxの設定ファイルは/etc/nginxの下にあります。PPAで入れただけあって、Apacheと似せてあります。よかったですね。というわけで、sites-available/defaultを編集します。ここでは、/var/www/ディレクトリにWordPressを解凍したと仮定します。

server {

  root /var/www/;
  server_name localhost;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
  }
}

ファイルを保存したら、NginxとPHP-FPMをリロードします。

$ sudo service nginx reload
$ sudo service php5-fpm reload

これで設定はおわりです。Apacheのときと同様に、ブラウザでhttp://127.0.0.1/を開いて、WordPressのインストールを進めてください。

なお、上記の方法でPHPをインストールすると、
お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。
とブラウザに出てくるかもしれません。(というか、出た)そのときは、php5-mysqlをインストールしてください。