使用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-<demo> 的规则命名,否则在后续安装脚本的过程中会遇到些不可描述的坑。我创建的仓库如下: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 <tap-name> <git-url>
拉取仓库成功

我们可以看到本地有个隐藏的.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。


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 <file> 获取本地文件的校验码。

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

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常规使用教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342