2013年6月30日日曜日

メモ:CentOS6でNICの番号が変わった時

Hyper-Vの調子が早速悪くなったので、Hyper-Vを再インストールしたところ、ネットワーク回りの設定が全て吹っ飛んで涙目になりながら全仮想マシン+本体の設定をしました。

その後、無事起動してしめしめと思っていたのですが、翌朝、メールがよく見るとサーバ自身からしか来ていない・・・・

もしやと思うとSSHが繋がらないし Orz

結論から言うと、NICの設定をやりかえた結果、MACアドレスが変わったのが原因で、別NICと認識され、Eth0->Eth1にご丁寧にもリネームされたようです。

ログにも
udev: renamed network interface eth0 to eth1
とご親切にも。
で、ちまちま設定を変えていったのですが、ifconfig-eth0にはこんなこともと、MACアドレスを削除しておいたのに、まだどこかでMACアドレスを覚えていたのか気になったので調べてみました。
どうも、
/etc/udev/rules.d/70-persistent-net.rules
ってやつがそのようで、ルールファイル(?)にバッチリ書かれていました。
というわけで、eth0のMACを書き換えてもいいのですが、面倒なのでeth0の設定はコメントアウトし、
eth1の設定をeth0に書き換えました。
ちなみに、CentOS5では、上記ファイルはないようです。似たようなファイルはあるのですが、MACアドレスは記載されていませんでした。
ただ、ifconfigとかもろもろネットワーク回りの設定は.bakにリネームされていましたが・・・


2013年6月27日木曜日

Hyper-V+OpenVZでメモリ不足になる。

Hyper-V上でOpenVZを動かす場合、Hyper-V側の動的メモリ割り当てを有効にすると、
たとえ4GByteメモリを割り当てても、OpenVZが動くマシンでメモリを食いつぶします。
しかし、実際には200MBちょっとしか割り当てられていません・・・

どうも、カーネルがHyper-Vと相性が悪い??ようで、Hyper-V側にメモリ要求がうまく伝わらないような感じです。(詳細に調べたわけではありませんし調べ方も知りません)

今のところ、動的メモリ割り当てを切ってしまえば、メモリ不足にはなっていません。


2013年6月26日水曜日

Sophos UTM Home Editionを試してみた


Sophos UTM Home Editionが家庭内利用無料ということで、Hyper-V上に入れてみました。

まずはここからユーザ登録をします。暫くすると、DL先とライセンスキーが添付されたメールが届きます。
(個人ユーザなのに会社名が必須なのはどうなんだろう??)

DL先のリンクは多分書くと不味い気がするので載せませんが、DLするISOファイルは多分initrdのサイズが違う程度なので、どれでもいい気がします。

Hyper-VのNICが認識するのか不安でしたが、どうもRedHatベースのようで、普通に認識しました。
インストール自体は、ISOファイルから起動。あとは画面の指示に従うだけ。なのですが、
いきなりHDDを初期化するのはどうなんでしょう・・・

NICは最低2つないと怒られるっぽいです。怒られてもLinuxなんで後からなんとでもなる気がしますが・・・

起動するとrootのパスワード変更を求められますので、変更します。
.が、こいつ、192.168.0.1というIPで立ち上がり、かなり迷惑千万!なので、最初はLANケーブルをつながないほうがいいでしょうw
ifconfigでIPを変更後、https://設定したIP:4444にアクセス。
ここでもなぜかユーザ登録を求められます(焦

入力後、40秒ほど待てといわれ、いったん落ちますw
暫くしてのち、アクセスすると無事接続できます。

バックアップから戻すか、ウイザードをつづけるかというわれるので、そのまま次へ
ライセンスファイルをアップロードするように言われるので、メールに添付されたライセンスファイルをアップロード。

LAN側のIPを指定します。検証環境ではすでにDHCPサーバがいる関係上DHCPサーバは動かしません。(チェックを入れない)
WAN側インターフェースをしていします。Hyper-VのNICが認識されていますねぇ。
ファイヤーウォールの設定をします。
とりあえず、デフォルトのままにしておきます。
侵入検知の設定っぽい。
多分裏ではsnortが動くんだろうなぁ・・と推測しながら、劇的に重くなりそうなので今回はパス。
アプリケーションコントロールとネットワーク可視化?
有効にするとトラフィック見れるよとのことなので、有効にしておく。
Webプロテクション(英語訳すのが疲れてきた・・・)
どうやら、ウイルスとスパイウエアのスキャンを有効にするのと、コンテンツフィルタの設定らしい。
多分裏ではsquid当たりが動いて(略)
メール保護。
SMTPとPOP3にプロクシを立てて、それを通してスパムやウイルスなどをチェックするらしい。
無料で結構やるなぁ。とりあえず、今のところメールサーバ側で対策済みなので使う予定はない。

サマリーが表示される。
(デフォルトだとファイヤーウォールは無効なのか・・)
ダッシュボードは今風。
メモリ1Gじゃ全然足りないし、CPUも1コアじゃ全然足りていないっすねぇ。
ちなみに、ちゃんと日本語表示になります。タイムゾーンの設定を忘れずに。
Hyper-Vでの起動画面はこんな感じ。

自宅サーバをHyper-Vに移行した時にはまったことメモ

自宅サーバの具合がますます悪化してヤバい状態なので、意を決してHyper-V環境に退避させました。
まぁ簡単にはいかなかったわけでして・・・
そもそもvmware-esxとかkvmとかにしなかった段階でチャレンジャーとか

サーバの動作環境は以下の通り
OS:CentOS5.9(32bit)
HDD:200GByte
MEM:2GByte

Hyper-VはWindows Server 2012上のHyper-V

まずは、Hyper-V上にCentOS5.9を最小インストールする。
最少インストールとのことで、ネットワークインストールを行った。

ポイント:
CentOS5.9はHyper-Vに標準で対応しているので、
仮想NICにレガシーを使わなくても、普通に行ける。
従って、Linux Integration Services Version 3.4 for Hyper-Vは不要。
(ってか入れるとCDROMがマウントできなくなったりNICがレガシーも動かなくなったり色々嵌る。ちゃんとインストールマニュアルは読もう)
インストール時、仮想環境内にあるHyper-Vをインストールすること。(デフォルトで選択されているはず)

毎度のことだが、CentOSの最少インストールは全然最少じゃないので、不要なサービスを止めたりパッケージを削除したりする。

が、ここで生成されたVHDXファイル(仮想HDD)がバカでかいことに気付く。
(いや、実はちゃんと事前検証していた時から気づいていたんですが・・)

ここによると、ext3とVHDXの組み合わせがダメらしい。
ext4にすればいいということなので、ext4にするが、bootパテーションはext4に出来ない。
従って、bootのみext3でいいやとインストールすると、ext4がマウントできなくて起動しません!
なので、参照先にあるように、パワーシェルでブロックサイズ1MBなVHDXファイルを作成。
New-VHD -Path ファイル名.vhdx -Dynamic -SizeBytes 200GB -BlockSizeBytes 1MB
こんな具合。
無事作成できたので、仮想マシンを起動しようとするも、何故か一般アクセス権がないといわれる。

これ、Hyper-Vつついていると時々出てくる。一般アクセスってなんやねん!!

っとググる。

このサイトにあるように、いったん仮想マシンからディスクコントローラごとHDDの割り当てを削除する。
っといっても割り当てが削除されるのであって、ファイルそのものが消える訳ではないのでご安心を。
その後、ディスクコントローラを追加し、HDDに先ほど作成したVHDXファイルを割り当てる。
これにより、ランダムなID?のユーザに対し、読み書きの権限が追加される。
(こういう地味な処にひと手間かけさせるあたりが流石MS。)

これで再度ext3で再インストール。

本来ならば、ここから一つ一つセットアップを行うべきなのだが、


  • 既に何が動いているかわからない
  • 何の設定をしたか覚えていない
  • 野良リポジトリを追加しまくっている上に既にいくつかのリポジトリはもうない
  • メールの容量が巨大
  • メールにvpopmailなる少々トリッキーなことをやっているのでカオス


という非常に頭の痛い(自業自得な)事態なので、rsyncでサクッとコピーするw
最近のWindowsと違い、Linuxはファイルコピーで割といける。
既に仕事でも詳細不明な怪しいサーバを丸々新しいマシンに引っ越すとかで実践済み。
移行元、移行先それぞれにrsyncとsshをインストール(すでに入っている)
移行元のサービスを極力止める。当然ネットワークとかsshとか止めると意味ないのでそのあたり注意。
クーロンは止めておいたほうがいい。
コピー中に動作しだしていろいろ面倒事が発生したので。
当然外部からの接続は遮断しておくか、外部サービスのデーモンは殺しておく。
selinuxとiptablesは念のため双方殺しておく。

コマンド例は以下の通り。これを移行元サーバで動かす。

rsync -rtlzvogpHAX --delete --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / 移行先IP:/
excludeオプションの箇所は各自のサーバ事情に合わせて変更すること。
くれぐれも動かすマシンを間違えないこと!!間違えると消えます!!
心配ならサーバのバックアップを取っておくといい。



移行が終わったら、仮想マシンを再起動せずに、ファイル容量や主要ファイルがちゃんとコピーされているかを確認。
多分Hyper-V関連が削除されているので、インストールしておく。

yum install hypervkvpd
念のため、/etc/modprove.confにeth0の設定がないかチェック。
あれば以下のように書き換えておく
alias eth0 hv_netvsc
あと、前のサーバがSATAだった場合、Hyper-VではIDEなのでカーネルパニックになって動かない。
なので、ここを参考に、再起動時、レスキューモードで起動し、initrdを再作成する。

NIC回りはコピーの対象にしていないので、起動して問題ないようなら移行元をネットワークから切り離し、仮想マシンのIPを正しく変更し、念のため再起動
OKなら終了。

お疲れ様でした。







(結局半日以上かかったよ・・・Orz)

追記
何故かDovecotが死亡する事案が発生。
原因は時刻がずれるのをntpdが急に補正するためらしい。
ここを参考に対策をとる。

2013年6月13日木曜日

Chefを試してみた

最近巷で流行っているらしいChefを試してみました。

今回はどんなものかを確認するのが目的なので、サクッと前回作ったOpenVZをHyper-V環境上に構築しました。
全てHyper-V上で構築しなかったのは以下の理由からです。

  • 何回も再インストールする可能性がある
  • 再起動せずに動的にメモリを増減できる
  • 再起動が早い
  • OSのセットアップに時間をかけたくない&最少インストール環境でやりたい
  • Linuxしか動かさない
検証環境はこんな感じ。

ググルと、Chef-Soloというクライアントとサーバを同一マシン上に構築する例が非常に多い。
1台くらいなら手動設定しても大した手間ではない気がするが・・・
(そもそも、chefでググルと"シェフ"が出てくるのでw)
あと、日本語のまとまった情報は皆無。
最近Verが11になってインストールもガラッと変わってしまったようで、あまり役に立たない。
結局は公式の英語ドキュメント頼りなのだが、この手の(?)OSSには珍しくドキュメントの量が多いので、読むのもしんどい。

まずは、用語の説明から。
これを最初に押さえておかないと、ドキュメントを読むとき混乱する。
(ええ、随分嵌りましたとも)

ここもしっかり押さえておくといい。

構成要素はこの図が分かりやすかった。

まずはchefサーバの構築から。
これは、噂によるとdebian系じゃないとものすごく大変らしいので、素直に従っておく。
なお、最初メモリを512MBにしたが、スワップしまくりなので、最低1GByteくらいあるといい。

OS:Ubuntu Server(12.10 x86-64)
最少セットアップを行い、アップデートまで済ませておく。
apt-get update
apt-get upgrade
apt-get dist-upgrade
とかとか。
勿論固定IPを割り当てておく。
あと、nslookupとか使えなかったら地味に不便だったので入れておいた。
apt-get install dnsutils
DNSに登録し、ホスト名で引けるようにしておくか、hostsなど何らかの方法で名前解決をできるようにしておくこと。(重要)

1:http://www.opscode.com/chef/install/
より最新版をDL
2:sudo dpkg -i  chef-server_11.0.8-1.ubuntu.12.04_amd64.deb
でインストール(ファイル名は適宜変更のこと)
3:sudo chef-server-ctl reconfigure
で設定を走らせる。
4:chef-server-ctl test
でテストを実行する。
#<Errno::ECONNRESET: Connection reset by peer - SSL_connect>
なエラーが出たら、DNSに登録がないか、名前解決に失敗しているか、opensslが入っていない。

 70 examples, 0 failures
 という感じで出ればOK。
 0 examples, 0 failures
 とでると、失敗している。
https://サーバのホスト名/でアクセス。
右に書いているが、
                  ユーザadmin、パスワードp@ssw0rd1
でログイン。
パスワードを変更する。

サーバに関しては以上。分かってしまえばインストールは簡単。

次。WorkStation。
こいつの役割、複数持たせる必要性を理解していないのだが、Chefサーバを操作する管理コンソールのようなものと理解している。
(の割には、こいつ自体にレシピを作成してサーバにアップロードとかしているので多分違うと思う)

OS:debian6 (x86-64)
メモリは512でも問題なかった。
Ubuntuにしなかったのは、debian系ということで他を試してみたかっただけです。
WindowsやMacでも動くらしい・・・

例によって最少インストール。
アップデート、固定IP、名前解決回りは済ませておく。
地味に構築は悩んだので、一発で動かせるようにした。
sudo apt-get -y install ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential wget ssl-cert curl
cd /tmp
curl -O http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz
tar zxf rubygems-1.8.10.tgz
cd rubygems-1.8.10
sudo ruby setup.rb --no-format-executable
cd
sudo gem install chef --no-ri --no-rdoc
sudo apt-get -y install git-core
git clone git://github.com/opscode/chef-repo.git
mkdir -p ~/chef-repo/.chef


chefサーバの/etc/chef-server/chef-validator.pemを
~/chef-repo/.chef/validation.pemに配置する。
chefサーバの/etc/chef-server/admin.pemを
~/chef-repo/.chef/admin.pemに配置する。

knife configure -i
で設定。
ところどころ、デフォルトのパスが違うので注意。
create new userはchefでのユーザ名になる。(OSとは関係ない)

root@debian:~# knife configure -i
WARNING: No knife configuration file found
Where should I put the config file? [/root/.chef/knife.rb] /root/chef-repo/.chef/knife.rb
Overwrite /root/chef-repo/.chef/knife.rb? (Y/N) y
Please enter the chef server URL: [http://debian.localdomain:4000] https://chefサーバのホスト名/
Please enter a name for the new user: [root] akira
Please enter the existing admin name: [admin] admin
Please enter the location of the existing admin's private key: [/etc/chef/admin.pem] /root/chef-repo/.chef/admin.pem
Please enter the validation clientname: [chef-validator] 
Please enter the location of the validation key: [/etc/chef/validation.pem] /root/chef-repo/.chef/chef-validator.pem
Please enter the path to a chef repository (or leave blank): /root/chef-repo/
Creating initial API user...
Please enter a password for the new user: 
Created user[akira]
Configuration file written to /root/chef-repo/.chef/knife.rb

/root/chef-repo/内でknife client listと実行すると、クライアントのリストが出てくればOK


最後にクライアント。
設定するのに一番慣れているCentを使った。
OS:CentOS5(x86)

例によって最少インストール。
ネットワークの設定、アップデートなど諸々。

chefクライアントのインストール

curl -L https://www.opscode.com/chef/install.sh | bash
 echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bash_profile && source ~/.bash_profile

設定
/etc/chef/client.rbというファイルを作成。
本当はコマンドで作成できるらしいんだけど、うまく動かなかった。
中身は以下の通り。
log_level        :info
log_location     STDOUT
chef_server_url  'https://chefサーバ/'
validation_client_name 'chef-validator'
chefサーバの/etc/chef-server/chef-validator.pemを
クライアントの/etc/chef/validation.pemに配置する。
クライアントを起動してみる。
chef-client

 サーバの管理画面のNodesのタブにクライアントが表示されればOK

では早速動かしてみる。
以下の手順はWorkStationサーバで動かす。

まずはテストクックブックを作成し、テストレシピを作ってみる。
knife cookbook create test
vi ~/chef-repo/cookbooks/test/recipes/default.rb
中身はこんな感じにしてみた。
やっていることは、/var/www/html/hello.txtを監視し、
無いもしくは内容が異なっていたら、テンプレートであるhello.txt.erbの内容で
パーミッション0644で作成せよ。
template "/var/www/html/hello.txt" do
 source "hello.txt.erb"
 mode 0644
end

テンプレートの中身を作成。拡張子はerbでないといけないようです。

vi ~/chef-repo/cookbooks/test/templates/default/hello.txt.erb
HELLO WORLD!


作成したクックブックをchefサーバにアップロードします。

knife cookbook upload test
消すとき
knife cookbook delete test

shefサーバのWeb画面でクライアントに対し、作成したレシピを適用。
クライアント側でchef-clientを実行すると、ファイルが変更されます。


トラブルシューティング

クライアント設定で、chef-clientを実行すると、
Error Resolving Cookbooks for Run List:
というエラーになる。

原因:
/etc/chef/client.rbのサーバのアドレスがhttpになっている。
>httpsにする




2013年6月9日日曜日

広島サーバユーザ友の会 第10回勉強会に参加しました。

広島サーバユーザ友の会 第10回勉強会に参加してきました。
なお、10回ですが、2進数表記らしいので10進数で2回目です(笑)

テーマは仮想化について語ろう。ということで、自宅サーバを物理マシンからHyper-V上に構築した際苦労したVLAN周りについて。

発表したスライドはこちらになります。


2013年6月8日土曜日

AngularJS で遊ぼう

今回は、AngularJS で遊ぼうというイベント(?)に参加してみました。
(お昼に食べたブルームーンカフェというところのデミグラスバーガー)

まずはチュートリアルをやってみました。
(環境構築に手間取りましたが、実はnode.jsのところだったので、windowsな人は関係なかったというオチがつきましたが・・)

が、

チュートリアルが英語なので、読むのが辛い・・・

なので、途中で投げ出して、チュートリアルを改造して、理解した範囲内で簡易電卓を作ってみました。こんなのでも、苦労しながら動くと楽しいものです。
(作ったソースはこの辺りに置いておきますね。)

  • ng-から始まるのはAngularJSのAPI
  • {{(この中にJava Scriptが書ける。) }} <-だけど、Java Scriptの標準関数とかは使えないので、厳密にはちがうっぽい

HTMLタグのタグに機能追加しているイメージ?
例えば
  1. <li ng-repeat="phone in phones">
  2. {{phone.name}}
  3. <p>{{phone.snippet}}</p>
  4. </li>
のコードは、PHP的に書くとこんな感じ?
(ロジックとhtmlがごちゃごちゃしないのは凄くいい!)
<li>
<?php
foreach (
$phones as $phone) {
   
echo $phone.name;
    echo "<p>" . $phone.snippet . "</p>";
}

?>
</li>

実はJavaScriptはさっぱりわからないのですが、なんとなく触ってみた感じ、JQueryや素のJSより
簡潔にかけて分かりやすいかなと思いました。
View(html)にロジックが書きにくい(書けない?)のは、MVC的には正しいんでしょうけど、私には少し理解が大変でした。

たまには、こういうまったく別分野な勉強会に顔を出すのも楽しいものです。