Archive

Archive for 2012年3月

cgroupメモ

プロセス毎にメモリ制限をかけたくてcgroupについてちょっと調べたのでメモ
・cgcreate (libcgroup-toolsパッケージに入ってる)を使って子を作る
 ・-tオプションでプロセスを追加できるユーザー:グループ
 ・-aオプションで制限を変更できるユーザー:グループ
 ・-gで制限する種類:任意のグループ名 (たとえばmemory:testgroup)
  ・種類はカンマ区切りで複数指定可能 memory,cpu等
・/sys/fs/cgroup以下に作られてる各ディレクトリの下にグループ名のディレクトリが作られる
 ・/sys/fs/cgroup/memory/test とか

# cgcreate -t renda:renda -a renda:renda -g memory:testgroup
これで/sys/fs/cgroup/memory/testgroup が作られる。
権限を継承してサブグループを作るには
# cgcreate -t renda:renda -a renda:renda -g memory:testgroup/test2
のように/区切りで設定する。

対象となるプロセスは各グループディレクトリにあるtaskファイルにpidを書くことで設定可能。
シェルなどを指定した場合子プロセスには自動で引き継がれる。
cgexecから実行すれば最初から指定した状態で実行できる。

メモリの制限はmemory/memory.limit_in_bytesに書く。MとかKとか使える。
参考:redhatのマニュアル
この値は物理メモリサイズで、超えた場合スワップアウトされるっぽい。
(10Mとかに抑えてエラーが出るまで延々とmallocするプログラムを走らせたところ、VIRT表記が1G超えても止まらなかった。
RESは忘れてしまったので今度再実験する。)

カテゴリー:GNU/Linux

Fedora16でLXCためしてみた

4/9追記:procをホスト環境からマウントしてしまうとホスト側のプロセスが丸見えになります。lxc.mountのファイルからマウントしましょう。

すげー苦労した。
http://www.ibm.com/developerworks/jp/linux/library/l-lxc-containers/
このへんを参考に。

LXCの内側、ゲスト環境作るまでは昨日の記事の応用なので省略。
coreutils、moreutils、basesystem、openssh-server、fedora-usermgmt
あたりを入れたディレクトリを作っておく。

・事前情報
host ip:192.168.1.198 (hijiri.renda.jpn.ph)
guest ip:192.168.1.197 (fantastica.hijiri.renda.jpn.ph)
gateway:192.168.1.1
guest root: /mnt/backup/lxc // btrfsの下に作りたかったのでしかたなくここにした subvolumeを別の場所にマウントすればいいんだけど・・・

・ネットワークの下準備
ネットワークが切れるのでローカル端末必須。
# brctl addbr br0
# brctl setfd br0 0
# brctl addif br0 eth0
# ifconfig eth0 0.0.0.0 up
# ifconfig br0 192.168.1.198 promisc up
# route add default gw 192.168.1.1

・LXCの設定ファイル作成
/etc/lxc/ディレクトリを作成してそこに保存した。

lxc.utsname = fantastica.hijiri.renda.jpn.ph
lxc.rootfs = /mnt/backup/lxc/
lxc.mount = /etc/lxc/fstab.fantastica
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 192.168.1.197/24
lxc.network.name = eth0

lxc.network.nameはゲスト側から見えるインターフェイス名だと思う。
fstab書いたんだけどマウントしてくれないので全手動マウント大会!
# mount -t devtmpfs devtmpfs /mnt/backup/lxc/dev
# mount -t devpts devpts /mnt/backup/lxc/dev/pts
# mount -t proc proc /mnt/backup/lxc/proc
# mount -t sysfs sysfs /mnt/backup/lxc/sys
うーん、devをそのままマウントするのはいかがなものなのか。必要なのだけコピーしたほうがいいかも。
procはちゃんと制御されます。

・guestのresolv.conf
無いのでかいてください。

・起動
lxc-create -f /etc/lxc/fantastica.conf -o /var/log/lxc.log -n fantastica
lxc-start -n fantastica — /usr/sbin/sshd -D
-Dつけないとsshdがデタッチしてlxc-startが終わります。
そのうちinit的な何かを書こう。うん。
もちろんsystemd走らせてもいいんですが。

NetworkManagerがいろいろ吹き飛ばしてくれやがる時があるので注意。

カテゴリー:未分類

btrfsのsubvolumeを切ってFedora17alphaインストール

Fedoraのインストーラはbtrfsのsubvolumeを扱うことが(多分)できない。
つまり、ルート一つをまるごとbtrfsにして、/usrやら/varをそのsubvolumeとすることができないわけだ。
zfs的に使うにはやはりインストール時にsubvolumeを切りたいので、LiveCDから全手動インストールすることにした。

とりあえずCDから起動。ある程度の初期設定をしたら端末を開く。
# fdisk /dev/sda
今回はsda1を/boot、sda2に拡張領域、sda5にswap、sda6を/とした。
grub2だと/bootをext4で切り分けなくても大丈夫なんだっけ?
コマンドは以下の順番、デフォルトはそのままenter。
sda1 : n → p → (領域番号) デフォルト → (開始セクタ)デフォルト → (終了セクタ) +100M
sda2 : n-→ e → デフォルト→ デフォルト → デフォルト
sda5 : n → l → デフォルト → デフォルト → +4G
sda6 : n → l → デフォルト → デフォルト → デフォルト

sda5をswapに設定するために
t → 5 → 82
この作業はいらないかも。

wで書き込んで終了。

# mkfs.ext3 /dev/sda1
# mkfs.btrfs /dev/sda6
ここでEXPERIMENTALの文字が飛び込んで来ますが何も気にしてはいけない。
# mkswap /dev/sda5

怒涛のmountラッシュ
# mkdir /sysimage
# mount /dev/sda6 /sysimage
# mkdir /sysimage/boot
# mkdir /sysimage/dev
# mkdir /sysimage/proc
# mkdir /sysimage/sys
# mount /dev/sda1 /sysimage/boot
# mount -t devtmpfs devtmpfs /sysimage/dev
# mount -t devpts devpfs /sysimage/dev/pts
# mount -t sysfs sysfs /sysimage/sys
# mount -t proc proc /sysimage/proc

本題、サブボリューム切ります。
# btrfs sub create /sysimage/usr
# btrfs sub create /sysimage/var
# btrfs sub create /sysimage/home

ここまで切れたらディスクの準備は完了、ここからyumを使って全手動インストール。
全手動インストールの手順はLXC用とかに応用可能。
# yum –installroot=/sysimage –releasever=/ install kernel
kernelの依存関係でほとんどインストールが完了する。basesystemもcoreutilsも入る。
この辺で暇つぶしにfstab書いておくといいと思う。
# yum –installroot=/sysimage –releasever=/ install vi yum grub2 passwd dhclient e2fsprogs
・viを入れる
・yumを入れる、依存関係でrpmとか引っ張ってくる
・grub2を入れる
・passwdを入れる(入ってねーのかよ!)
・dhclientを入れる(間違えてdhcp入れるなよ!)
・e2fsprogsを入れる(純btrfsでbootも作るなら入れなくても問題なし)

chrootいっきまーす
[root@localhost ~]# chroot /sysimage /usr/bin/bash
bash-4.2#
以下、livecd# と chroot# でかき分けます。livecd環境にscreen入れると便利。

livecd# cp /etc/resolv.conf /sysimage/etc/resolv.conf
これでchroot先でもyum使用可能。もうインストールするもの無いんだけど。

rootパスワードの設定
chroot# passwd

ネットワークの設定
chroot# vi /etc/sysconfig/network-scripts/ifcfg-eth0
未だにp2p1とかの表記に慣れないのでeth0書いてしまう。
今回はdhcpを使用するように設定したのみ。

hostnameの設定
chroot# vi /etc/hosts
chroot# vi /etc/sysconfig/network

忘れたら即死grubの設定
chroot# grub2-install /dev/sda
chroot# grub2-mkconfig > /boot/grub2/grub.cfg

ランレベルの設定
chroot# unlink /etc/systemd/system/default.target
chroot# ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

これは後で分かったことだが、dbusのユーザーがなくてフリーズする。
passwd/shadow/group/gshadowをいじってdbusユーザーとdbusグループ(uid,gid:81)を追加する

livecd# reboot

たぶんこれで上がってきます。
実際にやったときは割と試行錯誤してたので、まとめた段階で何か抜け落ちたかも。

やるといいかもしれないこと
・キーボードの設定
・タイムゾーンの設定
・rsyslogのインストール(起動しない時にsyslogがあると便利)
・systemctlで各種デーモンの起動設定

カテゴリー:GNU/Linux