Goal
- デバイスなどのモジュールをビルドするために必要なkernel-develをインストールする
- CentOS(rpmベースのOS)で、Linux kernel-develをkernelとの整合性を保ってインストールする
- ちなみにkernel-develはモジュールのビルドなどに必要な最低限のソースが入っているらしい
Manual
yum.conf編集
exclude=kernel*と記述されている箇所をコメントアウトする
/etc/yum.conf
# exclude=kernel*
yum install
sudo su -
yum install kernel-devel
##
## install確認
##
rpm -qa | grep kernel-devel
# kernel-devel-2.6.32-504.3.3.el6.x86_64
# kernel-develがインストールされたことを確認
ls -l /usr/src/kernels
# drwxr-xr-x 22 root root 4096 Jan 17 14:02 2.6.32-504.3.3.el6.x86_64
# ソースは上のディレクトリにインストールされる
kernelとkernel-develのバージョンを確認
yum installだと新しいkernel-develをとってきてしまい、必ずしもkernelのバージョンと一致しない.
kernelとkernel-develのバージョンが整合しないとlib/modulesのパスのシムリンクがリンク切れになってしまう.
##
## 2.6.32-431と2.6.32-504.3.3のようにバージョンが一致しない場合がある
##
uname -r
# 2.6.32-431.el6.x86_64
rpm -qa | grep kernel-devel
# kernel-devel-2.6.32-504.3.3.el6.x86_64
##
## バージョンが一致しないと、以下の/lib/modules/${VERSION}/buildのシムリンクが切れ、
## kernelモジュールのビルドができなくなる
##
ls -l /lib/modules/2.6.32-431.el6.x86_64/build
バージョン指定でkernel-develをインストール
既にkernel-develがインストールされている場合は、削除する
##
## 誤ったバージョンを変数に格納
##
KERNEL_DEVEL_WRONG_VERSION=`rpm -qa | grep kernel-devel`
echo ${KERNEL_DEVEL_WRONG_VERSION}
# kernel-devel-2.6.32-504.3.3.el6.x86_64
##
## rpmコマンドで削除
##
rpm -e --nodeps ${KERNEL_DEVEL_WRONG_VERSION}
##
## remove確認
##
rpm -qa | grep kernel-devel
# インストールされていたバージョンが消える
ls -l /usr/src/kernels/
# インストールされていたバージョンが消える
新しいkernel-develをバージョン指定でinstall
##
## 正しいバージョンを変数に格納
##
KERNEL_VERSION=`uname -r`
KERNEL_DEVEL_EXPECTED_VERSION=kernel-devel-${KERNEL_VERSION}
echo ${KERNEL_DEVEL_EXPECTED_VERSION}
# kernel-devel-2.6.32-431.el6.x86_64
##
## 以下のサイトなどからrpmパッケージを探し、リンク先を保存し、ダウンロードする
## http://rpm.pbone.net/
##
cd /usr/local/src
wget "ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/6.4/x86_64/updates/security/${KERNEL_DEVEL_EXPECTED_VERSION}.rpm"
ls -l ${KERNEL_DEVEL_EXPECTED_VERSION}.rpm
# downloadできたことを確認
rpm -ivh ${KERNEL_DEVEL_EXPECTED_VERSION}.rpm
# インストール実行
## install確認
rpm -qa | grep kernel-devel
# 正しいバージョンがインストールされる
ls -l /usr/src/kernels/
# 正しいバージョンがインストールされる
ls -l /lib/modules/${KERNEL_VERSION}/build/
# シムリンク先が存在すること
Environment
uname -a
# Linux *** 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/issue
# CentOS release 6.5 (Final)
# Kernel \r on an \m