使用HomeBrew发布脚本

相关概念

  • Keg(酒桶):安装好的脚本、软件等;
  • Cellar(酒窖):所有用 Homebrew 安装在本地的脚本、软件组成的集合;
  • Formula(配方):定义如何下载、编译和安装脚本或软件的 Ruby 脚本;
  • Tap:一个包含若干 Formula 的 GitHub 专案。

其中最需要注意的是Formula(配方),它就像是一个 “药方”,记录这几种药品需要在哪些地方采摘,只有正确的药方才能保证 “药到病除” !

// tip:可以通过指令查看本地目前都安装了哪些脚本。
open /usr/local/Cellar/

brew有自己的Taps,这里管理着brew官方的仓库,仓库里放着官方认证过的“药方”。

// 使用一下指令查看官方配方
open /usr/local/Homebrew/Library/Taps
本地的配方仓

当然,本文的内容不是教大家制作一个能经得起官方认证的脚本。既然加盟很难,那不如自己打造一个品牌?


创建自己的Formula仓库

在git上创建自己的仓库,创建仓库的命名方式必须是以 homebrew- 的规则命名,否则在后续安装脚本的过程中会遇到些不可描述的坑。我创建的仓库如下:https://github.com/Linzehua2015/homebrew-hello.git
接下来我们通过 brew tap 指令将刚创建的仓库拉到本地(将店面开在homebrew旁边)。

// 在执行这个命令的时候,brew会自动去更新自己的formula仓库,会耗时几分钟。。。
brew tap Linzehua2015/hello https://github.com/Linzehua2015/homebrew-hello.git
brew tap
拉取仓库成功

我们可以看到本地有个隐藏的.git文件,所以实际上brew tap也是基于git来完成拉取仓库的操作。现在“店面”开好了,但是仓库下还没有布置“药方”,接下来我们原创个“药方”。


编写自己的配方

编写配方之前,我们需要先制作一个简单可执行的文件(脚本),供配方软连接到这个脚本。
我们编写一个简单的.sh脚本,输出你输入的内容。

#!/bin/bash
echo 您刚才输入的内容是: $1

然后执行指令,将其转为可执行文件。

mv hello.sh hello
可执行文件

将可执行文件打包成 tar.gz 的格式。

// tar zcvf FileName.tar.gz DirName
tar zcvf hello_0.0.1.tar.gz hello

将这个可执行文件上传到git。

打包脚本

上传到git,供配方软连接到这个脚本文件。
https://github.com/Linzehua2015/homebrew-hello/raw/master/hello_0.0.1.tar.gz
使用 tap create 创建药方。

brew create https://github.com/Linzehua2015/homebrew-hello/raw/master/hello_0.0.1.tar.gz

注意,这里因为我没有更改brew的镜像源,所以创建成功后文件会出现在/Taps/homebrew/homebrew-core/Formula/hello.rb我们可以手动将这个 hello.rb 文件剪切到自己的Formula文件夹下/Taps/linzehua2015/homebrew-hello/Formula/hello.rb。


image.png

hello.rb 文件内容如下:

# Documentation: https://docs.brew.sh/Formula-Cookbook
#                https://www.rubydoc.info/github/Homebrew/brew/master/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class Hello < Formula
  desc ""
  homepage ""
  url "https://github.com/Linzehua2015/homebrew-hello/raw/master/hello_0.0.1.tar.gz"
  sha256 "535d9625bf0ca15fac1c6fb975b26eaa347f09b277933cca01e60f637030fc46"
  # depends_on "cmake" => :build

  def install
    # ENV.deparallelize  # if your formula fails when building in parallel
    # Remove unrecognized options if warned by configure
    system "./configure", "--disable-debug",
                          "--disable-dependency-tracking",
                          "--disable-silent-rules",
                          "--prefix=#{prefix}"
    # system "cmake", ".", *std_cmake_args
    system "make", "install" # if this fails, try separate make/make install steps
  end

  test do
    # `test do` will create, run in and delete a temporary directory.
    #
    # This test will fail and we won't accept that! For Homebrew/homebrew-core
    # this will need to be a test that verifies the functionality of the
    # software. Run the test with `brew test hello`. Options passed
    # to `brew install` such as `--HEAD` also need to be provided to `brew test`.
    #
    # The installed folder is not in the path, so use the entire path to any
    # executables being tested: `system "#{bin}/program", "do", "something"`.
    system "false"
  end
end

需要注意的信息有几个 desc、homepage、url、sha256 ,其中sha256是对url下载的文件的校验,可以通过 openssl sha256 获取本地文件的校验码。

我们需要对安装方式做一下调整
调整如下:

def install
    bin.install "hello"
end

做完这些操作后,保存,提交到git上。

安装hello脚本

brew install Linzehua2015/hello/hello
安装hello脚本成功

可以看出我们的脚本装到了/usr/local/Cellar这个路径下。

open /usr/local/Cellar
image.png

Cellar存放着被成功下载并安装在本地的脚本,接下来你就可以使用指令 hello 来执行脚本啦!!

image.png

如何在其他人的设备安装自己的脚本

只需要2个步骤:

// 在执行这个命令的时候,brew会自动去更新自己的formula仓库,会耗时几分钟。。。
brew tap Linzehua2015/hello https://github.com/Linzehua2015/homebrew-hello.git
// 下载、安装 hello 脚本
brew install Linzehua2015/hello/hello

参考文档

HomeBrew官网
HomeBrew常规使用教程

你可能感兴趣的:(使用HomeBrew发布脚本)