ヘプタゴンの技術ブログ

サーバ/ネットワーク/linux/AWSとか青森を拠点でやってます

curlでSSLのエラー出るのは時間がズレてたせいだった

何気なくcurlコマンドでhttps接続してみたらエラー出ました。
(今回はchefインストールしようしてた)

# curl -L https://www.opscode.com/chef/install.sh | bash

curl: (60) Peer certificate cannot be authenticated with known CA certificates
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

手元のPCからhttps://www.opscode.com/chef/install.shにアクセスしても問題なくダウンロードされます。
これはサーバーが悪い!ということで調べてたら時間が圧倒的にズレていることに気がつきました。

# date
2008年  1月 29日 火曜日 00:56:16 JST

むむむ、と思い即修正。
んで再度試したらエラーもなく無事chefインストールできました!

# ntpdate ntp.nict.jp
# date
2014年  9月 24日 水曜日 14:24:10 JST


# curl -L https://www.opscode.com/chef/install.sh | bash
downloading https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.16.2-1.el6.x86_64.rpm
  to file /tmp/install.sh.11408/chef-11.16.2-1.el6.x86_64.rpm
Installing Chef
installing with rpm...
警告: /tmp/install.sh.11408/chef-11.16.2-1.el6.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
準備中...                ########################################### [100%]
   1:chef                   ########################################### [100%]
Thank you for installing Chef!

OS入れたてのサーバーだと、意外と遭遇するかもしれません。。
時間ズレてると思わぬところでハマるので気をつけましょう〜〜!

Postgresql on RDSでスロークエリを表示

実行に時間がかかっているクエリを見つけてそれを改善する事で、システムのパフォーマンス向上が見込まれます。

postgresqlではスロークエリを表示する設定を行うことができます。

自分でpostgresqlサーバーを構築する場合は、
postgresql.confのlog_min_duration_statementで設定を行いますが、
RDSでは、DB Parameter Groupsから設定を行います。
スロークエリを表示したいサーバのDB Parameter Groupsを選択して設定を行います。

RDSでslow query

RDSでslow query

log_min_duration_statementの項目にクエリを表示させる閾値を設定します。
単位はミリ秒となります。
設定後、Save Changesをクリックするとインスタンスの再起動なく設定が反映されます。

これでクエリの実行時間が設定した値を越えた場合にログに書き出されるようになります。
書き出されたログは、対象のRDSインスタンスのLogsから閲覧/ダウンロードできます。

これでクソクエリをあぶり出しましょう!

zabbix2.2.3でシンプルチェックキューだけが溜まる現象あったけど、zabbix2.2.4にアップデートしたら直った

タイトル通りです!

RDSのマスターパスワードを忘れた場合の対処法

AWS RDSのマスターパスワードを忘れてしまって困った時の対処方法です。

aws-cliを使えば、マスターパスワードが変更できます。
aws-cli1.2.5以降で試しました。(おそらくそれ以前でも大丈夫なはず。)

aws rds modify-db-instance –db-instance-identifier [dbname] –master-user-password [新password]

成功すれば、RDSの状態が帰ってきます。
————–
{
“DBInstance”: {
“PubliclyAccessible”: true,
“PendingModifiedValues”: {
“MasterUserPassword”: “****”
},

“DBInstanceIdentifier”: “dbname”
}
}

————–

これで、新パスワードで接続できるようになります。

s3fsでReduced Redundancy Storageを使う

S3をファイルシステムとしてマウントできるs3fsを設定します。
環境はCentOS6 on EC2です。

まずは、fuseのインストール。
——————————-
yum remove fuse fuse* fuse-devel
yum install gcc libstdc++-devel gcc-c++ curl curl* curl-devel libxml2 libxml2* libxml2-devel openssl-devel mailcap

cd /usr/local/src
wget http://sourceforge.net/projects/fuse/files/latest/download?source=files tar zxvf download\?source\=files
cd fuse-2.9.3/
./configure prefix=/usr
make
make install
ldconfig
modprobe fuse
——————————-

次にs3fsのインストール。

——————————-
cd /usr/local/src
wget https://s3fs.googlecode.com/files/s3fs-1.72.tar.gz tar -xzvf s3fs-1.72.tar.gz
rm s3fs-1.72.tar.gz
cd s3fs-1.72
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
./configure –prefix=/usr
make
make install
——————————-

IAMの設定をします。
IAMポリシーはこんなかんじで。
—————-
{
“Version”: “2012-10-17″,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: “s3:”,
“Resource”: [
“arn:aws:s3:::バケット名”,
“arn:aws:s3:::バケット名/

]
}
]
}
——————

バケットに接続できるように設定します。

——————————-
vi /etc/passwd-s3fs
——————
アクセスキー:シークレットキー
——————

chmod 600 /etc/passwd-s3fs
——————————-

マウントしてみます。
use_rrs=1オプションを付ける事で、Reduced Redundancy Storage(低冗長化ストレージ)を使う事ができます。

——————————-
s3fs バケット名 /mnt -o rw,allow_other,use_rrs=1
——————————-

OS起動時に自動でマウントするように設定をします。

——————————-
umount /mnt

vi /etc/rc.d/rc.sysinit
———-
. /etc/init.d/functions
modprobe fuse
———-

vi /etc/rc.d/rc.local
———–
umount /var/www/html/public_html/upload/
s3fs バケット名 /mnt -o rw,allow_other,use_rrs=1
———-

reboot
——————————-

fstabに記載する方法もあるようですが、起動時にマウントできない場合があったので、
rc.localでマウントするように設定しました。
(停止時にうまくアンマウントできないとだめ?)

うまくマウントできるとこんな感じで見えます。

——————————-
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvde 7.9G 1.6G 6.0G 21% /
tmpfs 296M 0 296M 0% /dev/shm
s3fs 256T 0 256T 0% /mnt
——————————-

IOのパフォーマンスはあまり期待できないので、用途は考える必要がありそうですね。

Pop2imapでsshログインせずにメールボックスを移設する方法

メールボックスの移設をする際に
移設元が共用サーバなど理由のためsshログインできない場合に
popとimapを利用してメールを移設するツールが「pop2imap」です。

仕組みは単純で、
移設元にpop3でログインしてメールをダウンロードして、
そのメールを移設元にimap4でアップロードすることで、
メールボックスを移設することができます。

pop2imapの中身はperlで、
事前にMail::IMAPClientやMail::POP3Client、Email::Simple、Date::Manipのインストールが必要です。
パッケージでインストールしたい場合は、epelリポジトリに含まれています。

 

perlモジュールの準備ができたらダウンロードして、展開します。

wget http://www.linux-france.org/prj/pop2imap/dist/pop2imap-1.21.tgz tar zxvf pop2imap-1.21.tgz
cd pop2imap-1.21

make install
でエラーが出なければインストール完了です。

使い方は以下の通りです。
pop2imap –host1 before.hoge.jp –user1 tachibana@hoge.jp –password1 before_passwd –host2 after.hoge.jp –user2 tachibana@hoge.jp –password2 after_passwd

移設元のpopサーバや接続情報と移設先のimapサーバと接続情報を指定するだけで、
メールの移設が開始されます。

———–
From pop3 server [before.hoge.jp] port [110] user [tachibana@hoge.jp]
To imap server [after.hoge.jp] port [143] user [tachibana@hoge.jp]
TimeZone :[etc/gmt]
Looking POP messages
Found [8] pop messages

———–

Zabbixとpg_monzで認証ありのpostgresqlを詳細監視

pg_monzはzabbixでPostgreSQLを監視するためのテンプレートです。
以下導入・設定方法は公式ページを参考に。

http://pg-monz.github.io/pg_monz/

主にZabbixのUserParameterで、psqlを用いて情報を取得しているようですが、
現段階ではパスワード認証に対応していないようです。

パスワード認証が必要なPostgreSQLサーバへの監視の場合は、
当然zabbixのログに
—————————————–
ユーザ postgres のパスワード:
psql: fe_sendauth: no password supplied
—————————————–
のようにエラーが出力されてしまいます。

そこで、pgpassを用いて対話的にパスワードが聞かれないよう設定をします。

http://www.postgresql.jp/document/9.2/html/libpq-pgpass.html

環境に合わせて、zabbixのホームディレクトリに
以下のように.pgpassを作成します。

vi /var/lib/zabbix/.pgpass
——————————————
localhost:5432:*:postgres:postgrespass
——————————————

chown zabbix. /var/lib/zabbix/.pgpass
chmod 600 /var/lib/zabbix/.pgpass

上記を設定すれば、
zabbixからパスワード認証付きのPostgreSQLの監視ができるようになります。

これでRDS for PostgreSQLの監視もできそう!

Redisを使ってwordpress高速化

redisを使ってwordpressを高速化できるという記事を見つけたので早速試してみました。
WordPressでKVSのRedisを導入

  • redis インストール

apt-getで簡単に。

apt-get install redis-server
  • predis.php、index-with-redis.php設置

サイトのドキュメントルートに移動してpredis.phpとindex-with-redis.phpをダウンロード。
オーナーを修正して準備完了!

cd /var/www/heptagon.jp/blog/
mv index.php index.php_org
curl -O http://uploads.staticjw.com/ji/jim/predis.php
curl -o index.php https://gist.githubusercontent.com/JimWestergren/3053250/raw/d9e279e31cbee4a1520f59108a4418ae396b2dde/index-with-redis.php
chown www-data: index.php predis.php
  • ベンチマーク

同時接続数を10、時間を60秒間に設定してベンチマークを行いました。

[redisキャッシュ前]
失敗したリクエストもありますね。。

Transactions:                 55 hits
Availability:              94.83 %
Elapsed time:              59.48 secs
Data transferred:           0.82 MB
Response time:              5.97 secs
Transaction rate:           0.92 trans/sec
Throughput:             0.01 MB/sec
Concurrency:                5.52
Successful transactions:          55
Failed transactions:               3
Longest transaction:           25.27
Shortest transaction:           1.89

[redisキャッシュ設定後]

Transactions:               1231 hits
Availability:             100.00 %
Elapsed time:              59.89 secs
Data transferred:          18.57 MB
Response time:              0.48 secs
Transaction rate:          20.55 trans/sec
Throughput:             0.31 MB/sec
Concurrency:                9.95
Successful transactions:        1231
Failed transactions:               0
Longest transaction:            5.44
Shortest transaction:           0.37

Transaction rateが約20倍に!!!
正直驚きでした。。

あとは新規コンテンツ追加時にキャッシュのクリアを忘れないように!

http://heptagon.co.jp/blog/?c=y

参考サイト:WordPressでKVSのRedisを導入

Postfixadmin環境でドメイン毎にcatch Allを設定する

通常postfixでは、
存在しないアカウント宛(メールアドレスの@より前)のメールは
SMTP接続のRCPT TOの段階でエラーを返送し、
メールを受け取りません。

今回はqmailのように、存在しないアカウント宛でもメールを受け取り、
特定のメールアドレスで受信する設定(catch all:キャッチオール)を
行います。

なお、postfix+dovecot+mysql+postfixadminで構築済みの環境を想定しています。
まだの場合はこの辺を参考に。

http://e-garakuta.net/techinfo/doku.php/linux/postfix-virtual

vi /etc/postfix/main.cf
————–

virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf

virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf,hash:/etc/postfix/virtual
————–
=>mysqlに加えて、virtualファイルでもメールアドレスの参照を行うようにする。
最初にpostfixadminで設定されているアドレスはmysqlを参照して配送され、
次にpostfixadminで設定されていないアドレスは、virtualを参照するようになる。

vi /etc/postfix/virtual
————
@test.com test.com/test@test.com/
————
=>ドメイン宛のすべてのメールを配送したメールボックス(Maildir形式)へ配送する。

postmap /etc/postfix/virtual

/etc/init.d/postfix reload

 

上記を組み合わせることで、
postfixadminで配送されないメール(存在しないアカウント)を、
ドメイン毎に任意のメールボックスへ配送することが可能となります。

もし、キャッチオールアドレスが1つの場合は、
luser_relayを使って制御もできるのかな。

Azureの日本リージョンでLinuxインスタンスを起動する

本日(2014年2月26日)より、
Windows Azureで日本リージョンが使用できるようになりました。

さらなるクラウド市場の活性化に期待です!

ということで早速、Linuxインスタンスを立ち上げてみたいと思います。

まずは、頑張ってサインアップやサブスクリプションの購入を完了させて
以下の管理画面までたどり着いてください。

Azure管理画面

仮想マシンタブを選択して、仮想マシンを作成するをクリックします。

仮想マシンタブ

作成画面が表示されるので
・DNS名
・OSイメージ(今回はubuntu14.04を選択)
・インスタンスサイズ
・ログインパスワード(大文字、小文字、数字、記号から3種類以上含む必要有り)
・リージョン(日本リージョンも東と西で選択できます。)
・購入したサブスクリプション
を入力して、仮想マシンの作成をクリックします。

仮想マシン作成

仮想マシンタブに作成したインスタンスが表示されます。インスタンス起動

DNS名をクリックすると、インスタンスの詳細画面に遷移します。
右側の概要の部分でパブリックIPアドレスやDNS名を確認します。

インスタンス詳細

ログインユーザー名はazureuserと
インスタンス作成時に入力したパスワードで
sshのログインが可能です。

ubuntu起動

ただ、デフォルトでは、sshの22番ポートしか解放されていないので、
追加で設定をします。

仮想マシンの画面からエンドポイントを選択して、
解放するポートを設定します。
画面下の追加をクリックします。

ファイアウォール

スタンドアロン…を選択します。

エンドポイント

解放するポートを設定します。
今回は80番ポート(http)を解放します。

ポート解放

設定が完了すると、80番ポートでの接続が可能になります。

apache画面

当然AWSとは用語や操作性が違うので、
最初はインスタンスの立ち上げ、ログインだけでも結構手惑うと思います。
Azureならでは面白いサービスもたくさんあるので
以前参加したAzureの勉強会を思い出し、少しずつ慣れていきたいと思います。