CentOS7にインストールしたlxcなインスタンスがエラーを吐いて起動しないときの対処法

まずは新年のご挨拶から

気がつけば2017年が終わり、2018年がスタートしていますね。

旧年中は大変お世話になりました。本年もよろしくお願いいたします。

2018年が皆さまにとって幸多き1年となりますよう、心よりお祈り申し上げます。

チマチマと構築ちぅ

さて、私の「優先度:低」な業務(?)のひとつに、「社内Labのリニューアル」というお仕事があります。

昨年にIAサーバが導入されましたし、今までできなかったことをできるようにするため、業務の合間を縫ってチマチマ構築をしている今日この頃です。

本当はさっさと構築して社内に提供したいところではあったのですが……。思い通りに事が進まないのが人生というもの。

いろいろ優先度の高い and/or 急ぎで仕上げないといけない業務があったり、構築中にいろいろ問題が起こったり……と、まあなんともアレな状況だったりするわけで……。

まあ、いろいろ技術検証などで使ったりはしていたので、完全遊ばせていたわけではないのですが……。年も明けたことだし、もうそろそろいいかげんに本来の用途に使えるようにしないとねぇ……と。

そんなこんなで、重い腰を上げてトラブル対応に着手してみることにしたわけです。

問題その1:lxcのインスタンスが起動しない!

数あるトラブルのひとつに、「lxcのインスタンスが起動しねぇ!」というものがありました。

手順的には(環境の違いによる差異は別として)Raspberry Piの時と同じことをやれば良いはずなので、躓くとは思ってもいなかったのですが……。

ちなみに発生したエラーは下記のような感じです。あ、「instance」ってのがlxcのインスタンス名ですね。

# lxc-start -n instance
lxc-start: instance: lxccontainer.c: wait_on_daemonized_start: 760 Received container state "ABORTING" instead of "RUNNING"
lxc-start: instance: tools/lxc_start.c: main: 371 The container failed to start.
lxc-start: instance: tools/lxc_start.c: main: 373 To get more details, run the container in foreground mode.
lxc-start: instance: tools/lxc_start.c: main: 375 Additional information can be obtained by setting the --logfile and --logpriority options.

出力結果を見ると、「追加で情報欲しかったら、ログ吐き出してみ?」とあるのでやってみたところ、こんな感じの情報をゲット。

# lxc-start -n instance --logfile=./log.txt
(中略)
# cat ./log.txt
      lxc-start instance YYYYMMDDnnnnnn.nnn ERROR    lxc_conf - conf.c:setup_caps:2364 - unknown capability mac_admin
      lxc-start instance YYYYMMDDnnnnnn.nnn ERROR    lxc_conf - conf.c:lxc_setup:3273 - failed to drop capabilities
      lxc-start instance YYYYMMDDnnnnnn.nnn ERROR    lxc_start - start.c:do_start:944 - Failed to setup container "instance".
      lxc-start instance YYYYMMDDnnnnnn.nnn ERROR    lxc_sync - sync.c:__sync_wait:57 - An error occurred in another process (expected sequence number 5)
      lxc-start instance YYYYMMDDnnnnnn.nnn ERROR    lxc_container - lxccontainer.c:wait_on_daemonized_start:760 - Received container state "ABORTING" instead of "RUNNING"
      lxc-start instance YYYYMMDDnnnnnn.nnn ERROR    lxc_start - start.c:__lxc_start:1459 - Failed to spawn container "instance".
      lxc-start instance YYYYMMDDnnnnnn.nnn ERROR    lxc_start_ui - tools/lxc_start.c:main:371 - The container failed to start.
      lxc-start instance YYYYMMDDnnnnnn.nnn ERROR    lxc_start_ui - tools/lxc_start.c:main:373 - To get more details, run the container in foreground mode.
      lxc-start instance YYYYMMDDnnnnnn.nnn ERROR    lxc_start_ui - tools/lxc_start.c:main:375 - Additional information can be obtained by setting the --logfile and --logpriority options.

ほう……。なるほど!わからん!

ggrksの精神で

とりあえず、よく分からないのでGoogle先生のお力をお借りすることに。

エラーメッセージとして出力された、「lxc_conf – conf.c:setup_caps:2364 – unknown capability mac_admin」という文言をそのまま検索してみます。

そしたらですね……下記のようなサイトが見つかったんですよ……。

なんか同じような悩みを抱えていた人がいたみたいですね(‘-‘*)

この質問に対する回答によると、「libcap-devってパッケージをインストールして、lxcを再コンパイルしてみ?」とあります。

私が使っているのはubuntuではなくCentOS7ではありますが、なんとなく同じようなことをすれば解決しそうな気配ですね。

ってことで……

十分なヒントが得られたので、自分の環境をチェックしてみます。

まずは、「libcap-dev」っぽいパッケージがインストールされているかどうかをチェック。入っていなければ、先のサイトの回答が役に立つ確立がアップしますΣd(ゝ∀・)ネッ!!!

# rpm -qa|grep libcap
libcap-ng-0.7.5-4.el7.x86_64
libcap-2.22-9.el7.i686
libcap-ng-0.7.5-4.el7.i686
libcap-2.22-9.el7.x86_64

お!入っていませんね!

続いて、CentOS7における「libcap-dev」パッケージを探してみましょう。

ディストリビューションが違えば、パッケージ名が異なっているかもしれませんからΣd(ゝ∀・)ネッ!!!

# yum search libcap
(中略)
libcap-devel.i686 : Development files for libcap
libcap-devel.x86_64 : Development files for libcap
libcap-ng-devel.i686 : Header files for libcap-ng library
libcap-ng-devel.x86_64 : Header files for libcap-ng library
libcap-ng-python.x86_64 : Python bindings for libcap-ng library
compat-libcap1.i686 : Library for getting and setting POSIX.1e capabilities
compat-libcap1.x86_64 : Library for getting and setting POSIX.1e capabilities
libcap.i686 : Library for getting and setting POSIX.1e capabilities
libcap.x86_64 : Library for getting and setting POSIX.1e capabilities
libcap-ng.i686 : An alternate posix capabilities library
libcap-ng.x86_64 : An alternate posix capabilities library
libcap-ng-utils.x86_64 : Utilities for analyzing and setting file capabilities

なるほどなるほど、「libcap-devel」と「libcap-ng-devel」って感じの名前っぽいですね!1)なお、「ng」付きとそうじゃないヤツの違いまでは調べてません

ここまで来たら、そのパッケージをインストールして再コンパイルすればいけそうです!2)わざわざ書かなくても良いかなと思うので、このエントリでは手順を省略

コンパイルも無事終わり、ドキドキしながらlxcのインスタンスを起動してみると……。

(」・ω・)」無事に!(/・ω・)/起動できた!

lxcのインスタンスが起動せず、「lxc_conf – conf.c:setup_caps:2364 – unknown capability mac_admin」というエラーが出ていたら、
「kibcap-devel」系のパッケージをインストール!そして、lxcを再コンパイル!

このことを忘れずに、これから生きていこうと思います。

……あ、ちなみにですが、普通にディストリビューションのパッケージを導入していればこのエラーはおこらない3)パッケージの依存関係で必要なブツはインストールされるはずなのでと思います。

あくまでソースからインストールしたときの話ですので、誤解なきよう。

で、libcapってなに?

ところで、このlibcapってなんなんでせぅ?

最初はパケットキャプチャとかしたいときに使う「libpcap」かと思ったのですが、どうも別物らしいです。

ちょっと確証が持てるほど理解はできていないのですが、「Linuxのケーパビリティ」に関するアレコレをアレしているライブラリ……って感じっぽいですね。

lxcのログに出てきた「unknown capability mac_admin」に対応してそうなブツもmanページに書いてありますし……。

CAP_MAC_ADMIN (Linux 2.6.25 以降)
強制アクセス制御 (MAC) を上書きする。 Smack Linux Security Module (LSM) 用に実装されている。

まだ解決しなきゃいけない課題はいろいろあります

そんなこんなでひとつ壁は乗り越えましたが、実はまだ上手く動いていないところがいくつか……。

時間を見つけて解決していって、今月中とかには提供できるようにしたいなぁ……と思う今日この頃です。
_ノ乙(、ン、)_

注訳はこちら   [ + ]

1. なお、「ng」付きとそうじゃないヤツの違いまでは調べてません
2. わざわざ書かなくても良いかなと思うので、このエントリでは手順を省略
3. パッケージの依存関係で必要なブツはインストールされるはずなので
Yuta Hayakawa

Yuta Hayakawaマネージャー

投稿者プロフィール

普段は東京本社で社内システム開発を中心とした本社業務を担当しています。

最近、マネージャー(部長相当)職になりまして、不慣れなアレでアレしている毎日です。

音楽とコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

この著者の最新の記事

関連記事

コメントは利用できません。

エンジニア募集中!(o゜▽゜)o

エンジャパン
follow us in feedly

コッチもヨロシク!





最近のネタ!

  1. 2018-6-18

    Go言語で LDAP (AD) 認証してやろうやないか!

    Go言語で LDAP 認証したい! 皆さん、 Go言語書いてますか! Go言語は最近はやりのマイク…
  2. 2018-6-15

    第 24 回 福岡社員総会 & 懇親会

    全国的に梅雨入りしていく中、今月もジメジメを吹き飛ばすアツい軍団がやってまいりました! そうです!福…
  3. 2018-6-11

    第4回ボルダリング部 〜盛りだくさんな1日🎉〜

    2018/6/2(土)に、第4回ボルダリング部@Tokyoの活動が開催されました! 盛りだくさんな…
  4. 2018-6-8

    第1回エグケット活動報告!

    エグケット誕生 エージェントグロー福岡オフィスの有志が集まって、バスケットボールを楽しむ社内サーク…
  5. 2018-6-7

    福岡 Web App 勉強会第 4 回 !! ~ 初心に戻って git から復習 day with シャッチョさん

    お久しぶりの勉強会です! 皆様お待たせいたしました。 福岡の勉強会が 4 ヵ月ぶりに帰ってきました…
ページ上部へ戻る