Archive for the ‘Linux’ Category

「悪い大人」

久しぶりに日経BPネタ。

プログラミング教育にも悪い大人が群がってしまうのか (3/3)

ただ、こうした人が自分でソフトウエアを作っているという話は聞いたことがなかった。オープンソースソフトウエアの開発に参加するでもなく、オープンソースソフトウエアを使ってシステムを開発するでもない。「オープンソース推進」という謎の運動の旗を振っているだけだ。

この話に該当する人を私は知らない。

More »

コピーなしにXenをkvmに移行する方法

事務所に置いていたサーバを整理して、サーバ室に移そうとしている。

そのために、VMの整理とかアップグレードとかしていたのだけど、元々事務所に置いていたサーバはXenで仮想化してあった。

Xen実験機を作る 

これ自体は初期はいろいろトラブルはあったものの、結構安定して動いていたのだけど、最近になってどうやらXenの準仮想化よりも、kvmの完全仮想化の方がパフォーマンスが良いらしいことを知った。

同じサーバで、XenとKVMのベンチマークをとって比較してみた。

「えー?」とか思いつつ調べると、どうやらそれは本当らしい。サーバ室のサーバは作ったのも比較的最近であるし、「今さらXen?」とか思って、半ば思考停止的にkvmを選択していたのだけど、果してこれが最良の選択であったか、当時から疑問であった。とは言え、Xenよりもkvmの方がパフォーマンス良い的な話をあちこちで目にして、どうやらこの選択に誤りはなかったようだ。

Xenは3.0系と4.0系でいろいろ変わってしまったこととか、カーネルのバージョンがどうだとか、いろいろ面倒臭い。その点、kvmはguestとhostは、原則的にはまるっきり依存関係がないので、バージョンアップとか気楽でいい。とか考えると「やっぱりkvmだよね」と言うことで、Xenで動かしていたものもkvmにすることにしたので、いろいろ実験をしていた。

両方やった人はわかっていると思うが、Xenとkvmではディスクの形式が違う。Xenはguest側のパーティションをhost側では適当にマッピングすることが出来るので、guestは同じ物理ディスクだと思っているものが、hostではまるっきり違うとかとゆーことが出来て、いろいろ便利だった。特に単位がパーティションなので、ループバックでmountして… とか出来て便利で良かった。kvmはディスクそのものを仮想化しているので、guestの1ディスクはhostの1イメージになっている。ループバックでmountやfsckする時も、ちょっと面倒臭い。こういった点では、ちょっとだけXenの方が楽… ってのは良いんだが、こういった違いがあるので、合わせてやらないといけない。

同じ問題で悩む人は結構いるらしく、いろいろ方法がある。特にRed Hatの場合は、主力仮想化をXenからkvmに変えた関係で、移行ツールがあったりする。

virt-v2vによるXenからKVMへのVM移行手順

こういったものがDebian系にもあると良いんだが、debはないようだ。そこでいろいろ方法を見つける。

Xen から KVM への移行 (検討中)

Debian squeezeでXen4.0からkvmへの移行

ところが、これらの方法は「コピー」が入る。コピーがあると、面倒臭い上に時間がかかるので、なるべくコピーをしないでやりたい。特にVMのイメージは小さくても数GBはあるので、コピーはなるべくしたくない。何かマッピングみたいな方法で出来ないかなーと思っていたら、

Xen のディスクイメージを KVM で使用する

と言うのを発見する。これをヒントにやってみる。

原理としては、

  • Xenのパーティションイメージには既に必要なものは全部ある
  • Xenにないのは自力のブート
  • kvmはディスクのイメージを要求する
  • 「パーティションイメージ」は実は「whole disk」とゆーことに出来る

ということだ。もうちょっと具体的に説明すると、

  • kvmがブートするのに必要なのは「ディスク」
  • 「ディスク」に必要なものは/bootのパーティション
  • /はgrub.cfgの中でXenのイメージをwhole diskとして使うように指示する

ということだ。

まず、小さいdiskを用意する。この中には/bootしか入らないので、たいした大きさはいらない。

# dd if=/dev/zero of=boot.img bs=1024 count= seek=102400

まぁ、やたらにケチケチしてもしょうがないので、100MB程取った。俺ってお大尽w 中に入るのは、/bootだけなので、10MBもあれば多分お釣りが来ると思うのだが。

次に適当なブート可能なイメージを用意する。ここで必要なのは、

grubが実行出来ること

だ。だから、何か適当なdistroのrescueイメージとかそういったのでいい。作業用のちっちゃいイメージとか作っておくのも悪くない。「オレオレrescue」とか作っておくと、いろいろ便利だ。私はメンテ用にそういったのを作ってUSBメモリに入れてたりする。今回は使ってないけど。とは言え、ちょっとインチキをすれば、/bootの設定は1回だけでいいので、何もイメージとか自分で用意する必要もないかも知れない。

今回はとりあえず、元のイメージがDebian(lenny)だったので、Debianの名刺カードイメージ(debian-6.0.5-amd64-businesscard.iso)を使うことにした。これが凄く便利ってことは全くなかったので、もっと便利なものが使える人はそっちで。

どうせkvmを運用で使うには、libvirtを使うことになるので、kvmのコマンドラインで悩まないで、virshに食わせるXMLを作る。

<domain type=’kvm’>
<name>xxxx</name>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch=’x86_64′ machine=’pc’>hvm</type>
<!–boot dev=’hd’/ –>
<boot dev=’cdrom’/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>

<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type=’file’ device=’disk’>
<source file=’/instance/root.img’/>
<target dev=’vda’ bus=’virtio’/>
</disk>
<disk type=’file’ device=’disk’>
<source file=’/instance/xxxx.img’/>
<target dev=’vdb’ bus=’virtio’/>
</disk>
<disk type=’file’ device=’cdrom’>
<source file=’/instance/debian-6.0.5-amd64-businesscard.iso’/>
<target dev=’vdc’ bus=’ide’/>
<readonly />
</disk>
<interface type=’bridge’>
<mac address=’52:54:10:01:00:53’/>
<model type=’virtio’/>
<target dev=’vnet0’/>
<source bridge=’br0’/>
</interface>
<interface type=’bridge’>
<mac address=’52:54:10:02:00:53’/>
<model type=’virtio’/>
<target dev=’vnet1’/>
<source bridge=’br1’/>
</interface>
<input type=’mouse’ bus=’ps2’/>
<graphics type=’vnc’ listen=’192.168.2.26′ port=’5900′ autoport=’no’ keymap=’ja’/>
</devices>
</domain>

こんな感じ。これでCD-ROMからブートさせて、grub-installをする。

元がlennyだったので、squeezeに上げたりして妙にハマったりしたのだけど、/etc/apt/sources.lstをsqueeze用にいじってapt-get updateをしたら、dist-upgradeをする前にkernelやらgrubやらをインストールしてしまい、grub-installまでやってしまう。その後、リブートが出来ることを確認してから、dist-upgradeをかければいい。

grub-installはいつもコマンドラインを忘れてしまうのだけど、

# grub-install /dev/vda

でいいと思う。

update-grub2とかやると、適当に/boot/grub/grub.cfgを作ってくれるのだけど、この時起動用のカーネルコマンドラインで、

root=/dev/vdb

ってゆーのがあることを確認しておく。これがつまり、/bootだけあるディスクイメージでブートさせて、/はXenで使っていたイメージファイルを使うとゆーことだ。

上手にやれば、大過なくXenで作ったイメージファイルをkvmで使うことが出来るようになると思う。

さて、仮想化したサーバでは、こういったVMはいっぱいあると思う。正攻法では、VMの数だけこの作業を繰り返せばいいのだけど、2つ目からはちょっと手抜きが出来る。と言うのも、同じdistroであって、同じような/を使うのであれば、/bootの内容は同じだということだ。

だから、2つ目は、1つ目で作った/bootの入っているイメージをコピーして、適当なXMLを書けば、そのままブートしてくれる。もっとも、このままだと/lib/modules以下に適当なモジュールがなかったりするので、grubとkernelくらいは入れておく。

# apt-get install linux-image-amd64 grub2

こうやると、もう一度grubの設定やら動くんだけど、こまけーこたーいーんだよ。

まぁこんな手順でやると、イメージのコピーなしでXen用のイメージからkvm用のイメージを作ることが出来る。とゆーか、「kvm用のイメージ」と言っても結局grubとかスタンドアロン用のカーネルとかとゆーXenには関係のないものを入れただけなので、もし気が変わってXenを使おうと思ったら、Xen用の起動設定を作るだけなので、「兼用」と言えなくもない。

Ubuntuを使いものになるようにした

クソの山だったUbuntuを、なんとか使いものになるように矯正した。

まず、Ubuntuはdesktop版とserver版があるのだが、server版を使う。server版を入れると、当然デスクトップはない。コンソールが出るだけ。ここにデスクトップ環境を構築して行く。

# apt-get install gnome-panel gnome-terminal
# apt-get intall gdm
# apt-get install lv dselect
# apt-get install fonts-ipafont-gothic fonts-ipafont-mincho
# update-grub2
# apt-get install gcc make

ここで一度reboot

# ./VBoxLinuxAddtions.run
# apt-get install light-themes
# apt-get install synaptic
# apt-get install openvpn samba

これで一応出来上がり。途中適宜apt-get updateとか入れつつ、依存関係を適当に解決しつつやるのは、まぁ言うまでもない。

Ubuntuはクソの山

思うところあって、開発環境をUbuntu 10.04から12.04に上げた。

そしたら、いきなりデスクトップの様子が変わってしまい、何をどうすればいいのかさっぱりわからない状態に。このわからん具合は、Windows XPからWindows Vistaに変えた時のギャップよりも大きい。いや、そんなレベルじゃない、もうまるっきり想像もつかないくらい違うものに。

もちろんshellを出せば使い慣れたLinuxだし、Emacsを動かせばEmacsだし、RoRを動かせばRoRなんだけど、デスクトップの変化が激し過ぎる。ついでに管理システムとかガラっと変わってしまって、一体どうやったら思い通りの環境に出来るのか、皆目見当もつかない。説明通りにやってもちゃんと動かなかったりするのは、自分が悪いのかUbuntuが悪いのか。

元々、Ubuntuは/etc/init.dあたりをとんでもないことをしてくれてたりして、あんまり好感は持ってなかったのだけど、

sidの新しさと安定

とゆーことに負けて使ってた。サーバで使う分には、UIの変化で泣かされることはあまりないのだけど、initスクリプトあたりの違いは結構泣ける。

いい加減Ubuntuには見切りをつけたいのだけど、Debianはいつまで経っても新しいのが出ないし、新しいのが使いたくてsidを使うとハマるし、今さらrpm系を使う気にはなれないし… とゆーことで、結局Ubuntuを使うことに。最近はいろいろとdeb系のdistroも出てたりするのだけど、供給が保証されるかと言えば、それもよくわからんし。

そんなわけで、クソの山だなぁとか思いつつ、Ubuntuを使うことになるわけだな。

lennyのXenを安定させる方法

このサーバをlennyにした話は既に書いた。

あまりに不安定なんで閉口していたのだけど、ここのところ安定させることに成功したらしく、落ちることがなくなった。

どうやったかについてちょっと解説。
More »

VMの選択と設定

LinuxプログラマとしてはLinuxが動いてくれないと商売にならないので、Linuxも動かすことに。

Linuxは64bitも32bitも使いたいし、DebianもUbuntuも使いたい。そこでVMということになるのだけど、これもなかなか頭痛い。
More »

Linux使い用Windows Vistaの環境設定

いかにホスト環境をWindowsにしたとは言え、元々Linuxばかりを使っていたので、Windowsは使いにくくてしょうがない。

そんなわけで、Linux使いにとって不自由のない環境設定が必要だ。
More »

Xenでetchからlennyに

既に書いたように、サーバをlennyにしてしまった。まだあまりお勧めは出来ないのだけど。

Xenはちょっとハマりどころがあるので、TIPS。
More »

まだlennyには移行しない方がいい

例によってダウンしてたわけだがw

今回はあまりにカーネルがおかしくなるということもあって、早々にlennyにアップグレードしたのが原因だ。etchの時よりも酷いことに。
More »

現実的に正しいreiserfsの復旧方法

日曜のたびにサーバが落ちてるわけだが…

もう慣れてしまったので、落ちても大丈夫。ということを散々経験したところで会得した、今のところの多分間違いのないreiserfsの復旧方法を紹介する。
More »

  • 私について

    ただのプログラマです、ハッカーではありません。

    秋葉で暮し秋葉で仕事してますが、秋葉系は嫌いです。物事を冷静に分析することは好きですが、ニヒリストは嫌いです。

    秋葉でちっこい会社をやってます。 こーゆーことがお仕事です。

    詳しいことは、自己紹介のページでも見て下さい。また、mixiの方でもいろいろわかるかも知れません。twitterは@ogochanですが、たいしたこと言ってません。近頃はShorplug内の別館で日記書いたりもしてます。だいたいここのコピーだったりしますが、ログインするとコメントがつけられます。

    日経ITProに連載(生越昌己のオープンソースGTD)を書いています。「ちゃんと書いた文章」が読みたい人は、そっちを読む方がいいと思います。

  • このページについて

    ここは私の雑文の置き場です。WordPressを使っていますが、いわゆるblogのつもりで書いているわけではありません。「覗き見のできるチラ裏」くらいの意味しかありません。

    もしかしたら有用なことがあるかも知れません。あるいはむかつくことも書いてあるかもしれません。それらはみな「そんなものだ」と思っておくに留めましょう。

    コメントを書くのは構いませんが、「反論」の類はよそでやって下さい。同意する気のない人達と議論する気は全くありませんので、議論したければよそで勝手にやって下さい。

    と言っても、「読むな」「広めるな」というわけでもありません。リンク、ブクマの類は御自由に。

  • カテゴリ

  • 過去の記事

  • メタ情報