mysqlコマンド

ちょっと MySQL に触るようになってきたのでメモ。

取敢えずDBサーバに接続する

mysql -u <ユーザ> -h <ホスト> -p<パスワード> --ssl

データベース名を続けるとカレントデータベースを指定することも出来る。でもデータベース指定の意味は PostgreSQL とはちょっと違うようだ。指定しててもなくても、そのサーバにあるデータベースはみんな見に行ける、ポストグレスでいう schema 見たいな感じ。だからデータベースをまたがってジョインできたりもするみたい。
あと、まあ --ssl オプションはつけといた方がいいよね。

サーバに接続したらステータスとコマンドの一覧

status
help

データベース等の一覧には

SHOW DATABASES;
SHOW TABLES FROM <データベース名>
SHOW COLUMNS FROM <テーブル名>

カレントデータベースの指定があれば、<データベース名>の指定は省略していいかも。

あと、接続文字コード

EUC-JP指定なら

SET NAMES 'ujis';

あるいは「--default-character-set 」オプション

Redirect と ProxyPass

Apacheにて、ちょっとサイトの一部を別サーバにリダイレクトすることになって RedirectMatch の設定をしてみたんだけど、後段の逆プロクシ設定に上書きされて踏み潰されてしまうみたい。
http://www.hietavirta.net/blog/item/335 によれば ProxyPass避けすればいいそうだ。

Redirect permanent /subfolder/ /
ProxyPass /subfolder !
ProxyPass / http://localhost:8080/site/
ProxyPassReverse / http://localhost:8080/site/
ProxyPassReverseCookiePath /site /

RubyHiroba で Ruby の折り紙

/5/30(木)-/6/1(土)RubyKaigi 2013, May 30 - Jun 1、/6/2(日)RubyHiroba 2013、行って来ました(この項翌日に書いています)。有難うございました。
rubyhiroba では一日折り紙をしていました、お付き合いいただいたみな様有難うございました。

今回折り紙は200枚用意しました。残っていたのは60枚ほど。折ったらもう一枚(二枚)平らなのをお持ちいただいたりしたし、70人から100人くらいの方に折ってもらった事になるかな(RubyKaigi中に折ってもらった何人かの方も含め)。

Chef と AWS

Chef で AWS

まずは Chef で AWS 、下記を参考に

あと

取敢えず Debian 6.0.4 squeeze をインストールする。Rubyruby1.9.1-full パッケージで 1.9.2、コマンド類は ruby1.9.1 とかバージョン数字付きなので、ないのシンボリックリンク作る(update-alternatives --query rubyruby の登録はない)。
gem のバージョンは 1.3.7、Debianのパッケージになってるので更新は出来ない。
という辺りで「sudo gem indtall chef (--no-ri --no-rdoc 注意)」。結構いろいろ一緒に、「chef-client -v」は「chef-client -v」。
そして「sudo gem install knife-ec2」はそのままでは失敗、依存する nokogiri に libxml2-devパッケージとl ibxslt1-devパッケージが必要となる、aptitude で入れておく、其々本体はもう入ってるんだよね。

http://www.opscode.com/hosted-chef/HostedChef でユーザ登録、オーガニゼーション名に困ったり。

validation key Knife configuration file private_key が何処から取れるのか分かりにくい。

GitHub - chef-boneyard/chef-repo: DEPRECATED: Use of this repository is deprecated. We recommend using the chef generate repo command that comes with ChefDK.のこと。空の Chefリポジトリ

(0)<ホスト>[189] git clone git://github.com/opscode/chef-repo.git
Cloning into chef-repo...
remote: Counting objects: 199, done.
remote: Compressing objects: 100% (119/119), done.
remote: Total 199 (delta 71), reused 161 (delta 47)
Receiving objects: 100% (199/199), 30.28 KiB, done.
Resolving deltas: 100% (71/71), done.
[~/projects] <pts/1>
  1. .chefディレクトリ作って上記キーファイル類を配置
  2. knife cookbook site vendor chef-client
    • Cookbook chef-client version 1.1.0 successfully installed
    • cookbooks/chef-client以下にいろいろ
  3. knife cookbook upload chef-client
    • Uploading chef-client [1.1.0]
    • upload complete
      • Webのマネージメントコンソールで Cookbooks を確認、入ってる

「knife client list」でも出てくる。上記で何かのキーを作る時に登録した名前のクライアント

そして EC2 なんだけど、上記参考リンクではうまくいかない、

 knife ec2 server create --run-list 'recipe[chef-client]' --image ami-31814f58 --ssh-key <キーペア> --groups <セキュリティグループ> --ssh-user ec2-user

とかすると EC2インスタンスは作れて、ジェムとかいろいろ入れてくんだけど、ちょっと失敗するのか、chef のノードとしては出てこない。EC2 のマネジメントコンソールには出てくるけど、シェフのマネジメントコンソールの node としては現れない。

本サイトの EC2 Bootstrap Fast Start Guide

/var/lib/gems/1.9.1/gems/knife-ec2-0.5.10/lib/chef/knife/ec2_server_create.rb とかその周辺に bootstrap手順

それで ubuntu はできた、--groups <セキュリティグループ> 注意。

AmazonLinux を -d centos-gems で試してみる、こっちは駄目だ、オプションは受け入れてくれたが chef のインストールに失敗、node にはなれない。

シェフのマネジメントコンソールでノードを Delete しても EC2インスタンスは立ったままだった。ノードリストから消えたけど。再登録どうするんだろとか考える前に AWSマネジメントコンソールからターミネート。クライアントも残るっぽいので別に Delete。

knife ssh サブコマンドの -a オプション、「-a ec2.public_hostname」っていうのはまんま書く、はじめパブリックホストネーム自体を書いてて駄目だった。

ブートストラップのスクリプトを置く場所、探しに行く場所 .chef/bootstrap/以下(bootstrapサブディレクトリ重要)、-d で指定するとき拡張子 .erb はいらない。

https://gist.github.com/1571189 の chef bootstraper for amazon-linux は取敢えず動いた。手元で Ruby1.9.3 に行くように書き換えたり、冒頭「yum -y update」「yum -y install mlocate」書き加えたり。

chef-client

knife ec2 server create -I ami-6936fb00 -x ubuntu --groups <> -r chef-client

デフォルトのディストリビューションubuntu なので -d ディストロ指定しなくてもブートストラップまで行く。そして chef-client が入る、「ps aux」するにデーモン稼動してる

root      5908  0.0  1.1  32132 20548 ?        S    07:34   0:00 /usr/bin/ruby1.8 /usr/bin/chef-client -d -P /var/run/chef/client.pid -L /var/log/chef/client.log -c /etc/chef/client.rb -i 1800 -s 20

一方 AmazonLinux で上記ブートストラップスクリプト使うと

knife ec2 server create -I ami-1b814f72 -x ec2-user --groups <> -d amazon-linux -r chef-client

chef-client 自体は run_listに入るがデーモン的実行はない。コマンドラインで実行する(sudo が必要で、そうすると /usr/local/bin のパス指定も要る)、

[Could not determine service init style, manual intervention required to start up the chef-client service.] action write (chef-client::service line 241)

とか言われる。デーモン実行自体は出来る、ubuntu のときと同じオプションで実行する。まあ手でデーモン実行するかな。上記 amazon-linux ブートストラップに書くのはあんまりだよね。

chef-client のレシピはマルチプラットフォーム対応しようとしててちょっと見にくいかも。

cookbooks/chef-client
  • chef-client/attributes/default.rb
    • パスとか上記オプション値とかの初期設定、プラットフォーム選択あり
  • chef-client/recipes/service.rb
    • このなかでサービスを起動してる、Could not determine service のエラーメッセージもここで(最後の else) 作ってるみたい

レシピの実際

マルチプラッとフォーム対応とか、リソース間の依存関係(あれをやってそれがおわったらこれをして、みたいな)とか考えなければ結構なんとかなる感じ。http://wiki.opscode.com/display/chef/Resources#Resources-Directory にリソース(レシピで実行する事)のリストがあるのでそれを見ながらなんとか。

Nagios3 のインストール

ちょっと Nagios - The Industry Standard In IT Infrastructure Monitoring を見ている(Nagios 3翻訳ドキュメント - Nagios 3翻訳プロジェクト Wiki)

aptitudeインストール

Debian6.0(squeeze) にて、取敢えず aptitudeからパッケージインストール (3.2.1-2)。そのままで入るのは 1+25個のパッケージ。nagios系の名を持つが入らないものもある、プラグイン系とか。そして二つ訊かれる

  1. nagios3-cgi を設定しています
    • "nagiosadmin" ユーザ用に作成するパスワードを入力してください。
    • これは、設定完了後に、インストールした nagios にログインするのに使用されるユーザ名とパスワードです。ここでパスワードを入力しない場合は、nagios へのアクセスを自分で設定しなければなりません。
    • nagios ウェブ管理用パスワード:
    • パスワードの確認
  2. Samba Server
    • このシステムのワークグループを指定してください。
    • ワークグループ/ドメイン名: WORKGROUP (既定値)

サンバ入るんだ、ワークグループは適宜調整、近くに Windows系のサーバはないのであんまり使わないような気もする。

パスワードと CGIページ

それで管理用パスワード、綴り間違えちゃったみたいなんで調整、コマンドラインから htpasswd、パスワードファイルの場所注意。

sudo htpasswd /etc/nagios3/htpasswd.users nagiosadmin

ただ、それで「w3m localhost/cgi-bin/nagios3/」にアクセスしても、認証通ったあとで「Forbidden」don't have permission 。

それはディレクトリ直でアクセスしてるからの模様、なんかそれっぽい cgi にアクセスすると出てくる「localhost/cgi-bin/nagios3/status.cgi」とか。そしていろいろリンクを辿るといろいろ出てくる、インストール時の設定で localhost はいろいろ少しチェックしてるみたい。

というか index的なものを探すと、「/usr/share/nagios3/htdocs/index.php」のようだ。nagios のアパッチ設定「/etc/apache2/conf.d/nagios3.conf -> /etc/nagios3/apache2.conf」によれば、「Alias /nagios3 /usr/share/nagios3/htdocs」なので、単にホスト直下の「/nagios3/」を見に行けば良いのであった。

さっき直アドレスで見てたのにも cssスタイル掛かってちょっと良いかも。

サイドメニューの Documentation のリンクは切れてる「Not Found」。aptitude で「nagios3-doc」パッケージを持ってくれば何とかなるが、index.html を明示的に指定しないといけないのでリンクの URL の調整とか、開き直したりとか必要かも。内容は基本的に上記翻訳ドキュメントですね。

それから近在のマシンから http で該当アドレスアクセスしても見えた(基本認証は掛かる)、組織内ならそれでいいか。

ホストの登録

ホストの監視だけど、取敢えず「/etc/nagios3/conf.d/hosts.cfg」を作って近在のホスト

define host{
        use     generic-host
        host_name       <ホスト名>
        }

くらい書くと ping での死活監視はしてくれる。(「/etc/init.d/nagios3 reload」必要)。死活ステータス変更の際にはメールも送ってくれる、特にメールの設定やってないのでローカルのメールだけど。宛先は「/etc/nagios3/conf.d/contacts_nagios2.cfg」のそれっぽいところ、email の項目に「,(カンマ)」でメールアドレス繋げて書けばそっちにも送られるように。

あと「/etc/nagios3/conf.d/hostgroups_nagios2.cfg」に Debian とか web-server とか sshサーバとかのグループがあるのでそのホストを members の項目に「,(カンマ)」で続けてみる。

サービス(PostgreSQL)

近在の PostgreSQLサーバを見るにはどうするのかな。上記インストールで「/usr/lib/nagios/plugins/」に「check_pgsql」ってのはある。チェックコマンドが書いてあるのは「/etc/nagios3/conf.d/services_nagios2.cfg」みたいなんでそこに追記

# check that pgsql services are running
define service {
        hostgroup_name                  pgsql-servers
        service_description             PostgreSQL
        check_command                   check_pgsql
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

同「hostgroups_nagios2.cfg」にグループを追加

# A list of your pgsql servers
define hostgroup {
        hostgroup_name  pgsql-servers
                alias           PostgreSQL servers
                members         <ホスト名>
        }

ホスト名は「hosts.cfg」にも追加しておく

これでチェックしてくれるようにはなるが、DBサーバに template1 データベースとか nagiosユーザ(ロール)探しに行くのでエラーになったり。

「/etc/nagios-plugins/config/pgsql.cfg」にコマンドラインの定義があるのでユーザ(ロール)を指定しようか、パスワードも書くのはつらいかも。コマンドラインオプションは「/usr/lib/nagios/plugins/check_pgsql -h」で出てくる。

ユーザ名やパスワードは「/etc/nagios3/resource.cfg」にマクロ(変数)「$USER<数字>$=<云々>」として定義してやればいいみたい(数字は256までとか)。パーミッション注意、root と nagios 方面でしか見えないようになってる。

[567] ls -l /etc/nagios3/resource.cfg       
-rw-r----- 1 root nagios 1366 2012-01-27 06:05 /etc/nagios3/resource.cfg

ホスト個別の設定

ホスト固有の監視項目を立てるのはどうするかな。結局サービスの監視という事になるので、「/etc/nagios3/conf.d/services_nagios2.cfg」に個別の項目を立てるか、ローカルホストをいろいろ見てるのは「/etc/nagios3/conf.d/localhost_nagios2.cfg」にそういう記述だし。

# check that top 5 on the <ホスト名>
define service {
        host_name       <ホスト名>
        service_description     top -n 5
        check_command   check_top_by_ssh!5
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
define command {
        command_name    check_top_by_ssh
        command_line    /usr/lib/nagios/plugins/check_by_ssh -i /var/lib/nagios/.ssh/id_rsa_nophrase -H $HOSTNAME$ -l shimura -C 'top -l 1 -o cpu -n $ARG1$'
}

サービスの指定で「host_name」を指定するので個別のホストの監視項目になる。

コマンドの定義もしてみた、引数は「!」で続ける模様。sshでアクセスして topで CPU負荷順に 5つ見るの、topのオプション普通と違うかも。sshキーファイルの場所注意、みると「 /var/lib/nagios/.sshディレクトリがあったのでそこに作った、実行ユーザは「nagios」。

USBからの起動

USB からのインストーラ起動 - Rubyとか Illustratorとか SFとか折紙とかに引き続いて USB(フラッシュ)メモリからの Linux の起動。今時は特に苦労することも無くインストール先に USBメモリ(の化けた SCSIドライブ)を指定するだけでいいいのね。
ただブートローダのインストール場所に混乱しないように既設のドライブは外してしまう方が楽と。
そのようにしたら USBメモリからの起動にできた。サイズ 4Gだったせいかグラフィック環境のインストールには失敗、テキスト環境だけど別に気にしない。

USB からのインストーラ起動

USBメモリからの起動とインストールをやったたことが無かったので試してみる。といってもインストールガイドの該当のところ「http://d-i.alioth.debian.org/manual/ja.amd64/ch04s03.html」に従うだけ。
「簡単な方法」でやってみる。それだと、ビジネスカードやネットインストールでしかインストーラ選べないということなんだが、ここの所もっぱらビジネスカード(名刺サイズの CD イメージ)しか使ってないので特に問題と感じない。
あとは案内に従うだけ。

ファイルの準備

まず USBメモリに書き込むことになるイメージファイルを用意する。boot.img.gz と所要の名刺サイズの CD イメージ。
場所はガイド記載の「http://d-i.alioth.debian.org/manual/ja.amd64/ch04s02.html#where-files」から辿って、boot.img.gz はその hd-media/ の下に。ISOイメージは、まあ「Debian -- Debian インストーラ」か「Debian -- Debian “lenny” Installation Information」から

USBメモリのデバイス

既存の (Debian)Linux機からの作業となる。USBメモリを差し込むと認識する(Windows上で VMware仮想マシンを使っていたので、さらにコンソールウィンドウステータスバーの USB大容量記憶装置アイコンからの接続処理も必要だったけどそれはそれ)。
なんか画面にメッセージ流れたりもするけど、dmesgコマンドでそのメッセージを確認してどこのデバイスに接続されたのかを確かめる。間違えてシステムとかデータを入れてる既設のハードディスクとか壊したら大変。
USBデバイスSCSIバイスとして認識されていて、「/dev/sd<英小文字一字>」となる、その英文字が dmesgメッセージみればわかるのでメモ。

そのデバイスにシステムをコピー

あとは案内の通り。まずは boot.img.gz を展開

zcat boot.img.gz > /dev/sd<英小文字一字>

そしてそのデバイスLinuxファイルシステムにマウントして ISOファイルを普通に cp、そしてアンマウント、必要なら適宜 sudo 作業。

sudo mount /dev/sd<英小文字一字> /mnt
cp debian-sq-<適宜>-amd64-businesscard.iso /mnt
sudo umount /mnt

起動

あとはその USBメモリからシステムを起動すれば所要の Debianインストーラが起動する。その先のインストール作業はもう特に変わりない。
そもそも相手が USB とかリムーバブルメディアからの起動に対応してないと意味無いけど。