都什麼年代了,本來應該不會再寫這種升級流水帳了,不過今天當作日記寫一下吧
因為今天有三件大事同時發生,總覺得該紀念一下
* 五個人的大法官自己只有比總共八人,最低門檻六人少一人,所以可以用緊急事*態做成決議
* 台北捷運有一個人丟煙霧彈後殺了三個人,傷了五個人
* 我今天才發現 Linux kernel 6.18 已經拿掉 iptables
大概幾個月前我就發現硬碟有聲音,但是因為使用很正常,所以一直很懶得去處理,大概一個月前才跑去檢查那顆發出聲音,並不是功能影響到我,而是聲音實在讓我太抓狂了。
研究了半天,想說最近 SSD 和 DRAM 都狂漲,剛好看到美亞有黑五特價 Seagate IronWolf Pro 12TB 大概一顆 7500 左右,比 8TB 牌價還便宜,也比我現在用的 Toshiba 大了一倍,再瞄了一下台灣的價格大概都在 11500 左右,想想不想研究了,踩雷就算了吧
訂購中間可以感覺到美亞的落後,光出貨就花了十二天,沒有運貨途中資訊,讓常常買淘寶的我覺得 Amazon 真的是不行,雖然是黑五特價週,但是也太慢了吧
更換的時候我會順便升級系統,就碰到一堆問題
Genkernel dmraid 編譯錯誤
跑 genkernel 會出現 dmraid 的錯誤訊息
misc/file.c: In function 'rw_file':
misc/file.c:64:19: error: initialization of 'ssize_t (*)(void)' {aka 'long int (*)(void)'} from incompatible pointer type 'ssize_t (*)(int, void *, long unsigned int)' {aka 'long int (*)(int, void *, long unsigned int)'} [-Wincompatible-pointer-types]
64 | { read, "read"},
| ^~~~
misc/file.c:64:19: note: (near initialization for 'rw_spec[0].func')
In file included from /usr/include/unistd.h:1217,
from ./internal.h:24,
from misc/file.c:8:
/usr/include/bits/unistd.h:26:1: note: 'read' declared here
26 | read (int __fd, __fortify_clang_overload_arg0 (void *, ,__buf), size_t __nbytes)
| ^~~~
misc/file.c:65:19: error: initialization of 'ssize_t (*)(void)' {aka 'long int (*)(void)'} from incompatible pointer type 'ssize_t (*)(int, const void *, size_t)' {aka 'long int (*)(int, const void *, long unsigned int)'} [-Wincompatible-pointer-types]
65 | { write, "writ"},
| ^~~~~
misc/file.c:65:19: note: (near initialization for 'rw_spec[1].func')
/usr/include/unistd.h:378:16: note: 'write' declared here
378 | extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur
| ^~~~~
misc/file.c:79:18: error: too many arguments to function 'rw->func'; expected 0, have 3
79 | else if (rw->func(fd, buffer, size) != size)
format/ddf/ddf1.c: In function 'check_rd':
format/ddf/ddf1.c:891:25: warning: comparison between 'enum type' and 'enum status' [-Wenum-compare]
891 | return rd->type != s_broken;
| ^~
format/ataraid/hpt37x.c: In function 'hpt37x_log':
format/ataraid/hpt37x.c:353:19: warning: taking address of packed member of 'struct hpt37x' may result in an unaligned pointer value [-Waddress-of-packed-member]
353 | for (el = hpt->errorlog; el < hpt->errorlog + 32; el++) {
| ^~~
問了 Gemini 和 DeepSeek 後的結果都是
簡單來說,dmraid 這段程式碼非常老舊,它的函數指標定義不嚴謹。在舊版編譯器中,它把函數定義為 (void)(不接受參數)但卻傳入了參數,以前編譯器可能睜一隻眼閉一隻眼,但現在的編譯器(如 GCC 14)預設將這種「指標類型不相容」視為 Error (錯誤) 而不是 Warning,導致編譯失敗。
以下是修復方案,你需要修改原始碼中的 misc/file.c 檔案。(下略)
總之就是花了一點時間找,但是 AI 不識 genkernel ,所以也無從改起,看了一下 genkernel 是採用自己設定 package 自己編的方式,而沒有從 portage 將 patch 拿過來用,所以會 compile 錯誤。不過查了一下 dmraid 最後的 package 是 2010 年 release ,現在應該沒有人用 dmraid ,都是用 mdadm ,之前放在設定檔內應該是相容性的問題,在 /etc/genkernel.conf mark 掉 dmraid 就可以了。
init[1]: Id “f0” respawning too fast: disabled for 5 minutes
這個並不是這次升級的錯誤訊息,而是一直出現在我系統內的,問 GPT 的結果是
這通常發生在 /etc/inittab 中定義的某個終端機(TTY)或服務(識別碼為 f0)嘗試啟動但立即失敗,導致 init 陷入不斷重啟的無窮迴圈。
1. 找出 f0 是什麼
開啟 /etc/inittab 檔案,搜尋 f0 這一行:
grep "f0" /etc/inittab
常見的內容可能如下: f0:12345:respawn:/sbin/getty 9600 ttyS0
2. 常見原因與解決方法
序列埠設備不存在 (Serial Port): 如果 f0 指向的是 /dev/ttyS0(或 ttyUSB0),但該硬體沒插好、驅動沒掛載或在虛擬機中未配置,getty 就會噴錯並結束。
解決:若不需要該序列埠,在該行最前面加上 # 註解掉。
波特率 (Baud Rate) 錯誤: 設定了硬體不支援的速率。
解決:檢查設定是否為正確的 9600 或 115200。
執行檔路徑錯誤: /sbin/getty 或指定的程式路徑不存在。
解決:確認檔案路徑正確,或改用 agetty。
3. 套用變更
修改完 /etc/inittab 並存檔後,不需要重新開機,執行以下指令讓 init 重新讀取配置:
Bash
telinit q
查了一下果然如此,不過上一代的 GPT 就不知道是什麼,主要是我現在 f0 那一段的 ttyAMA0 不知道為什麼不見了,這個是 ARM 常見的 console ,可能要花時間再查一下問題
Linux kernel 6.18 不支援 iptables
這個我比較崩潰,原來的 kernel 是 6.12 ,換到 6.18 之後感覺天都蹋了,想到我學 iptables 的時候那時候還是 ipchains 的尾聲,想想都快 20 年了,整天與 iptables 為伍,都知道要怎麼下指令和 debug ,但是現在僅僅只有 nft 了,如果你的 iptables 僅有 firewall ,還是可以用 iptables-nft 做轉換,但是如果是有一些特別的指令,像 TCPMSS 之類的,那還是建議改用 nft
還好這年代有 GPT ,直接餵 Gemini 和 DeepSeek ,DeepSeek 吐出來的比較簡潔,所以我就用 DeepSeek 產出的,因為我的網路稍複雜,產生出來的還是有些小問題,不過看了一下就知道怎麼改,問題不大
問題比較大的像是這行,這個 nft 有自己的指令不吃,而且也很難整合進原來的 nft table 內,我碰到的是不知道為什麼 iptables 都會重新產生一次,或是完全無法用,最後還是放棄回去用 nft
$IPTBIN -i $i -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
還好第二次就比較順了,但是有個奇怪的點是,我的 sysctl 內的 ip forward 設定跑掉了,不知道誰偷偷改了
沒了 iptables 好失落啊,感覺什麼東西離我而去
想當年做 Hardware NAT 的時候天天跟 iptables / Linux kernel tcp stack 為伍,我是有感情的😭😭😭😭😭
其它像什麼 virbr0 消失就要吃自己的狗食了 [Gentoo] virt-manager/libvirt virbr0 doesn’t exist

發佈留言