Archive for 6月 30th, 2009



Debian で Linux Vserver を使う

火曜日, 6月 30th, 2009

Debian で Linux Vserver を使ってるので、せっかくなので自分の知ってることを書いておこうと思います。

といっても、仮想サーバ技術から説明するのはどうかと思うので、かなり端折って書いてきます。

Linux Vserver とは

Linux Vserver とは、OS レベルの仮想化機能を実装した、仮想サーバソフトウェアです (Wikipedia:ja)。

FreeBSD Jail と非常に良く似ており、構造がシンプルでパフォーマンスが素の OS とほぼ変わらないので個人的にもっとも好きな仮想サーバ技術です。

欠点をあえて上げるとすれば、kernel が一つなのと、ネットワークは基本的に 0.0.0.0 で待ちうけができない点くらいでしょう。

Debian に Vserver をインストールする

Debian は公式リポジトリに Vserver が入ってるので、apt から一発で入ります。
非常に楽であり、保守も容易になるので、Vserver 使うなら Debian が一番良いと思います。

ただし、自分は kernel は最新のを使いたいので、Linux Vserver から最新のものを取得しコンパイル・インストールして使用しています。
この方法は後述します。

まずは、Debian lenny amd64 がパソコンにインストールされていることを前提に進めます。自分は amd64 以外もう使ってないので、amd64 を前提に話を進めますが、i386 やそれ以外も一緒だと思います。

# aptitude install linux-image-2.6-vserver-amd64
# aptitude install util-vserver

上の行が、linux-vserver 用の Debian 標準カーネルです。
下の行が、Vserver を使うのに必要なツール類です。

ブートローダで、上で入れたカーネルで起動するよう設定されているかを確認しておき、マシンを再起動します。
再起動して、そのカーネルで起動できているかは、uname -a 等で確認できます。

仮想 OS 用のパーティションを作る

自分は主にこちらのサイトから入ったので、そちらを推奨します。

自分の場合は仮想 OS あたり一つの LVM パーティションを与えて使用しています。
また、マウントポジションは / 直下に vserver というディレクトリを作成し、そこに仮想 OS 名のディレクトリ(usugumo とか murakumo とか) を作成して、LVM のパーティションをマウントします。
たとえば、以下のような感じです。

# lvcreate vg1 -n murakumo -L20GB
# mkfs.ext4 /dev/vg1/murakumo

# ls /vserver
usugumo kashiro
# mkdir /vserver/murakumo
# ls /vserver
usugumo kashiro murakumo

# mount -o noatime /dev/vg1/murakumo /vserver/murakumo
# emacs /etc/fstab
/dev/vg1/murakumo    /vserver/murakumo          ext4      noatime       0 2

# df -h
/dev/vg1-murakumo              100     1    99   1% /vserver/murakumo

流れは、LVM vg1 から 20GB 切り出して、murakumo というものをつくり、その murakumo を ext4 でフォーマットして、/vserver/murakumo にマウントする。
/etc/fstab に追加しないと PC 再起動時にマウントしてくれないので、忘れずに追加しておく、というだけです。

また、mkfs.ext4 を使うなら、カーネル 2.6.29 以降にしたほうが良いと思います。
Debian (lenny) 標準リポジトリの 2.6.26 は ext4dev 扱いであり、extents が有効だったり有効でなかったりしてややこしいし、
なにより 2.6.28 より前の ext4 は結構イマイチだった気がするので ext4 使わないほうがいいと思います。

2.6.29 以降なら、自分もメインマシンに ext4 使って特に大きな不具合ないので、十分実用に耐えると思います。
(btrfs がカーネルにマージされてる一番新しいファイルシステムですが、不安定なので今は使わないほうがいいでしょう。自分の環境では、1-2 日起動させっぱなしにしただけで、なぜか落ちます)

つまり、Linux Vserver 最新を追いかける必要があります。それをしたくないなら、ext3 を推奨します。
大きな容量のパーティション使うなら、XFS にすればマウントが非常に早いので便利だと思います。

仮想 OS を作る

上の作業で、仮想 OS をいれておくパーティションができて、マウントもされてる状態にあります。

ようやく OS のインストールになります。これは debootstrap を用いれば簡単にできます。
自分がよく使うテンプレートが以下なので、参考にしてみてください。

# makigumo (115)
# vserver makigumo build \
  -m debootstrap --context 115 \
  --hostname makigumo.quilva.jp \
  --interface eth0:192.168.5.115/24 \
  --rootdir /vservers \
  -- -d lenny -m http://izaemon.pw2.org/debian/

これは、makigumo という名前の仮想 OS を作ろうとしてます。
コンテキスト(仮想 OS 同士で重複しないユニークな数字を与える)は自分の場合 ip の最後の 8bit を割り与えるようにしてます。
–interface は仮想 OS 用の ip です。
http://izaemon.pw2.org/debian/ はローカルの Debian archive mirror サーバで、しかも今停止中なので、
国内なら普通は http://cdn.debian.or.jp/debian/ のほうが良いでしょう。

これをうちこんだ後は debootstrap が作業してくれるので、終わるまで少し待ちます。

仮想 OS を設定する

ここが書きたかったところでして、当たり前すぎるのか、あまりネット上では見かけませんでした。

上でインストールした直後でももちろん仮想サーバ動くのですが、ほとんど設定されてない状態なので使い物になりません。

なにより、SSH すら入ってないので、まずは SSH で入れて、文字コードを UTF-8 にしたりしましょう。

また、仮想 OS のネットがつながらない場合はホスト OS の /etc/vservers 以下の設定を見直してください。
当たり前ですが、ホスト OS でネットができない場合は仮想 OS もネット使えません。

まずは仮想 OS を起動させます。

# vserver makigumo start

これで起動しない場合はどうしようもないので、いろいろがんばってください。

そして、仮想サーバに入ります。

# vserver makigumo enter

まずは Apt のツリーを更新して、パッケージも更新しましょう。

# aptitude update
# aptitude dist-upgrade

そして、UTF-8 を使うためにロケールの設定をします。

# aptitude install locales
# dpkg-reconfigure locales
(ja_JP.UTF-8 だけを選択した状態にして、これをデフォルトとして使用する)

次に、タイムゾーンが変なので、日本の時間にします。

# dpkg-reconfigure tzdata
Asia
Tokyo
という感じだったと思う。

そして、念願の SSH を入れます。

# aptitude install ssh

ただし、先ほど書いたようなきがしますが、0.0.0.0 で待ち受けできませんので、これを変更します。
ホスト OS (仮想サーバを入れた OS) の SSH も 0.0.0.0 ではなく、192.168.5.123 等に変更してください。

そうでないと、どのアドレスにしても 0.0.0.0 のサーバが応答したりして混乱することになります。

# emacs /etc/ssh/sshd_config
 #ListenAddress 0.0.0.0

 ListenAddress 192.168.5.123

等の ip にしてください。

SSH を起動する前に、root でないユーザも作っておきましょう。
sudo もいれたほうが便利だと思います。

# adduser rootdenaiuser

これができたら、SSH の設定を PermitRootLogin yes を no に変更して、/etc/init.d/ssh start として、ssh が起動させます。
そして、他のマシンから仮想サーバに ssh でログインできるか確認します。

ここまでくれば、後はなんでもできるはず。

Linux Vserver の kernel を自分で作る

Linux Vserver の最新の kernel を使う方法です。ただし、たまに自分の環境だとうまく動かないことがあるので、注意したほうが良いです。

まずは、カーネルをコンパイルできる環境にする必要があります。
うろ覚えなので、「Debian kernel コンパイル」とかで検索してインストールしておいてください。

# aptitude install kernel-packages make gcc patch bzip2 fakeroot libncurses-dev

次に kernel ソースと、Vserver パッチをダウンロードします。
Linux Vserver の下のほうより最新のものがダウンロードできます。

追記 2009 7/23 18:52

最新がほしい場合はこの記事の最後の追記をみてください。
「この表は最新であるとは限らない」との赤字コメントが Vserver のサイトに追加されて初めて気づきました。

Linux Vserver ダウンロード

Linux Vserver ダウンロード

青いほうが、kernel.org よりダウンロードするカーネル本体で、オレンジのほうが、Vserver パッチです。

% mkdir kernel
% cd kernel

% wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.5.tar.bz2
% wget http://vserver.13thfloor.at/Experimental/patch-2.6.29.5-vs2.3.0.36.14.diff

とでもして、ダウンロードしてください。

展開して、Vserver のパッチを当てます。

% tar xjf linux-2.6.29.5.tar.bz2
% cd linux-2.6.29.5
% patch -p1 < ../patch-2.6.29.5-vs2.3.0.36.14.diff

make menuconfig で好みの設定にしてください。

% make menuconfig

そして、コンパイルします。
自分は Phenom を使ってるので、並列コンパイルを実施します。

% export CONCURRENCY_LEVEL=7
% fakeroot make-kpkg --initrd kernel_image

マシン速度に大きく左右されるので、コンパイル終わるまで待ちます。
コンパイルが正常に完了すれば、ひとつ上の階層に *.deb ができあがってるはずです。

fakeroot が以前壊れてたことがあるので、その場合は root になって実行してください。

そして、念願のインストールを実行します。

# dpkg -i 上でできあがった.deb

なんでか initrd が出来上がってないことがあるので、確認します。

% cd /boot
% ls -l
initrd.img-*****************-amd64

ない場合は、作ります。

# update-initramfs -c -k 2.6.30.1-vs2.3.0.36.14-pre3 とか。

なかった場合は /boot/grub/menu.lst の initrd もない気がするので、追加します。

title           Debian GNU/Linux, kernel 2.6.26-2-amd64
root            (hd0,4)
kernel          /boot/vmlinuz-2.6.26-2-amd64 root=/dev/sda5 ro

となってるところを、

title           Debian GNU/Linux, kernel 2.6.26-2-amd64
root            (hd0,4)
kernel          /boot/vmlinuz-2.6.26-2-amd64 root=/dev/sda5 ro
initrd          /boot/initrd.img-2.6.26-2-amd64

というかんじ。

できあがり。
とりあえず、自分は 2.6.29-2 を現在使用してますが、特に問題ありません。

最後のほうに書いておくと、Left 4 Dead というゲームのサーバを Vserver 上で立ててもパフォーマンス(ラグとか)問題ありません。
Xen だとオーバヘッドからか、フレームレートが若干落ちる(素OS と Vserver が 29.90 くらいのところが、27 くらいに落ちる)ので、イマイチです。

Vserver Tips
仮想 OS のパーティションの容量を増やす

自分のように LVM を用いた場合は仮想サーバ停止させずに増やせます。

# lvextend -L+1000000000000000GB /dev/vg1/murakumo
# resize2fs /vserver/murakumo

これだけ。

仮想 OS のパーティションの容量を減らす

ファイルシステムに reiser(3) を使った場合のみ縮小できます。
ext4 や XFS などは増やすことしかできません。

また、オンラインではできませんので、仮想サーバを停止させ、パーティションも umount する必要があります。

 # vserver murakumo stop
 # umount /dev/vg1/murakumo
 # resize_reiserfs -s -1000G /dev/vg1/murakumo
 # lvreduce -L-1000G /dev/vg1/murakumop
 # mount /dev/vg1/murakumo
 # vserver murakumo start

lvreduce -L-1000G だと、1000GB だけ減らす、という意味で、lvreduce -L1000G だと 1000GB にするという違いがあります。

Vserver 関係リンク
Debian/VServer いっつのメモ帳
自分の BLOG より先に見るべきです。「特定の仮想マシンにだけ別のデフォルトゲートウェイを割り当てる」とか、喉から手がでるほどほしい情報でした
追記 2009 7/23 18:54 最新の Vserver patched kernel を作る

最近 Vserver のサイトに赤字コメントが追加されました。

赤字コメント

赤字コメント

always look here and do not assume that the Table below is up to date — Vserver 管理者様より

とあるので、「表は常に最新であるとは限らないことに気をつけろ」ということです。

なるほど、たしかに Experimental Releases がリンクになってるよ…………

最新 Vserver patch をダウンロード

最新 Vserver patch をダウンロード

ということで、この場合はかこんだやつが最新の Vserver ということになります。
Kernel 2.6.27.27 を使ってる場合はそれのほうがより新しいですが、Kernel 2.6.30.1 の場合は囲んだやつがそうなります。

LME49600 + LM4562 増幅と DC サーボ用のオペアンプを独立させたヘッドホンアンプ

火曜日, 6月 30th, 2009

とりあえず、自分がどんな回路の HPA 作ったのか忘れないために書いておく。

まず、以下の画像が現在の様子です。これだけで、自分の電気電子回路の技術がどの程度が非常によくわかるでしょう。
初電子工作で動いたんだから、これでも満足してます。

LME49600 HPA

LME49600 HPA

回路は LME49600 の PDF の Figure 4 をベースにしてます。増幅と DC サーボを 2 回路入りオペアンプ一つでしているので、
増幅増幅でオペアンプ一つ、DCサーボDCサーボでオペアンプ一つのように、それぞれ独立させました。

Figure 4 ほぼそのままですが、上の写真の回路図は以下になります。手書きですみません。

LME49600HPA 回路図

LME49600HPA 回路図

H 型に灰色で走ってるのが、GND で、赤が下の黒線とは接触してない、という意味です。

実際の回路の様子は以下です。

LME49600HPA メイン

LME49600HPA メイン

アップにたえないシロモノですが、ご了承ください。

青く丸いのが NEC トーキン 35V 6.8uF タンタル電解コンデンサ DN1V6R8M1S (@105 円 シリコンハウス共立)、
オレンジのものは、ニッセイ APS100V104J (100V 0.10uF, @35 円 シリコンハウス共立)、
四角い水色のものは(補正加えてるので水色ですが、実際はもう少し青いです)、ニッセイ 積層メタライズドポリエステル コンデンサ MTFF050J105 (50V 1.0uF,  @84 円 シリコンハウス共立)です。

1.0uF のコンデンサが上記画像では一つ足りませんが、諸事情により裏面にあります。

オペアンプに張り付いてるヒモは、わかると思いますが、オペアンプを外すためのものです。
IC 引っこ抜く工具高いので、これでいいや、と。足曲がらずに外せるから十分です。
鉄入ってるので、ノイズ源になりうると思われますが、まぁきにしない。
これ付けた状態でも Dr.HEAD 改よりはるかに音良いし。(7809->7812 化と電源部のコンデンサを MUSE KZ 、入力カップリングを上の積層メタライズド~の1uFとAPS0.10uF にしたもの)

電源部は以下になります。

LME49600HPA 電源部

LME49600HPA 電源部

入力は DC30V で、LM350T (R1: 120Ω、R2: 2.4k + 68Ω)で 26.9V で安定化させ、TLE2426 で仮想 GND を作ってます。

使用した AC アダプタの無負荷出力が 38V くらい、HPA 動作時でも 34-5V 出力されてるので、30V 安定化で +-15V にもできたようです。
まぁ、一応表記 30V 出力だし、しばらくは 26.9V で使うつもり。

LM317 ではなく、LM350T を用いた理由はリップル除去率が LM317 が 80% なのに対して、LM350T は 86% と良い数値だったので、こちらを選択しました。
KA350T は 80% となってるので、正直 LM317 でも LM350T でも違いないのかもしれません。

次、HPA 作ったときは TLE2426 の先に LME49600 等でバッファして、GND の容量を増やそうと思います。

LME49600 の一番の難点はやはり、そのまま 2.54mm のユニバーサル基盤に挿せないことでしょう。
自分は LME49600 の足に 径 0.6mm のスズメッキ銅線で延長して使用しました。

ハンダ付けがヘタクソすぎるので、写真恥ずかしいですが、以下のような感じで延長させました。

LME49600表

LME49600表

LME49600 裏

LME49600 裏

LME49600 最後の延長線をつける前

LME49600 最後の延長線をつける前

LME49600 ハンダ付けた。つけすぎ。

LME49600 ハンダ付けた。つけすぎ。

LME49600 延長完了

LME49600 延長完了

さすがにつけすぎなので、吸い取り線で少し吸い出しました。
一応熱で破壊されたら困るので、ヒートシンクにセロテープでくっつけて作業しました。

また、一番上の写真の中央に 50V 2700uF の電解コンデンサがありますが、これは TLE2426 で分圧した先の +12V と GND 、GND と -12V にいれてるだけです。

ボリュームには、東京光音の 2CP601 を使用しました(若松 2550円)。理由は東京光音という名前がカッコイイという理由と、ネットでの評判が良いのでこれにしました。
ギャングエラーは非常に優秀で、Dr.HEAD に付属している APLS らしき小さいボリュームよりはるかに少ない回転量でほぼなくなります(数度回転させたらギャングエラーなくなる)。
ただ、なんとなく、10度以上まわしたほうが、音が痩せてない気がするので、入力の音を絞ってそれくらいまわせるようにしてます。

予想よりよかったのは、ポップノイズがほぼないことです。これなら、ミュートとかつけなくてもよさそうです。
Dr.HEAD だとすごいポップノイズがしていた NJM2114DD に交換したときも、それほど気になりませんでした。

OP2604AP を使うと、音圧が増しますが、解像度が若干下がるような気がするので、LM4562NA のほうがよさそうです。

2009 7/6 追記

なんとなく、低域がイマイチだと思ったので電源に 35V 470uF を追加した。

35V470uF 追加した

35V470uF 追加した

かなり強引ですが。

結果: 音がすごくざらざらする。
というのはまぁ当たり前でしょう。半田ごての熱で痛んでるんでしょう。

ほんと数十秒後はあきらかに低域がすっきりし、量も増えた。やはり、入力前 35V100uF だけでは足りなかったようだ。
一応 LM350T で 26.9V 後にも追加したけど、これも多少効果ある…はず。

一つかなりやばい目の難点がありまして、上のほうにも書いたと思いますが HPA 稼動時も AC アダプタから 35V くらい供給されてます。
そう、耐圧ギリギリなんですよ(汗
うーん。50V 耐圧のやつを早い目に買う、、というかさっさと作り直したい。

とりあえず追加してから 30 分くらい経過したんですが音が変わりすぎで驚き。特に Sentenced の Neverlasting がわかりやすい変化ですね。沈む低音が聞こえるようになりました。

あとは全体的にツヤのある音で、ウェット感がかなりアップした。音関係はやはり電源重要ですねぇ。

2009 7/8 追記

やはり、35V 耐圧ギリギリはよろしくないので少しだけ電圧下げる努力をした。

具体的にはダイオードを 4 発直列に入れて、0.65×4=2.60V ほど電圧を下げようという計画です。

ついでに余ってる nichicon KY 50V2700uF を入れた。35V220uF の ZLH もついで余ってるから入れようとおもったのですが、行方不明になっているのであきらめた。

IN4007*4 と 50V2700uF(KY) をパラで追加

IN4007*4 と 50V2700uF(KY) をパラで追加

ええ、そうです。追加するスペースがなかったので、別基盤になりました。
ケースに入ってないからこそ成せる技です。

結果、この基盤後の電圧はなんでか 4.5V ほど下がって 30.5V強 ほどになってます。
26.9V に安定化ですので、LM350T のほうも OK ということです。

音のほうですが、まだエージング澄んでないので微妙です。
荒々しさというか音圧が減ってなんだかすっきりしてしまいました。
ただ、じわじわバスドラの音に張りがでていってるので、エージング済むとよりよくなりそう。

あと、追加基盤を経由して GND を電源主基盤にいれるべきところを誤って AC アダプタの GND を直接入れてしまっていたんですね。
そのとき音が実に「アレッ 変化ないというより悪化してるような??」っていうガッカリ具合でした。その後気づいて追加基盤からしか GND が入らないようにしたらちゃんと戻った。
結構違うもんなんですね。