<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Linux on omegaatt</title>
    <link>https://www.omegaatt.com/tags/linux/</link>
    <description>Recent content in Linux on omegaatt</description>
    <generator>Hugo -- 0.147.7</generator>
    <language>zh-TW</language>
    <managingEditor>raiven.kao@gmail.com (Raiven Kao)</managingEditor>
    <webMaster>raiven.kao@gmail.com (Raiven Kao)</webMaster>
    <copyright>Raiven Kao 2020 - 2026</copyright>
    <lastBuildDate>Sun, 24 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.omegaatt.com/tags/linux/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>把 k3s 從 Ubuntu 搬到 OpenSUSE MicroOS，順便換上 FluxCD GitOps</title>
      <link>https://www.omegaatt.com/blogs/develop/2026/migrate_k3s_lab_from_ubuntu_to_opensuse_micro_os/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2026/migrate_k3s_lab_from_ubuntu_to_opensuse_micro_os/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我的 Homelab 跑著一台 Proxmox VE，底下有一個 Ubuntu Server 24.04 的 VM 負責跑 k3s cluster，這個 cluster 接管了家裡所有的自架服務：從 &lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2023/bitwarden_with_self_hosted_password_backend/&#34;&gt;Vaultwarden 密碼管理&lt;/a&gt;、&lt;a href=&#34;https://karakeep.app/&#34;&gt;Karakeep&lt;/a&gt; 書籤、&lt;a href=&#34;https://github.com/filebrowser/filebrowser&#34;&gt;Filebrowser&lt;/a&gt; 文件管理，到 &lt;a href=&#34;https://www.wakapi.dev/&#34;&gt;Wakapi&lt;/a&gt; 開發時間追蹤，大大小小跑了十幾個服務。&lt;/p&gt;
&lt;p&gt;這個架構一直跑得很穩。直到 Linux kernel 7.0 發布，我才開始動搖。&lt;/p&gt;
&lt;p&gt;kernel 7.0 的各種新特性讓我心癢，Ubuntu 26.04 LTS 剛好以 kernel 7.0 作為預設核心，理論上從 24.04 升上去就能一步到位。但在一個跑著十幾個服務的生產 VM 上執行 &lt;code&gt;do-release-upgrade&lt;/code&gt;，那種心臟發抖的感覺，即便有做好備份，還是讓我遲遲下不了手。&lt;/p&gt;
&lt;p&gt;就在猶豫要不要升級的當下，我問了自己一個問題：「我要繼續用 Ubuntu 嗎？」&lt;/p&gt;
&lt;p&gt;這個問題打開了一扇門。我的 Linux desktop 是 openSUSE Tumbleweed + KDE Plasma，用了三年、換過兩台裝置（筆電和桌電），沒有遇到太多問題。Tumbleweed 的滾動更新讓我一直跑著最新的 kernel，升級這件事從來不是一個需要另外排行程的壓力事件。&lt;/p&gt;
&lt;p&gt;既然 desktop 側已經對 openSUSE 生態有信心，server 側為什麼不試試看？&lt;/p&gt;
&lt;p&gt;這讓我開始認真考慮：有沒有一種 OS，讓 server 的升級這件事也變成「預設安全」而不是「需要勇氣」？&lt;/p&gt;
&lt;h2 id=&#34;為什麼選-opensuse-microos&#34;&gt;為什麼選 OpenSUSE MicroOS&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://microos.opensuse.org/&#34;&gt;OpenSUSE MicroOS&lt;/a&gt; 是一個 Immutable OS（不可變作業系統），核心特性有幾個：&lt;/p&gt;</description>
    </item>
    <item>
      <title>用 Hetzner &#43; Proxmox Backup Server 實踐 3-2-1 備份原則的異地備援</title>
      <link>https://www.omegaatt.com/blogs/develop/2026/proxmox_backup_server_on_hetzner/</link>
      <pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2026/proxmox_backup_server_on_hetzner/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;如果你有認真對待自己的資料，應該聽過 &lt;strong&gt;3-2-1 備份原則&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;3&lt;/strong&gt; 份備份&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2&lt;/strong&gt; 種不同的儲存媒介&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1&lt;/strong&gt; 份異地備援&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前兩項在家中的 Homelab 環境相對容易做到，但「異地」這個字往往是大多數人的盲點。硬碟壞掉？用 Proxmox Backup Server (PBS) 還原。系統崩潰？從 PBS 拉一份回來。但若是家裡發生火災、淹水，或是更平凡的情況——你不小心把整台 Proxmox VE 的 NVMe 連資料一起刪掉——這時候同一個屋簷下的所有備份都會跟著陪葬。&lt;/p&gt;
&lt;p&gt;我的 Homelab 環境是一台 Proxmox VE 搭配一台 Proxmox Backup Server，跑著包含 k3s、Vaultwarden 等各種服務。在研究了很久的異地備援方案後，我決定在歐洲架設一台 PBS，讓它透過 WireGuard 隧道主動把家裡的備份「拉」過去，讓 321 中的那個「1」真正落地。&lt;/p&gt;
&lt;p&gt;這篇文章會記錄完整的架構決策過程，從為什麼選 Hetzner、選哪個方案、到實際的設定步驟，以及中間踩過的坑。&lt;/p&gt;
&lt;h2 id=&#34;為什麼選-hetzner&#34;&gt;為什麼選 Hetzner&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.hetzner.com/&#34;&gt;Hetzner&lt;/a&gt; 是一間位於德國的基礎設施供應商，在評估異地備援的雲端供應商時，我的優先考量是：&lt;strong&gt;便宜&lt;/strong&gt;、&lt;strong&gt;隱私安全&lt;/strong&gt;、&lt;strong&gt;技術友善&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;gcp--aws-的問題&#34;&gt;GCP / AWS 的問題&lt;/h3&gt;
&lt;p&gt;第一個念頭當然是最熟悉的 GCP 或 AWS，畢竟都是主流雲端。但把兩者丟進計算機後，答案很快就出來了：&lt;/p&gt;
&lt;p&gt;以我「最終」需要的規格：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2 vCPU / 4GB RAM VM&lt;/li&gt;
&lt;li&gt;80GB 高速 Storage 用於 PBS 備份&lt;/li&gt;
&lt;li&gt;500GB 慢速 Storage 用於 NAS 備份&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;方案&lt;/th&gt;
          &lt;th&gt;預估月費&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Hetzner&lt;br/&gt;- CX23&lt;br/&gt;- 80GB Volume&lt;br/&gt;- BX11 Storage Box&lt;/td&gt;
          &lt;td&gt;約 $15.73 USD&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;AWS 同級配置&lt;br/&gt;- t3.medium&lt;br/&gt;- gp3 80GB&lt;br/&gt;- S3 500GB&lt;/td&gt;
          &lt;td&gt;約 $50 USD&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;GCP 同級配置&lt;/td&gt;
          &lt;td&gt;相近&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;光是這個差距就已經結案了。AWS 和 GCP 的小型運算實例本身就已經比 Hetzner 貴好幾倍，Block Storage 的單價更是幾乎翻倍，再加上對外流量費用（下載資料還要另外收），災難復原時光是把 500GB 拉回來就可能要多付幾十美元。&lt;/p&gt;</description>
    </item>
    <item>
      <title>告別 Docker Desktop 束縛！macOS 容器實戰：colima &#43; k8s &#43; containerd 踩坑遷移全記錄</title>
      <link>https://www.omegaatt.com/blogs/develop/2025/colima_docker_alternative_on_macos/</link>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2025/colima_docker_alternative_on_macos/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;身為一個開發者，特別是在 macOS 環境下，Docker Desktop 幾乎是容器化開發的標配。然而，自從 Docker Desktop 開始針對大型企業調整其&lt;a href=&#34;https://www.ithome.com.tw/news/146537&#34;&gt;授權模式&lt;/a&gt;後，許多開發者開始尋找替代方案。&lt;/p&gt;
&lt;p&gt;市面上確實出現了一些選擇，例如閉源但功能強大的 &lt;a href=&#34;https://orbstack.dev/&#34;&gt;OrbStack&lt;/a&gt;。但對於熱愛開源的我來說，目光自然投向了社群。這時，&lt;a href=&#34;https://github.com/abiosoft/colima&#34;&gt;colima&lt;/a&gt; 這個開源專案進入了我的視野。它不僅提供了一個在 macOS 上運行 Linux 容器的輕量級方式，還內建了 Kubernetes 支援，引起了我極大的興趣。&lt;/p&gt;
&lt;p&gt;這篇文章，想記錄一下我從 Docker Desktop 轉換到 colima，並且在 colima 的 Kubernetes 環境中，從原本依賴 Docker Engine 逐步遷移到使用 containerd 作為容器執行時（Container Runtime）的心路歷程與踩坑經驗。&lt;/p&gt;
&lt;h2 id=&#34;lima-與-colima-簡介&#34;&gt;lima 與 colima 簡介&lt;/h2&gt;
&lt;p&gt;在深入 colima 之前，得先提一下 &lt;a href=&#34;https://github.com/lima-vm/lima&#34;&gt;lima (Linux virtual machines on macOS)&lt;/a&gt;。lima 是一個旨在於 macOS 上輕鬆運行 Linux 虛擬機的開源專案。它底層利用了 macOS 的虛擬化框架（如 QEMU 或更高效的 &lt;code&gt;vz&lt;/code&gt;），提供了一個相對輕量的 Linux VM 環境。&lt;/p&gt;
&lt;p&gt;而 colima 則可以看作是建立在 lima 之上的「使用者友善層」。它簡化了 lima 的配置，並專注於提供容器執行時環境。colima 可以讓你輕鬆地啟動一個配置好 Docker 或 containerd 的 Linux VM，並且可以選擇性地啟用 Kubernetes (K3s) 支援。簡單來說，colima 幫你處理了建立 VM、安裝 Runtime 等繁瑣步驟，讓你專注在容器本身。&lt;/p&gt;</description>
    </item>
    <item>
      <title>建構多平台的 container image</title>
      <link>https://www.omegaatt.com/blogs/develop/2025/building_multiple_platform_container_image/</link>
      <pubDate>Sun, 30 Mar 2025 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2025/building_multiple_platform_container_image/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;最近在搞 side project 時，常常需要在不同的 CPU 架構上跑我的應用程式。例如，開發用的 MacBook 是 ARM 架構 (Apple Silicon)，開發用的 Desktop 是 x86 架構（Ryzen 5900X），而部署的伺服器可能是 x86 (AMD64)，有時候甚至想在 Raspberry Pi (ARM) 上跑些小東西。每次都要為不同平台分別建構 image 實在有點麻煩，而且 Registry 上一堆 &lt;code&gt;xxxapp-amd64&lt;/code&gt;, &lt;code&gt;xxxapp-arm64&lt;/code&gt; 的 tag 看了也很礙眼。經過一番研究與嘗試，是時候接觸 Docker Buildx 了。&lt;/p&gt;
&lt;h2 id=&#34;為什麼需要多平台映像檔&#34;&gt;為什麼需要多平台映像檔&lt;/h2&gt;
&lt;p&gt;在 wintel 的商業策略下，以及大家對高性能伺服器的普遍認知，主要用 x86/amd64，但現在 ARM 架構越來越普及，從 Apple Silicon 的 Mac、AWS Graviton 處理器、各種 IoT 設備到你的 Raspberry Pi，ARM 無所不在。如果你的 container image 只支援 amd64，那它就無法在這些 ARM 設備上原生運行 (需要模擬，效能差)。為了&lt;a href=&#34;https://en.wikipedia.org/wiki/Write_once,_run_anywhere&#34;&gt;Build Once, Run Anywhere&lt;/a&gt;，多平台映像檔 (Multi-platform images) 就是 meta。&lt;/p&gt;
&lt;h2 id=&#34;oci-多平台映像檔架構簡述&#34;&gt;OCI 多平台映像檔架構簡述&lt;/h2&gt;
&lt;p&gt;其實不複雜。傳統的單一平台 image，它的 manifest 指向一組設定檔和一堆 layer。而多平台 image 則是透過一個 manifest list (索引) 指向多個特定平台的 manifest。每個特定平台的 manifest 才各自指向該平台的設定檔和 layer。&lt;/p&gt;</description>
    </item>
    <item>
      <title>A smarter way to change directory: zoxide</title>
      <link>https://www.omegaatt.com/blogs/develop/2024/zoxide_a_smarter_way_to_change_directory/</link>
      <pubDate>Tue, 24 Sep 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2024/zoxide_a_smarter_way_to_change_directory/</guid>
      <description>&lt;p&gt;在日常的開發工作中，我們經常需要在不同的目錄間切換。雖然 &lt;code&gt;cd&lt;/code&gt; 命令已經足夠好用，但如果有一個更聰明的工具能記住我們最常用的目錄，並讓我們用最少的按鍵就能快速跳轉，那豈不是更棒?&lt;/p&gt;
&lt;p&gt;這就是 zoxide 的用武之地。zoxide 是一個由 Rust 編寫的「更聰明的 cd 命令」，靈感來自 z 和 autojump。它會記住你最常使用的目錄，讓你只需輸入幾個字符就能快速跳轉。&lt;/p&gt;
&lt;h2 id=&#34;zoxide-的主要特性&#34;&gt;zoxide 的主要特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;自動匹配: 不需要輸入完整路徑，zoxide 會根據輸入自動匹配最相關的目錄：&lt;/li&gt;
&lt;li&gt;自動紀錄過去的目錄: zoxide 會記住你最常使用的目錄，讓你只需輸入幾個字符就能快速跳轉。這些資料可以使用 &lt;code&gt;zoxide query&lt;/code&gt; 來查詢，或是 &lt;code&gt;zoxide edit&lt;/code&gt; 來管理。&lt;/li&gt;
&lt;li&gt;互動式選擇: 結合 fzf，可以互動式地選擇目標目錄&lt;/li&gt;
&lt;li&gt;輕量快速: 用 Rust 編寫，啟動迅速，幾乎不會影響 shell 的啟動時間&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;安裝與配置&#34;&gt;安裝與配置&lt;/h2&gt;
&lt;p&gt;zoxide 的安裝可以參考 &lt;a href=&#34;https://github.com/ajeetdsouza/zoxide?tab=readme-ov-file#installation&#34;&gt;官方文件&lt;/a&gt;，我們就不多贅述了。&lt;/p&gt;
&lt;p&gt;安裝完成後，我們需要在 shell 的配置文件中添加初始化命令。以 zsh 為例，在 &lt;code&gt;~/.zshrc&lt;/code&gt; 的末尾添加:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;eval &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;zoxide init zsh&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重新打開終端或執行 &lt;code&gt;source ~/.zshrc&lt;/code&gt; 後，zoxide 就可以使用了。&lt;/p&gt;
&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;
&lt;p&gt;zoxide 的基本用法非常直觀，經過自動執行 &lt;code&gt;zoxide init zsh&lt;/code&gt; 後，我們可以使用 &lt;code&gt;z&lt;/code&gt; 和 &lt;code&gt;zi&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自動匹配:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ ls
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  boo bar baz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ z bo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ pwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /home/raiven/boo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;即便沒有輸入完整路徑，也能夠自動匹配最相關的目錄
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ pwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /home/raiven/dev/omegaatt-blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ z
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ pwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /home/raiven
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ z blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ pwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  /home/raiven/dev/omegaatt-blog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;互動式選擇:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ zi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~ &amp;lt; 98/98&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;296.0 /home/raiven/dev/omegaatt-blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;124.0 /home/raiven/dev/bookly
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 50.0 /home/raiven/dev
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 24.0 /home/raiven/dev/test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 12.0 /home/raiven/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這裡的 &lt;code&gt;z&lt;/code&gt; 命令就像一個更聰明的 &lt;code&gt;cd&lt;/code&gt;，而 &lt;code&gt;zi&lt;/code&gt; 則是互動式版本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 Bitwarden 與自架後端 Vaultwarden 來管理密碼與 2FA Authenticator</title>
      <link>https://www.omegaatt.com/blogs/develop/2023/bitwarden_with_self_hosted_password_backend/</link>
      <pubDate>Sun, 01 Sep 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2023/bitwarden_with_self_hosted_password_backend/</guid>
      <description>&lt;p&gt;在尋覓有哪些 self-hosted 專案好玩時，偶然發現了 1password、LastPass 的開源替代方案，甚至後端資料庫能自架，決定架來用用看。&lt;/p&gt;
&lt;p&gt;為什麼要自架？完全控制資料、隱私考量、或者純粹是學習和折騰 (符合 self-hosted 精神)。但控制權也意味著責任，特別是安全和備份。&lt;/p&gt;
&lt;p&gt;這篇會專注在使用 Bitwarden 客戶端搭配輕量級的 Vaultwarden 後端。&lt;/p&gt;
&lt;h1 id=&#34;使用-bitwarden-來管理密碼&#34;&gt;使用 Bitwarden 來管理密碼&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://bitwarden.com/products/personal/&#34;&gt;&lt;img alt=&#34;Bitwarden_logo&#34; loading=&#34;lazy&#34; src=&#34;https://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Bitwarden_logo.svg/1200px-Bitwarden_logo.svg.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bitwarden 是一款流行且功能強大的密碼管理工具，它提供了一個安全的方法來存儲和管理所有密碼。作為一個開源產品，Bitwarden 允許用戶選擇自行托管其服務，這意味著用戶可以在自己的服務器上運行 Bitwarden，從而更好地控制自己的數據安全。&lt;/p&gt;
&lt;h2 id=&#34;bitwarden-的特點&#34;&gt;Bitwarden 的特點&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;bitwarden-demo&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2023/bitwarden_with_self_hosted_password_backend/images/Screenshot_20240901_101852.webp&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;安全性&lt;/strong&gt;: Bitwarden 使用端到端加密，確保只有您可以訪問您的密碼。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨平台支持&lt;/strong&gt;: 支持 Windows、macOS、Linux、Android 和 iOS。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;易於使用&lt;/strong&gt;: 提供直觀的用戶界面和簡單的操作流程。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;開源&lt;/strong&gt;: 開源，增加了透明度和安全性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bitwarden 同時&lt;a href=&#34;https://bitwarden.com/help/authenticator-keys/&#34;&gt;支援基於時間的一次性密碼&lt;/a&gt;，讓 TOTP 也能自動填入。也能透過 &lt;a href=&#34;https://github.com/scito/extract_otp_secrets&#34;&gt;github.com/scito/extract_otp_secrets&lt;/a&gt; 來提取 Google Authenticator 內的 2FA 資訊，儲存進 Bitwarden 中。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/bitwarden&#34;&gt;Bitwarden 開源了 client 與 server&lt;/a&gt;，在 server 端的選擇有以下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用 Bitwarden 提供的官方服務，又分為免費跟付費，但這個選擇就跟 1p 沒太多區別。&lt;/li&gt;
&lt;li&gt;自架 Bitwarden 提供的 &lt;a href=&#34;https://github.com/bitwarden/server&#34;&gt;open source server&lt;/a&gt;，由於是使用 C# 與 mssql，吃的記憶體著實太多。&lt;/li&gt;
&lt;li&gt;自架 Bitwarden 相容的後端，我採用的是 rust 實做的 &lt;a href=&#34;https://github.com/dani-garcia/vaultwarden&#34;&gt;Vaultwarden&lt;/a&gt;，搭配 sqlite，記憶體使用量與官方的 C# 不是一個量級的。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;bitwarden-架構&#34;&gt;Bitwarden 架構&lt;/h2&gt;
&lt;p&gt;bitwarden 的 local storage 都是儲存加密後的密碼資料，不會使用明碼儲存，故上傳到 server 上的也僅僅是加密後的密碼資料。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 Firefox 上使用 PWA 將網頁應用安裝成 Desktop App</title>
      <link>https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/</link>
      <pubDate>Sun, 25 Aug 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;開應用時，跨平台的桌面解決方案時常困擾開發者，在 Linux Desktop 上要支援多種桌面協議與桌面管理系統，更是複雜許多。時常會看到 Electron 等等基於 chromium 的技術。&lt;/p&gt;
&lt;p&gt;當然也可以像是 zed.dev 這樣的 geek 精神，自己寫了一套跨平台的 GUI 框架，但多數新創公司可能沒有這些資源來實現。例如已經非常成熟的 Notion.so、Obsidian 等等都是基於 Electron 實現的。&lt;/p&gt;
&lt;p&gt;我並非一個 &lt;a href=&#34;https://github.com/sudhakar3697/awesome-electron-alternatives&#34;&gt;anti-Electron&lt;/a&gt; 或是 &lt;a href=&#34;https://www.reddit.com/r/degoogle/&#34;&gt;deGoogle&lt;/a&gt; 的人，但試圖找到其他解決方案正式樂趣之所在。&lt;/p&gt;
&lt;h2 id=&#34;pwaprogressive-web-app&#34;&gt;PWA(Progressive Web App）&lt;/h2&gt;
&lt;p&gt;詳盡的 PWA 技術可以到 mozilla 的&lt;a href=&#34;https://developer.mozilla.org/zh-TW/docs/Web/Progressive_web_apps&#34;&gt;文件&lt;/a&gt;中查看，對我來說只要可以達到目的：可以在 Windows、Mac、Linux 上封裝成 Desktop Aplication 即可。&lt;/p&gt;
&lt;h2 id=&#34;官方支援&#34;&gt;官方支援&lt;/h2&gt;
&lt;p&gt;mozilla 官方有一個文件針對「安裝網頁應用到桌面環境」的歷史講解，可以參考&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Installing&#34;&gt;官方文件&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;文中提到過去將網址「儲存」在桌面上的類似「書籤」的方法(SSB)，以及與 PWA 的不同之處：PWA 的使用者資料是儲存在桌面環境中。&lt;/p&gt;
&lt;h2 id=&#34;pwa-add-on&#34;&gt;PWA Add-on&lt;/h2&gt;
&lt;p&gt;上述文件內有提到需要使用 Fan-maded 的 PWA Add-on 來安裝 PWA：&lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/pwas-for-firefox/&#34;&gt;Progressive Web Apps for Firefox by Filip Štamcar&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;他是一個開源的 Firefox 擴充套件(&lt;a href=&#34;https://github.com/filips123/PWAsForFirefox&#34;&gt;filips123/PWAsForFirefox&lt;/a&gt;)，具有&lt;a href=&#34;https://pwasforfirefox.filips.si/&#34;&gt;完整的文件&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;安裝過程&#34;&gt;安裝過程&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在 Firefox 瀏覽氣上安裝 &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/pwas-for-firefox/&#34;&gt;PWA Add-on&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;瀏覽器會自動跳到設定頁面，首先會需要同意 EULA
&lt;img alt=&#34;setup-0&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-0.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;接著會需要安裝 connector，需要透過該 connector 才能連結瀏覽器本身與 extension。
connector 由 Rust 編寫，使該 extension 可以在跨平台的桌面環境中管理 firefox 設定檔、runtime 等等未開放給 extension 存取的資源。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Windows:
Windows 的 connector 除了手動安裝外，也推薦使用 &lt;a href=&#34;https://github.com/microsoft/winget-cli&#34;&gt;winget&lt;/a&gt; 來安裝，類似於 apt/yum 的套件管理工具。
&lt;img alt=&#34;connector installation windows&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-1.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;Linux
Linux 的 connector 可以到 &lt;a href=&#34;https://github.com/filips123/PWAsForFirefox/releases&#34;&gt;github release&lt;/a&gt; 上找到，例如我的作業系統是 OpenSUSE Tumbleweed，則可以下載 .rpm 檔案。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zypper in ./firefoxpwa-2.12.1-1.x86_64.rpm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Debian/Ubuntu(DEB):
&lt;img alt=&#34;connector installation deb&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-2.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;Redhat/Fedora/OpenSUSE(RPM):
&lt;img alt=&#34;connector installation rpm&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-3.webp&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;接著會需要安裝不同於原生 Firefox 的 runtime，根據描述，會下載並由 connector 自動修改成支援 PWA 的 runtime。
&lt;img alt=&#34;runtime installation&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-4.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;到這邊已經完成 PWA extension 的安裝，可以嘗試使用 PWA 的方式來安裝 web app to desktop app。&lt;/li&gt;
&lt;li&gt;首先需要打開你想要安裝成 Desktop App 的網頁，如果在不同的網頁嘗試設定，extension 會自動判斷該網頁 CORS Error，即便是 &lt;code&gt;https://www.notion.so&lt;/code&gt; 與 &lt;code&gt;https://notion.so&lt;/code&gt; 也屬於不同的 Origin。
接著點擊 PWAForFirefox 的圖示，可以看到已經安裝好的 extension。
&lt;img alt=&#34;extension icon&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-5.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;接著一步一步的跟著指引設定好該 PWA 的設定。
&lt;img alt=&#34;add pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-6.webp&#34;&gt;
&lt;img alt=&#34;add pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-7.webp&#34;&gt;
&lt;img alt=&#34;add pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-8.webp&#34;&gt;
&lt;img alt=&#34;add pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-9.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;完成，可以在應用程式選單內找到剛剛建立的 PWA 應用程式。
&lt;img alt=&#34;pwa at menu&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-10.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;開啟後可以自動開啟網頁應用程式，並具有獨立的設定檔。
&lt;img alt=&#34;open pwa&#34; loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/pwa_on_firefox/images/setup-11.webp&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;使用感受&#34;&gt;使用感受&lt;/h2&gt;
&lt;p&gt;三四年前在 Windows 上習慣使用 Notion Desktop 版本，在 Linux 上反而已經習慣要用網頁來打開，這次嘗試使用 PWA 後倒是經常忘記有將它安裝成 Desktop Application。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用內建的 rsync 備份 Truenas Scale 到 Proxmox Backup Server</title>
      <link>https://www.omegaatt.com/blogs/develop/2024/backup_from_truenas_scale_to_pbs/</link>
      <pubDate>Sun, 19 May 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2024/backup_from_truenas_scale_to_pbs/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;過去我會使用 backup script 配合 crontab 來定期的備份 nas 的資料，這次更換了 Proxmox Backup Server 的物理機後，多了一個硬碟的空間好讓我實驗 Truenas Scale 的備份機制。&lt;/p&gt;
&lt;h3 id=&#34;差異&#34;&gt;差異&lt;/h3&gt;
&lt;p&gt;rsync 本身並沒有 server/client 的概念，只有 source 與 destination。
過去我會在&lt;strong&gt;備份主機&lt;/strong&gt;上透過 samba 來 mount Nas 到資料夾內，檢查有沒有 mount 成功才在&lt;strong&gt;備份主機&lt;/strong&gt;上使用 rsync。
而 Truenas Scale 提供的 Data Protection 功能中，內建了 Rsync Tasks 模組，透過預先建立好的 ssh credential 來呼叫&lt;strong&gt;備份主機&lt;/strong&gt;進行 rsync。
同樣都是由&lt;strong&gt;備份主機&lt;/strong&gt;來進行 rsync，主要是任務的執行呼叫是 Truenas Scale 本身還是&lt;strong&gt;備份主基本身&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;在-truenas-scale-上建立備份任務&#34;&gt;在 Truenas Scale 上建立備份任務&lt;/h2&gt;
&lt;h3 id=&#34;建立-ssh-pair&#34;&gt;建立 SSH Pair&lt;/h3&gt;
&lt;p&gt;首先到 Credentials -&amp;gt; Backup Credentials 的頁面&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2024/backup_from_truenas_scale_to_pbs/images/20240519_163627.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;點擊 SSH Configurations 中的 Add&lt;/p&gt;</description>
    </item>
    <item>
      <title>透過 Distrobox 解決 Linux 環境依賴問題</title>
      <link>https://www.omegaatt.com/blogs/develop/2024/two_distrobox_use_case/</link>
      <pubDate>Sat, 18 May 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2024/two_distrobox_use_case/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;自從一年前嘗試使用 &lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2023/kde_neon_experience&#34;&gt;KDE Neon&lt;/a&gt; 後，主要的桌面開發環境就從 wsl 整個遷移到 Linux 上。這一年來感受到，KDE Neon 可能正如 reddit 上的留言闡述的那樣，只是 KDE 團隊的「實驗場」，可以享受到「最」新的 Plasma 與「較」新的 Kernel，卻始終是基於 Ubuntu 22.04 LTS，即便 Ubuntu 24.04 LTS 推出之際，也不再讓我感受性感。&lt;/p&gt;
&lt;p&gt;因緣際會，在 Ubuntu 24.04 LTS 發布之際，我決定從 KDE Neon distro hopping 到 OpenSUSE Tumbleweed，這是一個由 SUSE 公司推出的滾動式發行版，軟體包在 SUSE 測試過後便會推送到 OpenSUSE 的 Repo（其他 OpenSUSE 的功能省略）。這次的轉換主要是為了獲得最前沿的 Linux 體驗。OpenSUSE Tumbleweed 的滾動更新模式能確保我始終使用最新的軟體和技術，這對我來說是一個有趣的選擇，即便有可能收到有問題的 xz 更新 XD。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ fastfetch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                     ......             raiven@raiven-suse
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     .,cdxxxoc,.               .:kKMMMNWMMMNk:.         ------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cKMMN0OOOKWMMXo. A        ;0MWk:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;      &amp;#39;&lt;/span&gt;:OMMk.      OS: openSUSE Tumbleweed &lt;span style=&#34;color:#ae81ff&#34;&gt;20240517&lt;/span&gt; x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ;WMK;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;       &amp;#39;&lt;/span&gt;lKMMNM,     :NMK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;             &amp;#39;&lt;/span&gt;OMW;     Host: FMV UH-X
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; cMW;             WMMMN   ,XMK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;                 oMM.    Kernel: 6.8.9-1-default
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.MMc             &amp;#39;&amp;#39;^*~l. xMN:                    KM0    Uptime: 1 hour, 14 mins
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;MM.                   .NMO                      oMM    Packages: &lt;span style=&#34;color:#ae81ff&#34;&gt;3211&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;rpm&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;37&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;flatpak&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.MM,                 .kMMl                       xMN    Shell: zsh 5.9
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; KM0               .kMM0&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; .dl&amp;gt;~,.               .WMd    DE: KDE Plasma 6.0.4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &amp;#39;&lt;/span&gt;XM0.           ,OMMK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;    OMMM7&amp;#39;&lt;/span&gt;              .XMK     WM: KWin &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Wayland&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   *WMO:.    .;xNMMk&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;       NNNMKl.          .xWMx      WM Theme: Nordic
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     ^ONMMNXMMMKx;          V  &amp;#39;&lt;/span&gt;xNMWKkxllox0NMWk&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;       Theme: Breeze (NordicDarker) [QT], Breeze-Dark [GTK2], Breeze [GTK3]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;         &amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:dOOXXKOxl&amp;#39;&lt;/span&gt;          Icons: Zafiro-Nord-Dark-Black &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;QT&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, Zafiro-Nord-Dark-Black &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK2/3/4&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Font: Noto Sans &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;10pt&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;QT&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, Noto Sans &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;10pt&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK2/3/4&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Cursor: Nordic &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;24px&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Terminal: tmux 3.4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        CPU: 13th Gen Intel&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;R&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Core&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;TM&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; i5-1335U &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;12&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; @ 4.60 GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        GPU: Intel Iris Xe Graphics @ 1.25 GHz &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Integrated&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Memory: 9.86 GiB / 15.27 GiB &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;65%&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Swap: 677.00 MiB / 2.00 GiB &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;33%&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                        Disk &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;/&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: 88.81 GiB / 1.82 TiB &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;5%&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; - btrfs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;即便是已經足夠穩定的 OpenSUSE，也是可以很輕易的被搞的不穩定，正如 debian 在 &lt;a href=&#34;https://wiki.debian.org/DontBreakDebian&#34;&gt;DontBreakDebian&lt;/a&gt; 一文中提到的：&lt;/p&gt;</description>
    </item>
    <item>
      <title>透過 CLI 調整藍牙耳機音訊設定</title>
      <link>https://www.omegaatt.com/blogs/develop/2024/change_bluetooth_audio_profile_by_using_pactl/</link>
      <pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2024/change_bluetooth_audio_profile_by_using_pactl/</guid>
      <description>&lt;p&gt;接續著 &lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2023/kde_neon_pipewire_and_more_bluetooth_kde_neon_pipe_wire_and_more_bluetooth_codec&#34;&gt;KDE neon / Ubuntu 啟用 PipeWire 與 LDAC/AAC/AptX 藍芽編碼&lt;/a&gt;，每當連線到藍芽耳機時，語音設定檔在使用 LDAC 後，就無法同時使用麥克風，這樣一來在開會時，就需要手動到設定裡面去調整語音設定檔。&lt;/p&gt;
&lt;p&gt;身為一個懶惰鬼，可以用鍵盤解決的就不會用滑鼠去點，發現可以通過 pactl（PulseAudio）在 cli 直接設定 audio profile。&lt;/p&gt;
&lt;p&gt;首先，我們通過 &lt;code&gt;bluetoothctl&lt;/code&gt; 列出藍芽設備的實體位置&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bluetoothctl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;EAH-A800&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Device 88:C9:E8:B1:5D:AE WF-1000XM4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Device DC:22:D2:85:85:15 MX Master 3S
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Device B8:20:8E:35:CB:D0 EAH-A800
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;文章內舉例的目標為 EAH-A800，也就是 &lt;code&gt;B8:20:8E:35:CB:D0&lt;/code&gt;
接著需要確認目前藍牙裝置支持的音訊設定檔。可以透過 &lt;code&gt;pactl list cards short&lt;/code&gt; 來列出目前啟用的設備&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ pactl list cards short
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;47&lt;/span&gt;      alsa_card.usb-Shure_Inc_Shure_MV7-00    alsa
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;48&lt;/span&gt;      alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic alsa
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;49&lt;/span&gt;      alsa_card.usb-NuPrime_NuPrime_DAC-9H-00 alsa
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1002&lt;/span&gt;    bluez_card.B8_20_8E_35_CB_D0    module-bluez5-device.c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;發現目標為 &lt;code&gt;1002    bluez_card.B8_20_8E_35_CB_D0&lt;/code&gt;
再來通過 &lt;code&gt;pactl list cards&lt;/code&gt; 來獲取所有音訊設定檔&lt;/p&gt;</description>
    </item>
    <item>
      <title>透過 frp 與 GCP 打通家用 kubernetes cluster 的對外連線</title>
      <link>https://www.omegaatt.com/blogs/develop/2023/kubernetes_with_frp_tunnel_and_cert_manager/</link>
      <pubDate>Sun, 12 Nov 2023 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2023/kubernetes_with_frp_tunnel_and_cert_manager/</guid>
      <description>&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;在家裡面架著一台 lab，使用 proxmox ve 作為 vm server
透過 qemu 虛擬化一台 ubuntu server vm
在這個 vm 上使用 k3s，啟動 kubernetes 的服務
在 kubernetes 內跑著眾多 dockerize 的 containers。&lt;/p&gt;
&lt;p&gt;雖然我不是資深維運專家，但我知道這可能很搞笑。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/pulse/running-vm-container-ramesh-kumar&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2023/kubernetes_with_frp_tunnel_and_cert_manager/images/1596892531951.webp&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;會需要這麼麻煩還不是為了省一點點 GKE 的成本（即便可能沒省到），但在自家建一個 lab 環境而不用計算由時間計價的 infra 成本，還是挺省腦袋的。&lt;/p&gt;
&lt;p&gt;過去僅是將 service 使用 nodePort 來讓家裡面的其他裝置可以連線，或是使用 &lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2023/wireguard_easy&#34;&gt;wireguard 作為 VPN&lt;/a&gt; 來從遠端連線，就是沒有動力處理好 http service 與 TLS，趁這個假日剛好需要把 &lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2023/bitwarden_with_self_hosted_password_backend&#34;&gt;自架 vaultwarden 後端&lt;/a&gt; 給 expose 出來，便誕生了這篇。&lt;/p&gt;
&lt;p&gt;在當前的雲端運算時代，許多開發者和 IT 專業人員都面臨著一個共同的挑戰：如何有效地將位於不同網絡環境中的服務整合並暴露給公眾。特別是對於那些希望將家用網絡中的服務有效連接到公共雲端（如 GCP,AWS,Azure,OCI）的用戶來說，這一挑戰尤為突出。文內主要講述通過在 GCP VM 上部署 FRP（Fast Reverse Proxy）服務器，結合家中的 kubernetes cluster 上配置的 FRP 客戶端，來實現一個高效且安全的服務部署流程。&lt;/p&gt;
&lt;p&gt;透過此方式，我們不僅可以利用 GCP VM 作為公共 IP 的代理，實現從互聯網到家庭網絡的無縫連接，還能藉助 kubernetes 的強大功能進行快速的服務部署和管理。同時，利用 ingress-nginx 作為 ingress 控制器和 cert-manager 進行 TLS 設定，我們能夠確保服務的安全性和可靠性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>KDE neon / Ubuntu 啟用 PipeWire 與 LDAC/AAC/AptX 藍芽編碼</title>
      <link>https://www.omegaatt.com/blogs/develop/2023/kde_neon_pipewire_and_more_bluetooth_kde_neon_pipe_wire_and_more_bluetooth_codec/</link>
      <pubDate>Sun, 01 Oct 2023 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2023/kde_neon_pipewire_and_more_bluetooth_kde_neon_pipe_wire_and_more_bluetooth_codec/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.ghacks.net/2022/05/23/ubuntu-22-10-dropping-pulseaudio/&#34;&gt;Ubuntu 22.10 將 Audio Server 從 PulseAudio 切換成 PipeWire&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;遇到了什麼問題&#34;&gt;遇到了什麼問題&lt;/h2&gt;
&lt;p&gt;明明使用著有 LDAC 或是 AptX 解碼能力的藍芽耳機，卻只能被迫接受 sbc 的低傳輸率音質嗎，身為規格黨怎麼可以忍受這件事（即便大部份時間都只使用 Youtube Music 的 128K bps opus）&lt;/p&gt;
&lt;h2 id=&#34;解決方法&#34;&gt;解決方法&lt;/h2&gt;
&lt;p&gt;我們可以在 KDE neon 上啟用 PipeWire，並安裝更多藍芽轉碼器&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安裝 WirePlumber（PipeWire Manager）
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install -y pipewire-media-session- wireplumber
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;透過 systemd 管理 WirePlumber 的開機自啟 daemon
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl --user --now enable wireplumber.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;安裝 ALSA
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install -y pipewire-audio-client-libraries
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;安裝藍芽轉碼器
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install -y &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    libfdk-aac2 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    libldacbt-&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;abr,enc&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    libopenaptx0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install -y &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    libspa-0.2-bluetooth &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    pipewire-audio-client-libraries &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    pipewire-pulse
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;解除安裝 PulseAudio
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt remove -y pulseaudio-module-bluetooth
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;登出或重新啟動&lt;/li&gt;
&lt;li&gt;檢查成果
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ LANG&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;C pactl info | grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;^Server Name&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Server Name: PulseAudio &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;on PipeWire 0.3.48&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;成效&#34;&gt;成效&lt;/h2&gt;
&lt;p&gt;讓耳機連線至電腦後，選擇設定檔會出現更多轉碼器，諸如 SBC 與 LDAC，但若訊源只是普通串流，那其實聽起來不太可能會有差異。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 wireguard 與 aws 搭建虛擬內網</title>
      <link>https://www.omegaatt.com/blogs/develop/2023/wireguard_easy/</link>
      <pubDate>Sun, 01 Oct 2023 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2023/wireguard_easy/</guid>
      <description>&lt;p&gt;先前在「&lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel&#34;&gt;在 AWS 上使用 EC2 建立 FRP 玩玩內網穿透&lt;/a&gt;」一文中敘述了如何透過 AWS 實現虛擬穿透，也在內文中提到或許可以使用 wireguard 搭建內網，其原因也很簡單：每更新一個 port 都要重新設定 server side 實在是太麻煩了，拖更了進一年終於要開始寫 wireguard 的使用了。（AWS 免費也快到期了）&lt;/p&gt;
&lt;h2 id=&#34;遇到了什麼問題&#34;&gt;遇到了什麼問題&lt;/h2&gt;
&lt;p&gt;在使用 wireguard 來搭建 VPN 前，我是使用 &lt;a href=&#34;https://www.zerotier.com/&#34;&gt;zerotier&lt;/a&gt; 搭配 Mikrotik RB5009 所執行的 RouterOS 7.x 版本，讓外網可以連回家裡的網路環境&lt;/p&gt;
&lt;p&gt;但 zerotier 的網路拓樸是存在他們官方伺服氣上，與其相信 zerotier，我想在 vps 上建立虛擬機，並只許特定 ip 登入，可能更加可靠（？&lt;/p&gt;
&lt;h2 id=&#34;解決方法&#34;&gt;解決方法&lt;/h2&gt;
&lt;p&gt;於是我在 frp tunnel VM 上建立了 wireguard 節點，作為外網與內網溝通的橋樑。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wireguard.com/&#34;&gt;wireguard&lt;/a&gt; 是一個高效的現代化 VPN，目標是比 IPsec 更快。在 2020 年時正式推出 1.0.0 版本。&lt;/p&gt;
&lt;p&gt;wireguard 的拓樸實際上是 peer2peer，甚至可以達到 full mesh，但礙於錢錢不夠，單一個節點作為 server side 就足夠了。&lt;/p&gt;
&lt;h3 id=&#34;server&#34;&gt;server&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;使用 docker-compose 能快速部署 wireguard 服務，我們使用的是 &lt;a href=&#34;https://github.com/wg-easy/wg-easy&#34;&gt;wg-easy&lt;/a&gt;
簡單換掉一些參數:&lt;/p&gt;</description>
    </item>
    <item>
      <title>KDE Neon 使用心得與踩雷紀錄</title>
      <link>https://www.omegaatt.com/blogs/develop/2023/kde_neon_experience/</link>
      <pubDate>Sun, 04 Jun 2023 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2023/kde_neon_experience/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;年初為了 &lt;a href=&#34;https://arc.net/&#34;&gt;arc browser&lt;/a&gt; 裝了一台 Hackintosh，因為原因又花了點時間裝了 &lt;a href=&#34;https://neon.kde.org/&#34;&gt;KDE Neon&lt;/a&gt;，這邊紀錄一下使用心得與踩雷紀錄。時間線大概是&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;快快樂樂使用 wsl2&lt;/li&gt;
&lt;li&gt;wsl 中踩了不少坑，想要嘗試 unix liked 的系統&lt;/li&gt;
&lt;li&gt;好心人提供 arc browser 的邀請，萌生了裝 Hackintosh 的念頭
&lt;ul&gt;
&lt;li&gt;在 HP Z2 G4 上裝了 Hackintosh，但是沒有事前做足功課，內顯圖形記憶體(P630)始終是 7mb&lt;/li&gt;
&lt;li&gt;買了張 amd WX4100 督上去，大幅提昇圖形性能，卻也沒再花時間繼續深入&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;嘗試在 windows 主機上雙系統 (windows + linux):
&lt;ul&gt;
&lt;li&gt;一開始直接選擇熟悉的 ubuntu，安裝了 ubuntu desktop 版本，由於是 nvidia 顯示卡，很快的遇到了硬體解碼問題&lt;/li&gt;
&lt;li&gt;開始嘗試 &lt;a href=&#34;https://github.com/elFarto/nvidia-vaapi-driver&#34;&gt;nvidia-vaapi-driver&lt;/a&gt;，但是遇到了很多問題，最後放棄&lt;/li&gt;
&lt;li&gt;想換到 amd 顯示卡，但是又不想花錢，於是想說看看其他發布版是否能解決&lt;/li&gt;
&lt;li&gt;從 Linux Mint, Manjaro, KEO Neon 中選擇了同樣是 ubuntu 底，卻是 KDE 團隊維護團隊的 KDE Neon&lt;/li&gt;
&lt;li&gt;不出意外的一樣遇到了 nvidia 驅動問題，雖然 firefox 已經可以順利硬體加速，但是 chromium 等仍然無法硬體加速&lt;/li&gt;
&lt;li&gt;這時候已經花了不少時間在這個問題上，於是決定換到 amd 顯示卡(內顯)&lt;/li&gt;
&lt;li&gt;在 Minisforum UM560 上安裝了 KDE Neon，一切順利，驅動毫無問題，硬體加速也正常&lt;/li&gt;
&lt;li&gt;嘗試裝了 ventura theme，讓他稍微好看一點&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;持續與 wayland 相處，走一步是一步&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ neofetch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;..---+/---..&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;                raiven@um560
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;---.&lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;.---.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;            ------------
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .--.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;-:-.         OS: KDE neon 5.27 x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:/:     &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;.----//----.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;     :/-        Host: UM560
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   .:.    &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;---&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;--.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;    .:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;      Kernel: 5.19.0-43-generic
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;--&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;                .:-    &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:.     Uptime: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; hour, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; mins
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;/    &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:.      &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;.-::-.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;      -:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;/&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;    Packages: &lt;span style=&#34;color:#ae81ff&#34;&gt;1924&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;dpkg&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;snap&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; /.    /.     &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:++++++++:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;     .:    .:    Shell: zsh 5.8.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;/    .:     &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;+++++++++++/      /&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;+&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;   Resolution: 2560x1440
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/+&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;   --     .++++++++++++&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;     :.   .+:   DE: Plasma 5.27.5
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;/    .:     &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;+++++++++++/      /&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;+&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;   WM: kwin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; /&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;    /.     &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:++++++++:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;     .:    .:    Theme: &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Plasma&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, Colloid-Dark &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK2/3&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ./    &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:.      &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;.:::-.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;      -:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;/&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;    Icons: Cupertino-Ventura &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Plasma&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, Cupertino-Ventura &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK2/3&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  .:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;--&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;                .:-    &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:.     Terminal: konsole
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   .:.    &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;---&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;          &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;--.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;    .:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;      CPU: AMD Ryzen &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; 5625U with Radeon Graphics &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;12&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; @ 2.300GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:/:     &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;.----//----.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;     :/-        GPU: AMD ATI 04:00.0 Barcelo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      .-:.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;-:-.         Memory: 6265MiB / 31519MiB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;---.&lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;``&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;.---.&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;..---+/---..&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;post-install-kde-neon&#34;&gt;Post Install KDE Neon&lt;/h2&gt;
&lt;h3 id=&#34;解決-key-過舊&#34;&gt;解決 key 過舊&lt;/h3&gt;
&lt;p&gt;當使用 &lt;code&gt;sudo apt update&lt;/code&gt; 時可能會發生&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何優雅地批次安裝 Nerd font 字型</title>
      <link>https://www.omegaatt.com/blogs/develop/2023/install_fonts/</link>
      <pubDate>Wed, 03 May 2023 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2023/install_fonts/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/ryanoasis/nerd-fonts&#34;&gt;fonts repo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;接觸 wsl/ubuntu 的這幾年，經常會需要安裝 zsh 以及字型，因此誕生了 &lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2022/zsh-cheat-sheet&#34;&gt;cheat sheet&lt;/a&gt;，久而久之連下載-&amp;gt;解壓縮-&amp;gt;安裝這個過程，都懶了。&lt;/p&gt;
&lt;p&gt;於是寫了一個批次下載並安裝最新版本的 Nerd Fond 字型的 shell script，讓 wsl 可以安裝 windows 的字型，linux 可以安裝 linux 字型。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;declare target&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linux&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;declare repo&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ryanoasis/nerd-fonts&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;declare -a fonts&lt;span style=&#34;color:#f92672&#34;&gt;=(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  BitstreamVeraSansMono
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  CodeNewRoman
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  DroidSansMono
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  FiraCode
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  FiraMono
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Go-Mono
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Hack
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Hermit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  JetBrainsMono
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Meslo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Noto
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Overpass
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ProggyClean
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  RobotoMono
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  SourceCodePro
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  SpaceMono
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  UbuntuMono
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ARGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;getopt -o p --long windows -- &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; $? -ne &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;getopt failed: &amp;#34;&lt;/span&gt; $ARGS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  exit &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;eval set -- &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;ARGS&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; true
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -p|--windows&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    target&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;windows
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    shift
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    shift
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    break
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;get_latest_release&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;curl --silent &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://api.github.com/repos/&lt;/span&gt;$@&lt;span style=&#34;color:#e6db74&#34;&gt;/releases/latest&amp;#34;&lt;/span&gt; |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#34;tag_name&amp;#34;:&amp;#39;&lt;/span&gt; |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sed -E &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/.*&amp;#34;([^&amp;#34;]+)&amp;#34;.*/\1/&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; install_linux_fonts&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  local fonts_dir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  fonts_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;HOME&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/.local/share/fonts&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt; ! -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$fonts_dir&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mkdir -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$fonts_dir&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  mv $@/*.ttf $fonts_dir/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# fc-cache -fv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Install font for the current user. It&amp;#39;ll appear in &amp;#34;Font settings&amp;#34;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; install_windows_fonts&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  local dst_dir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  dst_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;wslpath &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;cmd.exe /c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;echo %LOCALAPPDATA%\Microsoft\\Windows\\Fonts&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null | sed &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/\r$//&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  mkdir -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$dst_dir&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  local src
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; src in &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    local file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;basename &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$src&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    test -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$dst_dir&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; cp -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$src&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$dst_dir&lt;span style=&#34;color:#e6db74&#34;&gt;/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    local win_path
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    win_path&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;wslpath -w &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$dst_dir&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo $win_path
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    reg.exe add                                                      &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HKCU\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;      /v &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;file%.*&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; (TrueType)&amp;#34;&lt;/span&gt;  /t REG_SZ /d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$win_path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; /f 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; main&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  local version
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  version&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt; get_latest_release $repo &lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  local tmp_dir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  tmp_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;mktemp -d&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  trap &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rm -rf &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;tmp_dir@Q&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; INT TERM EXIT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; font in &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;fonts[@]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    zip_file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;font&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.zip&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    download_url&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.com/&lt;/span&gt;$repo&lt;span style=&#34;color:#e6db74&#34;&gt;/releases/download/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;version&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;zip_file&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Downloading &lt;/span&gt;$download_url&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    wget -q --show-progress -P &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$tmp_dir&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$download_url&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# unzip -o means replace file without asking.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    unzip -o &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$tmp_dir&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;$zip_file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$tmp_dir&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rm &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$tmp_dir&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;$zip_file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  find &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$tmp_dir&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; -name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;*Windows Compatible*&amp;#39;&lt;/span&gt; -delete
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$target&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linux&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    install_linux_fonts $tmp_dir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$target&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;windows&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    install_windows_fonts $tmp_dir/*.ttf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;main
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\033[0;32m&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Fonts successfully installed.&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\033[0m&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;若沒有要改目標字型也可以直接透過 github 上的檔案來安裝&lt;/p&gt;</description>
    </item>
    <item>
      <title>WSL2 中使用 systemd 管理 podman 的 container</title>
      <link>https://www.omegaatt.com/blogs/develop/2023/wsl2_systemd_podman/</link>
      <pubDate>Mon, 13 Feb 2023 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2023/wsl2_systemd_podman/</guid>
      <description>&lt;p&gt;原本使用 &lt;a href=&#34;https://github.com/nullpo-head/wsl-distrod&#34;&gt;wsl-distrod&lt;/a&gt; 來作為 wsl 中 systemd 的實現方式，後來 &lt;a href=&#34;https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/&#34;&gt;microsoft 宣布 wsl 支持 systemd&lt;/a&gt; 後，distrod 等等 repo 就沒有在更新了呢，是巧合嗎?我不這麼認為。&lt;/p&gt;
&lt;p&gt;這篇簡略紀錄 wsl2 中啟用 systemd 作為 process 管理工具以及配合紅帽推出的 &lt;a href=&#34;https://podman.io/&#34;&gt;podman&lt;/a&gt; 來取代(斷捨離)docker desktop。&lt;/p&gt;
&lt;h2 id=&#34;環境&#34;&gt;環境&lt;/h2&gt;
&lt;p&gt;wsl2 + ubuntu 22.04&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;❯ neofetch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            .-/+oossssoo+/-.               raiven@raiven
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:+ssssssssssssssssss+:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;           -------------
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 22.04.1 LTS on Windows &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .ossssssssssssssssssdMMMNysssso.       Kernel: 5.10.43.3-microsoft-standard-WSL2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   /ssssssssssshdmmNNmmyNMMMMhssssss/      Uptime: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; hours, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; mins
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  +ssssssssshmydMMMMMMMNddddyssssssss+     Packages: &lt;span style=&#34;color:#ae81ff&#34;&gt;2005&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;dpkg&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;snap&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Shell: zsh 5.8.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Theme: Adwaita &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK3&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Icons: Adwaita &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GTK3&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Terminal: Windows Terminal
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: AMD Ryzen &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt; 5900X &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;24&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; @ 3.700GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+sssshhhyNMMNyssssssssssssyNMMMysssssss+   GPU: dbac:00:00.0 Microsoft Corporation Device 008e
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Memory: 1427MiB / 15966MiB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  +sssssssssdmydMMMMMMMMddddyssssssss+
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   /ssssssssssshdmNNNNmyNMMMMhssssss/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    .ossssssssssssssssssdMMMNysssso.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      -+sssssssssssssssssyyyssss+-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;:+ssssssssssssssssss+:&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            .-/+oossssoo+/-.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;wsl2-中啟用-systemd&#34;&gt;wsl2 中啟用 systemd&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;請確保 wsl2 的版本是 version 2，可以在 cmd/powershell 中查看&lt;/p&gt;</description>
    </item>
    <item>
      <title>解決 VM 關機時等待容器關閉</title>
      <link>https://www.omegaatt.com/blogs/develop/2023/k3s_kill_all/</link>
      <pubDate>Wed, 11 Jan 2023 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2023/k3s_kill_all/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[     *] A stop job is running for libcontainer container xxxxxxxx (10s / 1m30s)_
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;過去 kubernetes 還跟 docker-shim 手牽手時，在關閉 k8s node vm 時常常出現等待 &lt;code&gt;docker-shim&lt;/code&gt; 關閉，直到一分三十秒被 time out 才正確關機。若是開發機就當作去尿尿的時間就好，但若是重要的環境停機備份，或是斷電時靠 UPS 提供電源等待系統關機，那浪費時間就不好了。&lt;/p&gt;
&lt;p&gt;這次在 home lab 中採取省電措施，不用 &lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2022/centos-7-kubernetes-install.html&#34;&gt;1 master + 1 node&lt;/a&gt; 的組合，直接使用 &lt;a href=&#34;https://k3s.io/&#34;&gt;k3s&lt;/a&gt; 作為家用 kubernetes 的實驗環境。但依然在關機時會需要等待 containerd-shim 等等被 time out kill 才會完成關機。&lt;/p&gt;
&lt;p&gt;若是沒有做特別的設定，或是沒有過分的 stateful pod，找到了 &lt;a href=&#34;https://github.com/k3s-io/k3s/issues/2400#issuecomment-1312621468&#34;&gt;k3s issue #2400&lt;/a&gt; 中的解決方法&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.k3s.io/upgrades/killall&#34;&gt;Stopping K3s&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To allow high availability during upgrades, the K3s containers continue running when the K3s service is stopped.&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 AWS 上使用 EC2 建立 FRP 玩玩內網穿透</title>
      <link>https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/</link>
      <pubDate>Sat, 19 Nov 2022 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;TL;DR&lt;/p&gt;
&lt;p&gt;2022 年上旬熱衷於軟路由，在 Raspberry Pi 4b 上裝了 openWRT 來玩，使用 USB 網卡作為 LAN NIC，雖然使用上完全沒有問題，但透過 USB 始終有個芥蒂，「就不能多個 pci-e 來接網卡嗎」，於是衝動順勢買了 Mikrotik RB5009UG+S+IN。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mikrotik.com/product/rb5009ug_s_in&#34;&gt;RB5009G&lt;/a&gt; 為 arm64(ARMv8)，系統為 RouterOS v7，透過 &lt;a href=&#34;https://help.mikrotik.com/docs/display/ROS/ZeroTier&#34;&gt;ZeroTier&lt;/a&gt; 插件可以實現內網穿透以及 VPN，一直以來可在外連回家裡做事，連 Jellyfin 使用起來都很順。&lt;/p&gt;
&lt;p&gt;事出必有因，ZeroTier 的服務器在未知的地方，VPN 的設定也是在網頁上設定，即便不需要太過擔心，但若是 ZeroTier 被攻擊，那自己的內網也危險了。後來又遇到一次，在某處透過 Windows rdp 連回家開 VScode 做事，但敲鍵盤會有一到兩秒的延遲，加劇了需要替換掉 ZeroTier 的想法。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/fatedier/frp&#34;&gt;frp&lt;/a&gt; 是一個由 golang 寫出來的 reverse proxy&amp;hellip;，其他的到 github 看比較清楚 XD。&lt;/p&gt;
&lt;p&gt;這篇文章主要是透過 frp 建立內網穿透，雖然大部分都在建立 AWS EC2 instance，frp 的建立實在是非常簡單，VPN (maybe WireGuard?)的實現會另外再寫一篇。&lt;/p&gt;
&lt;h1 id=&#34;事前準備&#34;&gt;事前準備&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;一個 AWS 帳號&lt;/li&gt;
&lt;li&gt;一台 linux 主機作為 frp client&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;建立-amazon-ec2&#34;&gt;建立 Amazon EC2&lt;/h1&gt;
&lt;h2 id=&#34;建立執行個體&#34;&gt;建立執行個體&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;建立好帳號後，進入 &lt;a href=&#34;https://console.aws.amazon.com/console/&#34;&gt;AWS console&lt;/a&gt;，點擊 EC2。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_lk5fqYZhYL.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;點擊啟動執行個體
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_H0uFz5vH3y.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;取名為 frp-tunnel
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_I3wkK7askV.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;選用自己習慣的 linux distro，這邊我習慣使用 ubuntu，故選 ubuntu 22.04。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_z5KPS18q6J.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;執行個體類型選 t2.micro，金鑰由於安全因素，請建立新的金鑰對(key pair)
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_8Cfa1EOR9c.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;由於我使用 ubuntu 22.04，故使用 ED25519 來加密(RSA 已被淘汰)。下載下來的 pem or ppk 需要好好保存，未來不能再下載。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_VzVIcfHUg0.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;網路設定的部分，ssh 的 source 使用&lt;code&gt;我的IP&lt;/code&gt;，不要一開機就被陌生人打穿。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_Qx4K4tK1jT.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;設定存儲的部分，若是使用 AWS Linux 的話可以預設 8GB 沒問題，我自己的 ubuntu vm 習慣 20GB，所以設成 20GB。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_Pu7Weq1NXU.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;最後確認一下右邊的摘要，就可以點擊啟動執行個體。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_dJxs8LK4lG.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;建立完成後就會轉跳至完成頁面。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_TRIPSPPEva.webp&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ssh-連線至-ec2&#34;&gt;ssh 連線至 EC2&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 console 頁可以看到剛剛建立的 EC2 instance，點擊可以進入 instance 頁面。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2022/frp-tunnel/images/chrome_JuQsMOCLAR.webp&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>zsh &amp; oh-my-zsh &amp; tmux install cheat sheet on ubuntu 22.04</title>
      <link>https://www.omegaatt.com/blogs/develop/2022/zsh-cheat-sheet/</link>
      <pubDate>Sun, 30 Oct 2022 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2022/zsh-cheat-sheet/</guid>
      <description>&lt;h2 id=&#34;oh-my-zsh--power-lever-10k&#34;&gt;oh my zsh &amp;amp; power lever 10k&lt;/h2&gt;
&lt;ol start=&#34;0&#34;&gt;
&lt;li&gt;
&lt;p&gt;install deps&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install git curl -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;install zsh&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install zsh -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;check is installed&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat /etc/shells | grep zsh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# raiven@k3s:~$ cat /etc/shells | grep zsh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# /bin/zsh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# /usr/bin/zsh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;install &lt;a href=&#34;https://github.com/ohmyzsh/ohmyzsh#basic-installation&#34;&gt;oh-my-zsh&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sh -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;install &lt;a href=&#34;https://github.com/romkatv/powerlevel10k#oh-my-zsh&#34;&gt;powerlevel10k&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone --depth&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; https://github.com/romkatv/powerlevel10k.git &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;ZSH_CUSTOM&lt;span style=&#34;color:#66d9ef&#34;&gt;:-&lt;/span&gt;$HOME/.oh-my-zsh/custom&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;/themes/powerlevel10k
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;install fonts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;wsl:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bash -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/omegaatt36/dotfiles/main/install_fonts.sh&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; --windows
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;linux:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bash -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/omegaatt36/dotfiles/main/install_fonts.sh&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;change login shell(must logout and login again)&lt;/p&gt;</description>
    </item>
    <item>
      <title>proxmox ve shrink vm disk size</title>
      <link>https://www.omegaatt.com/blogs/develop/2022/pve-shrink-vm-disk/</link>
      <pubDate>Sun, 04 Sep 2022 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2022/pve-shrink-vm-disk/</guid>
      <description>&lt;p&gt;由於 zpool 吃超過 80%，故將其中一個 VM(k8s-worker) 的硬碟縮小(200GB=&amp;gt;100GB)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pve: 7.2.7&lt;/li&gt;
&lt;li&gt;zfs:
&lt;ul&gt;
&lt;li&gt;zfs-2.1.5-pve1&lt;/li&gt;
&lt;li&gt;zfs-kmod-2.1.5-pve1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;確認 vm disk 剩餘空間&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ df -h
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem      Size  Used Avail Use% Mounted on
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/vda1        197G   14G   178G  7% /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vm 關機&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;下載 &lt;a href=&#34;https://sourceforge.net/projects/gparted/&#34;&gt;gparded iso&lt;/a&gt; 到 pve&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vm 從 gparded iso 開機並&lt;a href=&#34;https://www.howtogeek.com/114503/how-to-resize-your-ubuntu-partitions/&#34;&gt;縮減 disk 大小&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pve server 針對 vm 的 hard disk 調整占用大小
switch(allocate storage type)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;case LV:
&lt;code&gt;lvreduce -L 5G /dev/pve/disk-name (縮小到只剩 5G)&lt;/code&gt;
or
&lt;code&gt;lvreduce -L -5G /dev/pve/disk-name (縮小 5G)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;case qcow2:
&lt;code&gt;qemu-img resize --shrink &amp;lt;vmfile.qcow2&amp;gt; [+-] or size&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;case ZFS:
&lt;code&gt;zfs set volsize=&amp;lt;new size&amp;gt;G rpool/vm-&amp;lt;vm id&amp;gt;-disk-&amp;lt;disk number&amp;gt;&lt;/code&gt;
舉例:
vm(&lt;code&gt;205&lt;/code&gt;) 的虛擬硬碟(&lt;code&gt;vm-205-disk-0&lt;/code&gt;)放在 zpool &lt;code&gt;land&lt;/code&gt; 上面，已經將 vm 縮小至 100GB
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;❯ zfs list
NAME USED AVAIL REFER MOUNTPOINT
land/vm-205-disk-0 236G 354G 119.3G -

    ❯ zfs set volsize=100G land/vm-205-disk-0

    ❯ zfs list
    NAME                     USED  AVAIL     REFER  MOUNTPOINT
    land/vm-205-disk-0       136G   354G     19.3G  -
    ```
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在網頁 GUI 中修改強制刷新 disk。修改 disk 的設定，再調整回來
&lt;img loading=&#34;lazy&#34; src=&#34;https://md.stranity.org/uploads/upload_d7fbc8d92382438b1b485a23f3e008e9.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS 7 kubernetes &#43; containerd &#43; calico basic installation tutorial</title>
      <link>https://www.omegaatt.com/blogs/develop/2022/centos-7-kubernetes-install/</link>
      <pubDate>Sun, 20 Feb 2022 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2022/centos-7-kubernetes-install/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;鑒於最近接到 1 CentOS master + 2 Gentoo node k8s cluster 建置雜事，被自己不熟系統雷到，做個筆記紀錄一下，未來敲敲指令就可以了&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 ..                    root@master
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               .PLTJ.                  -----------
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;                 OS: CentOS Linux &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Core&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     KKSSV&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; 4KKK LJ KKKL.&amp;#39;&lt;/span&gt;VSSKK        Host: KVM/QEMU &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Standard PC &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;i440FX + PIIX, 1996&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; pc-i440fx-6.1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     KKV&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; 4KKKKK LJ KKKKAL &amp;#39;&lt;/span&gt;VKK        Kernel: 5.4.180-1.el7.elrepo.x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     V&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;VKKKK LJ KKKKV&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;V        Uptime: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; mins
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     .4MA.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;VKK LJ KKV&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;.4Mb.        Packages: &lt;span style=&#34;color:#ae81ff&#34;&gt;359&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;rpm&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   . KKKKKA.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;V LJ V&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;.4KKKKK .      Shell: bash 4.2.46
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; .4D KKKKKKKA.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; LJ &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;.4KKKKKKK FA.    Terminal: /dev/pts/0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;QDD ++++++++++++  ++++++++++++ GFD&amp;gt;   CPU: Common KVM processor &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;4&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; @ 3.493GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;VD KKKKKKKK&amp;#39;&lt;/span&gt;.. LJ ..&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;KKKKKKKK FV     Memory: 97MiB / 16015MiB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   &amp;#39;&lt;/span&gt; VKKKKK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. .4 LJ K. .&amp;#39;&lt;/span&gt;KKKKKV &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;#39;&lt;/span&gt;VK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. .4KK LJ KKA. .&amp;#39;&lt;/span&gt;KV&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     A. . .4KKKK LJ KKKKA. . .4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     KKA. &amp;#39;&lt;/span&gt;KKKKK LJ KKKKK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; .4KK
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     KKSSA. VKKK LJ KKKV .4SSKK
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;              &amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;               &amp;#39;&lt;/span&gt;MKKM&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                 &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此篇 CentOS 寄宿於 PVE 下，kernel 已升級為 &lt;code&gt;5.4.180-1.el7.elrepo.x86_64&lt;/code&gt;
使用 containerd 作為 cri
使用 calico 作為 cni，並使用 host 唯一的網卡，不做其他進階設定。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS 7 upgrade kernel</title>
      <link>https://www.omegaatt.com/blogs/develop/2022/centos-7-upgrade-kernel/</link>
      <pubDate>Sun, 20 Feb 2022 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2022/centos-7-upgrade-kernel/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;查看目前 kernel 版本&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; uname -a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Linux R350-1 3.10.0-1160.53.1.el7.x86_64 &lt;span style=&#34;color:#75715e&#34;&gt;#1 SMP Fri Jan 14 13:59:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;添加 ELRepo 公鑰&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝 ELRepo yum 來源&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查看可用的 kernel&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum --disablerepo&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt; --enablerepo&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;elrepo-kernel&amp;#34;&lt;/span&gt; list available
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝最新的 kernel，挑一個安裝，這邊選擇 kernel-lt&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kernel-lt 為長期支援版&lt;/li&gt;
&lt;li&gt;kernel-mt 為 linus 個人維護版&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;yum --enablerepo=elrepo-kernel install kernel-lt
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查看目前已安裝的 kernel&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo awk -F&lt;span style=&#34;color:#ae81ff&#34;&gt;\&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;$1==&amp;#34;menuentry &amp;#34; {print i++ &amp;#34; : &amp;#34; $2}&amp;#39;&lt;/span&gt; /etc/grub2.cfg
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; : CentOS Linux &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;5.4.180-1.el7.elrepo.x86_64&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Core&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; : CentOS Linux &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;3.10.0-1160.53.1.el7.x86_64&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Core&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; : CentOS Linux &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;3.10.0-1160.el7.x86_64&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Core&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; : CentOS Linux &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0-rescue-b804ce66fb404eb7a5dd04547e3e972e&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Core&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果結果為空，或是沒有這個文件，可以先進行 &lt;code&gt;grub2-mkconfig -o /boot/grub2/grub.cfg&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>改善 Proxmox VE/Debian 始終跑在最高頻率</title>
      <link>https://www.omegaatt.com/blogs/develop/2022/pve_power-save/</link>
      <pubDate>Sun, 09 Jan 2022 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2022/pve_power-save/</guid>
      <description>&lt;p&gt;這幾天把便宜撿到的 Threadripper 2950X 平台也上 Proxmox VE 玩玩了，裝完系統後才發現自己太習慣於 windows 下的電源管理，一直都沒發現 linux 下 CPU 頻率都是拉滿的狀態，找了&lt;a href=&#34;https://forum.proxmox.com/threads/fix-always-high-cpu-frequency-in-proxmox-host.84270/&#34;&gt;debian 下進行電源管理的電源計畫設定教學&lt;/a&gt;達到降溫省電，順便做做紀錄。&lt;/p&gt;
&lt;p&gt;此篇文章的硬體基於&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;root@raiven:~# neofetch
       _,met$$$$$gg.          root@raiven
    ,g$$$$$$$$$$$$$$$P.       -----------
  ,g$$P&amp;#34;     &amp;#34;&amp;#34;&amp;#34;Y$$.&amp;#34;.        OS: Debian GNU/Linux 10 (buster) x86_64
 ,$$P&amp;#39;              `$$$.     Host: HP Z2 SFF G4 Workstation
&amp;#39;,$$P       ,ggs.     `$$b:   Kernel: 5.4.106-1-pve
`d$$&amp;#39;     ,$P&amp;#34;&amp;#39;   .    $$$    Uptime: 276 days, 9 hours, 51 mins
 $$P      d$&amp;#39;     ,    $$P    Packages: 719 (dpkg)
 $$:      $$.   -    ,d$$&amp;#39;    Shell: bash 5.0.3
 $$;      Y$b._   _,d$P&amp;#39;      Terminal: /dev/pts/1
 Y$$.    `.`&amp;#34;Y$$$$P&amp;#34;&amp;#39;         CPU: Intel Xeon E-2278G (16) @ 5.000GHz
 `$$b      &amp;#34;-.__              GPU: Intel Device 3e9a
  `Y$$                        Memory: 48763MiB / 64099MiB
   `Y$$.
     `$$b.
       `Y$$b.
          `&amp;#34;Y$b._
              `&amp;#34;&amp;#34;&amp;#34;

root@raiven:~# ^C
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;用 &lt;code&gt;watch -n 1 &amp;quot;cat /proc/cpuinfo | grep MHz&amp;quot;&lt;/code&gt; 可以查看當下的 cpu 頻率狀態。&lt;/p&gt;</description>
    </item>
    <item>
      <title>VScode SFTP 快速同步文件到 Server</title>
      <link>https://www.omegaatt.com/blogs/develop/2020/vscode_sftp/</link>
      <pubDate>Mon, 20 Jan 2020 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2020/vscode_sftp/</guid>
      <description>&lt;p&gt;當 Server 環境使用白名單搭配 Reverce-Proxy 時，或是 dev、test 環境不供外部使用時，或許會將部分 code 存在只能靠內網連線的主機上，並透過 OpenSSH 供內部遠端操作。&lt;/p&gt;
&lt;p&gt;而 PHP 快速部屬的便捷在於替換單一檔案不須重啟 Server (前提是並非把檔案載進 Memory 或轉化守護進程)，此時可以依靠 FTP 上傳單一檔案即好。但每次改個 code 還要想辦法上傳程式碼實在是太浪費時間了，如標題所述，如何快速同步 code 到 Server 上呢。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/liximomo/vscode-sftp&#34;&gt;vscode-sftp&lt;/a&gt; 是一個在 VScode 中非常方便的擴充套件，上傳/下載/同步、單一/多伺服器、ftp/sftp，僅需設置一份或多份的設定檔便能(偷懶不切視窗)上傳檔案到 Server。然而正是環境 (production) 還是走正常 CI/CD 比較好。&lt;/p&gt;
&lt;h1 id=&#34;安裝&#34;&gt;安裝&lt;/h1&gt;
&lt;p&gt;首先在 VScode 中的市集，或是快捷鍵 ctrl+shift+P (或 F1) 打開指令窗口後輸入 extension:install。並搜尋 SFTP，認名作者 liximomo 點一下玩一年，上傳不花一分錢(支持者可以拉到下面點選 donate)。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://i.imgur.com/p0YZBxa.png&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;設定上傳環境參數&#34;&gt;設定上傳環境/參數&lt;/h1&gt;
&lt;p&gt;接著同樣打開指令窗口並輸入 SFTP: Config&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://i.imgur.com/ozI524w.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意由於是 JSON 格式，不能註解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;主要配置好host, port, username, privateKeyPath, remotePath, ignore这参数即可：
&lt;img loading=&#34;lazy&#34; src=&#34;https://i.imgur.com/m03U2cm.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;name : 檔案暱稱&lt;/li&gt;
&lt;li&gt;host : server IP/URL&lt;/li&gt;
&lt;li&gt;port : 若 server 建置好 ssh 環境，可將 port 端口改為 22&lt;/li&gt;
&lt;li&gt;username : 在 server 中的使用者名稱&lt;/li&gt;
&lt;li&gt;remotePath : 欲上傳的目錄位置&lt;/li&gt;
&lt;li&gt;privateKeyPath : 私鑰&lt;/li&gt;
&lt;li&gt;password : 若有設私鑰則可有(null)可無&lt;/li&gt;
&lt;li&gt;uploadOnSave : 自動上傳，個人是沒有開啟(經常性按 ctrl + S)&lt;/li&gt;
&lt;li&gt;ignore :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
    &amp;#34;name&amp;#34;: &amp;#34;my_work_space&amp;#34;,
    &amp;#34;host&amp;#34;: &amp;#34;192.168.X.X&amp;#34;,
    &amp;#34;port&amp;#34;: 22,
    &amp;#34;protocol&amp;#34;: &amp;#34;sftp&amp;#34;,
    &amp;#34;username&amp;#34;: &amp;#34;centos&amp;#34;,
    &amp;#34;remotePath&amp;#34;: &amp;#34;\\home\\centos\\***\\&amp;#34;,
    &amp;#34;privateKeyPath&amp;#34;: &amp;#34;C:\\***.pem&amp;#34;,
    &amp;#34;uploadOnSave&amp;#34;: false,
    &amp;#34;syncMode&amp;#34;: &amp;#34;update&amp;#34;,
    &amp;#34;ignore&amp;#34;: [
        &amp;#34;**/.vscode/**&amp;#34;,
        &amp;#34;**/.git/**&amp;#34;,
        &amp;#34;**/.svn/**&amp;#34;,
        &amp;#34;**/.DS_Store&amp;#34;
        ]
}
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;同步所有檔案&#34;&gt;同步所有檔案&lt;/h1&gt;
&lt;p&gt;儲存後按下同樣打開指令窗口並輸入「SFTP: Sync Local -&amp;gt; Remote」，再選取剛剛設定中的 name(ex.my_work_space) 便可以重部整份資料夾/工作區到遠端伺服器上囉。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
