hnakamur’s blog

ものすごい勢いで忘れる私のために未整理でもいいからとりあえずメモ

2008-11-24

coLinux入りカーネルソースにOpenVZのカーネルパッチ当てを試みるも失敗



参考URL



作業環境はcoLinux 0.7.3、kernel 2.6.22.18。


まず、coLinuxのSnapshotsのページから0.7.3の最新のカーネルstable-colinux-20080524.tar.gzを取得。まずビルド環境が整っているかの確認も兼ねて、coLinuxのメモ - カーネルのコンパイルに従ってmake kernelまでやってみた。



# cd /usr/src
# wget http://www.colinux.org/snapshots/stable-colinux-20080524.tar.gz
# tar zxf stable-colinux-20080524.tar.gz
# cd stable-colinux-20080524
# ./configure
# make kernel


次にOpenVZのカーネルパッチを組み込もうと思い、Compiling the OpenVZ kernel (the Debian way) - OpenVZ Wikiではdebian etchに含まれるカーネル2.6.18が前提になっているのでこれは使えないと判断し、自前でパッチを当ててビルドしようと思った。


探して見つけたpatch-ovz005.1-combined.gzをとってきて解凍して、パッチ当てを試みたがぜんぜんあたらなくて*.rejファイルが大量にできてしまった。記憶があやふやだけどこんな感じで実行した。



# cd /usr/src/download
# wget http://download.openvz.org/kernel/branches/2.6.22/2.6.22-ovz005.1/patches/patch-ovz005.1-combined.gz
# gunzip patch-ovz005.1-combined.gz
# cd /usr/src/build/stable-colinux-20080524
# patch -p1 < /usr/src/download/patch-ovz005.1-combined


http://download.openvz.org/kernel/branches/debian/etch/ とかを見てもバージョンが飛び飛びだし、OpenVZではdebianはメインターゲットではないのかもという印象を受けた。





Linux-VServerのゲストOSとしてCentOSをインストール(続き)



Linux-VServerのゲストOSとしてCentOSをインストールの続き


ゲストOSのインストールが遅いのはyumのダウンロードのミラーが遅いことに気づき、/usr/lib/util-vserver/distributions/centos5/yum.repo.d/CentOS-Base.repoを書き換えたら、よくなった。


しかし、次の問題が発生。



# vserver vserver1 build -m yum --context 42 --hostname vserver1.local \
--interface eth0:192.168.1.11/24 -- -d centos5
You are using a version of yum which is insecure and broken in chroot
related operations; either apply the patches shipped in the 'contrib/'
directory of util-vserver, or ask the author of yum to apply them
(preferred).

In the meantime, 'vyum' will continue with dirty hacks which might not
work when the vserver is running and local DOS attacks are possible.

Execution will continue in 5 seconds...
Traceback (most recent call last):
File "/usr/bin/yum", line 29, in ?
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 236, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 152, in main
(result, resultmsgs) = base.buildTransaction()
File "/var/lib/python-support/python2.4/yum/__init__.py", line 626, in buildTransaction
(rescode, restring) = self.resolveDeps()
File "/var/lib/python-support/python2.4/yum/depsolve.py", line 663, in resolveDeps
CheckDeps, checkinstalls, checkremoves, missing = self._resolveRequires(errors)
File "/var/lib/python-support/python2.4/yum/depsolve.py", line 746, in _resolveRequires
thisneeds = self._checkInstall(txmbr)
File "/var/lib/python-support/python2.4/yum/depsolve.py", line 788, in _checkInstall
provs = self.tsInfo.getProvides(*req)
File "/var/lib/python-support/python2.4/yum/transactioninfo.py", line 428, in getProvides
result = self.getOldProvides(name, flag, version)
File "/var/lib/python-support/python2.4/yum/transactioninfo.py", line 421, in getOldProvides
for pkg, hits in self.rpmdb.getProvides(name, flag, version).iteritems():
File "/var/lib/python-support/python2.4/yum/rpmsack.py", line 397, in getProvides
pkgs = self.searchProvides(name)
File "/var/lib/python-support/python2.4/yum/rpmsack.py", line 156, in searchProvides
return self.searchPrco(name, 'provides')
File "/var/lib/python-support/python2.4/yum/rpmsack.py", line 139, in searchPrco
mi = ts.dbMatch(tag, name)
TypeError: unknown key type


testingのyumを入れたのは失敗でしたよ。というわけでstableのに戻します(もっといいやり方があるかもしれないけどとりあえずこれで)。



# aptitude uninstall yum
# aptitude install yum


vyumがyumについてエラーを言うのはYum-patch - Linux-VServerで対応するようだ。これは後日やってみよう。


とりあえず今度こそvserverのbuildはエラーなく終わりました。


Building Guest Systems - Linux-VServerに従って動作確認。



root@debian:~# vserver vserver1 start
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
root@debian:~# vserver vserver1 enter
bash-3.2# pwd
/
bash-3.2# ifconfig
eth0 Link encap:Ethernet HWaddr 00:FF:2A:6F:C4:80
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:468 (468.0 b)
Interrupt:2

bash-3.2# logout
root@debian:~#


おー、動きましたよ。


停止と状態確認はこれで。



root@debian:~# vserver vserver1 stop
Shutting down kernel logger: [FAILED]
Shutting down system logger: [ OK ]
Starting killall: [ OK ]
root@debian:~# vserver vserver1 status
Vserver 'vserver1' is stopped


上のFAILEDのときにコンソールでは以下のようなメッセージが表示されてた。



vxW: [xid #0] !!! limit: de75704c[VM,9] = 75 on exit.
vxW: [xid #0] !!! limit: dd34b04c[VM,9] = 76 on exit.
vxW: [xid #0] !!! limit: dd3a904c[VM,9] = 153 on exit.
vxW: [xid #0] !!! limit: dd11704c[VM,9] = 29 on exit.


これもおいおい調べよう。





イメージファイルの拡大



新規に大きいサイズでイメージファイルを作ってそこにコピーし、その後resize2fsを使う。


/dev/cobd0から/dev/cobd1 (4G)にコピーする例。



# dd if=/dev/cobd0 of=/dev/cobd1
# e2fsck -f /dev/cobd1
# resize2fs /dev/cobd1 4G





CentOS5のカスタムインストールCD作成



Build a custom CentOS 5 install CD « Nootech Notes


以下はVirtualBox上にインストール済みのCentOS5.2上で実行した。


インストールCD1枚目の内容を展開



# mkdir -p /media/centos
# mount -o loop /mnt/coLinux/iso/CentOS-5.2-i386-bin-1of6.iso /media/centos/
# mkdir -p ~/build/c5disc1
# cd ~/build/c5disc1
# (cd /media/centos/; tar cf - .) | tar xpf -
# umount /media/centos/


パッケージ追加



# yum -y install anaconda anaconda-help anaconda-runtime
# yum install 適宜必要なパッケージ ...


レポジトリ作成



# discinfo=`head -1 .discinfo`
# createrepo -u "media://$discinfo" -g repodata/comps.xml ~/build/c5disc1


ISOイメージ作成



# isofilename=~/build/c5-custom.iso
# mkisofs -r -R -J -T -v -no-emul-boot -boot-load-size 4 -boot-info-table \
-V "My Custom Linux 1.0" -p "Cool Dude" -A "My Custom Linux 1.0 - 2008/11/23" \
-b isolinux/isolinux.bin -c isolinux/boot.cat -x "lost+found" \
-o $isofilename ~/build/c5disc1
# /usr/lib/anaconda-runtime/implantisomd5 $isofilename





NTFSのsparse file



coLinuxなどのパーティションイメージファイルを作るときにsparse fileという形式にしておくと、宣言したサイズよりも占有量が小さい状態にできる。


4G = 4 * 1024 * 1024 * 1024 = 4096 * 1048576 = 4294967296


8G = 8 * 1024 * 1024 * 1024 = 8192 * 1048576 = 8589934592


C:\>fsutil file createnew 4g.img 4294967296
ファイル C:\coLinux\4g.img が作成されました

C:\>fsutil sparse setflag 4g.img

C:\>fsutil sparse queryrange 4g.img
スパース範囲: [0] [4294967296

C:\>fsutil sparse setrange 4g.img 0 4294967296

C:\>fsutil sparse queryrange 4g.img

C:\>






ブログ アーカイブ