Ubuntu」タグアーカイブ

自宅の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

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

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

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をインストールしてください。

MacBook Air 11インチを買ってしまった

本を2冊買っても十分鞄に入る薄さにひかれて買ってしまった。

Ubuntuのフォントに慣れているので、Ubuntuのフォントであるtakaoフォントをいれた。コンソールを使うときに文字が太い方が見やすい。

母親はiPadが増えたと勘違いして聞いてきた。確かにそれくらいうすい。ちなみにiPadは黒いリンゴで、MacBookは白いリンゴ。なぜ?

Ubuntu10.04を入れてみてわかったこと

こまったこと

VMware で簡易インストールするとキーボードが使えない。ログイン時にパスワード設定していたときはパスワードが入力できないのでログインできない。

Rubygemsをdpkgでインストールすると、gem installでrubyforgeを見に行ってしまう。今はrubygems.orgなので、エラーとなり、gemがインストールできない。

よかったこと

VMware Player 3で仮想マシンが作成できる。もうMacでVMware Fusion使ってイメージ作ってからコピーしなくてもすむ。

WubiでUbuntuをインストールした

会社の後輩にUbuntu Magazine Japan vol.02 (アスキームック)をあげてUbuntu普及につとめた。

にも関わらず、自分が持ち歩いているPCにはWindows 7が入っている。ちょっとした開発をテストしてみるのが目的なので、普段使い慣れたWindowsが捨てがたいのだ。しかしいざとなったとき見せる手段がないのは心細いので、Wubiを使ってインストールした。

起動しなくなったらやだな、と思っていたけどあっさり終了。起動時に選択できるし、普通に使えた。Windows上のコンパネにも見えていて、すぐ削除できるのがすごい。