Ubuntu上で動作する、古（いにしえ）のRundeckを最新バージョンにアップグレードするまでの道程

# はじめに

Rundeckを長期間運用していると、いつの間にか古（いにしえ）のバージョンとなっている場合があります。ジョブ管理ツールは安定してナンボということもあり、かつ現在のバージョンが安定して動いているのであればバージョンアップに対するモチベーションもなかなか高まらなかったりします。

私が管理しているRundeckも3.0という5年近く前のバージョンを利用しており、非常に安定して日々動作しているのですが（ゆえにバージョンアップしようというモチベーションが上がらない）、しかしこのまま古いものを動かしているのは、ディストリビューションのサポート面（最新のディストリビューションで動作しなくなる可能性）やセキュリティ面（脆弱性等）の観点からもあまりよろしくないことから、重い腰を上げながら最新版のRundeckへバージョンアップを行ってみました。

以下では、Rundeck 3.0から最新バージョンまでのバージョンアップ手順を個人の備忘録がてらまとめてみました。自分が分かれば（後で同じ作業を行う際に再現可能であれば）良いということもあり、表現が適切ではない箇所もあるかもしれませんが、そのような箇所についてはあらかじめご容赦いただければと思います。


# 手順
::: note warn
作業前に、バックアップを忘れずに！
:::

## Rundeckのアップグレードガイドを確認する

以下URL内の手順をまずは一読し、変更点ならびに必要な対応を確認します。

https://docs.rundeck.com/docs/upgrading/

## aptリポジトリを追加する

以下のURLへアクセスします。

https://docs.rundeck.com/docs/administration/install/linux-deb.html

「Community」タブをクリックし、「Manual install with apt」の手順でaptリポジトリを追加します。なお、**リポジトリ追加以降の手順（apt-get install rundeck) は進めず**に、リポジトリ追加までの手順でいったん手を止めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/25249450-6bcc-5749-1177-de04ac6a9ea7.png)

## Rundeckをバージョン指定で実行する

以下の順番でRundeckをバージョン指定でインストールします。

::: note info
インストール中にファイルの変更を求められた場合は、以下の手順に特記事項がない限りは「N」で進めます。

```
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
```
:::

::: note warn
各インストールステップは、Rundeckの起動が完了していることを（途中ではないことを）確認しながら進めます。起動途中にアップグレードを進めた場合、不具合が生じる恐れがあります。

また、各インストールステップではサービスの停止・開始を行うコマンドを記載していますが、インストールステップごとに、インストール前にサービスの停止、インストール後にサービスの開始を必ず行うようにしてください。

サービス停止・開始を一切行わず、インストールのみで進めた場合、本来実行されるべきDBマイグレーション処理等が行われず、Rundeckが立ち上がらない等の不具合が生じる原因となります。
:::


## 3.0 -> 3.1

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=3.1.6.20200210-1
service rundeckd start
```

なお、インストール前に `/var/rundeck/projects` ディレクトリが存在し、ディレクトリ内にRundeckのプロジェクトに関連するディレクトリやファイルが存在すること（ディレクトリ内が空でないこと）を確認します。

また、`/etc/rundeck/framework.properties` に `framework.projects.dir=/var/rundeck/projects` が存在することを確認します。

## 3.1 -> 3.2

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=3.2.9.20200708-1
service rundeckd start
```

## 3.2 -> 3.3

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=3.3.18.20220118-1
```

なお、バージョンアップ途中に `/etc/rundeck/profile`の変更を求められる場合があります。このメッセージが表示された場合は「Y」を選択します。（`/etc/rundeck/profile` 以外は「N」を選択します）
```
Configuration file '/etc/rundeck/profile'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
```

インストール後、 `/etc/rundeck/profile` を開き必要な設定を加えます。

例）起動パラメータにタイムゾーンとリバースプロキシ関連の設定を追加する場合は、以下を起動パラメータに追加します。
```
-Duser.timezone=Asia/Tokyo \
-Drundeck.jetty.connector.forwarded=true \
```


その後、`service rundeckd start`を実行して、Rundeckを起動します。


## 3.3 -> 3.4

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=3.4.10.20220118-1
```

インストール後に下記URL内の「DB Migration」の手順を進めます。

https://docs.rundeck.com/docs/upgrading/upgrading-to-rundeck-3.4.html

## 3.4 -> 4.0

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.0.1.20220404-1
service rundeckd start
```

なお、4.0.1はバグによりログインができません。ログインできない状態は無視して、4.1へアップグレードを進めます。

## 4.0 -> 4.1

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.1.0.20220420-1
service rundeckd start
```

## 4.1 -> 4.2

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.2.3.20220714-1
service rundeckd start
```

## 4.2 -> 4.3

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.3.2.20220714-1
service rundeckd start
```

## 4.3 -> 4.4

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.4.0.20220714-1
service rundeckd start
```

## 4.4 -> 4.5

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.5.0.20220811-1
service rundeckd start
```

## 4.5 -> 4.6

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.6.1.20220914-1
service rundeckd start
```

## 4.6 -> 4.7

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.7.0.20221006-1
service rundeckd start
```

## 4.7 -> 4.8

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.8.0.20221110-1
service rundeckd start
```

## 4.8 -> 4.9

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.9.0.20230111-1
service rundeckd start
```

## 4.9 -> 4.10

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.10.2.20230307-1
service rundeckd start
```

## 4.10 -> 4.11

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.11.0.20230313-1
service rundeckd start
```

## 4.11 -> 4.12

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.12.1.20230510-1
service rundeckd start
```

## 4.12 -> 4.13

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.13.0.20230515-1
service rundeckd start
```

## 4.13 -> 4.14

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.14.2.20230713-1
service rundeckd start
```

## 4.14 -> 4.15

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.15.0.20230725-1
service rundeckd start
```

## 4.15 -> 4.16

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.16.0.20230825-1
service rundeckd start
```

## 4.16 -> 4.17

以下のコマンドを実行します。

```
service rundeckd stop
apt install rundeck=4.17.6.20240402-1
```

バージョンアップ途中に `/etc/rundeck/profile`の変更を求められる場合があります。この場合は、3.2 -> 3.3バージョンアップ時と同様の対応を行います。

## 4.17 -> 5.x

`apt update && apt upgrade rundeck` で最新版へアップグレードします。

アップグレード後、OpenJDK 11をインストールします。

```
apt install openjdk-11-jre-headless
```

OpenJDK 11インストール後、`update-alternatives`コマンドでOpenJDK 11を指定します。

```
update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-21-openjdk-amd64/bin/java      2111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
  2            /usr/lib/jvm/java-21-openjdk-amd64/bin/java      2111      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
```

その後、Rundeckを起動します。

# 補足
## Row size too large エラーが発生した場合

アップグレード後、ワークフロー選択時等に500エラーが発生した場合、ログ内に次のようなエラーが出力されている場合があります。

```
Caused by: java.sql.SQLSyntaxErrorException: (conn=45) Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) ~[mariadb-java-client-2.7.0.jar!/:?]
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:153) ~[mariadb-java-client-2.7.0.jar!/:?]
        at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:274) ~[mariadb-java-client-2.7.0.jar!/:?]
        at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:363) ~[mariadb-java-client-2.7.0.jar!/:?]
        at org.mariadb.jdbc.MariaDbStatement.execute(MariaDbStatement.java:501) ~[mariadb-java-client-2.7.0.jar!/:?]
```

以上のエラーが表示された場合は、Rundeckが使用するMySQL or MariaDBのデータベースをリストアしたうえで、当該データベース上の各テーブルのROW_FORMATがDYNAMICになっている（COMPACTではない）ことを確認してください。

※ROW_FORMATは、Rundeckが使用するデータベースを選択のうえ、`show table status` を実行することで確認が可能です。

全てのROW_FORMATがDYNAMICに変更されたことを確認後、再度アップグレードをやりなおしてください。