我在不同的地方(家庭網絡,雲,...)擁有數十億臺機器,並且我在每臺機器上都使用fish
。問題是我每次改變內容時都必須同步它們的配置。如何從遠程存儲庫加載魚配置?
有沒有辦法從遠程存儲庫加載配置? (=它將被存儲的地方,不一定是git
,但理想情況下我會在GitHub中管理它們)。在這種情況下,我只需要在所有地方都有一個班輪。
- 我沒有太在意啓動時間,加載配置每個時間是可以接受的
- 我不能配置推到機器(通過Ansible例如) - 不是他們的可達來自世界各地直接 - 但他們都可以達到互聯網
我在不同的地方(家庭網絡,雲,...)擁有數十億臺機器,並且我在每臺機器上都使用fish
。問題是我每次改變內容時都必須同步它們的配置。如何從遠程存儲庫加載魚配置?
有沒有辦法從遠程存儲庫加載配置? (=它將被存儲的地方,不一定是git
,但理想情況下我會在GitHub中管理它們)。在這種情況下,我只需要在所有地方都有一個班輪。
有兩個部分給你的問題。第一部分並不特定於魚類。對於我經常使用的系統,我使用Dropbox。我將我的〜/ .config/fish目錄放在一個Dropbox目錄中,並將其鏈接到它。對於我很少使用的機器,例如用於調查發行版特有問題的虛擬機,我使用rsync從我的主要桌面機器複製。例如,
rsync --verbose --archive --delete -L --exclude 'fishd.*' [email protected]:.config .
注意排除fishd.*
模式。這是你的問題的第二部分,是魚的獨特之處。 〜/ .config/fish目錄中以該模式命名的文件是通用變量存儲器,並且對於每臺計算機目前都是唯一的。我們想改變這種情況 - 請參閱https://github.com/fish-shell/fish-shell/issues/1912。問題是該文件包含顏色主題變量。所以,要複製你的顏色主題,需要一臺機器上出口這些增值經銷商:
set -U | grep fish_color_
然後做set -U
在新機器上從上述命令輸出的每一行。顯然,如果你有其他的通用變量你想同步,你應該做set -U
並導入所有這些變量。
免責聲明:我不會自己選擇這個解決方案。使用Kurtis Rader建議的雲存儲客戶端或週期性的cron作業來從git存儲庫(+符號鏈接)提取更改看起來更容易和防故障。
在那裏你不能或不想與你的雲存儲同步這些系統,可以專門下載配置文件,使用curl
例如。利用HTTP緩存控制機制可以節省一些寶貴的I/O時間。無論是否使用緩存控制,每次(或每X次或每Y時間過去)都需要創建一個到遠程服務器的連接,並且已經浪費了相當一段時間。
以下爲這樣的魚腳本一個建議,讓你開始:
#!/usr/bin/fish
set -l TMP_CONFIG /tmp/shared_config.fish
curl -s -o $TMP_CONFIG -D $TMP_CONFIG.headers \
-H "If-None-Match: \"$SHARED_CONFIG_ETAG\"" \
https://raw.githubusercontent.com/woj/dotfiles/master/fish/config.fish
if test -s $TMP_CONFIG
mv $TMP_CONFIG ~/.config/fish/conf.d/shared_config.fish
set -U SHARED_CONFIG_ETAG (sed -En 's/ETag: "(\w+)"/\1/p' $TMP_CONFIG.headers)
end
注:
fish
V2 .3或更高。sed
行爲因平臺而異。woj/dotfiles/master/fish/config.fish
替換爲適用於您的案例的存儲庫,分支和路徑。您可以從一個cron作業運行,但如果你堅持要更新每一個初始化的配置文件,更改腳本將配置在並非已經自動fish
加載的路徑,例如:
mv $TMP_CONFIG ~/.config/fish/shared_config.fish
並在config.fish
來看這整個腳本文件,隨後
source ~/.config/fish/shared_config.fish
謝謝。答案的第一部分是我想避免的。我無法在某些machibes上啓用我的雲存儲,並且我希望避免單獨同步每個配置。我希望有一個魚配置,可以自行調整配置。如果它沒有實施,我會回到一個git拉它在cron工作。答案的第二部分非常豐富,謝謝! – WoJ