在 Linux 中,點檔案是隱藏的文字檔案,從 Bash、Git 到 i3 或 VSCode 等更複雜的許多應用程式,都用它儲存設定設定。
這些檔案大多數都放在 ~/.config
目錄中或使用者主目錄中。編輯這些檔案使你可以自定義也許沒有提供設定選單的應用程式,並且它們可以跨裝置甚至是跨其它 Linux 發行版移植。但是,整個 Linux 發燒友社群的討論焦點是如何管理這些點檔案以及如何共用它們。
我們將展示一個名為 Chezmoi 的工具,該工具與其它工具略有不同。
如果你在 GitHub 上搜尋“dotfiles”,那麼你將看到有超過 10 萬個儲存庫在解決一個目標:將人們的點檔案儲存在可共用且可重複的領地中。但是,除了都在使用 Git 之外,它們儲存檔案的方式各有不同。
雖然 Git 解決了程式碼管理問題,也將其轉換為組態檔管理,但它並沒有解決如何區分發行版、角色(例如家用計算機與工作計算機)、機密資訊管理以及按裝置設定的問題。
因此,許多使用者決客製化定自己的解決方案,多年來,社群已經做出了許多成果。本文將簡要介紹已有的一些解決方案。
你想在封閉的環境中快速嘗試以下解決方案嗎?執行:
$ podman run --rm -it fedora
來建立一個 Fedora 容器嘗試應用程式。退出容器時,該容器將自動刪除自身。
如果將點檔案儲存在 Git 儲存庫中,你肯定希望可以讓更改輕鬆地自動應用到主目錄之中,乍一看,最簡單的方法是使用符號連結,例如 ln -s ~/.dotfies/bashrc ~/.bashrc
。這可以使你的更改在更新儲存庫時立即就緒。
符號連結的問題在於管理符號連結可能很麻煩。Stow 和 RCM(在 Fedora 雜誌上介紹過)可以幫助你管理這些,但是這些並不是非常舒服的解決方案。下載後,需要對私有檔案進行適當的修改和設定存取模式。如果你在一個系統上修改了點檔案,然後將儲存庫下載到另一個系統,則可能會發生衝突並需要進行故障排除。
解決此問題的另一種方法是編寫自己的安裝指令碼。這是最靈活的選項,但要權衡花費更多時間來構建自定義解決方案是否值得。
Git 旨在跟蹤更改。如果你在 Git 儲存庫中儲存密碼或 API 金鑰之類的機密資訊,則會比較麻煩,並且需要重寫 Git 歷史記錄以刪除該機密資訊。如果你的儲存庫是公開的,那麼如果其他人下載了你的儲存庫,你的機密資訊將不再保密。僅這個問題就會阻止許多人與公共世界共用其點檔案。
問題不在於如何將設定拉到多個裝置,而是當你有多個需要不同設定的裝置的問題。大多數人通過使用不同的資料夾或使用不同的復刻來處理此問題。這使得難以在不同裝置和角色集之間共用設定。
Chezmoi 是一種考慮了以上問題的用於管理點檔案的工具,它不會盲目地從儲存庫複製或符號連結檔案。 Chezmoi 更像是模板引擎,可以根據系統變數、模板、機密資訊管理器和 Chezmoi 自己的組態檔來生成你的點檔案。
目前,Chezmoi 並不在 Fedora 的預設軟體庫中。你可以使用以下命令下載 Chezmoi 的當前版本。
$ sudo dnf install https://github.com/twpayne/chezmoi/releases/download/v1.7.17/chezmoi-1.7.17-x86_64.rpm
這會將預打包的 RPM 安裝到你的系統中。
讓我們繼續使用以下方法建立你的儲存庫:
$ chezmoi init
它將在 ~/.local/share/chezmoi/
中建立你的新儲存庫。你可以使用以下命令輕鬆地切換到該目錄:
$ chezmoi cd
讓我們新增第一個檔案:
chezmoi add ~/.bashrc
這將你的 .bashrc
檔案新增到 chezmoi 儲存庫。
注意:如果你的 .bashrc
檔案實際上是一個符號連結,則需要新增 -f
標誌以跟隨它來讀取實際檔案的內容。
現在,你可以使用以下命令編輯該檔案:
$ chezmoi edit ~/.bashrc
現在讓我們新增一個私有檔案,這是一個具有 600 或類似許可權的檔案。我在 .ssh/config
中有一個檔案,我想通過使用如下命令新增它:
$ chezmoi add ~/.ssh/config
Chezmoi 使用特殊的字首來跟蹤隱藏檔案和私有檔案,以解決 Git 的限制。執行以下命令以檢視它:
$ chezmoi cd
請注意,標記為私有的檔案實際上並不是私有的,它們仍會以純文字格式儲存在你的 Git 儲存庫中。稍後會進一步解釋。
你可以使用以下方法應用任何更改:
$ chezmoi apply
並使用如下命令檢查有什麼不同:
$ chezmoi diff
要匯出 Chezmoi 可以收集的所有資料,請執行:
$ chezmoi data
其中大多數是有關使用者名稱、架構、主機名、作業系統型別和作業系統名稱的資訊。但是你也可以新增我們自己的變數。
繼續,執行:
$ chezmoi edit-config
然後輸入以下內容:
[data] email = "[email protected]" name = "Fedora Mcdora"
儲存檔案,然後再次執行 chezmoi data
。你將在底部看到你的電子郵件和姓名已經新增成功。現在,你可以將這些與 Chezmoi 的模板一起使用。執行:
$ chezmoi add -T --autotemplate ~/.gitconfig
來將你的 .gitconfig
作為模板新增到 Chezmoi 中。如果 Chezmoi 成功地正確推斷了模板,你將獲得以下資訊:
[user] email = "{{ .email }}" name = "{{ .name }}"
如果沒有,則可以將檔案更改為這樣。
使用以下方法檢查檔案:
$ chezmoi edit ~/.gitconfig
然後使用:
$ chezmoi cat ~/.gitconfig
來檢視 Chezmoi 為此檔案生成什麼。我生成的範例如下:
[root@a6e273a8d010 ~]# chezmoi cat ~/.gitconfig[user] email = "[email protected]" name = "Fedora Mcdora"[root@a6e273a8d010 ~]#
它將在我們的 Chezmoi 設定中生成一個充滿變數的檔案。你也可以使用變數執行簡單的邏輯語句。一個例子是:
{{- if eq .chezmoi.hostname "fsteel" }}# 如果主機名為 "fsteel" 才包括此部分{{- end }}
請注意,要使其正常工作,該檔案必須是模板。你可以通過檢視檔案是否在 chezmoi cd
中的檔名後附加 .tmpl
或使用 -T
選項讀取檔案來進行檢查。
要對設定進行故障排除,請使用以下命令。
$ chezmoi doctor
這裡重要的是它還向你顯示了所支援的密碼管理器。
[root@a6e273a8d010 ~]# chezmoi doctor warning: version dev ok: runtime.GOOS linux, runtime.GOARCH amd64 ok: /root/.local/share/chezmoi (source directory, perm 700) ok: /root (destination directory, perm 550) ok: /root/.config/chezmoi/chezmoi.toml (configuration file) ok: /bin/bash (shell) ok: /usr/bin/vi (editor) warning: vimdiff (merge command, not found) ok: /usr/bin/git (source VCS command, version 2.25.1) ok: /usr/bin/gpg (GnuPG, version 2.2.18) warning: op (1Password CLI, not found) warning: bw (Bitwarden CLI, not found) warning: gopass (gopass CLI, not found) warning: keepassxc-cli (KeePassXC CLI, not found) warning: lpass (LastPass CLI, not found) warning: pass (pass CLI, not found) warning: vault (Vault CLI, not found) [root@a6e273a8d010 ~]#
你可以使用這些用戶端,也可以使用通用用戶端,也可以使用系統的金鑰環。
對於 GPG,你需要使用以下命令將以下內容新增到設定中:
$ chezmoi edit-config
[gpg] recipient = "<Your GPG keys Recipient"
你可以使用:
$ chezmoi add --encrypt
來新增任何檔案,這些檔案將在你的源儲存庫中加密,並且不會以純文字格式公開。Chezmoi 會在應用時自動將其解密。
我們也可以在模板中使用它們。例如,儲存在 Pass(已在 Fedora 雜誌上介紹)中的機密令牌。繼續,生成你的機密資訊。
在此範例中,它稱為 githubtoken
:
rwaltr@fsteel:~] $ pass ls Password Store └── githubtoken [rwaltr@fsteel:~] $
接下來,編輯你的模板,例如我們之前建立的 .gitconfig
並新增以下行。
token = {{ pass "githubtoken" }}
然後讓我們使用檢查:
$ chezmoi cat ~/.gitconfig
[rwaltr@fsteel:~] $ chezmoi cat ~/.gitconfig This is Git's per-user configuration file. [user] name = Ryan Walter email = [email protected] token = mysecrettoken [rwaltr@fsteel:~] $
現在,你的機密資訊已在密碼管理器中妥善保護,你的設定可以公開共用而沒有任何風險!
這裡僅僅涉及到表面。請存取 Chezmoi 的網站了解更多資訊。如果你正在尋找有關如何使用 Chezmoi 的更多範例,作者還可以公開了他的點檔案。