星期日, 10月 20, 2024

Sonatype Nexus3 資料庫遷移

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 資料表格的動作。

星期六, 7月 13, 2024

helm images

 適用情境,客戶是離線環境,沒辦法直接拉 container image,所以要先知道 helm chart 裏面用到的 container image,用這指令,就可以找到所有 helm chart 所使用到的 image,再用 skopeo/podman pull/docker pull 拉取下來,存為 tarball ,並帶到客戶端。

專案網址:https://github.com/nikhilsbhat/helm-images

安裝

安裝好 helm 以後,可以用以下指令安裝

helm plugin install https://github.com/nikhilsbhat/helm-images

使用

簡單說,就是拿 helm install 的指令來用,並改為 helm images get。

所以在配置好 helm repo 以後,就可以用 helm images 取得

例如 redis-operator

helm images get redis redis-operator/redis-operator

又例如 zabbix operator

helm images get zabbix zabbix-chart-7.0/zabbix-helm-chrt

就可以取得 container images 的網址。


題外話,應該要來熟悉一下 skopeo 怎麼用才是。

星期五, 6月 21, 2024

使用systemctl 啟用podman出現Failed to connect to bus

在使用 sudo/su 切換身份以後,用以下指令去啟用/啟動 podman 服務,會出現以下錯誤

Failed to connect to bus: No such file or directory

查了以後,才知道是少了 DBUS 環境變數的問題:https://stackoverflow.com/questions/73814619/permission-denied-trying-to-use-rootless-podman-docker-compose-traefik-with

這個時候,只要查到 DBUS 的 socket 路徑,再去 export DBUS 環境變數即可

export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
$ systemctl --user enable --now podman

啟用以後,會有 podman.sock 檔案,這個檔案的位置跟 root 身份的位置不一樣,會是在

/run/user/$UID/podman/podman.sock

這邊是要特別注意的。

星期日, 4月 07, 2024

終端機快速複製檔案內容到剪貼簿

資料來源:How to copy and paste within a terminal in macOS or Linux?

在 MacOS 下,可以用 pbcopy/pbpaste

cat file.txt | pbcopy
pbpaste | tee foo.txt

在 Linux 下,要用 xsel,主要是參數 –input 跟 –output

# 複製到剪貼簿
cat file.txt | xsel --clipboard --input
xsel --clipboard --output | tee foo.txt

若要讓指令一致,可以用 alias

alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

星期日, 3月 03, 2024

如何使用podman volume掛載nfs分享

資料來源:Mount an NFS Share Using a Rootful Podman Volume (oracle.com)

在建立 volume 時,就可以指定 nfs 的資訊

sudo podman volume create --opt type=nfs --opt o=rw --opt device=10.0.0.150:/nfs-share nfsvol

在建立完成後,podman 會去掛載 nfs 分享,這部份可以使用 mount 查看到掛載到哪個資料夾。接下來 podman 就可以使用 -v 參數,去指定要使用剛剛建立的 volume ,容器啟動後,就可以使用了。

例如

sudo podman run -v nfsvol:/foo -it --rm oraclelinux:9 ls -al /foo

這就表示把建立好的 nfsvol ,掛載到容器裡面的 /foo ,應用程式就可以存取到了。