2013年7月12日金曜日

OpenSolarisの末裔達

ちょっと脱線してSolarisに手を出してみたよという話。

まず、一般人にはJavaで有名なSUN Microsystemsという会社があってSolarisというOSがありました。最近ストレージ系で標準になりつつあるzfsというファイルシステムはここ由来ですね。

とりあえずストレージサーバを自前で組むならSolarisを入れるのが鉄板と聞いています。で、そのSolarisの最新は11でExpress版というフリーっぽい物もある様です(ちゃんとライセンス調べてないけど一応ダウンロード出来てVMwareでも動くのは確認した)

まぁ、今回の話は全然それには関係無くて・・・w

そのSolarisという市販OSにはOpenSolarisというオープンソース版がありました。これはSUNが提供していたものなわけですが・・・そのSUNがOracleに買われた事によりOpenSolarisは終焉を迎えます。元々OpenSolaris自体もアクティブな感じではなかったのですが止めを刺してくれました。ホントろくなことしないな、この会社は。

で、ここで血脈が絶たれていたと思っていたのですが、実はまだ生き残っている事が判明。とりあえずこんな感じみたいです。



いっぱいありすぎだよママン・・・。

とりあえずZFSを使用しようとするとLinuxのfuseとかは除くとSolaris、FreeBSD(とその派生)位しか選択肢が無いという印象だったんですがこちらも選択肢としてはアリかも??問題はillumosカーネルがどれだけ安定しているかなんですけどね。

VMware上のlinuxでカーネルの再構築 その3 もう少し煮つめてみよう編

Hyper-V用のカーネルを作る話をもう少し続けてみます。

どうもパッケージ名に関してはこんな感じで良さそう



$ time sudo make-kpkg --revision=0.2 --append-to-version=-hyperv kernel_image


これで「linux-image-3.10.0-hyperv_0.2_amd64.deb」という名前の物がはかれます。参考にしたページは古いのかこのオプションがどちらかしか入っておらず、--revisionの方は数字からスタートじゃないとおこられるし、--append-to-versionだけつけるとなんかバージョン番号の所にも同じ文字が入ってしまって長い名前が生成されてしまうという状況で前回のPOSTにはこの辺のオプションを含めていませんでした。やっぱり情報の鮮度って重要ですな・・・。


<閑話休題>


その2で作ったカーネルが何故期待した動きにならないのかという点。

まず、CONFIG_MEMORY_HOTPLUGがオンになっていないのではないかという指摘。確認確認・・・。入ってないじゃんorz これが無いとMemory Hot-addがちゃんと動かないのかな?

とりあえず下記の場所で設定出来る模様。


Processor type and features  --->
  [*] Allow for memory hot-add
  [*]   Allow for memory hot-remove


その他忘れ物達


Device Drivers  --->
  SCSI device support  --->
    [*] SCSI low-level drivers  --->
      <M> Microsoft Hyper-V virtual storage driver


大事な物忘れていましたなorz


あとdpkg -iで入れた時に/bootにinitrd.img-3.10.0-hypervが存在しない場合は以下の2ステップが必要でした。


$ sudo depmod 3.10.0-hyperv
$ sudo mkinitramfs -o /boot/initrd.img-3.10.0-hyperv 3.10.0-hyperv
$ sudo update-grub

まぁ、ここまでしてみたけどhot-addに関しては動いていない感じ。さらにいくつかデーモン動かして様子を見てみるとなんかネットワークが死亡する現象が。ダメだなぁこれは。

一応素のDebian7.1のカーネルだと動的メモリ拡張は動かないけど安定度という意味では普通に動いている様に見えるのでこちらの設定+Hyper-V関連というのも作ってみました。


結果・・・


-rw-r--r--  1 root root  4994468 Jul  8 14:31 linux-image-3.10.0-hyperv_0.3_amd64.deb
-rw-r--r--  1 root root 31629920 Jul 12 14:37 linux-image-3.10.0-hyperv_0.4_amd64.deb

すげーでかくなったw

でも結局安定せず同じように死んでしまいますorz

さてどうしたものかなぁ。

あ、ちなみにmemory hot-addに関してはHyper-V 2012 R2からじゃないと動かないんだ疑惑も出ていますがVMware上にHyper-Vサーバを構築という無茶をしてみた感じ動きは変わらずという感じ。さてはて・・・。

2013年7月1日月曜日

VMware上のlinuxでカーネルの再構築 その2 ビルドしちゃうよ編

作業ディスクの準備が出来たので早速カーネルを構築します。

3.8からHyper-V用のballoonドライバが入っているのですが、ちょっと試しにつっこんでみたところ、これにはちょっと問題がありました。

というのも確かに管理画面から見ると拡張RAMに対応してそうに見えるのですが、いくら最大値を設定していても起動時のメモリより多い方向には自動動的割り当てが走りません。これが出来るのは3.10からとの事。

で、丁度昨日(2013/6/30)に3.10の正式版がリリースされている様なのでせっかくなのでこいつを入れてみます。

まずはビルド用の前準備(開発環境とカーネルの設定、パッケージ作成に必要なものをそろえる)


$ sudo aptitude install build-essential
$ sudo aptitude install ncurses-dev
$ sudo aptitude install kernel-package


ソースは3.10の物をkernel.orgから落としてきて・・・


$ cd /usr/src
<ソースをコピーしておいて>
$ sudo tar Jxvf linux-3.10.tar.xz


展開します。必要なのか分からないけどlinuxという名前でリンクを作成。


$ sudo ln -s linux-3.10 linux


さぁ作業開始です


$ cd linux
$ sudo make mrproper
$ sudo make defconfig
$ sudo make menuconfig


ここでカーネルの構成を設定するのですが以下のポイントで設定しています


  • 初期状態だと不要だと思うけど全部設定を消す
  • 初期設定を揃える?為にdefconfigを設定してから開始
  • Hyper-Vに関連する部分は全て有効に


最終的な目標はHyper-V用の不要なドライバーを完全カットして、かつチューニングされたカーネルなわけですが、知識が足りていな過ぎて何をどう削ったらいいのかさっぱりわからない状況。

ヘルプを見るとなんとなくalldefconfig(デフォルト設定)をベースに設定すべきな気がするけど、試しにやってみたらドライバだけではなくカーネル系も殆ど何も無い状況になってしまって流石に設定ダルイ気がしたので・・・とりあえずdefconfigベースにしました。

で、問題はHyper-V関連の設定。このmenuconfigは依存関係のある物はコアの物を有効にすると初めて項目が現れる様なので手順通りにやらないと設定できません。とりあえずHyper-V関連は以下の手順で良いと思いますがチューニングという意味では色々足りなかったり多かったりするはず。今後煮つめていきます。



Processor type and features  --->
  [*] Linux guest support  --->
    [*] Enable paravirtualization code


にチェックするとHyper-Vの項目の設定が出来る様になるので(厳密にはparavirtualization codeはいらないかも)


Device Drivers  --->
  Microsoft Hyper-V guest support  --->
    <*> Microsoft Hyper-V client drivers
    <*>   Microsoft Hyper-V Utilities driver
    <*>   Microsoft Hyper-V Balloon driver


なんとなくHyper-V系の設定を一式ビルトインで設定

ここまで設定すると


Device Drivers  --->
  HID support  --->
    Special HID drivers  --->
      <M> Microsoft Hyper-V mouse driver


Device Drivers  --->
  Graphics support  --->
    -*- Support for frame buffer devices  --->
      <M> Microsoft Hyper-V Synthetic Video support


Device Drivers  --->
  [*] Network device support  --->
    <*> Microsoft Hyper-V virtual network driver



この辺を選べるようになるので設定する。基本サーバとして使う場合はネットワークは必須、HIDとVideoは多分いらないでしょう。

defconfigにここだけ設定したらとりあえずカーネルを作ってみます。

単純にビルド、自分のマシンに入れる場合はmake installで良いのですが、今回はここで作成したものをHyper-V上のdebianに入れるのが最終目標なのでmake-kpkgを使います。


$ time sudo make-kpkg kernel_image


これで「linux-image-3.10.0_3.10.0-10.00.Custom_amd64.deb」みたいなカーネルのインストール用パッケージが一つ下の階層(/usr/src)に作成されます。頭のtimeはビルド時間を測る為の物。本当は--revisionとか名前は何かつけるべきなんだろうけど今回は省略(というか長い名前ついてしまってビビったのでちょっと研究してから・・・)

これを入れて早速チェックしたんですが


$ scp linux-image-3.10.0_3.10.0-10.00.Custom_amd64.deb <username>@<host>:/home/<username>


とかやって入れたいマシンにコピーして、そのマシンにつないでから


$ sudo dpkg -i linux-image-3.10.0_3.10.0-10.00.Custom_amd64.deb


とかやって入れてやるとブートローダの設定までしてくれちゃうので再起動します。

が・・・


CentOS6.4やKernel3.8+balloonの時と同じで起動メモリ以上は自動的に増えねぇ・・・orz


さーってどうすっかな・・・


VMware上のlinuxでカーネルの再構築 その1 準備編(作業ディスクの追加)

とりあえずカーネルの再構築に際して作業用ディスクを追加します。

というのも

  • カーネルの再構築には結構なディスクが必要(多分6~7GB?)
  • 再構築した後はその領域はいらない

という2つの理由から新規にワークディスクをマウントしてそこで作業します。

ちう事で、構築ネタついでにディスクを増やす方法を。

手順は以下の通り

  1. VMware playerから新規ディスクを作成、追加する
  2. Linux上からパーティションを作成する
  3. Linux上からフォーマットをする
  4. Linux上からマウントをする

~まず1から~

新規のディスク作成は簡単。

  1. 仮想マシンの設定画面から「追加」を押す
  2. 「ハードディスク」を選択
  3. 「仮想ディスクの新規作成」を選択
  4. SCSIを選択
  5. 容量を10GBにして「仮想ディスクを単一ファイルとして格納」を選択
  6. 場所を指定して作成終了。

~次は2番のパーティションの作成~

1の新規作成後に再起動してディスクを認識している事を確認。


$ sudo fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008ecd3

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    15988735     7993344   83  Linux
/dev/sda2        15990782    16775167      392193    5  Extended
/dev/sda5        15990784    16775167      392192   82  Linux swap / Solaris

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table


SCSIなのでsd[x]になっています。/dev/sdbが今回追加したものなのでこちらにパーティションを作成します。


$ sudo fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel with disk identifier 0x5e5eaeb7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix
Hex code (type L to list codes): 83

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


これでパーティションの作成は終わり。一応確認します。


$ ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1


sdb1が出来ていますな。


~続いて3のフォーマットする~


$ sudo mkfs.ext4 /dev/sdb1


以上w


~最後に4のマウント~

今回は/usr/srcで作業しようと思っているのでこちらに。


$ sudo mount /dev/sdb1 /usr/src


こちらも以上!

とりあえずこれで環境が出来ましたとさ。続く!





2013年6月20日木曜日

Greylisting

現在使用中のメールサーバのGreylistingには有名どころのpostgreyとかsqlgreyではなく(前の鯖はsqlgreyだったな)、なんとなく多機能そうなPolicydを採用しているんだけど、どうもきちんと動作していない気がしてログを確認してみたらperlのモジュールが色々足らずにワーニング出てた。

/usr/local/lib/perl5/site_perl/5.12.4/cbp/modules/CheckHelo.pm 31
use Net::DNS::Resolver;

/usr/local/lib/perl5/site_perl/5.12.4/cbp/modules/CheckSPF.pm line 30
use Mail::SPF;

/usr/local/lib/perl5/site_perl/5.12.4/cbp/protocols/Bizanga.pm line 28
use URI::Escape;

多分Greylisting自体は動いていたと思うんだけど、どうも一度効果が疑わしいって事でDBのデータを直接手で消してから変になってしまっている気がしてならない。

まぁ、何はともあれモジュールのインストールをCPANでしましょう。

# perl -MCPAN -e shell
cpan[1]> install Mail::SPF

これ1つで上記3つ全部入ったっぽい?
インストール済みのモジュールは

# find `perl -e 'print "@INC"'` -name '*.pm' -print

これで確認出来るんだとさ。見てみたら全部入っていてデーモンの再起動かけたらワーニングもログに出なくなったので多分これでやっとちゃんと動いたんだと思う。

まぁ、それはそうと実際の効果がイマイチ実感できない(結構SPAMがすり抜けてきてる)ので各機能の効果の統計をとりたいところ。

元々GreylistingはSPAM用にチューニングされた本来必須の再送しないでモリモリ投げ続けるシステムにだけ効果がある仕組みなわけで、BOTネットワーク使うから効率とかどうでもいいやーなんて力技になったら対処出来ないからねぇ。そこの見極めをしたいところ。

で、管理用のWebアプリは本当に最小限の機能しか無いみたいだしログから頑張って解析するしか無いのかなー。折角自前でやっているんだし、もう少し設定を煮つめて効果確認をしよう。

というか、どうせなら自前で分析まで行えるPolicyサーバとか作ってみるのも一興ですかねぇ。

2013年6月6日木曜日

Linodeさん素敵

VPSという名前が流行りだす前からこの手の仮想化のサービスには興味があり色々借りちゃ解約を繰り返していたけどずっと使い続けているところがあります。

Linode!!

Parallels(最近影薄いよね)とかを使っていない所はコンパネとかが無かったりしょぼかったりする中、凄い出来のいいコンパネを準備していて、かつサーバもド安定の鉄板な会社です。

で、年単位で落としていなかった鯖をなんとなく惜しい気もしながら久々にシャットダウン。リプレースの為に中身を総入れ替えをしようとしていて気付く。

あれ?ディスク増えてる??

しかもよーくよーく見ると・・・「アップグレード出来るよ!」とか書いてあります。

半信半疑で押したら・・・メモリが倍になりました(^v^)

太っ腹だぜ!

さくらなんかは同じ値段でどんどんサービスが良くなるけど、こういうアップグレードパスは用意してくれなくて自分で別サービスを契約して手動で移動させないといけないんですよねぇ。

ああ、快適すぎる。他の会社も見習って欲しいゾ!

っと珍しく大絶賛で終わります。

2013年6月4日火曜日

CentOSにハマル

今回CentOSを使用した環境を構築していてハマったのでメモ

1.nginxが無い

なんかいつの間にかメジャーになってしまったので今時無いとか・・・と思うケド、まぁちょっと前まではマイナーソフトだったしパッケージ化も遅れていたししょうがない?でも選択肢として初期状態でyumしても出てこないのは残念。まぁnginxの本家に対策方法が書かれていますが。

http://d.hatena.ne.jp/yoshi-ken/20120205

この辺を参考にすれば入れる事が出来ます。


2.gitが古い

まぁ、これはコチラの事情でしかないんだけどrhodecodeを入れようとしてハマったので。なんかコミットできないと思ったらエラー吐いてて内容がオプションがどうのこうの。要は1.7.4以上じゃないとサポートしてないオプションを使っているので1.7.1が最新のCentOSではイマイチでしたという話。

http://toybox.hatenablog.jp/entry/2012/11/13/194710

とりあえずこの辺を参考に新しい物にしておきました。

んまー、これってrhodecode側の事情でgitは最新じゃないとどうのという事はないし(多分)、rhodecodeはrhodecodeで古いバージョンの場合のサポートは入れるべきだと思うしどちらかというとCentOSに非は無いんですけどね。



今回は人様のページのリンクを張ってオシマイ。

まぁ、個人的には枯れている環境を維持するのは悪い事では無いけど、最新の物と枯れている物の選択肢があるとやりやすいよなとか思います。管理大変なのは分かっているしそこら辺も含めてのディストリビューションの選択なんですケド個人的はやっぱりこの辺を踏まえるとDebian系の方が使いやすいかな。あっちは一応トレンドは押さえてる感じがするし。ここら辺はセンスだったり大人の事情だったりするんでしょうけどね。