archivaでadminのパスワードを忘れちゃったので少し調べてみた。
- 内部で使ってるのはJava DB(Apache Derby)
- ユーザー情報のDBは ARCHIVA_HOME/data/databases/users
- レポジトリ情報は ARCHIVA_HOME/data/databases/archiva
- ユーザー情報が入ってるのはSAスキーマのJDOUSERテーブルのENCODED_PASSWORDカラム
- パスワードをDBに入れるときに SHA-256ハッシュの生のダイジェストをbase64エンコードしてる
Java DBにローカルからコンソールで繋ぐ
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&
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
パスワードをupdate
ij> update jdouser set encoded_password = '47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' where username = 'admin'; 1 row inserted/updated/deleted ij> commit; ij> quit;
これで終わり。