繁体   English   中英

homebrew:以编程方式复制安装?

[英]homebrew: programmatically replicate an installation?

我想将我的macos brew配置复制到几台机器上。

有没有办法以编程方式检查brew的状态或让它生成一组命令来同步状态与另一台机器?

更新:似乎没有任何东西,所以我整理了一个快速包。 到目前为止,它对我来说效果很好。

https://github.com/marhar/brewmaster

好问题!!!!

不确定是否有“正确”的方法来做到这一点,但这也是我想做的事情,以保持笔记本电脑的Homebrew与我的桌面同步。 我开始写一些东西,以便有一个export settings命令和一个import settings命令,并在两台机器之间保存Dropbox中的设置。

我可以列出所有已安装的软件包并遍历它们,然后获取用于安装每个特定软件包的选项 - 我使用JSON输出和jq home-brew软件包来解析选项。

然后我遇到了问题......

1)当您在第二台机器上安装时,存在依赖关系,有时home-brew会为您安装依赖项,但它会使用默认选项安装它,除非您先使用正确的选项安装它。 解决这个问题的一种方法是使用选项强制重新安装包列表中的东西,即使它们由于安装了以前的包而已经安装在默认状态。

2)第二个问题是固定在某个版本的pinned包。 这开始让我大吃一惊,我放弃了,因为我并不担心笔记本电脑上的设置不同。

FWIW,这里是我开始写的代码的骨头 - 它是不完整的,可能是错的,但十次又可能让你或其他人得到滚动。

   first=1
   # Start output file with array so we can use map()
   echo "["                                                               >  "$f"
   # Iterate over all installed packages
   for pkg in $(brew list); do
      [ $first -ne 1 ] && echo ","                                        >> "$f"
      [ $verbose -gt 0 ] && echo Processing package: $pkg
      # Find options used for this package
      options=$(brew info --json=v1 $pkg | jq '.[].installed[0].used_options')
      echo "{\"name\":\"$pkg\",\"used_options\":$options}"                >> "$f"
      first=0
   done
   # Close array in output file
   echo "]"                                                               >> "$f"

一个有用的信息是每个安装的包中都有一个名为“INSTALL_RECEIPT.json”的可解析文件,它告诉你很多有用的东西......

find /usr/local -name "INSTALL_RECEIPT*"

这是我用来解析它们的其他一些片段

# List package names
#jq -r '.packages[] | .["package-name"]' < *json

# List options for package "imagemagick"
#jq -r '.packages[] | select(."package-name"=="imagemagick") | .options[]' < *json

可能不完全不同于您在同步安装方面的要求,但您应该查看Brewfiles和Bundler: https//github.com/Homebrew/homebrew-bundle

这是一个简单的软件包,可以在几台机器上运行,同步它们,因此它们具有相同的已安装软件包。 我也在添加对字体同步的支持。

https://github.com/marhar/brewmaster

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM