Fedora29 上で CentOS7 の LXC 向け base image を作成する
Docker でもいいんだけど、systemctl が使えないとか、OS 周りの確認に制約があるので、LXC でコンテナしたいなと。
参考
https://www.hiroom2.com/2018/12/14/fedora-29-lxd-en/
https://wp.metainfo.jp/?p=58
https://knowledge.sakura.ad.jp/2226/
base image のベースを作る
基本的には Docker の base image と同じ
yum.conf 準備
以下のような感じに CentOS7 インストール用の yum.conf を作る
[main]
keepcache=0
exactarch=1
obsoletes=1
gpgcheck=0
plugins=1
[base]
name=CentOS-7.6 - Base
baseurl=http://ftp.jaist.ac.jp/pub/Linux/CentOS/7.6.1810/os/x86_64/
[update]
name=CentOS-7.6 - Update
baseurl=http://ftp.jaist.ac.jp/pub/Linux/CentOS/7.6.1810/updates/x86_64/
update は必要に応じて。OS をデフォルトでインストールしたければ不要
base 作成
/tmp/c7 配下に base image に必要なファイルを作成(ここは任意のディレクトリで OK)
/tmp/c7/rootfs 配下に base image の root を作る
rootfs ディレクトリは lxc で必須らしいので名前もこのままで作成する
mkdir -p /tmp/c7/rootfs
sudo yum -c /tmp/c7.conf --disablerepo="*" --enablerepo="base" --installroot=/tmp/c7/rootfs -y groupinstall Core
disablerepo, enablerepo 周りは、Fedora のレポジトリを見に行かないようにするための設定
以下の感じで /tmp/c7/metadata.yaml を作成
OS 名などは適宜変更
{
"architecture": "x86_64",
"creation_date": 1556402782,
"properties": {
"architecture": "x86_64",
"description": "Centos 7.6(x86_64)",
"name": "centos-7.6-x86_64",
"os": "centos",
"release": "7.6",
"variant": "default"
}
}
以下コマンドで作ったファイルを固める
/tmp/c7 は適宜読み替え
cd /tmp/c7
sudo chroot rootfs
--- ここから base image
echo "export LANG=C >> /root/.bashrc"
echo "export LANG=C >> /etc/locale.conf
exit
--- ここまで
sudo tar czf /tmp/c7.tgz metadata.yaml rootfs
ポイント
tar は必ず metadata.yaml rootfs を指定して固める。sudo tar czf /tmp/c7.tgz . はだめ。
LXC にインポートするときに内部で tar -O -xzf ~~~ metadata.yaml を実行して metadata.yaml の内容を取り出しているらしく、. で固めちゃうと取り出せずエラーになるので。。
base image インポート
$ lxc image list
+-------+-------------+--------+-------------+------+------+-------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |
+-------+-------------+--------+-------------+------+------+-------------+
$ lxc image import /tmp/c7.tgz
Image imported with fingerprint: e0946c177810db3d0dad64750fc110ec91463a965f85521
$ lxc image list
+-------+--------------+--------+--------------------+--------+----------+-------------------------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |
+-------+--------------+--------+--------------------+--------+----------+-------------------------------+
| | e0946c177810 | no | Centos 7.6(x86_64) | x86_64 | 492.40MB | Apr 28, 2019 at 12:46am (UTC) |
+-------+--------------+--------+--------------------+--------+----------+-------------------------------+
ここまででインポートは完了。あとは起動するだけ
いざ、起動
$ lxc launch e0946c177810 centos7
$ lxc list
+---------+---------+------+-----------------------------------------------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+---------+---------+------+-----------------------------------------------+------------+-----------+
| centos7 | RUNNING | | fd42:8879:24d8:33f6:216:3eff:fe04:f97d (eth0) | PERSISTENT | |
+---------+---------+------+-----------------------------------------------+------------+-----------+
$ lxc exec centos7 -- /bin/bash
これで完了。