IE9ピン留め
2010年 12月 20日
ssh接続ができなくなった場合の対処法
■現象
serversman@vpsにsubversion-1.6.13をソースから入れていた。
その際にsubversion-1.6.13が参照しているopenssl-develをyumで入れたらssh接続できなくなった。

■原因
openssl-develを入れたことにより
/var/empty/sshdの権限が勝手に変更された。
【変更される前】drwx--x--x 3 root root
【変更された後】drwx-wx--x 3 root root  ← 書き込み権限が入るとダメらしい。



■発生時のサーバーのログ(/var/log/message)
Dec 18 22:51:26 dti-vps-srvXX yum: Installed: keyutils-libs-devel-1.2-1.el5.i386
Dec 18 22:51:26 dti-vps-srvXX yum: Installed: e2fsprogs-devel-1.39-23.el5_5.1.i386
Dec 18 22:51:26 dti-vps-srvXX yum: Installed: zlib-devel-1.2.3-3.i386
Dec 18 22:51:26 dti-vps-srvXX yum: Installed: libsepol-devel-1.15.2-3.el5.i386
Dec 18 22:51:27 dti-vps-srvXX yum: Installed: libselinux-devel-1.33.4-5.5.el5.i386
Dec 18 22:51:27 dti-vps-srvXX yum: Installed: krb5-devel-1.6.1-36.el5_5.6.i386
Dec 18 22:51:29 dti-vps-srvXX yum: Installed: openssl-devel-0.9.8e-12.el5_5.7.i386
Dec 19 14:28:17 dti-vps-srvXX sshd[50441]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:28:20 dti-vps-srvXX sshd[50486]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:28:25 dti-vps-srvXX sshd[50537]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:28:38 dti-vps-srvXX sshd[50653]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:28:50 dti-vps-srvXX sshd[50744]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:32:27 dti-vps-srvXX sshd[58718]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:32:36 dti-vps-srvXX sshd[58811]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:35:11 dti-vps-srvXX sshd[65365]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:44:43 dti-vps-srvXX sshd[19759]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:45:21 dti-vps-srvXX sshd[22117]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:45:28 dti-vps-srvXX sshd[22155]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:45:36 dti-vps-srvXX sshd[22257]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:47:04 dti-vps-srvXX sshd[24465]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 14:48:34 dti-vps-srvXX sshd[26559]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 19 18:20:07 dti-vps-srvXX sshd[3534]: fatal: /var/empty/sshd must be owned by root and not group or world-writable.


■発生時のクライアントのログ
>>ssh hoge@xxx.xxx.xxx.xxx
ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused


■解決法
serversmanのサポートに連絡して
/var/empty/sshdの権限を下記の通り元に戻してもらった。
drwx--x--x 3 root root

/var/empty/sshdの権限が元に戻れば通常通りssh接続できるようになった。

■参考サイト
http://neetup.wordpress.com/2008/08/
http://kajuhome.com/cgi-bin/patio/patio.cgi?mode=view&no=262


# by iamaprogrammer | 2010-12-20 22:57
2010年 11月 27日
Springを使ったcron
最近Struts2.2系,Spring2.5系(とiBATISとFreeMarker)で開発しているんですが、
Springにはorg.springframework.scheduling.quartzパッケージというのがあって、それらを使ったらJavaだけでcron設定からbatch処理を実行できるんです。
これまではbatchのときだけ不慣れなPerlを書く局面があって少々辟易していたんですが、これからはJavaで手軽にbatchが書けます。
#もちろん本エントリのようにSpringなんて使わなくても素のJavaでbatchは書けますが、何故か「batchはPerlで書いて」という場合が多かったんです。

今日早速試してみました。
まずQuartzJobBeanを継承したクラスを作成してexecuteInternalメソッドをOverrideします。
executeInternalメソッドはmain処理を記述するところのようです。

package jp.struts2spring_test.batch;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class BatchTest extends QuartzJobBean {

  @Override
  protected void executeInternal(JobExecutionContext arg0)
    throws JobExecutionException {
    
    Date date = Calendar.getInstance().getTime();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    System.out.println(sdf.format(date) + " -> cron running is success.");
  }
}


applicationContext.xmlは以下な感じに。
テストとして5秒間隔で実行してみました。
見ての通り上記の自分で作成したQuartzJobBeanを継承したクラスをbean登録して、そいつにcron設定して、さらにそれをtriggerとしてbean登録するだけです。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-2.5.xsd">

 <!-- cron -->
 <bean name="cron_BatchTest" class="org.springframework.scheduling.quartz.JobDetailBean">
  <property name="jobClass" value="jp.struts2spring_test.batch.BatchTest" />
 </bean>
 <bean id="cronTrigger_BatchTest" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <property name="jobDetail" ref="cron_BatchTest" />
  <property name="cronExpression" value="0/5 * * * * ?" />
 </bean>
 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
   <list>
    <ref bean="cronTrigger_BatchTest" />
   </list>
  </property>
 </bean>

</beans>


実行結果と動かしたproject構成は以下の画像のとおりです。


このサンプルはコンテキスト(war)にbatchを突っ込んでます。なので軽い処理をcron実行したい場合のサンプルです。
高負荷なユーザーサイトの場合はbacth用のプロジェクト(jar)を別で作成して行うんだと思います。

他にも微妙に違うsimpleTriggerとかいろいろあるみたいですが、普通のcron設定は上記のサンプルで問題なく動きました。
詳細は以下サイトを。
http://static.springsource.org/spring/docs/2.0.x/reference/scheduling.html
http://www.quartz-scheduler.org/
http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html

# by iamaprogrammer | 2010-11-27 00:38
2010年 11月 20日
Eclipse WTPのサーバー設定メモ
最近周りの影響でEclipseのWTPを使ってWebアプリを開発したりtomcatを起動したりしているんですが、それでハマったことのメモ。

プロジェクトエクスプローラーなどで右クリック → 「その他」 → 「Web」 → 「動的Webプロジェクト」でWTPを使う雰囲気のeclipseプロジェクトが新規作成されたところからの話として。

eclipseのj2eeパースペクティブの(WTPの?)「サーバー」ビューからサーバーを起動すると、下記エラーメッセージが表示された。
サーバー ローカル・ホスト の Tomcat v6.0 サーバー は 45 秒内に始動できませんでした。サーバーがより多くの時間を必要とする場合、サーバー・エディターでタイムアウトを大きくしてください。


下記画像のとおり「サーバー」ビューのサーバーをダブルクリックでポートやタイムアウトを時間を設定できるビューが表示されます。そこで時間を変更しても解決しなかった。


で、原因としては、tomcatのserver.xmlのportの設定でした。
基本的にapacheとtomcatをajpで連携さして開発しているので、tomcatのserver.xmlの8080をコメントアウトしていたことが原因でした。下記のように8080をコメントイン(有効)すると解決しました。


なので(上記画像は解決後のキャプチャなので「ポート」の項目に、8005、8080、8009と3つリッスンされている)、上記画像の「ポート」の項目には、8005、8009しか表示されていませんでした。
どうもWTPの?「サーバー」ビュー(機能?)は8080が有効でないとtomcatを起動しない仕様になっているみたいです。。。

ちなみにまだWTPの何がいいのか分かっていません(笑)
mavenで今回の話の「動的Webプロジェクト」の「WebContent/WEB-INF」みたいな違和感のあるプロジェクトを作成してくれるarchetypeがあるどうか知らないし、普通にtomcat起動するのと比べてどんなメリットがあるのかを知らないので。
たぶんSpringとSeasarの違いのように、どっちも機能的にそんなに変わらないんで慣れてるほうでいい。みたいに大した違いは無いんだろうと思っています。
そうでなくWTPが凄いというような発見があればその都度書いていきます。
#ほんとIT業はこんなの多すぎ。w3cはhtmlとかcssだけじゃなくその他開発言語、フレームワーク、IDEレベルでも統一を図ってほしい。




# by iamaprogrammer | 2010-11-20 17:49
2010年 10月 30日
vimプラグインのquickrun.vim
quickrun.vimというのが便利そうなので入れてみた。
http://github.com/thinca/vim-quickrunからthinca-vim-quickrun-v0.4.2-0-g666ef7e.tarをダウンロード&解凍して、
~/.vim/配下に以下な感じに入れると使えました。
.vim/
|-- autoload
|    `-- quickrun.vim
`-- plugin
    |-- quicklaunch.vim
    `-- quickrun.vim


vimのノーマルモード時に¥rで実行されます。


同じようなプラグインを二人の人間が作ってるみたいだけど、どうもthincaさんという人が作ったのを入れておけば機能的にいいらしい。
#それにしてもIT業やってて思うのが、OSも文字コードも開発言語もIDEもエディタもDBもetc.全部1種類に統一されればいいのにということ。Javaのフレームワークだって吐き気がするほどあるし。ここでボヤいてもしょうがないけど。

参考サイト:vimに欠かせない3つのプラグイン
Tags:# # 

# by iamaprogrammer | 2010-10-30 00:40
2010年 10月 24日
m2eclipseでwar作成時のエラー
eclipse3.5でm2eclipseを使用してwarを作成しようと思い、
eclipseプロジェクトを右クリック → 実行 → Maven Package を行うと、eclipseコンソールに下記エラーが表示された。
[ERROR] Error executing Maven.
[ERROR] The specified user settings file does not exist: /Users/ユーザー名/.m2/settings.xml


/Users/ユーザー名/.m2/
に下記内容のとおりの空のsetting.xmlファイルを新規作成で解決。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
</settings>


参考サイト:Flex On Java

# by iamaprogrammer | 2010-10-24 14:33
2010年 10月 23日
macのdjangoのアンインストール
入れっぱなしで使ってないアプリやミドルウェアってたまにあるけど、djangoがそんな感じで入っていたんでアンインストールした。

[me@macbook]:>python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/Library/Python/2.5/site-packages

[me@macbook]:>sudo rm -rf /Library/Python/2.5/site-packages/django/
[me@macbook]:>sudo rm -rf /Library/Python/2.5/site-packages/Django-1.0.2_final-py2.5.egg-info


これでいいらしい。

参考サイト:Django v1.1 documentation
Tags:# 

# by iamaprogrammer | 2010-10-23 23:59
2010年 10月 22日
macのmysqlアンインストール
dmgからインストールしたMySQLのアンインストール
MySQLバージョンによって微妙にMySQLCOMがあったりなかったりらしいです。
参考までのメモです。

rm -rf /usr/local/mysql-5.0.86-osx10.5-x86
rm -rf /Library/StartupItems/MySQLCOM
rm -rf /Library/Receipts/mysql-5.0.86-osx10.5-x86.pkg
rm -rf /Library/Receipts/MySQLStartupItem.pkg
システム環境設定パネルのMySQLを右クリックメニューで取り除く


以上です。

# by iamaprogrammer | 2010-10-22 23:29
2010年 10月 21日
memcachedの検証(JavaAPI)
memcachedの軽い検証をやってみた。
memcached用Java APIが下記のとおり2種類あったので両方試してみた。

①memcached java client
memcachedの開発元であるDanga Interactive社が提供しているAPIらしい。
http://github.com/gwhalin/Memcached-Java-Client/downloads/

②spymemcached 
第三者が公開しているAPI
http://code.google.com/p/spymemcached/

100、1000、10000、50000、100000回のリクエストで単純に検証アプリの実行速度を測ってみたんですが、
memcached java clientを使った場合が2〜3倍速くなってました。
spymemcachedはどういうわけか、memcachedを使わない場合と大差ない結果でした。
ということで本家が公開しているAPIのmemcached java clientを使っとけば間違いないようです。

あと複数台のmemcachedサーバーを用意して使用する場合は下記の初期化コードに接続先を配列で入れるだけで、ランダム?に振り分けてくれるみたいです。
2台のmemcachedサーバーで試してみたらきっちり分散されてました。
#memcached java clientの場合のサンプルコード
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(new String[] {"xxx.xxx.xxx.xxx:11211", "yyy.yyy.yyy.yyy:11212"});
pool.initialize();
Tags:# 

# by iamaprogrammer | 2010-10-21 21:48
2010年 09月 23日
Operaのウィジェット開発メモ
Operaのウィジェット開発の勉強は今後いろいろ役に立ちそう。HTML5やCSS3やJavaScriptの勉強になるし。そう思って今日簡単なサンプルの作成から初めて、例外なくハマったことのメモ。

Opera ウィジェットの作り方というサイトを参考に作成したところ、自分の環境ではどうもOperaがウィジェットを認識してくれない。(Operaに*.wgtファイルをドラッグしても認識されない)

なので、例外なくITに非常にうんざりしながら、本家Operaのデベロッパーサイト
を読んでると、
Select both the files you have so far, and compress them into a .zip file
とあったのでピンと来て試したら解決しました。

何のことはないzipに圧縮する際に、ウィジェットを構成する全ファイルを選択して圧縮すればいいだけでした。
いつもの癖で、hogeディレクトリを作成して、その中にindex.html,config.xmlを放り込んで、zipに固めて*.wgtに名称変更という流れでやったのがよろしくなかったようです。
# それにしてもなんでこれでダメなんでしょ?ディレクトリ構成変わるわけじゃないのに。




# by iamaprogrammer | 2010-09-23 00:10
2010年 06月 23日
ドメインのみ違う同じWebアプリの一方にだけBASIC認証を有効にするhttpd-vhosts.confの設定例
ドメインのみ違う同じWebアプリの一方にだけBASIC認証をかける必要があって、少々ハマったのでメモ。
# 環境はCentOS5.4,Apache2.2,Tomcat6.0,JDK1.6

下記例のhttpd-vhosts.confに、VirtualHostディレクティブが二つあります。
一つがaaaaa.jp、もう一つがbbbbb.jp。設定内容はBASIC認証設定(オレンジの箇所)以外同じです。
BASIC認証を有効にしたいVirtualHostのProxyディレクティブに、普通にBASIC認証設定を書いてやればOKでした。

<VirtualHost *:80>
   ServerName aaaaa.jp
   DocumentRoot /usr/local/products/aaaaa/htdocs/
   ErrorLog logs/aaaaa.jp-error_log
   CustomLog logs/aaaaa.jp-access_log combined env=!no_log
   SetEnvIf Request_URI "\.(gif|jpg|png|JPG|ico|css|js|swf|txt)$" no_log

   <Location />
      Order Allow,Deny
      Allow from all
   </Location>

   ProxyPass /contents !
   <Proxy balancer://ajp-balancer>
      Order Allow,Deny
      Allow from all
      BalancerMember ajp://localhost:8009 loadfactor=100 keepalive=On
   </Proxy>

   ProxyPass / balancer://ajp-balancer/aaaaa/ nofailover=On
   ProxyPassReverseCookiePath /aaaaa /
</VirtualHost>

<VirtualHost *:80>
   ServerName bbbbb.jp
   DocumentRoot /usr/local/products/aaaaa/htdocs/
   ErrorLog logs/bbbbb.jp-error_log
   CustomLog logs/bbbbb.jp-access_log combined env=!no_log
   SetEnvIf Request_URI "\.(gif|jpg|png|JPG|ico|css|js|swf|txt)$" no_log

   <Location />
      Order Allow,Deny
      Allow from all
   </Location>

   ProxyPass /contents !
   <Proxy balancer://ajp-balancer>
      Order Allow,Deny
      Allow from all

      # BASIC AUTHENTICATION
      AuthUserFile /usr/local/apache2.2/conf/extra/.htpasswd
      AuthGroupFile /dev/null
      AuthName "Input ID and Password."
      AuthType Basic
      require valid-user
      <Files ~ "^.(htpasswd|htaccess)$">
         deny from all
      </Files>


      BalancerMember ajp://localhost:8009 loadfactor=100 keepalive=On
   </Proxy>

   ProxyPass / balancer://ajp-balancer/aaaaa/ nofailover=On
   ProxyPassReverseCookiePath /aaaaa /
</VirtualHost>

# by iamaprogrammer | 2010-06-23 23:14


< 前のページ      次のページ >