ubuntu 12.04 server に kernel 3.5.x をインストールする方法

仕事で ubuntu 12.04 server LTS を使っています。Ubuntu 12.04 LTS は Long-term support 版でありサポート期間が Desktop-Edition で3年間、Server-Edition で5年間と長いのが特徴です。LTS 版は2年に一度の割合で出すそうです。一方の LTS でないバージョンではサポート期間が1年半となっています。

LTS 版はサポート期間を持つため、比較的保守的で斬新な新機能は投入せず安定性を重視する傾向があり、kernel なども最新版より古いのが通例です。この ubuntu 12.04 でも kernel 最新版は 3.6.x であるにもかかわらず、3.2.0-29 が使われています。とある検証を行うために kernel 3.5.x をインストールすることにしたのですが、公式のリポジトリには 3.2.0-31 までしか入っていません。
Ubuntu では、公式のリポジトリから入手できる概してバージョンが古く、最新のパッケージを利用したい場合には、公式以外から入手できる仕組みとして、PPA(Personal Package Archives)というリポジトリが存在します。公式でなく個人ベースで公開したバイナリって部分で安定性などで品質面で気になりますが、CentOS ばかり触ってきた身なので、ubuntu の世界観がわからないのでなんとも判断しがたいです。

以下手順について説明していきます。

- スポンサーリンク -

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:upubuntu-com/kernel-amd64
sudo apt-get update
sudo apt-get install linux -y
dpkg -l grub
grub-mkconfig -o /boot/grub/menu.lst

インストールが成功していれば、以下の様なメッセージが表示されていると思います。

user@db00-rtk:~$ sudo apt-get install linux -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  linux-headers-3.2.0-29 linux-headers-3.2.0-29-generic
これらを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
  linux-headers-3.5.0-030500 linux-headers-3.5.0-030500-generic linux-image-3.5.0-030500-generic
提案パッケージ:
  fdutils linux-doc-3.5.0 linux-source-3.5.0 linux-tools
以下のパッケージが新たにインストールされます:
  linux linux-headers-3.5.0-030500 linux-headers-3.5.0-030500-generic linux-image-3.5.0-030500-generic
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 11 個。
59.0 MB のアーカイブを取得する必要があります。
この操作後に追加で 225 MB のディスク容量が消費されます。
取得:1 http://ppa.launchpad.net/upubuntu-com/kernel-amd64/ubuntu/ precise/main linux-headers-3.5.0-030500 all 3.5~rev [12.1 MB]
取得:2 http://ppa.launchpad.net/upubuntu-com/kernel-amd64/ubuntu/ precise/main linux-headers-3.5.0-030500-generic amd64 3.5 [918 kB]                                    
取得:3 http://ppa.launchpad.net/upubuntu-com/kernel-amd64/ubuntu/ precise/main linux-image-3.5.0-030500-generic amd64 3.5 [13.1 MB]                                     
取得:4 http://ppa.launchpad.net/upubuntu-com/kernel-amd64/ubuntu/ precise/main linux amd64 3.5 [33.0 MB]                                                                
59.0 MB を 32秒 で取得しました (1,824 kB/s)                                                                                                                             
Selecting previously unselected package linux-headers-3.5.0-030500.
(データベースを読み込んでいます ... 現在 84003 個のファイルとディレクトリがインストールされています。)
(.../linux-headers-3.5.0-030500_3.5~rev_all.deb から) linux-headers-3.5.0-030500 を展開しています...
Selecting previously unselected package linux-headers-3.5.0-030500-generic.
(.../linux-headers-3.5.0-030500-generic_3.5_amd64.deb から) linux-headers-3.5.0-030500-generic を展開しています...
Selecting previously unselected package linux-image-3.5.0-030500-generic.
(.../linux-image-3.5.0-030500-generic_3.5_amd64.deb から) linux-image-3.5.0-030500-generic を展開しています...
Done.
Selecting previously unselected package linux.
(.../archives/linux_3.5_amd64.deb から) linux を展開しています...
linux-headers-3.5.0-030500 (3.5~rev) を設定しています ...
linux-headers-3.5.0-030500-generic (3.5) を設定しています ...
linux-image-3.5.0-030500-generic (3.5) を設定しています ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.5.0-030500-generic /boot/vmlinuz-3.5.0-030500-generic
update-initramfs: Generating /boot/initrd.img-3.5.0-030500-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.5.0-030500-generic /boot/vmlinuz-3.5.0-030500-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.5.0-030500-generic /boot/vmlinuz-3.5.0-030500-generic
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.5.0-030500-generic
Found initrd image: /boot/initrd.img-3.5.0-030500-generic
Found linux image: /boot/vmlinuz-3.2.0-31-generic
Found initrd image: /boot/initrd.img-3.2.0-31-generic
Found linux image: /boot/vmlinuz-3.2.0-29-generic
Found initrd image: /boot/initrd.img-3.2.0-29-generic
Found memtest86+ image: /memtest86+.bin
done
linux (3.5) を設定しています ...
Running depmod.
update-initramfs: Generating /boot/initrd.img-3.5.0-030500-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.5.0-030500-generic /boot/vmlinuz-3.5.0-030500-generic
update-initramfs: Generating /boot/initrd.img-3.5.0-030500-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.5.0-030500-generic /boot/vmlinuz-3.5.0-030500-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.5.0-030500-generic /boot/vmlinuz-3.5.0-030500-generic
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.5.0-030500-generic
Found initrd image: /boot/initrd.img-3.5.0-030500-generic
Found linux image: /boot/vmlinuz-3.2.0-31-generic
Found initrd image: /boot/initrd.img-3.2.0-31-generic
Found linux image: /boot/vmlinuz-3.2.0-29-generic
Found initrd image: /boot/initrd.img-3.2.0-29-generic
Found memtest86+ image: /memtest86+.bin
done

user@db00-rtk:~$ sudo dpkg -l grub
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)維持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前                               バージョン                      説明
+++-====================================-====================================-========================================================================================
un  grub                                                                (説明 (description) がありません)

user@db00-rtk:~$ sudo grub-mkconfig -o /boot/grub/menu.lst
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.5.0-030500-generic
Found initrd image: /boot/initrd.img-3.5.0-030500-generic
Found linux image: /boot/vmlinuz-3.2.0-31-generic
Found initrd image: /boot/initrd.img-3.2.0-31-generic
Found linux image: /boot/vmlinuz-3.2.0-29-generic
Found initrd image: /boot/initrd.img-3.2.0-29-generic
Found memtest86+ image: /memtest86+.bin
done

サーバを再起動すれば、無事バージョンアップされた kernel 3.5 で起動します。

sudo reboot

ただ kernel だけなら良いのですが、apt-get update で各種パッケージが下記の通り42個も PPA リポジトリからバージョンアップすることになりました。kernel のみならずライブラリ系もいろいろ入れ替わると影響が計り知れないので、個人的には結構怖いです。

アップグレード: 42 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
96.4 MB のアーカイブを取得する必要があります。
この操作後に追加で 218 MB のディスク容量が消費されます。
続行しますか [Y/n]? y

さて、サーバリブート後ですが無事に起動・・・かと思いきや画面に何も表示されません。真っ暗のままです。kernel panic でも起こったか!と思いましたが、他のサーバからログインすることができたので、どうやら原因は他にあるようです。いろいろ調べてみましたが、uvesafb と fbcon を使ってコンソール画面の解像度を設定することで表示可能となりました。
kernel をアップデートしてないサーバでは不要な設定をあえてしなければ画面表示されなくなったので、何かしらの情報が書き換わってしまっていると推測されますが、解析できていません。とりあえずの対処方法としては下記の手順になります。

sudo echo '
uvesafb
fbcon
' >> /etc/initramfs-tools/modules

sudo echo '
options uvesafb mode_option=1024x768-32
' > /etc/modprobe.d/uvesafb.conf

sudo vi /etc/default/grub
## 下記のように書き換える
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=uvesafb"


sudo apt-get install v86d
sudo update-initramfs -u
sudo update-grub
sudo reboot

再起動後は無事に表示されるようになりましたが、数日後、なぜだかまた表示されなくなりました。再起動時ディスプレイケーブルを抜いて起動した頃にケーブルを挿すとなぜだか表示されました。もっともこのPCはサーバ用途でリモートからしか操作しないので、セットアップや現地での緊急メンテナンスでしか不都合はないのですが、やはり不都合が発生してしまっているといった悲しい現状です。

参考にしたサイト

- スポンサーリンク -