1. tabimoba

    Posted

    tabimoba
Changes in title
+LXD上のCentOS7にhttpdをインストールするには(特権コンテナを利用する)
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,82 @@
+# はじめに
+LXD上のCentOS7環境(コンテナ)にhttpd(Apache)をyumでインストールしようとすると、次のようなエラーが出てインストールに失敗します。
+
+```
+Installing : httpd-2.4.6-40.el7.centos.x86_64 6/6
+Error unpacking rpm package httpd-2.4.6-40.el7.centos.x86_64
+error: unpacking of archive failed on file /usr/sbin/suexec: cpio: cap_set_file
+error: httpd-2.4.6-40.el7.centos.x86_64: install failed
+```
+
+これは、非特権コンテナであるため発生しているエラーとなります。
+
+LXDでコンテナを作成すると通常は非特権コンテナとなりますが、CentOS7のように非特権コンテナで正常に動作しない、パッケージのインストールに失敗する場合は、特権コンテナを作成することで解決出来る場合があります。
+
+# LXC上のCentOS7にhttpdをインストールするまでの手順
+
+まず最初に、LXDをインストールします。
+
+https://linuxcontainers.org/ja/lxd/getting-started-cli/ より引用
+
+```
+# add-apt-repository ppa:ubuntu-lxc/lxd-stable
+# apt-get update
+# apt-get dist-upgrade
+# apt-get install lxd
+```
+
+次に、
+http://images.linuxcontainers.org/images/centos/7/amd64/default/
+より、最新のlxd.tar.xz ファイル(CentOS7イメージ)をダウンロードします。
+
+lxd.tar.xzをダウンロード後、イメージをインポートします。
+
+```
+# lxc image import lxd.tar.xz --alias centos/7
+```
+
+インポート後、CentOS7コンテナを構築出来るようになります。
+
+rootユーザーで次のコマンドを実行すると、特権コンテナのCentOS7を作成することができます。
+
+```
+# lxc launch centos/7 test01 -c security.privileged=true
+```
+
+コンテナ作成後、次のコマンドを実行して作成したコンテナのシェルに入ります。
+
+```
+# lxc exec test01 /bin/bash
+```
+
+コンテナのシェルに入れたことを確認したら、yumを実行します。
+
+```
+[root@test01 ~]# yum install -y httpd
+```
+
+エラーにならずにyumの実行完了後に
+
+```
+Installed:
+ httpd.x86_64 0:2.4.6-40.el7.centos
+```
+と表示されれば、httpdが正常にインストールされています。
+
+# 余談
+
+LXDに関する情報は国内外まだまだ乏しいですね。今回の場合も、ググるとDockerに関するものばかりで困りました・・・(Dockerの場合はaufsのバグ?絡みで同様の問題が発生していたようですね)。
+
+私の場合はDockerよりもLXDの方がしっくりくるというか、Immutable InfrastructureをしたいわけではなくこれまでKVMで構築していたVMのような使い方をしたいために、VMの代替(軽量なLinux仮想環境)としてLXDを使っています。DockerはImmutable Infrastructureのための道具としては良いのですが、initプロセスのような機能が無いので、VMの代替としては使いづらいんですよね。
+
+LXDを使い始めたきっかけは、これまでFreeBSD jailを使っていたので、Linuxにおける同様の使い勝手のものを探していたらLXDがあったとそんな感じです。LXDは、FreeBSDのports installのコンパイルで待たされるようなものが無いので、とても気軽に使えて良いですね。(pkgngはまだ枯れていないのと提供されるパッケージがportsと比べて古かったりするので、やっぱりportsを使ってしまう・・・)
+
+欠点としては、Ubuntuでしか使えないのと、若干動きが怪しいこと(コンテナのstopやrestartが出来ない場合があったり)、まだまだ(これからも?)マイナーであるということでしょうか。
+
+# 参考
+
+- [LXDとは(Linux Containers)](https://linuxcontainers.org/ja/lxd/introduction/)
+- [Ubuntu 15.04とLXDではじめるコンテナ型仮想化(infinite loop 技術ブログ)](https://www.infiniteloop.co.jp/blog/2015/05/lets_start_lxd_with_vivid/)
+- [Nested container in LXD (Ubuntu insights)](https://insights.ubuntu.com/2015/10/30/nested-containers-in-lxd/)
+- [cap_set_file not permitted #1245](https://github.com/lxc/lxd/issues/1245)
+- https://github.com/lxc/lxd/blob/master/specs/command-line-user-experience.md