[教學] LibreNMS 串接 LINE 通知

在現代科技世界中,網路裝置監控與通知非常重要。LibreNMS 是一個開源的網路監控系統,可以用來監控網絡設備、伺服器…等。然而,對於一些使用者而言,LibreNMS 的通知設定可能會有一些小困難。我們將在這個系列文章中介紹幾種常用的通知方式:電子郵件、LINE、Telegram、GoogleChat…等。這些通知方式都可幫助使用者即時收到監視警報和報告,以便快速回應並保護他們的系統和網絡安全。

LibreNMS 系列文:

剛好工作會用到 LINE,所以把通知轉到 LINE 去,就讓我們看看要怎麼做吧!

抓下 Pull Request 的內容

目前截稿至今,目前還沒有人把 LINE 機器人通知功能的做進去,
小弟就順手貢獻程式碼,把這個功能加上 😎。

當然 LibreNMS 整套程式授權是 GPL,想當然爾貢獻的程式碼也是 GPL,歡迎大家使用。

只是官方還沒有允許 Pull Request 的內容,
如果覺得不錯,可以幫忙在原串留個言,加速系統演進。

https://github.com/librenms/librenms/pull/14802


也因為目前小弟貢獻的程式碼尚未被合併,預設這功能「沒有包含」在官方系統裡,
需要你手動抓檔案來補

檔案在此:
https://github.com/j796160836/librenms/blob/feature_line_messaging/LibreNMS/Alert/Transport/Linemessagingapi.php

按下 Raw 得到原始檔,然後另存新檔,存成 LineMessagingAPI.php

如果跟我一樣是使用 Docker 的話,
放在目錄中,修改 docker-compose.yml 把這個檔案用掛載的方式,
類似 Hot patch 的方式把它放進去

docker-compose.yml 的 LibreNMS 設定,裡頭的 volumes 區塊,加上一句:

- ./LineMessagingAPI.php:/opt/librenms/LibreNMS/Alert/Transport/Linemessagingapi.php

(注意大小寫!)

如果你是照個之前那篇文的方式架設的話,
變成類似底下的範例:

docker-compose.yml

version: '3.5'

services:
  web:
    image: jarischaefer/docker-librenms
    restart: always
    ports:
      - '80:80'
    volumes:
      - ./librenms_data/logs:/opt/librenms/logs
      - ./librenms_data/rrd:/opt/librenms/rrd
      # Add this line
      - ./LineMessagingAPI.php:/opt/librenms/LibreNMS/Alert/Transport/Linemessagingapi.php
    environment:
      APP_KEY: base64:NA......................................SdA=
      DB_HOST: librenms_database
      DB_USER: librenms
      DB_PASS: Tuq.........tai
      DB_NAME: librenms
      POLLERS: 16
      BASE_URL: http://192.168.1.2
      TZ: Asia/Taipei
    depends_on:
      - mysql
  mysql:
    image: mariadb:10.5
    container_name: librenms_database
    restart: always
    volumes:
      - ./librenms_data/mysql:/var/lib/mysql
      - ./LineMessagingAPI.php:/opt/librenms/LibreNMS/Alert/Transport/Linemessagingapi.ph
    environment:
      TZ: Asia/Taipei
      MYSQL_ROOT_PASSWORD: Cho.........lan
      MYSQL_USER: librenms
      MYSQL_PASSWORD: Tuq.........tai
      MYSQL_DATABASE: librenms

官方 docker 架設方式也雷同,就不贅述了。

設定 LINE 開發者帳號

1. 前往Line開發者網站並註冊帳戶

https://developers.line.biz/

使用您的真人帳號來進行註冊。

2. 新增一個 Channel (頻道)

  1. 如果你沒有 Provider (供應商),請先建立一個。

  1. 創建一個 Channel (頻道),選擇 Messaging API ,然後填寫表單。

一些必填欄位說明:

  • Channel type 頻道類型:Messaging API
  • Provider 供應商:(選擇您的 Provider (供應商))
  • Company or owner’s country or region 公司或擁有者的國家或地區:(選擇您的地區)
  • Channel name 頻道名稱:(預設它將是您的 LINE機器人的名稱,送出後無法編輯)
  • Channel description 頻道描述:(預設它將是您的 LINE 機器人的描述)
  • Category 類別:(選擇適當的類別)
  • Subcategory 子類別:(選擇適當的子類別)

然後按送出建立它。

  1. 到 Channel 的 "Messaging API" 頁籤,這裡列出了一些你需要注意的重要值。
  • Bot basic IDQR code 是您的 LINE 機器人的 ID 和 QR code。
  • Channel access token (long-lived),通行 token ,效力等同於密碼,這將在 LibreNMS 中使用,請妥善保管。

  1. 使用您的真實 LINE 帳號加你建立的 LINE機器人為好友。

3. 設置 webhook 以獲取「收件人ID」

這邊講的「收件人ID」是指,你未來希望系統要把訊息發送到哪裡
它可以是

  • 聊天群組(要抓取 groupID
  • 個人私訊(要抓取 userID

以下是獲取「收件人ID」的步驟。

使用以下 NodeJS 程式和 ngrok 轉送臨時 https 連線。
以下步驟是在 Mac 底下操作。Linux 也適用這些步驟。

LINE-bot-RecipientFetcher

抓取程式

git clone https://github.com/j796160836/LINE-bot-RecipientFetcher.git

切換到該資料夾

cd LINE-bot-RecipientFetcher

執行程式

$ node index.js

使用 ngrok 將該連接埠暴露到網路上

ngrok http 3000

到 Channel (頻道) 中的 "Messaging API" 頁籤,
將 Webhook URL 填寫 ngork 所產生的網址 https://<your ngrok domain>/webhook

4. 獲取「收件人ID」

如果您想讓 LINE 機器人向自己(或者目標發送對象)發送訊息,這是獲取 userID 的步驟。

  • 使用您的真實帳戶(或者目標發送對象)向您的 LINE 機器人發送訊息

範例資料:

{"type":"user","userId":"U527xxxxxxxxxxxxxxxxxxxxxxxxxc0ee"}

如果您想讓 LINE 機器人向一個群組發送訊息,這是獲取 groupID 的步驟。

  • 將您的LINE機器人添加到群組中
  • 使用您的真實帳戶在群組中發訊息

程式會把 groupID 印出來,這個就是收件人ID,請保管好。

範例資料:

{"type":"group","groupId":"Ce51xxxxxxxxxxxxxxxxxxxxxxxxxx6ef","userId":"U527xxxxxxxxxxxxxxxxxxxxxxxxxc0ee"} ```

LibreNMS 的通知設定

接下來回到 LibreNMS 繼續做設定。

1. 設定 Alert transport (通知管道)

Alerting > Alert Transports 頁面,新增一個 Alert transport (通知管道)。

  • Transport name 傳輸名稱:Line
  • Trsansport type 傳輸類型:Line Messanging API
  • Access token 存取權杖:(您的頻道存取權杖)
  • Recipient 收件人ID:_(填入剛剛抓的 userIDMARKDOWN_HASH2df121e268641afe58606b37a6e37a50MARKDOWNHASH )

2. 在 Alert rules (監控規則) 中掛上 Alert transport (通知管道)

Alerts > Alert rules 設定警告通知規則,

在想要通知的規則上按編輯,
(以預設通知 Device Down! Due to no ICMP response 為例)

Transports 的地方加上這個通知管道。

可以在 Alert rules 設定好通知的:

  • Max alert 通知數:最多要通知幾次
  • Delay 延遲:問題發生後,延遲多久再來通知,
    過濾掉時好時壞跳來跳去的情況
  • Interval 間隔:通知間隔,意指通知後隔多久再通知,該值會配合 Max alert 來使用。

例如:
Max alert: 3 / Delay: 30m / Interval: 5m
白話文就是:先延遲 30 分鐘再通知,通知共 3 次,每 5 分鐘通知一次

這邊可以依照需求來設定通知次數與頻繁度。

如果剛剛 Default Alert 有設定 ON 的話,應該所有規則都會出現才對。

測試

最後,你需要測試他們的通知設置是否正確。可以通過觸發警報或手動測試通知來完成這個步驟。

手動觸發測試

Alerts > Alert Transports 中,設定這個通知管道、通知方式。

就會收到測試訊息

以上,就是設定的所有內容,希望這個教學對您有幫助。

參考資料

[教學] 用 Gmail 來串接 LibreNMS 的 Email 通知

在現代科技世界中,網路裝置監控與通知非常重要。LibreNMS 是一個開源的網路監控系統,可以用來監控網絡設備、伺服器…等。然而,對於一些使用者而言,LibreNMS 的通知設定可能會有一些小困難。我們將在這個系列文章中介紹幾種常用的通知方式:電子郵件、LINE、Telegram、GoogleChat…等。這些通知方式都可幫助使用者即時收到監視警報和報告,以便快速回應並保護他們的系統和網絡安全。

LibreNMS 系列文:

這篇是利用 Gmail 來設定 電子郵件的通知方式

Gmail 建立應用程式密碼

首先,登入一個 Gmail 帳號,這個帳號未來會為系統寄件人。
你需要在 Google Gmail 中創建一個應用程式密碼。

到 Google 帳戶中的 「安全性」頁籤,

https://myaccount.google.com/security

在「登入 Google」的區段,有一個「應用程式密碼 App passwords」的選項

有件事情要先提醒,這必須要先開啟「兩步驟驗證 (Two-factor authentication (2FA))」,才會出現這個選項

它會重新驗證你的帳號,然後出現以下畫面:

Select the app and device you want to generate the app password for.

你可以直接選 Other (Custom name) 然後給定一個名字,按下產生後產生。

這邊要注意,「密碼只會出現一次」 請好好保存你的密碼。

LibreNMS 的通知設定

以下分為幾個步驟:

1. 設定發信方式

接下來,在 LibreNMS 的設定中,
到 Global settings 中,找到 Alert settings 選 Email options

打開 Enable email alerting 選項,
以下參考 Gmail 的 SMTP 的資訊設定,如果有修改,以官方文件為主。

  • Enable email alertingEnabled 開
  • From name:填入「寄件人」
    (例如:`"LibreNMS System")
  • From email address:填入「寄件人」的訊息
    (例如:"LibreNMS System" <[email protected]> ,這邊 E-mail 地址就填你剛剛設定的 Gmail 地址)
  • Use HTML emailsEnabled 開
  • How to deliver mailSMTP
  • SMTP Serversmtp.gmail.com
  • SMTP port setting587
  • EncryptionTLS
  • Auto TLS supportEnabled 開
  • SMTP authenticationEnabled 開
  • SMTP Auth username:填你剛剛設定的 Gmail 地址(例如: [email protected]
  • SMTP Auth password:填剛剛申請的「應用程式密碼」,不是你個人帳號的密碼唷

2. 建立通知管道 (Alert Transports)

然後,在 Alerts > Alert Transports 中,設定這個通知管道、通知方式。

按「Create alert transport」新增一個通知管道、通知方式

參數說明:

  • Transport name:取一個名字(例如:Email
  • Transport typeMail
  • Default Alert:是否為預設主要通知管道,這個依照你的需求來設定
  • Email:設定一個「收件人」,如果有發生警告,都會往他那邊寄信來通知
  • Include Graphs:是否包含圖片,這個保留預設 ON 即可

然後按「Save Transport」儲存

3. 在監控規則中掛上通知管道

最後在 Alerts > Alert rules 設定警告通知規則,

在想要通知的規則上按編輯,
(以預設通知 Device Down! Due to no ICMP response 為例)

Transports 的地方加上這個通知管道。

可以在 Alert rules 設定好通知的:

  • Max alert:最多要通知幾次
  • Delay:問題發生後,延遲多久再來通知,
    過濾掉時好時壞跳來跳去的情況
  • Interval:通知間隔,意指通知後隔多久再通知,該值會配合 Max alert 來使用。

例如:
Max alert: 3 / Delay: 30m / Interval: 5m
白話文就是:先延遲 30 分鐘再通知,通知共 3 次,每 5 分鐘通知一次

這邊可以依照需求來設定通知次數與頻繁度。

如果剛剛 Default Alert 有設定 ON 的話,應該所有規則都會出現才對。

測試

最後,你需要測試他們的通知設置是否正確。可以通過觸發警報或手動測試通知來完成這個步驟。

手動觸發測試

Alerts > Alert Transports 中,設定這個通知管道、通知方式。

旁邊有一個 打勾符號 可以按,按一下測試。
成功的話就會收到 Email 通知。

總結來說,這個教學文章向使用者展示了如何在 LibreNMS 中設置 Gmail 通知。這將使管理人能夠即時收到他們的監視警報和報告。這對於系統管理員和網絡工程師來說非常重要,因為它可以幫助他們及時處理問題,保護他們的系統和網絡的安全。

參考資料

[教學] 用 Docker 的 buildx 輕鬆多架構編譯 (multi-architecture build)

Docker 可以在程序層級上做為封裝系統環境的技術,並方便部署(或移轉)到別的機器上,
比起可以做到相同目標的 虛擬機 (VM) 比它輕量快速,近期成為熱門技術之一。
這麼好的技術還是有其相關限制的。例如: Docker image (映像檔) 仍受限於 CPU 架構 (architecture),
但標準的 Docker 的指令預設只能編譯一個 CPU 架構 (architecture)。

接下來要介紹算是某種新功能,新的 buildx 指令,讓 Docker 編譯製作 image (映像檔) 時,
能一次編譯各種你要的 CPU 架構的 image。


不知道您有沒有自己做過 Docker image 過?
我們複習一下標準的 Docker 編譯

原有的 docker build 流程

標準的 Docker 編譯如下:

$ docker build . -t MY_ACCOUNT/my-awesome-image:latest

相關說明:

  • . 點 (dot):代表當前目錄,也是預設名稱 Dockerfile 檔案名稱
  • -t 參數:給予 image 名字,如果要上傳到 Registry 倉庫的話,要改成對應名字
    例如: dockerHub 的格式 帳號 / 名稱,這個例子為: MY_ACCOUNT 帳號下的 my-awesome-image 套件,版本為 latest

再來就是用指令登入你的 dockerHub

$ docker login

輸入帳號與密碼

最後,上傳你的 image 到 Registry 倉庫

$ docker push MY_ACCOUNT/my-awesome-image:latest

但如今,宿主 (Host) 的 CPU 架構會因為你的使用伺服器環境的不同而不同
例如:你買了 Apple silicon (M1) 晶片,預設 CPU 架構跑 arm64
又例如:你想把你的 Docker 環境跑在樹莓派 (Raspberry Pi), CPU 架構跑 armv7 或者 arm64

各種情境,你可能會需要把你的 Docker 編譯模組換成能一次編輯多架構的。

新的 buildx 指令

要達成此目的,做法有二種,只講其中一種, docker buildx 指令

docker buildx 算是全新的指令,可以在官網去下載設定。

$ docker buildx version

查看是否有安裝,執行結果如下(我列出我的環境,你的可能會跟我不一樣):

$ docker version
Client:
 Cloud integration: v1.0.22
 Version:           20.10.13
 API version:       1.41
 Go version:        go1.16.15
 Git commit:        a224086
 Built:             Thu Mar 10 14:08:43 2022
 OS/Arch:           darwin/arm64
 Context:           default
 Experimental:      true

Server: Docker Desktop 4.6.0 (75818)
 Engine:
  Version:          20.10.13
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.15
  Git commit:       906f57f
  Built:            Thu Mar 10 14:05:37 2022
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.5.10
  GitCommit:        2a1d4dbdb2a1030dc5b01e96fb110a9d9f150ecc
 runc:
  Version:          1.0.3
  GitCommit:        v1.0.3-0-gf46b6ba
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

查看有哪些架構可用

$ docker buildx inspect --bootstrap
Name:   mybuilder
Driver: docker-container

Nodes:
Name:      mybuilder0
Endpoint:  unix:///var/run/docker.sock
Status:    running
Platforms: linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

以小弟的電腦來說,有這麼多,你也不一定要全部都使用。

我選了幾個常用的

  • linux/amd64:適合 x64 的環境(不管宿主主機是 linux 還是 Mac )
  • linux/arm64:適合 arm64 的環境(例如:Apple silicon (M1) 晶片)
  • linux/arm/v7:適合 arm 環境(例如:樹莓派)

接下來,我們建立一個 builder 並使用(初次安裝執行一次即可)

$ docker buildx create --use

(其實他是建立 builder 與 使用 builder 的簡化版,相關指令我列在下方)

建立 builder

$ docker buildx create --name mybuilder

使用該 builder

$ docker buildx use mybuilder

列出有哪些 builder

docker buildx ls

更新原有 build 指令

我們更新原有 build 指令

$ docker build . -t MY_ACCOUNT/my-awesome-image:latest

變成這樣

$ docker buildx build --load -t MY_ACCOUNT/my-awesome-image:latest --platform linux/amd64 .

(為了開發方便,我們先編譯一個平台架構)

效果二者一樣。

如果 Dockerfile 編好了,準備編譯並打包上傳 dockerhub 可以用以下指令:

$ docker buildx build --push -t MY_ACCOUNT/my-awesome-image:latest --platform linux/amd64,linux/arm64,linux/arm/v7 .

加個 --push 參數就可以在編譯完成的時候,一併做上傳。

瀏覽你的 dockerHub 帳號,會看到多種你選取的平台出現在 dockerHub 中。

小提醒:別使用 docker push 指令,截稿至今,它還不支援多架構映像檔上傳,它只會幫你上傳單一架構而已,
你也可以測試看看。

以上就是這次的內容,希望對大家有幫助。

參考資料

解決 MySQL 資料庫備份還原錯誤 ERROR: ASCII ‘\0’ appeared in the statement

最近遇到一個情境,在 Windows 使用 PowerShell 使用 mysqldump 把 MySQL / MariaDB 資料庫匯出 SQL 檔案,然後在 Linux 環境底下用 mysql 指令匯入,

卻出現一個很莫名錯誤:

$ mysql -u root -p myDatabase < /backup.sql
Enter password: 
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '-'.

這原因出現在 PowerShell,的 > 資料流重導向 (I/O Redirection) 語句,
會使用 UTF-16LE 和 CR/LF 換行符號來建立檔案。

這些在 mysql 指令中不認得,他目前只認 UTF-8。
所以要做一些修改。

從 MySQL / MariaDB 資料庫匯出

mysqldump 匯出指令有修改

原本為:(此在 Windows (PowerShell) 環境下執行)

PS> .\mysqldump -h localhost -u root -p myDatabase > backup.sql

改為新指令

PS> .\mysqldump -h localhost -u root -p myDatabase -r backup.sql

改用 -r 指令,讓 mysqldump 「直接操作檔案」,這樣就不會出現這個問題了。

匯入新的 MySQL / MariaDB 資料庫

匯入指令相同:(此在 Linux 環境下執行)

$ mysql -u root -p myDatabase < /backup.sql

這樣就可以正確匯入了。

參考資料

文石 Boox Mira pro 25.3 吋 E-ink 電子紙螢幕 快速評測

這次 TiBE 台北國際書展 有聽聞 熊老闆的店 有參展,還搬出了重量級文石只接單生產的 Mira pro 25.3",二話不說就去看了。這邊記錄一下小弟觀看這台 Mira pro 25.3" 電子紙螢幕的心得與幾個快速的評測結果,我們就開始吧。


首先,還是要先感謝 熊老闆的店 肯讓小弟能在展場借測機器,

(小小工商)熊老闆的店 是文石的原廠授權經銷維修,有販售各種文石電子紙機型,一應俱全。
有在架上售的每個型號都有經過台灣電檢,安心有保障,不彷參考看看。

這台大台的 Mira pro 25.3" 雖尚未在熊老闆的店上架販售,
但有賣小台的 Mira 13.3" 可以參考看看

https://www.bearboss.com/SalePage/Index/7290546

之前有小弟的評測文

[開箱分享] 文石 Boox Mira 13.3吋 電子紙顯示器 – 神級刷新的 E-ink 電子紙螢幕 上手體驗
https://blog.jks.coffee/unbox-boox-mira-13/

(包含這篇文,就是用 Mira 13.3" 打出來的哦)


重點規格導覽與比較

以下列出一些重點規格導覽與小台的 Mira 13.3" 的比較

大台的 Mira pro 25.3" 的一些重點規格:

  • E-Ink Carta 25,3" 吋電子紙螢幕,解析度 3200×1800 px, 145 ppi, 16 色階灰階
  • 連接口
    • USB Type-C x1
    • Mini HDMI x1
    • DisplayPort (DP) x1
  • 有標準 VESA 壁掛鎖孔
  • 無前光(無螢幕背光)
  • 無螢幕觸控
  • 有立體聲雙喇叭

跟小台 Mira 13.3" 的規格差異:

  • 螢幕尺寸:13.3" (Mira) vs 25.3" (Mira pro),
  • 解析度有些微的差異:2200×1650 (207ppi) (Mira) vs 3200×1800 (145ppi) (Mira pro)
  • 有無前光(螢幕背光):小台 Mira 有冷暖前光 vs 大台 Mira pro 則無
  • 有無觸控:小台 Mira 有觸控 vs 大台 Mira pro 則無
  • 大台 Mira pro 有多了:
    • 立體聲喇叭
    • DisplayPort (DP) 輸入,但不確定能不能自由多輸入切換
    • 它需要另外供電 12V3A 輸入,而小台 Mira 一條 USB Type-C 就能點著

個人使用情境是這樣的,小弟我大多會在燈光充足的環境下使用電子紙螢幕,背光幾乎不會開,反而會用檯燈做照明(如同類似看書的配置)。而 Mira 13.3" 螢幕大多是拿來看參考資料、或者打一些文件、報告、部落格文章,通常都是加上筆電螢幕,雙螢幕作業。

而我是 Mac 愛用者,目前使用筆電是 Macbook pro M1 (Apple silicon) 的機器。

外觀

這邊不囉唆,都上圖解釋。

側板有二顆按鈕、中間一個滑軌,從上到下為:
選單鈕、上下滑動滑軌、手動刷新鈕
按進選單之後,上按鈕變成進入&確認,下按鈕變成取消

下方輸入介面一字排開,
Type-C、Mini-HDMI、DisplayPort (DP)
另外注意它需要另外供電 12V/3A 輸入,原廠有附變壓器。這邊不像小台 Mira 可以用一條 USB Type-C 就能用。

他的支架是做得很有誠意的,
全金屬設計,支架可前傾後傾,可轉 90 度(變成直立模式使用)
但不可調高度

如果不喜歡,它是標準 VESA 壁掛鎖孔,改用你愛用的支架就可以了。

跟 Macbook pro 13" 筆電接起來的感覺

快速測試

等下測試 Mira pro 25.3" 的測試也是用類似日常的配置下去測試。

刷新模式測試

大台的 Mira pro 25.3" 跟小台 Mira 一樣,有幾種螢幕刷新模式可以用:

  • 普通模式
  • 影片模式 (針對影片做超高速刷新)
  • 文字模式
  • 圖片模式

一樣使用 app 做調整,自動防抖動、定時自動刷新…等功能全部都有。
差異只在於,前光調整會無效

跟之前初次接上的時候一樣,原始設定會在灰色的區域有嚴重的抖動
可能是我的電腦問題 (Macbook pro M1),這部份曾機有反應原廠,但暫時沒有完整解方,
但他有出「自動防抖動」功能可以避免大部分的抖動,整體變成還算堪用。

螢幕解析度測試

一接上 Mira pro 25.3" 電子紙螢幕,就馬上可以看到有各種解析度可以試。
就簡單試給大家看

3200x1800px

2560x1440px (2K)
個人覺得這應該是 25-27 吋螢幕最適合的解析度了

1920x1080px (1080p)
個人覺得這解析度…字有點略大

情境測試

滑鼠快速滑動

雙螢幕作業總是常常要找滑鼠的嘛XD
有感覺螢幕變大了,滑鼠要找比較久些

瀏覽網頁/滑鼠捲動

測試一些瀏覽網頁行為與滑鼠捲動

看影片

特別拿跟上次一樣的影片來試試,末日列車

示範影片:《末日列車》| 正式預告 | Netflix
https://www.youtube.com/watch?v=D7lgcr2cMvU

不過看一些網路課程可能還不錯,只要是白底為主都不會太差。

示範影片:
Introduction to Compose Layouts and Modifiers – MAD Skills
https://www.youtube.com/watch?v=LjeHsvPIdpY

個人測試的最佳數值

直接說結論,經由調整,個人覺得最佳的數值給跟大家分享。
你如果有入手 Mira 可以用參考數值試試看,
或者用我說的思路下去調整,如果有更好的參數也可以跟我說。

  • 刷新模式:普通模式

  • 刷新速度:6

  • 深色增強:6

  • 淺色過濾:29

  • 自動防抖動:開

  • 定時自動全刷:120 秒

調整數值的思路

分享個人調整數值的思路:

  • 刷新模式:普通模式
    因為影片模式太糊,看文件不方便

  • 刷新速度:適度的盡量高,但太高你會被抖動閃到受不了

  • 深色增強(對比):把灰色抖動的部分弄黑,這樣就不會閃了

  • 淺色過濾:一樣把較淡的灰色,直接拉到正白色,增加畫面清晰度

  • 自動防抖動:必須開,
    不過他軟體可能沒寫好,USB 重新插拔不會套用到該設定,重新開關它即可。

  • 定時自動全刷:設一個你覺得可以的時間

[教學] 用 Docker 來架設 LibreNMS 架設網路服務監控系統

LibreNMS 是一套 Open source 的功能完整的網路監控系統,
使用 SNMP (Simple Network Management Protocol) 協定來搜集電腦系統的資料。

初次研究後,就發現它可以協助解決設備很多在線上,
測量設備穩定性的事情。
就算該裝置沒有支援 SNMP,也可以使用純 ping 的方式來監控所有線上的設備。
就一步一步帶大家怎麼設定與架設。

LibreNMS 系列文:

以下使用 Docker 裝在 Linux 主機上。
至於 Linux 版本就看大家喜好,
以下示範使用 Ubuntu 系統,若是其他發佈版可以依樣畫葫蘆稍加修改。

我們今天用的是 jarischaefer/docker-librenms 套件來架設,
如果作者版本有更新安裝方式,再煩請告知。

GitHub 位置:
https://github.com/jarischaefer/docker-librenms

Step1. 產生密鑰

使用指令產生密鑰

$ sudo docker run --rm jarischaefer/docker-librenms generate_key

每台系統密鑰皆不相同,不可以直接複製。
如果有多台要架設,請記得更換密鑰!(這步驟很常忘記)

Step2. 編輯 docker-compose.yml

有關 docker 的設定方式就不贅述了。
有用過 docker 的朋友應該很熟悉 docker-compose 這指令。

現在要來做一個新的 docker-compose.yml

docker-compose.yml

version: '3.5'

services:
  web:
    image: jarischaefer/docker-librenms
    restart: always
    ports:
      - '80:80'
    volumes:
      - ./librenms_data/logs:/opt/librenms/logs
      - ./librenms_data/rrd:/opt/librenms/rrd
    environment:
      APP_KEY: base64:NA......................................SdA=
      DB_HOST: librenms_database
      DB_USER: librenms
      DB_PASS: Tuq.........tai
      DB_NAME: librenms
      POLLERS: 16
      BASE_URL: http://192.168.1.2
      TZ: Asia/Taipei
    depends_on:
      - mysql
  mysql:
    image: mariadb:10.5
    container_name: librenms_database
    restart: always
    volumes:
      - ./librenms_data/mysql:/var/lib/mysql
    environment:
      TZ: Asia/Taipei
      MYSQL_ROOT_PASSWORD: Cho.........lan
      MYSQL_USER: librenms
      MYSQL_PASSWORD: Tuq.........tai
      MYSQL_DATABASE: librenms

重要參數說明

web 部分

  • APP_KEY:密鑰(每台電腦皆不同,請自行產生)
  • DB_HOST:mysql 的 IP 位址(不需修改)
  • DB_USER:mysql 使用者
  • DB_PASS:mysql 密碼
  • DB_NAME:mysql 資料庫名稱
  • POLLERS:輪詢器數量
  • BASE_URL:預設網址(很重要,請記得改!就算是本機服務,也請修改成正確的網址。)
  • TZ:時區,這裡設定台灣 (Asia/Taipei)

mysql 資料庫部分

這裡使用 MariaDB 資料庫,要換成 mysql 5.7 也可以。

  • TZ:時區(與網頁伺服器一致即可)
  • MYSQL_ROOT_PASSWORD:資料庫 root 密碼
  • MYSQL_USER :使用者(與 DB_USER 一致即可)
  • MYSQL_PASSWORD :密碼(與 DB_PASS 一致即可)
  • MYSQL_DATABASE :資料庫名稱(與 DB_NAME 一致即可)

Step3. 建立資料夾

建立相關路徑的資料夾,讓它能夠掛載。

$ mkdir -p ./librenms_data && \
mkdir -p ./librenms_data/logs && \
mkdir -p ./librenms_data/rrd && \
mkdir -p ./librenms_data/mysql

Step4. 啟動整組服務

利用 docker-compose 把整組服務啟動。

$ sudo docker-compose up -d

Step5. 初始化資料庫

服務整組起來之後,網頁瀏覽器應該可以看到這個訊息:

Database inconsistencies found during a database error, please fix to continue.

Your database is out of date!

不用太緊張,這是正常現象,等下下指令來初始化資料庫。

首先要先找到 librenms_web 的 container,
如果是 docker-compose 整組起來的話,可能會叫做 librenms_web_1
執行指令前可以用 docker ps 指令來查看你的目前起的服務名稱(或 ID),確認一下。

$ sudo docker exec librenms_web_1 setup_database

這步驟是初始化它 LibreNMS 的資料庫。
如果失敗了,整個服務會起不來。

Step6. 建立 admin 管理者

它服務跑起來預設是 「沒有任何帳號的」,
我們用該指令來建立 admin 管理者

$ sudo docker exec librenms_web_1 create_admin

librenms_web_1 名稱為 container_id,
可用 docker ps 指令來查看你的目前起的服務名稱(或 ID)。

這指令將會建立一個 admin 管理者:

記得去改密碼。記得去改密碼。記得去改密碼。
很重要講三次。

瀏覽你的本機網址,就可以看到 LibreNMS 的主頁面了。

參考資料

[教學] 在 QNAP NAS 機器上設定 WireGuard VPN

繼上一篇 [Linux 架站] Wireguard VPN 設定教學 手工建置的方式,有嘗試在 QNAP NAS 上面建立 WireGuard VPN。

但發現雖然 QNAP 有 Container station (其實裡面也是跑 Docker) 但沒辦法使用該 Docker Image
因為裡面有一個 net.ipv4.conf.all.src_valid_mark=1 選項它核心沒辦法支援。

不過呢,在 QVPN Service 3 直接原生支援 WireGuard 哦!
(QVPN Service 3 在 x86 機種上 QTS 5.0.0 以後版本支援)

這裡有繁體中文的官方教學文件,看起來圖文並茂,但還是有一些遺漏的地方,
您還是要需要知道純手工 Wireguard 怎麼設定才行。

以下是一些操作步驟,可以跟著一步一步操作就可以建立了!

安裝步驟

簡單介紹一下設定步驟:

啟用 WireGuard VPN 伺服器

  • 開啟 QVPN Service。
  • 前往[VPN 伺服器]>[WireGuard]。
  • 按一下[啟用 WireGuard VPN 伺服器]。

填寫

  • ServerName 伺服器名稱
  • PrivateKey 按一下 [Generate Keypairs] 按鈕 產生伺服器金鑰一對
  • PublicKey 會自動產生出可供複製
  • IP address 伺服器的內部 IP
  • Listen port 聆聽的連接埠 (假設為: 51820 ,可依需求修改)
  • Network interface 接收的介面,預設 All 就可以
  • DNS Server 使用的 DNS 伺服器
  • Peer Table 用戶端列表

按下 Add Peer 按鈕

  • Peer name 用戶端名稱,名字可自己取
  • Public key 用戶端的公鑰,需自行產生,這留到後面再說
  • Preshared key 共用加密金鑰,目前沒有設定,留空即可
  • Endpoint 伺服器位置,伺服器的連接方式
  • Allowed IPs 允許的 IP 網段
  • Persistent keepalive 維持連線時間,保留預設值 10 秒 即可

快速整理一下,跟純手工建置的差異:

  • 不用自行產生伺服器金鑰了,按一下 [Generate Keypairs] 就可以產生
  • 不用自行整理用戶端列表,IP 也自動隨著流水號增加

其他還是要自己手工做的部分:

  • 需要 自行撰寫 用戶端的設定文件
  • 自行產生 用戶端的金鑰,填回網頁介面
  • 如果有手機用戶的朋友,設定檔需要 自行產生 QRcode

個人覺得這 QNAP 只是做了半套而已,
如果有用過 wg-easy 的話,幾乎都全自動幫您產生好了。

安裝 wireguard-tools 並找到 wg 指令

這個步驟只要在幫大家做設定檔的那台電腦操作就可以了,
不需要每台使用 wireguard 的電腦都裝。

以下步驟要先找到 wg 指令,以 Mac 為例,可以用 brew 來安裝

$ brew install wireguard-tools

如果沒有 wg 指令,又剛好有用 docker 的話,可以用這個 image 來借用一下

$ sudo docker run --rm -it antrea/wireguard-go:0.0.20210424 /bin/bash

在 container 裡面執行就可以了。

產生用戶端金鑰

$ wg genkey | tee client1_privateKey | wg pubkey > client1_publicKey

就會產生二個檔案:

  • client1_privateKey 用戶01私鑰
  • client1_publicKey 用戶01公鑰

公鑰回填到 QNAP 的介面,存好私鑰,等一下來手動撰寫設定文件。

撰寫用戶端設定文件

以下列出 Client 設定檔,可以參酌修改。
需要填入:

  1. 用戶01私鑰 Client01 PrivateKey,帶入剛剛產生的私鑰
  2. 伺服器公鑰 Server PublicKey,這個從 QNAP 介面得到
  3. 配發用戶01的 IP (假設為:198.18.7.2/32,這邊要與 QNAP 介面一致)
  4. 伺服器位址 (假設為:vpn.example.com:51820,也就是你的 QNAP NAS 位址,是公開 IP 或者公開 DNS,這個等等補充)
  5. 共享密鑰 (如果有的話,本範例沒有)
  6. AllowedIPs 這部分為需要 VPN 轉導的區域,要填入一個 CIDR 的網段。
    換言之,需要定義一個區域,如果看到該區域,就走 VPN 連線。範例是給 192.168.1.0/24,意思是電腦若看到該網段則走 VPN,其餘走一般連線。
    如果需要全部都轉導的話填入:0.0.0.0/0
[Interface]
PrivateKey = AOAHHE........(用戶01私鑰 Client01 PrivateKey)........7RDE0=
Address = 198.18.7.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = RNrgG........(伺服器公鑰 Server PublicKey)........EpJ0A=
AllowedIPs = 192.168.1.0/24
Endpoint = vpn.example.com:51820
PersistentKeepalive = 30

產生設定檔 QRcode

其實很簡單,就是把上述的設定檔,直接放入 QRcode 產生器就好了~

https://www.the-qrcode-generator.com/

類型選擇 Free text 你就會得到一個超密的 QRcode,你的手機就能掃了。

參考資料

Docker 設定避開衝突網段 ( 172.17.0.0/16 )

Docker 的好,用過的人就知道,
然而 Docker 在特定的網段裡面(例如: 172.17.x.x),會造成衝突。

嚴重造成 host 整台主機連不進來,無法連線。

這個時候要修改你的 Docker 預設網段,讓他跳過跟外界相符合的網段。

註:如果 你的開發機 (client) 與 你的伺服器 (server),兩個端點都有裝 Docker,
那兩個端點都要調整,跳開其網段。

註:預設 Docker 使用 172.17.0.0/16 網段。

修改 Docker 預設網段

Linux 系統的話,建立(或修改)daemon.json 這個檔案
(這個檔案預設是沒建立的,請自行建立。)

$ sudo vi /etc/docker/daemon.json

以下是範例格式,為 JSON 格式:

{
  "log-driver": "journald",
  "log-opts": {
    "tag": "{{.Name}}"
  },
  "default-address-pools": [
    {
      "base": "172.6.0.0/16",
      "size": 24
    }
  ],
  "bip": "172.7.0.1/16"
}

修改 bipdefault-address-pools 的欄位,輸入一個新的不衝突的網段即可。
(範例是改成 172.7.0.1/16172.6.0.0/16

  • bip 欄位是 docker 預設會開啟的網段。
  • default-address-pools 欄位是 docker-compose 如果有設定 network 區段的話,預設會配給的網段區域。

然後重新啟動 Docker 服務

$ sudo systemctl restart docker

這樣你的主機就會連線正常了。

自訂你自己服務的網段

在某些用途下你會需要一個特定幾個 container 能相互溝通的網路環境
你需要修改你的 docker network create 指令

例如:

$ sudo docker network create mynetwork --subnet=172.6.0.0/16

加上 --subnet= 參數,手動指定網段給他。

使用 docker-compose ?

如果是使用 docker-compose 的話,你可以這樣調整 networks 段落,

docker-compose.yml

version: '3.5'

services:
  web:
    image: crccheck/hello-world
    ports:
      - '80:8000'
    networks:
      - mynetwork
networks:
  mynetwork:
    ipam:
      config:
        - subnet: '172.6.0.0/16'

如果你要寫完整一點,這樣也是可以的。

networks:
  mynetwork:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: '172.6.0.0/16'
          gateway: '172.6.0.1'

ipamconfig 段落設定 subnetgateway 即可。

爾或者,修改 /etc/docker/daemon.json 中的 default-address-pools 的欄位,前面已經說過就不贅述了。

怎麼驗證?

你可以用 netstat 指令查詢

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
172.6.0.0       0.0.0.0         255.255.0.0     U         0 0          0 br-c3ff076483d3
172.7.0.0       0.0.0.0         255.255.0.0     U         0 0          0 docker0

docker network ls 指令

$ docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
da8e2609c93e   bridge        bridge    local
0eef0fedfb81   host          host      local
79cd2edd8448   none          null      local
c3ff076483d3   mynetwork     bridge    local

其中你可以看到範例 c3ff076483d3 對應 mynetwork 網段為 172.6.0.0

參考資料

Google 介面語言切換的小技巧

像我個人常使用英文介面,理當所有網頁都會給英文的結果,
但有時候會遇到一種情況,例如查看 Google Map 地圖,
地圖都是中文路名,翻譯成英文都沒辦法一眼看懂,要試著唸一下才知道再講什麼。
但 Google 家的產品,語言切換都藏的比較深,
這時候網址切換就比較方便。

以下教學只適用於 Google 家的產品,不同公司定義不一樣。
而 Google 隨時會改,
如果已經失效了的話再麻煩跟我說。

在 https:// …… /xxx?aaa=bbb&ccc=ddd

後面加上 &hl=zh-Hant 可切繁體中文
後面加上 &hl=en 可切英文

例如:

https://www.google.com/maps?hl=zh-Hant
就切成中文

https://www.google.com/maps?hl=en
就切成英文

需注意 URL Query string 的格式,
? (問號)開頭,中間用 & 符號分隔,
如果最開頭有了 ? (問號),那後面只能接 & 符號。

Proxmox VE (PVE) 伺服器虛擬化環境 安裝筆記

最近接觸到 Proxmox VE (PVE) 覺得超驚人的,把相關安裝知識整理後分享給大家。
Proxmox VE 是基於 Debian 修改的開源 (Open source) 虛擬化管理套件(基於 QEMU/KVM 與 LXC 技術)。
講到虛擬化 (virtualization),一定會提到 VMware 這家公司,它的 VMware ESXi 也是一絕,但 vSphere 系列需要授權,雖然有免費版本有對應的功能限制,下次會另開一篇來介紹。

本篇就來講講要怎麼開始、怎麼入門吧!

製作安裝 Live USB (Mac & Windows 使用者)

官方文件有特別強調,製作安裝 USB 時,絕不能使用 UNetbootin 這個工具
會無法正常開機,小弟本身也踩過這個雷。
(因為 UNetbootin 有另外處理開機引導 (bootloader) 的部分,這部分與 Proxmox VE 不相容。)

Mac & Windows 使用者 推薦用 Etcher

https://etcher.io

照個指示選擇 ISO 檔案,然後插入隨身碟選擇對應的隨身碟即可,這部分就不多述。

製作安裝 Live USB (Linux 使用者)

Linux 使用者 可以直接用 dd 指令

先列出有什麼 usb 裝置

# lsblk

然後使用 dd 指令直接複製

# dd bs=1M conv=fdatasync if=./proxmox-ve_*.iso of=/dev/XYZ

注意!這指令按下去會直接執行,請確定複製的目標路徑是否正確,不然弄錯會悲劇。

開啟虛擬化技術 (Intel VT-x / AMD-V)

另外一點,如果你要把 Proxmox VE 裝在實體機上的話,它需要在 BIOS 開啟虛擬化技術,
沒有開啟的話,它什麼事都做不了。
虛擬化技術在 Intel 跟 AMD 陣營有不同的名字:

  • Intel (Intel Virtualization Technology, Intel VT-x)
  • AMD (AMD Secure Virtual Machine, AMD SVM)

字詞雖不同,不過講的都是同一個功能。

這部分要在 BIOS 的 Chipset 裡面尋找對應的字詞(可能是 Virtualization Technology 之類的字詞)
然後開啟。這設定值有些預設為開啟,有些預設為關閉,如果安裝前有提示你的話,就要記得去開啟。
這部分每家廠牌主機板設定都不太一樣,沒有一體適用的教學。

安裝 Proxmox VE

建議是裝在實體機上,如果你要練習,裝在虛擬機上練習也是可以。

從 USB 隨身碟或光碟開機,然後使用 Next 大法,一路按 Next 安裝,應該不會遇到什麼問題。
注意硬碟會 重新格式化,不會保留資料。其中會設定 root 密碼與抓取當下的網路 IP,這部分要先記錄下來,安裝完成後重開機後會提示。安裝流程基本上不會遇到什麼問題。

比較有問題的應該是需在 BIOS 選擇正確的開機裝置,選擇到 USB 隨身碟。

移除網頁介面 No Valid Subscription 的提示 (選擇性)

這部分選擇性,做不做都可以。
每次登入網頁介面時都會出現 No Valid Subscription (無有效訂閱) 的提示,

You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options.

意思就是,你沒有一個有效訂閱,沒有訂閱其實也可以正常使用沒有關係,
但常期使用看到這個視窗會有一點點煩,以下就是教你怎麼移除它。

(以下方式存在版本上的差異,我使用的是 PVE 7.1,如果出了更新的版本,請參考套用或者不套用。)
(如果對程式語言不熟悉也建議跳過這段)

修改前請先備份程式碼。

# cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.bak

找到對應的檔案做修改:

# vi /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

? 來搜尋 checked_command 關鍵字,nShift + N 來查找位置。

找到這個段落(修改前的版本):

checked_command: function(orig_cmd) {
    Proxmox.Utils.API2Request(
        {
            url: '/nodes/localhost/subscription',
            method: 'GET',
            failure: function(response, opts) {
                Ext.Msg.alert(gettext('Error'), response.htmlStatus);
            },
            success: function(response, opts) {
                let res = response.result;
                if (res === null || res === undefined || !res || res
                    .data.status.toLowerCase() !== 'active') {
                    Ext.Msg.show({
                        title: gettext('No valid subscription'),
                        icon: Ext.Msg.WARNING,
                        message: Proxmox.Utils.getNoSubKeyHtml(res.data.url),
                        buttons: Ext.Msg.OK,
                        callback: function(btn) {
                            if (btn !== 'ok') {
                                return;
                            }
                            orig_cmd();
                        },
                    });
                } else {
                    orig_cmd();
                }
            },
        },
    );
},

這個 if 條件式 ,裡面有緊接一個含有 No valid subscriptionExt.Msg.show() 函式。

Ext.Msg.show({
    title: gettext('No valid subscription'),
    icon: Ext.Msg.WARNING,
    message: Proxmox.Utils.getNoSubKeyHtml(res.data.url),
    buttons: Ext.Msg.OK,
    callback: function(btn) {
        if (btn !== 'ok') {
            return;
        }
        orig_cmd();
    },
});

我們直接槓掉整段打 API 驗證有沒有授權的程式,讓它跑原本的 orig_cmd(); 就好。

修改後的版本如下:

checked_command: function(orig_cmd) {
    orig_cmd();
},

然後重啟 Proxmox VE 網頁服務

# systemctl restart pveproxy

網頁介面會斷線 3-5 分鐘不等,稍等之後再重新連線。

安裝相關套件

以下是小弟我個人常用的一些套件,一行指令來安裝,你也可以紀錄你自己喜愛的套件,修改這行指令
(以下都預設用 root 帳號登入執行)

# apt install -y net-tools vim curl sudo

net-tools 裡面有 ifconfig 指令,習慣 ifconfig 指令可以選擇性安裝它。

安裝 sudo 套件與使用者設定

我使用的版本是 PVE 7.1,
目前 PVE 是沒有安裝 sudo 套件的。

如果有需要,一樣可以安裝。

# apt install -y sudo

這樣就跟一般 Linux 幾乎無異了。

編輯 sudo 設定檔

在編輯設定檔之前,小弟我會先修改 visudo 預設會使用的編輯器。
(因為小弟我實在不習慣預設的 nano 編輯器)

# sudo update-alternatives --config editor

會出現以下選單可以選擇:

There are 3 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/nano            40        manual mode
  2            /usr/bin/vim.basic   30        manual mode
  3            /usr/bin/vim.tiny    15        manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode

個人喜好用 vi 所以選擇 vim.basic
如果沒有 vim.basic 選項,請安裝 vim

# apt install -y vim

編輯 sudo 設定檔,套用免密碼設定

編輯 sudo 設定檔,修改 sudo 時不需再次確認密碼
使用 visudo 修改指令

# visudo

在這行

%sudo   ALL=(ALL:ALL) ALL

把它改成

%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

新增使用者&加入使用者

簡單介紹一下 sudo 的用法

可以用指令新增使用者(例如:新增名字叫做 newuser

# adduser newuser

(註:請先不要使用 useradd 指令,因為它不會幫忙建立家目錄)

加入該使用者進 sudo 的使用者群組(允許使用 sudo)

# usermod -aG sudo newuser

如果要修改這位使用者的密碼,可以用 passwd 指令

# passwd newuser

(註:後面 必須 要接正確的使用者的名稱,如果沒有該參數會修改到 目前使用者 的密碼,
假設你登入 root 帳號就像修改到 root 的密碼,需注意。)

安裝桌面環境 (選擇性)

這步驟不一定需要做。因為通常我們使用 PVE 都是從網頁管理介面直接來,
實體機只會有一個醜醜的黑白 Console 命令列。
如果你需要桌面環境,需要 GUI 的話,可以用以下步驟安裝桌面環境。

安裝 X windows 與桌面

先更新系統套件

# apt update -y && apt dist-upgrade -y

然後安裝指令安裝 xfce4 桌面環境, chromium 瀏覽器(開源版的 Google Chrome 瀏覽器)

# apt install -y xfce4 chromium lightdm

新增使用者

在啟動桌面之前,先新增一個普通 linux 使用者,避免使用 root 帳號來登入。
可以用指令新增使用者(例如:新增名字叫做 newuser

# adduser newuser

(註:請先不要使用 useradd 指令,因為它不會幫忙建立家目錄)

啟動 X windows

最後用指令啟動登入管理器:

# systemctl start lightdm

就有一個基本的桌面環境了。

改登入畫面桌布 (選擇性)

方式有二種,你可以安裝 lightdm-gtk-greeter-settings 圖形介面,

# apt install -y lightdm-gtk-greeter-settings

或者用以下方法改設定:

把桌布圖檔放到 /usr/share/pixmaps/ 底下(假設檔名為 wallpaper.jpg

然後修改 lightdm-gtk-greeter.conf 設定檔

# vi /etc/lightdm/lightdm-gtk-greeter.conf

[greeter] 這個段落加上一行

background=/usr/share/pixmaps/wallpaper.jpg

成果如下:

[greeter]
background=/usr/share/pixmaps/wallpaper.jpg

:wq 存檔離開。

最後,重啟 lightdm 服務

# systemctl restart lightdm

就會看到新的桌布了~

基本 Proxmox VE 使用方式

以下介紹 Proxmox VE 基本使用方式,建立虛擬機 (Virtual machine, VM) 跟 Container 容器。

建立虛擬機 (Virtual machine, VM)

網頁介面進去,右上角就有二個大大的按鈕,
一個是 Create VM ,一個是 Create CT

首先,先去下載你要的系統光碟檔 (ISO) 用網頁上傳上去。

然後我們按下 Create VM,選擇內核,選擇 ISO 檔案,
設定 CPU、記憶體、硬碟容量大小,最後按 Finish 完成。
中間應該不會有什麼問題。

建立好的 VM 之後,選擇按下 Start 就開機了,
之後就是作業系統的安裝與操作,就這麼簡單。

建立 Container 容器

先說,這個 Container 不是 docker 裡講的那個 Container,而是 LXC 的 Container,
概念雖接近,但不是相同的東西。

簡單來說,虛擬機 (Virtual machine, VM) 會是模擬一個「完整的」電腦系統,
虛擬 BIOS、虛擬處理器、記憶體、硬碟、…等等。

Container 是一個從作業系統層,利用一些容器隔離技術,直接跑起來的 Process (處理程序)。
為了減少中間虛擬化造成的效能損耗。
如果有玩過,你會發現 Container 它會比 VM 較快。
但也有一些限制,就不是什麼 Image 都有,部分特殊情況會有相容性問題。

如果你有遇到問題,可以做一份相同版本的 VM 跟 Container,二者交叉比較看看。
CT Template 的區域有一些現成的 Templete 可以下載使用,常見的 Linux 版本都有。

像我個人使用 Ubuntu ,使用 Ubuntu 20.04 版本。
像是學 Redhat 系列的可以選 CentOS、 Rocky Linux 或 Fedora Core、
想要系統比較小可以選 Alpine…純憑個人喜好。

跟 VM 的建立方式接近,但你會發現預設資源設定就少很多,而且比較順暢,可以推薦玩玩看。

幾個重要的檔案路徑

列出幾個重要的檔案路徑,到時候要複製檔案的時候才知道要去哪裡找。

ISO 檔案的路徑

ISO 檔案的路徑在:
/var/lib/vz/template/iso/

這個是網頁介面上傳 ISO 檔案會存放的路徑。

虛擬機備份路徑

你的虛擬機 (VM) 備份、容器 (Container) 備份,
檔案位置都在 /var/lib/vz/dump/ 底下。

設定檔位置

開啟若干個虛擬機 (VM) 或 容器 (Container) 後,設定檔在
/etc/pve/lxc/ 底下。

例如:
我要修改 VMID = 100 的虛擬機,設定檔就是:
/etc/pve/lxc/100.conf

以此類推。

以上粗淺的分享,還有很多地方沒有提到,之後文章會慢慢補充。

參考資料