Help us understand the problem. What is going on with this article?

LXD上のCentOS7にhttpdをインストールするには(特権コンテナを利用する)

More than 3 years have passed since last update.

はじめに

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が出来ない場合があったり)、まだまだ(これからも?)マイナーであるということでしょうか。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away