月別アーカイブ: 12月 2011

cronが動かない ー cron run-parts namespace

 cron.dailyとか、cron.hourly と言ったディレクトリがetcの下にあって、日次や毎時バッチ置き場になっているんだけど、実は自動実行されるファイルの名前にネームスペース制限がある。
 正確に言えば、cron.???lyのディレクトリは、crontabでrun-partsで実行している。
 なので、ネームスペース制限も正確にはrun-partsの制限で、debianだと英数のみ、Serversman@VPSのベースのCentOSはRHELのクローンなので、一部の記号で終了するファイルだけ禁止。
 debianだとhoge.shやpiyo-batchは違反するので実行されない。
 通常のcron設定ファイルはr属性が付いていればいいけど、このディレクトリに置く場合はx属性が必要なのも忘れてはいけない。
ささいな話だけど、一応メモ。

(468)


カテゴリー: サーバ設定 | コメントをどうぞ

Webサイトのドメインを移動する – mod_rewrite

SEO的目的であるとか、欲しかったのが取れたとか言う理由でWebのドメインを移動することがある。
しかし、単純に移動させてしまうと、それまで使っていたリンクであるとか、サーチエンジンの順位であるとかでマイナスが発生してしまう。
そんなときに便利なのがApacheのmod_rewriteである。
.htaccessファイルで

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(blog\.hogehoge\.piyo)(:80)? [NC]
RewriteRule ^(.*)$ http://serversmanvps.xn--ockc3f5a.com/$1 [R=301,L]
</IfModule>

 みたいに、旧サイトに設置しておくと、http://blog.hogehoge.piyoに来たリクエストをHTTP応答コード301(恒久的移動)を添えてhttp://serversmanvps.xn--ockc3f5a.com/に飛ばしてくれる。
 Ruleの(.*)(全部引っかかる正規表現)とアドレスの最後にある$1(最初にヒットした部分をくっつける)によって、旧サイトの/page/2とかの部分をコピーしてくっつけられるので、従来のリンクはそのまま新サイトへのリンクとして扱われる。
 301コードを掲示しておくと、検索エンジンが移動したことを認識してくれるので、そういった部分のマイナスが押さえられる。

WordPressサイトの.htaccessには
# BEGIN WordPress
# END WordPress
でくくられた部分にmod_rewriteの設定があるが、この範囲はWordpressの設定を変えると書き換えられてしまうので、このコメントの外に書き足す。

(434)


カテゴリー: サーバ設定 | コメントをどうぞ

古いファイルを自動削除する – tmpwatch

 作業の一時ディレクトリであるとか、バックアップデータであるとかで一定以上古くなったファイルを削除したいと言う事が良くある。
 そんなときに便利なのがtmpwatchと言うコマンド。
tmpwatch -m 720 /var/www/upload/tmp
 みたいな感じで使う。

 この場合、-mはmodifiedタイム(最終変更時間)について指定して、720時間(30日)経過した/var/www/upload/tmp以下のファイル・ディレクトリを削除すると言う指定。
 シェルでfindしてrmするみたいな事を書けば同じ事が出来るけど、こっちの方が手っ取り早い。

 デフォルトのServersMan@VPSだと、cron.dailyにtmpwatchと言うスクリプトが放り込んであって、日次で回っているので、日単位の処理ならここに追記しても良いだろう。 時単位で削除したい場合はcron.hourlyに放り込もう。

(520)


カテゴリー: サーバ設定 | コメントをどうぞ

Rollbackしてもauto_incrementは戻らない – MySQL

 まぁ、動作的にこうなるのは仕方ないんだけど、テーブルのauto_increment値はrollbackしても戻らず増加する。
 一般的にテーブルのPKはidで、auto_incrementにすると思うんだけど、InnoDBでトランザクション制御をしているとき

BEGIN;
INSERT INTO main_table(id, code, num) VALUES(0, 1, 2);
UPDATE sub_table SET main_id=LAST_INSERT_ID() WHERE code=1;
ROLLBACK;

 とかすると、INSERTもUPDATEも無かったことにされるけど、main_tableのauto_incrementカウンタは増加しているんで、次にINSERTするとidが飛んでしまうのがMySQLの仕様。
 下手に巻き戻したりすると、平行して実行して先行処理がロールバックするとカウンタが前後しちゃったりするんでベターな処理ではある。
 基本事項だけど一応確認。

(2428)


カテゴリー: MySQL | コメントをどうぞ

InnoDBの一行は8KBまで – MySQL InnoDBの制限

 MySQLでは、従来、MyISAMが標準ストレージエンジンだったけど、トランザクション機能が使えるInnoDBのニーズも高く、最近は最適化も進み、InnoDBを利用する場面も増えてきた。
 しかし、InnoDBでは注意しなければならない点がある。
 デフォルトのMySQLでは、InnoDBの1行はデータ量8KB以下にしなければならない(MyISAMでは64KBまで対応していた)
 例えば、VARCHAR(255)のカラムが40個あれば10KBになってしまうので、こういったデータのInsert/Updateを実行すると’Got error 139 from storage engine’と言うエラーメッセージで転ける。
 InnoDBはページサイズの1/2の大きさの行を許容するので、ページサイズをMaxの64KBにすれば32KBまで入る様になる。

 ちなみに、TEXTやBLOBカラムは通常、先頭の768バイトがテーブルに、残りが外部に保存されるので、このような型のカラムは10個までしか使えない。
 が、InnoDB1.1以降では、my.cnfで
[mysqld]
innodb_file_per_table
innodb_file_format=Barracuda
 の設定をしてやることで、TEXT/BLOBは20バイトのポインタが保存されて、実体は外部に保存されるので、このような型のカラムを多くする場合にはBarracudaファイルフォーマットを検討すると良いだろう。

(3131)


カテゴリー: MySQL | コメントをどうぞ

さくらVPSにWindowsを入れている環境でVPNを利用する

 従来、自宅のメインルータがRTX1000でPPTPサーバになれるので、WindowsServer化したさくらVPSからルータにPPTPダイアルアップして、LAN上のホストとしてファイル共有などを利用していた。
 しかし、PPTPはスピードが伸びず、400KB/s程度しか出ないので、管理回線としては使えるが、大きなファイルの転送には不向きだった。
 RTX1000には、他のVPN手段としてIPSecがあるのでこちらに切り替えてみる。
 WindowsServer2003R2のIPSecサポートでは、メインモードにしか対応しないのだが、IPアドレスが変わる環境ではアグレッシブモードの対応が必要なので、VPSにVPNクライアントソフトを導入して、VPSからRTXに接続する形態で利用する。

 今回は無償利用できるShrew Soft VPN Client for Windowsと言うクライアントを利用した。
http://www.shrew.net/software

 WindowsVPS=ShrewSoftVPNClient(192.168.1.2)=>The net=>RTX1000(PPPoE,DHCP,192.168.0.1)=>LAN
netvolante-dnsでダイナミックDNSにアドレスを振っておく
RTXのIPSec関連設定
ip route 192.168.1.0/24 gateway tunnel 2 #192.168.1.0/24のIPへのルーティングはトンネル2を利用する
tunnel select 2 #トンネル2を設定する(1はPPTPに振ってあるので、今回は2)
tunnel name vps1-ipsec #トンネルに名前をつける
ipsec tunnel 1 #トンネル2だけど、IPSecトンネルとしては1番
ipsec sa policy 1 1 esp des-cbc md5-hmac #ESPプロトコルを使い、DES暗号MD5ハッシュを使う
ipsec ike encryption 1 des-cbc #IKE暗号化にDESを使う
ipsec ike keepalive use 1 on #IKEキープアライブを有効にする
ipsec ike local address 1 192.168.0.1 #IKEローカルアドレスを設定する
ipsec ike pfs 1 on #Phase2 PFSを有効にする
ipsec ike pre-shared-key 1 text 共有鍵 #暗号鍵に事前共有鍵を使用する
ipsec ike remote address 1 any #リモートアドレスを任意許可する
ipsec ike remote name 1 認証名 #リモートの識別に認証名をFQDNとして用いる
ipsec auto refresh 1 on #自動更新を有効にする
tunnel enable 2 #トンネル2を有効化する

nat descriptor masquerade static 1 1 192.168.0.1 udp 500 #IPSecで利用するUDP500を通す
nat descriptor masquerade static 1 2 192.168.0.1 esp #ESPプロトコルを通す
ipsec use on #IPSecを有効化する

個人利用でセキュリティはあまり重要ではないので負荷の軽い設定になっている。

ShrewSoft VPN Clientの設定
[General]
Host Name or IP Address:ホスト名.aa0.netvolante.jp(NetvolanteDDNSで指定した)
Port:500
Auto Configuration:Disabled
Address Method:Use a virtual adapter and assigned address
MTU:1380
Address:192.168.1.2
Netmask:255.255.255.0

[Client]
NAT Traversal:Disable
IKE Fragmentation:Disable
Enable Dead Peer Detection:オフ
Enable ISAKMP Failure Notifications:オフ

[Name Resolution]
Enable WINS:オフ
Enable DNS:オフ

[Authentication]
Authentication Method:Mutual PSK
Local Identity-Identification Type:Fully Qualified Domain Name
Local Identity-FQDN String:RTX設定の認証名
Remote Identity-Identification Type:Any
Credentials-Pre Shared Key:RTX設定の共有鍵

[Phase1]
Exchange Type:Aggressive
DH Exchange:group1
Cipher Algorithm:des
Hash Algorithm:md5
Key Life Time limit:86400
Key Lige Data limit:0
Enable Check Point Comaptible Vendor ID:オフ

[Phase2]
Transform Algorithm:esp-des
HMAC Algorithm:md5
PFS Exchange:auto
Compress Algorithm:Disabled
Key Life Time limit:3600
Key Lige Data limit:0

[Policy]
Policy Generation Level:auto
Maintain Persistent Security Associtations:オフ
Obtain Topology Automatically or Tunnel All:オフ(オンにするとデフォルトゲートウェイがこのアダプタになり通常のインターネットアクセスも低速になるので、RTXのLANをリモートネットワークリソースに設定してLANだけこのアダプタをゲートウェイにした)
Remote Network Resource>Add>Type:Include Addresss:192.168.0.0 Netmask:255.255.255.0

 設定してConnectすると、10MbpsのダイアルアップアダプタとしてVPN接続される。
 Windowsファイル共有したディスクでのベンチマークでは、シーケンシャルリード860KB/sで、シーケンシャルライト2.8MB/s出るようになった(遅延の影響でWindowsファイル共有はちょっと遅い)
 VPN接続していればインターネット上ではパケットがすべて暗号化されているので安心。

(1140)


カテゴリー: Windows VPS | タグ: , | コメントをどうぞ