Davy's Blog

全新的正體中文 WordPress 網誌!

如何自行打包 CentOS 安裝映像檔

因前些日子有自行打包 CentOS 安裝映像檔的需求,所以就稍微地做一下筆記,提醒一下自己要怎麼做。

這次的目標很簡單,就是包入一個 Kickstart 並且讓他成為開機選單中的預設選項。

在硬碟數量有限的情況下把 ZFS 從 Mirror 轉移到 RAID-Z2

去年年底的時候發現家裡 NAS 的硬碟空間又要不足了,於是打算來添加新的硬碟來擴展空間。

但在預算不足的情況下,希望能直接從原先兩顆硬碟的 ZFS Mirror 轉移成四顆硬碟的 RAID-Z2(不知道 RAID-Z2 的同學可以直接想成是 RAID 6 就行),但對熟悉 ZFS 的朋友們應該早就知道這是癡人說夢了,ZFS 除了 Stripe 跟 Mirror 以外就沒有可以直接互相轉換的方法了。

常見的做法應該是先增加四顆硬碟組成 RAID-Z2 後,直接把舊硬碟的資料倒過去新 Dataset 上,但這對於預算不足的我來說實在有點困難,而且資料轉移後會讓原先的兩顆硬碟變成冗員也沒有辦法加回新建好的 Dataset 中。

於是我想了一個方法可以讓我在只添加兩顆硬碟的情況下轉移資料到 RAID-Z2 ——

LG 25UM58-P 21:9 螢幕 微・開箱

擡頭圖借自官方商品網站1 <(_ _)>

在等待 Surface Dock2 來的路上,我一直在想,這個小傢伙(後來發現其實並不小 Orz)到底該被我放在哪裡使用……

後來想說既然與朋友面交的地點在公司附近,乾脆就帶去公司放著好了,但是如果只讓他做充電的功能的話我何不就買一組變壓器就好了,一定要讓他有更多的用途才對,既然公司網路都是 Wifi,沒有有線網路的話,那麼這個網路孔暫時是沒有作用的;而 Surface Book 2 本身就有 USB-A 跟 3.5mm 音源孔了,自然上面的 Hub 也不會是常常用到的東西;那麼,就只剩下 Mini DisplayPort 還沒被利用到了!(迷:網路孔也沒有好嗎)

這次剛好在 PCHome 上面撿到折扣(原價 $6,999,特價 $4,999),還有 VESA 孔位可以透過螢幕架固定,而且我早就想要試試看 21:9 是什麼感覺了,想說先買一個便宜的小螢幕試試看吧,就刷下去了……

Surface Dock 開箱

前情提要:因為買了 Surface Book 21……(迷:你講很多次了

因為 Surface Book 2 相較於上一代拔除了 Mini Displayport2,取而代之的是使用了 USB-C(支援 USB 3.1 Gen 1)的連接埠3,所以如果有外接顯示需求的話,就需要 USB-C 的轉接器。

原本是想要入手幾個小米出的(便宜)配件4來做顯示方面的轉接,但是這些配件並沒有在臺灣銷售,必須在中國買,而我又懶惰做功課(淘寶官方運送不送的樣子,要自己找民間集運)一直拖到現在都還沒有買……

而 Surface Book 2 本身其實還有兩個 USB-A 的連接埠,所以對於 Hub 的功能其實沒有很大需求,所以我也還是一邊逛逛有沒有更迷你又能夠應付各種顯示轉接的小道具(當然是如果有支援 PowerDelivery 可以讓我順便充電就更好了,因為原廠的充電器實在太重了wwww),期間還在 PCHome 上發現了有趣的轉接器5 XDDDD

Surface Pen 開箱

因為買了 Surface Book 21,所以感覺 Surface Pen2 這個配件應該是必須的(吧),其實我過年前就買了,試玩了幾天才開始寫這篇文……

使用 Cmder 直入 WSL

因為工作有 SSH 連線到遠端機器操作的習慣,在換了 Surface Book 21 之後,也還是想要儘量保持這個習慣,一般來說我都是使用 PieTTY2 在進行 SSH 連線,不過對於行動裝置我通常會再搭配上 Mosh3 使用,可惜在 Windows 上面沒有原生的 Client 支援,於是我打算在 WSL4 裡面安裝 Mosh 來使用!

Surface Book 2 開箱

因為原先在使用的 MacBook Air1 真的太慢了,而且電池也日益衰老(雖然我懷疑根本就沒好過……XD),最近一直在猶豫是不是要繼續買下一台 MacBook (Pro)2 的時候剛好 Surface Book 2 在臺灣上市了,所以就乾脆不考慮其他選項直接敗了……

Rails API 送了 `Accept: application/json, */*` 拿到 406

之前在 Rails API mode 遇到 Client 在 Header 送了 Accept: application/json, text/html, */* 結果拿到 406 的問題,原先以為是 Client 送法不對(Server 只吃 JSON)。

查了一下 RFC2616 發現這樣的送法應該沒有什麼問題才對:

If an Accept header field is present, and if the server cannot send a response which is acceptable according to the combined Accept field value, then the server SHOULD send a 406 (not acceptable) response.

Server 應該在能夠回傳任一指定 Accept type 時回傳指定 Type,如果都不能夠回傳時才 406,尤其 Client 還用了 */*,應該是要無論如何都不會 406 才對……

詳細查了一下發現1,Rails 會將 Client 送出多個 Mime type 搭配上 */*(例如:Accept: x-any-type/x-any-subtype, */*Accept: */*, x-any-type/x-any-subtype)的行為認為是 Browser 預設行為(據說是老 IE)而強制在 ActionDispatch 複寫成 HTML type。

但是 API mode 的 Rails 本來就不可能返回 HTML,結果就導致 Server 噴 406……
解法也很簡單,就是把判斷用部分蓋掉就好,這裡選擇把 Regexp 複寫掉:

ActionDispatch::Http::MimeNegotiation.send :remove_const, :BROWSER_LIKE_ACCEPTS
ActionDispatch::Http::MimeNegotiation.const_set :BROWSER_LIKE_ACCEPTS, /NEVER_MATCHED_MIME_TYPE_LOL/

修改 PAM 讓特定 IP 透過 SSH 登入時不需要輸入密碼

我有兩臺電腦,一臺是外出用的 MacBook Air (13" later)、另一臺是自己組裝的 Windows 桌機,但平時工作都是在 Windows 上面開 Linux(當然是我最愛的 Ubuntu)的 VM 再從兩臺電腦 SSH 進去 VM 裡面。但從 Windows SSH 進去 VM 的時候就很想跳過輸入密碼的步驟,當然用 SSH Key 也可以辦到,但我覺得他們根本就是同一個電腦啊,還要加上 SSH Key 也太累了吧!要如何僅依靠來源 IP 就決定要不要輸入密碼呢?