未分類」カテゴリーアーカイブ

EC2 の EBS Volume を自動マウントするコマンドをちょっと改造。


IMG_0026



※写真と本文は関係ありません。


Amazon EBSのボリュームを自動でattachしてマウントしたい – cyberarchitect

を参考にさせて頂き試してみましたがエラーが…。><
『Client.InvalidVolume.NotFound: The volume ‘vol-XXXXXXXX’ does not exist.』

リージョンの設定が足りないようだったので。

Scripts to automatically attach and mount an EBS Volume at Boot Time
のスクリプトを改造して、ec2-attach-volume コマンドに –region のオプションを追加した。

# diff -Nur mount_ebs_volume.py_org mount_ebs_volume.py > mount_ebs_volume_add_region.patch
# cat mount_ebs_volume_add_region.patch


--- mount_ebs_volume.py_org 2011-09-27 16:04:22.028387625 +0900
+++ mount_ebs_volume.py 2011-09-28 13:14:12.100673654 +0900
@@ -31,7 +31,7 @@
 
 def mount():
    logging.info('Attempting to attach volume [%s] to instance [%s] as [%s]' % (volume_name, instance_id, device_name))
-   cmd = 'ec2-attach-volume -C %s -K %s %s -i %s -d %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], volume_name, instance_id, device_name)
+   cmd = 'ec2-attach-volume -C %s -K %s %s -i %s -d %s --region %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], volume_name, instance_id, device_name, ec2conf['REGION'])
 
    for i in range(0, 20):
        p = Popen(cmd, shell=True,stdout=PIPE);
@@ -49,7 +49,7 @@
            logging.info('Volume [%s] attaching to device [%s] in attempt #%d' % (_volume_id, _device_id, i))
 
            # wait for fully attached
-           cmd = 'ec2-describe-volumes -C %s -K %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'])
+           cmd = 'ec2-describe-volumes -C %s -K %s --region %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], ec2conf['REGION'])
            for n in range(0, 20):
                logging.debug('Running ec2-describe-volumes for the %dth time' % n)
                p = Popen(cmd, shell=True,stdout=PIPE);
@@ -79,13 +79,21 @@
 def unmount():
    logging.info('Attempting to detach volume [%s] from instance [%s] as [%s]' % (volume_name, instance_id, device_name))
 
-   cmd = 'ec2-detach-volume -C %s -K %s %s -i %s -d %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], volume_name, instance_id, device_name)
+   cmd = 'umount %s ' % (device_name)
+   p = Popen(cmd, shell=True,stdout=PIPE);
+   exitcode = p.wait() & 0xff;    # exit code is in the high byte
+   logging.debug('umount returned status code %d' % exitcode)
+   if exitcode == 0:
+       logging.info('Successfully unmount volume [%s] as [%s]' % (volume_name, device_name))
+
+   cmd = 'ec2-detach-volume -C %s -K %s %s -i %s -d %s --region %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], volume_name, instance_id, device_name, ec2conf['REGION'])
    p = Popen(cmd, shell=True,stdout=PIPE);
    exitcode = p.wait() & 0xff;    # exit code is in the high byte
    logging.debug('ec2-detach-volume returned status code %d' % exitcode)
    if exitcode == 0:
        logging.info('Successfully detached volume [%s] from instance [%s] as [%s]' % (volume_name, instance_id, device_name))
 
+
    
 # arguments
 if len(sys.argv) < 5:
@@ -119,9 +127,9 @@
 logger.setLevel(logging.INFO)
 
 # setup environment
-os.putenv('PATH', '/root/ec2-api-tools/bin/:' + os.getenv('PATH'))
-os.putenv('EC2_HOME', '/root/ec2-api-tools/')
-os.putenv('JAVA_HOME', '/usr/lib/jvm/java-6-sun')
+os.putenv('PATH', '/opt/aws/bin/:' + os.getenv('PATH'))
+os.putenv('EC2_HOME', '/opt/aws/apitools/ec2/')
+os.putenv('JAVA_HOME', '/usr/lib/jvm/jre/')
 
 # EC2 conf
 ec2conf = shellVars2Dict('/root/.ec2cred')


※ ec2-detach-volume するときに unmount しないとうまくいかなかったのでそれも追加した。

.ec2cred に
REGION=ap-northeast-1
を追加した。

# diff -Nur .ec2cred_org .ec2cred


--- .ec2cred_org    2011-09-27 08:40:53.000000000 +0900
+++ .ec2cred    2011-09-27 16:17:53.789461128 +0900
@@ -1,4 +1,5 @@
-CERT=/root/cert-XXX.pem
-PRIVKEY=/root/pk-XXX.pem
-AWSACCOUNTID=XXXX-XXXX-XXXX
+CERT=/root/cert-XXXAAA.pem
+PRIVKEY=/root/pk-XXXAAA.pem
+AWSACCOUNTID=XXXX-XXXX-XXXX
+REGION=ap-northeast-1


これでOKになりました。

VNC Server の設定


大垣城のとなりの公園



※写真と本文は関係ありません。


ポリシー

  1. デーモンで起動する。
  2. ssh でトンネリングするので localhost からのアクセスのみ。

VNC 用パスワードの設定。
# vncpasswd


gnome の画面が見られるように dot_file を編集。


[root@hosting634 ~]# vi ~/.vnc/xstartup 
#!/bin/sh
 
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER                          #コメント外す
exec /etc/X11/xinit/xinitrc                       #コメント外す
 
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &


どのユーザと画面番号をひもづけるか設定。
/etc/sysconfig/vncservers の最後のほうに追加。


[root@hosting634 ~]# vi /etc/sysconfig/vncservers
…
# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"
VNCSERVERS="1:root"
VNCSERVERARGS[1]="-nolisten tcp -nohttpd -localhost"


ssh でトンネリングして使うので『-localhost』オプションを付ける。


こんな感じでトンネリングしてから、VncViewerをつかう。

$ ssh 192.168.222.5 -L 5901:localhost:5901

nfs 経由のアクセスのグループ数には上限がある。


新しくなってた。



※写真と本文は関係ありません。


今週の初めから出張挟んで悩んでた件。
『NFS経由のグループによるアクセス制御は、補助グループが16を越えるとダメでした』というはなし。

samba(3.0.23d)のファイルサーバ。あるユーザがアクセス出来ないと連絡あり(このユーザ以外は問題なし)
認証には LDAP を使用していて統合されている。
計5台でファイルサーバ1台に見えるように、メインのサーバ1台に他の4台が nfs マウントされている。(過去にmsdfs proxy 形式から変更した経緯あり。Windows7ではうまく動かなかった。)そのnfsマウントされた領域をsambaで共有している。

このユーザの権限でファイルを作ろうとすると。


[root@fs kojin]# id furu-furu
uid=1222(furu-furu) gid=1000(samba-users) 所属グループ=1000(samba-users),1001(dantai),1002(kojin),…………………,1032(nittei)                           # 32 のグループに所属してる。
[root@fs kojin]# pwd
/mnt/samba/fs2/kojin                             # fs2 以下は nfs マウント
[root@fs kojin]# ls -ld
drwxrwsr-x 36 root kojin 4096  6月20日 15:59 ./
[root@fs kojin]# sudo -u furu-furu touch  test
touch: `test' に触れることができません: 許可がありません
[root@fs kojin]# LANG=C sudo -u furu-furu touch  test
touch: cannot touch `test': Permission denied


こんな感じで、パーミッションは問題なさそうなんだけど書けない。

fs2 に直接ログインしての書き込みは可能。nfs経由からの書き込みがダメっぽい。
autofs で経由で接続されてるので autofs,nfs の設定見直して再接続してみたけどダメ。

調べてみると、nfs 経由のアクセスはユーザが所属する補助グループが16以下しかアクセスコントロールできないとのことらしい。

結局ファイルサーバへのアクセス権限の範囲を厳選してもらい、所属グループ数を減らしてもらいました。他のユーザもダメだったかもしれないですな。

みんなどうしてるんだろう、iSCSI とかつかうのだろうか?実験しとかないとダメですなー。

2011.6.27追記
iSCSI だと iscsi-initiator 経由でファイルシステム作り直す感じになるので、元からある共有領域をマウントはできないですな。


こちらを参考にさせて頂きました。ありがとうございます。
NFSアクセスにおけるグループ数の制限とは – OpenGroove

windows のバックアップ


庭の芝桜



※写真と本文は関係ありません。


synctoy

Download details: SyncToy 2.1

@IT:Windows TIPS — Tips:SyncToyツールで手軽にバックアップを行う

robocopy.exe (Windows server 2008 にデフォルトでインストールされている。)

robocopyでフォルダをバックアップ/同期させる − @IT

コピー元にドライブを指定すると、隠しフォルダになるそうな。
robocopy後のコピー先フォルダが隠しフォルダになってしまう

robocopy.exe でバッチファイル書いた。
synctoy って名前が悪いよなぁ。

腰痛い。


IMG



※写真と本文は関係ありません。


歩いたりは出来るけど、立ったり座ったりで痛い。
サーバのセットアップが立て込んでて、力仕事があるのに…。なぁ。。
病院行って痛み止めと湿布もらってきたけど、そんなにすぐ治る感じもしない。。ぬー。><



ロキソニンの湿布


ロキソニンって湿布もあるんですな。。

Amazon EC2


地震の日



※写真と本文は関係ありません。


自宅にあったサーバのデータ( このBlog、RSSリーダー等 )を Amazon EC2 に置きました。
サーバが止まるとすごい静か!!

ラジオチューナーのラインアウトを録音(→ポッドキャスト)してるスクリプトはどうしようもないかなぁ。


写真は、地震の日の近所の橋の上。人がぞろぞろ。

Munin をインストール。4/n (tarball で munin-node をインストール)


ライトアップされて、かっこいい。



※写真と本文は関係ありません。


前回からの続き。ちょっと古い Vine にtarball で munin-node をインストール。

tarball で munin-node をインストール

http://munin-monitoring.org/

http://sourceforge.net/projects/munin/files/ ← こちらから入手。


$ tar zxvf munin-1.4.5.tar.gz


tar の中の INSTALL を読む。
node に必要なライブラリを cpan からインストールする。


# perl -MCPAN -e shell
install Net::Server
install Net::Server::Fork
install Time::HiRes
install Net::SNMP
install Crypt::DES
install Digest::SHA1
install Digest::HMAC
install Net::SSLeay


または cpanminus をインストールして。


# cpan App::cpanminus
# cpanm install Net::Server Net::Server::Fork Time::HiRes Net::SNMP Crypt::DES Digest::SHA1 Digest::HMAC Net::SSLeay


munin ユーザを足す。uid、gid は 500 以下。
make、make install。


# groupadd -g 103 munin
# useradd -u 103 -g munin munin
$ make
# make install-common-prime install-node-prime install-plugins-prime


起動スクリプトをコピー。

cp /root/munin-1.4.5/dists/redhat/munin-node.rc /etc/init.d/munin-node


[root@aaaa munin-1.4.5]# diff -BbwENur /root/munin-1.4.5/dists/redhat/munin-node.rc /etc/init.d/munin-node 
--- /root/munin-1.4.5/dists/redhat/munin-node.rc    2005-11-07 01:54:02.000000000 +0900
+++ /etc/init.d/munin-node  2011-03-10 18:27:26.000000000 +0900
@@ -2,10 +2,10 @@
 #
 # munin-node   Control the Munin Node Server (formerly Linpro RRD client)
 #
-# chkconfig: 2345 90 10
+# chkconfig: - 90 10
 # description: munin node agents
 # processname: munin-node
-# config: /etc/munin/munin-node.conf
+# config: /etc/opt/munin/munin-node.conf
 # pidfile: /var/run/munin/munin-node.pid
 
 # Source function library.
@@ -21,7 +21,7 @@
 case "$1" in
   start)
    echo -n "Starting Munin Node: "
-   /usr/sbin/munin-node &
+     /opt/munin/sbin/munin-node &
    sleep 1
    pkill -0 $PROCNAME
    RETVAL=$?


/opt/munin/sbin/munin-node-configure --shell  | sh -x
/etc/init.d/munin-node restart
/sbin/chkconfig munin-node on


このスクリプトを動かすと、pkill がないと言われたので。

# apt-get install pgrep

conf はここ。rpm でインストールしたときの場所はここでした。→『/etc/munin/munin-node.conf』


# vi /etc/opt/munin/munin-node.conf
…
allow ^192\.168\.1\.152$           #(Munin 描画サーバアドレスからのアクセスを許可)
…


munin-node plugin の挙動の設定。rpm でインストールしたときの場所はここでした。→『/etc/munin/plugin-conf.d/munin-node』


# vi /etc/opt/munin/plugin-conf.d/munin-node 
[qmailqstat]
user root


Munin をインストール。3/n (munin-node plugin で監視項目の追加)


IMG_0003



※写真と本文は関係ありません。


プラグインの設定も書いておこう。


apache の監視を追加。

デフォルトで server-status は有効になっていないので監視されない。


# munin-node-configure --suggest
…
apache_accesses            | no   | [no apache server-status or ExtendedStatus missing on ports 80]
apache_processes           | no   | [no apache server-status on ports 80]
apache_volume              | no   | [no apache server-status or ExtendedStatus missing on ports 80]
…


こんな感じに怒られる。なので apache で server-status を有効にする。


# vi /etc/httpd/conf/httpd.conf 
…
ExtendedStatus On                         # ExtendedStatus をOn
…
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1                   # localhost のみ server-status を有効にする。
</Location>
…
# /etc/init.d/httpd configtest               # config 確認。
# /etc/init.d/httpd graceful               # 設定を有効にする。


再度『–suggest』するとこんな感じになる。


# munin-node-configure --suggest
…
apache_accesses            | no   | yes
apache_processes           | no   | yes
apache_volume              | no   | yes
…
# munin-node-configure --shell | sh                    # /etc/munin/plugins/ にソフトリンクを追加。
# /etc/init.d/munin-node restart                           # munin-node リスタート。


mysql も監視を追加する。


mysql_bytes                | no   | [could not connect to mysql]
mysql_isam_space_          | no   |
mysql_queries              | no   | [could not connect to mysql]
mysql_slowqueries          | no   | [could not connect to mysql]
mysql_threads              | no   | [could not connect to mysql]


『could not connect to mysql』と言われるので設定を追加する。


# which mysqladmin          # path を確認
/usr/bin/mysqladmin
# vi /etc/munin/plugin-conf.d/munin-node
[mysql*]
env.mysqlopts -uroot -ppassword              # ID・PW追加
env.mysqladmin /usr/bin/mysqladmin       # PATH 追加


# chmod o-r /etc/munin/plugin-conf.d/munin-node          # root 以外が見られないように、権限を設定。
…
# munin-node-configure --shell | sh                    # /etc/munin/plugins/ にソフトリンクを追加。
# /etc/init.d/munin-node restart                           # munin-node リスタート。


munin-node plugin の実行 id を変更する。

『/etc/munin/plugin-conf.d/munin-node』で uid gid を指定する。(何も設定しないと、uid=99(nobody) gid=103(munin) groups=103(munin) で実行される。)


[root@hogegege ~]# cat  /etc/munin/plugin-conf.d/munin-node 
#
# This file contains configuration options for the plugins. Three
# options are understood by munin-node itself:
#
#   user          # Set the user to run the plugin as
#   group        # Set the group to run the plugin as
#   command    # Run  instead of the plugin. %c
#                         expands to what would normally be run.
#   env.      # Sets  in the plugin's environment, see the
#                         individual plugins to find out which variables they
#                         care about.
#
#
[mysql*]
#env.mysqlopts -u someuser
env.mysqlopts -uroot -ppassword
env.mysqladmin /usr/bin/mysqladmin
[exim*]
group mail
[cps*]
user root
[apt]
user root
[vlan*]
user root
[postfix*]
user root
[qmailqueue]
user root


qmailqueue を追加した。


# /etc/init.d/munin-node restart                           # munin-node リスタート。


Munin をインストール。2/n (rpmforge で munin-node をインストール)


あんみつ



※写真と本文は関係ありません。


前回の続き。Redhat 系(CentOS、WhiteBox)。

rpmforge から munin-node をインストール

# yum --enablerepo=rpmforge install munin-node

munin-node の設定をする。(アクセス許可設定)

# vi /etc/munin/munin-node.conf
…
allow ^127\.0\.0\.1$
allow ^192\.168\.1\.152$    # munin(描画サーバ) のサーバ IP アドレス追加
…


# /etc/init.d/munin-node restart  # daemon 起動
# telnet localhost 4949Trying 127.0.0.1...      # 接続確認
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
# munin node at xen.localdomain
list      # node のリスト取得
cpu df df_inode entropy forks fw_packets http_loadtime if_err_eth0 if_eth0 interrupts iostat iostat_ios irqstats load memory munin_stats netstat ntp_kernel_err ntp_kernel_pll_freq ntp_kernel_pll_off ntp_offset open_files open_inodes postfix_mailqueue postfix_mailvolume proc_pri processes swap threads uptime users vmstat yum
Connection closed by foreign host.
# chkconfig munin-node on    #起動時 on


監視出来る項目はよしなに追加してくれるが、何で追加されないかは下記コマンドで確認できる。


# munin-node-configure --suggest


httpd status が有効になってないとか…。がわかる。設定変更後有効にしたいときは…。


# munin-node-configure --shell | sh
# /etc/init.d/munin-node restart  # daemon 再起動


とすると、/etc/munin/plugins/ にリンクを作成されて、munin-node 再起動すると有効になる。

munin (描画サーバ)側の設定。

# 追加したサーバを追加する。
…
[hoge.example.jp]
    address 192.168.1.1 # hoge のIPアドレス。
    use_node_name yes
…


しばらくすると描画される。(5 分おきにcron で描画される)

強制的に動かしたいなら /etc/cron.d/munin を参考にして、/usr/bin/munin-cron を起動すると描画する。root では実行できないので、 こんな感じ。『sudo -u munin /usr/bin/munin-cron』


次回(tarball で munin-node をインストール)へ続く。

Munin をインストール。1/n (rpmforge-release のインストール)


あんこう汁



※写真と本文は関係ありません。


Munin リソースモニタリングシステム
http://munin-monitoring.org/

munin(描画サーバ) → グラフを描画する。http://サーバ名/munin/ などでアクセスするとグラフが閲覧できる。
munin-node → 監視されるサーバにインストール。daemon で起動しておく。

Redhat 系(CentOS、WhiteBox)なら rpmforge-release をインストールして rpmforge を有効にして yum で簡単にインストールできた。

Vine(4.0、4.1 とちょっと古い) は SRPM で RPM 作りたかったけどパッケージが足らないと怒られるので、tarball でmunin-node をインストール。(後述
munin(描画サーバ) は rrdtool などの依存があったので Vine にはインストールしないことにした。

以下、Redhat 系(CentOS、WhiteBox)のインストール。

rpmforge-release の最新版をダウンロードしてインストール

http://packages.sw.be/rpmforge-release/


# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.i386.rpm


『–enablerepo=rpmforge 』オプションつけたときだけ有効にしたいので。『 rpmforge.repo 』を書き直す。


# vi /etc/yum.repos.d/rpmforge.repo 
…
#enabled = 1
enabled = 0
…


munin(描画サーバ)をインストール


# yum --enablerepo=rpmforge search munin
# yum --enablerepo=rpmforge install munin


http://サーバ名/munin/ でアクセス出来る。
cron で 5 分おきにグラフが描画される。


次回(rpmforge で munin-node をインストール)へ続く。