本文へジャンプします。

ニフティクラウド探検隊 お手軽ワンライナーでカーネルアップデートしてみた。【取扱注意!】

こんにちは。
ニフティでインフラを守るお仕事をしている五月女です。

Photo_2
「前回の記事」では、ニフティクラウドで提供されるサーバの中身について独自に調査して紹介しました。
今回は、前回の記事の中で「ニフティクラウド標準提供OSのココに注意!」として紹介した、「カーネルアップデートが出来ないよ!」という点について、その対応策を考えます。

まず、最大の障壁だったカーネルアップデート自体が禁止事項に含まれる点については、
なんと!このブログの公開時点で規約が改訂され、カーネルのアップデート行為が禁止事項から外してもらえるそうです。
=>【ニフティクラウド サービス仕様 =>禁止事項=>禁止行為

オイラ頑張った!! (`・ω・´;)bビシッ!!(何を?

あとはテクニックでなんとかなりそうですね。
そこで今回は、ニフティクラウドで「カーネルアップデートする方法」について紹介します。

※内容は、2011年07月現在時点の情報です。

■なぜ簡単にカーネルアップデート出来ないの?

<

p>そもそも、なぜカーネルアップデートが禁止事項に含まれてしまっていたのでしょうか?
これは前回の記事にも書きましたが、ニフティクラウドがその基盤としてVMwareを使ってる事が影響していると考えられます。
通例として、VMware上に作成したサーバは、仮想化のオーバーヘッドを最小限にするために「準仮想化ドライバ」と呼ばれる、OSのインターフェースをVMwareに最適化するドライバを導入します。
一般的に仮想サーバは、通常の物理サーバに比べてネットワークやディスク等のI/O性能が悪くなりがちですが、この「準仮想化ドライバ」を導入する事で物理サーバに極めて近い性能を出す事が可能になります。

しかし、こうしたネットワークインターフェースカードやSCSIコントローラの「準仮想化ドライバ」は実行中のカーネルに対して個別に適用しているため、普通にカーネルアップグレードをしてしまうと、新しいカーネルで「準仮想化ドライバ」が読み込まれないまま起動してしまい、通信やディスクへの読み書きが出来なくなってしまいます。

Photo_8

VMwareを自前で利用している場合は、カーネルアップデート後、コンソールやAPIを用いて新しいカーネルにドライバを再適用する事でこの問題を回避します。
しかし、ニフティクラウドの様に運用が高度に隠蔽されたクラウドな世界では、運用をまったく気にしなくて良い代償として、こうした細かなオペレーションを実施する事が難しくなっています。
こうした事から「禁止事項」に含まれていたのだと考えられます。

でも、カーネルアップデートが出来ないと、新しい機能が使えなかったり、セキュリティの問題に対応出来ないなど、困った事が多々あります(´・ω・`)

そこで今回は、ニフティクラウドでも使えるカーネルアップデート方法を紹介します。

注意事項

これから紹介するテクニックは失敗するとOSが起動しなくなりますので、その危険性を理解した上でご利用ください。
また、実行に失敗してOSが起動しなくなっても復旧はいたしかねます。
サービス環境など、本番環境で実施する際には、バックアップを取得するなど細心の注意が必要です。
可能なら、miniのサーバーを”従量制”で構築して、検証をしてから実行してください。

■事前準備

カーネルアップデートするサーバの状態を確認しましょう。

vmware-toolsは動作していますか?

コマンドをたたくと確認できます。

# service vmware-tools status
vmtoolsd is running
root権限は使えますか?

sudo や su が使える状態になっているか確認してください。

外付けのディスクは取り外していますか?(NFS等を含む)

<

p>取り外されていないと困ったことになるので、外しておいてください。
起動時に下記以外のディスクをマウントする設定が入っていないか確認してください。

# cat /etc/fstab
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SWAP-sda2         swap                    swap    defaults        0 0

■アップデート実行

サーバの状態を確認

対象サーバへログインしroot権限を取得し、アップデート前のバージョンを確認する。

# uname -a
Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Jan 21 10:41:14 EST 2009 x86_64
# cat /etc/redhat-release
CentOS release 5.3 (Final)
yum.confの設定変更(カーネルアップデートを許可する)

yum.confを編集し、12行目の「 exclude=kernel.* 」を「 #exclude=kernel.* 」としてコメントアウトします。

# vi /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
#exclude=kernel.*
# Note: yum-RHN-plugin doesn't honor this.
metadata_expire=1h
installonly_limit = 5
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
yum updateの実行(カーネルを含むモジュールのアップデート)

通常のアップデートを実行

# yum update
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: ftp.yz.yamagata-u.ac.jp
* epel: ftp.yz.yamagata-u.ac.jp
* extras: ftp.yz.yamagata-u.ac.jp
* updates: ftp.yz.yamagata-u.ac.jp
base                                                      | 2.1 kB     00:00
extras                                                    | 2.1 kB     00:00
extras/primary_db                                    | 260 kB     00:01
updates                                                  | 1.9 kB     00:00
updates/primary_db                                  | 625 kB     00:00
Excluding Packages in global exclude list
Finished
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package apr.x86_64 0:1.2.7-11.el5_6.5 set to be updated
Total download size: 368 M
Is this ok [y/N]:y ※yを押下
Downloading Packages:
 ※だーっと流れる
 
Complete!
#
vmware-toolsを新しいカーネルに再適用するお手軽ワンライナーを実行

下記のワンライナーを実行!※実行するとサーバが再起動されます。

# cp -p /etc/rc.d/rc.local /etc/rc.d/rc.local.org && 
echo "/usr/sbin/vmware-tools-upgrader -p "-d" && 
/bin/mv /etc/rc.d/rc.local.org /etc/rc.d/rc.local && 
/sbin/shutdown -r now" >> /etc/rc.d/rc.local && 
shutdown -r now

※コピー&ペーストすると、スペースが全角になったりする時がありますので、下記リンク先からtxtファイルを開いて実行する事をオススメします。
=>【「kernelUpdate.txt」をダウンロード

起動完了を待つ

※10分程度かかることもありますので、気長に待ちましょう。。。

Photo_8

■アップデート完了を確認

サーバの状態を確認

対象サーバへログイン。root権限を取得し、アップデート後のバージョンを確認

# uname -a
Linux localhost.localdomain 2.6.18-238.9.1.el5 #1 SMP Tue Apr 12 18:10:13 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/redhat-release
CentOS release 5.6 (Final)

※「2.6.18-238.9.1」や「5.6 (Final)」となっているところは、アップデート実行時に提供されているバージョンによって異なります。
基本的にアップデート前よりも数字が大きくなっていれば問題なし。

アップデート後のカーネルで「準仮想化ドライバ」が読み込まれているか確認

# modprobe -l | grep vm
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/isdn/hardware/avm/avm_cs.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/isdn/hisax/avma1_cs.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/isdn/hardware/avm/b1.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/isdn/hardware/avm/b1dma.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/isdn/hardware/avm/b1pci.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/isdn/hardware/avm/b1pcmcia.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/isdn/hardware/avm/c4.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/usb/serial/navman.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/isdn/hardware/avm/t1pci.ko
/lib/modules/2.6.18-238.9.1.el5/misc/vmblock.ko
/lib/modules/2.6.18-238.9.1.el5/misc/vmci.ko
/lib/modules/2.6.18-238.9.1.el5/misc/vmhgfs.ko
/lib/modules/2.6.18-238.9.1.el5/misc/vmmemctl.ko
/lib/modules/2.6.18-238.9.1.el5/misc/vmxnet.ko
/lib/modules/2.6.18-238.9.1.el5/misc/vmxnet3.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/xenpv_hvm/balloon/xen-balloon.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/xenpv_hvm/platform-pci/xen-platform-pci.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/xenpv_hvm/blkfront/xen-vbd.ko
/lib/modules/2.6.18-238.9.1.el5/kernel/drivers/xenpv_hvm/netfront/xen-vnif.ko

※特に太字の部分があるかどうか確認してください。
該当の行が無い場合、ワンライナーの実行に失敗している可能性がありますので、再度ワンライナーを実施してください。

yum.confの設定変更(カーネルアップデートを不許可に戻す)

<

p>不意にカーネルアップデートしてしまう事故を防ぐため、カーネルアップデートを不許可状態に戻します。
今度は、12行目の「 #exclude=kernel.* 」を「 exclude=kernel.* 」としてコメントアウトを削除します。

<

p>

# vi /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude=kernel.*
# Note: yum-RHN-plugin doesn't honor this.
metadata_expire=1h
installonly_limit = 5
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
カーネルアップデート完了!

お疲れ様でした。

■ワンライナーの中身解説

最後に、ワンライナーの中でどんな事をやっているのか簡単に説明します。

  • (1)OSを起動した際に最初実行されるコマンド群「/etc/rc.d/rc.local」を「/etc/rc.d/rc.local.org」としてバックアップ
  • cp -p /etc/rc.d/rc.local /etc/rc.d/rc.local.org
    
  • (2)OS起動時に実行したいコマンドを設定
    • VMwareのドライバ等をカーネルに対してインストールするコマンド
      オプションの -p “-d” は「デフォルト設定でインストール」を明示し、インストール中断を抑止するおまじない
  • /usr/sbin/vmware-tools-upgrader -p "-d"
    
  • (3)書き換えた rc.local をオリジナルに戻す
  • /bin/mv /etc/rc.d/rc.local.org /etc/rc.d/rc.local
    
  • (4)ドライバ適用のための再起動!
  • /sbin/shutdown -r now
    
  • (5)上記の内容をrc.local に書きこむ
  • >>   /etc/rc.d/rc.local
    
  • (6)アップグレードしたカーネルを適用するために再起動実行
  • shutdown -r now
    

■まとめ

いかがでしょうか。
駆け足で紹介しましたが、意外と簡単にカーネルアップデートをする事が出来る事がお分かりいただけたかと思います。
今回の手順を使ってカーネルアップデートをする事で、EXT4やBtrfsといったより先進的で高速なファイルシステムを安定利用する事や新しい機能を利用する事が可能になります。
また「準仮想化ドライバ」をキチンと適用する事で、カーネルアップデート後も安価で高速なサーバを利用する事が可能です。
ぜひお試しください。

ニフティクラウド 導入相談窓口
ニフティクラウド 無料セミナー

閉じる

閉じる

クラウドブログ編集部

クラウドブログ編集部

ニフティクラウド ユーザーブログ編集部のアカウントです。 編集部からのお知らせや、レギュラーライター以外のゲストによる寄稿記事を掲載していきます。

浜中 慶

浜中 慶

1980年、神奈川県生まれ。2003年ニフティ入社。 ポータルサイト開発を中心に、音楽配信サービス、CGMサービスなど様々なプロジェクトに企画/デザイン/システム担当として参加。現在は@niftyのポータルサービス向けコンテンツ管理システムの企画/開発/運用を担当。

吉田 雄哉

吉田 雄哉

株式会社co-meetingの創業メンバー。「取締役&External- facing Technologist」と名乗り新しいIT技術を広く伝える活動とWebアプリケーション開発を行う毎日。パッケージベンダーでのSaaS立上げ・製造業の情報システム部門で企画やPM・受託開発と従事してきたため、ベンダーサイドとユーザサイド の両方の視点を持ち合わせる。

石田 健亮

石田 健亮

株式会社ドリーム・アーツで小売事業者向けSaaS「Shopらん」を企画、開発。メインの仕事はプログラマーだがサーバー管理や営業もこなすユーティリティプレイヤー。最近好きな事はパフォーマンスチューニング。特に並列化プログラミングがマイブーム。キライなことはデータセンターでの作業。騒音と乾燥が弱点。ニフティクラウドでデータセンターに行く必要が無くなったことが本当の利点だ と思っている。

五月女 雄一

五月女 雄一

ニフティでは「インフラを守る簡単な様で奥が深いお仕事」をしています。 夢はインフラの気持ちが読めるエンジニアになること。

わたなべ かずひろ

わたなべ かずひろ

専門学校卒業後、ソフトウェア開発会社で電力系統制御システムの開発に従事。その後、CD-ROM等マルチメディア系PCソフトの開発を経て、1998年フリーランスに。 2000年8月に株式会社イーツーの設立に参画。携帯を含む様々なWeb系のシステム開発に携わる。現在はiPhone/Androidアプリなどの開発も手がけている。

市角

市角

ニフティクラウドのコントロールパネル設計・開発をメインに、たまにインフラの運用やお手伝いもやっていたりします。コントロールパネルや新機能の活用方法、アイデアなどを中心に書いていく予定です。

仲山 昌宏

仲山 昌宏

歌って踊れるインフラエンジニア兼、PHPもRubyもJavaも書くPerl使い。 物理サーバの運用に飽きて、フルラックに格安サーバ詰めて自宅プライベートクラウドを構築中。 今年は個人的には分散処理を攻めていきます。

猪飼 賢広

猪飼 賢広

1984年、愛知県名古屋市生まれ。大学は福島県にある某大学。2008年ニフティに入社。 開発系部署に配属後、主に各種テーマサイト開発のシステム面調整、開発進行管理役などとして参加。 現在もPC・ガラケーサイトの開発まわりを担当。インフラまわりを触る案件にも携わっており、日々修行中。 好きな芸人はなかやまきんに君とレイザーラモンRG。

久江 裕之

久江 裕之

ニフティクラウドのインフラ運用、OS提供の仕事をしています。 新しいOSやイメージが出る時にこのブログでご紹介いたします。入社5年目。一流のインフラエンジニアを目指して日々勉強中。

竹内 豪

竹内 豪

ニフティクラウド エンジニア

山口

山口

ニフティクラウドの基盤設計、新サービス/アライアンス/インフラ企画、その他雑用全般を担当しています。 クラウドに欲しい機能や、こんなふうに使ってほしいという想いが共有できれば良いですね。

芳中 隆幸

芳中 隆幸

ニフティクラウドの開発、運用を担当しています。

酒井 浩平

酒井 浩平

ニフティクラウドの中にいます。 ネットワークまわりの運用・開発や自動化などに取り組んでいます。 すべてのエンジニアを幸せにすることを目指しています。

higebu

higebu

ニフティクラウド IaaSのエンジニアです。 ネットワーク、DRサービス with VMware vCloud® Air™ Technology辺りの担当をしています。

武田

武田

ニフティクラウドの開発・運用を担当しています。 各種機能の内容についてなどで執筆させていただく予定です。

森藤 大地

森藤 大地

データに関する仕事が好きです。

宮原徹

宮原徹

日本仮想化技術株式会社 代表取締役社長兼CEO。仮想化技術に関するコンサルタントとして長年活動しており、特にベンチマークテストによる性能評価を得意としている。

荒谷翔

荒谷翔

株式会社はてなでMackerelのセールスデベロッパーとして勤務しています

東條 望

東條 望

2014年にニフティへ中途入社。 入社後から現在まで、ニフティクラウドのサービス企画・開発を担当しています。 各サービスの紹介を執筆させていただく予定です。