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

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 怎麼用才是。

使用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

這邊是要特別注意的。

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

資料來源: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'

如何使用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 ,應用程式就可以存取到了。

網站是用wordpress做的嗎?

最近在幫朋友找 wordpress 佈景主題,所以在找是不是有工具可以分析網站,取得資訊。

結果就找到這篇:How to Discover Which WordPress Theme a Site is Using – GreenGeeks

這篇文章介紹了四個方法,其中一個方法是借助 IsItWP 這個網站。這個網站除了可以偵測網站是否用 wordpress 做的之外,也可以分析裡面用到的 plugin 或是 theme,真的是很方便。

其他兩個網站分別是

使用方法都很簡單,貼上要分析的網址就可以了。

最後一個萬不得已的方法就是看網頁原始碼了。

用trivy掃描KBOM

KBOM = Kubernetes Bills Of Material,就是 Kubernetes 的物料清單。

trivy 是由 Aqua Security 所開發的一個掃描工具,現在支援了 KBOM,可以依據 Kubernetes 務料清單裡的軟體來進行掃描,並產出報告。

安裝可以從 https://github.com/aquasecurity/trivy 來下載安裝,有提供以下方式

  • Container image
  • Debian package
  • RPM package
  • Homebrew

安裝好以後,就可以使用了。

那要掃描 KBOM ,要先產出 kbom.json,用以下指令就可以產出。這邊要注意,執行 trivy 的電腦上必須已經放置 ~/.kube/config ,這樣 trivy 才能存取到 k8s cluster。

trivy k8s cluster --format cyclonedx --output kbom.json

有了 kbom.json 以後,就可以用以下指令產出報告

trivy sbom kbom.json

我的 k8s 報告如下

2024-02-18T15:29:26.693+0800	INFO	Vulnerability scanning is enabled
2024-02-18T15:29:26.694+0800	INFO	Detected SBOM format: cyclonedx-json
2024-02-18T15:29:26.720+0800	WARN	No OS package is detected. Make sure you haven't deleted any files that contain information about the installed packages.
2024-02-18T15:29:26.721+0800	WARN	e.g. files under "/lib/apk/db/", "/var/lib/dpkg/" and "/var/lib/rpm"
2024-02-18T15:29:26.721+0800	INFO	Detected OS: ubuntu
2024-02-18T15:29:26.721+0800	WARN	This OS version is not on the EOL list: ubuntu 22.04.3
2024-02-18T15:29:26.721+0800	INFO	Detecting Ubuntu vulnerabilities...
2024-02-18T15:29:26.721+0800	INFO	Number of language-specific files: 3
2024-02-18T15:29:26.722+0800	INFO	Detecting kubernetes vulnerabilities...
2024-02-18T15:29:26.728+0800	INFO	Detecting gobinary vulnerabilities...

kbom.json (ubuntu 22.04.3)

Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)


 (gobinary)

Total: 3 (UNKNOWN: 0, LOW: 0, MEDIUM: 3, HIGH: 0, CRITICAL: 0)

┌──────────────────────────────────┬─────────────────────┬──────────┬────────┬───────────────────┬────────────────┬──────────────────────────────────────────────────────────┐
│             Library              │    Vulnerability    │ Severity │ Status │ Installed Version │ Fixed Version  │                          Title                           │
├──────────────────────────────────┼─────────────────────┼──────────┼────────┼───────────────────┼────────────────┼──────────────────────────────────────────────────────────┤
│ github.com/containerd/containerd │ CVE-2023-25153      │ MEDIUM   │ fixed  │ 1.6.15            │ 1.5.18, 1.6.18 │ containerd: OCI image importer memory exhaustion         │
│                                  │                     │          │        │                   │                │ https://avd.aquasec.com/nvd/cve-2023-25153               │
│                                  ├─────────────────────┤          │        │                   │                ├──────────────────────────────────────────────────────────┤
│                                  │ CVE-2023-25173      │          │        │                   │                │ containerd: Supplementary groups are not set up properly │
│                                  │                     │          │        │                   │                │ https://avd.aquasec.com/nvd/cve-2023-25173               │
│                                  ├─────────────────────┤          │        │                   ├────────────────┼──────────────────────────────────────────────────────────┤
│                                  │ GHSA-7ww5-4wqc-m92c │          │        │                   │ 1.6.26, 1.7.11 │ containerd allows RAPL to be accessible to a container   │
│                                  │                     │          │        │                   │                │ https://github.com/advisories/GHSA-7ww5-4wqc-m92c        │
└──────────────────────────────────┴─────────────────────┴──────────┴────────┴───────────────────┴────────────────┴──────────────────────────────────────────────────────────┘

從報告可以看出軟體元件的版本跟漏洞報告。

如果不產出 kbom.json ,也可以用另外一個方式掃描

trivy k8s cluster --scanners vuln --report summary

不過這指令在我的 k8s cluster,會有問題,我猜想是我 k8s cluster 不夠力的關係,就先這樣吧。

trivy 也有 operator 可以安裝,有機會再來看看怎麼使用。

參考資料

sitespeed.io 取得網站效能

來源:https://www.sitespeed.io/

專案已經提供了用容器啟動的方式,所以蠻容易的

docker run --rm -v "$(pwd):/sitespeed.io" sitespeedio/sitespeed.io:32.2.0 https://www.sitespeed.io/

執行完成後,會在當前目錄產生 sitespeed-result 目錄,目錄裡就有你需要的效能報告。

有需要撰寫自訂腳本測試的,可以參考 https://www.sitespeed.io/documentation/sitespeed.io/scripting/

效能報告以網頁呈現,用瀏覽器就可以開啟。

如何檢查GitOps Manifests

Kubernetes 主要會用這幾種檔案格式:

  1. YAML
  2. Kustomize
  3. Helm Chart

在使用前,是否可以檢查呢?以下就分別來介紹

YAMLint

YAML 可以使用 yamllint 來檢查,在 RHEL9 裡可以直接安裝 yamllint 。

sudo yum install yamllint

用以下指令檢查

yamllint service.yml

可以使用 -f 來指定輸出格式。

Kustomize

kustomize 可以用 kustomize build 來檢查。

kustomize build path/to/folder

Red Hat 有寫一個輔助腳本:validate_manifest.sh

Helm

helm 本身有提供 subcommand 來檢查:helm lint

helm lint Chart.yaml

參考資料

電影流水帳(2023/05/01~2023/12/31)

Jennifer Connelly
Jennifer Connelly

一次寫完。2023年共看了21部電影。

Top Gun: Maverick

下檔以後,沒多久 HBO 就上映了,而且還重播了好幾次。

Maverick 回來當教官,帶著一群年輕人訓練,後來一起出了任務。訓練的過程裡,因為有個學員是上一集已故同伴的兒子,所以故事有帶到這個心結。後來在出任務以後,順理成章的解了這個心結,也順利完成任務。

飛行畫面真的屌,珍妮佛·康納莉跟莫妮卡·巴巴羅真的漂亮。後來也因為莫妮卡·巴巴羅的關係,看了她跟阿諾爺爺一起演的 FUBAR 。

Wall-E

之前一直都沒完整看過,想說來完整看過一遍。

Wall-E 是個清理機器人,持續在清理地球。清理地球的原因是因為地球被污染得很嚴重,人類搭乘太空船出去旅行,就留下機器人持續的在運作。Wall-E 維持著規律的生活,很好的照顧著自己 (這是不是在告訴我們要維持規律生活、正常飲食,來好好照顧自己呢?) 。

某天,外出的太空船派出 Eve 探索機器人回地球探索,Wall-E 看到 Eve ,就愛上了 Eve。Eve 發現了植物,將植物帶回,Wall-E 也跟著回去,回到了太空船。

原本依照前人留下的指示,如果探索機器人在地球發現植物,那麼就表示太空船可以回到地球了。可是太空船的電腦卻因為之前的另外一道命令,決定要抹滅有植物這件事情,所以就展開了一場植物爭奪戰。雖然太空船電腦想隱瞞,但船長還是得知了這件事情,也做出了決定,要回到地球。最終,船長順利的處理了太空船電腦,複寫了原本的指令,要回去地球,可是 Wall-E 的電路板損壞了。Eve 知道 Wall-E 在地球有留下備料,所以在太空船回到地球以後,趕緊找出零件替換上去。Wall-E 在換上零件以後,就回復運作了,但卻沒有之前的記憶,Eve 很難過。可是在 Eve 碰觸 Wall-E 以後,Wall-E 回想起了之前的一切,想起他喜愛的 Eve,有了一個美好的結局。

Boss Level

很有趣的題材,因為第四台重播的關係,我看了兩三次才完整看完。

女主角在為一家公司研發一種可以逆轉時間的技術,但他發現主管居心叵測,怕技術被濫用,所以就把這技術用在她前夫身上。

她前夫開始莫名其妙的被殺掉,然後回到起床的時間點,一直重複。他慢慢克服被殺,或者說躲掉被殺,推進到後面的時間,才了解事情的原委。在了解原因之後,他救回了前妻,然後避免了這技術被該公司主管使用。最後皆大歡喜。

Polar

一個要退休的殺手,因為公司不想付龐大的退休金給殺手,因而起了壞心,想把他滅口,這樣就不用付錢了。哪知道,這殺手太厲害,反倒把來殺他的殺手都幹掉了。最後殺手退休,終於能過平靜的日子。

급 공무원

我的特務女友,這片我忘記劇情了,印象中是一部歡樂的動作片。

看了維基百科,大致想起來了。女主角是情報員,因為某些原因離開了兩情相悅的男友。三年後,再度遇到一起,這男主角(或女主角)一直以為自己是被甩,所以相互有芥蒂。直到因為發現彼此都不尋常,才知道都是情報員。最後就聯手順利解決案件,一個歡樂的結局。

Bullet Train

這是發生在火車上的故事,一群殺手相互因為各自的原因,一起廝殺,蠻陰錯陽差的。這部電影蠻好看的,動作跟劇情都蠻不錯的,最後也算是好結局,該留下的人留下了。

Ant-Man and the Wasp: Quantumania

蟻人3,太多特效了,少了前兩集放大縮小的樂趣,很可惜。

故事大致是黃蜂女媽媽隱藏了量子領域的一些事情,而蟻人的女兒進到量子領域,大夥一起進去救她,卻發現了量子領域被征服者康征服的事情,然後跟裡面的反抗軍聯手打倒征服者康。

千と千尋の神隠し

看了不下數十次,這部電影是我跟太太在婚前一起到長春戲院看的第一部宮崎駿電影。天啊,都 20 幾年前的事情了。

ハウルの動く城

霍爾的移動城堡,記得這部也是進電影院看的,對城堡那個門特別有印象,切換以後,開個門就是一個新天地,實在是很方便。再來就是女主角在被咒語變老之後,會因為心境跟當時情況的不同,時而年輕,時而變為年老,這點也很有趣。這點暗示了境由心生,你自己決定了你自己的年紀、你自己的心情,不要因為外在而持續的感到沮喪跟無力。

紅の豚

一個神秘卻有豬頭的飛行員,非常厲害。故事是講他因為飛機被擊落,然後去找人幫忙做了新飛機,在這過程認識了可愛、富有活力的女機師,因而被吸引。

作飛機的這段讓人印象深刻,因為作飛機需要人力,在戰亂的時代,男人都出外打仗,只剩下女人,所以作飛機都是女人來幫手。

還有一段也有很有趣,就是小朋友校外旅行,飛機被迫降落,然後其實很善良的海賊們就載著這群小朋友回家,真的很可愛。

The Flash

DC 宇宙裡知名的事件,閃點。之前在動畫裡看過了,所以大概知道劇情。簡單的說,就是閃電俠因為遺憾,想回到過去救自己老媽,結果卻導致時間錯亂。

這故事很容易可以讓人帶入同理心,因為人都會有懊悔、想改變過去的那種感覺。

這部電影算是蠻忠實地呈現,也因為這樣的故事,很容易可以跟其他部電影作連結,因為時間錯亂了,人物跟故事線是可以隨意找的。

故事本身就好看,電影也拍的不錯,唯一的缺點大概就是特效吧,我覺得是瑕不掩瑜啦。