RaspberryPi2にArchivaセットアップしたメモ


## RaspberryPi2

### Raspbianインストール

NOOBSを使えば特に問題なくできるはず
（SDカードの相性が悪くなければ・・・）

1. [SDFomatter](https://www.sdcard.org/jp/downloads/formatter_4/)をセットアップしておき、SDカードをフォーマット。

2. [NOOBS](https://www.raspberrypi.org/downloads/noobs/)をダウンロードして、フォーマットしたSDカードに展開。

3. ラズパイにSDカード挿して起動。

NOOBSの起動時に言語を選択できるが
日本語を選択すると文字化けするのでそのまま英語でいったほうがいい。

キーボードの設定もできる。
こちらは素直にjpで。

### raspi-config

Raspbianインストール後のリブートで起動するraspi-configで少し設定。

* Boot Options
`Console`を選択。

* Internationalisation Options > Change Locale
`ja_JP.UTF-8 UTF-8`を追加。
デフォルトも`ja_JP.UTF-8 UTF-8`に。

* Internationalisation Options > Change Timezone
`Asia`、`Tokyo`。

* Advanced Options > SSH
`Enable`に。

* Advanced Options > Memory Split
`16`に。

0でもいいような気がするが
選択できる値として示されているものの最小値が16なので。

設定後、再起動。
以降SSHで。

デフォルトでユーザ`pi`、パスワード`raspberry`でログインできるはず。
NOPASSWDで`sudo`できる。

### 準備

```bash
# pi@raspberrypi
sudo su - 

# root@raspberrypi
apt-get update
apt-get upgrade

# archiva用のユーザ作っとく
adduser archiva
```


## Tomcat

スタンドアロン版（Jetty）はARMのwrapperが入ってなかったので
war版を使うことにして、とりあえずTomcat入れる。

> ArchivaのドキュメントにはTomcat8の記載がない。
ver7のほうが安全かも。

```bash
# archiva@raspberrypi
cd ~

wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-8/v8.0.27/bin/apache-tomcat-8.0.27.tar.gz

wget https://www.apache.org/dist/tomcat/tomcat-8/v8.0.27/bin/apache-tomcat-8.0.27.tar.gz.md5

diff <(md5sum apache-tomcat-8.0.27.tar.gz) apache-tomcat-8.0.27.tar.gz.md5
```

改行がないとか、「*」の有無とか差分が出るが、ハッシュが一致してればOK。

```bash
tar xzf apache-tomcat-8.0.27.tar.gz 

rm apache-tomcat-8.0.27.tar.gz
rm apache-tomcat-8.0.27.tar.gz.md5

mv apache-tomcat-8.0.27/* ~/
rm -r apache-tomcat-8.0.27

mv ~/conf/tomcat-users.xml ~/conf/tomcat-users.xml.org

cat <<'EOF'> ~/conf/tomcat-users.xml
<?xml version="1.0" encoding="utf-8"?>
<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>
EOF
```

ユーザ名とパスワードが一緒で全権付与。
実験用の環境なので手抜きしているが、良い子は真似してはいけない。

```bash
cat <<'EOF'> ~/bin/setenv.sh
export JAVA_HOME=$(update-alternatives --query java | grep -e '^Value' | awk '{print $2}' | sed -e s:/jre/bin/java$::g)
EOF
```

`setenv.sh`にぐちゃぐちゃ書いているが、
使いたいバージョンの`JAVA_HOME`を設定すればいいと思う。

```bash
# 起動
~/bin/startup.sh

# 停止
~/bin/shutdown.sh
```

`http://{ラズパイのIP}:8080/`で、あの可愛げのない猫が出てくればOK。


## Archiva

ここからが本番。

この辺を参考に。
https://archiva.apache.org/docs/2.2.0/adminguide/webapp.html

こっちのWikiも参考に。
https://cwiki.apache.org/confluence/display/ARCHIVA/Archiva+on+Tomcat

```bash
# archiva@raspberrypi
mkdir ~/archiva
cd ~/archiva

wget http://ftp.jaist.ac.jp/pub/apache/archiva/2.2.0/binaries/apache-archiva-2.2.0.war

wget http://www.apache.org/dist/archiva/2.2.0/binaries/apache-archiva-2.2.0.war.md5

diff <(md5sum apache-archiva-2.2.0.war) apache-archiva-2.2.0.war.md5

rm apache-archiva-2.2.0.war.md5

cat <<'EOF'> ~/conf/Catalina/localhost/archiva.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context
    path="/archiva"
    docBase="${catalina.home}/archiva/apache-archiva-2.2.0.war">
  <Resource
      name="jdbc/users"
      auth="Container"
      type="javax.sql.DataSource"
      username="sa"
      password=""
      driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
      url="jdbc:derby:${catalina.home}/archiva/database/users;create=true"/>
  <Resource
      name="jdbc/archiva"
      auth="Container"
      type="javax.sql.DataSource"
      username="sa"
      password=""
      driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
      url="jdbc:derby:${catalina.home}/archiva/database/archiva;create=true"/>
  <Resource
      name="mail/Session"
      auth="Container"
      type="javax.mail.Session"
      mail.smtp.host="localhost"/>
</Context>
EOF
```

Archivaのドキュメントでは`docBase`が`apache-archiva-1.1.war`になっているが
ダウンロードしたバージョンに合わせて修正。

DataSourceの`url`も修正。

Wikiの方を見ると`jdbc/archiva`も必要らしい。

```bash
cd ~/lib

#wget http://central.maven.org/maven2/org/apache/derby/derby/10.1.3.1/derby-10.1.3.1.jar
#wget http://central.maven.org/maven2/org/apache/derby/derbytools/10.1.3.1/derbytools-10.1.3.1.jar
wget http://central.maven.org/maven2/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar
wget http://central.maven.org/maven2/org/apache/derby/derbytools/10.12.1.1/derbytools-10.12.1.1.jar
wget http://central.maven.org/maven2/javax/activation/activation/1.1/activation-1.1.jar
wget http://central.maven.org/maven2/javax/mail/mail/1.4/mail-1.4.jar
```

依存ライブラリをゲット。
めんどくさい・・・sbtやgradle、mavenのありがたみを実感。

Wikiによると`derbytools`も必要。

Archivaのドキュメントには
> Install `derby-10.1.3.1.jar` (or later), `activation-1.1.jar` and `mail-1.4.jar` into the Tomcat 5.5 `common/lib` or Tomcat 6.0 `lib` directory.

との記載があるが `derby-10.1.3.1.jar`だと

```
nested exception is java.lang.AbstractMethodError: org.apache.derby.impl.jdbc.EmbedConnection30.isValid(I)Z
```

と怒られて動かない。

> Tomcat8にしたせいだろうか・・・？

`derby-10.1.3.1.jar`を解凍してjavapで見てみると確かにそんなメソッドはない。
`or later`だそうなので、最新を入れとく。

```bash
cat <<'EOF'>> ~bin/setenv.sh
export CATALINA_OPTS="-Dappserver.home=$CATALINA_HOME -Dappserver.base=$CATALINA_HOME"
EOF
```

先に`JAVA_HOME`が設定してあるので、追記でリダイレクト。

準備完了。
Tomcatを起動。

```bash
~/bin/startup.sh

# 事件が起こらないことを祈って...。
tail -f ~/logs/catalina.out

# archiva.logはTomcat起動直後はまだログファイルがない。すこし待ってから。
tail -f ~/logs/archiva.log
```

こんなの↓が出て少し気になるが、WARNだし、とりあえず放置。

```
java.sql.SQLSyntaxErrorException: 'DROP FUNCTION' cannot be performed on 'JPOX_MATCHES' because it does not exist.
```

`http://{ラズパイのIP}:8080/archiva`にアクセスし、無事トップページが出ればOK。

---

このあと管理者ユーザの設定などが必要だが、とりあえずセットアップまで。