ufw in archlinux

最近想試試看 wireguard,看了文件,都會提到用 ufw/firewalld 來配置網路,就想說,自家的 archlinux 都沒用防火牆,是不是該來用一下比較好。經過找 archlinux 文件以後,發現 archlinux 其實很自由,可以自由選 firewalld 或 ufw。在公司因為用 RHEL8 ,都是用 firewalld ,為了平衡一下還有家裡的其他電腦,決定就用 debian/ubuntu 的 ufw 。

ufw 的全名是 Uncomplicated firewall ,archlinux wiki 裡就有詳細的說明文件:https://wiki.archlinux.org/title/Uncomplicated_Firewall

安裝方法

用 yay 或 pacman 安裝

yay -S ufw

設定

安裝好以後,先不要啟用,要先設定。

sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow ssh

這幾行的意思是說,允許出去,禁止進來,只允許 ssh 服務的連線進來。

接著啟用

sudo ufw enable
sudo systemctl enable --now ufw

然後可以用 sudo systemctl status ufwsudo ufw status 檢查狀態。

接下來因為自己有用 http/https/gitlab/samba/squid 服務,也有使用 docker,所以要額外設置。

先允許 http/https 連線。

sudo ufw allow http
sudo ufw allow https

設置 docker 規則,docker 的部份有人寫好了,所以安裝套件以後再啟用即可。(ufw and docker),啟用以後,docker 容器有 expose 的 port 就會自動 allow。

yay -S ufw-docker
sudo ufw-docker install

再來是 samba,這也是有人寫好套件

yay -S ufw-extras
sudo ufw allow from 192.168.11.0/24 to any app samba

最後是 squid

sudo ufw allow from 192.168.11.0/24 to any port 3128 proto tcp

到這邊就設定完了,沒遇到什麼特別狀況。

參考資料

archlinux keyserver

昨晚用 yay 更新套件時,出現 gnupg key 問題,說套件無法驗證,試著用下面指令去更新 key 也有問題。

sudo pacman-key --refresh-keys

後來查到這篇:gpg – sks-keyservers gone. What to use instead? – Unix & Linux Stack Exchange

文章說可能是 keyserver 問題,就去改 /etc/pacman.d/gnupg/gpg.conf 裡的 keyserver,改了還是有問題。

最後才找到這篇:PSA: you need to update your keyserver : archlinux ,提到不是只改一個地方就好,以下這幾個位置的設定檔都要改。

  • /etc/pacman.d/gnupg/gpg.conf
  • ~/.gnupg/gpg.conf

我後來是修改為 keyserver hkp://keyserver.ubuntu.com ,經過這樣修改以後,就可以順利更新 key 跟套件了。

ArchLinux 的 Reflector

Reflector 是一個用來更新 mirrorlist 的程式,前幾年看到的時候就用了,挺不錯的。最近想起來,但怎麼樣也找不到筆記,我想應該是沒有紀錄到吧,特別寫這篇來記著。

ArchLinux 維基的 Reflector 頁面寫的蠻清楚的,就不再贅述,下面主要紀錄我做的設定。

安裝

yay -S reflector

新增檔案:$HOME/bin/renew_mirrorlist ,這主要是方便手動更新用的。

#!/bin/bash
sudo /bin/sh -c "reflector @/etc/xdg/reflector/reflector.conf && rm -f /etc/pacman.d/mirrorlist.pacnew"

編輯檔案:/etc/xdg/reflector/reflector.conf ,這個檔案會被 reflector.service 跟 reflector.timer 使用到。

# 存到 /etc/pacman.d/mirrorlist
--save /etc/pacman.d/mirrorlist
# 只用 http 跟 https 的來源
--protocol http,https
# 從台灣、日本的伺服器來挑
--country Taiwan,Japan
# 挑最近更新的 10 個伺服器
--latest 10
# 用分數來排序
--sort score
# 最近 24 小時內同步完的伺服器
--age 24

新增檔案:/etc/pacman.d/hooks/mirrorupgrade.hook,這會在 pacman 更新 mirrorlist 時去執行。這同時也要修改 /etc/pacman.conf,把裏面 HookDir 那行的註解拿掉。

[Trigger]
Operation = Upgrade
Type = Package
Target = pacman-mirrorlist

[Action]
Description = Updating pacman-mirrorlist with reflector and removing pacnew...
When = PostTransaction
Depends = reflector
Exec = /bin/sh -c "/usr/bin/reflector @/etc/xdg/reflector/reflector.conf && rm -f /etc/pacman.d/mirrorlist.pacnew"

最後再啟用定時更新

systemctl enable reflector.timer
systemctl start reflector.timer

ArchLinux更新出現signature is unknown trust

今天在更新 ArchLinux 時,出現了類似這樣的錯誤,導致後續沒辦法繼續更新。

signature from "Andreas Radke andyrtr@archlinux.org" is unknown trust

本以為會像 Ubuntu 一樣,需要去 gpg server 找金鑰匯入,不過搜尋以後找到這篇:Update / pacman / keyring problem ,發現很容易就可以解決。

只要先執行下面這行,先去更新 keyring 套件即可

sudo pacman -S archlinux-keyring

棄用 yaourt,改用 yay

原來 archlinux 的 yaourt 已經過時了,我參考這篇 Yaourt is Dead! Use These Alternatives for AUR in Arch Linux,換成 yay,用法跟 yaourt 差不多。最新的 AUR 替代品可以參考 Archlinux 維基:AUR_helpers ,只是官方不建議使用這些工具,還是希望大家熟悉手動建置套件的程序。

先移除 yaourt

$ sudo pacman -Rn yaourt package-query

再參考 yay 的安裝說明來安裝

git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

用法跟 yaourt 差不多

# 更新套件列表並更新目前已經安裝的套件 (包含 AUR)
yay -Syu
# 安裝套件
yay -S foo
# 尋找套件
yay -Ss foo
# 取得遠端套件資訊
yay -Si foo
# 目前系統套件狀況
yay -P --stats

搞定以後,參考 yay -P –stats 的建議,移除了 aur 沒在維護的套件。最後跟 yaourt 說聲再見,謝謝 yaourt 過去幾年的照顧。

webui-aria2-git

aria2 的 web UI,紀錄一下怎麼使用。

  1. 安裝:yaourt -S webui-aria2-git
  2. 啟動 aria2d:放在 /usr/lib/systemd/user/ 下的 service 檔案,需要額外加上 –user 參數,所以要啟動得用 systemctl –user start aria2d 。要確定是否有啟動,可以用 netstat 檢查 port 6800 是否在 listening 狀態。
  3. Web UI 部份的啟動:主要是靜態 HTML,所以只要調整 Web server 的設定,指向 /usr/share/webui-aria2/ 就可以了。

提高安全性:

  1. 修改 /usr/lib/systemd/user/aria2d.service ,在 ExecStart 那行後面加上 –rpc-secret=<your_token> ,–rpc-secret 是加上 token。
  2. 打開網頁時,在連線設定裡填入步驟 1 的 token 。

參考資料:

minidlna + rmvb 與 archlinux pkg

minidlna 預設是不找 rmvb 檔案的,網路上有人已經加上 patch (让 minidlna 支持 rmvb、gb2312 mp3 标签) 了,只是那是在 1.0.23 上做修改。現在已經 1.1.4 了,所以我參考了它的 patch,幫 1.1.4 也做了一次。

另外就是第一次在 Arch Linux 上做 package,基本上有 PKGBUILD 檔案就沒啥問題了。minidlna 的 PKGBUILD 可透過 git 下載:git clone git://projects.archlinux.org/svntogit/community.git ,接著就是修改 PKGBUILD,我改了以下項目:

  1. 在 source 添加新檔案,就是新的 patch 檔案
  2. 因為有新檔案,md5sums 也需要用 md5sum 去取得 patch 檔案的校驗碼,然後填到這裡
  3. prepare() 的最後,加上 patch -i $srcdir/999-realmedia-support.patch 。
  4. 改 pkgrel ,這是方便自己辨識用,反正改一個比原來大的數字就可以。

修改完以後,執行 makepkg ,就可以得到 .xz 的檔案,用 pacman -U xxx.xz 就可以安裝了。

後記:重新啟動 minidlna 之後,發現 rmdb 的檔案還是沒有納入。根據 Log 去追程式,才知道 minidlna 是拿之前產生好的 sqlite3 資料庫裡的資料去回應,知道原因之後,就好解決了,試著去 touch 所有的 rmvb 檔案,觸發 minidlna 的 inotify ,這樣 minidlna 就會把這些檔案納入資料庫裡了。Log 的層級可以在 minidlna.conf 裡修改,例如 log_level=general=debug,artwork=info,database,inotify,scanner,metadata,http,ssdp,tivo=warn ,而程式裡輸出 Log 的函式則是 DPRINTF。

BubbleUPnPServer

Server 部份是免費,主要是輔助 app transcoding (轉換格式)用的。
Windows/Linux 都可以安裝,安裝指南:http://bubblesoftapps.com/bubbleupnpserver/

依照指南,有提供 Ubuntu/Arch Linux 以及其他 distro 的安裝方法,在 Arch Linux 下要先裝 ffmpeg,這是用來轉換格式用的。用 yaourt -Ss 搜索 bubbleupnpserver,就可以找到,但結果顯示 out of date ,後來我就沒有用 yaourt 來安裝。
後來直接拿 tarball 來手動安裝,tarball 裡有提供 script 與 jar,這很簡單,Java 跨平台,再搭配 supervisord 就可以在開機時自動啟動。

因為 BubbleUPnPServer 並不是 Media Server,它算是一個 Proxy Server,所以不會跟 minidlna 衝突,但你用 BubbleUPnP app 找網路上 DLNA Server 時,會看到兩個,一台是 BubbleUPnPServer,一台是 MiniDLNA Server。指南裡是說,他可以幫你修正原來 DLNA Server 傳錯的資訊。

BubbleUPnPServer 啟動以後,可以用 Web 進去修改設定,使用的 Port 有兩個:

  • udp 1900
  • TCP 58050 (http), 58051 (https)

License 也是一個 app,在 Google Play 上可以找到,是個需要付費的 app,關鍵字一樣是 BubbleUPnP ,或是用 com.bubblesoft.android.bubbleupnp.unlocker 來找就能找到。

fbterm

ArchLinux 裡安裝 fbterm 的方法很簡單,就 pacman -S fbterm 完以後,照說明做就行了。執行 fbterm 以後,中文卻沒正常顯示,猜想應該是沒指定字型的關係。所以我輸入 exit ,退出 fbterm,接著加裝了 wqy-microhei-lite :pacman -S wqy-microhei-lite ,接著看 man fbterm,參考裏面的說明,去修改 $HOME/.fbtermrc 裡的 font-names (.fbtermrc 在第一次執行 fbterm 時,會自動產生),將其改為 WenQuanYi Micro Hei Mono Light,並調整字體大小,然後重新執行一次 fbterm 就可以了。

在 pacman -Ss fbterm 時,有看到 fcitx-fbterm,所以 fbterm 也可以使用中文輸入法,目前只有這個。