皆さま初めまして。田向と申します。今回から数回にわたり、
前回まで、
第8回で、lxc-create
を紹介しました。作成したいコンテナに応じて、-t
オプションでテンプレートディレクトリ/usr/
)
/usr/share/lxc/templates$ wc * 387 1220 10789 lxc-alpine 486 1708 13533 lxc-altlinux 331 1170 10253 lxc-archlinux 376 1337 9446 lxc-busybox 922 3741 28932 lxc-centos 335 1248 10150 lxc-cirros 459 1507 12158 lxc-debian 587 1987 17427 lxc-download 1424 6455 47200 lxc-fedora 821 3203 27808 lxc-gentoo 490 1725 13961 lxc-openmandriva 433 1528 13705 lxc-opensuse 839 3850 35445 lxc-oracle 389 1601 11837 lxc-plamo 275 921 6851 lxc-sshd 809 2937 24273 lxc-ubuntu 406 1584 12401 lxc-ubuntu-cloud 9769 37722 306169 合計
テンプレートの中身については、lxc-plamo
)
Plamoテンプレートや他のテンプレートの全体は、
Plamoテンプレートの内部紹介
テンプレートは、
テンプレートは、
- コンテナを作成するためにインストールする資材
(パッケージ) をダウンロードする部分 - コンテナのルートファイルシステムにパッケージをインストールする部分
- 作成したコンテナ内の設定ファイルなどをコンテナ向けに調整する部分
- コンテナの設定ファイル
( config
)を作成する部分
これらを順に説明してきます。
パッケージのダウンロード
まず、
Plamo Linuxインストーラには、plamo
ディレクトリとcontrib
ディレクトリがあり、plamo
ディレクトリには、
00_
base - Plamo Linuxの動作に必須のカーネルや基本コマンド、
設定ファイルなど。すべての環境でインストールする必要があります。 01_
minimum - ALSAやGCC、
Perl、 Pythonなど、 Xなしでも使える重要コマンド集。サーバなどのコンソール環境で使う場合は、 ここまででたいてい間に合うはずです。 02_
x11 - X11とXに必須のパッケージ群。ウィンドウマネージャはtwmのみです。
03_
xclassics - GNOMEで使われていたEsounDサウンドサーバや、
伝統的なXプロトコルレベルでプロセス間通信を行うソフトウェア、 AfterstepやQvwmなどの伝統的なウィンドウマネージャ、 CannaやFreeWnn、 Kinput2などの伝統的なFEPやIM (インプットメソッド) システム。ここまでインストールすれば、 古き良きワークステーション相当の環境になるはずです。 04_
xapps - 最近のGUI環境の主流になっているGTK環境と主にGTKベースなアプリケーション群。
05_
ext - XfceとKDEが共通に利用する、
PulseAudioなどの機能拡張用ライブラリを中心としたアプリケーション群。iBusやuim、 SCIMなどの最近のインプットメソッドも含みます。 06_
xfce - シンプルながら高機能なXfceデスクトップ環境。
07_
kde - 多機能なKDEデスクトップ環境。
08_
tex - TeXの統合パッケージであるTeX Live。
09_
kernel - Linuxカーネルのソースコード。
10_
lof - Office用統合ツールであるLibreOffice。
これらのカテゴリのうち、00_
はPlamo Linuxの動作に必須、01_
はほぼ必須の環境で、02_
以降は必要に応じて取捨選択可能です。
一方、contrib
ディレクトリには、
カテゴリ | 含まれる内容 |
---|---|
AVtool | オーディオ&ビジュアルツールパッケージ |
DB | データベース関連パッケージ |
Devel | 開発向けパッケージ |
Education | 教育用 |
Emacs | Emacs関連パッケージ |
Hamradio | アマチュア無線関連パッケージ |
Haskell | Haskell |
Kernel | Linuxカーネルパッケージ |
Library | ライブラリ関連パッケージ |
MUA | MUA |
Network |
ネットワーク関連パッケージ |
Python | Python関連パッケージ |
Texlive2010 | Tex Live 2010パッケージ |
Texttool | テキスト処理関連パッケージ |
Utilities | ユーティリティパッケージ |
VLC | VLCメディアプレーヤーパッケージ |
Virtualization | 仮想化関連パッケージ |
X11 | X11関連パッケージ |
これらのパッケージは、
DLSCHEME
- ダウンロードスキーム。
http
またはftp
を指定します。デフォルトはhttp
です。 MIRRORSRV
- ミラーサーバを指定します。デフォルトは
www.
です。ring. or. jp MIRRORPATH
- インストーラのパスを指定します。デフォルトは
/pub/
です。linux/ Plamo
仮に、plamo
ディレクトリ以下とcontrib
ディレクトリ以下のカテゴリをすべてインストールする場合、
CATEGORIES
- ダウンロードする
plamo
ディレクトリ以下のカテゴリを指定します。デフォルトは00_
とbase 01_
です。minimum EXTRACTGRS
- ダウンロードする
contrib
ディレクトリ以下のカテゴリを指定します。デフォルトは指定なし、つまりダウンロードしません。 IGNOREPKGS
- 上記のカテゴリ内のパッケージのうち、
ダウンロード対象から除外するパッケージを指定します。デフォルトは grub
、kernel
、lilo
、linux_
、firmware microcode_
、ctl cpufreqd
、cpufrequtils
およびgpm
です。 ADDONPKGS
- 上記のカテゴリに含まれていないパッケージで、
ピンポイントでダウンロードするパッケージを指定します。デフォルトは contrib/
です。Hamradio/{morse,qrq}
これらの変数は、
パッケージをダウンロードする関数download_
)
download_plamo()
関数download_plamo() {
# check the mini plamo was not already downloaded
if ! mkdir -p $ptcache ; then
echo "Failed to create '$ptcache' directory."
return 1
fi
# download a mini plamo into a cache
echo "Downloading Plamo-$release minimal..."
cd $ptcache
case $DLSCHEME in http) depth=2 ;; ftp) depth=3 ;; esac
rej=${IGNOREPKGS%% *} ; [ -n "$rej" ] && rej="$rej-*"
if [ `echo $IGNOREPKGS | wc -w` -gt 1 ] ; then
for p in ${IGNOREPKGS#* } ; do rej="$rej,$p-*" ; done
fi
for i in $CATEGORIES ; do
wget -nv -e robots=off -r -l $depth -nd -A .tgz,.txz -R "$rej" \
-I $MIRRORPATH/Plamo-$release/$arch/plamo/$i \
-X $MIRRORPATH/Plamo-$release/$arch/plamo/$i/old \
$DLSCHEME://$MIRRORSRV$MIRRORPATH/Plamo-$release/$arch/plamo/$i
if [ $? -ne 0 ] ; then
echo "Failed to download the rootfs, aborting."
return 1
fi
done
for i in $EXTRACTGRS ; do
wget -nv -e robots=off -r -l $depth -nd -A .tgz,.txz -R "$rej" \
-I $MIRRORPATH/Plamo-$release/$arch/contrib/$i \
-X $MIRRORPATH/Plamo-$release/$arch/contrib/$i/old \
$DLSCHEME://$MIRRORSRV$MIRRORPATH/Plamo-$release/$arch/contrib/$i
if [ $? -ne 0 ] ; then
echo "Failed to download the rootfs, aborting."
return 1
fi
done
for p in $ADDONPKGS ; do
wget -nv -e robots=off -r -l $depth -nd -A "`basename $p`-*" \
-I $MIRRORPATH/Plamo-$release/$arch/`dirname $p` \
-X $MIRRORPATH/Plamo-$release/$arch/`dirname $p`/old \
$DLSCHEME://$MIRRORSRV$MIRRORPATH/Plamo-$release/$arch/`dirname $p`
if [ $? -ne 0 ] ; then
echo "Failed to download the rootfs, aborting."
return 1
fi
done
mv $ptcache $dlcache
echo "Download complete."
return 0
}
Plamo Linuxインストーラ内のカテゴリは、wget
コマンドを使ってパッケージを再帰的に取得しています。他のテンプレートにおいても、download_<テンプレート名>
のような関数名になっているので、
コンテナのインストール
install_
の関数では、install_<テンプレート名>
のような関数名になっています。この関数の中核となる部分は以下のコードになります。
for p in `ls -cr $dlcache/*.t?z` ; do
installpkg -root $rtcache -priority ADD $p
done
ここでは、download_
でダウンロードした順に、
なお、installpkg
コマンドは、installpkg
コマンドをLXCキャッシュディレクトリに一時的にインストールしておき、
LXCキャッシュディレクトリにインストールしたinstallpkg
コマンドは、lxc-1.
以降)
コンテナ内の設定ファイルの調整
Plamoテンプレートを使って作成したコンテナを起動するとき、init
を最初に起動して、
configure_
の関数では、configure_<テンプレート名>
のような関数名になっています。
- デバイスファイルの初期化
- Plamoコンテナでは、
起動時のudevを無効にしているので、 コンテナの起動に必要なデバイスファイルを作成したり、 権限を調整します。また、 udevのログレベル出力を無効にします。 /etc/
の初期化fstab - ファイルシステム情報ファイルをコンテナ向けに作成します。
/etc/
の修正inittab lxc-start
コマンドを実行したとき、コンソールにログインプロンプトを表示するための設定を追加し、 ログインプロンプトを表示する仮想コンソールを4つに制限します。また、 lxc-stop
コマンドを実行すると、デフォルトでは SIGPWR
をinit
に送ります。このとき、Plamo Linuxのデフォルト設定だと、 ランレベル1 (シングルユーザモード) に移行し、 lxc-stop
によってコンテナを強制停止する60秒後に、コンテナ上のすべてのタスクが kill -9
されるまで、システムが停止しません。そこで、 SIGPWR
をinit
に送られたらシステムが停止するように、/etc/
を修正します。inittab - ホスト名の設定
lxc-create
コマンドの-n
オプションで指定した名前を、コンテナのホスト名として設定します。 - ネットワークの設定
- DHCPを使うように、
コンテナのネットワークを設定します。 - タイムゾーンの設定
- コンテナのタイムゾーンを+0900
(JST) に設定します。 /etc/
ファイルの編集pam. d/ login (libvirt対策) - libvirtのLXCドライバ経由でゲストにログイン可能にするため、
/etc/
ファイル内のpam. d/ login pam_
の行をコメントアウトします。loginuid. so /etc/
ファイルの生成ld. so. conf - コンテナ上で
ldconfig
を実行して、/etc/
ファイルを生成します。ld. so. conf - パスワードの設定
root
のパスワードを暫定的に"root
"に設定します。/etc/
ファイルの編集rc. d/ rc.[SM] - コンテナ内で起動するrcスクリプトの不要な処理の削除などを行います。
/etc/
ファイルの生成および編集rc. d/ rc. inet1. tradnet - カスタマイズした
netconfig
コマンドのコピーを実行して、/etc/
ファイルを生成します。また、rc. d/ rc. inet1. tradnet ホストOSで無線LANを使用するために、 カーネルの起動時パラメータに wlan
を指定した環境でコンテナを起動すると、起動スクリプトでもホストOSの /proc/
を参照して、cmdline コンテナ上でも無線LANを使用しようとします。そのため、 無線LANの設定を抑止する処理を追加します。
コンテナの設定ファイル(config
)の作成
config
)copy_
の関数では、config
)fstab
ファイルも併せて作成します。
lxc-create
コマンドを実行すると、copy_
によって、lxc.
、lxc.
、lxc.
の設定および共通で使用する設定ファイルを読み込む設定lxc.
)
まとめ
今回は、lxc-plamo
)
次回は、lxc-create
コマンドを使ってコンテナを作成するときの、