|
|
|
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
│<< 前のページへ │一覧 │
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
テーブルのカラム(項目)をひとつ削除する。 alter table テーブル名 DROP COLUMN カラム名; 昔こんなのあったっけ?
Last updated
2010.08.05 13:54:04
Oracle Dbにコネクトしようとしたら、 ORA-28000: the account is locked なんていうエラーがでた。 sysでログインして connect / as sysdba alter user ユーザ名 account unlock; で解除できた。 なんだこの機能? こんな機能あったっけ?
Last updated
2010.07.05 18:39:48
apach2で停止も起動もできなくなった。 何をやったかというと、 apachが起動している状態(httpdが動作している状態)で logを全て削除してしまった。 apachのホームの中のlogsの下にあるファイルをバスっと消してしまった。 で、 apachectl stop をやると httpd (no pid file) not running で apachectl start をやると (98)Address already in use: make_sock: could not bind to address [::]:80 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs とこんな感じ。 うーん。 しょうがないからlogsの下にあるファイルをちょっとだけ復旧 logsディレクトリの下でhttpd.pidを作る。 touch httpd.pid でpsでhttpdのpidを調べる。 ps -ef | grep httpd **** 30837 1 1 21:04 ? 00:00:00 /usr/local/apache2/bin/httpd -k start 結果が出てくるので、pid(今は、30837) をhttpd.pidの中に記述。 で、 apachectl stop 止まったよかった。 apachectl start 動いたよかった。
Last updated
2010.03.26 21:07:57
│<< 前のページへ │一覧 │ 一番上に戻る │ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||