Wordpressの管理が面倒になってきたためBloggerに移転。
これで旧記事のインポートをしておいたけど、あまり必要なかったかな?
http://wordpress2blogger.appspot.com/
2011/09/01
2011/08/30
mongoDBのRESTインターフェイスをJSONPで使う
mongodbにrestオプションをつけるとWEBインターフェイスからjsonで色々情報が取れる。
JSONPならほぼjsだけのShaed環境向けViewerが作りやすいのにと思ったらひそかに対応していた。
"mongod -h" には出てくるんだが、公式の「Command Line Parameters」には載っていない、なんでかね?
mongodの起動時に --jsonp を渡すか、コンフィグにて下記オプションを追加すると
クエリにpadding用文字列をつけて "?jsonp=hogehgoe" などとリクエストすれば、hogehoge() の関数として返してくれる。
JSONPならほぼjsだけのShaed環境向けViewerが作りやすいのにと思ったらひそかに対応していた。
"mongod -h" には出てくるんだが、公式の「Command Line Parameters」には載っていない、なんでかね?
--jsonp allow JSONP access via http (has security implications)
mongodの起動時に --jsonp を渡すか、コンフィグにて下記オプションを追加すると
jsonp = true
クエリにpadding用文字列をつけて "?jsonp=hogehgoe" などとリクエストすれば、hogehoge() の関数として返してくれる。
2011/08/17
Capistranoのデフォルトdeployタスクをつぶす
Capistranoが便利なので、複数サーバの管理に使いまわそう。
ただもともとがRails用なので、間違えて"cap deploy"すると多少悲しくなる。
ここは deployに含まれる動作を事前に上書きして置くと安心。
Rails以外に対応したフォークがあったような気もするが。
ただもともとがRails用なので、間違えて"cap deploy"すると多少悲しくなる。
ここは deployに含まれる動作を事前に上書きして置くと安心。
namespace :deploy do
# all default task disabler.
task :setup do; end
task :update_code do; end
task :symlink do; end
task :restart do; end
end
Rails以外に対応したフォークがあったような気もするが。
ラベル:
capistrano,
deploy,
Rails,
Tech
2011/07/28
syslog-ngでsyslogをmongodbに直行させる
少々前に似たような記事、logger代わりにmongoimportを上げた。
が、syslogデーモンにsyslog-ngを使った場合、出力先を指定プログラムのSTDINにできるので直接mongodbに突っ込めるのだった。
が、syslogデーモンにsyslog-ngを使った場合、出力先を指定プログラムのSTDINにできるので直接mongodbに突っ込めるのだった。
2011/07/26
GlusterFS を 3.2.2へ更新
GlusterFSの3.2.2が出ていたので、3.2.1から更新した。
前のUpgrade手順はRemoveしてからだったが、ReleaseNoteによると上書きでよいらしい。
Ubuntuだったらいきなり "dpkg -i" でOK.
serverのほうを順繰りに更新し、daemonの再起動。
特に問題なくPeerとのコネクションが再開された。
クライアント側ではServerへの接続が途切れたログが一行でたが、見た目で分かる影響は無かった。
Bigfixもそこそこ多いので、更新しておいたらよい。
前のUpgrade手順はRemoveしてからだったが、ReleaseNoteによると上書きでよいらしい。
Ubuntuだったらいきなり "dpkg -i" でOK.
serverのほうを順繰りに更新し、daemonの再起動。
特に問題なくPeerとのコネクションが再開された。
クライアント側ではServerへの接続が途切れたログが一行でたが、見た目で分かる影響は無かった。
W [socket.c:1494:__socket_proto_state_machine] 0-glusterfs: reading from socket failed. Error (Transport endpoint is not connected)
Bigfixもそこそこ多いので、更新しておいたらよい。
2011/07/18
2011/07/12
Gluster server でログローテーション時に Volume Fail.
Glusterfs(3.2.1) でサーバ側のログをローテーションしようとした。
あちらこちらで 『-HUPを渡せ』 と書いてあるのでそのとおりにしたらローテーション時に下記のエラーが記録されている。
案の定一部のクライアントからWrite不可の状態だった。
もうお前にHUPは渡さん。
さてどうするか、ということで copytruncate
することにした。
copytruncate についてはmanを見て。
man logrotate8
毎晩restartさせるよりtruncate中のログがないほうマシだわ。
あちらこちらで 『-HUPを渡せ』 と書いてあるのでそのとおりにしたらローテーション時に下記のエラーが記録されている。
[glusterfsd.c:780:reincarnate] 0-glusterfsd: volume initialization failed.
案の定一部のクライアントからWrite不可の状態だった。
もうお前にHUPは渡さん。
さてどうするか、ということで copytruncate
することにした。
copytruncate についてはmanを見て。
man logrotate8
http://linuxcommand.org/man_pages/logrotate8.html
毎晩restartさせるよりtruncate中のログがないほうマシだわ。
2011/07/11
2011/07/07
2011/07/02
Vyatta、 Vyatta自身へのFireWall適用
VyattaのFireWallは賢い子なので、フィルタリングのルールは本体宛とは別のCHAINで管理・適用している。
つまりいきなりポート全遮断などのルールを適用してもVyattaへは繋がるので無問題、リカバリ可能というわけだ。
しかし、そのVyatta自身宛へのパケットをフィルタしたい場合はどうするのかな?
と思いつつ設定見直していたら発見。
なんだlocal でいいのか。
つまりいきなりポート全遮断などのルールを適用してもVyattaへは繋がるので無問題、リカバリ可能というわけだ。
しかし、そのVyatta自身宛へのパケットをフィルタしたい場合はどうするのかな?
と思いつつ設定見直していたら発見。
# set interfaces ethernet eth0 firewall
Possible completions:
in Ruleset for forwarded packets on inbound interface
local Ruleset for packets destined for this router
out Ruleset for forwarded packets on outbound interface
なんだlocal でいいのか。
2011/07/01
mongodb、config serverをjournalする
気づいたらmongodbに従来の周期的なDisk書き出しに加えてjournalという方式がついていた。
journalについては @doryokujin さんの解説が詳しいのでそちらへ
>> MongoDBの新機能:ジャーナリングについて詳しく
journalについては @doryokujin さんの解説が詳しいのでそちらへ
>> MongoDBの新機能:ジャーナリングについて詳しく
2011/06/29
Microsoftのワイヤレスマウス(3500)を正式採用
俺が採用。
マウスに線がついているのが嫌なのでワイヤレスタイプをいくつか試していた。
そんななかでMSの「Wireless Mobile Mouse 3500」がよかったので職場用に加えて自宅&ノートのため2つ追加で購入。
良かったところ。
これは広くおススメする。
ただしオーシャン ブルー、ユーロ シルバーおよびアーバン レッドだと私と被ります。
マウスに線がついているのが嫌なのでワイヤレスタイプをいくつか試していた。
そんななかでMSの「Wireless Mobile Mouse 3500」がよかったので職場用に加えて自宅&ノートのため2つ追加で購入。
良かったところ。
- BlueTrackがいい。 赤外線なりの古めかしいスキャン方式は全然アカン
- レシーバ小さい
- ホイールが引っ掛かるタイプ。 止まらないの(チルトホイール)はどうも使いにくい。
- 安い、Amazonで2000円切る。
これは広くおススメする。
ただしオーシャン ブルー、ユーロ シルバーおよびアーバン レッドだと私と被ります。
2011/06/27
Pocket WiFi「D25HW」とURoad-8000の大きさを比較
スペックとかでなく、単純に比較した。
URoad-8000の厚みが目立つが、一回り大きい分D25HWにバスタブをつけるよりはマシっぽい。
新しいほうのPocket WiFi、GP01も似たようなもんだろうか。
URoad-8000の厚みが目立つが、一回り大きい分D25HWにバスタブをつけるよりはマシっぽい。
新しいほうのPocket WiFi、GP01も似たようなもんだろうか。
ラベル:
Goods,
Pocket WiFi,
Tech,
WiMAX
monitでMySQL Clusterの監視
monitの監視はサービスポートへの接続やプロトコルを少々やり取りさせるのが定石。
MySQL Clusterの管理ノード・データノードをTCPポートで監視する場合のMonit設定例。
MySQL Clusterの管理ノード・データノードをTCPポートで監視する場合のMonit設定例。
ラベル:
monit,
MySQL,
MySQLCluster,
Tech
RalinkのUtilityで無線LANのリージョンを変更
今回調整したのは「802.11g Mini Card Wireless Adapter」
型番は確かRalink2870だった。
ノートPCからWiMAXの無線LANルータに繋ごうとしたらSSIDを検出しない。
他のデバイスから確認すると、自動で13chに設定されていたので1-11chに設定すると検出。
なるほどデバイス自身のモード変更が必要ということで、下記からUtilityをゲット。
http://www.ralinktech.com/support.php?s=1
リージョン変更して再起動、無事1-13chの検出に対応した。
型番は確かRalink2870だった。
ノートPCからWiMAXの無線LANルータに繋ごうとしたらSSIDを検出しない。
他のデバイスから確認すると、自動で13chに設定されていたので1-11chに設定すると検出。
なるほどデバイス自身のモード変更が必要ということで、下記からUtilityをゲット。
http://www.ralinktech.com/support.php?s=1
リージョン変更して再起動、無事1-13chの検出に対応した。
2011/06/22
ubuntuでzeromq
メモエントリ
zeromq≒libzmqをubuntu10.10にインストール。
http://www.zeromq.org/area:download
作業時点のzeromqバージョンは2.1.7。
あとでcookbookにする。
zeromq≒libzmqをubuntu10.10にインストール。
http://www.zeromq.org/area:download
作業時点のzeromqバージョンは2.1.7。
aptitude install uuid-dev
mkdir /usr/local/src/zeromq
cd /usr/local/src/zeromq
wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
tar xvzf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7/
./configure
make install
ldconfig
あとでcookbookにする。
2011/06/21
2011/06/17
2011/05/20
Ubuntu10.10で bonding + vlan + bridge(NG編)
XenServerやVMWare等では簡単な操作で可能な「VLAN + Bonding」の構成、KVMやlxcでは手動で設定しておきます。
追記:このbondにvlanを付ける設定では、ゲスト同士がVLANでやり取りできない。
bond0, bond0.100 とするのでなく、bond0(eth0+eth1), bond1(eth0.100+eth1.100) となるように設定するとうまくいく。
2011/05/11
2011/05/10
2011/05/09
VyattaのbridgeでSTP
Vyattaで透過FWなんかを作った際に冗長化できるかとSTPを有効にしてみた。
こんな感じ。
やってることは"brctl stp"と同じですが。
nice blocking.
FWの設定は同期できるので、これで十分そうだ。
こんな感じ。
# set interfaces bridge br0 stp true
やってることは"brctl stp"と同じですが。
$ show bridge br0 spanning-tree
br0
bridge id 0000.0800277d3173
designated root 0000.08002722f2bc
root port 1 path cost 4
max age 20.00 bridge max age 20.00
hello time 2.00 bridge hello time 2.00
forward delay 15.00 bridge forward delay 15.00
ageing time 300.01
hello timer 0.00 tcn timer 0.00
topology change timer 0.00 gc timer 54.06
flags
eth0 (2)
port id 8002 state blocking
designated root 0000.08002722f2bc path cost 4
designated bridge 0000.08002722f2bc message age timer 18.63
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
eth1 (1)
port id 8001 state forwarding
designated root 0000.08002722f2bc path cost 4
designated bridge 0000.08002722f2bc message age timer 18.63
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
nice blocking.
FWの設定は同期できるので、これで十分そうだ。
2011/05/06
Vyatta6.2からNetFlow
2行でよかった。
Vyattaは出来る子だなあ。
set system flow-accounting interface br0
set system flow-accounting netflow server 192.168.10.1 port 9996
Vyattaは出来る子だなあ。
2011/05/03
2011/04/30
2011/04/28
dnsmasqとunboundを比べて、dnsmasqを選んだ
だってキャッシュなのにround robinしてくれるんですもの。
googleを2回聞いてみる。
順番入れ替え、Query time 0 msec. よいね。
大体30秒で終わる、簡単インストール&Setup。
インターフェースの指定とresolv.confの編集が必要、まあスクリプト流して終わりだ。
RRはDNSコンテンツサーバだけがやるべきで、キャッシュサーバは順番を固定するのが推奨されているようだ。
だが俺はUnboundを選ばなかったなあ。
ラウンドロビンの確認
googleを2回聞いてみる。
$ sudo netstat -naplu
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:53 0.0.0.0:* 4832/dnsmasq
$ dig www.google.com @127.0.0.1
;; ANSWER SECTION:
www.google.com. 53288 IN CNAME www.l.google.com.
www.l.google.com. 236 IN A 64.233.183.103
www.l.google.com. 236 IN A 64.233.183.99
www.l.google.com. 236 IN A 64.233.183.147
www.l.google.com. 236 IN A 64.233.183.106
www.l.google.com. 236 IN A 64.233.183.105
www.l.google.com. 236 IN A 64.233.183.104
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
$ dig www.google.com @127.0.0.1
;; ANSWER SECTION:
www.google.com. 53287 IN CNAME www.l.google.com.
www.l.google.com. 235 IN A 64.233.183.104
www.l.google.com. 235 IN A 64.233.183.103
www.l.google.com. 235 IN A 64.233.183.99
www.l.google.com. 235 IN A 64.233.183.147
www.l.google.com. 235 IN A 64.233.183.106
www.l.google.com. 235 IN A 64.233.183.105
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
順番入れ替え、Query time 0 msec. よいね。
ubuntuにすぐインストール
大体30秒で終わる、簡単インストール&Setup。
aptitude install dnsmasq
ローカルアドレスのみListen
インターフェースの指定とresolv.confの編集が必要、まあスクリプト流して終わりだ。
# Local Listen
cat >/etc/dnsmasq.d/listenlocal.conf<<'EOFEOF'
interface=lo
except-interface=eth0
listen-address=127.0.0.1
EOFEOF
# include設定
sed s/\#conf-dir=\\/etc\\/dnsmasq.d/conf-dir=\\/etc\\/dnsmasq.d/ /etc/dnsmasq.conf -i
service dnsmasq restart
# 1行目に差し込み
sed 1s/^/nameserver\ 127.0.0.1\\n/ /etc/resolv.conf -i
service dnsmasq restart
RRはDNSコンテンツサーバだけがやるべきで、キャッシュサーバは順番を固定するのが推奨されているようだ。
だが俺はUnboundを選ばなかったなあ。
2011/04/25
Chef-Clientを既存Gem環境に影響なくインストール
Chefは便利だが、少なくともRuby+Gems(Chef)まで必須で、もちろん依存するGemsも必要だ。
Rubyを利用していない環境ならともかく、他とお互い干渉しないようにしておきたい。
ただのBundlerの紹介になるが、Chef-Clientを既存環境に影響ないよう使ってみる。
Rubyを利用していない環境ならともかく、他とお互い干渉しないようにしておきたい。
ただのBundlerの紹介になるが、Chef-Clientを既存環境に影響ないよう使ってみる。
2011/04/23
2011/04/21
MonitでKyoto Tycoon(with memcached plugin)を監視する
Kyoto Tycoonは局地で一定の支持があるFAL Labsさんのプロダクトです。
memcached互換の(プラガブル)リモートサーバを持ちつつ、本家よりメモリ効率がよいらしいので使ってみることにしました。
さて使用に当たってmonitの内部監視を立てるんだけども、プリセットのmemcachプロトコルではfailになる。
見た目は完全に互換があるように見えるが、monitの見ている所は違うんだろう。。
しかしL4監視なんて全く意味がないので、ここはmonitの"send&expect"を使ってプロトコル監視をします。
memcached互換の(プラガブル)リモートサーバを持ちつつ、本家よりメモリ効率がよいらしいので使ってみることにしました。
さて使用に当たってmonitの内部監視を立てるんだけども、プリセットのmemcachプロトコルではfailになる。
見た目は完全に互換があるように見えるが、monitの見ている所は違うんだろう。。
しかしL4監視なんて全く意味がないので、ここはmonitの"send&expect"を使ってプロトコル監視をします。
ラベル:
KyotoTycoon,
monit,
Tech
2011/04/18
2011/04/14
2011/04/13
Vyattaで作るTransparent FireWall その1/n
Linux-Debianベースのルータアプライアンス、VyattaでTransparent FireWallを構築する手順。
Transparent FireWallは透過型、トランスペアレント型とか言われますね。
便利な構成が作れますが、Vyattaでの作り方は公式のFireWall Reference Guideでもちゃんと取り扱っていません。
基本過ぎるから?周囲を見るとそうでもないように思うけど。。
ということで数回に分けて構築方法をまとめてみます。
Transparent FireWallは透過型、トランスペアレント型とか言われますね。
便利な構成が作れますが、Vyattaでの作り方は公式のFireWall Reference Guideでもちゃんと取り扱っていません。
基本過ぎるから?周囲を見るとそうでもないように思うけど。。
ということで数回に分けて構築方法をまとめてみます。
2011/04/11
mongodbのrepair時、パーミッションに注意
壊れたmongodbを修復するにはオプション、"--repair" をつけてmongodコマンドを実行します。
これで修復したmongodbが起動しない時はパーミッションが変更されているせいかも。
DBの実ファイルのパーミッションがrepairを実行したユーザになります。
rootでrepairしちゃうと、DBのファイルがroot所有になってしまうということですね。
ログを確認したら"Permission denied" が出ていたのでパーミッションを修正しました。
環境はUbuntu10.10、MongoDB1.8.1 でした。
どうやったらMongodbが要修復になるかっていうと、例えば無限ループをdiskfullになるまで突っ込んでみるとか。。
mongod --dbpath=/var/lib/mongodb --repair
これで修復したmongodbが起動しない時はパーミッションが変更されているせいかも。
DBの実ファイルのパーミッションがrepairを実行したユーザになります。
rootでrepairしちゃうと、DBのファイルがroot所有になってしまうということですね。
ログを確認したら"Permission denied" が出ていたのでパーミッションを修正しました。
chown -R mongodb:nogroup /var/lib/mongodb/
環境はUbuntu10.10、MongoDB1.8.1 でした。
どうやったらMongodbが要修復になるかっていうと、例えば無限ループをdiskfullになるまで突っ込んでみるとか。。
2011/04/07
MongoDBの1.8.1 が出たようなので更新する
バグフィックスらしいね。
パッケージインストールにしていたので隙はなかった。
SECONDARY(全部) > PRIMARY の順にやろう。
パッケージインストールにしていたので隙はなかった。
# aptitude update
# aptitude upgrade mongodb-10gen
SECONDARY(全部) > PRIMARY の順にやろう。
# mongo
MongoDB shell version: 1.8.1
connecting to: test
mondev:PRIMARY>
2011/04/05
nginxのログをsyslogに投げる
名前つきパイプの例、古典的なやり方。
パイプの取り出し側にはそれなりに工夫が必要だと思うが、
とりあえずnginxを起動してから。
とすると、loggerがsyslogに投げてくれる。
(フォーマットは少々いじっている。)
syslog-ngならsourceに指定することもできそうだ。
ただこれをやると、nginxがパイプの処理を待つようになっちゃうので使いどころ注意。
rm /var/log/nginx/access.log
mkfifo /var/log/nginx/access.log
パイプの取り出し側にはそれなりに工夫が必要だと思うが、
とりあえずnginxを起動してから。
# cat /var/log/nginx/access.log | logger -p local4.info
とすると、loggerがsyslogに投げてくれる。
1301982441 local4.info prox01 "xx.xxx.xxx.xxx - - [05/Apr/2011:14:47:21 +0900] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0""
(フォーマットは少々いじっている。)
syslog-ngならsourceに指定することもできそうだ。
ただこれをやると、nginxがパイプの処理を待つようになっちゃうので使いどころ注意。
ubuntu10.10(Merverick)のsyslog2ng
ubuntu10.10をrsyslogからsyslog-ngに入れ替えようと思いました。
デフォルトで入っているのはrsyslog、aptでsyslog-ngを入れると勝手にremoveされます。
さて、syslogからsyslog-ngに変更する際はsyslog2ngというスクリプトが使えますが、ubuntuのrsyslogからではどうかな。
デフォルトで入っているのはrsyslog、aptでsyslog-ngを入れると勝手にremoveされます。
さて、syslogからsyslog-ngに変更する際はsyslog2ngというスクリプトが使えますが、ubuntuのrsyslogからではどうかな。
2011/04/01
refinerycms, radiant などをbundleでインストール
railsで製造されたアプリケーションは、gemでインストールしたコマンドを使ってサイトをビルドするタイプのものがある。
refinerycms, radiant などがそういう感じ。
たとえばrefinerycmsだとこの4行でインストールOKとあるが。。
このやり方は標準で読み込むGEMSがやたらと増えるしバージョン依存とかいやだ。
これをbundlerを使って何とか影響範囲をRaisHome内にとどめてみよう。
富豪的ともいわれるが。
refinerycms, radiant などがそういう感じ。
たとえばrefinerycmsだとこの4行でインストールOKとあるが。。
gem install refinerycms
refinerycms path/to/my_new_app
cd path/to/my_new_app/
rails server
このやり方は標準で読み込むGEMSがやたらと増えるしバージョン依存とかいやだ。
これをbundlerを使って何とか影響範囲をRaisHome内にとどめてみよう。
富豪的ともいわれるが。
Gitorious:さくらのVPSをUbuntu10.10にしてチーム共有のリポジトリにする
開発チームでグローバルなGitが欲しいとなった。
Gitosisはgitosis-adminのリポジトリ編集が必要で、皆が自由にリポジトリを作るのにはひと工夫がいる。
なのでGitoriousを置こうと。http://gitorious.org/
パブリックにしたいところだが、そこは堪えてプライベートモードにしよう。
構築先はさくらVPSが適当だろう。
事前にRackSpaceでUbuntu10.10へのGitorious構築手順を確認した。
http://www.sawanoboly.net/dwiki01/devops/gitorious
Cookbookにするのはちょっとしんどいな。
Githubの有料版でもいいっちゃあいい。
Gitosisはgitosis-adminのリポジトリ編集が必要で、皆が自由にリポジトリを作るのにはひと工夫がいる。
なのでGitoriousを置こうと。http://gitorious.org/
パブリックにしたいところだが、そこは堪えてプライベートモードにしよう。
構築先はさくらVPSが適当だろう。
事前にRackSpaceでUbuntu10.10へのGitorious構築手順を確認した。
http://www.sawanoboly.net/dwiki01/devops/gitorious
Cookbookにするのはちょっとしんどいな。
Githubの有料版でもいいっちゃあいい。
2011/03/31
PPA版Nginxのコンフィグオプションをチェック
Ubuntu10.10(maverick)などでnginxを使う場合は、公式が用意しているLaunchPadのPPAからStableを使うのがよさそうだ。
インストールして、どんなモジュールが使えるかチェックした。
主要なモジュールに加え、サードパーティのモジュールも入ってますね。
Fairが使えるのは嬉しいのかもしれない。
インストールして、どんなモジュールが使えるかチェックした。
# nginx -V
nginx version: nginx/0.8.54
TLS SNI support enabled
configure arguments:\
--conf-path=/etc/nginx/nginx.conf\
--error-log-path=/var/log/nginx/error.log\
--http-client-body-temp-path=/var/lib/nginx/body\
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi\
--http-log-path=/var/log/nginx/access.log\
--http-proxy-temp-path=/var/lib/nginx/proxy\
--http-scgi-temp-path=/var/lib/nginx/scgi\
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi\
--lock-path=/var/lock/nginx.lock\
--pid-path=/var/run/nginx.pid\
--with-debug\
--with-http_addition_module\
--with-http_dav_module\
--with-http_geoip_module\
--with-http_gzip_static_module\
--with-http_image_filter_module\
--with-http_realip_module\
--with-http_stub_status_module\
--with-http_ssl_module\
--with-http_sub_module\
--with-http_xslt_module\
--with-ipv6\
--with-sha1=/usr/include/openssl\
--with-md5=/usr/include/openssl\
--with-mail\
--with-mail_ssl_module\
--add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-echo\
--add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-upstream-fair
主要なモジュールに加え、サードパーティのモジュールも入ってますね。
Fairが使えるのは嬉しいのかもしれない。
Nginx用の a2ensite, a2dissite がないのでツールを作る
最近ChefのCookbookを触っているが、Rubyをちゃんと読めるほうが都合がよいので練習がてら。
ubuntuなどのdeb系はapache httpdのサイト管理がよく作られており、サイト単位の有効無効を a2ensite, a2dissiteというツールで切り替えるように工夫がされています。
Nginxでもコマンドでサイト管理やりたいなあと思い作成。
3つのメソッド(サブコマンド)を持ちます、オプションなしでたたくと一応使い方を出すようにしました。
とか
ngctlにエイリアスして
このようにします。
リストはこんな感じで出します。
リロードがいやな人はコメントアウトしたりgracefulに相当する手続きがあるのでそれを変わりに仕込みましょう。
この辺は改良の余地が大きいですね。
自分でつかうのでGithubにも置いてます。
https://github.com/sawanoboly/optools/blob/master/ngsitectl.rb
うちはハイライトしてないからGithubのほうが見やすいですね。
そうそう、1.9.2 p180 で作っているので他のVerについては動くか見てないです。
ngsitectl.rb
ubuntuなどのdeb系はapache httpdのサイト管理がよく作られており、サイト単位の有効無効を a2ensite, a2dissiteというツールで切り替えるように工夫がされています。
Nginxでもコマンドでサイト管理やりたいなあと思い作成。
使い方
3つのメソッド(サブコマンド)を持ちます、オプションなしでたたくと一応使い方を出すようにしました。
- list:sites-available にあるコンフィグファイルをリストアップ。
現在有効なものは+(プラス)を、無効なサイトは-(マイナス)を付与して表示。 - enable {configfile}:sites-enabled にリンクを作成してnginxをリロード。
- disable {configfile}:sites-enabled からリンクを削除してnginxをリロード。
コマンド例
ngsitectl.rb disable default
とか
ngctlにエイリアスして
ngctl enable example.com
このようにします。
リストはこんな感じで出します。
# ngctl list
- example.com
+ 8082
+ rprox.conf
+ 8081
- default
+ 8083
+ ssl_rprox.conf
リロードがいやな人はコメントアウトしたりgracefulに相当する手続きがあるのでそれを変わりに仕込みましょう。
この辺は改良の余地が大きいですね。
コード
自分でつかうのでGithubにも置いてます。
https://github.com/sawanoboly/optools/blob/master/ngsitectl.rb
うちはハイライトしてないからGithubのほうが見やすいですね。
そうそう、1.9.2 p180 で作っているので他のVerについては動くか見てないです。
ngsitectl.rb
#!/usr/bin/env ruby
# encording: utf-8
## Const
AvailDir = "/etc/nginx/sites-available/"
EnableDir = "/etc/nginx/sites-enabled/"
# list up all site and add "+" for enable sites.
def list(sitename)
sitesall = Dir.entries(AvailDir)
# exclude dots
sites = sitesall.select{|elem| elem != "." and elem !=".."}
# enabled sites check.
sites.each do |site|
if File.exist?(EnableDir + site) then
puts "+ " + site
else
puts "- " + site
# File.symlink(AvailDir + site, EnableDir + site)
end
end
end
def enable(sitename)
if File.exist?(EnableDir + sitename) then
puts "Site:" + sitename + " is already enabled.\nDo nothing."
elsif File.exist?(AvailDir + sitename) then
puts "enable: " + sitename
File.symlink(AvailDir + sitename, EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end
def disable(sitename)
if File.exist?(AvailDir + sitename) then
if File.exist?(EnableDir + sitename) then
puts "disable: " + sitename
File.unlink(EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " is already disabled.\nDo nothing."
end
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end
begin
method(ARGV[0]).call(ARGV[1])
rescue TypeError => ex then
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
rescue => ex
puts "Exception " + "#{ex.class}"
puts "#{ex.message}"
puts
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
end
2011/03/26
Ubuntu10.10、Open vSwitch(1.1)でBonding
Linux、特に仮想ホストでブリッジをOpen vSwitchにしておくことは色々と良い気がするのでKVMのホストに導入してみた。
さて、Helpを見るとBondingができるようです。
add-bondなどというサブコマンド。
既存のbondingモジュールを外して設定してみます。
さて、Helpを見るとBondingができるようです。
# ovs-vsctl --help
--snip--
Bridge commands:
add-br BRIDGE create a new bridge named BRIDGE
--snip--
Port commands:
add-port BRIDGE PORT add network device PORT to BRIDGE
add-bond BRIDGE PORT IFACE... add bonded port PORT in BRIDGE from IFACES
add-bondなどというサブコマンド。
既存のbondingモジュールを外して設定してみます。
ラベル:
openvswitch,
Tech,
Ubuntu,
仮想化
2011/03/22
2011/03/21
ネットワーク経由でmembaseとmemcachedを比較
memcachedは便利だがスケールさせるとなるといろいろ考え方がある。
プロダクトもいろいろあるが、memcachedの本家が作っており導入が簡単なmembaseを試してみた。
ネットワーク越しだと割り切ればそれなりだ。
プロダクトもいろいろあるが、memcachedの本家が作っており導入が簡単なmembaseを試してみた。
ネットワーク越しだと割り切ればそれなりだ。
さくらのVPS(1G)にUbuntu10.10をインストール
さくらのVPS(1G)を使おう。入れる予定はChefとSwiftとgit。
シリアルコンソールがつながっているため、手動Netbootなりの方法が使える。
ubuntu10.10を入れてみよう。
参考:第154回 さくらVPSへのネットブートインストールをPreseedingで自動化する
手法自体は参考記事の出だし部分があれば大体OKなんだけども、
GRUBの設定を少し修正する必要があった。※元記事はGRUB1, ここでは10.04を一度入れていたのでGRUB2なのです。
これでOK。
またはGRUBのコンソールで頑張ってもいいけど。
シリアルコンソールがつながっているため、手動Netbootなりの方法が使える。
ubuntu10.10を入れてみよう。
参考:第154回 さくらVPSへのネットブートインストールをPreseedingで自動化する
手法自体は参考記事の出だし部分があれば大体OKなんだけども、
GRUBの設定を少し修正する必要があった。※元記事はGRUB1, ここでは10.04を一度入れていたのでGRUB2なのです。
menuentry "Ubuntu Netboot Install" {
set root=(hd0,1)
linux /ubuntu/linux ro root=LABEL=/ console=tty0 console=ttyS0,115200n8r
initrd /ubuntu/initrd.gz
}
これでOK。
またはGRUBのコンソールで頑張ってもいいけど。
2011/03/18
mongoDBを1.6.xから 1.8.0にアップグレードする
monogoDB1.8の正式版がリリースされた。
開発環境にはubuntu10.10Serverにパッケージで入れている1.6.5が動いている。
公式ドキュメントUpgrading to 1.8.0を見ると、バイナリ上書きでOK! みたいなことがあるのでUpgradeしてみた。
気になるレプリカセット構成も順繰りでUpgrade可能だった。
開発環境にはubuntu10.10Serverにパッケージで入れている1.6.5が動いている。
公式ドキュメントUpgrading to 1.8.0を見ると、バイナリ上書きでOK! みたいなことがあるのでUpgradeしてみた。
気になるレプリカセット構成も順繰りでUpgrade可能だった。
2011/03/16
MongoDBのレプリカセットで、Slave(Secondary)からもget (Readの負荷分散)
MongoDBの負荷分散ではReadのためのReplicaSet、WriteのためのShardと2つの方式を取ることができます。
ReplicaSetは冗長化・ミラーリング、Shardingはストライピング風の役割で、スケールアップするためにはRaid10を構成するように拡張していくことになります。
ReplicaSetは冗長化・ミラーリング、Shardingはストライピング風の役割で、スケールアップするためにはRaid10を構成するように拡張していくことになります。
ラベル:
mongodb,
replicaset,
Tech
libvirt下のVMでSheepdogのdiskを使おう
SheepdogからのVM作成ができたらば、次はvirshやvirt-managerから操作するためにlibvirtで管理できると助かると思う。
前提としてこのくらい必要だが、できるようになっている。
前提としてこのくらい必要だが、できるようになっている。
- Sheepdogが動いており、利用可能なボリュームがある
- libvirtのバージョンは0.8.7 以降(diskのtypeにnetworkが追加)
- virshがどこかで使える
2011/03/15
[再掲]Pythonの一行WEBサーバ
旧ブログから再掲。
Linuxサーバで作業中、カレントディレクトリをルートにしていきなりWEBサーバを上げる。
TCPの8000番で上がってくるので、ブラウザからファイルを参照することができる。
index.htmlがあればそれが表示される。
読もうとしたDocumentがHTML形式だったときは、読む際にWEBサーバで上げてしまう。
Rubyでもできるけども、OS入れたら大抵入ってるPythonなのがいい。
Linuxサーバで作業中、カレントディレクトリをルートにしていきなりWEBサーバを上げる。
python -m SimpleHTTPServer
TCPの8000番で上がってくるので、ブラウザからファイルを参照することができる。
index.htmlがあればそれが表示される。
読もうとしたDocumentがHTML形式だったときは、読む際にWEBサーバで上げてしまう。
Rubyでもできるけども、OS入れたら大抵入ってるPythonなのがいい。
ラベル:
httpserver,
python,
Tech
2011/03/12
knifeのInteractiveモードがとてもインタラクティブ(chef)
またChef - knifeの話だ。
knife sshにはインタラクティブモードというのがある。
やってみよう。
クエリは前回同様だが、コマンド部にて"interactive"を指定しよう。
複数ノードが引っかかるようにクエリしたほうがよくわかる。
では動作についてちょっと紹介。
knife sshにはインタラクティブモードというのがある。
やってみよう。
# knife ssh "lsb_id:Ubuntu" interactive -x root -P passwd
クエリは前回同様だが、コマンド部にて"interactive"を指定しよう。
複数ノードが引っかかるようにクエリしたほうがよくわかる。
では動作についてちょっと紹介。
Knife sshで任意のサーバにコマンド実行(Chef)
前回のChefServer紹介で、クライアントがインベントリされるのが分かりました。
recipe通りに仕上がったサーバに手を加えるときにこのインベントリが役に立ちます。
これを活用するにはknifeのサブコマンド、knife sshを使うのが分かりやすいでしょう。
単純な話なので例だけ。
recipe通りに仕上がったサーバに手を加えるときにこのインベントリが役に立ちます。
これを活用するにはknifeのサブコマンド、knife sshを使うのが分かりやすいでしょう。
単純な話なので例だけ。
2011/03/11
2011/03/08
物理サーバ1台でSheepdogの分散を試す 計画編
最近分散ストレージのSheepdogが気になるのです。
http://www.osrg.net/sheepdog/
試してみようと思っているが、今丁度よさげなサーバは数台。
仕方がないので物理サーバ1台で分散する構成を考えました。
※まだ試してないので計画段階です、何かで頓挫するかもね。
http://www.osrg.net/sheepdog/
試してみようと思っているが、今丁度よさげなサーバは数台。
仕方がないので物理サーバ1台で分散する構成を考えました。
※まだ試してないので計画段階です、何かで頓挫するかもね。
2011/03/03
mongodbでRESTをON(confファイル)
mongodbを立ち上げるとついてくるWebUI、初期値ではRESTがOFF。
オプション "--rest" を付けて立ち上げるように促される。
なぜかアンドキュメンテッドなんだが、
設定ファイル(/etc/mongodb.confなど)に
としても有効になるのだ。
オプション "--rest" を付けて立ち上げるように促される。
なぜかアンドキュメンテッドなんだが、
設定ファイル(/etc/mongodb.confなど)に
rest = true
としても有効になるのだ。
MySQL Clusterの管理ノード(ndb_mgmd)冗長化
MySQL Clusterの情報をいくつか見てましたが、ndb_mgmdが冗長化された状態のサンプルが見当たらなかったので自分のところで載せておこう。
ndb-connectstring をカンマ区切りで並べたらよいみたいです。
IDを分けて2つ定義します。
管理ノードの初回起動時にコマンドラインで自分のIDを指定しました。
一度起動しておけば、バイナリ化されたコンフィグに持つのか、移行は自分のIDを覚えててくれるようです。
お互いをの管理ノードを起動して、しばらく待てば2つの管理ノードが並ぶ。
どちらからでもndb_mgmシェルで操作可能、片方をkillしても一応稼働しいてた。
管理ノードを冗長化したら、動作はActive+Standbyだと見た気がするんだがどっちかがマスターなのかしら?
設定例
SQLノード(mysqld)、データノード(ndbd)の設定
ndb-connectstring をカンマ区切りで並べたらよいみたいです。
参考:クラスタの 接続文字列
http://dev.mysql.com/doc/refman/5.1/ja/mysql-cluster-connectstring.html
ndb-connectstring=192.168.30.227,192.168.30.235
管理ノード(ndb_mgmd)のconfig.ini
IDを分けて2つ定義します。
# node A
[NDB_MGMD]
hostname=192.168.30.227
datadir=/var/lib/mysql-cluster
id=1
# node B
[NDB_MGMD]
hostname=192.168.30.235
datadir=/var/lib/mysql-cluster
id=2
管理ノードの初回起動時にコマンドラインで自分のIDを指定しました。
NodeA # ndb_mgmd --ndb-nodeid=1
NodeB # ndb_mgmd --ndb-nodeid=2
一度起動しておけば、バイナリ化されたコンフィグに持つのか、移行は自分のIDを覚えててくれるようです。
起動してみる
お互いをの管理ノードを起動して、しばらく待てば2つの管理ノードが並ぶ。
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.30.227:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 4 node(s)
id=11 @192.168.30.227 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 0, Master)
id=12 @192.168.30.235 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 0)
id=13 @192.168.30.228 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 1)
id=14 @192.168.30.236 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 1)
[ndb_mgmd(MGM)] 2 node(s)
id=1 @192.168.30.227 (mysql-5.1.51 ndb-7.1.10)
id=2 @192.168.30.235 (mysql-5.1.51 ndb-7.1.10)
[mysqld(API)] 2 node(s)
id=51 @192.168.30.227 (mysql-5.1.51 ndb-7.1.10)
id=52 @192.168.30.235 (mysql-5.1.51 ndb-7.1.10)
どちらからでもndb_mgmシェルで操作可能、片方をkillしても一応稼働しいてた。
管理ノードを冗長化したら、動作はActive+Standbyだと見た気がするんだがどっちかがマスターなのかしら?
Amazon AWSで リージョンTokyoをデフォルトで使う
Twitterで何やら騒がしいのでAWSをのぞいてみた。
Tokyo(ec2.ap-northeast-1) が来ていたのか。
EC2_URL の環境変数を設定しておけば、デフォルトのリージョンが指定できるのでTokyoにした。
うーん、来てしまったね。。
Tokyo(ec2.ap-northeast-1) が来ていたのか。
EC2_URL の環境変数を設定しておけば、デフォルトのリージョンが指定できるのでTokyoにした。
[sawanobori@dev ~]$ export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
[sawanobori@dev ~]$ ec2-describe-regions
REGION eu-west-1 ec2.eu-west-1.amazonaws.com
REGION us-east-1 ec2.us-east-1.amazonaws.com
REGION ap-northeast-1 ec2.ap-northeast-1.amazonaws.com
REGION us-west-1 ec2.us-west-1.amazonaws.com
REGION ap-southeast-1 ec2.ap-southeast-1.amazonaws.com
うーん、来てしまったね。。
mysqlslapをrpmから取り出してつかう
mysqlslapの記事を見て使って見ようと思ったら、5.1のクライアントパッケージから同梱されていると。
CentOSから使おうとしたら入ってなかったので公式配布のクライアントrpmをばらして叩いてみた。
拾ってきたのはGenericのパッケージ、"MySQL-5.5.9-1.linux2.6.i386.tar"
展開して叩いてみる。
使えるかな?
ちゃんと動くようだね。
※mysqlslap.t1 というテーブルを事前につくっています。
CentOSから使おうとしたら入ってなかったので公式配布のクライアントrpmをばらして叩いてみた。
拾ってきたのはGenericのパッケージ、"MySQL-5.5.9-1.linux2.6.i386.tar"
展開して叩いてみる。
tar xvf MySQL-5.5.9-1.linux2.6.i386.tar
rpm2cpio MySQL-client-5.5.9-1.linux2.6.i386.rpm | cpio -id | cpio -id
usr/bin/mysqlslap -V
usr/bin/mysqlslap Ver 1.0 Distrib 5.5.9, for Linux (i686)
使えるかな?
# usr/bin/mysqlslap -h 192.168.1.10 -P 4040 -u root -p -a --number-of-queries=100
Enter password:
Benchmark
Average number of seconds to run all queries: 0.446 seconds
Minimum number of seconds to run all queries: 0.446 seconds
Maximum number of seconds to run all queries: 0.446 seconds
Number of clients running queries: 1
Average number of queries per client: 100
ちゃんと動くようだね。
※mysqlslap.t1 というテーブルを事前につくっています。
ubujntu10.10のmysql-proxyパッケージ
mysql-proxyを入れたが起動スクリプトが何もしないで
exitするので開いてみた。
しょっぱなからパスが違う。
×DAEMON="/usr/sbin/mysql-proxy"
○DAEMON="/usr/bin/mysql-proxy"
これでOKさ。
exitするので開いてみた。
しょっぱなからパスが違う。
×DAEMON="/usr/sbin/mysql-proxy"
○DAEMON="/usr/bin/mysql-proxy"
これでOKさ。
2011/03/01
phpのMySQLモジュールを差し替える
ただしSharedに限る。
LAMPな環境でMySQLだけ差し替えたりすると、しばしばこういう目に合う。
phpMyAdmin さんからの警告。
このままでも動くけど気持ち悪いのでMySQL関連のライブラリだけ差し替えます。
LAMPな環境でMySQLだけ差し替えたりすると、しばしばこういう目に合う。
phpMyAdmin さんからの警告。
PHP MySQL ライブラリのバージョン 5.0.90 が MySQL サーバのバージョン 5.1.53 と異なります。
このままでも動くけど気持ち悪いのでMySQL関連のライブラリだけ差し替えます。
2011/02/23
UbuntuでNetworkInterfaceにIPアドレスを振らない
仮想PCのホストや、L2をブリッジだけさせたい場合にはNICにIPアドレスを振らないことはままある。
このように "manual" パラメータを指定できるようだ。
このように "manual" パラメータを指定できるようだ。
auto br100
iface br100 inet manual
bridge_ports eth1
bridge_stp off
bridge_maxwait 0
bridge_fd 0
2011/02/16
RackSpace Cloud Server からIPv6
RackSpaceのCloud Serverというのを使い始めてみました。
256MBのサーバなら1月あげても$10くらいで、検証用にあげたり下げたりに使えそうです。
さて、せっかくグローバルな環境なのでIPv6が使いたいと思い、トンネル屋さんを調査。
無料で5個までIPv6トンネルが作れる、Tunnel Bloker というのに登録してみました。
http://tunnelbroker.net/
以降、IPv6適用までを。
256MBのサーバなら1月あげても$10くらいで、検証用にあげたり下げたりに使えそうです。
さて、せっかくグローバルな環境なのでIPv6が使いたいと思い、トンネル屋さんを調査。
無料で5個までIPv6トンネルが作れる、Tunnel Bloker というのに登録してみました。
http://tunnelbroker.net/
↑指摘があったので追記:
Hurricane Electric というホスティング他ISPをやっている会社が提供しているらしい。
以降、IPv6適用までを。
2011/02/15
ubuntu server 10.10 を導入、IPv4アドレスの固定
インストーラがDHCPだもんで、OS起動後に設定した。
その時のメモ。
インターフェイス関連の設定ファイルはこれだった。
(以下は sudo -s でrootになって作業した。)
lo の設定の後に以下を追記。
ネットワークサービスの再起動
あとは/etc/resolv.conf でNSを指定すればOK.
もともとのIP割り当てがなかった場合、sshも同時に上がってくる。
その時のメモ。
インターフェイス関連の設定ファイルはこれだった。
(以下は sudo -s でrootになって作業した。)
vi /etc/network/interfaces
lo の設定の後に以下を追記。
auto eth0
iface eth0 inet static
address ***.***.***.***
netmask 255.255.255.0
gateway ***.***.***.***
ネットワークサービスの再起動
/etc/init.d/networking restart
あとは/etc/resolv.conf でNSを指定すればOK.
もともとのIP割り当てがなかった場合、sshも同時に上がってくる。
2011/01/28
再掲:Visioでオブジェクトのテキストを常に水平に表示
※旧ブログ2009年の記事を自分用に引っ張ってきました。文中のリンク切れなどがあるかもしれませんがご容赦を。
Microsoft のVisioで図を描くとして、オブジェクトにテキストを載せたとします。
通常、オブジェクトを回転させたらテキスト部分も一緒に回転するけど、それを自動で水平に保つやり方。
だいぶ前にそういう動作をする図を見て、少々ヘルプなど見てもどうやるかわからなかったのでほっといたんだけど、VISIOの解説書(MSのサイトを分かり易く再編) 見ながらシェイプシートのいじり方を見ていたら分かった。
ちなみに試したVisioは2003、資料は2000用だった、多分2007でも似たようなもんだろう。
Microsoft のVisioで図を描くとして、オブジェクトにテキストを載せたとします。
通常、オブジェクトを回転させたらテキスト部分も一緒に回転するけど、それを自動で水平に保つやり方。
だいぶ前にそういう動作をする図を見て、少々ヘルプなど見てもどうやるかわからなかったのでほっといたんだけど、VISIOの解説書(MSのサイトを分かり易く再編) 見ながらシェイプシートのいじり方を見ていたら分かった。
ちなみに試したVisioは2003、資料は2000用だった、多分2007でも似たようなもんだろう。
追記:2007でも2010でもOKでした
2011/01/22
やはりMonitはいい
状態変化のイベントを収集するのにZabbixを使おうかとセットアップ。
他のサーバ/サービスはZabbixが見てくれるが、zabbix-serverのプロセス自体はどうするのよ、という所でmonitを入れた。
monit公式:http://mmonit.com/monit/
monitのやり方はいい、少し監視について話します。
他のサーバ/サービスはZabbixが見てくれるが、zabbix-serverのプロセス自体はどうするのよ、という所でmonitを入れた。
monit公式:http://mmonit.com/monit/
monitのやり方はいい、少し監視について話します。
2011/01/12
VyattaブリッジでVlanタグ(802.1Q)のつけ外し
2011/01/06
Proxmox VE を使う
「Proxmox VE」は仮想サーバをホストするベアメタルもの、XenServerとかVMWareのESXiと同様です。
ベアメタル系は物理サーバにインストールするだけでラクにVMの管理ができるので重宝しますね。
ダウンロードはこのへんから => http://pve.proxmox.com/wiki/Downloads
「Proxmox VE」の特徴は完全仮想にKVM,準仮想にOpenVZコンテナを作れるとのこと、ISOから入れてみます。
どうやら本来は、「ProxmoxのアプライアンスをVMで簡単につかえるよ」という趣旨のようですが気にしなくても問題ありません。
ベアメタル系は物理サーバにインストールするだけでラクにVMの管理ができるので重宝しますね。
ダウンロードはこのへんから => http://pve.proxmox.com/wiki/Downloads
「Proxmox VE」の特徴は完全仮想にKVM,準仮想にOpenVZコンテナを作れるとのこと、ISOから入れてみます。
どうやら本来は、「ProxmoxのアプライアンスをVMで簡単につかえるよ」という趣旨のようですが気にしなくても問題ありません。
登録:
投稿 (Atom)