2017-09-03 51 views
2

我在不同的地方(家庭網絡,雲,...)擁有數十億臺機器,並且我在每臺機器上都使用fish。問題是我每次改變內容時都必須同步它們的配置。如何從遠程存儲庫加載魚配置?

有沒有辦法從遠程存儲庫加載配置? (=它將被存儲的地方,不一定是git,但理想情況下我會在GitHub中管理它們)。在這種情況下,我只需要在所有地方都有一個班輪。

  • 我沒有太在意啓動時間,加載配置每個時間是可以接受的
  • 我不能配置推到機器(通過Ansible例如) - 不是他們的可達來自世界各地直接 - 但他們都可以達到互聯網

回答

3

有兩個部分給你的問題。第一部分並不特定於魚類。對於我經常使用的系統,我使用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並導入所有這些變量。

+0

謝謝。答案的第一部分是我想避免的。我無法在某些machibes上啓用我的雲存儲,並且我希望避免單獨同步每個配置。我希望有一個魚配置,可以自行調整配置。如果它沒有實施,我會回到一個git拉它在cron工作。答案的第二部分非常豐富,謝謝! – WoJ

0

免責聲明:我不會自己選擇這個解決方案。使用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