試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Debian/Ubuntuでカーネルソースパッケージからカーネルパッケージを作成する(後半)

Debian/Ubuntuでカーネルソースパッケージからカーネルパッケージを作成する(前半)」の続き。

ビルド

ビルドにはmake-kpkgコマンドを使用する。オプションで同時実行可能なジョブ数を指定したりパッケージのリビジョン(同一バージョンの中で区別されるバージョン)を決めたりもできる。初期RAMディスクイメージ(initrd/initramfs)を作成するためには--initrdオプションを付ける。

[linux-source-[バージョン]]$ make-kpkg --jobs [ジョブ数] --rootcmd fakeroot --initrd --revision=[リビジョン] kernel_image

ccacheを使用したい場合は環境変数MAKEFLAGSを指定して

[linux-source-[バージョン]]$ MAKEFLAGS="HOSTCC=/usr/lib/ccache/gcc HOSTCXX=/usr/lib/ccache/g++ CC=/usr/lib/ccache/gcc" make-kpkg --jobs [ジョブ数] --rootcmd fakeroot --initrd --revision=[リビジョン] kernel_image

のようにする。ただ、ビルド設定の変更内容によっては高速化されない部分が出ることもある。
ビルドが正常に終了すると作業ディレクトリの上の階層にlinux-image-[カーネルのバージョン]_[リビジョン]_[アーキテクチャ名].debというファイルが作られる。
なお、ジョブ数の指定については環境変数CONCURRENCY_LEVELの指定でもよく、--jobsオプションと同様の効果が得られる。

[linux-source-[バージョン]]$ CONCURRENCY_LEVEL=[ジョブ数] MAKEFLAGS="HOSTCC=/usr/lib/ccache/gcc HOSTCXX=/usr/lib/ccache/g++ CC=/usr/lib/ccache/gcc" make-kpkg --rootcmd fakeroot --initrd --revision=[リビジョン] kernel_image

インストール

作られたlinux-image-[カーネルのバージョン]_[リビジョン]_[アーキテクチャ名].debdpkgコマンドでインストールする。

$ sudo dpkg -i [linux-image-[カーネルのバージョン]_[リビジョン]_[アーキテクチャ名].debの場所]

インストール後にはブートローダ項目が自動的に追加(アンインストール時には削除)され、次回起動時から選択できるようになる。「UbuntuでTuxOnIceを用いる(Ubuntu 10.10時点・前半)」で扱ったTuxOnIceのパッチを当ててビルド設定を編集してビルドしたものは正常に動作している。
パッケージは「linux-image-[カーネルのバージョン]」という名前でインストールされ、後から削除する場合はこの名前のパッケージを選択して消す。動作中のカーネルのパッケージを消すのはおすすめできない。
ソースパッケージのバージョンが上がるとそれをもとにして作られるパッケージの名前(linux-image-[バージョン])も変わり、古いバージョンと共存させることができるが、古いほうは必要がなくなったら消してディスク領域の空きを作ることもできる。

関連記事:

使用したバージョン:

  • linux-source 2.6.35.25.32
  • kernel-package 12.033
  • ccache 2.4