2012年8月28日火曜日

Google用にサイトマップ(sitemap.xml)を作成する


サイトのページ数が1000件未満だと

http://www.sitemapxml.jp/

のようなオンラインの無料サービスを使うと楽なんだけど、今回は1000件以上なので、

http://gsitecrawler.com/

にあるGSiteCrawlerを使うことにしました。
約45000件あり、作成に丸1日かかりました。


2012年8月27日月曜日

redmineの「メールによるチケットの登録」でハマったのでメモしておく


redmine2.0.3をインストール後、

http://redmine.jp/guide/RedmineReceivingEmails/

の「メールサーバからメールを転送」に従い、Postfixのaliasに以下のように設定しました。

redmine: "|/var/lib/redmine/extra/mail_handler/rdm-mailhandler.rb -u http://redmine.example.co.jp/ -k LHdYz6oQ1PH3fDGVgtnt -p neomaster -t bug -o project,tracker,priority"

また、redmineの設定項目「受信メール」では、「受信メール用のWebサービスを有効にする」にチェックし、「APIキー」には「LHdYz6oQ1PH3fDGVgtnt」を登録しています。

この状態で、メール経由でチケットの登録しようとすると

<redmine@example.co.jp>: permission denied. Command output: Request was denied
    by your Redmine server. Make sure that 'WS for incoming emails' is enabled
    in application settings and that you provided the correct API key.

というエラーメールが帰ってきます。

http://redmine.jp/faq/issue/mail-handler-errors/

を見ても、「受信メール」のことしか書いていないので、原因がわからず。
2,3時間設定を見なおしたり、redmineのソースを見たりして悩んだ末、ふと、先日設定したアクセス制限が原因かもと思い、Locationディレクティブに

allow from redmine設置サーバのIP

を設定したところ、無事解決しました。

なんだか、とても疲れました。(^^;)

2012年8月22日水曜日

ソフトバンクのガラケーへのデコレメールでハマる。


サーバのプログラムから、各種キャリアのケータイにHTMLメール(デコメール、デコレメールなど)を送信していたのだが、1ヶ月ほど前から、ソフトバンクのデコレメールだけ画像が表示されなくなったという報告を頂いた。

http://creation.mb.softbank.jp/mc/tech/doc/A-089-011-Mail_ContentDevelopmentGuide_1.0.1.pdf

を見ながら、文字コードやエンコーディング、メールの構成、メールのサイズ、インラインオブジェクトの数などいろいろとチェックしたのだが問題なし。

数時間悩み、なにげに Content-ID の長さを短くしてみたところ、あっけなく問題は解消してしまった。
うーーーん。以前までは問題なかったし、PDFにも長さについての記述はなかったのになぁ。
参りました。

redmineとpassengerでアクセス制限にハマる

redmineとpassengerを導入したのだが、アクセス制限でハマったので記録しておく。

普段、apacheでのアクセス制限は


<Directory /var/lib/redmine>
Order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Directory>


のような感じで書くのだが、mod_passengerが優先されるようで、この設定ではうまくいかない。

Directoryディレクティブの代わりにLocationディレクティブを使って


<Location /redmine>
Order Deny,Allow
Deny from all
allow from xxx.xxx.xxx.xxx
</Location>

のようにするとうまくいきました。

なお、「/redmine」はredmineへのURLとなります。
なので、この場合は、http://xxx.xxx.xxx/redmineというURLの場合です。


2012年8月17日金曜日

centos6.3にredmine2.0をインストールする

http://blog.redmine.jp/articles/redmine-2_0-installation_centos/
を参考に、centos6.3にredmine2.0をインストールする。

●各種ツールをインストールする。


・開発ツール(Cコンパイラ等)
 # yum groupinstall "Development Tools"

・RubyとPassengerのビルドに必要なヘッダファイルなど
 # yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel

・MySQLとヘッダファイル
 # yum install mysql-server mysql-devel

・Apacheとヘッダファイル
 # yum install httpd httpd-devel

・ImageMagickとヘッダファイル
 # yum install ImageMagick ImageMagick-devel

のインストールを行う。

rubyについては、まずrubyのバージョン管理ツールrvmをインストールし、rvm経由でrubyをインストールする。

 # bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

でrvmのインストールが完了すると、

 # rvm list known

でインストールできるrubyのバージョンを確認できる。

 # rvm install 1.9.3

で、ruby 1.9.3をインストールする。
他のバージョンのrubyを利用していない場合は、ruby 1.9.3が利用できる状態になっている。
他のバージョンを利用している場合は、

 # rvm use 1.9.3

で、切り替える必要がある。
最後にgemを一括インストールするためのツール、bundlerをインストールする。

 # gem install bundler --no-rdoc --no-ri

●redmineで利用するMySQLの設定をする。

デフォルトキャラクタセットをutf8に設定するために、my.confに以下を追加する。

[mysql]
default-character-set = utf8
[mysqld]
default-character-set = utf8


次に、redmine用データベースとユーザーの作成を行う。

# mysql -uroot -pxxxx
mysql> create database db_redmine default character set utf8;
mysql> grant all on db_redmine.* to user_redmine identified by '********';
mysql> flush privileges;
mysql> exit;

●redmineのインストール。

redmineのインストール

からtar.gzを取得する。
解凍後、/var/lib/redmineにredmineを設置する。

redmineの設定を行う

データベースの接続設定として、
/var/lib/redmine/config/database.yml

production:
  adapter: mysql2
  database: db_redmine
  host: localhost
  username: user_redmine
  password: ********
  encoding: utf8

を保存する。

メールサーバへの接続設定として、
/var/lib/redmine/config/configuration.yml

production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "localhost"
      port: 25
      domain: 'example.co.jp'

を保存する。

redmineに必要なgemパッケージをインストールする

 # bundle install --without development test postgresql sqlite

セッションデータ暗号化用鍵の生成とテーブル作成を行う

コマンド実行は/var/lib/redmine/で行う。

 # rake generate_secret_token
 # RAILS_ENV=production rake db:migrate

●apacheの設定

Passengerのインストール

・Passengerのインストール
 # gem install passenger --no-rdoc --no-ri

・PassengerのApache用モジュールのインストール
 # passenger-install-apache2-module

インストールが完了すると

   LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.15/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.15
   PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby

のようなのが表示されるので控えておく。

Passengerの設定

/etc/httpd/conf.d/passenger.confに

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.15/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.15
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby

Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerUseGlobalQueue on
PassengerHighPerformance on
PassengerStatThrottleRate 10
RailsSpawnMethod smart
RailsAppSpawnerIdleTime 86400
RailsFrameworkSpawnerIdleTime 0

を保存する。

ファイル所有権の変更

apache上のPassengerでredmineを実行するために所有権を変更しておく。
 # chown -R apache:apache /var/lib/redmine

バーチャルホストの設定

バーチャルホストでredmineを実行できるようにhttpd.confに

 
      ServerName redmine.example.co.jp
      DocumentRoot "/var/lib/redmine/public"
     
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
     
   

のようなのを追加しておく。


以上で、redmineのインストールは終了です。
あとは、apacheを再起動して、redmine.example.co.jpにアクセスできればOKです。


2012年8月16日木曜日

WebminのSSL化をまとめておく。


WebminのSSL化の手順をまとめておきます。

手順としては、

1)PerlのNet::SSLeayをインストール
2)WebminでSSLの利用設定

となります。

1)
PerlのNet::SSLeayをインストールについて。
yumでモジュールをインストールします。

yum -y install perl-Net-SSLeay

2)
WebminでSSLの利用設定について。

Webmin画面左カラムの「Webmin」→「Webmin 設定」と進む。
Webminの設定項目の一覧がでるので、「SSL 暗号化」を選ぶ。

「可能であればSSLを使用可能にしますか?」で「はい」を選ぶ、「保存」ボタンを押す。
保存後、すぐに設定が効いてSSL接続以外をはじくようになるので、「Error - Bad Request」の
エラーメッセージが表示されます。

これで設定は完了ですので、今後は、
https://ドメイン名:10000
でアクセスしなおします。

ただし、認証については、オレオレ認証なので、セキュリティの警告画面が出ます。
が、気にせず進みましょう。

エクステリアの戸棚

お盆休みにエクステリアの戸棚を作成。
扉の作成に手間取りました。

2012年8月9日木曜日

花壇

ミモザの花壇を作りました。
レンガ40個で出来上がり(^o^)

2012年8月7日火曜日

Apacheのdigest認証でハマった

Apacheでユーザー認証を行うには(Digest認証編)
を参考に


    AuthType Digest
    AuthName "Secret Zone"
    AuthDigestDomain /member/
    AuthDigestFile /etc/httpd/.htdigest
    Require user secret

のような感じで設定するが、


Invalid command 'AuthDigestFile', perhaps misspelled or defined by a module not included in the server configuration


というエラーがでる。

いろいろ調べた結果、AuthDigestFile が AuthUserFile に変わったようだったので、
修正すると改善しました。


なお、したかったことは、php経由でdigest認証を通過すること。
php自体は以下のようなのでOKです。

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$str = curl_exec($ch);
curl_close($ch);
?>

2012年8月6日月曜日

Dovecotの再起動

Dovecotを再起動するには、


/etc/rc.d/init.d/dovecot restart

の他に

/bin/kill -HUP `cat /var/run/dovecot/master.pid 2>/dev/null`

というのもある。
ただし、後者の場合は、ログファイルが変わらないので注意が必要。


2012年8月3日金曜日

バーベキューコンロ用のテーブル


McAfee SiteAdvisorで「閲覧は危険を伴う可能性があります」と出る

勤めてる会社が管理する、サイト「メール配信(月500円~)・ステップメール NEO( http://www.mail-neo.com/ ) 」が、McAfee SiteAdvisorで「閲覧は危険を伴う可能性があります」と出るという報告を利用者から頂いた。


で原因を調べたんだけど、詳しいことが買いてないので、何もわからず。

ちょっと不安になったので、念のため、

http://safeweb.norton.com/
http://www.gred.jp/
http://www.unmaskparasites.com/
http://www.aguse.jp/

のような他のチェックサイトでも調べてみたけど、すべて安全と出ます。

McAfee SiteAdvisorのサイトを調べると、http://www.siteadvisor.com/webmasters/index.html
「サイト評価に対するフィードバックを行う方法」という項目があったので、内容に従い、
メールで調査と依頼しました。

翌日、McAfeeから以下のようなメールを頂きました。

Hello,

We have received your request. It will be reviewed and processed by our team in the order it was received. Any adjustment made based on the review will be published in http://www.siteadvisor.com.

Sincerely,


Kyoko
McAfee GTI Customer Response Team - North America

とりあえず、処理を進めてくれる模様。
早く改善されるとよいんだけど。


追記。
その後、3日ほどしてから
https://www.siteadvisor.com/sites/www.mail-neo.com
を再度チェックしてみると、問題なしとなっていました。

無事、解決できてよかった。(^^)


エクステリアの水栓

レンガで作ってみました。
カエルとフクロウの蛇口がお気に入り。

2012年8月1日水曜日

CentOS 6.2 でpostfixにopendkimを導入する。


CentOS 6.2 でpostfixにopendkimを導入する。


1)
epelにあるopendkimを利用するので、epelが使えない場合は
epelを使えるようにする。

具体的には、CentOS 6.2で64bitなら以下のようなコマンドを発行する。

wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-5.noarch.rpm
rpm -ivh epel-release-6-5.noarch.rpm

2)
yumを使ってopendkimを導入する。

yum -y install opendkim

3)
opendkim用のプライベートキーを用意する。
例えば、ドメインが hoge.co.jp とすると以下のようなコマンドを発行する。

mkdir /etc/opendkim/keys/hoge.co.jp
/usr/bin/opendkim-genkey -D /etc/opendkim/keys/hoge.co.jp/ -d hoge.co.jp -s default
chown -R opendkim:opendkim /etc/opendkim/keys
mv /etc/opendkim/keys/hoge.co.jp/default.private /etc/opendkim/keys/hoge.co.jp/default


4)
opendkimまわりの設定ファイルを修正する。
関係するのは、

/etc/opendkim.conf
/etc/opendkim/KeyTable
/etc/opendkim/TrustedHosts
/etc/opendkim/SigningTable

の4つのファイル。
/etc/opendkim.confの変更内容は以下のとおり。

Mode sv
#KeyFile /etc/opendkim/keys/default.private
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

/etc/opendkim/KeyTableの変更内容は以下のとおり。

default._domainkey.hoge.co.jp hoge.co.jp:default:/etc/opendkim/keys/hoge.co.jp/default

/etc/opendkim/TrustedHostsの変更内容は以下のとおり。

127.0.0.1
localhost
mail.hoge.co.jp
hoge.co.jp

/etc/opendkim/SigningTableの変更内容は以下のとおり。

hoge.co.jp default._domainkey.hoge.co.jp

5)
Postfixの設定も変更する。
/etc/postfix/main.cfに以下を追記する。

#opendkim
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

6)
DNSの設定も変更する。

cat /etc/opendkim/keys/hoge.co.jp/default.txt

で表示される内容をDNSサーバに設定する。
可能なら、以下のようなDKIMポリシーも設定する。

_adsp._domainkey.example.com    IN    TXT    "dkim=unknown"

7)
opendkimの開始とpostfixの再起動。

/etc/rc.d/init.d/opendkim start
/etc/rc.d/init.d/postfix restart


これで終わりです。
ついでに、上記の処理をシェルスクリプトにしてみました。
良かったら自己責任で使ってください。(^^;)


#!/bin/sh

#DNS
#DNS=hoge.co.jp

echo "----> Start DKIM setting for ${DNS}"

####
# install epel
####
if [ ! -e /etc/yum.repos.d/epel.repo ]
then
 echo '----> Install epel'
 OSFILE=`ls /etc -F | grep "release$\|version$"`
 OS=`cat /etc/${OSFILE}`
 MACHINE=`uname -m`

 if [[ "$OS" =~ "CentOS release 6" ]]; then
  OSVER="6"
  RPM="epel-release-6-5.noarch.rpm"
 else
  echo '---->fail'
  exit;
 fi

 if [[ "$MACHINE" =~ "x86_64" ]]; then
  MACHINEVER="x86_64"
 else
  MACHINEVER="i386"
 fi

 EPELURL="http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/${OSVER}/${MACHINEVER}/${RPM}"
 wget $EPELURL
 rpm -ivh $RPM
fi

###
# install opendkim
###
echo '----> Install opendkim'
yum -y install opendkim

if [ ! -e /etc/opendkim/keys/${DNS}/default ]
then
 mkdir /etc/opendkim/keys/${DNS}
 /usr/bin/opendkim-genkey -D /etc/opendkim/keys/${DNS}/ -d ${DNS} -s default
 chown -R opendkim:opendkim /etc/opendkim/keys
 mv /etc/opendkim/keys/${DNS}/default.private /etc/opendkim/keys/${DNS}/default
fi

DKIM_CONF=/etc/opendkim.conf
KEY_TABLE=/etc/opendkim/KeyTable
TRUSTED_HOSTS=/etc/opendkim/TrustedHosts
SIGNING_TABLE=/etc/opendkim/SigningTable

POSTFIX_CONF=/etc/postfix/main.cf

echo '----> Eidt opendkim.conf'
if [ -e $DKIM_CONF ]
then
 if [ -e ${DKIM_CONF}.org ]
 then
  cp ${DKIM_CONF}.org ${DKIM_CONF}
 else
  cp ${DKIM_CONF} ${DKIM_CONF}.org
 fi

 sed -e 's/^Mode.*/Mode sv/' \
 -e 's/^KeyFile/#KeyFile/' \
 -e 's/^#KeyTable/KeyTable/' \
 -e 's/^#SigningTable/SigningTable/' \
 -e 's/^#ExternalIgnoreList/ExternalIgnoreList/' \
 -e 's/^#InternalHosts/InternalHosts/' \
 ${DKIM_CONF} > ${DKIM_CONF}.tmp
 cp ${DKIM_CONF}.tmp ${DKIM_CONF}
 rm -f ${DKIM_CONF}.tmp

 echo '----> Eidt KeyTable'
 if [ -e ${KEY_TABLE}.org ]
 then
  cp ${KEY_TABLE}.org ${KEY_TABLE}
 else
  cp ${KEY_TABLE} ${KEY_TABLE}.org
 fi
 echo "default._domainkey.${DNS} ${DNS}:default:/etc/opendkim/keys/${DNS}/default" >> ${KEY_TABLE}

 echo '----> Eidt TrustedHosts'
 if [ -e ${TRUSTED_HOSTS}.org ]
 then
  cp ${TRUSTED_HOSTS}.org ${TRUSTED_HOSTS}
 else
  cp ${TRUSTED_HOSTS} ${TRUSTED_HOSTS}.org
 fi
 echo "localhost" >> ${TRUSTED_HOSTS}
 echo "mail.${DNS}" >> ${TRUSTED_HOSTS}
 echo "${DNS}" >> ${TRUSTED_HOSTS}

 echo '----> Eidt SigningTable'
 if [ -e ${SIGNING_TABLE}.org ]
 then
  cp ${SIGNING_TABLE}.org ${SIGNING_TABLE}
 else
  cp ${SIGNING_TABLE} ${SIGNING_TABLE}.org
 fi
 echo "${DNS} default._domainkey.${DNS}" >> ${SIGNING_TABLE}

 echo '----> Eidt Postfix main.cf'
 GRP=`cat ${POSTFIX_CONF}|grep 'smtpd_milters'`
 if [ -z $GRP ]
 then
  echo "" >> ${POSTFIX_CONF}
  echo "#opendkim" >> ${POSTFIX_CONF}
  echo "smtpd_milters = inet:127.0.0.1:8891" >> ${POSTFIX_CONF}
  echo 'non_smtpd_milters = $smtpd_milters' >> ${POSTFIX_CONF}
  echo 'milter_default_action = accept' >> ${POSTFIX_CONF}
 fi

 echo '----> (re)start daemons'
 if [ -e /etc/rc.d/init.d/opendkim ]
 then
  restatus=`/etc/rc.d/init.d/opendkim status`
  if [[ "$restatus" =~ stopped ]]; then
   /etc/rc.d/init.d/opendkim start
  else
   /etc/rc.d/init.d/opendkim restart
  fi
 else
  echo '/etc/rc.d/init.d/opendkim not exists'
  exit;
 fi
 /sbin/chkconfig opendkim on

 if [ -e /etc/rc.d/init.d/postfix ]
 then
  restatus=`/etc/rc.d/init.d/postfix status`
  if [[ "$restatus" =~ stopped ]]; then
   /etc/rc.d/init.d/postfix start
  else
   /etc/rc.d/init.d/postfix restart
  fi
 else
  echo '/etc/rc.d/init.d/postfix not exists'
  exit;
 fi

 echo '#########################################'
 echo 'INSTALL IS OVER'
 echo '#########################################'
 echo ''
 echo 'Change DNS'
 cat /etc/opendkim/keys/${DNS}/default.txt
 echo "_adsp._domainkey"' IN TXT "dkim=unknown"'
else
 echo "----> FAIL: ${DKIM_CONF} is not exists!"
 exit;
fi

レゴ

2012年6月25日月曜日

gmailのバックアップ


windows7でgmailをバックアップしたい。
が、Thunderbirdなどのメーラを使って手動で同期するなど、手間のかかる
方法は一切使いたくない方のために。

1)
gmailの設定でPOPにアクセスできるようにする。

2)
cygwinをインストールする。
インストールの際に、Mailの項目のfetchmailとprocmailにも
チェックしておく。

3)
ログインユーザ名がnkdの場合、
C:\cygwin\home\nkd\
というディレクトリができている。
ここにメール関係の設定ファイルを置く。

まず、fetchmailの設定。
fetchmailはgmailからメールを取り出す処理を行う。

.fetchmailrcというファイルを作成し、以下のように記述する。

----
poll pop.gmail.com
protocol pop3
username "user@gmail.com" password "mypass"
keep ssl
mda "/usr/bin/procmail -m /home/nkd/.procmailrc"
----

※user@gmail.comはgmailのメールアドレス。
※mypassはgmailのログインパスワード。
※nkdの部分は自分のログインユーザ名とする。

次に、procmailの設定。
procmailは取り出したメールを振り分けて保存する処理を
行う。fetchmailだけだと1つのファイルにメールが書き込まれて
いくので、使い勝手が悪いのでメールごとに1つのファイルに
書き込むようにする。

.prcomailrcというファイルを作成し、以下のように記述する。

----
MAILDIR=/home/nkd/
VERBOSE=on

:0
Mail/
----

※nkdの部分は自分のログインユーザ名とする。

4)
動作の確認。
cygwinのアイコンにアクセスし、

fetchmai -vk

と入力してみる。いろいろとログが出力されるので、ログを確認し
メールを取り込めているか確認する。
なお、ちゃんと取り込めている場合、
C:\cygwin\home\nkd\Mail\new
以下にメールごとのファイルが作成されている。

5)
最後に、windowsのタスクスケジューラを使って定期的にgmailに
アクセスするようにする。

ただし、

fetchmai -vk

を実行するだけのバッチファイルを登録すると、処理ごとに
ウィンドウが表示されるので煩わしいので、VBSファイルを利用して
ウィンドウを非表示とする。

作成するのは、gmailbak.batとgmailbak.vbsの2つのファイル。
ともにC:\cygwin\home\nkd\以下に作成する。

gmailbak.batの内容は以下のとおり。

----
c:/cygwin/bin/bash.exe --login -i -c "fetchmail -k;
----

gmailbak.vbsの内容は以下のとおり。

----
Set objWSHShell = CreateObject("WScript.Shell")
objWSHShell.Run "cmd.exe /c C:\cygwin\home\nkd\gmailbak.bat", 7
----

※nkdの部分は自分のログインユーザ名とする。

タスクスケジューラには、定期的にgmailbak.vbsを実行するように
設定すれば完了。