ヘプタゴンの技術ブログ

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

Roundcubeでwebメール環境を実現

GoogleAppsが有料化ということで、
Webメール環境を用意する機会が増えそうなので。

これまでSquirrelMailを使う機会が多かったけど、
ちょーっとI/Fが古い感じなので、
Roundcubeを使ってみます。

環境
ubuntu 12.04
php5.3
SMTPサーバ構築済み(postfix)
IMAPサーバ構築済み (dovecot)
WEBサーバ 構築済み(apache)

aptitude install roundcube

※mysqlの管理者(root)のパスワードが聞かれるので入力。
roundcubeユーザーのパスワードの作成。(入力しないとランダムに生成)

でインストール完了。

 

vi /etc/roundcube/apache.conf
---------------
Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/
Alias /roundcube /var/lib/roundcube
---------------
※/etc/apache2/conf.d/roundcubeにリンクが張られている

service apache2 reload

vi /etc/roundcube/main.inc.php
---------------
$rcmail_config['default_host'] = 'localhost';
$rcmail_config['smtp_server'] = 'localhost';
---------------

http://yourserver/roundcube

でログイン画面が表示されます。
ユーザー名とパスワードでログイン出来るはず。

とりあえず、送受信出来たので、
細かい設定やプラグインはそのうちに。。。

LinuxコマンドからWEBサイトのスクリーンショットを作成

WEBサイトのスクリーンショットを
Linuxのコマンドからとれるコマンドを見つけ、
なんかに使えそうだなと思い試してみました。

以下pdfへの変換コマンドですが、pngへ変換できるコマンドもあるようです。

wkhtmltopdf

環境:CentOS6.3(64bit)

wget wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2

tar xvf wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2

./wkhtmltopdf-amd64 http://heptagon.co.jp /var/www/html/test.pdf

でOKのはずが、

./wkhtmltopdf-amd64: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory

のエラーが。。。

yum install libXrender.so.1 libXext libXrender

で、足りなそうなものを入れて再度実行すると、

./wkhtmltopdf-amd64: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory

のエラーが、、、

yum install libfontconfig.so.1 fontconfig

で、再度実行すると、
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)

QPixmap: Cannot create a QPixmap when no GUI is being used===] Page 1 of 1
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPainter::begin: Paint device returned engine == 0, type: 2
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::translate: Painter not active
QPainter::setPen: Painter not active
QPainter::setBrush: Painter not active
QPainter::setWorldTransform: Painter not active
QPainter::setOpacity: Painter not active
QPainter::setFont: Painter not active
Segmentation fault

のエラーが。

他のサイトによると、最新版ではうまく動かないらしいので、
さっさと諦めて、


wget wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.10.0_rc2-static-amd64.tar.bz2

tar xvf wkhtmltopdf-0.10.0_rc2-static-amd64.tar.bz2

でダウングレードしてみると、コマンドは成功!

しかし、pdfが文字化け。。。

日本語フォントを入れてみる。


wget ossipedia.ipa.go.jp/ipafont/ipafont/IPAfont00303.php
unzip IPAfont00303.zip

cp IPAfont00303/*ttf /usr/share/fonts/

./wkhtmltopdf-amd64 http://heptagon.co.jp /var/www/html/test.pdf
<div>
これで、文字化けずにpdfが生成されました。
とりあえず月次報告書用の(いつも月初に取り忘れる)グラフとかに
使ってみようかな。

Bindの代わりにnsdをインストール&設定してみる

脆弱性がよく見つかるbindの代わりにnsdを使ってみようというお話。
(2012年7月にnsdでも危険な脆弱性が見つかっていますが・・・)

環境はubuntu12.04です。

sysv-rc-conf
→bind9 offにする

service bind9 stop

aptitude install nsd3

cp /etc/nsd3/nsd.conf.sample /etc/nsd3/nsd.conf

vi /etc/nsd3/nsd.conf
-----------
server:
 zonesdir: "/etc/named/zone"

zone:
 name: "huge.jp"
 zonefile: "huge.jp.wan"

zone:
 name: "hoge.jp"
 zonefile: "hoge.jp.wan"
-----------

vi /etc/named/zone/huge.jp.wan
-----------
$TTL 3600

@ IN SOA huge.jp. root.huge.jp.(
2012120701 ; Serial
    3600 ; Refresh
    14400 ; Retry
    3600000 ; Expire
    86400 ) ; Minimum
IN NS dns1.huge.jp.
IN NS dns2.huge.jp.
IN MX 10 mail.huge.jp.
@ IN A x.x.x.x
sv IN A x.x.x.x
dns1 IN A x.x.x.x
dns2 IN A x.x.x.x
mail IN A x.x.x.x
-----------

service nsd3 start

ゾーン情報を書き換えるときは、

service nsd3 rebuild

このオプションの存在に気づかずしばらくハマる。

Mysqlでクエリログを出力する

いつも覚える前に忘れてしまうのでメモ。

環境は
CentOS6
Mysql5.5です。

vi /etc/my.cnf
———————-
[mysqld]
log = /var/log/mysql_query.log
———————-

vi /etc/init.d/mysqld
———————
# $exec –datadir=”$datadir” –socket=”$socketfile” \
$exec –log –datadir=”$datadir” –socket=”$socketfile” \
———————

touch /var/log/mysql_query.log
chown mysql.mysql /var/log/mysql_query.log

/etc/init.d/mysqld restart

デバッグ終わったら設定を元に戻すのを忘れずに。。。
いつも気づいたら大変なことになってます。

EC2のCentOS公式AMIをインストール

先日公開されたCentOSの公式AMIをインストールしてみます。

まずは、以下からインストールしたいタイプのAMIを選択。

https://aws.amazon.com/marketplace/seller-profile/ref=dtl_pcp_sold_by?ie=UTF8&#038;id=16cb8b03-256e-4dde-8f34-1b0f377efe89

32bitと64bitがあります

選択すると詳細画面が出てくるので、

CentOS公式AMI

右上のcontinueをクリック。

インスタンス設定画面

インスタンスを作成するリージョン、
インスタンスの種類、
ファイアウォールポリシー、
認証鍵の選択
の選択をして右上のAccept Terms & Launch with 1-clickをクリック。

いつものマネジメントコンソールでインスタンス作成をしたい場合は、
上部タブのLaunch with EC2 Consolを押すと、
マネジメントコンソールへ飛ぶ。
(ボリュームサイズを変更したいときはこっちの方がいいかも。)

少々お待ちを

少々お待ちをってでるので、
2、3分待つと、

設定確認画面

設定完了の画面が出てくるので、設定完了。
マネジメントコンソールにも表示されてます。

初期設定では、sshログインはrootで行います。
あとselinuxとiptablesは有効になってます。

Sshの代替サービスmoshをubuntuに入れてみる

moshはsshの代替サービスとして開発されたソフトウェア。

the MObile SHell“が由来ということで、
モバイルデバイスからでも操作がしやすい工夫が施されている。

【特徴】
1、ローカルエコーなのでサクサク。
sshは入力した情報を一旦サーバに送り
その結果をサーバから受け取り表示する(リモートエコー)ので、
回線が細いと入力と表示にタイムラグがあり、イライラ・・・

moshはサーバへ入力情報を送ると同時に
送った情報を表示する(ローカルエコー)ので、
回線に関係なく入力が手元に即座に反映される。

2、一度切断しても自動で再接続:接続元IPが変わっても問題なし。
UDPを使いセッションを張らずに通信していて、
一旦サーバとの接続が切れても、
サーバとクライアント間の通信環境が整えば自動で再開される。
IPが変わっても関係なく再接続される。

インストール環境
クライアント:macOS mountain lion
サーバ:ubuntu 12.04
※ユーザー認証はSSHを使うのでSSHの設定は必要です。

まずはmac側。

https://github.com/downloads/keithw/mosh/mosh-1.2.1.pkg

からパッケージをダウンロードしてインストール。

ubuntu側

aptitude install mosh

&環境に合わせてファイアウォール等のUDPの60000から61000を解放。

クライアントから

mosh --ssh="ssh -p sshのポート番号 -i 認証鍵" ユーザー名@サーバ

で繋がるはずが、

mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]
setlocale: No such file or directory
Connection to サーバ名 closed.
/usr/bin/mosh: Did not find mosh server startup message.

サーバを見ると

less /var/log/auth.log
Nov 26 21:55:11 サーバ名 sshd[15154]: Accepted publickey for ubuntu from クライアントIP port 63170 ssh2
Nov 26 21:55:11 サーバ名 sshd[15154]: pam_unix(sshd:session): session opened for user ユーザー名 by (uid=0)
Nov 26 21:55:12 サーバ名 sshd[15225]: Received disconnect from クライアントIP: 11: disconnected by user
Nov 26 21:55:12 サーバ名 sshd[15154]: pam_unix(sshd:session): session closed for user ユーザー

とsshでの認証まではうまく行っている模様。

setlocaleのエラーも出てるし文字コード周りが怪しかったので、確認。

ubuntu側

locale
--------------------
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
--------------------

mac側

locale
--------------------
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.utf-8"
LC_CTYPE="ja_JP.utf-8"
LC_MESSAGES="ja_JP.utf-8"
LC_MONETARY="ja_JP.utf-8"
LC_NUMERIC="ja_JP.utf-8"
LC_TIME="ja_JP.utf-8"
LC_ALL="ja_JP.utf-8"
-------------------

この辺りが噛み合ってない??

 

ということで、文字コードを指定して、

LC_ALL=en_US.UTF-8 mosh --ssh="ssh -p sshのポート番号 -i 認証鍵" ユーザー名@サーバ

でOKでした!

Zabbixをnginx+php-fpm環境にインストール

CentOS6環境にzabbix2.0です。
mysql5.5も試したかったので、remiリポジトリ使ってます。

ベースは以下を参考に。

http://kodai74.blogspot.jp/2012/05/zabbix-siarpm.html

まずはzabbixを動かすのに必要な環境をインストール&設定。

yum -y install mysql mysql-server nginx php php-fpm php-devel php-cli php-xml php-mysql php-mbstring php-gd --enablerepo=remi

chkconfig php-fpm on
/etc/init.d/php-fpm start
chkconfig nginx on
/etc/init.d/nginx start
chkconfig mysqld on
/etc/init.d/mysqld start

mysqladmin -u root password 'password'

vi /etc/nginx/conf.d/default.conf
-------------------
 location / {
 root /var/www/html;
 index index.html index.htm;
 }

location ~ \.php$ {
 root /var/www/html;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }
-------------------

/etc/init.d/nginx restart

zabbixのインストール。
rpmはコチラから。

yum install curl net-snmp unixODBC OpenIPMI-libs php-bcmath php-gd php-mbstring php-mysql php-xml vlgothic-p-fonts dejavu-sans-fonts --enablerepo=remi

wget www.kodai74.net/packages/non-supported/rhel/6/x86_64/fping-2.4b2-16.el6.x86_64.rpm
wget www.kodai74.net/packages/non-supported/rhel/6/x86_64/iksemel-1.4-2.el6.x86_64.rpm
wget www.kodai74.net/packages/non-supported/rhel/6/x86_64/libssh2-1.4.0-2.el6.x86_64.rpm

rpm -ivh fping-2.4b2-16.el6.x86_64.rpm iksemel-1.4-2.el6.x86_64.rpm libssh2-1.4.0-2.el6.x86_64.rpm

wget www.kodai74.net/packages/zabbix/zabbix-2.0/rhel/6/x86_64/zabbix-2.0.2-1.el6.x86_64.rpm
wget www.kodai74.net/packages/zabbix/zabbix-2.0/rhel/6/x86_64/zabbix-agent-2.0.2-1.el6.x86_64.rpm
wget www.kodai74.net/packages/zabbix/zabbix-2.0/rhel/6/x86_64/zabbix-server-2.0.2-1.el6.x86_64.rpm
wget www.kodai74.net/packages/zabbix/zabbix-2.0/rhel/6/x86_64/zabbix-server-mysql-2.0.2-1.el6.x86_64.rpm
wget www.kodai74.net/packages/zabbix/zabbix-2.0/rhel/6/x86_64/zabbix-web-2.0.2-1.el6.noarch.rpm
wget www.kodai74.net/packages/zabbix/zabbix-2.0/rhel/6/x86_64/zabbix-web-japanese-2.0.2-1.el6.noarch.rpm
wget www.kodai74.net/packages/zabbix/zabbix-2.0/rhel/6/x86_64/zabbix-web-mysql-2.0.2-1.el6.noarch.rpm

rpm -ivh zabbix*

mysqlの準備。

vi /etc/my.cnf
---------------
[mysqld]
innodb_file_per_table
---------------

/etc/init.d/mysqld restart

mysql -uroot -p
mysql> create database zabbix character set utf8;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
mysql> exit

mysql -ppassword -uroot zabbix < /usr/share/doc/zabbix-server-mysql-2.0.2/create/schema.sql
mysql -ppassword -uroot zabbix < /usr/share/doc/zabbix-server-mysql-2.0.2/create/images.sql
mysql -ppassword -uroot zabbix < /usr/share/doc/zabbix-server-mysql-2.0.2/create/data.sql

vi /etc/zabbix/zabbix_server.conf
-----
DBPassword=password
-----

service zabbix-server start
service zabbix-agent start

phpの設定変更

vi /etc/php.ini
--------
post_max_size = 32M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Tokyo
--------

/etc/init.d/php-fpm restart

ln -s /usr/share/zabbix /var/www/html/zabbix

http://your-server/zabbix/

nginxのおかげなのか、
zabbix2.0のおかげなのか、
mysql5.5のおかげなのか
管理画面が軽くなった(気がする。。。)

ec2の起動時にElastic IPを自動割当

EC2ではインスタンスがstop/startする際に
固定IP(Elastic IP)が自動では割り振られないので、
それを自動でやるシェルを用意したときのメモ。

環境はCentOS6です。

ますは、api-toolsをインストール。

yum -y install java-1.6.0-openjdk
wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
unzip ec2-api-tools.zip
mkdir /root/ec2keys/
mv ec2-api-tools-1.6.5.1 ec2-api-tools

弄りやすいように環境変数をセット。
環境に合わせて適宜変更。

vi .bashrc
------------------
export JAVA_HOME="/usr/"
export EC2_HOME="/root/ec2-api-tools"
export EC2_PRIVATE_KEY="/root/ec2keys/pk-xxxxxxxxx.pem"
export EC2_CERT="/root/ec2keys/cert-xxxxxxxxx.pem"
export EC2_URL="http://ec2.ap-northeast-1.amazonaws.com"
export PATH="${PATH}:${EC2_HOME}/bin"
------------------

. .bashrc

これでapi-toolsは使えるようになる。

Elastic IPの割当は、ec2-associate-address
Elastic IPの解除は、ec2-disassociate-address
で行える。

起動時に自動で行えるようにシェルを作成。

vi /etc/init.d/aws_elastic_ip
------------------
#! /bin/sh
##Shell For Associate Elastic IP##
###################################
EC2_ELASTIC_IP="IPアドレス"
EC2_INSTANCE_ID="インスタンスID"
###################################
export JAVA_HOME="/usr/"
export EC2_HOME="/root/ec2-api-tools"
export EC2_PRIVATE_KEY="/root/ec2keys/pk-xxxxxxxxx.pem"
export EC2_CERT="/root/ec2keys/cert-xxxxxxxxx.pem"
export EC2_URL="http://ec2.ap-northeast-1.amazonaws.com"
export PATH="${PATH}:${EC2_HOME}/bin"
###################################

case "$1" in
start)
echo "Associate Elastic IP"
ec2-associate-address $EC2_ELASTIC_IP -i $EC2_INSTANCE_ID >/dev/null 2>&1
;;

stop)
echo "Deassociate Elastic IP"
ec2-disassociate-address $ELASTIC_IP_ADDRESS >/dev/null 2>&1
;;
esac

exit 0
------------------

あとはこれを起動時に実行されるようにして設定完了。

chmod 755 /etc/init.d/aws_elastic_ip

ln -s /etc/init.d/aws_elastic_ip /etc/rc3.d/S98aws_elastic_ip
ln -s /etc/init.d/aws_elastic_ip /etc/rc0.d/K98aws_elastic_ip

Dstatでリソースをモニタする

dststはサーバのリソース状況を確認するコマンド。
sysstat系のコマンドと違い好きなリソースを組み合わせてまとめて表示できるのが特徴。

インストールは
CentOSなら

rpm -ivh http://pkgs.repoforge.org/dstat/dstat-0.7.2-1.el6.rfx.noarch.rpm

ubuntuなら

aptitude install dstat

でOK。

dstat -tclmsdrn 5

オプション
(※オプションの並び順を替えれば表示順も変更されます。)
t:時刻
c:CPU
l:ロードアベレージ
m:メモリ
s:スワップ
d:ディスク読み書きサイズ
r:IO回数
n:ネットワーク送受信数
5:5秒間隔で統計を取る
ちなみにmysqlとの連携やCPUやIOの使用頻度の高いリソースを表示することも出来るみたい。
http://d.hatena.ne.jp/hirose31/20120229/1330501968

–output FILENAME でCSV形式での出力も可能なので、
zabbixやsnmpとかは入れられないけど、
時系列データが欲しいときとかに使えそう。