|
|
|
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
けぼりんの日記 [全48件]
tomcatのcatalina.outに java.util.zip.ZipException: Too many open files というエラーがでていた。 なんだろう? 開けるファイル数の制限に引っ掛かっているらしい。 tomcatの起動ユーザで ulimit -n 1024 1024ファイルしか開けないらしい。 ulimit -n 4096 を実行して4096開けるようにしよう。 root /etc/security/limits.conf を編集して username hard nofile 4096 usernameは、tomcatの起動ユーザ tomcatの起動ユーザになって ulimit -n 4096 あれ?エラーになっちゃう。 また、rootになって /etc/pam.d/login に session required pam_limits.so を追加した。 tomcatの起動ユーザでログインしなおして、 ulimit -n 4096 うまくいきました。 うーん。根本的な原因が解決していないようだけど、 とりあえず様子を見ることにしよう。 Last updated 2011.07.21 11:49:04
とあるjavaプログラムを作りました。 (j2sdk1.4.2_12 OS:Linux) とあるサーバ(以下、接続サーバ)へ、HttpURLConnectionで接続するだけ。 ただし、SSL。 ある日突然、 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found がでるようになった。 調べてみると、接続サーバのSSLを変えたそうだ。 SECOMのセコムパスポートfor Webから セコムパスポートfor Web SR2.0へ。 いろいろ調べた結果、どうやら、javaプログラム側のルート 証明書が足らないようだ。 で、その設定 1.SECOMのセコムパスポートfor Webのルート認証局は、 Security Communication Root CA1なので、そのルート証明書を入手する。 セコムのHPを探したが、まったく解らず、セコムに電話して聞きました。 http://www.secomtrust.net/service/ninsyo/neforwebsr/9-sr20.html のページの 「注意事項 IBM HTTP Server 6.0.2以上 Security Communication Root CA1証明書(ルートCA証明書)」 にあった。 http://www.secomtrust.net/service/ninsyo/cer/scrootca1.txt 解るか! とりあえず、http://www.secomtrust.net/service/ninsyo/cer/scrootca1.txt をダウンロード。 それを、javaプログラムにある場所(プログラムサーバ)にアップロード 2.ルート証明書が壊れていないか確認。 keytool -printcert -file scrootca1.txt 大丈夫なようだ。 本当は1回目は、アップロードが面倒だったので、 プログラムサーバにファイルを作り、viでコピーした。 そしたら、 keytool エラー: java.lang.Exception: 入力の構文解析に失敗しました。 という壊れているメッセージが出てしまった。 改行コードとか違うのかな? でアップロードしなおしました。 3.登録 keytool -import -alias SecurityCommunicationRootCA1 -keystore $JAVA_HOME/jre/lib/security/cacerts -file scrootca1.txt (-keystore スペース $JAVA_HOME です。) パスワードを聞いてきた。 ???パスワード??? 設定した覚えないけど、 調べたら、デフォルトで changeit らしい。それを入力 この証明書を信頼しますか? [no]: と聞かれるので、yes うまくいきました。 本当は、もっと苦戦したけど・・・・・ $JAVA_HOME/jre/lib/security/cacerts のパーミッションがrootだったので3はrootで実行。 しようとしたら、 keytoolのパスが通っていなくて、フルパスで実行 /usr/java/j2sdk1.4.2_12/bin/keytool -import -alias SecurityCommunicationRootCA1 -keystore /usr/java/j2sdk1.4.2_12/jre/lib/security/cacerts -file scrootca1.txt な感じ。 4.確認 keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts -alias SecurityCommunicationRootCA1 5.実はこのプログラムはTOMCAT上で動いているので、 TOMCATを再起動したら、 No trusted certificate found はでなくなりました。 めでたし。めでたし。 ・・・・・つーか、接続サーバ側で勝手に変えるなよ ・・・とほほ Last updated 2011.06.09 17:02:09
TwitterのAPIを使うためには、OAuth認証が必要 流れは、 1.リクエストトークンの取得 アプリケーションを登録した際の、consumerkeyとconsumerSecretが必要。 結果、oauth_tokenとoauth_token_secretが取得できる。 2.アプリケーションの認証 登録したアプリケーションを、あるTwitterユーザが使ってよいかをTwitterユーザとして認証する。つまり、使われるTwitterApiはこのユーザのデータを使うことになる。 1で取得した、oauth_tokenとoauth_token_secretを使う。 結果、暗証番号が取得できる。 3.アクセストークンの取得 アプリケーションを登録した際の、consumerkeyとconsumerSecretと 1で取得したoauth_tokenとoauth_token_secretと2で取得した暗証番号を使う。 結果、oauthTokenとoauthTokenSecretが取得できる。これは、リクエストトークンと同じ名前のパラメータであるが、値がリクエストトークン時のものと異なっているので注意。TwitterのAPIを使う時に必要になる。 以上。 はまった点 いかにも、TwitterのURLにURLパラメータくっつけて、ブラウザで叩けばいいのかという感じなのだが、HttpURLConnection#setRequestProperty("Authorization", ***);の***の部分にパラメータ=値のカンマ区切りをくっつけて送信する形になる。はまった。 で自作しようと頑張ったんだけど、以下のサイトを参照しました。 参照しました。 ありがとうございます。 Last updated 2010.12.21 10:30:44
twitterへの自動更新を一から作ろう。 1.twitterアカウントの作成 手順は省略。 普通にアカウントを作る。 2.アプリケーションの登録 http://dev.twitter.com/apps/new/ で内容を入力 アプリケーション名:なんでもいいみたい。 アプリケーションの説明:機能や動作の概要。なんでもいいみたい。 アプリケーションのウェブサイトURL:特に一般に公開するつもりないので、なんでもいいみたい。 所属会社/団体:会社名でもいれますか。 アプリケーションの種類:今回は、クライアントアプリケーションでいいのかな。 標準のアクセスタイプ:クライアントアプリケーションにしたら消えちゃった。 標準のアクセスタイプ:書き込みたいので、Read&Write アプリケーションのアイコン:なにも設定せず で、ぐにゃぐにゃ文字を入れて 「アプリケーションを登録する」ボタン押下 で、そのままなすがままに進むと、 値が取れる画面に行きつく。 なにが必要が良くわからないので、全部コピーしておくか。 Last updated 2010.12.21 09:55:29
あるデータをtwitter内へ自動書き込みする機能を作ることになった。 そんなようなアプリはいっぱい出回っているようだけど、 まあ、せっかくなので、一から作ってみようかなと。 Last updated 2010.12.17 11:53:15
あるシェルの引数に二つの引数を取得し、 その2つの値をsshのログインIDおよびパスワードにしたい。 よくある、「sshのパスワードを入力しなくても・・・」での解答は、 「鍵交換方式」だと思います。 でもそうじゃなくて、ログインIDおよびパスワードは入力させたい。 ただし、sshが受け付ける標準入力でなくて、そのsshを起動するシェルスクリプトの 引数として渡したい。 でその実現。 調べてみるとexpectを使えばできるらしい。 えーと。 webサーバに入っているかな? >which expect とりあえず、パスが通っているところには無いらしい。 > man expect マニュアルはあるぞ! で、探したけど、インストールされていない。 インストールするかぁ。 以下rootユーザでやりました。 1.ダウンロード expectとtclをダウンロード expect http://sourceforge.jp/projects/sfnet_expect/releases/ でexpect5.45.tar.gzをダウンロード tcl http://sourceforge.jp/projects/sfnet_tcl/releases/ でtcl8.5.9-src.tar.gzをダウンロード 2.解凍して >tar xfvz expect5.45.tar.gz >tar xfvz tcl8.5.9-src.tar.gz 3.tclをインストール >cd tcl8.5.9/unix >./configure -enable-shared -prefix=/usr >make >make install で/usr/bin/tclsh8.5 に対して/usr/bin/tclshからのシンボリックリンクを張る。 >ln -s tclsh8.5 tclsh う? /usr/bin/tclsh8.4があった /usr/bin/tclshも/usr/bin/tclsh8.4にリンクが張られていた。 うーん。どうしましょ。 そのままほっときましょ。 4.expectをインストール >cd expect5.45 >./configure -with-tclinclude=tclをインストールしたパス/tcl8.5.9/generic -prefix=/usr >make >make install で動的ライブラリの更新 /sbin/ldconfig 5.使ってみる。 こんなshを作ってみた。(test.sh) リモートのサーバにログインしてlsを実行するだけ。 #!/bin/sh HOST=適切なIPアドレス USER=$1 PASS=$2 RCOMMAND=ls expect -c " set timeout 20 spawn ssh $USER@$HOST expect password:\ ; send \"$PASS\r\" expect \"$ \" ; send \"$RCOMMAND\r\" expect \"$ \" ; send \"exit\r\" 6.実行しました。 >test.sh hogeuser hogepassword うまく行きました。 ちなみに、初めてログイン元からログイン先へ初めてsshでログインする場合は、 セキュリティのどうのこうのという質問が来るので、 5のshでは少々不足であるが、まあ省略。 一回普通にsshでログインすればいいからね。 Last updated 2010.12.08 10:58:48
googleで自分のサイトの順位を検索していると、 パソコンのよって検索順位が違っている。 当然、自分のパソコンは、自分のサイトをちょいちょい見ているから 検索結果は上位に来てしまう。 実際、何位なんだか・・・ どうもgoogleはcookieを使って、そのあたりを制御しているみたい。 そこで、その制御をなしにします。 要はgoogleのcookieを受け入れなくすればよい。 IEなら、ツール->インターネットオプション->プライバシー->サイト でgoogle.co.jpをブロックすれば良い。 やってみた。 検索結果が変わった。 うーん。 このgoogleの機能は、便利なのか、そうでないのか? 自分のよく見ているサイトが上位に来るということは、 新しいサイトに出会う可能性を下げているのでは? Last updated 2010.11.17 10:02:50 |一覧| |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||