Nexus3 在 3.71 以後,決定不使用 OrientDB 了,要改用 h2 或 postgresql。
postgresql 是需要付費的,所以免費的選擇是使用 h2。
官方提供了遷移的方法:https://help.sonatype.com/en/orient-3-70-java-8-or-11.html
這邊整理一下我遇到的情況,我的環境是 archlinux ,安裝 nexus-oss 以後,程式放在 /usr/lib/nexus-oss,資料跟自訂設定都放在 /var/lib/nexus-oss。
第一步是先做備份。
我先建立 /var/lib/nexus-oss/backup 目錄,然後設定 owner 為 nexus。接著登入 nexus,進入 Admin,新增 Task 做備份 (請依照官方文件操作)。我把備份檔案放在 /var/lib/nexus-oss/backup 。
第二步是停止服務: sudo systemctl stop nexus-oss
第三步是進行 Migrate 。新版本要求使用 Java 11 以後的版本,所以這邊要注意,得使用跟啟動 nexus3 相應的 Java 版本來執行 Migrate。
ArchLinux 的 Java 版本可從 /usr/lib/jvm 下看到,或是用 archlinux-java status
指令察看,目前我的 nexus-oss 是用 java 11 啟動。
先切到 /var/lib/nexus-oss/backup
目錄下,執行以下指令
sudo /usr/lib/jvm/java-11-openjdk/bin/java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar /usr/lib/nexus-oss/bin/nexus-db-migrator.jar --migration_type=h2 --force=true
執行完成以後,會出現 nexus.mv.db 這個檔案。
P.S. 我本想用 Java 17 來做,但會有以下錯誤,說 Migrate fail:
module java.base does not "exports sun.nio.ch" to unnamed module
後來查了一些文章,才想到應該要用相應的 Java 版本。
第四步,把 nexus.mv.db 複製到 /var/lib/nexus-oss/db
目錄下,並設定 owner 為 nexus。
第五步,修改 /var/lib/nexus-oss/etc/nexus.properties ,增加
nexus.datastore.enabled=true
最後重新啟動,就可以了。
我後續是遇到密碼錯誤的情況,這邊再參考這篇 KB 來做:https://support.sonatype.com/hc/en-us/articles/213467158-How-to-reset-a-forgotten-admin-password-in-Sonatype-Nexus-Repository-3
我本來是依照 KB 作法,3個步驟都做了,但我後來發現只要做 Check for existing admin user 這個步驟就可以,只需要執行更新 security_user 資料表格的動作。