電影流水帳(2024/01/01~2024/02/28)

2024年電影有在看,但都沒在寫,很多時間都放到公司的事情上了。本來已經想說就不要再寫了,但2024年快要年底的時候,翻翻自己在 blog 上寫的電影流水帳,覺得原來當時自己是這麼想的啊,就想,這應該還是要繼續寫才對。也還好都有紀錄看了什麼,所以趁2025年初趕緊補一下。

Black Adam

中規中矩的反英雄起源電影,把黑亞當的故事交代的很清楚。

正義聯盟發現有不明的力量反應前去卡哈達調查,就發現了黑亞當。經過一番交涉,黑亞當自願被捕。但卡哈達整個很亂,有個人為了讓惡魔沙巴克重生,出來亂搞,後來大家一起去阻止沙巴克。

我覺得故事安排不錯的地方是黑亞當的轉折,原本以為那個發怒大鬧遠古國家卡哈達的黑亞當是擁有超級力量的黑暗魔神,結果不是,他是卡哈達勇士「提斯-亞當」的父親。因為當時國王害怕「提斯-亞當」的力量,派了刺客去對付他們全家,而「提斯-亞當」在要死之前就把力量轉移給黑亞當。黑亞當家裡人都死了,就暴怒,屠殺了卡哈達國王的所有屬下。後面也是因為黑亞當想起自己孩子,他才出來幫助正義聯盟打倒惡魔沙巴克。

The Marvels

我覺得故事不太好,而且一開場就很突兀,他假設了觀眾都看過驚奇隊長、汪達幻視以及驚奇少女,所以沒看過,會有點難以理解。

故事就是驚奇隊長、驚奇少女跟莫妮卡因為某場意外而發生了量子糾纏,量子糾纏導致他們在使用能力時,會跟另外一個人交換位置,這次是驚奇隊長與克里人、史克魯爾人之前的恩怨而發生,最終是解決了這些事情,然後結束。

沒有什麼特別讓人印象深刻的地方。

FALL

故事很簡單,蠻有意思的,而且故事有轉折,讓人驚訝。

貝琪的先生死了,貝琪很悲傷,消沉了很久。杭特找了她一起去爬一個荒廢的電視塔,想藉此讓他忘記丈夫死去的傷痛。兩人一起去,就開始往上爬。爬到一半時,梯子斷裂,兩人陷入困境,是要冒險往下,或是繼續往上看手機是否有更好的訊號?後來兩人決定繼續往上,繼續往上的過程遇到補給被勾住;也試著發簡訊後,立刻丟手機下去,看是否能發出簡訊;還有就是看到遠方有人,發信號彈,車子卻被偷走。最後貝琪到了頂端,發現剛剛半路補給被勾住時,杭特就已經掛了,原來自己一直以為杭特還活著。這邊導演還安排了一個轉折,讓貝琪發現了自己丈夫跟杭特的一些事情。總之貝琪為了生存,他利用杭特的屍體當作手機緩衝,順利把簡訊發送給自己爸爸。爸爸收到簡訊,立刻安排人來營救,貝琪才因此脫困。

Mission: Impossible -Dead Reckoning

典型的「不可能的任務」動作片。

這次主要事件是關於「智體」,一個強大的人工智慧,疑似侵入了某潛艇,發射了魚雷打爆了另外一台潛艦。為了調查,伊森展開他的冒險。這集遇到 Grace ,是由海莉主演,海莉就是演美國隊長女友的那位,然後賜死了伊爾莎。最後飛車從懸崖上跳下來還有火車上的打鬥很精彩,大概就這樣。片尾的故事並沒有終結,勢必有下一集。

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

參考資料