美文网首页技术类文章收集大杂烩
Homebrew包制作与发布中的坑

Homebrew包制作与发布中的坑

作者: 科研者 | 来源:发表于2019-12-01 18:50 被阅读0次

    Homebrew 是一款 Mac OS 平台下的软件包管理工具;用当来安装工具非常方便,但是当我想把我开发的工具 上传(发布) 到 Homebrew ,以便能用 Homebrew 来安装时,发现:关于 Homebrew 包的 制作 和 发布 的文章 实在是太少了(第一次 发布 npm 包时,也是很多问题找不到答案);所以踩了很长时间的坑;本文就记录下这些,以使大家尽快走出误区;

    Homebrew介绍

    Homebrew 是 Mac 系统的软件包管理工具,具有安装、卸载、更新、查看、搜索等功能。安装包时,Homebrew 会自动管理 各种依赖 和 路径,十分方便快捷。

    相关文章

    关于Homebrew包的制作与发布的文章

    注意事项

    • Tap 实际上就是一个 Git 仓库,也是软件仓库,但与别的包管理器不同的是,Tap 存放的不是已经编译好的二进制文件,而是 Formula,也就是用来下载、编译和安装脚本或软件的 Ruby 脚本。 当执行安装命令时,如brew install sshcp,Homebrew 就会在 Tap 在中寻找与包 sshcp 对应的 Formula,即 Ruby 脚本,然后按照该脚本定义的方法将 Keg (sshcp) 下载、编译、安装到 Cellar 中;

    • Formula (配方) 是要被放在 Tap 的 Git 仓库里的;而在用命令 brew create [options] URL 创建 Formula 时,传的 URL 是来源于你要发布的 软件、脚本 的 Git 仓库,这个仓库 根 Tap 不是一个仓库,Tap 是一个需要符合 Homebrew 规范的、用来存放 Formula 文件的仓库,并不是存放你 的软件、脚本 的仓库;当然,你也可以将 软件、脚本 和 Tap 共用一个仓库;

    • 用命令 brew create [options] URL 创建的 Formula 是被存放在 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ 文件夹中,该文件夹是用来存放 Homebrew 官方的 Formula 的,它是从 Homebrew 官方仓库 homebrew/homebrew-core 克隆下来的;所以,当你创建好你自己的 Formula 后,需要将 你的 Formula 从官方的 Formula /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ 中移出来(即:从 从官方的 Formula 中删除),然后上传到 你的 Tap 仓库的 Formula/ 文件夹下;如果你不将你的 Formula 从官方的 Formula 中删除,则会导致 当你用 brew 命令 brew install sshcp 安装你的包时,Homebrew 不会根据你的 Tap 仓库中定义的 Formula 来安装,而是会根据 你电脑本机中 Homebrew 官方的 Formula 文件夹中 你的包对应的 Formula 来安装;即: Homebrew 官方的 优先级 高于 第三方的,brew 会优先在 Homebrew 官方的文件夹中进行查找;
    • 如果你想把某个文本安装到 bin 目录中,以便在命令行中能使用,你可能需要在 Formula 的 安装命令定义 def install 中用到下面这个安装命令:
      bin.install <被安装的文件的路径>...
      
      示例:
      bin.install "src/sshcp"
      
      这个安装命令的作用是将 指定的文件 移到 bin 目录,并给该文件增加可执行权限(chmod 0555 sshcp);
    • 安装命令中定义符号链接:
      创建符号链接时,要确保它们是相对符号链接,这样可以更轻松地创建可重定位的 Bottle (瓶子,Homebrew 中的另一个概念)。
      例如,要在 bin 目录中 创建一个 链接到 libexec 中 可执行文件的符号链接,可以用下面这条命令:
      bin.install_symlink libexec/"name"
      
      来代替
      ln_s libexec/"name", bin
      
      因为,通过 install_symlink 创建的符号链接可以确保是相对符号链接,而 ln_s 命令只会在 接收到 相对路径时才会产生相对的符号链接;

    相关文章

      网友评论

        本文标题:Homebrew包制作与发布中的坑

        本文链接:https://www.haomeiwen.com/subject/ajqtgctx.html