皆さま初めまして。田向と申します。今回から数回にわたり、
前回まで、
第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コマンドを使ってコンテナを作成するときの、