hnakamur’s blog

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

2008-11-29

時計のずれを修正



Debian FAQ - Silicon Linux Wikiを参考にしました。



# vi /etc/default/rcS




UTC=no


に修正。



# tzconfig


で反映しようと思ったら



WARNING: the tzconfig command is deprecated, please use:
dpkg-reconfigure tzdata


と言われたので



# dpkg-reconfigure tzdata


と実行し、CUIでのタイムゾーンで[Asia]/[Tokyo]を選択。


すると



Current default timezone: 'Asia/Tokyo'
Local time is now: Sat Nov 29 10:21:38 JST 2008.
Universal Time is now: Sat Nov 29 01:21:38 UTC 2008.


と表示されて正しくなりました。





2008-11-26

ActiveScriptRuby1.8.7p72でRubyGemsを1.3.1にアップデート後gem実行時に「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。」というエラー発生の修正方法



ActiveScriptRuby 1.8.7p72に入っているRubyGemsは1.2.0だったのですが、capistranoでデプロイしようとするとechoeがなんたらというエラーになってしまいググッたらRubyGemsのバージョンをあげろということだったのであげることにしました。


まずここでgem update --systemが効かずちょっとはまったのですが、



C:\> gem install rubygems-update
C:\> update_rubygems


であげるとのこと。


で、あげるの自体はできたんですが、



C:\> gem -v
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。


というエラーが出てしまいはまりました。


バッチファイル"C:\Program Files\ruby-1.8\bin\gem.bat"を調べてみるとruby.exeの後のダブルクォーテーションがダブっているというバグでした。



C:\Program Files\ruby-1.8\bin>c:\cygwin\bin\diff -u gem.bat.orig gem.bat
--- gem.bat.orig 2008-11-25 22:35:00.808000000 +0900
+++ gem.bat 2008-11-26 10:41:51.287883000 +0900
@@ -1,6 +1,6 @@
@ECHO OFF
IF NOT "%~f0" == "~f0" GOTO :WinNT
-@"ruby.exe"" "C:/Program Files/ruby-1.8/bin/gem" %1 %2 %3 %4 %5 %6 %7 %8 %9
+@"ruby.exe" "C:/Program Files/ruby-1.8/bin/gem" %1 %2 %3 %4 %5 %6 %7 %8 %9
GOTO :EOF
-@"ruby.exe"" "%~dpn0" %*
+@"ruby.exe" "%~dpn0" %*


これを修正すると無事動きました。



C:\Program Files\ruby-1.8\bin>gem -v
1.3.1


追記


その後情報デザイン学科ブログ » Post Topic » RubyGems 1.3.0, 1.3.1 の問題という記事を見つけました。バグ登録済みRubyForge: RubyGems: トラッカー詳細: 22712 command "gem" does not work when "ruby.exe" is located at "C:\Program Files\ruby-1.8\bin"とのことでそのうち修正されるといいですね。


さらに追記


と思ったら実はまだechoeがないというエラーは終わっていませんでした。



C:\プロジェクトのデイレクトリ>cap -T
C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems.rb:636:in `report_acti
vate_error': Could not find RubyGem echoe (>= 0) (Gem::LoadError)
from C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems.rb:141:in
`activate'
from C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems.rb:165:in
`activate'
from C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems.rb:164:in
`each'
from C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems.rb:164:in
`activate'
from C:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems.rb:49:in
`gem'
from C:/Program Files/ruby-1.8/bin/cap:18


原因は調べていませんが対処療法で直りました。


capistranoを入れ直して



C:\プロジェクトのデイレクトリ>gem install capistrano


再度実行してみると



C:\プロジェクトのデイレクトリ>cap -V
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。


となるので、"C:\Program Files\ruby-1.8\bin\cap.bat"も上と同様にruby.exeの後のダブルクォーテションがダブっているのを修正すると



C:\プロジェクトのデイレクトリ>cap -V
Capistrano v2.5.2


動きました。





2008-11-25

一部のパッケージだけ手動でtestingレポジトリから取得する




/etc/apt/source.listに以下の内容を追加。



# testing
deb http://cdn.debian.or.jp/debian/ testing main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free


apt-pin止め(apt-pinning)。/etc/apt/preferencesを以下の内容で作成。



ackage: *
Pin: release a=testing
Pin-Priority: 90


aptitude updateで以下のようなエラーが発生するので



# aptitude update
...
Reading package lists... Error!
E: Dynamic MMap ran out of room
E: Error occurred while processing tkman (NewVersion1)
E: Problem with MergeList /var/lib/apt/lists/cdn.debian.or.jp_debian_dists_testing_main_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.
E: Couldn't rebuild package cache


以下のような内容で/etc/apt/apt.confを作成して



APT::Cache-Limit "100000000";
APT::Default-Release "stable";


再度実行して今度はOK。



# aptitude update
...
Reading package lists... Done


aptitude upgradeで何もアップグレードされないことも確認。


testingのutil-vserverパッケージのバージョン確認。



# aptitude -t testing show util-vserver
Package: util-vserver
State: not installed
Automatically installed: no
Version: 0.30.216~r2772-4
...


testingのutil-vserverパッケージのバージョンインストール。



# aptitude -t testing install util-vserver
Reading package lists... Done
Building dependency tree... Done
Reading extended state information
Initializing package states... Done
Building tag database... Done
The following packages are BROKEN:
libc6 libc6-dev libncurses5-dev
The following packages have been kept back:
adduser apt apt-utils aptitude base-files base-passwd bash binutils bison
bsdmainutils bsdutils busybox bzip2 coreutils cpio cpp cpp-4.1 cron dctrl-tools
debconf debconf-i18n debian-archive-keyring debianutils debootstrap dhcp3-client
dhcp3-common dialog diff dpkg dpkg-dev e2fslibs e2fsprogs ed exim4 exim4-base
exim4-config exim4-daemon-light file findutils flex gcc gcc-4.1 gcc-4.1-base
gettext gettext-base gnupg gpgv grep groff-base gzip hostname ifupdown info
initramfs-tools initscripts iproute iproute-doc iptables iputils-ping
kernel-package klibc-utils klogd less libacl1 libatm1 libattr1 libbeecrypt6
libblkid1 libbz2-1.0 libcomerr2 libcompress-zlib-perl libdb4.2 libedit2 libexpat1
libgcc1 libgcrypt11 libgpg-error0 libklibc libkrb53 liblocale-gettext-perl
liblockfile1 libmagic1 libmail-sendmail-perl libmudflap0 libmudflap0-dev
libncursesw5 libneon25 libpam-modules libpam-runtime libpam0g libpcre3 libpopt0
libreadline5 libsasl2-2 libsepol1 libsigc++-2.0-0c2a libsqlite0 libsqlite3-0 libss2
libssl0.9.8 libstdc++6 libtasn1-3 libtext-charwidth-perl libtext-iconv-perl
libtext-wrapi18n-perl libusb-0.1-4 libuuid1 libvolume-id0 libwrap0 libxml2 login
logrotate lsb-base lvm2 m4 mailx make makedev man-db mawk mime-support mktemp
module-init-tools mount nano ncurses-base ncurses-bin net-tools netbase
openbsd-inetd openssh-blacklist openssh-client openssh-server passwd patch perl
perl-base perl-doc perl-modules po-debconf procps psmisc python python-celementtree
python-central python-elementtree python-libxml2 python-minimal python-rpm
python-sqlite python-support python-urlgrabber python2.4 python2.4-minimal
python2.5 python2.5-minimal readline-common rpm screen sed sharutils ssh sudo
sysklogd sysv-rc sysvinit sysvinit-utils tar tcpd telnet texinfo tzdata udev unzip
update-inetd vim vim-common vim-runtime wget xml-core yum zlib1g
The following packages will be upgraded:
libncurses5 libselinux1 libslang2 util-linux util-vserver
The following packages are RECOMMENDED but will NOT be installed:
libgpm2 libpng12-0
6 packages upgraded, 0 newly installed, 0 to remove and 184 not upgraded.
Need to get 6376kB of archives. After unpacking 811kB will be used.
The following packages have unmet dependencies:
libc6-dev: Depends: libc6 (= 2.3.6.ds1-13etch7) but 2.7-16 is to be installed.
libncurses5-dev: Depends: libncurses5 (= 5.5-5) but 5.6+20080830-1 is to be installed.
libc6: Conflicts: tzdata-etch which is a virtual package.
Resolving dependencies...
The following actions will resolve these dependencies:

Remove the following packages:
linux-kernel-headers

Install the following packages:
libgpm2 [1.20.4-3 (testing)]
libpng12-0 [1.2.27-2 (testing)]
linux-libc-dev [2.6.26-10 (testing)]

Upgrade the following packages:
binutils [2.17-3 (stable, now) -> 2.18.1~cvs20080103-7 (testing)]
libc6-dev [2.3.6.ds1-13etch7 (stable, now) -> 2.7-16 (testing)]
libncurses5-dev [5.5-5 (stable, now) -> 5.6+20080830-1 (testing)]
tzdata [2008e-1etch3 (stable, now) -> 2008h-2 (testing)]

Score is -226

Accept this solution? [Y/n/q/?]


libc6-devとかあがって大丈夫なのかわからないがとりあえずYで行ってみた。





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



Building Guest Systems - Linux-VServerを読みながらトライ中。


まずは、yumを入れておく。



# aptitude install yum


Howtos Linux-Vserver With LVM And Quotas - 5dollarwhitebox.org Media Wikiというページを見つけたのでこれに従ってやってみる。



# aptitude update && aptitude upgrade
# aptitude install lvm2 util-vserver coreutils


NTFSのsparse fileの手順に沿ってcentos5guest.ext3という名前で8Gのsparse fileを作り、coLinuxを以下のような設定で再起動。



kernel=C:\coLinux\coLinux_VServer\vmlinux-2.6.22.18-vs2.2.0.6-co-0.7.3
hda1=c:\coLinux\etch.ext3
hdb1=c:\coLinux\swap.img
hdc1=c:\coLinux\centos5guest.ext3
root=/dev/hda1
initrd=C:\coLinux\coLinux_VServer\initrd.img-2.6.22.18-vs2.2.0.6-co-0.7.3
mem=512
eth0=slirp
eth1=tuntap


物理ボリューム、ボリュームグループ、論理ボリューム作成



# pvcreate /dev/hdc1
Physical volume "/dev/hdc1" successfully created
# vgcreate vg0 /dev/hdc1
Volume group "vg0" successfully created
# lvcreate -L1024 -n vserver1 vg0
Logical volume "vserver1" created


ファイルシステム作成とマウント



# mke2fs -j /dev/vg0/vserver1
...
# mkdir /var/lib/vservers/vserver1
# mount -t ext3 /dev/vg0/vserver1 /var/lib/vservers/vserver1


仮想サーバー作ろうとしたらエラー。



# vserver vserver1 build -m yum --context 42 --hostname vserver1.local \
--interface eth0:192.168.1.11/24 -- -d centos5
ERROR: Can not find configuration for the distribution 'centos5';
please read http://linux-vserver.org/HowToRegisterNewDistributions
for information how to add support for your own distribution.



# dpkg -L util-vserver | lv


で確認してみると、確かにcentos5の設定は無かった(centos4ならあったけど)。検索してみるとvserver development mailing list: Re: [Vserver] CentOS 5 building guest machineで、util-vserverのバージョンを0.30.213にあげれば入っているとのこと。dpkg -l util-vserverしてみると手元のは0.30.212-1。Debian -- パッケージ検索結果 -- util-vserverを見るとtestingレポジトリにはもっと新しいのが登録されているそうだ。


tesingからutil-vserverをインストールしたときの手順は一部のパッケージだけ手動でtestingレポジトリから取得するに書きました。


というわけでもう一度やってみると今度は別のエラー発生。



# vserver vserver1 build -m yum --context 42 --hostname vserver1.local \
--interface eth0:192.168.1.11/24 -- -d centos5
mount: mount point /etc/rpm does not exist
rm: cannot remove directory `/etc/vservers/.defaults/vdirbase/vserver1': Device or resource busy


#444224 - util-vserver: please include /etc/rpm and suggest:yum - Debian Bug report logsという記事を見て



# mkdir -p /etc/vservers/vserver1/rpmetc
# vserver vserver1 build -m yum --context 42 --hostname vserver1.local \
--interface eth0:192.168.1.11/24 -- -d centos5
vserver-topdirectory '/etc/vservers/.defaults/vdirbase/vserver1' and/or configuration at '/etc/vservers/vserver1'
exist already; please try to use '--force', or remove them manually.


とやってみたらまたエラーに。


ここは素直に/etc/rpmを作るほうがよさそうと思いやってみると



# rm -r /etc/vservers/vserver1/
# mkdir /etc/rpm
# 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...


と出て固まった。と思ったのは間違いで別の端末でps見たら起動してるようです。しばらく待っているとyumでインストールするときのリストが出てきたのでゲストOS用にパッケージをインストールしているようです。


待ってる間に別の端末でyumをtestingからインストール。かなりいろいろつられてバージョンアップするそうだが気にせずGO!



# aptitude show yum | grep Version:
Version: 2.4.0-3.1
# aptitude show yum -t testing | grep Version:
Version: 3.2.12-1.2
# aptitude install yum -t testing


長くなってきたので続きは別エントリにします。





cygcheck



Cygwin - discypusというcygwin情報がまとまっているページを発見。


cygcheckというコマンドでインストール済みパッケージ一覧やパッケージ内ファイル一覧を見ることができることを知った。


依存ライブラリ一覧



$ cygcheck exeファイル


パッケージ内ファイル一覧



cygcheck -l パッケージ名


インストール済みパッケージ一覧(正確にはパッケージ状態チェックのようだ)



cygcheck -c [パッケージ名]





cygwinでRuby on Rails環境整備



Rubyのgemはコンパイルが必要なものが多いのでmswin32版のRubyを使っていてMSのコンパイラがないとインストールできないことが多発。そこでcygwinを見てみるとRubyは最新版の1.8.7p72がバイナリパッケージで用意されていたのでcygwinのRubyをトライしてみることにした。


cygwinのインストーラでビルドに必要そうなパッケージを入れた。gcc-4, g++-4, make, bison, flex, autoconf, automakeなど。


軽くはまったところをメモ。



  • gcc-4だけ入れるとgcc-4.exeというバイナリはあるがgccはないので、シンボリックリンクを張った。



$ cd /usr/bin
$ ln -s gcc-4.exe gcc.exe



  • ImageMagickはcygwinでインストールしておいたのだがrmagickのインストールの際にMagick-confがないと言われた。cygwinでlibMagick-develというパッケージがあることに気づきインストール後再度試すと大丈夫だった。


追記 2008-11-26


その後実際に使ってみると動作が遅いのと、実行中にエラーが頻発するのでcygwin版のrubyの使用はあきらめてActiveScriptRubyに戻りました。





coLinux入りカーネルソースにLinux-VServerのカーネルパッチ当ててカーネルビルド成功



OpenVZがうまくいかなかったので、Welcome to Linux-VServer.org - Linux-VServerにトライしてみることにした。


Downloads - Linux-VServerArchivesリンクをたどり、ftp://ftp.linux-vserver.org/pub/kernel/vs2.2/patch-2.6.22.18-vs2.2.0.6.diff を見つけてダウンロード(こちらはカーネルの各バージョンごとにそれぞれパッチがあった)。patchを当てるとはじかれたのは2箇所でcoLinuxと#includeがかち合ってるだけだった。これなら手で修正可能だ。


coLinuxのソース取得とカーネル一旦作成。



# 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


(そういえば、make kernelのときだかにwww.kernel.orgからカーネルソースをダウンロードしようとしてタイムアウトになり困ったので、iij.ad.jpとかからwgetして/usr/src/downloadに置いた。)


Linux-VServerのカーネルパッチ取得とパッチ当て。



# cd /usr/src/download/
# wget ftp://ftp.linux-vserver.org/pub/kernel/vs2.2/patch-2.6.22.18-vs2.2.0.6.diff
# cd /usr/src/build/linux-2.6.22.18-source
# patch -p1 < /usr/src/download/patch-2.6.22.18-vs2.2.0.6.diff
# find . -name '*.rej'
./arch/i386/kernel/traps.c.rej
./mm/page_alloc.c.rej



# cat ./arch/i386/kernel/traps.c.rej
***************
*** 56,61 ****
#include <asm/stacktrace.h>

#include <linux/module.h>

#include "mach_traps.h"

--- 56,63 ----
#include <asm/stacktrace.h>

#include <linux/module.h>
+ #include <linux/vs_context.h>
+ #include <linux/vserver/history.h>

#include "mach_traps.h"



# cat ./mm/page_alloc.c.rej
***************
*** 41,46 ****
#include <linux/pfn.h>
#include <linux/backing-dev.h>
#include <linux/fault-inject.h>

#include <asm/tlbflush.h>
#include <asm/div64.h>
--- 41,48 ----
#include <linux/pfn.h>
#include <linux/backing-dev.h>
#include <linux/fault-inject.h>
+ #include <linux/vs_base.h>
+ #include <linux/vs_limit.h>

#include <asm/tlbflush.h>
#include <asm/div64.h>


*.rejの内容を見ながら手動パッチ当て。


次にcoLinuxのメモ - カーネルのコンパイルのカーネルのコンフィグレーションの部分を実行。CUIからロードするのは面倒なので直接.configにコピーした。



# cd /usr/src/build/linux-2.6.22.18-source
# cp /usr/src/devel-colinux-20080226/conf/linux-2.6.22.18-config .config
# make menuconfig



  • 「File systems → DOS/FAT/NT Filesystems → Default codepage」を「932」

  • 「File systems → DOS/FAT/NT Filesystems → Default iocharset for FAT」 を「utf-8」


としてみた(参照先はcharsetはeuc-jpだったのだがutf-8にしてみた)。NFSは使わないつもりなので設定省略。


とりあえずmakeでやってみた。



# make


しかし途中でコンパイルエラー。



CC [M] fs/squashfs/inode.o
fs/squashfs/inode.c: In function 'squashfs_get_cached_block':
fs/squashfs/inode.c:367: error: 'TASK_UNINTERRUPTIBLE' undeclared (first use in this funct
ion)


grepで探すとTASK_UNINTERRUPTIBLEはinclude/linux/sched.hで定義されていることが判明。ググってみるとRe: [ANN] Squashfs 3.3 released | KernelTrapRe: [ANN] Squashfs 3.3 released | KernelTrapという記事を発見。間違って必要な#includeを削ってリリースしてしまったということらしい。というわけで手で修正。



--- linux-2.6.22.orig/fs/squashfs/inode.c 2007-07-12 14:57:22.000000000 +0400
+++ linux-2.6.22/fs/squashfs/inode.c 2007-07-12 14:57:53.000000000 +0400
@@ -31,6 +31,7 @@
#include <linux/vfs.h>
#include <linux/vmalloc.h>
+#include <linux/sched.h>
#include <linux/smp_lock.h>

#include "squashfs.h"



再度makeしてみると今度は通りました!ついでに設定をバックアップ。



# make
# cp .config colinux-2.6.22.18-1


ビルドが通ることを確認したので、debianの流儀でパッケージを作成。



# make-kpkg --initrd --revision=colinux.1 kernel_image kernel_headers
# cp -p vmlinux vmlinux-2.6.22.18-vs2.2.0.6-co-0.7.3


パッケージインストール。



# mv /lib/modules/2.6.22.18-co-0.7.3/ /lib/modules/2.6.22.18-co-0.7.3.old
# cd /usr/src/build/
# dpkg -i linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3_colinux.1_i386.deb


こんなエラーが出た。



Selecting previously deselected package linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3.
(Reading database ... 16479 files and directories currently installed.)
Unpacking linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3 (from linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3_colinux.1_i386.deb) ...
Done.
Setting up linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3 (colinux.1) ...
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.
Could not find postinst hook script [update-grub].
Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'
dpkg: error processing linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3 (--install):
subprocess post-installation script returned error exit status 2
Errors were encountered while processing:
linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3


coLinuxのメモ - カーネルのコンパイルに書いてあったこれを忘れてた。



# vi /etc/kernel-img.conf
--- /etc/kernel-img.conf.orig 2007-04-17 17:22:27.000000000 -0400
+++ /etc/kernel-img.conf 2008-11-24 01:33:35.000000000 -0500
@@ -6,5 +6,5 @@
do_bootfloppy = no
do_initrd = yes
link_in_boot = no
-postinst_hook = update-grub
-postrm_hook = update-grub
+#postinst_hook = update-grub
+#postrm_hook = update-grub


もう一度dpkgを実行したら/lib/modules/に既に同じ名前のがあると言われたので抜けて消して再実行。



# rm -rf /lib/modules/2.6.22.18-vs2.2.0.6-co-0.7.3/
# dpkg -i /usr/src/build/linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3_colinux.1_i386.deb
(Reading database ... 16823 files and directories currently installed.)
Preparing to replace linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3 colinux.1 (using linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3_colinux.1_i386.deb) ...
Done.
Unpacking replacement linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3 ...
Setting up linux-image-2.6.22.18-vs2.2.0.6-co-0.7.3 (colinux.1) ...
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.
Not updating initrd symbolic links since we are being updated/reinstalled
(colinux.1 was configured last, according to dpkg)
Not updating image symbolic links since we are being updated/reinstalled
(colinux.1 was configured last, according to dpkg)


WinSCPを使って以下の2つのファイルをWindowsにコピー。



  • /usr/src/build/linux-2.6.22.18-source/vmlinux-2.6.22.18-vs2.2.0.6-co-0.7.3

  • /boot/initrd.img-2.6.22.18-vs2.2.0.6-co-0.7.3


coLinuxの設定ファイルでkernelとinitrdに上記をそれぞれ設定してcoLinuxを起動してみたら無事ブートしてログインできました。


あとはutil-vserverパッケージをインストールしておく。



# aptitude install util-vserver





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:\>






2008-11-23

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:\>

ブログ アーカイブ