visidata

很酷的工具,個人覺得是終端機的神器。

一般在終端機要察看 csv / json / yaml 等檔案,就是用 less 或 vim 來看,然後自己腦補進行閱讀。visidata 就是用來解決這個痛點,他會自動解析資料內容,然後以表格方式呈現,這在閱讀上就帶來很大的便利。

安裝很簡單,像 ArchLinux 或 Ubuntu 都已經有了,所以只要用套件管理工具安裝 visidata 就可以。在 RHEL8 ,就需要用 pip3 來安裝。其他發行版的安裝可以參考 Install VisiData | VisiData

安裝

ArchLinux

pacman -S visidata

Ubuntu

sudo apt install visidata

RHEL8

sudo yum install python3-pip
sudo pip3 install visidata

使用

安裝完成以後,就可以用了。

visidata <your_json_file>
visidata <your_csv_file>
visidata <your_yaml_file>

我有試著用在 Ansible playbook 或是 Kubernetes YAML 上,在這類型的 YAML 檔,欄位型態常有 dict 的情況。如果該欄位型態是 dict,按下 Enter ,會再展開,讓你一層一層進去,意外的發現 visidata 挺方便的。

剛剛看了一下 “–help” ,發現挺多選項的,之後再來持續挖掘吧。

tuned-套用適合的系統設定

RHEL 跟 Ubuntu 都有提供這個系統服務,可以啟用這個系統服務來微調系統的設定,以達到預期的效能。

安裝

印象中,RHEL8 預設已經安裝,若沒有,可以用以下指令來安裝

yum install -y tuned

Ubuntu 可以使用以下指令來安裝

sudo apt install tuned

使用

使用相當簡單,啟動系統服務以後就可以了。

systemctl start tuned

之後就可以使用 tuned-adm 來做一些操作,這邊先說明一下什麼是 profile 。

profile 就是一組針對特定用途所提供的系統設定,例如網路最佳化或是資料庫最佳化等等的,不同的用途要調整的設定也不一樣。在啟動 tuned 以後,會啟用預設的 profile ,以 ubuntu 來說,是啟動 balanced 這個 profile。

tuned-adm 有以下子指令可以使用,以進行 profile 的操作:

子指令用途
list列出所有可用的 profile,每個 Linux 發行版所提供的 profile 都不太一樣。
active列出目前啟用的 profile
off關閉所有調整
profile切換到指定的 profile
profile_info顯示指定的 profile 資訊
recommend顯示建議的 profile
verify檢查
auto_profile自動選擇 profile
profile_mode顯示目前是自動選擇 profile 還是手動指定 profile

如果要客製化自己的 profile,也是可以的,這邊可以參考 /usr/lib/tuned 裡的 profile 來做複製跟改動。

Ubuntu LivePatch

Ubuntu LivePath 是一個動態修補 kernel 漏洞的機制。在傳統作法上,如果修補、更新了 kernel ,就一定要重新開機,讓新的 kernel 生效才能真正的修補漏洞。LivePatch 則提供了一個不需要重開機的方法,他會動態的修補在目前的 kernel 裡。在 ubuntu 的 How kernel livepatching works 有圖片說明。

Canonical 很佛心的提供了 Personal token,只要去 ubuntu.com 註冊,就可以取得。

取得 token 以後,就可以使用以下指令啟用

sudo ua attach <token>
sudo ua enable livepatch

啟用後,若想知道目前套用了哪些修補,可以用 canonical-livepatch 指令察看

canonical-livepatch status

若是公司使用,會需要購買企業訂閱。若是想把修補放到公司內部來節省頻寬,可以參考 Livepatch on-prem 的說明來進行。我大致看了一下,說是會把修補放到 S3 上面,離線的作法或許可以架設 minio 來代替 S3。這部份因為沒用到,就先跳過不看了。

SSH登入使用2FA驗證

Ubuntu 跟 RHEL 的設定方法大同小異:

  • Ubuntu: sudo apt install libpam-google-authenticator
  • RHEL: sudo yum install -y google-authenticator qrencode

步驟1

google-authenticator 產生所需的設定檔。

產生出來的檔案會在 ~/.google_authenticator

步驟2

設定 /etc/pam.d/sshd

加入

auth required pam_google_authenticator.so

步驟3

在 SSHD 設定檔 /etc/ssh/sshd_config 裡找到 ChallengeResponseAuthentication ,將其後的值改為 yes

ChallengeResponseAuthentication yes

修改完成後,重新啟動 sshd。

有陷阱!!

大致就這樣,在 RHEL8 會踩到 SELinux 的雷,這邊要修改 /etc/pam.d/sshd 的設定,將之前加入的那行改為

auth required pam_google_authenticator.so secret=/home/${USER}/.ssh/.google_authenticator

然後把 ~/.google_authenticator 檔案搬到 ~/.ssh/google_authenticator

處理一下 SELinux 權限

restorecon -Rv ~/.ssh/google_authenticator

然後一樣,重新啟動 sshd

圖形介面

參考資料裡的後半段有關於 GUI 登入的設定,這邊我就沒試過了。

參考資料

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

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

參考資料

顯示指令執行進度-pv

在進行備份或者是複製大檔的時候,通常會想知道進度,但這通常需要指令本身有處理這塊,例如 rsync,否則一般是沒進度的。

那麼,有方法可以做到這件事情嗎?有的,就是使用 pv 這個指令。

安裝

安裝 pv 很簡單,在 Debian/Ubuntu 裡,用 apt 就可以安裝。

sudo apt install pv

在 RHEL/CentOS 裡,需要加入 EPEL 這個 repository (安裝方法sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm )

再使用 yum 安裝即可

sudo yum install pv

使用

看了參考資料的文章以後,我個人的理解是這樣子的,第一種使用方法,是把檔案當作參數,pv 會讀取檔案,然後輸出到 stdout,pv 就是依照檔案的長度來做進度顯示。直接來看看幾個例子

例1:複製大檔

pv big-file > /tmp/big-file

例2:壓縮大檔

pv big-file | bzip2 > /tmp/big-file.bz2

例3:用 tar 來備份,這邊的 -p –timer –rate –bytes 是因應不知道檔案大小所加上去的設定,這邊也可以看到 pv 可以接收 stdin 的資料,顯示進度,然後再寫到 stdout。

tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)

例4:同時看多個處理動作的狀況

pv -cN raw file | gzip | pv -cN gzip > file.gz

例5:備份跟還原整顆磁碟

pv -EE /dev/sda > disk-image.img
pv disk-image.img > /dev/sda

例6:複製目錄

rsync -avr --progress Downloads /mnt

等等,不是說好用 pv 嗎?對,你沒看錯,用 rsync,不要用 pv 去串了,這樣比較清楚。

參考資料

客製化sshd的ciphers (RHEL8)

很多 Linux 系統參數檢核表都有一個項目,就是在 /etc/ssh/sshd_config 裡加入下面這兩行,以禁用 sshd 不安全的 cipher。

Ciphers aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha1,hmac-ripemd160,hmac-sha2-256,hmac-sha2-512

但很有趣的是,RHEL8 sshd_config 裡的 comment 是這樣寫的

# This system is following system-wide crypto policy. The changes to
# crypto properties (Ciphers, MACs, ...) will not have any effect here.
# They will be overridden by command-line options passed to the server
# on command line.
# Please, check manual pages for update-crypto-policies(8) and sshd_config(5).

他說,這系統是依照系統的 crypto 原則,所以在這個設定檔裡加 Ciphers, MACs 是沒有效果的,會被傳遞給 sshd 的 command-line 選項給覆蓋掉。

來看看 sshd.service 的內容

# ...省略...
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
# ...省略...

首先載入 /etc/crypto-policies/back-ends/opensshserver.config 裡的環境變數,然後再載入 /etc/sysconfig/sshd 裡的環境變數,所以後者蓋掉前者。

那修改方法就很清楚了,就是修改 /etc/sysconfig/sshd 這個檔案就可以,把裏面 CRYPTO_POLICY= 前面的 # 拿掉,加入參數:

CRYPTO_POLICY="-oCiphers=aes128-ctr,aes192-ctr,aes256-ctr -oMACs=hmac-sha1,hmac-sha2-256,hmac-sha2-512"

然後重新啟動 sshd 就可以。

附帶一提,OpenShift CoreOS 也是用類似的方式修改,只是需要透過 MachineConfig。

參考資料:

如何使用VLC存取網路上的UPnP/DLNA伺服器上的媒體

資料來源:How to Access Media from UPnP or DLNA using VLC

該怎麼如何使用VLC存取網路上的UPnP/DLNA伺服器上的媒體呢?打開 VLC 找半天沒找到選單在哪裡,只好求助 Google 大神。

找到的步驟如下:

  1. 開啟 VLC
  2. 在選單上選擇「察看(View)」
  3. 再選「播放清單 (Playlist)」
  4. 在左邊窗格選「通用隨插即用服務(UPnP)」
  5. 右邊窗格就會出現網路上的 UPnP/DLNA 伺服器,再點進去就可以看到囉。