↑日記で日々積み重ねた情報をトップの「わんこのページ」にまとめています。

おのたく日記 [RDF] YouTubeも始めました→


2003-11-25(Tue) この日を編集

[JDK][Tiger][JSR] dW Javaの理論と実践: 並行コレクション・クラス JSR-166

JDK 1.5(Tiger)のjava.util.concurrentパッケージの紹介。

ConcurrentHashMapクラスは、synchronizedMapよりはるかに素晴らしい並行性を提供しているMapのスレッド・セーフな処理系です。複数読み取りが常にほぼ同時に実行することができ、同時読み書きも通常ほぼ同時に実行することができ、複数書き込みも多くの場合同時に実行することができるのです

[dW Javaの理論と実践: 並行コレクション・クラスより引用]

高負荷の状態での同期問題には、ConcurrentHashMapが有効そうですね。100多重で160倍早い

CopyOnWriteArrayListは、リスナーの登録テーブルのように登録よりも検索が多いときに有効

Javaの並行処理については、


1999/11/05 4,910円
0201310090

の本に詳しく解説されている。

これらのクラスを今のJDK 1.4で使いたいならば、util.concurrentをダウンロードすれば、EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMapとして利用できる。

また、Tigerに向けてはJSR-166で検討されていて、JavaDocやPreliminary Test Release 2が手に入る。

この記事の前の記事のJavaの理論と実践: (若干) シンプルになった並行性がでは、ThreadをPollして起動して負荷低減させるutil.concurrentのPooledExecutorクラスなどについて解説がある。

[リンク] Hideyuki Mita's Web Page - eclipse

Hideyuki Mita's Web Page - eclipseから「EclipseでJ2EE開発をする際にメジャーなLombozについての情報があります」とリンクいただいた。

[リンク] Hermitage - Link

「サーバーサイドjava情報源.eclipse使ってJ2EEです.」として、Hermitage - Linkからリンクを頂いた。


2004-11-25(Thu) この日を編集

[P2P] JXTA p2psockets

P2Pソケットといったって、普通にSocket作るのと変わらないよね〜 何が嬉しいの?

と思っていたら、NATやfirewallを透過的に扱えるのがうれしいらしい。

VIA News: P2P Sockets 1.1.4

[Java] SunのJavaプラグインにセキュリティホール

さっくりと、どのバージョンを使えば良いのか神谷さんがまとめてくれている。

■ 問題のあるJDK & JRE:

・ 1.3.1 ・・・ 1.3.1_12とそれ以前のバージョン

・ 1.4.0 ・・・ すべて

・ 1.4.1 ・・・ すべて

・ 1.4.2 ・・・ 1.4.2_05とそれ以前のバージョン

■ 修正済みのJDK & JRE:

・ 1.3.1 ・・・ 1.3.1_13とそれ以降のバージョン

・ 1.4.2 ・・・ 1.4.2_06とそれ以降のバージョン

[kyuka's weblog - [Urgent] Security Vulnerability With Java Plug-in in JRE/SDKより引用]

うーむ 1.4.1は、もう死んでいるのね〜


2005-11-25(Fri) この日を編集

そろそろSPFか

sid-milterをコンパイルして利用することにする。

昨日の日記「DomainKeysのコンパイル」と同様に

$ ./Build UBINDIR=/usr/local/bin MANROOT=/usr/local/man/man LIBDIR=/usr/local/lib/sid-milter

$ sudo ./Build UBINDIR=/usr/local/bin MANROOT=/usr/local/man/man LIBDIR=/usr/local/lib/sid-milter install

でコンパイル。しかし、libarでar_res_init()が無いとエラーになる。libar/fix.cでなんか不良してあるんだけど、Linuxでは使わなくても良さそうなので

$ diff -u libar/ar.c~ libar/ar.c

--- libar/ar.c~ 2005-07-19 06:12:59.000000000 +0900

+++ libar/ar.c 2005-11-22 14:54:42.987006883 +0900

@@ -1038,7 +1038,8 @@

if (new == NULL)

return NULL;

- ar_res_init();

+ /*tkyn ar_res_init(); */

+ res_init();

new->ar_nscount = _res.nscount;

new->ar_malloc = user_malloc;

と修正してしまう。これで、

/usr/local/lib/sid-milter/libar.a

/usr/local/man/man3/ar.3

/usr/local/bin/sid-filter

/usr/local/man/man8/sid-filter.8

がインストールされる。

次に、/etc/mail/sendmail.mcに

INPUT_MAIL_FILTER(`sid-filter', `S=inet:8891@localhost')

を書き加えてmakeして、sendmail.cfを更新する。さらに/etc/init.d/sendmailのstart_sendmail()に

/usr/local/bin/sid-filter -l -A -h -p inet:8891@localhost

を加える。ここで、

-r 2 (Sender IDかSPFがfailしたらrejectする)

-T 60 (DNSタイムアウト)

オプションは付けるか悩むところ。

/etc/init.d/sendmailのstop_sendmail()には、kill sid-filterを追記する。

これで、SenderIDかSPFで外から来たメイルが変だったらCheckOutするはず。

参考: MTA/AntiSPAM/Sendmail への Sender ID 実装

REST

XMLをhttpでやりとりするAPIをRESTということを、グレちゃんから教わったので、「REST 入門」を読んで調べてみる。

こんな中「「AmazonのXML Webサービス(REST)はXSLを書くだけでもかなり使える」で、AmazonのWebサービスAPIには、SOAPだけでなくてRESTもあることを知る。しかも、簡単に呼び出せるようだ。


2006-11-25(Sat) mod-securityでGotroot.com modsecurity(TM) rules/signaturesを使う この日を編集

[Debian]mod-securityでGotroot.com modsecurity(TM) rules/signaturesを使う

skimaticの作業ログ 2006-10-08 Debian etch で Xen - その2」で、「Gotroot.com modsecurity(TM) rules/signatures」という、mod-securityのSPAM防止向け最新のルールセットが有ることを知ったので、適応してみることにした。

最新ルールセットは、Complete rulesets for modsec 2.x All of the rules for Apache 2.x machines らしいので、How to download/setup/install/configure and use these rulesに従って、まずこれを試してみると、「SecRuleRemoveByIdなんて知らない」というエラー

GoogleしてみるとModSecurity Downloadにあるように、ModSecurity2なるものが出ていて、最新版は2.0.4。しかし、おうちサーバにインストールしてあるのは1.8.7だった。きっと古いので新しい命令を知らないんだろう。

mod-securty 1.9.4にupgarade

Debian Unofficial」に1.9.4のパッケージが有ったので、インストールしようとした。

しかしDebian amd64用には、sarge(stable)しかないし、前提パッケージがApache 2.0のapache2-commonになっている。

これでは、おうちサーバはApache 2.2でありapache2-commonと競合しているapache2.2-commonでないとダメなので、自力でパッケージを作る事にした。

まずは、Unooffical Debianを使えるようにするために/etc/apt/source.listに

deb http://ftp.debian-unofficial.org/debian etch main contrib non-free restricted

deb http://ftp.debian-unofficial.org/debian sarge main contrib non-free restricted

deb-src http://ftp.debian-unofficial.org/debian etch main contrib non-free restricted

deb-src http://ftp.debian-unofficial.org/debian sarge main contrib non-free restricted

を足した。そして、自力パッケージ作りに入る

$ mkdir UnOfficalDebian

$ apt-get source libapache2-mod-security

$ cd libapache-mod-security-1.9.4/

$ vi debian/control

まずapache2.2-commonを依存関係に入れる。

Depends: mod-security-common (= ${Source-Version}), apache2-common|apache2.2-common, ${shlibs:Depends}

$ debchange -i

libapache-mod-security (1.9.4-1duo+tkyn1) testing; urgency=low

* Add dependancy apache2.2-common

$ dpkg-buildpachage -us -uc -rfakeroot

$ cd ..

$ dpkg -I libapache2-mod-security_1.9.4-1duo+tkyn1_amd64.deb

一応、依存関係確認

$ sudo dpkg -i libapache2-mod-security_1.9.4-1duo+tkyn1_amd64.deb mod-security-common_1.9.4-1duo+tkyn1_all.deb

これで、自作Debianパッケージで無事にmod-security 1.9.4にupgradeできた。

しかし、これでもまだ「SecRuleRemoveByIdなんて知らない」とエラー

mod-security 2.0.4にupgarade

さらに2.0.4に上げるべくModSecurity Downloadより最新のオリジナルソースを持ってきてDebian Package化を志した。

$ uupdate ~/modsecurity-apache_2.0.4.tar.gz

なんかmod-security.cは無くなっているのでパッチは無視

$ cd ../libapache-mod-security-2.0.4

で、ベースのソースを作り。V2.0対応にするべく

・Apache 1.x版を作らない。

・libxml2-devパッケージをインストールし前提パッケージにlibxml2を加える

・utilディレクトリなどサンプル系を1.9.4のソースからCopy

・完成共有ライブラリはmod_security2.soとリネーム

などなど変更して、$ dpkg-buildpachage -us -uc -rfakeroot してmod-security 2.0.4版を作った。

早速インストールして、動かしてみて気がついたんだけど、mod-securityは、V1.9とV2.0でルールの書き方が全然違う! 参照: ModSecurity Reference Manual V2.0

残念ながら今まで書いたルールが使えないのは悲しいので2.0.4は、おはこいり

mod-security 1.9.4でGotroot.com modsecurity(TM) rules/signaturesを運用

よく見ると、「Gotroot.com modsecurity(TM) rules/signatures」には、Complete rulesets for modsec 1.9 the rules for Apache 2.x machinesというmod-security 1.9系のルールセットも有るので素直にmod-security 1.9ベースで運用することにした。

最後に、以下のスクリプトを毎週動かして最新のルールに更新されるようにて運用を開始した。どうでしょうかね?

#!/bin/sh

LAST=.last-update

cd /usr/local/etc/modsecurity

/usr/bin/wget -nv -N http://www.gotroot.com/downloads/ftp/mod_security/apache2/apache2-gotrootrules-latest.tar.bz2

if [ $LAST -nt apache2-gotrootrules-latest.tar.bz2 ];then

exit 0

fi

/bin/tar xvfj apache2-gotrootrules-latest.tar.bz2

/usr/bin/touch $LAST

/etc/init.d/apache2 restart

libapache2-mod-securityのV1.9.4とV2.0.4のDebian amd64のApache 2.2向けDebian Binaryパッケージとか、ソースパッケージ(i386で運用する人はソースから必要)なんてのためにファイル公開した方が良いのかなぁ??

本日のツッコミ(全1件) [ツッコミを入れる]

_ わんこ [ [そう、ビンゴでした。はじめはトラックバックしたんですが、おうちサーバはダイナミックIP Addressだからか、..]


2007-11-25(Sun) USB2.0無線LANアタプター(子機)BUFFALO WLI-U2-G54HPを利用する この日を編集

[Debian]USB2.0無線LANアタプター(子機)BUFFALO WLI-U2-G54HPを利用する

ハイパワーのUSB接続の無線LANアタプターが必要なので入手した。ちょいと調べたらLinux用のドライバーもあるようなので、早速テストしてみた。

2005年12月28日の日記「USB LAN(COREGA Wireless LAN USB Stick-11)をLinuxで利用する」でPrismベースの無線LANインターフェースの無線LANアタプターを使えるようにしたときより、ずっと楽だった。

参考: WLI-U2-SG54HP - system22222 - livedoor Wiki

まずはSourceforge.net rt2400/rt2500 Linux Driver(といいつつrt73のドライバーも有る)からソースをとってくる

$ cvs -d:pserver:anonymous@rt2400.cvs.sourceforge.net:/cvsroot/rt2400 login

$ cvs -z3 -d:pserver:anonymous@rt2400.cvs.sourceforge.net:/cvsroot/rt2400 co source/rt73

WLI-U2-G54HPに対応と、Debian 4.0にmodprobeの設定場所変更のソースを変更して、makeとinstall

$ cd source/rt73/Module

$ cvs diff -u rtmp_def.h

Index: rtmp_def.h

===================================================================

RCS file: /cvsroot/rt2400/source/rt73/Module/rtmp_def.h,v

retrieving revision 1.27

diff -u -r1.27 rtmp_def.h

--- rtmp_def.h 14 Nov 2007 21:14:42 -0000 1.27

+++ rtmp_def.h 24 Nov 2007 15:26:48 -0000

@@ -818,6 +818,8 @@

{USB_DEVICE(0x0b05,0x1724)},\

/* Buffalo */\

{USB_DEVICE(0x0411,0x00f4)},\

+ {USB_DEVICE(0x0411,0x00d8)}, /* WLI-U2-SG54HP */ \

+ {USB_DEVICE(0x0411,0x00d9)}, /* WLI-U2-G54HP */ \

/* Belkin */\

{USB_DEVICE(0x050d,0x7050)},\

{USB_DEVICE(0x050d,0x705a)},\

$ cvs diff -u Makefile

Index: Makefile

===================================================================

RCS file: /cvsroot/rt2400/source/rt73/Module/Makefile,v

retrieving revision 1.15

diff -u -r1.15 Makefile

--- Makefile 10 Sep 2007 22:04:40 -0000 1.15

+++ Makefile 24 Nov 2007 15:27:10 -0000

@@ -161,7 +161,11 @@

install: modules_install

@echo "*** Update $(MODULE_CONF) alias for $(IF_NAME)"; \

- if ! grep -q '$(IF_NAME)' $(MODULE_CONF) ; then \

+ if [ -d /etc/modprobe.d/ ]; then \

+ if ! grep -q '$(IF_NAME)' /etc/modprobe.d/* ; then \

+ echo "alias $(IF_NAME) $(MODULE_NAME)" >> /etc/modprobe.d/rt73; \

+ fi; \

+ elif ! grep -q '$(IF_NAME)' $(MODULE_CONF) ; then \

echo "alias $(IF_NAME) $(MODULE_NAME)" >> $(MODULE_CONF) ; \

fi

@echo "*** Install firmware in $(FIRM_DIR) ..."; \

$ make

$ sudo make install

以下の場所に新しいファイルが出来て完成。

/lib/modules/2.6.22-2-amd64/extra/rt73.ko

/etc/modprobe.d/rt73

/lib/firmware/rt73.bin

さて、つなぐと自動的にHotplugでモジュールがロードされたけど、ifup wlan0実行されていないので

# ifconfig wlan0 up

として無事に起動、さっそく無線LANの電波のスキャンをしようとしたら、iwlistが無かったので、wireless-toolsパッケージをインストールした。

# iwlist wlan0 scan

Warning: Driver for device wlan0 has been compiled with version 22

of Wireless Extension, while this program supports up to version 20.

Some things may be broken...

wlan0 Scan completed :

Cell 01 - Address: 00:00:00:00:00:00

ESSID:"FON_AP"

Mode:Managed

Channel:1

Encryption key:off

Bit Rates:0 kb/s

Cell 02 - Address: 00:00:00:00:00:01

ESSID:"MyPlace"

Mode:Managed

Channel:1

Encryption key:on

Bit Rates:0 kb/s

と、おうちのLafoneraがみつかっているので接続も成功!

[Debain] GNOMEでの無線LAN設定

さてDebian GNOMEでの設定は、wifi-radarパッケージなどもあるけど、GNOMEの場合は、デスクトップ→システム管理→ネットワークの設定(network-admin)でやるのが正当なようなので、network-adminにより設定しようとするけどFON_APへの接続を有効にしようとしてもwlan0が立ち上がらなかった。

いろいろ試しているうちにwifi-radarをインストールするとうまくいくので調べたら、dhcp3-clientパッケージが入っていなかったのが原因だった。

ついでなのでWPA/WAP2をサポートするwpasupplicantパッケージからインストールしたら、うまくwlan0を「ネットワークの設定(network-admin)」から有効にできるようなった。

DHCPで取得したIPアドレスの確認などは、GNOMEのアプリケーション→システムツール→ネットワークツール(gnome-nettool)で出来る。ただし、電波の強さなどは分からない。

wifi-radarでも電波の強さのバーが出なかったけど、もしかしたら「Warning: Driver for device ...」の警告にあるようにドライバーのバージョンが新しすぎるのかもしれない…


2022-11-25(Fri) GitLab 15.6にupgrade中にマイグレーション失敗 この日を編集

いつものようにomnibus Dockerイメージ版のGitLabを15.5から15.6にupgradeしようとしたらエラーが発生

Recipe: gitlab::database_migrations

* ruby_block[check remote PG version] action nothing (skipped due to action :nothing)

* rails_migration[gitlab-rails] action run

* bash_hide_env[migrate gitlab-rails database] action run

[execute] rake aborted!

StandardError: An error has occurred, all later migrations canceled:

PG::UndefinedTable: ERROR: relation "index_issues_on_title_trigram" does not exist

/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20221019194751_disable_fastupdate_on_issues_title_gin_index.rb:10:in `block in up'

/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/with_lock_retries.rb:123:in `run_block'

/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/with_lock_retries.rb:134:in `block in run_block_with_lock_timeout'

...

/opt/gitlab/embedded/bin/bundle:23:in `load'

/opt/gitlab/embedded/bin/bundle:23:in `<main>'

Tasks: TOP => db:migrate

(See full trace by running task with --trace)

main: == 20221019194751 DisableFastupdateOnIssuesTitleGinIndex: migrating ===========

main: -- transaction_open?()

main: -> 0.0001s

main: -- execute("ALTER INDEX index_issues_on_title_trigram SET ( fastupdate = false ) ;\n")

================================================================================

Error executing action `run` on resource 'bash_hide_env[migrate gitlab-rails database]'

================================================================================

また、2021年11月2日の日記「GitLab 14.4へのupgradeでエラー」みたいなことが発生しているのだろうとして検索してみると。

すでにIssueが立っていた#383540 Upgrade to 15.6.0 fails: relation "index_issues_on_title_trigram" does not exis

とりあえずのワークアラウンドは#378343 (comment 1182560762)なので、

$ docker compose up -d

$ docker compose exec gitlab-ce bash

root@gitlab-ce:/# gitlab-psql

psql (12.12)

Type "help" for help.

gitlabhq_production=# CREATE INDEX index_issues_on_description_trigram ON issues USING gin (description gin_trgm_ops);

CREATE INDEX

gitlabhq_production=# CREATE INDEX index_issues_on_title_trigram ON issues USING gin (title gin_trgm_ops);

CREATE INDEX

gitlabhq_production=# CREATE INDEX index_merge_requests_on_description_trigram ON merge_requests USING gin (description gin_trgm_ops);

CREATE INDEX

gitlabhq_production=# CREATE INDEX index_merge_requests_on_title_trigram ON merge_requests USING gin (title gin_trgm_ops);

CREATE INDEX

gitlabhq_production=# quit

root@gitlab-ce:/# exit

と手早く打って、問題のマイグレーションの前に終わらせると、無事にGitLab 15.6が起動できた。


Google Web検索 on-o.com内を検索