Skip to main content

是圖床欸

· 2 min read

圖床這個東西大家應該都有用過,最有名的就是 imgur,但因為我一直覺得把圖片放在上面有點不太好,而且聽說最近有時候也會不能用。我自己有看了伊果的這篇,但因為裡面是使用指令工具來上傳,這來用起來就有點不爽的感覺。

昨天半夜我就突然毛起來寫一個圖床,我當然知道網路上有很多人做好的,但是因為我想要跟 R2 深度集成,所以我就用 Nextjs 寫了一個放在 Worker,這樣使用起來也更流暢。整個做完大概兩個半小時,有點久就是了,主要卡在 Presigned Url 那裡。

UI 的話我用 Bootstrap 套一套而已,自己用的看的順眼最重要。

UI

之前的圖片我是開一個 bucket 再用 AList 去掛,上傳前我還會特別分資料夾這樣,但是因為我後來真的覺得有點麻煩,但是直接丟檔案又不重新命名好像又不太好,因為這樣沒什麼規律看起來很亂。

所以我就把之前的所有圖片都上到圖床,這樣就很乾淨了。搬的時候真的很順手,我覺得 UX 設計的也不差。

Cloudflare 能玩的真的很多,這個算是我想做很久了,但一直沒有時間做或者說懶的做。現在有了這個終於讓圖片有一個比較好的家了。

雙人成行

· 4 min read

就跟之前的暑假一樣,我都會選幾個遊戲來玩玩,不然平常是真的有點太忙了,而今年我玩的分別是「瑪利歐vs.咚奇剛」和「雙人成行」。而這篇就來講講雙人成行的心得吧!

接下來的內容可能會有爆雷,但這個遊戲我覺得也沒有什麼不能說的點,因為就是經典的老派劇情。

值不值得買

最重要的先說在前面,我覺得超值!

這個遊戲是我朋友在 Steam 上買的,然後和他一起玩這樣,買的時候很剛好的在特價,大概花了 300 多台幣。如果想玩的人也可以等等看,這個價格是完完全全對的起這個遊戲的。

好玩又好看

先來說說操作的部分,前面我自己有用鍵盤玩了一下,後面因為我有點懶所以我就換成手把。兩個都是完全可以正常玩的,而且也都玩的很開心,但我個人因為手把比較順手一點。像我朋友就是用鍵盤跟滑鼠玩,也玩的非常的開心。

這個遊戲我自己覺得畫面跟操作都很用心,很多的玩法都很有創意。這個遊戲會讓我想到之前玩過的瑪利歐銀河系系列,那種感覺真的滿像的。

整個遊戲我自己玩了 13.5 小時,非常的扎實。中間完全不會有空檔的感覺,如果時間的夠的話一次玩完應該真的很爽。

下面是幾張我真的覺得很美或者很經典的截圖。

遊戲內截圖 遊戲內截圖 遊戲內截圖 遊戲內截圖 遊戲內截圖 遊戲內截圖 遊戲內截圖 遊戲內截圖 遊戲內截圖 遊戲內截圖 遊戲內截圖

光是最後的那個黑洞就完全值這個價格了!美術的部分真的滿分。

小結

這應該算是我第一個玩的雙人合作遊戲吧!之前有玩過瑪利歐,但是那個比較不需要那麼多的合作。從第一關玩下來我覺得沒有什麼重複的地方,每關的玩法都有變化。而且最重要的是難度是有挑戰的但是又不會說很難,還有另個重點是死掉之後不會要整個重玩,這點非常的加分,一直玩也比較不會有挫折感。

整個遊戲玩下來真的很滿意,我真的找不出有什麼缺點。這個遊戲還有出了三代,之後特價就換我買了,真的很期待!

智齒去死

· 3 min read

上星期的今天我去拔了一顆我想要拔很久的智齒,是位於左下最後面的那顆,然後剛好很該死的它是水平的,換句話說它倒下來了。

我會想要拔的原因是我在外面吃東西常常會卡肉之類的在裡面,我真的覺得很煩,我每次要清的時候都超難用,所以這個暑假我就決定要拔了。

過程

水平智齒用想的也知道超級難拔,用了鋸子還有鎚子之類的一堆工具才用出來,最後的時候還縫了兩次,前前後後用了一個小時,真的超扯。回到家之後我就開始覺得很痛,因為麻藥在退很快我不知道為什麼,我早上去拔到了中午的時候真的痛到炸開,後來有吃了一下止痛藥才止住。

接下來三天就是要定時一直吃止痛藥,因為我上面的智齒還沒有拔,所以會一直咬到腫起來的肉,如果沒有吃藥咬到真的很痛,然後臉直接腫起來,但是吃東西的時候還好有止痛藥所以沒有什麼問題。

終於

大概到了第四天就不會痛了,只是有時候還是會有一點點微小的痛而已,這個就很還好。話雖然是這麼說,我忘了哪天晚上不知道是咬到還是怎樣直接痛醒,但醒來看也沒有怎樣就是了,超好笑。

寒假的時候我應該會再去拆最後一顆智齒,但這個因為是直的應該就沒有什麼難度了。後天就要去拆線了,應該也沒什麼問題了,智齒到底為什麼會被設計在人類身上,這點我真的不懂。

EAP-TLS 設定不當漏洞

· 7 min read

免責聲明

本文章所有教學和工具僅限於合法測試與學術用途,請勿用於未經授權的系統!

EAP-TLS 是什麼?

EAP 這個東西大概從我高中的時候就開始出現在我的視野裡。以台灣學校常見的熱點 eduroam 為例,驗證的方法就是使用 802.1x,而 802.1x 協議可以使用的驗證方式可就多了。而這次我要特別講的是 EAP-TLS,這個方法目前我沒有遇過學校的官方指南是使用這個方法的,大部分都是使用如 PEAP 加上帳號密碼的方式進行驗證。這裡特別說一下 802.1x 不限於無線網路,只是常見於無線網路但像是 VPN 或者是乙太網路都可以要求使用者進行驗證。

EAP-TLS 的驗證是 mTLS,也就是說雙方都需要有憑證才能連接。以下提供網路的裝置如路由器、AP、VPN 伺服器等我會統一稱為 SP(Service Provider),而使用這些服務的人我會稱為使用者。基本上現代的驗方式 SP 都一定會有憑證做為加密,就如同我們連接到網頁伺服器會有憑證用來加密傳輸過程中的內容一樣,使用者驗證的帳號和密碼也同樣需要加密才不會被中間人給攔截。而在 EAP-TLS 使用者的憑證則代替了帳號和密碼,變成使用者要提供的是憑證。

一般來說提供驗證的伺服器稱為 IdP,而走的是 Radius 協議,而 Radius 裡面裝著的就是要驗證的資料還有方法等等。Radius 伺服器有很多種架設方式,常見的像 Freeradius 或者是 Windows Server 內建的伺服器,而這個漏洞不一定在每一種伺服器上都能用。

憑證怎麼驗證?

光有憑證還不夠,重點在於憑證上面的欄位,下面這裡以我自己的域名 worldofwheat.cc 的憑證為例。下圖是我從 crt.sh 抓下來的。

Certificate:
Data:
Version: 3 (0x2)
Serial Number:
0f:21:4a:5e:d3:fc:98:ee:df:a3:82:cf:42:a6:dd:11
Signature Algorithm: ecdsa-with-SHA256
Issuer: (CA ID: 204407)
commonName = Sectigo Public Server Authentication CA DV E36
organizationName = Sectigo Limited
countryName = GB
Validity
Not Before: Jul 30 00:00:00 2025 GMT
Not After : Oct 28 16:23:47 2025 GMT
Subject:
commonName = worldofwheat.cc
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:61:af:b1:c2:10:55:14:b6:69:97:40:bd:ab:0a:
93:e3:c2:42:c0:fb:a9:05:b1:19:d4:a5:13:7a:b5:
5f:f3:3d:54:cf:4e:73:4b:35:8f:a0:07:c1:e0:8e:
eb:b2:2f:ae:28:fe:26:b9:fd:2d:15:51:b0:6e:af:
97:18:72:4d:3f
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Authority Key Identifier:
keyid:17:99:A8:04:C1:6F:E4:2D:70:A8:0A:10:3D:03:D3:E9:1A:B8:26:63

X509v3 Subject Key Identifier:
10:5E:89:1D:12:E6:37:25:22:9B:F5:A0:0D:A4:55:CB:E1:F8:E5:E8
X509v3 Key Usage: critical
Digital Signature
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Certificate Policies:
Policy: 1.3.6.1.4.1.6449.1.2.2.7
CPS: https://sectigo.com/CPS
Policy: 2.23.140.1.2.1

Authority Information Access:
CA Issuers - URI:http://crt.sectigo.com/SectigoPublicServerAuthenticationCADVE36.crt
OCSP - URI:http://ocsp.sectigo.com

CT Precertificate SCTs:
Signed Certificate Timestamp:
Version : v1 (0x0)
Log Name : Google Xenon 2025h2
Log ID : DD:DC:CA:34:95:D7:E1:16:05:E7:95:32:FA:C7:9F:F8:
3D:1C:50:DF:DB:00:3A:14:12:76:0A:2C:AC:BB:C8:2A
Timestamp : Jul 30 17:27:48.910 2025 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:46:02:21:00:DC:DC:48:8A:2F:AF:11:CA:F3:E3:02:
99:C7:74:10:0F:57:25:E0:7C:EA:7A:07:25:89:12:E6:
5D:33:D8:3D:F5:02:21:00:93:B2:FA:6C:5A:69:21:94:
B2:C0:CA:A6:66:70:B0:79:33:E4:AB:CF:24:AF:BE:88:
18:A0:53:C1:23:06:63:13
Signed Certificate Timestamp:
Version : v1 (0x0)
Log Name : Let's Encrypt Oak 2025h2
Log ID : 0D:E1:F2:30:2B:D3:0D:C1:40:62:12:09:EA:55:2E:FC:
47:74:7C:B1:D7:E9:30:EF:0E:42:1E:B4:7E:4E:AA:34
Timestamp : Jul 30 17:27:48.810 2025 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:46:02:21:00:85:0D:EA:BE:80:09:3D:A3:D0:A7:33:
E4:D5:C2:C8:B5:AA:88:AE:EC:67:81:FB:DD:64:FF:40:
3F:DB:35:AB:67:02:21:00:E3:0E:3D:7A:4E:5A:B9:6B:
BD:5D:BC:5E:E6:31:D0:31:66:16:3E:75:52:0C:E3:3D:
0A:C2:84:51:B0:0A:D8:80
X509v3 Subject Alternative Name:
DNS:worldofwheat.cc
DNS:*.worldofwheat.cc
Signature Algorithm: ecdsa-with-SHA256
30:44:02:20:21:78:e4:0f:2a:87:e6:41:ef:31:a8:17:e7:6b:
cd:a3:e7:45:65:e2:1f:53:59:d8:58:56:77:19:fc:8d:cb:a4:
02:20:32:ab:2b:52:de:43:1e:74:2d:2a:8c:08:aa:e6:f0:41:
3f:fb:e2:1b:46:e7:54:28:17:72:61:1f:e5:58:3e:38

其實使用者和 SP 會互相驗證的地方差不多,但使用者會再多驗證 SP 的 commonName(CN),要確保域名是正確沒有問題的,值得注意的是這裡的域名是會因為不同的連接方式而有差異。例如使用 WPA-Enterprise 連接的話則要自己輸入域名,不輸入的話隨便一張憑證都能騙過去。

但這個漏洞的問題不是出在 CN,而是出在 Issuer,可能會覺得有點奇怪,明明只是簽的人有什麼問題嗎?確實如果把這張憑證放在 SP 或者是網頁伺服器沒什麼問題,但如果使用者拿著這張憑證做為 EAP-TLS 的憑證給 SP 那就漏洞就出現了。

信任鏈

下面這裡以 Let's Encrypt 的憑證為例,可以發現到根憑證有兩張,而下面又分了好幾張的中間憑證。而這裡會發生的問題就是如果 Radius 伺服器所信任的憑證是某一張根憑證或者中間憑證,而被其所簽發的子憑證都可以被信任。

let's encrypt 信任鏈

換句話說如果 Radius 憑證伺服器信任了 ISRG Root X1 這張憑證,那只要隨便拿一張根憑證是 ISRG Root X1 的就都可以順利驗證。

模擬環境

環境

我自己使用了 strongSwan 結合 Freeradius 來模擬這個漏洞,因為這樣方便架設也方便測試。

這裡使用的 strongSwan 做為 SP,提供的是 IKEv2/IPsec 服務,也就是 VPN。而 Freeradius 做為驗證伺服器,走的就是 Radius 協議。

快失效了

在寫這篇文章的時候其實這個洞也快要被修好了,可以注意到這篇在 Let's Encrypt blog 的文章,細看就會發現到有一個用途稱為「TLS Client Authentication」會被刪掉,我個人推測應該就是為了處理這個漏洞,但不同的 Radius 伺服器會不會驗證這個特性就有待考查。

關鍵基礎設施資安課程上課心得

· 7 min read

就在上個星期四我終於從這個課程畢業啦!前前後後加起來也有個一個半月,學到的東西也是不少。我自己看網路上好像也沒有人分享心得,那就我來寫一篇吧!雖然我聽說這課我好像也是最後一屆了。

起程

先來說說我為什麼會進來這個課吧,一開始的時候就剛好在 SCIST 的頻道看到 Curious 在說這有課程,我當時看到免費就想都沒有想就加入了,而且重點是這個課還可以上到工控的東西,這種東西對我有非常大的吸引力,於是二話不說我就加入了這個課程。

在上課之前有一次試聽的課,當時好像有很多高中生吧,然後就讓我們玩一下設備這樣,還有去到他們六樓的展示區,這裡有很多高仿的台電台水內部在使用的設備。

之後過了兩個月來到了八月份,這個課就開始了

第一階段

第一天有個非常棒的餐會,早上的時候有上一點點東西,之後就請我們到一個禮堂,這裡是上一屆的學生,他們會在這天拿到結訓的證書,我也幻想著明年就換我站到上面去了。結果典禮之後就請我們到一個地方吃飯,老實說以學校請的中餐來講真的滿豪華的,當時是有點像吃到飽這樣。就很多東西可以吃,那天也跟上一屆的畢業生聊的很開心。

在餐廳內的相片

這一個階段非常的硬,因為要連續上三個星期的課,而且都是早九晚五的上。我自己上課的時候就有睡著過不小次,因為內容真的滿無聊的,但是學到的東西也是真的很多。

這個部分我自己覺得會著重在網路安全和密碼學這塊,大部分的內容都在講憑證相關的,不然就是通訊協議等等,然後一定要會架虛擬機,如果不會的話大概後面的課也都不用玩了,會有教學但是常常會遇到怪怪的 BUG,要自己學會修。

比較特別的是最後會有一個 PLC 設計的課,這個課要自己設計出一套系統,我有點忘了當時我們是做什麼了,反正這個是小組作業,如果有學過 PLC 的話是滿簡單的。這也是第一次接觸工控箱,如果完全沒有學過的人應該要花的時間才能搞懂。

上課實拍

上完這個階段會有一次的免費考證照機會,是考管理相關的證照,我還有去上培訓的課,但是因為一些事後來就沒有去考了。

第二階段

這個課會排在寒假,我記得只有兩周,上課的東西我自己覺得沒有到很充實。前一周在上 Webduino,簡單來說就是 Arduino 但是用積木來設計程式,非常非常的難用而且很慢,這個整個課程我覺得最糟的課。

另一個課程就真的很好玩,是我們學校的教授來教的,有講到很多的工具,有些我是真的不知道,還有 Nmap 的使用教學。Nmap 在整個課程會聽到三到四次,因為這個工具真的很基本就是了。

第三階段

這個階段只會有一周,要做的是選一個你喜歡的主題來做出一個小東西,我自己選的是電網。最後要做的事有滿多選擇的,像是訓練 IDS 的模型或者是實際上對工控箱攻擊。上課的重點一樣是虛擬機,架的起來就成功一半了,之後就是學習怎麼訓 IDS 的模型之類的。

我在這個階段學到最多的是超級多抓包的技巧,這個在未來做別的研究也一定用的到,收獲真的很多。

小結

老實說這個課程比較可惜的是上的東西沒有到很深,但換個想法就是這個課程滿適合給剛接觸的人來上的,我自己看到有很多是沒有基礎的也能做的很好。還有另個可惜的是上課內容比較沒有連貫性,重複的東西會一再的出現,但我自己覺得應該也不是這個課能解決的,因為每次請的教授來的地方都不一樣,所以都會假設大家什麼都不會這樣。

這一個半月說短不短說長不長,剛加入的時候想到還有這麼多周真的有點想要放棄,而且每天都是九點上課,所以都要很早起床,但上完之後也會覺得有點感慨,因為這個課程也辦了三年了,我自己也是最後一屆上這個課了,對於剛接觸資安的人我是很推薦這個課的,但大概也沒機會了。

每次開始上課我都會拍下放在計網中心外面的這個告示板,看到還是能回想到那些時光。

入口的告示牌

終於結束了!一年半的普拉斯英文心得

· 10 min read

這個課程應該是南台獨有的東西,當初算是被老師騙進去,而且還誤打誤撞進了 A 班,也就是全部裡面最高等的班。終於在這學期全部完成啦!完成之後會拿到下面這張表格,填一填就完成了。

通識必修學分認定申請書

我自己進得是普通組,聽說還有一個叫海外組的,但這個我身邊只有一個人加了半年就退了,但聽說滿好玩的,好像都是外師的樣子。

普拉斯用簡單的一句話就是把通識課跟本來的英文課都換成專屬的英文課,教學內容如果不加入這個課程的話是沒有機會學到的!但我也必需要這個課程不適用於所有的人,因為我身邊有兩個朋友都是加了一學期就退掉了。

好處

先來說好處,學到得英文一定會比較一般人多非常多,而且學到的都真的滿實用的。如果你覺得通識課滿無聊的,而且教學的內容相對用不到,那這個課程「可能」你會喜歡。

以上大前題是你喜歡英文,不然如果真的加了之後大概也只會退掉而已,而且還會浪費掉一個學期的修課時間,也就是說那學期的課都會沒修到,要之後再找時間補。

我自己對通識課沒有什麼特別的看法,而且我自己也覺得這幫助我很多,我會加入完全是意外。

壞處

我自己覺得最大的壞處是認識的人會相對的沒那麼多,通識課還有機會認識其它系的,但普拉斯課程從我進來到退出的人雖然說有變,但是大家基本上都是不說話的,我只有認識到一個人會跟我聊天的人而已。

還有像我自己加的是 A 班,所以課程壓力比較大,我自己覺得比我本系學的東西還要多滿多的,但英文進步也是真的很快。

經驗

第一學期

我自己覺得最硬的是我剛加入的那學期,也就是一下的時候,那個時候的課程主要有三個。

英文文法與寫作這節課真的滿好玩的,當時是給楊老師帶,有給我們很多很有用的講義,這些我到現在都還有留著,因為整理的真的滿好的。上課方式是會有幾節要寫作文,寫完之後會先給同學交換改,改完之後再給 AI 改,最後老師自己會再看一次,我覺得這樣學習是真的滿快的。考試內容不用什麼擔心,這門課要準備課本,因為考前會說大概哪裡會考,就準備一下就行了,但要注意段考也要寫作文,但如果有照老師上課講的格式寫,這個完全不用擔心。

英文聽講演練這門課的上課也算是有趣,我記得有幾節有找外師來跟我們聊天。這門課有個比較麻煩的是期中考是要準備一場活動,我不確定現在還是不是這樣,但我這藉要在一個叫 Fun Fair 的活動當關主。

Fun fair 活動當天拍照

我們的做法是印一堆閱讀文章然後用 Kahoot 讓人寫題目,但因為文章是隨便選的,大概也沒有人看完,所以就只要有進來就會給印章。

最後一門課是英文閱讀,這門課是真的真的非常無聊,我每節都一定會睡著,而且要背的單字非常的多,我自己是用 Anki 做卡片來背。段考的話就是單字加課文讀熟就沒問題了,只是單字有一點點多就是了。

第二學期

這學期就沒有之前的強度那麼高,但也多了很多要上台的時候,如果有恐懼的真的要想辦法課服。

英文聽講演練是給外師上,這外師真的滿有趣的又滿怪的老師,上課有時候會很突然的帶到他關注的新聞,跟上課內容無關,但是如果聽得懂的話滿有趣的,但前題是聽的懂。這門課有一次是小組上台,另一次是個人上台,我自己覺得都滿好玩的。段考的話一樣是考卷,上課其實沒有課本,但是有時候會帶到單字,就大概看一下就行了。

這學期的英文閱讀與寫作一樣是給外師上,但我這學期上起來的感覺滿空的,沒有學到什麼比較有用的東西,這只是我的個人意見!一樣有用 AI 改文章,但我覺得比較像是老師在實驗自己的 AI Agent。這門課我比較沒有什麼看法,相對無聊。段考就考作文,個人感覺給的滿甜的,分數都不低。

接下來還有一個新的課叫圓桌會,這門課的老師我非常喜歡,有可能是我這幾年來遇過數一數二好的老師,上課的內容滿有趣的,沒有課本就是一直帶最近的新聞或者是他準備的教材,大概一到兩周就要上台一次,會要回答問題,這個滿考驗功力了,但是講不好也沒關係。這門課完全沒有段考,就看平常的表現評分,但就算英文講不好也沒關係,但每次上台都要有出席就是了。

第三學期

到這學期就只剩圓桌會,上課的內容和之前一樣但是上台要回答的問題更難,上一個學期的我是都沒有準備稿子,但這學期的大概都要有想過才能回答,而且都是非常時事的問題。

自主學習

如果你有仔細看的話應該會發現到我沒有提到自主學習這門課,這門課是不需要實際上到教室上課,但是要定時交報告,這個直接看之前的作業說明。

一下:

一下自主學習說明

這裡特別提一下那個期未後測,因為當時我有去考多益可以扺免,當時全部的人都有去考,因此我不知道實際上難度如何。

二上和二下:

二上下自主學習說明

看起來有點恐怖對不對,但實際上完成作業的時間不到 30 分鐘,我一開始也是覺得很難,但因為都有給學習單,因此只要照著填就行了。

小結

這裡直接上我的成績

一下:

一下成績

二上:

二上成績

二下:

二下成績

我自己覺得還算不錯啦!也真的有學到東西,這篇也寫給未來的學弟妹,如果有其它問題非常歡迎來信詢問!

超爽的 AAA LIVE 專輯

· 3 min read

昨天終於借到了 AAA LIVE 專輯,今天一早整個超級開心,下午的時候我就重看了首爾場的巡演。

AAA LIVE 這張我聽了也超過十次了,我自己聽覺上最喜歡的是「Wanli万里」這首,因為節奏真的很洗腦。歌詞上我最有共感的是「Young Man」,這首我覺得不管平常有沒有在聽音樂,都值得去讀一讀它的詞。

而現場演出的風味完全不同,如果這張專輯真的很喜歡的話我推薦一定要去買實體的專輯來看看,主要是裡面的現場錄影真的很厲害。

開箱

整份專輯是用鐵盒裝起來的,跟常見的塑膠殼不同,裡面有幾張畫有抽象圖案的紙。當然最重要的是那三片光碟,其中兩片是音樂而另一片是現場錄影。

AAA LIVE 專輯外殼 AAA LIVE 專輯內容物

現場錄影

這張專輯最特別的點是裡面有一張藍光光碟,內容是 AAA 在首爾場的演出錄影,歌曲就是 AAA LIVE 裡面的歌曲,在 Youtube Music 可以聽到。

現場我最喜歡的是 VJ,很多都非常的有創意。其中一幕我很有記憶是用手機現場開 Spotify 來放歌詞。

new drug 這首歌截圖

整場表演非常完美,是我目前看過最厲害的現場,而整個舞台的燈光設計也非常的驚人。

舞台截圖 舞台截圖

特別感謝

感謝小陸願意借我這張專輯,之前在學校就有放過一次,但因為那次的喇叭音質整個爛掉。這次終於能好好的重看一次,非常的享受!

一次奇怪的 Ente Photo 自架 BUG

· 4 min read

Ente Photo 已經成為我的主力相簿軟體兩個月了,用起來比什麼 Immich 或是 PhotoPrism 什麼的都要好,但就在昨天的時候因為我在優化我寫的 deployment 檔,順便把一些 pod 轉成 deployment,結果轉完之後我就發現到為什麼 Ente 開不起來了?

我的 pod 一直卡在 ContainerCreating,通常第一個想到的就是用 kubectl describe pod 這條指令來看一下,結果我看到就是一切正常,成功的把 image 給 pull 下來,而且也沒有寫什麼問題。

到這了這裡我就去問了一下 Google 大神和 GenAI,兩邊給我的答案都差不多,像是什麼 PVC 掛載失敗、網路無法連接等等,但老實說這些我一看到就直接跳過了,因為我知道不可能是這些。我之前也有發生過這種錯誤,通常在第一步的時候用指令一看就會很明顯的看到了。

最後我想到的一個方法就是我把 deployment 裡面的 containers 一個一個拿掉,看看到底是哪裡卡住,這個方法也確實生效了。最後我發現到 minio 壞掉,好消息是發現了什麼壞掉,壞消息是我不知道怎麼處理。我進一步研究,發現是 minio 的 lifecycle 有問題。

lifecycle:
postStart:
exec:
command:
- sh
- -c
- |
#!/bin/sh
while ! mc config host add h0 http://localhost:3200 $(MINIO_ROOT_USER) $(MINIO_ROOT_PASSWORD) 2>/dev/null
do
echo "Waiting for minio..."
sleep 0.5
done
cd /data
mc mb -p b2-eu-cen

但到了這裡還不夠,我再次使用相同的方法,就是一點一點的刪,看哪裡可行就知道哪裡有問題,最後找到這段:

while ! mc config host add h0 http://localhost:3200 $(MINIO_ROOT_USER) $(MINIO_ROOT_PASSWORD) 2>/dev/null

等等,為什麼一個迴圈會突然壞掉?這個問題讓我想了很久,因為 Ente 也用了兩個月了,而且更氣人的是我發現到只要使用 systemctl restart k3s.service 把 k3s 整個重啟,一切就像什麼事都沒發生一樣,所有的 log 一切都正常。

接下來我就仔細的想了一下,我想到會不會是 minio 有更新?因為我在一次又一次的檢查我的 deployment.yml 檔的時候,我發現到我的 minio 沒有固定版本。如果有固定版本會像下面這樣:

有固定版本的 minio 範例

可以發現到有一段 RELEASE...30Z,那個就是固定版本,而之前是沒有的,因此我就去 docker hub 看看,果然是昨天有新的版本。

新版本的 docker hub image

因為預設 k8s 會自動發現有沒有新版的,如果有就把目前的版本更新上去,結果一更就壞掉了。

因為此我就把版本換回到一個月前的,之後就好了。

舊版本的 docker hub image

這樣的問題我居然卡了快十個小時,沒想到原因這麼簡單,算是學到了一課。

大戰系統程式 - 控制段組譯與連結載入

· 9 min read

前面我們講了基本的組譯流程,而這篇主要要講的是怎麼樣合併兩個程式,因為通常我們寫完的程式碼不會只有一份檔案,而是會有數份。

這裡的細節爆炸多,所以一定要仔細看。第一步的組譯過程和之前一樣,我會把不一樣的地方寫出來,其它相同的地方不會再重複。

下方的內容如果有錯誤,歡迎來信更正!

組譯

下方的題目取自席家年教授的練習題,如有侵權請來信告知!

題目 PDF 下載

下方為練習卷 練習卷

可以發現到有兩份程式碼需要組譯,而且兩份程式碼裡面都出現了之前沒有出現的字。第一個步驟就是先把位址寫一寫,這裡位址和之前一樣。

第一份程式:

地址標記符號指令運算元
0000TSTPGMSTART0
EXTDEFREF4
EXTREFNXTREF
...
0029REF1LDX#ENDA-TSTA
002CREF2LDATSTA,X
002FREF3+LDSNXTREF-24
0033REF4EQU*
...
0050TSTAEDU*
...
0084ENDAEDU*
0084REF5WORDTSTA+8
0087RESB12
0093ENDREF1

上面這張表格跟之前的其實沒有什麼差別,但可以發現到有兩個比較特別的是 EXTDEF 和 EXTREF,這兩個就是外部引用的程式。

還有一個東西是 EDU,後面的運算元是一個 *,而這個我們就當成保留,不佔用空間。

第二份程式碼發現到地址幫我們上好,但我一樣寫在下面。

地址標記符號指令運算元
0000NXTPGMSTART0
EXTDEFNXTREF
...
0052NXTREFLDANXTREF+20
0055NXT1LDB#NXTREF
...
0090NXT2WORDNXT2-6
0093RESW5
00A2END

接下來就是把目地的碼算出來,過程跟之前都一樣。

第一份程式碼:

地址標記符號指令運算元目地碼
0000TSTPGMSTART0
EXTDEFREF4
EXTREFNXTREF
...
0029REF1LDX#ENDA-TSTA050034
002CREF2LDATSTA,X03A021
002FREF3+LDSNXTREF-246F1FFFF8
0033REF4EQU*
...
0050TSTAEDU*
...
0084ENDAEDU*
0084REF5WORDTSTA+8000058
0087RESB12
0093ENDREF1

第二份程式碼:

地址標記符號指令運算元目地碼
0000NXTPGMSTART0
EXTDEFNXTREF
...
0052NXTREFLDANXTREF+20032011
0055NXT1LDB#NXTREF692FFA
...
0090NXT2WORDNXT2-600008A
0093RESW5
00A2END

目的程式

跟之前一樣會有兩份目的程式,但這裡跟之前不太一樣,差別在於有 EXTREF 和 EXTDEF,這兩個都會生成比較特別的紀錄。

第一份

先從第一份程式碼開始,一樣的先從表頭紀錄開始

H,TSTPGM,000000,000093

接下來我們會有兩種新的紀錄,分別是 D 紀錄和 R 紀錄,D 紀錄在代表的是自己給別人用的程式,而 R 紀錄正好相反,代表的是自己使用別人的程式。

先寫 D 紀錄,要依序寫入的資訊如下:

  • 開頭字母 D
  • 六格的標紀符號,對應到 EXTDEF 後面所寫的標紀錄號
  • 六格的標紀符號所在位址

D,REF4☐☐,000033

再來寫 R 紀錄,和 D 紀錄相同,要依序寫入的資訊如下:

  • 開頭字母 R
  • 六格的標紀符號,對應到 EXTREF 後面所寫的標紀符號

R,NXTREF

接下來的本文紀錄和之前相同,下面不再重複。

T,000029,0A,050034,03A021,6F1FFFE8

T,000084,03,000058

再來是修正紀錄基本上和之前一樣,但是有一個紀錄不太一樣。

注意到標紀位址在 REF3 那一行,可以發現到計算的時候使用到了 NXTREF 這個標紀符號,仔細看就會發現到這個使用到了 EXTREF 所標紀的符號,所以修正紀錄也要基於 NXTREF,而不是 START 的 TSTPGM,換句話說就是這裡是基於外部的程式。

M,000030,05,+NXTREF

還有一行需要修正的是 REF5,這行的話沒有什麼特別的,修正紀錄如下:

M,000084,06,+TSTPGM

最後的結束紀錄和之前一樣,沒什麼特別的

E,000029

第二份

表頭紀錄如下:

H,NXTPGM,000000,0000A2

D 紀錄如下:

D,NXTREF,000052

本文紀錄如下:

T,000052,06,032011,692FFA

T,000090,03,00008A

修正紀錄一個,如下:

M,000090,06,+NXTPGM

結束紀錄就一個 E

連結載入

接下來就是要模擬在電腦中實際載入兩份程式碼之後會發生的事,假設載入的起始位址的 5000。

而外部符號表要處理的地方比較多,控制段其實就是程式的外稱,像 TSTPGM 指的就是第一份程式碼。符號名稱就是 EXTDEF 後面寫的標紀符號,位址的話就是 START 的位址跟 END 的位址,長度就是兩者相減。

第二份程式碼跟第一份的步驟相同,但是位址要接在第一份之後。

控制段符號名稱位址長度
TSTPGMREF45000~509393
NXTPGMNXTREF5093~50E5A8

實際上執行的時候修正紀錄就會發揮作用,下面舉幾個例子,也就是練習卷的題目。

REF3 +LDS NXTREF-24 載入到記憶體的位址為 502F,修正後的目的碼為 6F1050CD

目的碼的算法就是看修正紀錄怎麼寫就怎麼做,像這題的修正紀錄是 M,000030,05,+NXTREF,所以我們要做的就是把 1FFFF8 拿出來加上 NXTREF,而 NXTREF 的值為 50E5,可以對應到剛剛的外部符號表。

REF5 WORD TST+8 載入到記憶體的位址為 5084,修正後的目的碼為 005058

NXT1 LDB #NXTREF 載入到記憶體的位址為 50E8

而最後,程式開始的地方就是第一條本文記錄開始的地方,需要注意一下要再加上初始地址,得到 5029

網頁版應用程式

· 2 min read

昨天因為我在玩 Hail 的時候不小心把手機玩到壞掉,所以我就直接重置了整個系統,重置完之後我就在想有哪些應用程式要再下載的。

這個時候我就又突然想到這篇,大意就是 Meta 的應用程式會使用一些特殊的手段來追蹤在網頁上的瀏覽紀錄等,而防止的方法就是有其中一個就是使用網頁版應用程式。

網頁版應用程式聽起來好像很高級,但其實就是在手機上直接去開 Facebook 這個網頁,那這樣就是一個網頁版應用程式。我發現到這種方法其實好處不少欸,因為之前我從抓包就發現到 FB 會一直偷傳封包還有 IG 也是,這樣一來只要網頁關掉就完全沒有問題了。

功能上面也不再像是五年前會發現有些東西不能用的問題,一切都是那麼的正常,唯一的缺點是開的時候要等一下,因為它就不再像是 APP 一樣一直接常駐在後台,而是要用的時候再跟伺服器握手拿資料,我自己是比較喜歡這樣啦,光想到我的資料一直被傳出去就覺得很不安。

而且像我自己在用的 Firefox 還會做出這種美美的圖標,不管是使用上或者美觀上都很有 APP 的感覺。