docker で Ubuntu quantel をインストールして saucy にアップグレードした ― 2013年10月19日
docker を試してみようと、練習がてら Ubuntu をインストールし、リリースされたばかりの saucy にアップグレードしてみました。以下はその記録です。まだ lxc や docker のことをよくわかってないのでピンぼけかもしれません。
docker のインストール
環境は私がデスクトップとして使ってる Ubuntu 13.04 raring です。64bit 環境です。インストール手順はここに書いてあるとおり。
Ubuntu Raring 13.04 (64 bit) - Requirements and Installation on Ubuntu Linux - Docker Documentation
インストールのあと、自分を docker グループに所属させます。そして再ログイン。
Ubuntu のイメージをゲット
$ docker pull ubuntu
これを書いてる時点で 12.04 (precise) と 12.10 (quantel) のイメージがダウンロードされます。
docker で Ubuntu 環境を実行
$ docker run -t -i ubuntu:quantal /bin/bash root@69c5ea1c1e80:/#
ダウンロードした ubuntu イメージのうち、タグ quantel (12.10) が付いた環境で /bin/bash が起動されます。69c5ea1c1e80 は起動されたコンテナのIDです。
13.04 へのアップグレードの準備
do-release-upgrade でアップグレードするために、ダウンロードした quantel のママではうまくいかないので、quantel-updates でパッケージを更新し、また、initclt などに細工を行います。
root@69c5ea1c1e80:/# echo "deb http://archive.ubuntu.com/ubuntu quantal-updates main" >> /etc/apt/sources.list root@69c5ea1c1e80:/# apt-mark hold initscripts udev plymouth mountall root@69c5ea1c1e80:/# dpkg-divert --local --rename --add /sbin/initctl root@69c5ea1c1e80:/# ln -s /bin/true /sbin/initctl root@69c5ea1c1e80:/# cat > /usr/sbin/policy-rc.d << EOF > #!/bin/sh > > exit 101 > EOF root@69c5ea1c1e80:/# chmod +x /usr/sbin/policy-rc.d root@69c5ea1c1e80:/# apt-get update : root@69c5ea1c1e80:/# apt-get upgrade : root@69c5ea1c1e80:/# ls -l /sbin/initctl* lrwxrwxrwx 1 root root 9 Oct 18 14:27 /sbin/initctl -> /bin/true -rwxr-xr-x 1 root root 155560 Oct 12 2012 /sbin/initctl.distrib root@69c5ea1c1e80:/# apt-get install update-manager-core python-apt : root@69c5ea1c1e80:/#
raring (13.04) へのアップグレード
root@69c5ea1c1e80:/# do-release-upgrade
質問に答えるなどして進みます。時間かかります。アップグレードしたら、exit コマンド (CTRL + D でも OK) で、コンテナ環境から抜け、コンテナ環境を停止します。
root@69c5ea1c1e80:/# exit
確認
いましがた止めたコンテナを確認しましょう。
$ docker ps -a ID IMAGE COMMAND CREATED STATUS PORTS 69c5ea1c1e80 ubuntu:12.10 /bin/bash 40 minutes ago Exit 0
raring のタグを打つ
さて、この状態 (69c5ea1c1e80) を「commit」して、コンテナ名 myrepo/ubuntu で、raring のタグを打ちます。
$ docker commit 69c5ea1c1e80 myrepo/ubuntu raring
5bbc0971b9c5
ここで表示された 5bbc0971b9c5 は、commit により作られたコンテナの イメージの ID になります。ここで取得、および、作成したイメージの一覧を表示してみます。
$ docker images
REPOSITORY TAG ID CREATED SIZE
myrepo/ubuntu raring 5bbc0971b9c5 3 seconds ago 820.2 MB (virtual 1 GB)
ubuntu 12.04 8dbd9e392a96 6 months ago 131.5 MB (virtual 131.5 MB)
ubuntu latest 8dbd9e392a96 6 months ago 131.5 MB (virtual 131.5 MB)
ubuntu precise 8dbd9e392a96 6 months ago 131.5 MB (virtual 131.5 MB)
ubuntu 12.10 b750fe79269d 6 months ago 24.65 kB (virtual 180.1 MB)
ubuntu quantal b750fe79269d 6 months ago 24.65 kB (virtual 180.1 MB)
raring (13.04) の環境に入る
今作ったコンテナ myrepo/ubuntu のタグ raring の環境で /bin/bash を起動します。
$ docker run -t -i myrepo/ubuntu:raring /bin/bash WARNING: Docker detected local DNS server on resolv.conf. Using default external servers: [8.8.8.8 8.8.4.4] root@19837860884f:/# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 13.04 Release: 13.04 Codename: raring
saucy (13.10) にアップグレード
root@19837860884f:/# do-release-upgrade
質問に答えるなどして進みます。しばらくかかります。アップグレードが完了したら exit コマンドで環境から抜けます。そして、今回実行した環境をコミットし、新しいイメージを作ります。
root@19837860884f:/# exit $ docker commit 19837860884f myrepo/ubuntu saucy 21a2d79c3c16
結果
$ docker images REPOSITORY TAG ID CREATED SIZE myrepo/ubuntu saucy 21a2d79c3c16 30 seconds ago 742.4 MB (virtual 1.743 GB) myrepo/ubuntu raring 5bbc0971b9c5 1 hour ago 820.2 MB (virtual 1 GB) ubuntu 12.04 8dbd9e392a96 6 months ago 131.5 MB (virtual 131.5 MB) ubuntu latest 8dbd9e392a96 6 months ago 131.5 MB (virtual 131.5 MB) ubuntu precise 8dbd9e392a96 6 months ago 131.5 MB (virtual 131.5 MB) ubuntu 12.10 b750fe79269d 6 months ago 24.65 kB (virtual 180.1 MB) ubuntu quantal b750fe79269d 6 months ago 24.65 kB (virtual 180.1 MB) $ docker images -viz | dot -Tpng -o graph.png
参考
Dovecot と Apache Solr で受信したメールを全文検索 ― 2013年01月04日
はじめに
みんな大好き Gmail は検索機能が強力であり、これが理由で Gmail を使っている人も少なくないと思います。しかし、家訓などで Gmail を禁止されている人もいることでしょう。たとえば、自前サーバーに Dovecot をインストールして使っているとか。しかし、Dovecot 標準のままだと検索がちょっと悲しいので、ちょっとだけ強くしてみます。
Dovecot はプラグイン機能で機能強化できますが、そのうちの一つ、fts (Full Text Search indexing) というプラグインを使うと、全文検索が強まります。fts はインデクサとしていくつかのプログラムを選択できますが、ここでは fts_solr 経由で、Apache Solr を使ってみることにします。なお、環境は Ubuntu Precise (12.04.1 LTS) です。
Solr をインストール
まず、Solr をインストールします。Solr は Ubuntu では Tomcat 版と Jetty 版が用意されていますが、ここでは Jetty 版をインストールします。
% sudo apt-get --install-suggests=no --no-install-recommends install openjdk-7-jre-headless openjdk-7-jdk solr-jetty
/etc/default/jetty に手を入れて、Jetty を設定します。
--- a/default/jetty +++ b/default/jetty @@ -1,7 +1,7 @@ # Defaults for jetty see /etc/init.d/jetty for more # change to 0 to allow Jetty to start -NO_START=1 +NO_START=0 # change to 'no' or uncomment to use the default setting in /etc/default/rcS VERBOSE=yes @@ -13,10 +13,10 @@ VERBOSE=yes # Listen to connections from this network host # Use 0.0.0.0 as host to accept all connections. # Uncomment to restrict access to localhost -#JETTY_HOST=$(uname -n) +JETTY_HOST=localhost # The network port used by Jetty -#JETTY_PORT=8080 +JETTY_PORT=8080 # Timeout in seconds for the shutdown of all webapps #JETTY_SHUTDOWN=30 @@ -28,7 +28,7 @@ VERBOSE=yes #JAVA_OPTIONS="-Xmx256m -Djava.awt.headless=true" # Home of Java installation. -#JAVA_HOME= +JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 # The first existing directory is used for JAVA_HOME (if JAVA_HOME is not # defined in /etc/default/jetty). Should contain a list of space separated dire ctories.
これによって、以下のような設定で Jetty が起動するようになります。
- サーバーマシン起動時に Jetty を起動
localhostの8080番ポートを listen する。Dovecot は HTTP を使って、Solr のサーバーと通信しますが、このようにすることで、http://localhost:8080/solr/ のみで Solr にアクセスできるようになります (※1)/usr/lib/jvm/java-7-openjdk-amd64の Java を使う
fts_solr プラグインのインストール
次に、Dovecot の fts_solr プラグインをインストールし、設定します。
% sudo apt-get install dovecot-solr
Dovecot の基本的な設定はなされているものとして、fts_solr 関係では以下のような変更を施します。まず、IMAP のプラグインとして、fts および fts_solr プラグインを有効化します。設定ファイルは /etc/dovecot/conf.d/20-imap.conf です。protocol imap { ... } 内の mail_plugins の設定を変更します。
--- a/dovecot/conf.d/20-imap.conf
+++ b/dovecot/conf.d/20-imap.conf
@@ -13,7 +13,7 @@ protocol imap {
#mail_max_userip_connections = 10
# Space separated list of plugins to load (default is global mail_plugins).
- #mail_plugins = $mail_plugins
+ mail_plugins = $mail_plugins fts fts_solr
# IMAP logout format string:
# %i - total number of bytes read from client
fts_solr プラグインの設定
次に、プラグインの設定を行います。設定ファイルは /etc/dovecot/conf.d/90-plugin.conf で、plugin { ... } 内に2行ほど追加します。
fts = solr により、fts のバックエンドとして solr を使うことを指定します。
fts_solr = の break-imap-search は IMAP4 の検索コマンドの BODY や TEXT などの検索条件で高速検索ができるようにしてしまう指定です。最近の 2.1 系の Dovecot では不要になってます。
fts_solr = の url=... では、Solr のサーバーにアクセスするための URLを指定します。ここでは※1で設定した http://localhost:8080/ 内の http://localhost:8080/solr/ を指定します。負荷分散のため、Dovecot のインストールされているマシンと、Solr をインストールしたマシン(クラスタ)を分離した場合はここでの指定を変えれば良いのだと思います。
--- a/dovecot/conf.d/90-plugin.conf
+++ b/dovecot/conf.d/90-plugin.conf
@@ -8,4 +8,6 @@
plugin {
#setting_name = value
+ fts = solr
+ fts_solr = break-imap-search url=http://localhost:8080/solr/
}
Solr のスキーマの設定
次に、Solr のスキーマとして、Dovecot 用のスキーマを設定します。/etc/solr/conf/schama.xml を、Dovecot のソースコードに付属している solr-schema.xml で置きかえます。solr-schema.xml は、いずれかの方法で入手できます。
apt-get source dovecotでソースコードを取得すると、doc/solr-scheama.xmlにあります- 開発元のリポジトリ、http://hg.dovecot.org/dovecot-2.0/file/tip/doc/solr-schema.xml にもあります
Solr のスキーマを日本語向けに変更
この schema.xml では日本語がうまく扱えないので、いくつかのフィールドを日本語向きの処理に変更します。(Solr チュートリアル 〜初めの一歩〜: 日本語の扱い CJKTokenizer を使ったバイグラム方式 を参考にしました)
--- a/solr/conf/schema.xml
+++ b/solr/conf/schema.xml
@@ -15,6 +15,13 @@ want to modify the tokenizers and filters.
<fieldType name="float" class="solr.FloatField" omitNorms="true"/>
<fieldType name="boolean" class="solr.BoolField" omitNorms="true"/>
+ <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
+ <analyzer>
+ <tokenizer class="solr.CJKTokenizerFactory"/>
+ <filter class="solr.LowerCaseFilterFactory"/>
+ </analyzer>
+ </fieldType>
+
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
@@ -45,8 +52,8 @@ want to modify the tokenizers and filters.
<field name="user" type="string" indexed="true" stored="true" required="true" />
<field name="ns" type="string" indexed="true" stored="true" required="false" />
<field name="last_uid" type="boolean" indexed="true" stored="false" />
- <field name="hdr" type="text" indexed="true" stored="false" />
- <field name="body" type="text" indexed="true" stored="false" />
+ <field name="hdr" type="text_cjk" indexed="true" stored="false" />
+ <field name="body" type="text_cjk" indexed="true" stored="false" />
</fields>
<uniqueKey>id</uniqueKey>
Solr を起動
まず、Solr を起動します。
% sudo service jetty start
Jetty が起動するので、ブラウザでアクセスしてみましょう。Jetty がインストールされたのがローカルマシンなら http://localhost:8080/solr/ にアクセスするだけですが、リモートにあるサーバなら ssh の port forwarding で ssh -L 8080:localhost:8080 yourname@your.server.examele.com のようにした上でアクセスしてみましょう。
Solr というか Jetty のログは標準だと、/var/log/jetty/YYYY_MM_DD.request.log や /var/log/jetty/YYYY_MM_DD.stderrout.log で見ることができますので、tail -f で流すなどしておいてください。
Dovecot を再起動
次に、Dovecot を再起動。
% sudo service dovecot restart
検索できるかのテスト
Dovecot にアクセスして、IMAP4rev1 で検索が実行できるか試してみましょう。IMAP4rev1 の STARTTLS によるセキュアな接続を受け付けるようにているのであれば、openssl の s_client コマンドが使えます。
(以下、長い行は ⏎ で折り返してます)
$ openssl s_client -connect your.server.example.com:143 -starttls imap CONNECTED(00000003) (中略) --- . OK Pre-login capabilities listed, post-login capabilities have more. 1 LOGIN yourname pAssWoRd * CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES⏎ THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE⏎ UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC⏎ ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS 1 OK Logged in 2 SELECT Inbox * FLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk $Forwarded Junk $MDNSent) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk $Forwarded Junk $MDNSent \*)] Flags permitted. * 1282 EXISTS * 0 RECENT * OK [UIDVALIDITY 1234567890] UIDs valid * OK [UIDNEXT 9876] Predicted next UID * OK [HIGHESTMODSEQ 8888] Highest 2 OK [READ-WRITE] Select completed. 3 SEARCH CHARSET UTF-8 TEXT "日本語" * SEARCH 310 413 517 623 899 3 OK Search completed (0.000 secs). 4 FETCH 899 RFC822 * 899 FETCH (RFC822 {3006} Return-Path: <hoge@example.co.jp> X-Original-To: user@server.example.com : (略) : ) 4 OK Fetch completed. 5 LOGOUT * BYE Logging out 5 OK Logout completed. closed
おわりに
ここで使った Solr は Ubuntu 12.04 標準のもので、バージョンは 1.4.1 と幾分古いものです。Solr の最近のバージョンだと、日本語向けにさらにいろんな処理ができるようになってるようなので、それを試してみたいですね。
DELL XPS 15z で Ubuntu を使う(3) ― 2012年12月04日
3.5.0 のカーネルでうまく boot できないことが多い現象に遭遇し、3.2.0-31 で使っていたのだが、
acpi=noirq
というカーネルへのパラメーターを
acpi_backlight=vendor dell_laptop.backlight=0
に変更したら解決した。
参考
- Ubuntu の wiki
- Bug #1072891 [Dell XPS 15z] Need kernel parameter acpi=noirq or acpi=off to boot

最近のコメント