CentOS 7が出る直前に構築してしまったCentOSの6.xサーバ
色々動かしちゃってていまさらクリーンインストールして環境再構築するのが面倒
一応アップグレードという手段もあるけれど、その最中に小一時間ほど止まる事態ってのは避けたい
ただ、CentOS 6の場合は標準だとdockerがらみで色々とハマるポイントも多く、ログには「カーネル古すぎ、3.8以上使って」という意味の文言が残ってたりするし、カーネルアップデートしてから1回リブートかけるぐらいのダウンタイムぐらいは許容範囲だったので思い切ってカーネルを再構築することに
今回はカーネルを素のままインストールするのではなく、ディストリビューションの流儀に合わせてRPMを作ってインストールする形で
というわけで、rpm作りの環境を整えます
sudo yum install rpm-build
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
以上で最低限のRPMパッケージの構築環境は完成
最近のカーネル(現在のところは3.18)をここから持ってきて、~/rpmbuild/SOURCESに展開
cd ~/rpmbuild/SOURCES
tar xvJf linux-3.18.tar.xz
cd linux-3.18
現在のカーネルの設定をベースにするための.configファイルをもらってくる
cp /boot/config-2.6.x-y.z.el6.x86_64 ./.config
make menuconfig
たいていはデフォルトのままでいいのだけど、Dockerを使う上でハマると思うのがiptablesのモジュール不足
これでやりなおし(´・ω・`)
もう面倒くさかったので、これでもかとばかりにiptables関連を色々盛ってビルド
具体的には
Networking support -> Networking options -> Network packet filtering framework (Netfilter) -> Core Netfilter Configuration
の**"addrtype" address type match support**周辺と
Networking support -> Networking options -> Network packet filtering framework(Netfilter) -> IP: Netfilter Configuration
のiptables NAT support周辺をおさえておけば問題はなさそう
あとはmake
最近は便利になったもので
make rpm
とすれば、SPECファイルからrpmを作った時と同様に~/rpmbuild/RPMS/CPUのアーキテクチャ/にrpm形式で
- kernel
- kernel-devel
- kernel-headers
の3つのパッケージを作ってくれるので、それらを
sudo rpm -Uvh ...
でインストールすればおk・・・というところでハマりポイント
エラー: 依存性の欠如:
kernel-drm-nouveau = 16 は (インストール済み)xorg-x11-drv-nouveau-1:1.0.10-1.el6.x86_64 に必要とされています
ぐぐったらNvidiaのVGA関連のドライバ云々ということですが
そんなパッケージあるんかねえ・・・と思ってあまり期待はせずに
sudo yum install kernel-drm-nouveau
と叩いてみたら、kernel-debugがインストールされ、それが終わったら無事に自前ビルドしたrpmからカーネルも入るように
あとはgrubの設定をいじって再起動
結局、費やした時間と調べる労力を考えると、別ディスクで運用してる/homeディレクトリ以外は特にバックアップ要らないので、周りの早くしろという無言のプレッシャーに耐えながらCentOS7をクリーンインストールして再構築したほうが色々幸せだったのでは?という・・・