日々様々なトラブルにハマっている、困ったシステム管理者の奮闘日記です。

PAEに対応していない古いPCへCentOS6を入れてみた

とある理由で譲ってもらった古いPC (TOSHIBA dynabook Satellite J32)を自宅用のサーバとして使おうかと思い付き、CentOSを入れてみることにした。

せっかくなので、2014年9月時点で最新のCentOS 7 を入れようかと思ったのだが、32bit対応してくれていないようだ。
自力で32bit用パッケージをコンパイルするのも気の遠くなるような作業なので、しかたなく今回はCentOS6をいれることにした。

で、軽い気持ちでCentOS6.5の最小構成インストール用のisoイメージをネットからダウンロードし、PCに入れて起動してみたところ、

This kernel requires the following features not present on the CPU:
pae
Unable to boot - please use a kernel appropriate for your CPU.

だと…

ここからが結構大変だった。
同じ泥沼に入ってしまうかもしれない方々のために、手順を簡単に残しておこうと思う。

 

用意するもの

  1. インストール対象の非PAEなPC
    これにインストールする
    _
  2. VMware Player
    非PAE対応用カーネルを再構築するために使う
    _
  3. CentOS 6.5 最小構成用インストールiso
    _
  4. 空のDVD-R またはDVD-RW
    非PAE対応用カーネルを含んだ最小構成インストールDVDを書き込む
    _
  5. 非PAE対応のカーネル作成用スクリプトのダウンロード
    下記のサイトで公開してくれているスクリプト(以下、DIGITAGEスクリプト)をダウンロードしておきましょう
    DIGITAGE  Installing CentOS 6.4 (or 6.5) on non-PAE Hardware
    http://www.digitage.co.uk/digitage/library/linux/installing-centos-6-4-on-non-pae-hardware
    基本的にここの「8. Download and install the Digitage tarball of scripts and config files (it’s very small) 」以降の手順のとおりにやっていけばできあがる。
    感謝、感謝。

 

ざっくり手順

  1. 非PAE対応用カーネル再構築用のCentOS6をVMware Player にインストール
  2. コンパイル環境の構築
  3. カーネルソースのダウンロード&展開
  4. カーネルパラメータの編集
  5. カーネルコンパイル
  6. 非PAE用CentOSインストール用イメージの作成
  7. 対象PCへインストール

 

カーネルがアップデートされた時の対応

  1. 前回のカーネルコンパイル環境の削除
  2. カーネルソースのダウンロード&展開
  3. カーネルパラメータの編集
  4. カーネルコンパイル
  5. 対象PCへ再構築したカーネルrpmをコピー
  6. 対象PCでのカーネルアップデート(インストール)

 


 

非PAE対応用カーネル再構築用のCentOS6をVMware Player にインストール

VMware ゲストとして、普通にCentOS6をインストールする。
ちなみに32ビット版を入れましょう(#^^#)

 

コンパイル環境の構築

DIGITAGEスクリプトのダウンロード

上記DIGITAGEのサイトからカーネル再構築用のDIGITAGEスクリプトをダウンロードし、/root直下に解凍しておく。

あらかじめyumのリポジトリの[updates]を無効にしておくほうが良いかと思う。

 

kernel-develのインストール

#yum install kernel-devel

コンパイル環境の構築

必要なパッケージ類をインストールしておく

#yum -y install \
wget \
rpm-build \
gpm \
make \
gcc \
redhat-rpm-config \
patchutils \
xmlto \
asciidoc \
hmaccalc \
elfutils-libelf-devel \
zlib-devel \
binutils-devel \
newt-devel \
python-devel \
'perl(ExtUtils::Embed)' \
bison \
genisoimage \
createrepo \
ncurses-devel \
yum-utils

これもダウンロードしたDIGITAGEスクリプトの中に入っている「install-rpms.sh」を使うと楽。

 

カーネルソースのダウンロード&展開

#cd /root
#wget http://vault.centos.org/6.5/updates/Source/SPackages/kernel-~
#rpm -ivh kernel-~

 

カーネルパラメータの編集

specファイルの編集

#cd ~/rpmbuild/SPEC</div>
#vi kernel.spec</div>
---------------------------------------------------------------
# % define buildid .local</div>
   ↓このように修正</div>
%define buildid .nonPAE</div></pre>
---------------------------------------------------------------

SOURCEツリー生成

#rpmbuild -bp --target=$(uname -m) kernel.spec

 

これで rpmbuild 以下に
BUILD, BUILDROOT, RPMS, SOURCES, SPECS, SRPMS
ディレクトリができる。

make menuconfigの実行

#cd /root/rpmbuild/BUILD/kernel-2.6.32-431.1.2.el6/linux-2.6.32-431.1.2.0.1.el6.nonPAE.i686

#make oldconfig

#make menuconfig

 

下記のような画面が表示されるので、順次設定していく。
下記には、とりあえずPAEじゃないPCへの対応しか設定していないが、その他のカーネルパラメータの設定も同時に行っても良いかと思う。

が、

実は落とし穴がある。
ここらは後日、カーネルがアップデートされた時の対応の際に書こうと思う。

 

とりあえず先へすすもう。

 

「Processor type and features」 を選択

Image

 

「High Memory Support (64GB)」を選択

Image

 

「4GB」 を選択

Image

 

High Memory Support の値が「(4GB)」に変更されていることを確認

Image

 

変更を確定させる

Image

 

カーネルコンパイル

ダウンロードしたDIGITAGEスクリプトの中に入っている「build-kernel.sh」を実行する。
このスクリプトの中で、rpmbuild -bb までやってくれるようだ。

#cd /root
#sh build-kernel.sh

注).
このスクリプト「build-kernel.sh」を直接実行すると、上で変更したkernel.specファイルの内容が反映されない(nonPAEと記述した内容が反映されない)。
これは、このスクリプト「build-kernel.sh」内でkernel.specの内容を変更しているため。
気に入らないときにはスクリプトを変更しよう。

 

非PAE用CentOSインストール用イメージの作成

CentOS6 最小構成インストールDVDをセットしてマウントする。

#mount /dev/cdrom /mnt

ダウンロードしたDIGITAGEスクリプトの中に入っている「build-iso.sh」を実行してインストールイメージのISOファイルを作成する。

#cd /opt
#cd /root
#sh build-iso.sh

 

対象PCへインストール

DVDメディアの作成

/optディレクトリにインストールイメージのISOファイルが「boot.iso」のファイル名でできあがっているので、これをDVDに焼く。
焼く方法は何でも良い。
ボクは一旦VMwwareゲストOSからWindows PCへSFTPを使って「boot.iso」ファイルを引っ張り出し、「CD Burner XP」を使ってDVD-Rに焼く手段をとった。

あとは、できあがったDVD-Rを対象PCで起動させ、普通にCentOS6 をインストールするだけ。

 

さてさて

 

ここでボクはハマったのでメモを残しておく。

ボクがインストールに使用した TOSHIBAのdynabook Satellite J32 は、CentOS6を起動させるときに次のオプション

ipmi_si.trydefaults=0

が必要になる。

これを入れないと、OS起動時に

IPMI BT: timeout in WR_CONSUME [ H2B ] 1 retries left
:
failed 2 retries, sending error response

のメッセージが出て先にすすまない現象が発生してしまう。

よって、OS起動時に GRUBメニューで[TAB]キーを押し、表示されたコマンドラインの後ろに「ipmi_si.trydefaults=0」を入力して起動させる。
(GRUBメニュー編集時はキーボードが英語配列になっているので注意)

 

対象PCでやること

  • yumでカーネルがアップデート(インストール)されてしまうのを防ぐ
    独自にコンパイルしたカーネルをインストールしたので、yumでCentOSが提供しているPAE対応用のカーネルをアップデートされてしまうと動かなくなってしまう。
    これを防ぐために、「yum.conf」に一行加える。
# vi /etc/yum.conf
---------------------------------------------------------------
 :

distroverpkg=centos-release
exclude=kernel* <--------------------------------- これを追記

# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
 :
---------------------------------------------------------------

 

  • grub.confの変更
    TOSHIBA dynabook Satellite J32の場合、上記ブートオプションをgrub.confに追記させる必要がある。
#vi /boot/grub/grub.conf
---------------------------------------------------------------
 :
title CentOS (2.6.32-431.el6.NOPAE.i686)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-431.el6.NOPAE.i686 ro root=/dev/mapper/VolGroup-lv_root nomodeset rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet ipmi_si.trydefaults=0
        initrd /initramfs-2.6.32-431.el6.NOPAE.i686.img
 :
---------------------------------------------------------------

 

カーネルアップデート時の対応

さて、インストールはこれでできるのだが、このままではカーネルがアップデートされた場合、yumでは更新を反映することができない。

アップデートされたカーネルを再びコンパイルして独自カーネルのrpmを作る必要がある。

また、カーネルがアップデートされたことを知る仕組みも必要だろう。

 

これらの対応を次回書いていくつもり。

 


You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

AddThis Social Bookmark Button

Leave a Reply