[brew|Mac]如何将软件发布到Homebrew
开发了一个用于macOS
的工具软件,如何方便使用者进行安装呢?在macOS
上比较常用的安装管理工具是brew。以我最近开发的一个用于打通macOS
和docker
容器网络的工具客户端docker-connector为例,说明如何让软件可以通过brew install
安装。
准备软件
要通过brew
进行安装,需要提供软件下载地址,下载的可以是源码,也可以是编译好的可执行文件的tar包。我使用了编译好的可执行文件,打成tar包,并且生成SHA256。
$ tar -czf docker-connector-mac.tar.gz docker-connector
$ shasum -a 256 docker-connector-mac.tar.gz | awk '{print $1}' > docker-connector-mac-sha256.txt
把编译好的可执行文件打包之后上传到Github
的Releases
中(也可以放到任何能够公共访问的地方),上传之后可以获取下载链接,后续会用到。
https://github.com/wenjunxiao/mac-docker-connector/releases/download/v1.0/docker-connector-mac.tar.gz
准备tap仓库
Homebrew除了核心仓库之外,还支持第三方仓库,如何提交到核心仓库,可以查看官方文档。前期为了方便测试和及时更新,准备自己的第三方仓库。在Github
新建一个仓库,仓库的名称必须是homebrew-
开头,后面的名称自定义,安装的时候需要指定该名称,我把仓库命名为homebrew-brew,语言选择Ruby
。克隆到本地之后新建
$ git clone https://github.com/wenjunxiao/homebrew-brew
$ cd homebrew-brew
$ mkdir Formula
后续需要提交软件只需要在Formula
增加一个Ruby
文件即可。
准备Formula
每个软件对应一个Formula
文件,该文件使用Ruby
语言,以docker-connector.rb为例,分析一下如何编写。
最基本的结构如下
class DockerConnector < Formuladesc "软件功能描述"homepage "https://github.com/wenjunxiao/mac-docker-connector"url "https://github.com/wenjunxiao/mac-docker-connector/releases/download/v1.0/docker-connector-mac.tar.gz"sha256 "....."version "1.0"def installbin.install "docker-connector"end
end
第一行class DockerConnector < Formula
定了一个Ruby
的类继承自Formula
,类的名称可以自定义。必须end
结尾
desc
属性
desc
是软件的功能描述
homepage
属性
homepage
是软件的主页地址
url
属性
url
是软件的下载地址,用前面准备的下载地址
sha256
属性
sha256
是软件包的SHA256
用于验证软件包的
version
属性
version
是指定软件版本
install
方法
接下来def install
是定义了安装行为的方法,必须用end
结尾。
bin.install
bin.install
是安装可执行文件,后面跟的是软件包中的可执行文件,软件通常会安装(或链接)到/usr/local/bin/
目录。如果安装包中的的名称与安装之后名称不一致,可以使用=>
重新指定,比如,把名称a
修改为b
bin.install "a" => "b"
这是最简单的安装单个可执行文件。
etc.install
如果还有配置文件可以通过etc.install
安装。
etc.install "options.conf" => "docker-connector.conf"
如果安装包没有配置文件,为了初始化话配置文件,可以在安装时生成
(buildpath/"options.conf").write <<~EOS# addr 192.168.251.1/24# mtu 1400# host 127.0.0.1# port 2511# route 172.17.0.0/16
EOS
etc.install "options.conf" => "docker-connector.conf"
以上的代码是在构建目录buildpath
下生成一个options.conf
的文件,写入文件的内容是EOS
扩起来的内容
# addr 192.168.251.1/24
# mtu 1400
# host 127.0.0.1
# port 2511
# route 172.17.0.0/16
同样上面由于配置文件名与最终安装的配置文件名不一样所以使用=>
重命名了,也可以生成的时候就使用相同的名称。
(buildpath/"docker-connector.conf").write <<~EOS
EOS
etc.install "docker-connector.conf"
plist
方法
除了安装软件之外,还可以安装对应的服务,以便通过服务管理plist
方法定义了生成macOS
服务的plist
内容。
def plist<<~EOS<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>KeepAlive</key><dict><key>SuccessfulExit</key><false/></dict><key>Label</key><string>#{plist_name}</string><key>ProgramArguments</key><array><string>#{opt_bin}/docker-connector</string><string>-config</string><string>#{etc}/docker-connector.conf</string></array><key>RunAtLoad</key><true/><key>WorkingDirectory</key><string>#{var}</string><key>StandardErrorPath</key><string>#{var}/log/docker-connector.log</string><key>StandardOutPath</key><string>#{var}/log/docker-connector.log</string></dict></plist>EOS
end
其中ProgramArguments
后的数组中配置了运行服务的命令,#{opt_bin}
是安装软件的目录,#{etc}
是配置文件的安装位置,这些都是安装时的变量,安装完成之后会被替换成具体的值。StandardErrorPath
和StandardOutPath
分别表示软件运行的标准错误和标准输出的日志文件。
caveats
方法
def caveats
方法中定义了安装完成之后输出的提示信息,用于引导用户执行正确的操作,系统会有默认的提示信息,也可以添加额外的提示信息,比如用户该执行什么操作来完善配置等
def caveats<<~EOSFor the first time, you can add all the bridge networks of docker to the routing table by the following command:docker network ls --filter driver=bridge --format "{{.ID}}" | xargs docker network inspect --format "route {{range .IPAM.Config}}{{.Subnet}}{{end}}" >> #{HOMEBREW_PREFIX}/etc/docker-connector.confOr add the route of network you want to access to following config file at any time:#{HOMEBREW_PREFIX}/etc/docker-connector.confRoute format is `route subnet`, such as:route 172.17.0.0/16The route modification will take effect immediately without restarting the service.EOS
end
安装软件
把Formula
提交之后就可以在macOS
执行brew install
了,由于是第三方的,所以首次安装之前需要下载仓库,下载时指定用户名和仓库名(不需要homebrew-
)
$ brew tap wenjunxiao/brew
执行安装安装
$ brew install docker-connector
也可以通过一个命令进行安装(如果和其他仓库有重名时也可以通过该命令安装)
$ brew install wenjunxiao/brew/docker-connector
[brew|Mac]如何将软件发布到Homebrew相关推荐
- Mac 下的软件安装 —— 从 pkg,dmg 到 brew,cask
本文转载自坚持编程_lyz 文章原链接https://www.jianshu.com/p/61f209cd0e91 且该作者转载自原作者Elsewhere**(但此链接已无法访问) http://co ...
- MAC必装软件之HomeBrew、HomeBrew-Cask
MAC必装软件之HomeBrew 安装 brew命令 HomeBrew-cask 安装 HomeBrew Cask常用命令 安装 1.拉取脚本 curl -fsSL https://raw.githu ...
- Mac上执行命令“brew install *”时需谨慎,警惕homebrew自动更新python3.7导致第三方模块被格式化
问题描述: 准备通过pip3 install pyenchant安装PyEnchant模块,实现识别输入字符串是否为有效英文单词的功能.结果安装后执行如下测试脚本报错ImportError : The ...
- Mac OS X 程序员利器 – Homebrew安装与使用
Mac OS X 程序员利器 – Homebrew安装与使用 Homebrew安装与使用 什么是Homebrew? Homebrew is the easiest and most flexible ...
- 简洁优雅的Mac OS X软件安装体验 - homebrew-cask
转自:http://ksmx.me/homebrew-cask-cli-workflow-to-install-mac-applications/ 简洁优雅的Mac OS X软件安装体验 - home ...
- symfony api 错误响应_Postman for Mac(API管理开发软件)
Postman for Mac是一款可在Mac端运行的API管理开发软件,postman 下载 mac不仅可以调试简单的css.html.脚本等简单的网页基本信息,它还可以发送几乎所有类型的HTTP请 ...
- Epubor Ultimate for mac(mac电子书转换软件)
epubor ultimate中文版是一款简单实用的mac电子书转换软件,epubor ultimate mac版可以帮助您在任何地方阅读书籍,包括最好的eBook Converter + eBook ...
- Mac m1 python软件环境安装配置
Mac m1 python软件环境安装配置 一.安装miniconda 二.安装chrome浏览器 三.安装git 四.安装homebrew 五.安装vscode 选择python解释器 vscode ...
- 推荐一个Mac上的软件卸载工具
上一篇推文,强哥讲述了如何处理Mac上V2rayU闪退的问题,整个过程可以说是既煎熬又痛苦.前期的重启.卸载.重安等步骤就如盲人摸象一样毫无章法可言,完全体现不出任何水准. 为了秉持绝不在同一个坑跌倒 ...
最新文章
- C++知识点17——使用C++标准库(顺序容器vector常用操作)
- 嵌入式开发板上常用术语
- 记录一次redis事故
- oracle异机恢复 open resetlogs 报:ORA-00392
- 前端学习(1958)vue之电商管理系统电商系统之参数管理
- C语言小白适合入门的项目——扫雷
- Hyper-v和VMware 兼容问题
- 前端开发 常用选择符与权重0229
- Spring Boot : 自定义 Starter
- OpenShift 4 Hands-on Lab (3) - 应用部署和切换策略(蓝绿、金丝雀和A/B、回滚)
- Qt制作贪吃蛇小游戏
- 2021年安全生产模拟考试(建筑起重机司机-施工电梯升降机司机模拟考试题库)安考星
- 为什么传统的验证码不再安全
- 豆瓣评分8.5+,这10本好书,不读你就OUT了
- 汉与匈奴 —— 影响世界之战
- 斐波纳契数列 python123
- jpg格式图片怎么缩小?如何压缩jpg图片?
- 关于Visual Studio 2008调试的一些经验以及错误(0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突)
- 【C语言】(用函数实现)请给小学生随机出10道加减法的练习题,要求:10以内的加减法,并且能批改。
- 【不忘初心,砥砺前行】2021年中创算力新春年会暨周年庆典
热门文章
- 为什么springcloud值得我们学习?
- Android Studio OpenGL ES绘制三棱锥/四面体的多纹理贴图 每个面使用一张图片渲染
- java剪刀石头布小游戏_JAVA实现“剪刀石头布”小游戏
- 京东优惠券查询API接口接入方案,item_search_coupon - 京东优惠券查询接口
- IDEA新手使用手册
- 你知不知道,天空没有想象中蓝。
- Adobe Premiere Pro CS6的视频剪辑简单教程
- yershop商城系统开发(二)——新浪SAE配置
- pytorch rnn 实现手写字体识别
- I - Por Costel and the Pairs Gym - 100923I _思维啊——可惜我现在还没