2017-09-03 76 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