電影流水帳(2022/03/16~2022/03/31)

Bag Genius 模犯生 - Poster 01
  • ฉลาดเกมส์โกง (IMDB, Wikipedia),台譯:模犯生。
  • The Addams Family (IMDB, Wikipedia),台譯:阿達一族 (動畫)。

ฉลาดเกมส์โกง

第一次看是在轉台到公視的時候看到的,一看就停不下來,但後來還是中斷了,我忘了是什麼原因。之後隔了好久,才在 Netflix 上看完。故事聽說是拿 2014 年的真實事件改編的,整部電影很精彩,沒有冷場。

琳是個模範生,很聰明,成績很好,家裡經濟環境並不優渥,因為父親的堅持,到了知名的私校上課。到私校上課後,認識了 Grace 跟 Grace 男友 Pat,透過 Grace 跟 Grace 男友,也明白了學校背地裡的行徑。於是她接受了 Pat 的提議,收取現金幫助 Pat 跟他朋友們作弊,然後把錢存下來,想要拿這些錢來唸書,以便改善家裡狀況。一開始很順利,但後來因為班而出事了,班是學校另外一個資優生,他去告訴校長說有人作弊。經過調查以後,琳被抓到,失去某個校外考試的資格,也不再作弊。

Pat 的父母很有錢,覺得 Grace 很不錯,自從 Pat 跟 Grace 在一起以後,成績變好了,於是就想把他們兩個送出國一起唸書。Grace 跟 Pat 自知不是這個料,只好再去找琳幫忙,請他幫忙考試。琳本來是不願意的,但後來看到時鐘,靈機一動想到可以到另外一個時區的國家考試,再把考題答案傳送回來,就可以了。再加上自己也想出國唸書,所以他就要 Pat 跟 Grace 去找人,藉著提供答案來收取費用。但是一個人是不夠的,琳想到可以找班來幫忙,同樣需要錢改善家境的班答應了。經過一番準備後,兩人一同前往澳洲赴考。赴考的這段過程真的是緊張刺激,班後來被逮到,琳最後是完成任務。班後來回國,拿到錢,琳卻不要這筆錢了,也不再跟 Grace 還有 Pat 聯絡。

結局是阿班走偏了,勒索琳繼續參與作弊。我還以為他是要找琳一起開補習班,這樣也符合他所說的,可以賺到更多錢,也造福更多學生。琳後來得到父親的諒解與支持,去自首了,這樣波及範圍很大,Grace跟 Pat 應該就會被退學了吧。這樣的結局讓人唏噓不已~

The Addams Family

Addams 一家人在鎮上不被歡迎,鎮上一個房仲業務,應該是吧,不喜歡 Addams 一家人的房子,就很惡劣的散佈了謠言,慫恿鎮民去欺負 Addams 一家人。

Addams 家的男孩要成年了,找了眾多親戚來舉辦這個成年禮,但男孩一直沒練成家族的軍刀舞,覺得沮喪,父親也覺得在家族裡有壓力。到了成年禮當天,家族的人到了,鎮民也到了,一場兵荒馬亂的情況下,男孩改以自己熟悉的爆炸技能展示了自己已經成年了,同時也救了大家。鎮民們也明白了 Addams 一家人是很 nice 的,是有人挑撥離間 。最後就是一個快樂結局,Addams 一家人融入了鎮民的生活,被毀壞的家園也在鎮民幫忙下復原了。

tcpdump小記

以前蠻排斥用 tcpdump 的,因為終端機模式下不容易去看,所以我都是寫到檔案以後,再傳出來用 wireshark 去看。

寫到檔案去,就是用 -w 參數指定要寫入的檔案。下面這行就是監聽 eth0 上的 port 80 封包,然後寫到 /tmp/capture.pcap 檔案。

tcpdump -i eth0 -w /tmp/capture.pcap port 80

昨天查文件學到另外一招,可以在終端機模式下看的方式,用 -X 參數印出 16 進位內容,用 -v 表示要看詳細的內容,越多 v 就越詳細。

tcpdump -i eth0 -vvX

參考資料

microk8s+okd web console

看到這篇:Running the OpenShift console in plain Kubernetes

剛好手頭上有 microk8s ,就裝來試試看。

環境

使用 Ubuntu 22.04

步驟

先安裝 nodejs 16,注意,17 以後的版本因為用了 OpenSSL3 ,所以編譯過程會有錯誤。

curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs

取得 web console 原始碼

git clone https://github.com/openshift/console.git

進入 console 資料夾,進行編譯

./build.sh

再來是啟動

先檢查 default 這個 service account 有沒有 token,這個 service account 是在 kube-system 這個 namespace 裡。

kubectl get serviceaccount default --namespace=kube-system -o jsonpath='{.secrets[0].name}'

如果沒有,就建立 token

kubectl create token default -n kube-system

複製輸出結果,然後建立 secret

kubectl create secret generic default-token-0621 --from-literal=token=<前面的輸出結果>

好了以後,編輯 service account

kubectl edit secret default-token-0621 -n kube-system

在 yaml 裡加入 secrets

apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: kube-system
secrets:
- name: default-token-0621

給權限

kubectl create clusterrolebinding default-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default

最後要啟動了,因為我是用 microk8s ,先取得 kubeconfig

microk8s config > ~/.kube/config
export KUBECONFIG=~/.kube/config
source ./contrib/environment.sh
./bin/bridge

預設會啟動在 :9000

電影流水帳(2022/03/01~2022/03/15)

https://flic.kr/p/RbRaQ8
Scarlett Johansson
  • The Perfect Score (IMDB, Wikipedia),台譯:極速A計劃。
  • อ้าย..คนหล่อลวง (IMDB, Wikipedia),台譯:騙騙愛上你。

The Perfect Score

看美國隊長跟黑寡婦他們年輕的樣子,挺有趣的。有幾個學生想要得到好的 SAT 成績,所以就共謀去偷考卷,故事就是他們策劃與偷考卷的過程。在過程中,慢慢揭露了他們偷考卷的背後原因。到了最後,他們也沒用這份考卷來考試,反而在這樣的過程裡,認清了自己想要什麼,幾個人也結為好友。

อ้าย..คนหล่อลวง

一個銀行僱員-伊娜被前男友 Petch 騙走了錢,她很不甘心。沒多久她遇上一個騙子-塔文,他們決定交換條件,合力去騙她前男友,想討回之前的錢。故事就是這樣的過程,在後半的時候,峰迴路轉,塔文本來利用完伊娜要閃人了,後來卻發現自己愛上了伊娜,所以決定幫到底。最後的時候,將計就計的讓前男友 Petch 入局,一行人順利拿到錢,讓故事以喜劇落幕。

這部蠻好看的,有笑有淚。

在Windows 2019 安裝 OpenSSH server

資料來源:微軟-安裝 OpenSSH

我找不到 GUI 怎麼裝,最後是開 PowerShell 終端機來安裝

檢查是否有安裝

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

安裝

預設就會安裝 OpenSSH client 了,執行這兩行會需要一點時間,我有遇到錯誤訊息,說安裝失敗,但再執行一次就可以了。

# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

啟動、設定與開防火牆

用 Start-Service 就可以啟動,用 Set-Service 設定為自動啟動,後面落落長的 if 是檢查,這段檢查,可以開設定裡的防火牆來看,不用執行也可以。

# Start the sshd service
Start-Service sshd

# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'

# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
    Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}

ssh 與 scp

若要連進來,用 ssh 即可,這邊要注意,當 ssh 進去以後,打的指令不是 linux 指令喔,是 windows 指令。

ssh <user>@<windows-2019>

因為 Windows 路徑跟 Linux 不一樣,所以不能用之前 linux 的方式來複製,得這樣用

scp my_file "john@<windows-2019>:C:\\Users\\John\\"

結語

有了 OpenSSH server ,要遠端管理或複製檔案變得方便許多,以後安裝完 Windows 要順手裝上。

參考資料

podman如何使用registry mirror

之前弄好 registry mirror,因為是用 docker,所以需要調整的設定檔是 /etc/docker/daemon.json

那在 podman 裡,該怎麼設定呢?

這部份可以參考 /etc/containers/registries.conf 裡面的說明,然後在 /etc/containers/registries.conf.d 資料夾裏面加上新的設定檔就可以。

例如可以在 /etc/containers/registries.conf.d/my-mirror.conf 加入以下內容

[[registry]]
location = "docker.io"

[[registry.mirror]]
location = "192.168.11.2:6000"
insecure = true

依照行號說明如下:

  1. [[registry]] 必須要加
  2. location = "docker.io" 是表示,遇到 docker.io 時,就要參考這裡的設定。
  3. [[registry.mirror]] 這是表示下面要寫 registry mirror 設定了。
  4. location = "192.168.11.2:6000" 是表示 registry mirror 的位置。
  5. insecure = true 是表示不要檢查這座 registry mirror 的 SSL 憑證。

設定完以後,在 podman pull docker.io/<image> 的時候,實際就會到 registry mirror 拉取 容器映像 ,由 registry mirror 再去決定是否到外面的 docker.io 拉取容器映像。

參考資料

Compiler Explorer

在某個推文上看到的網站 – Compiler Explorer https://godbolt.org/,但我忘了來源。

網站打開以後,左邊貼程式碼,右邊會即時顯示出編譯後的低階語言,支援蠻多語言的。這對想搞清楚底層怎麼處理的開發者來說很方便,可以透過這個網站即時的看到結果,進而調校程式碼。

CentOS 用 yum 出現 Failed to download metadata for repo ‘AppStream’

在使用 vagrant 架設 CentOS 環境時,yum 安裝套件出現 Failed to download metadata for repo 'AppStream' 的錯誤。

本來以為是有打錯字什麼的,後來發現沒啥問題,就請 Google 幫忙找找看,就找到這篇:Failed to download metadata for repo ‘AppStream’ [CentOS]

看完以後,簡單整理如下:

  1. 因為 CentOS 從 2021/12/31 開始就進入不維護狀態, repo 也跟著調整,mirror.centos.org 不再提供 repo metadata 。用白話講,就是 yum 無法取得套件資料庫。
  2. 要處理此問題,就需要把 mirrorlist.centos.org 替換掉,這時候可以用文章裡提供的指令來做。
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

這邊是使用 sed 指令來做替換,不確定指令做什麼的話,可以直接用 vim 或熟悉的文字編輯器打開 /etc/yum.repos.d 目錄下所有以 CentOS-* 開頭的所有檔案,做兩項變更:

  1. 把裡面的 mirror.centos.org 換為 vault.centos.org。
  2. 註解 mirrorlist 開頭的那一行。

這樣修改以後,就可以執行 yum 了。

Linux OOM-Killer

一般程序在使用過多記憶體時,就會被 Kernel 結束掉,在 Kernel 裡的負責這工作的就是 OOM Killer 。

如果想要把這功能關掉,可以用 sysctl 來作。

sudo -s sysctl -w vm.oom-kill=0

那要啟用,就是用

sudo -s sysctl -w vm.oom-kill=1

一般預設是啟用的。

另外一個設定是當出現 OOM 時,Kernel 要不要 Panic

這可以藉由察看 /proc/vm/oom_kill 的內容,得知此設定有沒有啟用。

cat /proc/sys/vm/panic_on_oom

要啟用,可以直接把 1 寫到這檔案裡。

echo "1" | sudo tee /proc/sys/vm_panic_on_oom

要關閉,就是寫 0

除了啟用跟關閉之外,還可以做一點細部的控制,就是 vm_overcommit_memory 。先說明 overcommit 的意思,當程序跟 kernel 申請記憶體時,kernel 通常是允許,因為不會立刻就使用,這樣就有機會可以執行更多程序,這就是 overcommit 過度使用。

這個值是 0 的時候,表示過度使用記憶體時的處理是由 kernel 自己決定,這也是預設值。

用 1 ,表示 kernel 永遠都可以過度使用,這設定有點危險,因為會有機會導致 OOM;2 表示不會使用超過指定的比率。

那就可以針對個別程序去做調整,OOM killer 在處理時,會去參考程序的 oom_score 來決定是砍不砍,所以可以調整 oom_score_adj 數值來影響 oom_score。

比如我們希望 pid 是 3813 的程序可以不要被 OOM killer 砍掉,就可以這樣調整

echo "-100" | sudo tee /proc/3813/oom_score_adj

或者是在 systemd service 裡加入

[Service]
OOMScoreAdjust=-100

這個設定在一般情況下不太會被用到,基本上用預設設定就可以。主要還是用在系統調校或是正式環境時,才會去動到。

參考資料

dnsdiag

想查詢用哪個 DNS 伺服器比較快,之前是查到用 namebench,但這專案沒在維護了,自行編譯使用,又遇到些問題,乾脆就放棄。

後來有看到 diadiag 這個套件,就想說來用看看。

在 Ubuntu 裡,用 apt 就可以安裝。

sudo apt install dnsdiag

dnsdiag 套件裏面有3個工具

  • dnsping
  • dnstraceroute
  • dnseval

dnsping 是測試連到 DNS 伺服器的時間。

dnstraceroute 是列出到 DNS 伺服器的路由,透過這個可以看 DNS 查詢到底有沒有繞路。

dnseval 是本文重點,也就是可以針對各個 DNS 伺服器去做評估,看哪個比較快。

首先要新增一個文字檔,命名為 public-dns-servers.txt,裏面放 DNS 伺服器的 IP。

1.1.1.1
8.8.8.8
168.95.1.1
94.140.14.14
61.31.1.1

然後執行

dnseval -f public-dns-servers.txt www.facebook.com

就可以看到結果了。

server           avg(ms)     min(ms)     max(ms)     stddev(ms)  lost(%)  ttl        flags                  response
--------------------------------------------------------------------------------------------------------------------
1.1.1.1          9.471       9.167       9.659       0.219       %20      3599       QR -- -- RD RA -- --   NOERROR             
8.8.8.8          10.621      8.588       13.036      1.961       %12      1002       QR -- -- RD RA -- --   NOERROR             
168.95.1.1       9.119       9.119       9.119       0.000       %50      2648       QR -- -- RD RA -- --   NOERROR             
94.140.14.14     0.000       0.000       0.000       0.000       %100     N/A        -- -- -- -- -- -- --   No Response         
61.31.1.1        8.215       8.132       8.298       0.118       %33      1366       QR -- -- RD RA -- --   NOERROR             

好了,有了這工具,就可以找出最適合的 DNS 伺服器了。