相关概念
- 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-<demo> 的规则命名,否则在后续安装脚本的过程中会遇到些不可描述的坑。我创建的仓库如下:https://github.com/Linzehua2015/homebrew-hello.git
接下来我们通过 brew tap 指令将刚创建的仓库拉到本地(将店面开在homebrew旁边)。
// 在执行这个命令的时候,brew会自动去更新自己的formula仓库,会耗时几分钟。。。
brew tap Linzehua2015/hello https://github.com/Linzehua2015/homebrew-hello.git
我们可以看到本地有个隐藏的.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 <git-url> 创建药方。
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。
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 <file> 获取本地文件的校验码。
我们需要对安装方式做一下调整
调整如下:
def install
bin.install "hello"
end
做完这些操作后,保存,提交到git上。
安装hello脚本
brew install Linzehua2015/hello/hello
可以看出我们的脚本装到了/usr/local/Cellar这个路径下。
open /usr/local/Cellar
Cellar存放着被成功下载并安装在本地的脚本,接下来你就可以使用指令 hello 来执行脚本啦!!
如何在其他人的设备安装自己的脚本
只需要2个步骤:
// 在执行这个命令的时候,brew会自动去更新自己的formula仓库,会耗时几分钟。。。
brew tap Linzehua2015/hello https://github.com/Linzehua2015/homebrew-hello.git
// 下载、安装 hello 脚本
brew install Linzehua2015/hello/hello