カーネルをリビルドする(その2:バージョンアップ編) [Linux(CentOS/VineLinux)]
今度は、カーネルのバージョンを上げたい場合の手順について記述する。
基本的には構成変更編とそう違いはない。違うのは
・新しいバージョンのカーネルソースを手に入れること
・構成設定情報を流用する
この手順が追加されるくらい。
で、カーネルのバージョンアップについては、基本的に「yum update」をやっておけば、CentOSのプロジェクト開発に携わっている頭の良い皆さんがオススメのバージョンにアップされてゆくので、バージョンアップのためのカーネルリビルドというものはもはやそれほど必要性が高いとはいえない。しかし、時と場合によっては「ど~しても」新しいバージョンのカーネルが使いたいという状況も生じる…こともある。稀に。
そこで、そのような方法について解説する。
手順1:新しいバージョンのカーネルソースを手に入れる
カーネルのソースは、「The Linux Kernel Archives」というサイトから入手可能である。2008.12.26現在、最新の安定版は2.6.28ということになっている。
ちなみに、カーネルのバージョンアップについては「ソースファイルのフルセット」を入手する方法と、「過去の安定版にパッチを適用する」方法と2つがあり、基本的には後者が推奨されている。しかし、こまめにバージョンアップしていない場合は、パッチの適用を何度も何度も実行するハメなることもしばしばで面倒くさいしトラブルの原因にもなるようなので、「はじめてカーネルコンパイルに挑戦するZE!」という場合や、「久しぶりにバージョンアップするYO!」という場合には「ソースファイルのフルセット」を入手してしまうのがかえって面倒でなくて良いようにも思われる。
というわけで、今回は2.6.28のソースファイルのフルセットを入手することにする。「wget」コマンド等で入手するとラクチンである。
これで最新版のソースが入手できた。
手順2:構成設定情報を流用する
カーネルの構成設定情報を流用し、今現在動作しているカーネルの環境をなるべくそのまま移行すると、後々ラクでよい。というわけで、その作業を行う。ちなみに、この作業を省略しても実はカーネルのコンパイルは出来てしまう。ごく標準的な構成(だとLinuxカーネルの開発をしている頭の良い人たちが思っているもの)でカーネルが構築されるのである。
しかし、カーネルの構成なんてものはケース・バイ・ケースで変わってくるものなので、ここでは現時点で動作しているカーネルの構成設定情報を流用すべきなのである。
方法は簡単で、/usr/src/kernelsディレクトリにある、現時点で動作しているカーネルのソースディレクトリから、「.config」というファイルをコピーしてくる。ちなみに、今実験で使っている環境では、現在のカーネルバージョンが「2.6.18-92.1.22.el5」で、新しいソースが「linux-2.6.28」なので…
こんな具合で実行するヨロシ。
で、カーネルの構成設定情報のファイルは、カーネルの版数によって日々追加・変更されるものなので、このままではカーネルの構築が出来ないことがある。(項目が足りないかもしれない)そこで、足りない項目を補ってやる必要があるので、その対応を行う。
新しいカーネルのソースがあるディレクトリに移動してから、「make silentoldconfig」を実行する。
これを実行すると、既存のバージョンの.configを読み取って基本的には設定を流用し、足りない部分(新しく追加された項目)については適宜質問をしてくるように振る舞う。
で、質問された内容にどう答えるか…であるが、よく分からない項目はデフォルト設定のままにしておくのが良い。つまり、Enterキーを押しっぱなしにしておくのがラクで良い。(笑)
#ま、その辺を適切に回答できる人はこんなページ必要無いよな(笑)
手順3:カーネルをコンパイルしてインストールする
「その1」でやったように、カーネルをコンパイルしてインストールする。
要するに「make」して「make modules_install」して「make install」するのである。
手順4:カーネルを再起動する
で、再起動。
なお、grubの設定をまだ変更していないので、そのまま放置していると現在のバージョンのカーネルで起動してしまう。新しいバージョンのカーネルで起動するにはgrubの起動時メニューで新しいカーネルを意図的に選択しなければならない。
カーネルのインストール時に、grub.confに新しいカーネルで起動できるように項目自体は追加してくれているので、普通は手で記述する必要はない。
手順5:新しいカーネルを試し、問題がなければgrubの設定を変更する。
新しいカーネルで起動したら、正しくビルドされているかどうか試しておこう。問題が無いようなら、/boot/grub/grub.confの設定を変更する。具体的には「default=」の行の数値を新しいカーネルのものに変更するのである。
一般的には上記のような方法でビルドが通るはずであるが、インストールされているパッケージの状態とかによってはダメかもしれないので、その辺はグーグル先生に質問をして調査するヨロシ。
基本的には構成変更編とそう違いはない。違うのは
・新しいバージョンのカーネルソースを手に入れること
・構成設定情報を流用する
この手順が追加されるくらい。
で、カーネルのバージョンアップについては、基本的に「yum update」をやっておけば、CentOSのプロジェクト開発に携わっている頭の良い皆さんがオススメのバージョンにアップされてゆくので、バージョンアップのためのカーネルリビルドというものはもはやそれほど必要性が高いとはいえない。しかし、時と場合によっては「ど~しても」新しいバージョンのカーネルが使いたいという状況も生じる…こともある。稀に。
そこで、そのような方法について解説する。
手順1:新しいバージョンのカーネルソースを手に入れる
カーネルのソースは、「The Linux Kernel Archives」というサイトから入手可能である。2008.12.26現在、最新の安定版は2.6.28ということになっている。
ちなみに、カーネルのバージョンアップについては「ソースファイルのフルセット」を入手する方法と、「過去の安定版にパッチを適用する」方法と2つがあり、基本的には後者が推奨されている。しかし、こまめにバージョンアップしていない場合は、パッチの適用を何度も何度も実行するハメなることもしばしばで面倒くさいしトラブルの原因にもなるようなので、「はじめてカーネルコンパイルに挑戦するZE!」という場合や、「久しぶりにバージョンアップするYO!」という場合には「ソースファイルのフルセット」を入手してしまうのがかえって面倒でなくて良いようにも思われる。
というわけで、今回は2.6.28のソースファイルのフルセットを入手することにする。「wget」コマンド等で入手するとラクチンである。
# cd /usr/src/kernels # pwd /usr/src/kerels # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2 (省略) # bzip2 -cd linux-2.6.28.tar.bz2 | tar xvf - (省略)
これで最新版のソースが入手できた。
手順2:構成設定情報を流用する
カーネルの構成設定情報を流用し、今現在動作しているカーネルの環境をなるべくそのまま移行すると、後々ラクでよい。というわけで、その作業を行う。ちなみに、この作業を省略しても実はカーネルのコンパイルは出来てしまう。ごく標準的な構成(だとLinuxカーネルの開発をしている頭の良い人たちが思っているもの)でカーネルが構築されるのである。
しかし、カーネルの構成なんてものはケース・バイ・ケースで変わってくるものなので、ここでは現時点で動作しているカーネルの構成設定情報を流用すべきなのである。
方法は簡単で、/usr/src/kernelsディレクトリにある、現時点で動作しているカーネルのソースディレクトリから、「.config」というファイルをコピーしてくる。ちなみに、今実験で使っている環境では、現在のカーネルバージョンが「2.6.18-92.1.22.el5」で、新しいソースが「linux-2.6.28」なので…
# cp ./2.6.18-92.1.22.el5-i686/.config ./linux-2.6.28/
こんな具合で実行するヨロシ。
で、カーネルの構成設定情報のファイルは、カーネルの版数によって日々追加・変更されるものなので、このままではカーネルの構築が出来ないことがある。(項目が足りないかもしれない)そこで、足りない項目を補ってやる必要があるので、その対応を行う。
新しいカーネルのソースがあるディレクトリに移動してから、「make silentoldconfig」を実行する。
# cd linux-2.6.28 # pwd /usr/src/kernels/linux-2.6.28 # make silentoldconfig
これを実行すると、既存のバージョンの.configを読み取って基本的には設定を流用し、足りない部分(新しく追加された項目)については適宜質問をしてくるように振る舞う。
で、質問された内容にどう答えるか…であるが、よく分からない項目はデフォルト設定のままにしておくのが良い。つまり、Enterキーを押しっぱなしにしておくのがラクで良い。(笑)
#ま、その辺を適切に回答できる人はこんなページ必要無いよな(笑)
手順3:カーネルをコンパイルしてインストールする
「その1」でやったように、カーネルをコンパイルしてインストールする。
要するに「make」して「make modules_install」して「make install」するのである。
手順4:カーネルを再起動する
で、再起動。
なお、grubの設定をまだ変更していないので、そのまま放置していると現在のバージョンのカーネルで起動してしまう。新しいバージョンのカーネルで起動するにはgrubの起動時メニューで新しいカーネルを意図的に選択しなければならない。
カーネルのインストール時に、grub.confに新しいカーネルで起動できるように項目自体は追加してくれているので、普通は手で記述する必要はない。
手順5:新しいカーネルを試し、問題がなければgrubの設定を変更する。
新しいカーネルで起動したら、正しくビルドされているかどうか試しておこう。問題が無いようなら、/boot/grub/grub.confの設定を変更する。具体的には「default=」の行の数値を新しいカーネルのものに変更するのである。
一般的には上記のような方法でビルドが通るはずであるが、インストールされているパッケージの状態とかによってはダメかもしれないので、その辺はグーグル先生に質問をして調査するヨロシ。
コメント 0