在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 伺服器了。

Ubuntu 22.04 的 Firefox

Ubuntu 22.04 的 Firefox 變成 snap 軟體套件了,依據之前的經驗,這樣會卡到輸入法。果不其然,升級到 22.04 以後,Firefox 無法輸入中文。(我使用的是 gcin )

好在 Mozilla team 有推 debian package 的套件庫,依照這篇:How to Install Firefox as a .Deb on Ubuntu 22.04 (Not a Snap) 來進行,很容易就可以換回 debian package 版的 Firefox

方法如下:

步驟1,移除 snap 版的 firefox

sudo snap remove firefox

步驟2,增加 Mozilla team 的 PPA

sudo add-apt-repository ppa:mozillateam/ppa

步驟3,調整 apt 的設定,新增 /etc/apt/preferences.d/mozilla-firefox 檔案,內容貼上以下內容

Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001

再新增 /etc/apt/apt.conf.d/51unattended-upgrades-firefox ,內容貼上以下內容

Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";

最後,就可以用 apt 安裝 firefox 了

sudo apt install firefox

這方法的風險在於 Mozilla team 不知道會維護多久,但就先這樣用吧。

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

這個殺手演很大

韓國電影,故事蠻妙的。男主角崔亨旭是個殺手,在浴室踩到肥皂跌倒而喪失了記憶,因為鑰匙的關係,意外跟另外一個男子尹在誠交換了身份。崔亨旭透過探索住處以及附近的人們,慢慢了解了自己是什麼樣的人。而尹在誠卻因為進入了崔亨旭的住處而愛上了崔亨旭的目標恩珠。

崔亨旭慢慢的找回了自己的記憶,想起了自己的身份以及工作是什麼。尹在誠卻是發現崔亨旭可能是殺手,要殺害恩珠。經過一番曲折,崔亨旭跟在誠還有恩珠說明了自己並非真的殺手,而是協助這些看似被殺掉的人隱藏身份。所以就講好,一起演一場戲,讓委託崔亨旭殺人的這些人以為恩珠真的死了。最後,就是皆大歡喜,尹在誠跟恩珠走到一起,而崔亨旭也放棄了殺手的身份,跟當初因為自己失憶而照顧自己的一家人生活在一起。

雲南蟲谷

大年初二晚上看了雲南蟲谷,之前看小說時,覺得還蠻不錯的,抱有一份期待。哪知道還看不到一半,就開始吐嘈了。看完以後,我覺得並不好看。莫名其妙的冒險,故弄玄虛的瞎子還有看似正氣凜然的長篇大道理,反正就是要上去那個獻王墓。導演把電影拍的跟連續劇一樣,但是電影的時間不夠,沒辦法把故事講的完整,於是就爛尾了。