晴天
Canon EOS Kiss X2 EF-S18-55mm f3.5-5.6 IS ( F9 15秒 ISO100 )
久々に夜景を撮影。一眼レフの性能に頼るとコンパクトデジカメのそれよりは遙かに美しい画像を得ることができるけれども、撮影技術がないと夜景を撮ることはできないのだなぁと痛感。無限遠ってどうやるのでしょ。今年はもう少し綺麗な写真を撮れるようになりたいものです。
« 2009年01月 | メイン | 2009年03月 »
Canon EOS Kiss X2 EF-S18-55mm f3.5-5.6 IS ( F9 15秒 ISO100 )
久々に夜景を撮影。一眼レフの性能に頼るとコンパクトデジカメのそれよりは遙かに美しい画像を得ることができるけれども、撮影技術がないと夜景を撮ることはできないのだなぁと痛感。無限遠ってどうやるのでしょ。今年はもう少し綺麗な写真を撮れるようになりたいものです。
Canon EOS Kiss X2 EF-S18-55mm f3.5-5.6 IS ( F3.5 1/20秒 ISO800 )
ここのレシピ通りにビーフシチューを作ってみました。煮込むこと合計三時間。うまい。
ログをローテートしたくなった。
# portinstall logrotate # cd /usr/local/etc # cp logrotate.conf.sample logrotate.conf # mkdir logrotate.d
インストール
# vim /usr/local/etc/logrotate.d/blog.perl.tv /var/log/httpd-blog.perl.tv*.log { monthly # daily, weekly, monthly から選択 missingok rotate 12 # ログをローテートする回数(monthlyで12回なので、1年分) compress # ログを圧縮する。しない場合は、nocompress delaycompress # 次のローテーションタイミングで圧縮する ifempty # ファイルが空でもローテートする。しない場合はnotifempty create 660 root wheel sharedscripts postrotate killall -HUP httpd endscript }
設定ファイルの内容は上記。これが全て。
# /usr/local/sbin/logrotate -d /usr/local/etc/logrotate.d/blog.perl.tv reading config file /usr/local/etc/logrotate.d/blog.perl.tv reading config info for /var/log/httpd-blog.perl.tv*.log Handling 1 logs rotating pattern: /var/log/httpd-blog.perl.tv*.log monthly (12 rotations) empty log files are rotated, old logs are removed considering log /var/log/httpd-blog.perl.tv-access.log log does not need rotating considering log /var/log/httpd-blog.perl.tv-error.log log does not need rotating not running shared postrotate script, since no logs were rotated
-dでテスト。実行はされない。
# vim /var/log/logrotate.status (もしくは/var/run/logrotate.status)
logrotate state -- version 2
"/var/log/httpd-blog.perl.tv-access.log" 2009-2-11←ここの日付を変える
"/var/log/httpd-blog.perl.tv-error.log" 2009-2-11
「log does not need rotating」と言われたら、上記ファイルの日付を変更すると実行できます。初回は実行されないみたい。
/usr/local/sbin/logrotate -v /usr/local/etc/logrotate.d/blog.perl.tv
実行。「-v」は詳細表示。-vを抜いてこれをcronに入れればOK。
logrotateは、単純に古いファイルをmoveし、新しいファイルを作成し、過去ファイルを圧縮するだけの機能を持つ。ファイルの中身の日付は見てくれない。
参考
http://ameblo.jp/itboy/entry-10027962914.html
http://itbtech.itboost.co.jp/inst/inst_25.php
apacheログを正規表現で切り分けてDBに格納して解析結果を表示・・・とか考えるだけでうんざりしてきたので、割り切ってmod_log_sqlをいれてみた。環境はFreeBSD6.0 + Apache2.2.0。
# cd /usr/ports/www/mod_log_sql2 # make install # vim /usr/local/etc/apache22/httpd.conf LoadModule log_sql_module libexec/apache22/mod_log_sql.so LoadModule log_sql_mysql_module libexec/apache22/mod_log_sql_mysql.so # apachectl configtest # apachectl restart
インストールして
# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 80635 to server version: 5.0.51a-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE DATABASE apachelogs; Query OK, 1 row affected (0.04 sec) mysql> GRANT INSERT,CREATE ON apachelogs.* TO loguser@localhost IDENTIFIED BY 'xxxxxx'; Query OK, 0 rows affected (0.07 sec) mysql> quit
データベースとユーザを作って
# vim /usr/local/etc/apache22/Includes/httpd.conf LogSQLLoginInfo mysql://loguser:xxxxxx@localhost/apachelogs LogSQLCreateTables on LogSQLDBParam socketfile /tmp/mysql.sock LogSQLTransferLogTable access_log
confに書く。VirtualHostディレクティブ単位で記述可能。
これだけでログ1行が1レコードとしてテーブルに格納されるようになります。滝のように流れるmysql.log。便利そうだけれども、これ、実用的なんだろうか・・・・。
参照
http://www.outoforder.cc/projects/apache/mod_log_sql/docs-2.0/
http://www.freewheelburning.com/linux/mod_log_sql.html
http://naoya.dyndns.org/~naoya/mt/archives/001042.html
つまらないことだけどちょっとはまったので覚え書き。
MySQLで外部ホストからの接続を許可する場合、「localhost」用の権限と「外部用」の権限の二種類をGRANTで制限する必要がある。
# mysql -u root -p mysql> GRANT ALL PRIVILEGES ON *.* TO testuser@'%' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO testuser@localhost IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> use mysql; Database changed mysql> select host,user from user; +--------------+----------+ | host | user | +--------------+----------+ | % | testuser | | localhost | testuser | +--------------+----------+ 8 rows in set (0.00 sec)
あとはmy.cnfにbind-addressの記述があった場合には コメントアウトしておくこと。
mysql> set password for testuser@localhost=password('xxxxxxxx'); Query OK, 0 rows affected (0.00 sec) mysql> set password for testuser@'%'=password('xxxxxxxx'); Query OK, 0 rows affected (0.00 sec)
パスワードの変更はこんな感じ。
参考
http://dev.mysql.com/doc/refman/5.1/ja/adding-users.html
http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html
間違ったGRANT文を正しいと思いこんで、手で打ち込んでいたのが原因でした。あうち。
そもそも何で/varなの?
MySQL5.0.41 / FreeBSD 6.2
# /usr/local/etc/rc.d/mysql-server stop # cd /var/db # cp -Rp mysql mysql.20090215 # mv mysql /usr/local/ # vim /etc/rc.conf mysql_dbdir="/usr/local/mysql" # vim /usr/local/mysql/my.cnf [mysqld] datadir = /usr/local/mysql # /usr/local/etc/rc.d/mysql-server start
もっと大変なことなのかと思いこんでいました。
参考
http://katsubemakito.net/cgiperl/database/mysql/post-49.html
TT内でsubstrを使う方法。
[% hoge.substr(2, 4) %]
こんなかんじ。
[% FOREACH item IN list %] [% item.url.substr(0, 80) | html %][% IF item.url.length > 80 %]...[% END %] [% END %]
実際にはこんな感じに使いました。ここではlengthを使って一定以上の長さのURLの末尾を「...」に変換しています。ついでにhtmlフィルタでタグをエスケープ。
参考
http://template-toolkit.org/docs/manual/VMethods.html
http://d.hatena.ne.jp/studio-m/20080118/1200649418
http://www.aimix.jp/cgi/accmozisrk.html
SuExecを使っているとSetEnvディレクティブが使えないため、環境変数を自由に設定することができません。ぐーぐる先生に聞いたところ「HTTP_」で始まる環境変数であれば自由に使えるようでした。VirtualHostの中に書けばドメイン毎に異なる環境変数を設定することができる、と。
環境はApache 1.3.37。
<VirtualHost example.com> SetEnv HTTP_X_TESTENV 123456789 </VirtualHost>
こんな感じ。
SuExec下ではSetEnvで使える環境変数が制限されるようです。使用可能な環境変数のリストは以下。
# less /usr/ports/www/apache13/work/apache_1.3.37/src/support/suexec.c char *safe_env_lst[] = { /* variable name starts with */ "HTTP_", /* variable name is */ "AUTH_TYPE=", "CONTENT_LENGTH=", "CONTENT_TYPE=", "DATE_GMT=", "DATE_LOCAL=", "DOCUMENT_NAME=", "DOCUMENT_PATH_INFO=", "DOCUMENT_ROOT=", "DOCUMENT_URI=", "FILEPATH_INFO=", "GATEWAY_INTERFACE=", "LAST_MODIFIED=", "PATH_INFO=", "PATH_TRANSLATED=", "QUERY_STRING=", "QUERY_STRING_UNESCAPED=", "REMOTE_ADDR=", "REMOTE_HOST=", "REMOTE_IDENT=", "REMOTE_PORT=", "REMOTE_USER=", "REDIRECT_QUERY_STRING=", "REDIRECT_STATUS=", "REDIRECT_URL=", "REQUEST_METHOD=", "REQUEST_URI=", "SCRIPT_FILENAME=", "SCRIPT_NAME=", "SCRIPT_URI=", "SCRIPT_URL=", "SERVER_ADMIN=", "SERVER_NAME=", "SERVER_ADDR=", "SERVER_PORT=", "SERVER_PROTOCOL=", "SERVER_SOFTWARE=", "UNIQUE_ID=", "USER_NAME=", "TZ=", NULL };
今ひとつどのキーに割り当ててもしっくりこなかったExposeを、使うことのないcaps lockに割り当てることができました。