古いディストリビューションでカーネルだけ上げる場合

注意: こう言う場合は、素直に、ディストリビューションをアップグレードすべきです。カーネル以外の収録ソフトウェアにぜい弱性があっても放置されるので。

興味があって、古い Debian GNU/Linux squeeze (i386) のカーネルだけ上げて見た自分用備忘録です。ただし、仮想マシン上で起動のみ確認しただけなので、本情報は無保証です。

  • The Linux Kernel Archives」から、stable なカーネルソースをダウンロードして検証する。

    $ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.15.tar.xz
    $ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.15.tar.sign
    $ unxz linux-4.14.15.tar.xz
    $ gpg --verify linux-4.14.15.tar.sign

    このとき、公開鍵が見当たらない場合は、「gpg –keyserver hkp://keys.gnupg.net –recv-keys 鍵ID」の様にしてインポートする。

  • 展開してビルドする。なお、.config が必要になるので、最新の Debian GNU/Linux 9 のカーネルの config ファイルを流用して、make oldconfig をしてみたが、「can’t create /sys/kernel/uevent_helper」と出て起動に失敗した。

    と言うわけで、「boot – Is Ubuntu 14.04 available to use 4.7 kernel (or above)? – Ask Ubuntu」等を参考にしつつ作成した.config ファイル (i386) を置いておく。とりあえずこのファイルでビルドすることで、仮想マシン上で一応は起動したが、全く検証していないので注意。

    $ tar xf linux-4.14.15.tar
    $ cd linux-4.14.15
    ※カレントディレクトリに .config ファイルを配置する。
    $ make oldconfig
    $ make -j$(getconf _NPROCESSORS_ONLN) DEBFULLNAME="Some One" DEBEMAIL=someone@example.com EXTRAVERSION=-debian6 KDEB_PKGVERSION=$(make kernelversion)-1 KBUILD_PKG_ROOTCMD=fakeroot INSTALL_MOD_STRIP=1 deb-pkg
  • 一つ上の階層に .deb ファイルがいくつか生成される。ただし、このファイルをそのまま dpkg -i でインストールしても、initrd が作成されない。

    原因は、/etc/kernel/postinst.d/initramfs-tools で参照される「KERNEL_PACKAGE_VERSION」に値が入っていないための様であるので、「/etc/kernel/postinst.d/initramfs-tools」と「/etc/kernel/postrm.d/initramfs-tools」を「KERNEL_PACKAGE_VERSION」に値が入っていなくても initrd が生成されるように編集する。(多分バッドノウハウなんだろうなぁ。)

  • 「dpkg -i」で出来上がったカーネルパッケージをインストールすると、initrd が生成され、grug の設定も行われる。再起動すると該当のカーネルで立ち上がる。

  • 本文中記載外で、参考にしたサイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です