パスワードを忘れた? アカウント作成
7358348 journal
日記

mishimaの日記: 古いカーネルで最新のDebianを動かす

日記 by mishima

lxc や chroot 等で Debian を動かす状況はあるかと思う。
最近までは Debian の glibc は最適化をそれほどしていなかったため、けっこう問題なく動いていた。
ところが wheezy 以降ではきっちり最適化をしており、wheezyのカーネルとして使用している「2.6.26」以前の、古いカーネル上では動かなくなってしまっている。

libc の debian/changelog の該当部分はこうなってる。

  * debian/sysdeps/*.mk, debhelper.in/libc.preinst: bump minimal Linux
    kernel version to 2.6.26, and minimal FreeBSD kernel version to
    8.0.0.  Closes: #610475.

やりとりの詳細はここ。
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=610475

さて、古いカーネルでもなんとかなるようにするには次のように変更が必要だ。

apt-get source libc6
cd eglibc-2.13
grep '2\.6\.26' **/*
# ↑これで debian/sysdeps/linux.mk debian/debhelper.in/libc.preinst を修正すればいいことがわかる
vi debian/sysdeps/linux.mk debian/debhelper.in/libc.preinst
# 2\.6\.26 の部分を好きな版に修正する
debuild

これでいい…はずなんだけど、これだけだと Apache が動かない…
(sycall socket でSOCK_CLOEXECを使っていて、これが古いカーネルだとサポートされてないから)
libc 内の socket() を書き換えて、SOCK_CLOSEXEC が設定されていたらこれを外しで syscall socket し、直後に fcntl すればいいんだけどめんどくさい…
( http://www.gcd.org/blog/2009/12/181/ をみるとそれだけじゃダメみたいだし )

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...