hnakamur’s blog

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

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





ブログ アーカイブ