まず,vmmon の compile で
Using 2.6.x kernel build system. make: ディレクトリ `/tmp/vmware-config0/vmmon-only' に入ります make -C /usr/src/linux-headers-2.6.22-2007072001/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules make[1]: ディレクトリ `/usr/src/linux-headers-2.6.22-2007072001' に入ります CC [M] /tmp/vmware-config0/vmmon-only/linux/driver.o /tmp/vmware-config0/vmmon-only/linux/driver.c: In function '__LinuxDriver_Ioctl': /tmp/vmware-config0/vmmon-only/linux/driver.c:1833: error: 'struct mm_struct' has no member named 'dumpable' make[2]: *** [/tmp/vmware-config0/vmmon-only/linux/driver.o] エラー 1 make[1]: *** [_module_/tmp/vmware-config0/vmmon-only] エラー 2 make[1]: ディレクトリ `/usr/src/linux-headers-2.6.22-2007072001' から出ます make: *** [vmmon.ko] エラー 2 make: ディレクトリ `/tmp/vmware-config0/vmmon-only' から出ます Unable to build the vmmon module.
とかでこける.これは <URL:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6c5d523826dc639df709ed0f88c5d2ce25379652> の影響.mm_struct.dumpable に変更があったとのこと.
diff -uwr vmmon-only/linux/driver.c vmmon-only.new/linux/driver.c
--- vmmon-only/linux/driver.c 2007-04-09 10:20:35.000000000 +0900
+++ vmmon-only.new/linux/driver.c 2007-07-21 18:18:34.000000000 +0900
@@ -1494,6 +1494,26 @@
*/
#include <linux/sched.h>
+static void set_dumpable0(struct mm_struct *mm, int value)
+{
+ switch (value) {
+ case 0:
+ clear_bit(MMF_DUMPABLE, &mm->flags);
+ smp_wmb();
+ clear_bit(MMF_DUMP_SECURELY, &mm->flags);
+ break;
+ case 1:
+ set_bit(MMF_DUMPABLE, &mm->flags);
+ smp_wmb();
+ clear_bit(MMF_DUMP_SECURELY, &mm->flags);
+ break;
+ case 2:
+ set_bit(MMF_DUMP_SECURELY, &mm->flags);
+ smp_wmb();
+ set_bit(MMF_DUMPABLE, &mm->flags);
+ break;
+ }
+}
static int
__LinuxDriver_Ioctl(
struct file *filp,
@@ -1830,7 +1850,7 @@
current->egid == current->gid &&
current->fsgid == current->gid) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 7)
- current->mm->dumpable = 1;
+ set_dumpable0(current->mm, 1);
#else
current->dumpable = 1;
#endif
という感じでやるきなしなし対応.
set_dumpable(current->mm, 1);
として,include/linux/sched.h に用意されているっぽい
extern void set_dumpable(struct mm_struct *mm, int value);
を使ってもいいのだけれども,insmod 時に
vmmon: Unknown symbol set_dumpable
とかでこけるようになる(上記 pache は fs/exec.c から set_dumpable を copy して流用している).
次に,vmnet の compile で,
make: ディレクトリ `/tmp/vmware-config0/vmnet-only' に入ります make -C /usr/src/linux-headers-2.6.22-2007072001/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules make[1]: ディレクトリ `/usr/src/linux-headers-2.6.22-2007072001' に入ります CC [M] /tmp/vmware-config0/vmnet-only/driver.o /tmp/vmware-config0/vmnet-only/driver.c: In function 'cleanup_module': /tmp/vmware-config0/vmnet-only/driver.c:531: error: void value not ignored as it ought to be make[2]: *** [/tmp/vmware-config0/vmnet-only/driver.o] エラー 1 make[1]: *** [_module_/tmp/vmware-config0/vmnet-only] エラー 2 make[1]: ディレクトリ `/usr/src/linux-headers-2.6.22-2007072001' から出ます make: *** [vmnet.ko] エラー 2 make: ディレクトリ `/tmp/vmware-config0/vmnet-only' から出ます Unable to build the vmnet module.
-extern int unregister_chrdev(unsigned int, const char *); +extern void unregister_chrdev(unsigned int, const char *);
といった変更による.ということで,
diff -uwr vmnet-only/driver.c vmnet-only.new/driver.c
--- vmnet-only/driver.c 2007-05-14 15:03:03.000000000 +0900
+++ vmnet-only.new/driver.c 2007-07-21 18:29:45.000000000 +0900
@@ -528,11 +528,7 @@
int retval;
unregister_ioctl32_handlers();
- retval = unregister_chrdev(VNET_MAJOR_NUMBER, "vmnet");
- if (retval != 0 ) {
- LOG(0, (KERN_WARNING "/dev/vmnet: could not unregister major device %d\n",
- VNET_MAJOR_NUMBER));
- }
+ unregister_chrdev(VNET_MAJOR_NUMBER, "vmnet");
VNetProtoUnregister();
VNetProc_Cleanup();
#ifdef CONFIG_NETFILTER
といった感じに.
[myn:2007062600] の続き.
の組み合わせの場合の話.で,前回の
とかいった話は,vmware-any-any-update110 で対応されているっぽい. ちなみに any-any patch は今までは <URL:http://ftp.cvut.cz/vmware/> で配布されていたんですが,vmware-any-any-update110 は <URL:http://knihovny.cvut.cz/ftp/pub/vmware/> にあって, まだあまり Google にひっかかってくれません.
今回の問題は include/asm/page.h の,
static inline pte_t native_make_pte(unsigned long val)
{
return (pte_t) { .pte_low = val };
}
の箇所.前回 はこれをまるごと comment out して対応したのであるが,この 関数を他の .h (linux の) が参照しているらしく,comment out すると compile がとおらなくなる.ということで,
static inline pte_t native_make_pte(unsigned long val)
{
pte_t t;
t.pte_low=val;
return t;
}
とか適当にそれっぽく修正して対応.やるきなしなし.
[myn:2007021000] の続き.
undefined reference to `__ctype_b' undefined reference to `__ctype_tolower' undefined reference to `__ctype_toupper'
とかで怒られるというあれ.いわゆる上記の symbol 入り libc をつくる件.
% apt-get source glibc (これで glibc-2.6 という directory ができる) % cd glibc-2.6 % head -1 debian/changelog glibc (2.6-2) unstable; urgency=low % emacs debian/changelog C-c C-v (要 debian-changelog-mode) 2.6-3 となるところをなんとなく 2.6-3.1 とかに修正 C-c C-f, C-x C-s, C-x C-c % head -1 debian/changelog glibc (2.6-3.1) unstable; urgency=low % cp somewhere/glibc26-ctype-compat.dpatch debian/patches/any % echo any/glibc26-ctype-compat.dpatch >> debian/patches/series
ここまでが下準備.
glibc26-ctype-compat.dpatch は自前で用意したので <URL:http://myn.meganecco.org/files/glibc26-ctype-compat.dpatch> に置いてあります (無保証).
で,前回 は
% nice -19 fakeroot make -f debian/rules binary \ "RUN_TESTSUITE=no" \ "DEB_INDEP_REGULAR_PACKAGES=locales" \ "DEB_ARCH_REGULAR_PACKAGES=libc6 libc6-dev libc6-amd64 libc6-dev-amd64" \ "DEB_UDEB_PACKAGES=" \ "GLIBC_PASSES=libc nptl amd64"
とかで OK だったのであるが,今回は,
% nice -19 fakeroot make -f debian/rules binary \ "RUN_TESTSUITE=no" \ "DEB_INDEP_REGULAR_PACKAGES=locales" \ "DEB_ARCH_REGULAR_PACKAGES=libc6 libc6-dev libc6-i686 libc6-xen libc6-amd64 libc6-dev-amd64" \ "DEB_UDEB_PACKAGES=" \ "GLIBC_PASSES=libc i686 xen amd64"
という感じで,
xen は不要なのであるが,これがなければ
# extra_debhelper_pkg_install is used for debhelper.mk only. # when you want to install extra packages, use extra_pkg_install. mkdir -p debian/libc6-dev/usr/lib/xen cp -af debian/tmp-xen/usr/lib/*.a debian/libc6-dev/usr/lib/xen cp: cannot stat `debian/tmp-xen/usr/lib/*.a': そのようなファイルやディレクトリはありません make: *** [/home/myn/glibc-2.6/stamp-dir/binaryinst_libc6-dev] エラー 1
とかで build に失敗するので.
Last-modified: Sat Jul 21 18:32:39 +0900 2007