よくきたはてダ このページをアンテナに追加 RSSフィード Twitter

2012-11-07

さくらのVPSで複数台の契約するときの注意点

記事自体の注意点

これは2012年10月末位の経験と周囲の情報をもとにした話なので,のちに状況など変化している可能性があります

要約

この記事はさくらVPSを複数台借りたときちょっと困ったこと,具体的にはVPSハイパーバイザーが同一筐体になってしまった.ということに関する諸処まとめです.

VPSハイパーバイザーが同一筐体になると何が困るの?

そもそもの話です.

VPSはいわゆる仮想化技術を使っていてそれ自体はHW障害からは縁が遠いような気がしますね.

でもHDDならRAID 1で,NICならボンディングで実運用上はある程度耐障害性を確保できますが,たとえば「メイン基盤が壊れた」など冗長化が難しい部分が壊れた際にはもろ影響を受けます

実際の報告ベースだと軽く検索すると色々出てきます

色々と書いていますが台数を想像すると決して多いとは感じませんが…

さくらVPS 2012年

いまさくらVPSは春にリリースされたバージョン3ということになっているようです.

これはリリース当初,F5的(連続的)契約をすると,間に他社が入らなければ同一筐体に順番にVPS作成されるようになっていたようです.これを仮に「F5契約連番問題」としましょう.

結果,耐障害性をある程度確保するためにActive/Standby×nの構成を作り,耐障害性をあげていても,上記のような冗長化できないハードウェア障害などが発生すると全滅することがあります

さくらVPS 2012年

夏というか初夏ですが,つい@sakura_prに粘着しちゃったところ,このF5契約連番問題は解決したような回答をいただきました.PRアカウントなのに変なもの送ってすみません!!

さくらVPS 2012年

さて先日F5契約連番問題の解決を伺ったのである機会でさくらVPSをF5契約してみました.

そうしたらやっぱり出たんですね.連番.ただし多少はばらけていました.

そこで今度はちゃんとサポートに粘着しました.

サポートの回答としては簡単に書くと下記のとおりです.

  1. 以前のように連続した契約で連番的になるようなことはない
  2. ただ限られたリソース内で払い出しをするため,結果として同一筐体になる可能性はある
  3. 同一筐体かどうかはIPアドレスが連番かどうかで確認できる(それ以外では確認できない)

下記はサポートとのやり取りで引き出せた情報だったり,個人的な主観だったりが入り交ざっています

うまく読み分けてください.

以前のように連続した契約で連番的になるようなことはない

これは確かにそうかもしれません.

実際に連番でもなく間に他のお客が入って飛んだというより全然違うセグメントに行ったかな?という感じもありました.

ただ限られたリソース内で払い出しをするため,結果として同一筐体になる可能性はある

ここの「限られたリソース」当たり前なのですが,実際問題でVPSの払い出しに使えるカード(即サービスイン可能なリソース数)はそんなに多くないんじゃないでしょうか?

どれ位のスピード契約が進行していくのかわからないので正確なことは全く分かりませんが,複数VPS適当に言って3割くらい?)が同一筐体に入ってしまいました(同一筐体のものが複数セットできた).

これはサポートに問い合わせてどれがどれか同一筐体かどうか何とか教えてもらえました.

同一筐体かどうかはIPアドレスが連番かどうかで確認できる(それ以外では確認できない)

これはダウトです.

IPアドレスが連番でも筐体がもつ最後IPアドレスと次の筐体が持つのIPアドレスという可能性があります

1個飛ばしからといって同一筐体ではないという裏付けにもなりません.

まり「利用者が見える譲歩うや通常触れるUIだけで同一筐体かどうか確認する手段はない」ということになります邪推ができる程度).

どうしたらいいか?

正解はないと思いますが多少の努力ごっこはできると思います

お試し期間を活用する

これはサポートからの提案です.

IPアドレスが怪しいと思ったらVPSインスタンスを作り直すことです.

ただし注意しなければいけないのはこれはクレジットカード決済でしか利用できません(カード決済以外は試用期間という状態がない)

なるべく契約契約の間で時間を開ける

この手段はむしろ連番で払い出しをしてくれるなら結構確率が上がったのかなーという気がしますが,

「近いタイミングでの契約は同一筐体になる確率が高い」ということであれば時間をあければ他のお客がその筐体を利用開始してくれることが期待できます

どれ位開ければいいかはわかりませんが,1日や数日開ければいいかもしれません(適当

また,お試し期間を併用するとよりGOODだと思います

リージョンを使い分ける

これも筐体が別れる可能性が高くなるだけですが,2Gプランならリージョンを選択できます

これを活用すれば同一筐体ではなくなる可能性が高くなるかもしれません.

これってさくらVPSだけの問題?

おそらくですが,低価格VPSの多くは同様な問題をはらんでいるんじゃないでしょうか?

おそらくさくらVPSストレージローカルストレージSANなどではないと思います

ストレージSANに載っていれば一旦落ちてもすぐに別の筐体で再起動してもらえる可能性はあるかもしれません(が,低価格VPSSANとかあるんかなーどうなんだろうなー).

まとめ

ないです(照

もう疲れてきました(照

前回の記事から約1年,すっかり自分のはてダ忘れていました(照

また思い出したら次の記事を書くかもしれません.

それでは.あでゅー

追記:

大事なことを書き忘れていました.

この件に関してさくらのサポートにはとても親切にいろいろサポートしていただきました.

たまたま特にいい人にあたったのかもしれませんが,今のところサポートでハズレを引いたことが無くてそこは助かっています

他社で同様の問題があっても(多くの提供企業であると思っています)同レベルにサポートしていただけているかはわかりません.

主観ですが,決して価格バランス上「高い!!」というものでもなく,提供サービスに不満点があるのは当たり前のことで今後に期待させていただきます!!

2011-11-13

inodeが枯渇するとどうなるか

何年も前にinode枯渇問題に直面したことが何度かあったので,結果は知っているのですが,ちょっと詰まってしまった別件があり,現実逃避目的でとりあえず息抜きで試してみました.

どうみてもトーシロの検証サーセン

[root@centos6 ~]# dd if=/dev/zero of=$PWD/dummy.dd bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 3.81335 s, 27.5 MB/s
[root@centos6 ~]# mkfs.ext3 $PWD/dummy.dd -N 100
mke2fs 1.41.12 (17-May-2010)
/root/dummy.dd is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
104 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
8 inodes per group
Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729

Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@centos6 ~]# mkdir /mnt/dummy/
[root@centos6 ~]# mount -t ext3 -o loop $PWD/dummy.dd /mnt/dummy/
[root@centos6 dummy]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/mapper/VolGroup02-lv_home on /home type ext4 (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/loop0 on /mnt/dummy type ext3 (rw)
[root@centos6 ~]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/VolGroup-lv_root
                      5.5G  2.9G  2.4G  55% /
tmpfs                 372M     0  372M   0% /dev/shm
/dev/mapper/VolGroup02-lv_home
                       40G   20G   18G  53% /home
/dev/sda1             485M   49M  411M  11% /boot
/dev/loop0            100M  5.6M   90M   6% /mnt/dummy
[root@centos6 dummy]# df -i
Filesystem            Inodes   IUsed   IFree IUse% マウント位置
/dev/mapper/VolGroup-lv_root
                      363600   81530  282070   23% /
tmpfs                  95147       1   95146    1% /dev/shm
/dev/mapper/VolGroup02-lv_home
                     2621440  526347 2095093   21% /home
/dev/sda1             128016      44  127972    1% /boot
/dev/loop0               104      11      93   11% /mnt/dummy
[root@centos6 ~]# cd /mnt/dummy/
[root@centos6 dummy]# for I in `seq 1 100`; do touch ${I}; done
touch: cannot touch `94': デバイスに空き領域がありません
touch: cannot touch `95': デバイスに空き領域がありません
touch: cannot touch `96': デバイスに空き領域がありません
touch: cannot touch `97': デバイスに空き領域がありません
touch: cannot touch `98': デバイスに空き領域がありません
touch: cannot touch `99': デバイスに空き領域がありません
touch: cannot touch `100': デバイスに空き領域がありません
[root@centos6 dummy]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/VolGroup-lv_root
                      5.5G  2.9G  2.4G  55% /
tmpfs                 372M     0  372M   0% /dev/shm
/dev/mapper/VolGroup02-lv_home
                       40G   20G   18G  53% /home
/dev/sda1             485M   49M  411M  11% /boot
/dev/loop0            100M  5.6M   90M   6% /mnt/dummy
[root@centos6 dummy]# df -i
Filesystem            Inodes   IUsed   IFree IUse% マウント位置
/dev/mapper/VolGroup-lv_root
                      363600   81530  282070   23% /
tmpfs                  95147       1   95146    1% /dev/shm
/dev/mapper/VolGroup02-lv_home
                     2621440  526347 2095093   21% /home
/dev/sda1             128016      44  127972    1% /boot
/dev/loop0               104     104       0  100% /mnt/dummy

なぜinodeを100個で指定して104個できるのか,なんで最初から11ほど消費しているのかは知りません.

いずれ必要になれば調べてみようと思います.

2011-11-09

パッケージ名がわからなくてもyumでインストールできる場合の紹介その2

はてぶろを招待してもらえずすねている id:elf です.別に気にしていないんだからね!!

ってなんか懐かしいノリなんだけどどうでもいいです.

約1ヶ月前に「パッケージ名がわからなくてもyumインストールできる場合の紹介」というのを書きました.

今回はもうちょいシンプルなやり方です.

一般的にRPMパッケージはインストールに必要な依存関係の情報ファイル内に持ってることはよく知られています

ではSRPMは? っということで調べてみましょう.

[elf@centos6 SRPMS]$ rpmbuild --rebuild transifex-1.1.0-4.fc17.src.rpm
transifex-1.1.0-4.fc17.src.rpm をインストール中です。
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
エラー: ビルド依存性の失敗:
        python-markdown は transifex-1.1.0-4.el6.noarch に必要とされています
        django-contact-form は transifex-1.1.0-4.el6.noarch に必要とされています
        django-pagination は transifex-1.1.0-4.el6.noarch に必要とされています
        django-tagging は transifex-1.1.0-4.el6.noarch に必要とされています
        django-notification は transifex-1.1.0-4.el6.noarch に必要とされています
        django-profile は transifex-1.1.0-4.el6.noarch に必要とされています
        Django-south は transifex-1.1.0-4.el6.noarch に必要とされています
        django-piston は transifex-1.1.0-4.el6.noarch に必要とされています
        django-authority は transifex-1.1.0-4.el6.noarch に必要とされています
        mercurial >= 1.3 は transifex-1.1.0-4.el6.noarch に必要とされています

大量に依存関係で引っかかってしまいました.

それでは--requiresで依存関係の情報を調べてみましょう.

[elf@centos6 SRPMS]$ rpm -qp --requires transifex-1.1.0-4.fc17.src.rpm
python-sphinx  
gettext  
python-markdown  
Django  
django-contact-form  
django-pagination  
django-tagging  
django-notification  
django-profile  
Django-south  
django-piston  
django-authority  
mercurial >= 1.3
python-sqlite2  
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1

おっと.ちゃんと出るじゃないですか.

つまり,「$ sudo yum install `rpm -qp --requires transifex-1.1.0-4.fc17.src.rpm`」とやれば必要なパッケージは全部入ってしまいそうです.これは楽チン!!

さて試してみましょう!!

[elf@centos6 SRPMS]$ sudo yum install `rpm -qp --requires transifex-1.1.0-4.fc17.src.rpm`
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * epel: ftp.jaist.ac.jp
 * extras: data.nicehosting.co.kr
 * updates: data.nicehosting.co.kr
Setting up Install Process
Package matching python-sphinx-0.6.6-2.el6.noarch already installed. Checking for update.
Package gettext-0.17-16.el6.x86_64 already installed and latest version
Package matching Django-1.2.7-1.el6.noarch already installed. Checking for update.
No package django-contact-form available.
No package django-pagination available.
No package django-notification available.
No package django-profile available.
No package django-piston available.
No package django-authority available.
No package >= available.
No package 1.3 available.
No package rpmlib(FileDigests) available.
No package <= available.
No package 4.6.0-1 available.
No package rpmlib(CompressedFileNames) available.
No package <= available.
No package 3.0.4-1 available.
Resolving Dependencies
--> Running transaction check
---> Package Django-south.noarch 0:0.7.2-1.el6 set to be updated
---> Package django-tagging.noarch 0:0.3.1-3.el6 set to be updated
---> Package mercurial.x86_64 0:1.4-3.el6 set to be updated
---> Package python-markdown.noarch 0:2.0.1-3.1.el6 set to be updated
---> Package python-sqlite2.x86_64 1:2.3.5-2.el6 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=========================================================================================================================================================================
 Package                                       Arch                                 Version                                     Repository                          Size
=========================================================================================================================================================================
Installing:
 Django-south                                  noarch                               0.7.2-1.el6                                 epel                               227 k
 django-tagging                                noarch                               0.3.1-3.el6                                 epel                                58 k
 mercurial                                     x86_64                               1.4-3.el6                                   base                               1.5 M
 python-markdown                               noarch                               2.0.1-3.1.el6                               base                               118 k
 python-sqlite2                                x86_64                               1:2.3.5-2.el6                               epel                                80 k

Transaction Summary
=========================================================================================================================================================================
Install       5 Package(s)
Upgrade       0 Package(s)

Total download size: 1.9 M
Installed size: 8.7 M
Is this ok [y/N]: y
Downloading Packages:
(1/5): Django-south-0.7.2-1.el6.noarch.rpm                                                                                                        | 227 kB     00:00     
(2/5): django-tagging-0.3.1-3.el6.noarch.rpm                                                                                                      |  58 kB     00:00     
(3/5): mercurial-1.4-3.el6.x86_64.rpm                                                                                                             | 1.5 MB     00:00     
(4/5): python-markdown-2.0.1-3.1.el6.noarch.rpm                                                                                                   | 118 kB     00:00     
(5/5): python-sqlite2-2.3.5-2.el6.x86_64.rpm                                                                                                      |  80 kB     00:00     
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                    1.0 MB/s | 1.9 MB     00:01     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Installing     : mercurial-1.4-3.el6.x86_64                                                                                                                        1/5 
  Installing     : 1:python-sqlite2-2.3.5-2.el6.x86_64                                                                                                               2/5 
  Installing     : django-tagging-0.3.1-3.el6.noarch                                                                                                                 3/5 
  Installing     : python-markdown-2.0.1-3.1.el6.noarch                                                                                                              4/5 
  Installing     : Django-south-0.7.2-1.el6.noarch                                                                                                                   5/5 

Installed:
  Django-south.noarch 0:0.7.2-1.el6          django-tagging.noarch 0:0.3.1-3.el6        mercurial.x86_64 0:1.4-3.el6        python-markdown.noarch 0:2.0.1-3.1.el6       
  python-sqlite2.x86_64 1:2.3.5-2.el6       

Complete!

いくつか抜けがでましたがインストールできました!!

抜けたのはFedora 17開発用のSRPMCentOS 6.0でビルドしようとしたからですね.

これを中途半端といいます.同じネタ2回目なのに同じオチですか.ホントごめんなさい.

しかも

> No package >= available.

> No package 1.3 available.

とか出てます.まぁ実質害はないので気にしないでおきましょう.

とりあえず,ちゃんとビルドできる環境であれば上記のような手順でビルドに必要な環境がそろうと思います.ぜひお試しあれ.

それではあでゅー.

2011-10-06

パッケージ名がわからなくてもyumでインストールできる場合の紹介

CentOS 5の環境とある作業をしているときによくある風景に遭遇しました.

いわゆる「依存関係が解決していないからビルドできんぞヴォケ!!」ですね.

$ rpmbuild -ba SPECS/publican.spec 
エラー: ビルド依存性の失敗:
        perl(Devel::Cover) は publican-2.8-1.noarch に必要とされています
        perl(Module::Build) は publican-2.8-1.noarch に必要とされています
        perl(Test::Exception) は publican-2.8-1.noarch に必要とされています
        perl(Test::Pod) は publican-2.8-1.noarch に必要とされています
        perl(Test::Pod::Coverage) は publican-2.8-1.noarch に必要とされています
        perl(Test::Perl::Critic) は publican-2.8-1.noarch に必要とされています
(snip)
        perl(DBD::SQLite) は publican-2.8-1.noarch に必要とされています
        liberation-mono-fonts は publican-2.8-1.noarch に必要とされています
        liberation-sans-fonts は publican-2.8-1.noarch に必要とされています
        liberation-serif-fonts は publican-2.8-1.noarch に必要とされています
        cjkuni-uming-fonts は publican-2.8-1.noarch に必要とされています
        ipa-gothic-fonts は publican-2.8-1.noarch に必要とされています
        ipa-pgothic-fonts は publican-2.8-1.noarch に必要とされています
        lklug-fonts は publican-2.8-1.noarch に必要とされています
        baekmuk-ttf-batang-fonts は publican-2.8-1.noarch に必要とされています

こまった!! 当然作業を続けるなら必要なパッケージを入れましょう.ってことなんですが,「perl(???:???)」的なものはパッケージ名を調べるのが億劫です.そこでふと駄目もとでなんとなく下記のようにそのままyumに渡してみました.

$ sudo yum install 'perl(DBD::SQLite)'
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package perl-DBD-SQLite.x86_64 0:1.14-3.el5 set to be updated
--> Processing Dependency: perl(DBI) for package: perl-DBD-SQLite
--> Running transaction check
---> Package perl-DBI.x86_64 0:1.52-2.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================
 Package                     Arch               Version                  Repository        Size
================================================================================================
Installing:
 perl-DBD-SQLite             x86_64             1.14-3.el5               epel             277 k
Installing for dependencies:
 perl-DBI                    x86_64             1.52-2.el5               base             600 k

Transaction Summary
================================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 876 k
Is this ok [y/N]: 

おいおいおいおい!! イケるじゃんお兄さん!!

上記見ていると,perl(???:???)は依存関係の解決でパッケージ名が導き出されています

ってことでもしかしてこんな手抜きできちゃう!?

LANG=C rpmbuild -ba SPECS/publican.spec 2>&1 | awk '$0 ~ /is needed by/ { print $1}'
perl(Devel::Cover)
perl(Module::Build)
perl(Test::Exception)
perl(Test::Pod)
perl(Test::Pod::Coverage)
perl(Test::Perl::Critic)
perl(Archive::Zip)
perl(Config::Simple)
perl(DateTime)
perl(DateTime::Format::DateParse)
perl(File::Copy::Recursive)
perl(File::Find::Rule)
perl(File::pushd)
(snip)
perl(DBD::SQLite)
liberation-mono-fonts
liberation-sans-fonts
liberation-serif-fonts
cjkuni-uming-fonts
ipa-gothic-fonts
ipa-pgothic-fonts
lklug-fonts
baekmuk-ttf-batang-fonts

ってことでできちゃいました…!!!!!!

$ sudo yum install `LANG=C rpmbuild -ba SPECS/publican.spec 2>&1 | awk '$0 
~ /is needed by/ { print $1}'`
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
Setting up Install Process
Setting up Install Process
No package perl(Makefile::Parser) available.
Package perl-XML-TreeBuilder-3.09-9.el5.noarch already installed and latest version
No package fop available.
No package batik available.
Package docbook-style-xsl-1.69.1-5.1.noarch already installed and latest version
No package liberation-mono-fonts available.
No package liberation-sans-fonts available.
No package liberation-serif-fonts available.
No package cjkuni-uming-fonts available.
No package lklug-fonts available.
No package baekmuk-ttf-batang-fonts available.
Resolving Dependencies
--> Running transaction check
---> Package ImageMagick-perl.x86_64 0:6.2.8.0-4.el5_5.3 set to be updated
--> Processing Dependency: ImageMagick = 6.2.8.0-4.el5_5.3 for package: ImageMagick-perl
--> Processing Dependency: libMagick.so.10()(64bit) for package: ImageMagick-perl
---> Package ipa-gothic-fonts.noarch 0:003.02-3.1.el5 set to be updated
---> Package ipa-pgothic-fonts.noarch 0:003.02-3.1.el5 set to be updated
---> Package perl-Archive-Zip.noarch 0:1.16-1.2.1 set to be updated
---> Package perl-Config-Simple.noarch 0:4.59-7.el5 set to be updated
---> Package perl-DBD-SQLite.x86_64 0:1.14-3.el5 set to be updated
--> Processing Dependency: perl(DBI) for package: perl-DBD-SQLite
---> Package perl-DateTime.x86_64 1:0.41-1.el5 set to be updated
--> Processing Dependency: perl(Class::Singleton) >= 1.03 for package: perl-DateTime
--> Processing Dependency: perl(Params::Validate) >= 0.76 for package: perl-DateTime
--> Processing Dependency: perl(Params::Validate) for package: perl-DateTime
--> Processing Dependency: perl(Class::Singleton) for package: perl-DateTime
---> Package perl-DateTime-Format-DateParse.noarch 0:0.04-6.el5 set to be updated
(snip)
--> Finished Dependency Resolution

Dependencies Resolved
================================================================================================
 Package                                Arch        Version                  Repository    Size
================================================================================================
Installing:
 ImageMagick-perl                       x86_64      6.2.8.0-4.el5_5.3        base         147 k
 ipa-gothic-fonts                       noarch      003.02-3.1.el5           base         4.1 M
 ipa-pgothic-fonts                      noarch      003.02-3.1.el5           base         4.1 M
(snip)
 perl-Algorithm-Diff                    noarch      1.1902-2.el5             epel          45 k
 perl-AppConfig                         noarch      1.64-1.el5               epel          96 k
 perl-B-Keywords                        noarch      1.06-1.el5               epel         9.6 k
 perl-Class-Singleton                   noarch      1.03-3.el5               epel          17 k
 perl-Clone                             x86_64      0.27-1.el5               epel          14 k
 perl-Config-Tiny                       noarch      2.10-1.el5               epel          21 k
 perl-DBI                               x86_64      1.52-2.el5               base         600 k
 perl-Devel-Symdump                     noarch      1:2.07-3.el5.1           epel          16 k
 perl-ExtUtils-CBuilder                 noarch      0.18-1.el5               epel          28 k
 perl-ExtUtils-ParseXS                  noarch      2.18-1.el5               epel          31 k
 perl-File-HomeDir                      noarch      0.62-1.el5               epel          40 k
 perl-Font-AFM                          noarch      1.19-4.el5               epel          18 k
 perl-IO-String                         noarch      1.08-1.1.1               base          13 k
 perl-List-MoreUtils                    x86_64      0.22-2.el5               epel          59 k
 perl-Module-Pluggable                  noarch      3.60-3.el5               epel          23 k
 perl-Number-Compare                    noarch      0.01-8.el5               epel         7.6 k
 perl-PPI                               noarch      1.118-1.el5              epel         371 k
 perl-Params-Util                       noarch      0.25-1.el5               epel          24 k
 perl-Params-Validate                   x86_64      0.88-3.el5               epel          71 k
 perl-Perl-Critic                       noarch      1.05-1.el5               epel         514 k
 perl-Pod-Coverage                      noarch      0.18-2.el5               epel          25 k
 perl-Pod-Escapes                       noarch      1.04-5.el5               epel          15 k
 perl-Pod-POM                           noarch      0.17-6.el5               epel          57 k
 perl-Pod-Simple                        noarch      3.04-3.el5               epel         184 k
 perl-String-Format                     noarch      1.14-1.el5               epel          10 k
 perl-Sub-Uplevel                       noarch      0.18-2.el5               epel          13 k
 perl-TeX-Hyphen                        noarch      0.140-5.el5              epel          33 k
 perl-Test-Differences                  noarch      0.47-2.el5               epel          16 k
(snip)
Transaction Summary
================================================================================================
Install      76 Package(s)
Upgrade       0 Package(s)

Total download size: 34 M
Is this ok [y/N]: y
Downloading Packages:
(1/76): perl-Number-Compare-0.01-8.el5.noarch.rpm                        | 7.6 kB     00:00     
(2/76): perl-Text-Glob-0.08-2.el5.noarch.rpm                             | 8.9 kB     00:00     
(3/76): perl-B-Keywords-1.06-1.el5.noarch.rpm                            | 9.6 kB     00:00     
(73/76): ipa-gothic-fonts-003.02-3.1.el5.noarch.rpm                      | 4.1 MB     00:00     
(74/76): ipa-pgothic-fonts-003.02-3.1.el5.noarch.rpm                     | 4.1 MB     00:00     
(75/76): urw-fonts-2.3-6.1.1.noarch.rpm                                  | 4.5 MB     00:00     
(76/76): ghostscript-8.70-6.el5_7.3.x86_64.rpm                           | 8.9 MB     00:01     
------------------------------------------------------------------------------------------------
Total                                                           4.9 MB/s |  34 MB     00:06     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : perl-List-MoreUtils                                                     1/76 
  Installing     : perl-Clone                                                              2/76 
  Installing     : perl-Params-Validate                                                    3/76 
(snip)
Dependency Installed:
  ImageMagick.x86_64 0:6.2.8.0-4.el5_5.3        gd.x86_64 0:2.0.33-9.4.el5_4.2                  
  ghostscript.x86_64 0:8.70-6.el5_7.3           ghostscript-fonts.noarch 0:5.50-13.1.1          
  libcroco.x86_64 0:0.6.1-2.1                   libgsf.x86_64 0:1.14.1-6.1                      
  librsvg2.x86_64 0:2.16.1-1.el5                libwmf.x86_64 0:0.2.8.4-10.2                    
  perl-Algorithm-Diff.noarch 0:1.1902-2.el5     perl-AppConfig.noarch 0:1.64-1.el5              
  perl-B-Keywords.noarch 0:1.06-1.el5           perl-Class-Singleton.noarch 0:1.03-3.el5        
  perl-Clone.x86_64 0:0.27-1.el5                perl-Config-Tiny.noarch 0:2.10-1.el5            
  perl-DBI.x86_64 0:1.52-2.el5                  perl-Devel-Symdump.noarch 1:2.07-3.el5.1        
  perl-ExtUtils-CBuilder.noarch 0:0.18-1.el5    perl-ExtUtils-ParseXS.noarch 0:2.18-1.el5       
  perl-File-HomeDir.noarch 0:0.62-1.el5         perl-Font-AFM.noarch 0:1.19-4.el5               
  perl-IO-String.noarch 0:1.08-1.1.1            perl-List-MoreUtils.x86_64 0:0.22-2.el5         
  perl-Module-Pluggable.noarch 0:3.60-3.el5     perl-Number-Compare.noarch 0:0.01-8.el5         
  perl-PPI.noarch 0:1.118-1.el5                 perl-Params-Util.noarch 0:0.25-1.el5            
  perl-Params-Validate.x86_64 0:0.88-3.el5      perl-Perl-Critic.noarch 0:1.05-1.el5            
  perl-Pod-Coverage.noarch 0:0.18-2.el5         perl-Pod-Escapes.noarch 0:1.04-5.el5            
  perl-Pod-POM.noarch 0:0.17-6.el5              perl-Pod-Simple.noarch 0:3.04-3.el5             
  perl-String-Format.noarch 0:1.14-1.el5        perl-Sub-Uplevel.noarch 0:0.18-2.el5            
  perl-TeX-Hyphen.noarch 0:0.140-5.el5          perl-Test-Differences.noarch 0:0.47-2.el5       
  perl-Text-Autoformat.noarch 0:1.13-5.el5      perl-Text-Diff.noarch 0:0.35-3.el5              
  perl-Text-Glob.noarch 0:0.08-2.el5            perl-Text-Reform.noarch 0:1.11-6.el5            
  perl-TimeDate.noarch 1:1.16-5.el5             perl-XML-Dumper.noarch 0:0.81-2.fc6             
  perl-XML-LibXML-Common.x86_64 0:0.13-8.2.2    perl-XML-NamespaceSupport.noarch 0:1.09-1.2.1   
  perl-XML-SAX.noarch 0:0.14-8                  perl-XML-TokeParser.noarch 0:0.05-2.1.el5       
  perltidy.noarch 0:20070801-1.el5              urw-fonts.noarch 0:2.3-6.1.1                    

Complete!

ダラダラと長くてすみません.さて,今回のオチですが…

実は例が悪く,よく見ると「パッケージがあらへん」といっているものがあるように,現状のyumリポジトリーだけでは解決できないようです(ぇー

#CentOS 5系 w/ EPELだけでは本家から落としたpublican 2.8はビルドできないみたい(ハァ

また書く気になったらちゃんと一連の流れで成功するパターンでも書き直したいと思います

では.あでゅー

2011-07-19

lsb準拠のLinuxならディストリビューションやバージョンの識別はパッケージ情報やlsb_releaseを使おう

よく/etc/redhat-releaseの内容でOSの種類やバージョンを調べているスクリプトを見かけますが,10年前ならともかく,今となってはいまいちなやり方です.

ということで別の手段を紹介したいと思います

/etc/redhat-releaseの持ち主パッケージの情報を調べる.

rpm系なら/etc/redhat-releaseの持ち主の情報でそれらを識別する方がまだモアベターです.

おそらく少なくともRed Hat Linux 7.0やRed Hat Enterprise Linux 2.1,Miraclelinux,Turbolinux 6.0前後から通用すると思います(以前勤務していたベンダーで,実際にディストリビューションバージョンの識別に使っていた方法です).

$ rpm -qif /etc/redhat-release 
Name        : fedora-release               Relocations: (not relocatable)
Version     : 13                                Vendor: Fedora Project
Release     : 1                             Build Date: 2010年05月07日 13時24分24秒
Install Date: 2010年08月17日 20時51分39秒      Build Host: x86-06.phx2.fedoraproject.org
Group       : System Environment/Base       Source RPM: fedora-release-13-1.src.rpm
Size        : 27452                            License: GPLv2
Signature   : RSA/8, 2010年05月07日 14時24分58秒, Key ID 7edc6ad6e8e40fde
Packager    : Fedora Project
URL         : http://fedoraproject.org
Summary     : Fedora release files
Description :
Fedora release files such as yum configs and various /etc/ files that
define the release.
$ rpm -qf --queryformat="Vendor: %{VENDOR}\nPackager: %{PACKAGER}\nVersion: %{VERSION}\nRelease: %{RELEASE}\n" /etc/redhat-release 
Vendor: Fedora Project
Packager: Fedora Project
Version: 13
Release: 1

CentOS 5,6でも試してみました.

$ rpm -qf --queryformat="Vendor: %{VENDOR}\nPackager: %{PACKAGER}\nVersion: %{VERSION}\nRelease: %{RELEASE}\n" /etc/redhat-release 
Vendor: CentOS
Packager: (none)
Version: 5
Release: 6.el5.centos.1
$ rpm -qf --queryformat="Vendor: %{VENDOR}\nPackager: %{PACKAGER}\nVersion: %{VERSION}\nRelease: %{RELEASE}\n" /etc/redhat-release 
Vendor: CentOS
Packager: CentOS BuildSystem <http://bugs.centos.org>
Version: 6
Release: 0.el6.centos.5

lsb_releaseを使う

もしくはlsb_releaseを使う方法もありますシンプル情報が欲しい場合,下記のようにするといいでしょう.

#lsb_releaseはredhat-lsbというパッケージが入っていなければ使用できません(ただし最小構成でのインストールなどでなければほぼ入っていると思います).

$ lsb_release --id --short
Fedora
$ lsb_release --release --short
13
$ lsb_release --id --release --short
Fedora 13
$ lsb_release --release --short
5.6
$ lsb_release --id --short
CentOS
$ lsb_release --id --release --short
CentOS 5.6
$ lsb_release --id --short
CentOS
$ lsb_release --release --short
6.0
$ lsb_release --id --release --short
CentOS 6.0
$ lsb_release --id --release --short
CentOS 6.0

その他

lsb_releaseはより多くの情報を取り出せるのですが,アーキテクチャ情報だけを取り出すことができない…のが微妙なところです.versionという情報から抜き出すか,他のコマンドを用いるしかないかもしれません(誰かアーキテクチャだけ出す方法を知ってたらおせーて).

$ lsb_release 
LSB Version:    :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch

というか,いずれにしろほとんどの人にとってはがんばるところじゃないですけどね!!