Apache archivaでadminのパスワードを忘れた

archivaでadminのパスワードを忘れちゃったので少し調べてみた。

Java DBにローカルからコンソールで繋ぐ

Apache Derby: Documentation

ij

Java5とか以上ならDBディレクトリがあってJava DB一式が入ってるので、そこに入っているijというユーティリティを使う。

# DERBY_HOME=${JAVA_HOME}/db/
# export DERBY_HOME
# cd /opt/apache-archiva-1.1.3
# ${JAVA_HOME}/db/bin/ij

なんかDERBY_HOMEを設定しろって怒られた。

接続
ij version 10.4
ij>  connect 'jdbc:derby:data/databases/users' user 'sa';

プロトコルのあとにデータベースディレクトリが続く。DBディレクトリの指定には相対パスを使える。
ユーザーはsa。パスワードは不要。

connectのときに末尾のセミコロンを付け忘れてて15分くらい悩んでしまった。

接続できたか確認
ij> show connections;
CONNECTION0* -  jdbc:derby:data/databases/users
 * = current connection
JDOUSERテーブルのスキーマ情報をみてみる
ij> describe jdouser;
COLUMN_NAME         |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
                                                                                                                                                          • -
USERNAME |VARCHAR |NULL|NULL|256 |NULL |512 |NO ACCOUNT_CREATION_DA&|TIMESTAMP|6 |10 |26 |NULL |NULL |YES COUNT_FAILED_LOGIN_&|INTEGER |0 |10 |10 |NULL |NULL |NO EMAIL |VARCHAR |NULL|NULL|256 |NULL |512 |YES ENCODED_PASSWORD |VARCHAR |NULL|NULL|256 |NULL |512 |YES FULL_NAME |VARCHAR |NULL|NULL|256 |NULL |512 |YES LAST_LOGIN_DATE |TIMESTAMP|6 |10 |26 |NULL |NULL |YES LAST_PASSWORD_CHANGE|TIMESTAMP|6 |10 |26 |NULL |NULL |YES LOCKED |CHAR |NULL|NULL|1 |NULL |2 |NO MODEL_ENCODING |VARCHAR |NULL|NULL|256 |NULL |512 |YES USER_PASSWORD |VARCHAR |NULL|NULL|256 |NULL |512 |YES PASSWORD_CHANGE_REQ&|CHAR |NULL|NULL|1 |NULL |2 |NO PERMANENT |CHAR |NULL|NULL|1 |NULL |2 |NO VALIDATED |CHAR |NULL|NULL|1 |NULL |2 |NO
パスワードをupdate
ij> update jdouser set encoded_password = '47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' where username = 'admin';   
1 row inserted/updated/deleted
ij> commit;
ij> quit;

これで終わり。