# Ubuntu (desktop) 實驗平台搭建紀錄 > ~~咳咳,美觀調整紀錄。~~ 略過使用 live cd/usb 安裝 Ubuntu。 ## `SSH` 設定 > ssh 方便我們在遠端控制電腦,可依此使用 `SSHFS`, `VSCode remote service` 等方便功能。 * 安裝 ```bash sudo apt install openssh-server -y ``` * 啟用 ```bash sudo systemctl enable ssh # enable ssh server sudo ufw allow ssh # make ubuntu firewall enable ssh connections ``` * 確認伺服器端狀態是否正常 ```bash sudo systemctl status ssh# you should see ``` 應該看到類似以下結果。確認 `ssh.service` 和 `vendor preset` 為 `enable`,前者表當前是否啟用服務,後者表啟動時是否自動啟用本服務 (`ssh`)。 ```bash ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since ... ``` * (Optional) 將本地 ssh 公鑰加入 Ubuntu 伺服器 ```bash ssh-copy-id IP_OF_UBUNTU ``` ## VNC server > 圖形界面真香,參考[本網站](https://ailog.tw/lifelog/2022/11/19/ubuntu-vnc/) ## 優雅終端機設定 `oh my zsh` > ~~提升開發效率 X, 心情愉快 O~~ ### 建置目標 #### 主體 | Item | Target | Feature| | ------------- | ----------- |--| | Shell | [`zsh`](https://zh.wikipedia.org/zh-tw/Z_shell) | 比起 `bash` 有更多開箱即用的功能,且更能輕鬆客製化 | | Framework | [`oh my zsh`](https://ohmyz.sh/) | 能裝更多主題、外掛的 `zsh` 框架 | | Theme| [`powerlevel10k`](https://github.com/romkatv/powerlevel10k) | 極其美妙的終端機主題,內建許多外觀設定 | #### 外掛 * [`zsh completion`](https://github.com/zsh-users/zsh-completions): 根據當前的輸入自動補全命令。 * [`auto suggestion`](https://github.com/zsh-users/zsh-autosuggestions): 根據過往的命令與當前的輸入自動建議輸入。輸入時在背後會浮現淺色的提示。 * [`syntax highlighting`](https://github.com/zsh-users/zsh-syntax-highlighting): 對命令加上顏色標註。合法的命令顯示綠色、不合法的為紅色、字串為黃色... ### 下載並安裝必要套件 先安裝等等要用到的套件... ```bash # first package update sudo apt update -y && sudo apt upgrade -y # install mostly used modules sudo apt install git curl vim neofetch zsh -y ``` 然後進入 `zsh` (輸入 `zsh` 從當前 shell 進入 `zsh`),安裝 `oh my zsh`,接著下載 `zsh` 相關外掛於 `oh my zsh` 內。 > 使用 ZSH 變數將外掛放入 `oh my zsh` 內管理的命令自動化。 ```bash # install oh my zsh and zsh plugins yes | sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # zsh-completion git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions # zsh-autosuggestions git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions # zsh-syntax-highlighting git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting # powerlevel10k git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k # after this, go into zsh zsh ``` (以下為讓 `powerlevel10k` 能大展身手的等寬字型的安裝,非必要。) 由 [powerlevel10k 官方](https://github.com/romkatv/powerlevel10k#fonts)建議,使用 `Meslo Nerd Font` 連體字型最合適,該網站列敘該如何安裝此字型,並在終端機中使用。 ### 調整 `zsh` 客製化設定 接著進入 `zsh` 設定檔 `~/.zshrc`。 > 請使用 `vim`, `nano`, `emacs`, `gedit` 之類的文字編輯器,依照前面的命令的話,應該已經裝好 `vim` 了。 1. 將 `powerlevel10k` 主題加入設定 找到 `ZSH_THEME` 參數,修改設定。 ```bash # Set name of the theme to load --- if set to "random", it will # load a random theme each time oh-my-zsh is loaded, in which case, # to know which specific one was loaded, run: echo $RANDOM_THEME # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes ZSH_THEME="powerlevel10k/powerlevel10k" ``` 2. 將前面 clone 進來的外掛程式庫加入設定 注意 `zsh complition` 不應該直接加入 `plugins` 列表中。詳見 [issue 603](https://github.com/zsh-users/zsh-completions/issues/603#issuecomment-967116106)。 ```bash # auto suggestion, syntax highlighting plugins=(git zsh-autosuggestions zsh-syntax-highlighting) # zsh completion fpath+=${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src ``` 另外,以上設定必須在 `source $ZSH/oh-my-zsh.sh` 這行以前,因為該行即是啟動 `oh my zsh` 與其管理之所有外掛。 3. 啟用 `powerlevel10k` 主題 儲存對 `~./zshrc` 的修改,並用以下命令使其生效。 ```bash source ~/.zshrc ``` 此時 `powerlevel10k` 會根據當前終端機的字型提示我們跟如何完成此主題的快速調整。若對調整的結果不滿意,可使用 `powerlevel10k` 內建命令 `p10k configure` 來啟動快速設定程式。 4. (Optional) 使用 `neofetch` 將 `neofetch` 加入 `.zshrc` 的第一行,即可在每次開啟終端機時印出系統基本訊息。 ## Wake On LAN 網路喚醒 ### WOL (Wake On LAN) 介紹 原理是特殊的網卡在電腦關機時,仍能接收 Magic Packet (魔法封包),接收到時透過 PCI 通知主機板開機。默認接收 Magic Packet 的 Port 為 `9` 或 `7`。 ### 魔法封包 魔法封包的內容為 6 bytes 的 `F` 和 96 bytes 的目標網卡 MAC 地址 (48 bits) 重複 16 遍。故封包大小為 $$ 6 + \dfrac{48}{8 \rm{bit}} \times 16 = 102 \ (\rm{bytes}) $$ > 魔法封包的細節原文,引自[維基百科](https://en.wikipedia.org/wiki/Wake-on-LAN)。 > > The magic packet is a frame that is most often sent as a broadcast and that contains anywhere within its payload 6 bytes of all 255 (FF FF FF FF FF FF in hexadecimal), followed by sixteen repetitions of the target computer's 48-bit MAC address, for a total of 102 bytes. ### 設定 WOL 有三方面的設定要完成。 1. 硬體 首先確認**主機板**與**網卡**是否支援 WOL (當今網卡基本上都支援)。 接著進 BIOS,依照各個主機板不同的方式開啟 WOL 功能。 :::success 比如[本主機板](https://www.asus.com/tw/motherboards-components/motherboards/prime/prime-b660m-k-d4-csm/techspec/),[華碩官網](https://www.asus.com/tw/support/FAQ/1045950/)說要啟動 Power On By PCI-E 選項。 ::: 2. 作業系統 不同作業系統設定的方法不一。 * Ubuntu * Debian/TrueNAS * Arch Linux 由於 TrueNAS Scale 是以 Debian 為基礎打造,若在此之上是以乙太網連接的話,可以[參考本網站](https://wiki.debian.org/WakeOnLan)。 Ubuntu 雖然作為魔改版的 Debian,卻不可直接使用 Debian 的方法,具體可以參考[本網站](https://www.golinuxcloud.com/wake-on-lan-ubuntu/),下面也會說明差別。 以下簡單說明作法。 1. 確認 `ethtool` 是否已安裝 ```bash sudo apt install ethtool ``` 2. 確認乙太網設備名稱 ```bash ip a # 列出所有網路設備與相應的連線資訊 ``` 找到狀態為 `UP` 的乙太網卡,其名稱通常以 `e` 開頭,比如 `ethX`, `enpXsY` (`X`, `Y` 為某數字)。找到後,以下暫稱該乙太網卡為 `ethX`。 3. 確認乙太網設備狀態 ```bash sudo ethtool ethX ``` 會列出 `ethX` 的一系列狀態,其中 `g` 表有啟用 WOL;`d` 表未啟用。若只想單次設置 WOL,用以下命令即可。 ```bash sudo ethtool -s ethX wol g # 設定 ethX 的 wol 項目為 g (enable) ``` 4. 為網路介面設定自動啟用 `WOL` * Ubuntu Ubuntu 要讓每次開機時都運行上方指令,可以透過新增系統服務完成。 * 新增系統服務 ```bash sudo --preserve-env systemctl edit --force --full wol-enable.service ``` * 新增以下內容 ```bash [Unit] Description=Enable Wake-up on LAN [Service] Type=oneshot ExecStart=/sbin/ethtool -s ethX wol g [Install] WantedBy=basic.target ``` :::info 別忘記替換 `ethX` 為自己的網卡名稱 :) ::: * 重新載入守衛行程 ```bash sudo systemctl daemon-reload ``` * 啟用剛創建之 WOL 服務 ```bash sudo systemctl enable wol-enable.service ``` * TrueNAS 可以針對單獨某網卡或全域設定。若是前者,新增 `/etc/network/interfaces.d/ethX`,若是全域,則新增 `/etc/network/interfaces` 檔案,內部為: ```txt auto ethX iface ethX inet dhcp ethernet-wol g ``` :::info 別忘記替換 `ethX` 為自己的網卡名稱 :) ::: * Arch Linux * 以 yay 安裝 `wol-systemd` ```bash yay -S wol-systemd ``` * 啟動系統服務 > `@` 後面為監視 WOL 的網路介面 ```bash sudo systemctl enable wol@enp4s0 ``` 以上方法即可一勞永逸。 另外無線網卡的情況較複雜,而且 NAS 比較建議是走乙太網才較穩定且高速,故不特別介紹,有興趣者可參見[本網站](https://www.cyberciti.biz/faq/configure-wireless-wake-on-lan-for-linux-wifi-wowlan-card/)。 3. 啟動 此時 NAS 已經準備好被喚醒。我們需將 Magic Packet 送至網卡所在之主機的 Port `9` (or `7`)。 可以使用手機、電腦等喚醒。比如 Andriod 手機的 [WolOn](https://play.google.com/store/apps/details?id=com.bitklog.wolon&hl=zh_TW&gl=US)、Linux/macOS 的 `wakeonlan` 套件 (macOS 可使用 `brew` 下載使用)。 * 區域網路喚醒 以 `wakeonlan` 套件為例。預設會將 `MAC_ADDRESS` 發送至 `255.255.255.255:9` (也就是 braodcast)。套件使用細節可用 `wakeonlan` 命令查詢。 ```bash wakeonlan MAC_ADDRESS ``` * 網際網路喚醒 除了要知道 MAC 地址,還需要知道 IP 位置。 :::warning 只要扯上網際網路,一切就麻煩起來了 :p ::: 為此要解決兩個問題: * 家用環境下,可能會遇到浮動 IP 的議題,此時可使用 DDNS 服務,或者將 IP 轉為固定 IP。 * 要調整 Port Forwarding,將封包傳遞至正確的 LAN IP + Port。(常見是 External Port `9` 傳遞至`Host_LAN_IP:9`) ## Ubuntu 外觀客製化 # 動手搭建 NAS ## Ubuntu x ZFS Ubuntu 22.04 主動加入對 ZFS 的支援,不仿使用 ZFS 來搭建伺服器。 ### 儲存池操作 * 創建 * Basic (raid 0) 以數顆硬碟構建 raid 0 儲存池 `POOL_NAME`。 ```bash zpool create POOL_NAME [parameter] DISK_PATH [ DISK_PATH ... ] ``` 其中 `parameter` 可為以下。 | type | Basic | Mirror | Raid-z | Raid-z2 | |:---------:|:------:|:------:|:------:|:-------:| | meaning | raid 0 | raid 1 | raid 5 | raid 6 | | parameter | - | mirror | raidz | raidz2 | * 查看儲存持狀態 查看 `POOL_NAME` 的狀態,沒給參數會列出所有儲存持狀態。 ```bash zpool status [POOL_NAME] ``` * 加入、移除與刪除 加入/移除/刪除 `POOL_NAME` 儲存池。 ```bash zpool [import | export | destroy] POOL_NAME ``` * 取得、改變掛載資料夾 ```bash zfs get mountpoint POOL_NAME zfs set mountpoint=/NEW_MOUNT_POINT POOL_NAME ```