さくらのVPSで複数台の契約するときの注意点
記事自体の注意点
これは2012年10月末位の経験と周囲の情報をもとにした話なので,のちに状況など変化している可能性があります.
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契約してみました.
そうしたらやっぱり出たんですね.連番.ただし多少はばらけていました.
そこで今度はちゃんとサポートに粘着しました.
サポートの回答としては簡単に書くと下記のとおりです.
- 以前のように連続した契約で連番的になるようなことはない
- ただ限られたリソース内で払い出しをするため,結果として同一筐体になる可能性はある
- 同一筐体かどうかはIPアドレスが連番かどうかで確認できる(それ以外では確認できない)
下記はサポートとのやり取りで引き出せた情報だったり,個人的な主観だったりが入り交ざっています.
うまく読み分けてください.
以前のように連続した契約で連番的になるようなことはない
これは確かにそうかもしれません.
実際に連番でもなく間に他のお客が入って飛んだというより全然違うセグメントに行ったかな?という感じもありました.
どうしたらいいか?
正解はないと思いますが多少の努力ごっこはできると思います.
お試し期間を活用する
これはサポートからの提案です.
IPアドレスが怪しいと思ったらVPSインスタンスを作り直すことです.
ただし注意しなければいけないのはこれはクレジットカード決済でしか利用できません(カード決済以外は試用期間という状態がない)
なるべく契約と契約の間で時間を開ける
この手段はむしろ連番で払い出しをしてくれるなら結構確率が上がったのかなーという気がしますが,
「近いタイミングでの契約は同一筐体になる確率が高い」ということであれば時間をあければ他のお客がその筐体を利用開始してくれることが期待できます.
どれ位開ければいいかはわかりませんが,1日や数日開ければいいかもしれません(適当
また,お試し期間を併用するとよりGOODだと思います
リージョンを使い分ける
これも筐体が別れる可能性が高くなるだけですが,2Gプランならリージョンを選択できます.
これを活用すれば同一筐体ではなくなる可能性が高くなるかもしれません.
これってさくらのVPSだけの問題?
おそらくですが,低価格VPSの多くは同様な問題をはらんでいるんじゃないでしょうか?
おそらくさくらのVPSのストレージはローカルストレージでSANなどではないと思います.
ストレージがSANに載っていれば一旦落ちてもすぐに別の筐体で再起動してもらえる可能性はあるかもしれません(が,低価格VPSでSANとかあるんかなーどうなんだろうなー).
まとめ
ないです(照
もう疲れてきました(照
前回の記事から約1年,すっかり自分のはてダ忘れていました(照
また思い出したら次の記事を書くかもしれません.
それでは.あでゅー
追記:
大事なことを書き忘れていました.
この件に関してさくらのサポートにはとても親切にいろいろサポートしていただきました.
たまたま特にいい人にあたったのかもしれませんが,今のところサポートでハズレを引いたことが無くてそこは助かっています.
他社で同様の問題があっても(多くの提供企業であると思っています)同レベルにサポートしていただけているかはわかりません.
主観ですが,決して価格バランス上「高い!!」というものでもなく,提供サービスに不満点があるのは当たり前のことで今後に期待させていただきます!!
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ほど消費しているのかは知りません.
いずれ必要になれば調べてみようと思います.
パッケージ名がわからなくても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開発用のSRPMをCentOS 6.0でビルドしようとしたからですね.
これを中途半端といいます.同じネタ2回目なのに同じオチですか.ホントごめんなさい.
しかも
> No package >= available.
> No package 1.3 available.
とか出てます.まぁ実質害はないので気にしないでおきましょう.
とりあえず,ちゃんとビルドできる環境であれば上記のような手順でビルドに必要な環境がそろうと思います.ぜひお試しあれ.
それではあでゅー.
パッケージ名がわからなくても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はビルドできないみたい(ハァ
また書く気になったらちゃんと一連の流れで成功するパターンでも書き直したいと思います.
では.あでゅー
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
というか,いずれにしろほとんどの人にとってはがんばるところじゃないですけどね!!
メディア(isoファイル)から簡単にローカルのリポジトリーを作成する方法
もう既にいろんなところに転がっていそうだけどはてダのリハビリがてら.
前書き
CentOS 6.0が出た記念に自宅でも入れてみようか…と思ったけど引越し直後,自宅の環境がいろいろな理由で貧弱になっており,ネットワークにつながらないATOMなマシンが1台…仕方なしにunetbootinを使って入れてみました.が,ネットワークにつながらない状況とはいえyumも使えないと面倒くさいので,ローカルでyumが使える環境を作ってみました.
やることの概要
簡単にいうと,インストール メディア内の/Packages/と/repodata/を1つのディレクトリー内にかき集めます.
難しく書いても大体そんな感じです(何
事前準備
CentOS 6.0(CentOS 5系も)は/etc/yum.repos.d/CentOS-Media.repoというリポジトリーの設定ファイルがあり,これは「/media/CentOS/」「/media/cdrom/」「/media/cdrecorder/」のいずれかにリポジトリーがあることを期待した設定になっています.今回はこの中から「/media/CentOS/」をリポジトリーの作成先にします.
disc1のコピー処理をする.
適当にマウントしてください.
今回は/mnt/cdmediaがメディア,isoファイルのマウント先と仮定します.isoファイルはディレクトリー/home/elf/isos/に既に保存していると仮定します.
もしかしたら読者の方は違うところにマウントをしたいかもしれないし,isoファイルは別のディレクトリーに保存しているかもしれませんが,よしなに読み替えてください.
isoファイルをマウントする場合
# mount -o loop /home/elf/isos/CentOS-6.0-x86_64-bin-DVD1.iso /mnt/cdmedia
#-t noneとか-oはもっといろいろ付ける方がお行儀がいい?(何
CD/DVDメディアをマウントする場合(多分)
# mount /dev/hdc /mnt/cdmedia
ディレクトリーのコピーをします.
# rsync -av /mnt/cdmedia/Packages /media/CentOS/. # rsync -av /mnt/cdmedia/repodata /media/CentOS/.
#別にcpでもいいですよ
disc1の作業はこれで終わりです.マウントを解除します.
# umount /mnt/cdmedia
引き続きdisc2の作業に移ります.
disc2(CDメディアの場合は2〜6)のコピー処理をする.
たいしてやることは変わりありません.
isoファイルをマウントする場合
# mount -o loop /home/elf/isos/CentOS-6.0-x86_64-bin-DVD2.iso /mnt/cdmedia
CD/DVDメディアをマウントする場合(多分)
# mount /dev/hdc /mnt/cdmedia
ディレクトリーのコピーをします.
# rsync -av /mnt/cdmedia/Packages /media/CentOS/.
#repodataはdisc1にしか存在しません.
disc2の作業はこれで終わりです.マウントを解除します.
# umount /mnt/cdmedia
CDメディアの場合,disc6まで同様の作業を行います.
これで最低限の作業は完了です.
今構築したリポジトリーを使えるか確認する.
まず知っておかなければいけない注意点は,「/etc/yum.repos.d/CentOS-Media.repo」はそのままでは無効になるように設定されています.
今回は動作確認をしたいだけなので,設定ファイルは編集せずに確認をします.確認時は設定ファイルに書かれているように「yum --disablerepo=\* --enablerepo=c6-media [command]」という感じでコマンドを実行します.
# yum --disablerepo=\* --enablerepo=c6-media check-update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * c6-media:
上記のようにエラー風のメッセージが出てこなければ利用できると考えてよさそうです(厳密にいうと,repodataが正しく読めることが確認できただけですが).
もし利用できないときは下記のようにエラーが出ると思います.
# yum --disablerepo=\* --enablerepo=c6-media check-update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * c6-media: file:///media/CentOS1/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/CentOS/repodata/repomd.xml Trying other mirror. file:///media/cdrecorder/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/cdrecorder/repodata/repomd.xml Trying other mirror. file:///media/cdrom/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/cdrom/repodata/repomd.xml Trying other mirror.
さてさて.しかしいつもオプション--enablerepoをつけるのは面倒ですね.ってことで気になる人は設定ファイルを変更しましょう.
[c6-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/ gpgcheck=1 enabled=1 ★「0」を「1」にする gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
補足
細かいことが気になる人は,CentOS-Base.repoの[base]でenabled=0を追加しておくと,/media/CentOS/で事足りる部分は完全にネットワークへ参照しに行かなくなります.
あとがき
一緒にcentos.orgやfedoraproject.orgで活動する仲間を募集しています.
興味がある方は適当な手段で連絡をお願いします!!
#ちゃんと書けと突込みが…
この辺にお願いします!!
そんなバカなセニョリータ!!
Perlにも少し慣れてきたのでだんだんワンライナーで試すことが増えてきたぜ.
$ perl -e 'use Data::Dumper; my $foo; print Dumper($foo); print "set\n" if (defined($foo->{foo})); print Dumper($foo);' $VAR1 = undef; $VAR1 = {};
値変わらないでよ!! わからなくはないけど気づかなかったじゃないか!!
とりあえず根元から丁寧に見ろってことじゃろうか.
$ perl -e 'use Data::Dumper; my $foo; print Dumper($foo); print "set\n" if (ref($foo) && defined($foo->{foo})); print Dumper($foo);' $VAR1 = undef; $VAR1 = undef;
$ perl -e 'use Data::Dumper; my $foo; print Dumper($foo); $foo = {}; print "set\n" if (ref($foo) && defined($foo->{foo})); print Dumper($foo);' $VAR1 = undef; $VAR1 = {};
$ perl -e 'use Data::Dumper; my $foo; print Dumper($foo); $foo = {foo => "foot"}; print "set\n" if (ref($foo) && defined($foo->{foo})); print Dumper($foo);' $VAR1 = undef; set $VAR1 = { 'foo' => 'foot' };