在把 Gosh 發佈到 Homebrew 之前先介紹一下 Homebrew 是什麼,根據官方的介紹他是 The missing package manager for macOS (or Linux),簡單來說就是一個套件管理器,官網點進去就有一個安裝腳本可以用
很多人會以為他只有支援 macOS,雖然一開始確實是這樣沒錯,但從今年二月 Homebrew 發布 2.0.0 之後也開始支援 Linux 了,而且因為它解決了很多套件相依性的問題、用起來也簡單,所以如果問我推薦什麼 package manager 的話我一律推薦 Homebrew XD
為什麼要叫做 Homebrew?這問題乍聽之下有點奇怪,但其實 Homebrew 的命名都是有規則可循的
brew 的中文是釀酒的意思,所以 Homebrew 就是自己在家裡釀酒,但你要釀酒總需要有配方(formula)吧,所以在 Homebrew Formulae 上就有各式各樣的配方,只要照著這些配方做,就可以釀出各種不同的酒
你可能好奇釀酒跟套件管理到底有什麼關係?
其實 Homebrew 上的 每一種酒都是一個套件,如果你想安裝某一個套件(釀某一種酒),那你就要到 Homebrew Formulae 上找到他的 安裝腳本(配方)
譬如說你想釀 htop 這種酒,那就直接下 brew install htop
,接著 brew
就會幫你找到 htop 的配方 並且照著配方做,做完你就有 htop 了~
所以今天要發布一個新的 package 其實就是 發明一種新的酒 跟 寫好他的配方,讓大家可以跟著配方去釀造
接著就要進入正題了:為了要讓 Homebrew 可以下載到 Gosh,我必須先在 Github 上發佈第一個版本 Gosh v1.0.0
,這樣 Homebrew 才能透過網址下載到 Gosh 的原始碼
發佈後要自己寫一個 配方(Formula/gosh.rb
),並且放到自己的配方倉庫 Larry850806/homebrew-packages 裡面
P.S: 這種名為
homebrew-xxx
的專案都是拿來放自己發佈的各種配方
# Formula/gosh.rb
class Gosh < Formula
homepage "https://github.com/Larry850806/Gosh"
# 原始碼的位置,版本是 v1.0.0
url "https://github.com/Larry850806/Gosh/archive/v1.0.0.tar.gz"
# 有了原始碼之後需要用 Go 編譯
# 所以 depends on go
depends_on "go" => :build
# 安裝過程:
def install
# 先把程式碼編譯成執行檔 main
system "go", "build", "-o", "main"
# 接著再由 brew 給他一個別名 gosh
bin.install "./main" => "gosh"
end
end
這樣就成功發佈到 Homebrew 上了 ???,很簡單吧~
如果想安裝 Gosh 的話要先把 Homebrew 裝好,接著下 brew tap Larry850806/packages
告訴 brew 說「Larry 這邊也有配方哦~」,這樣以後 brew 就會自動到我的 Larry850806/homebrew-packages 倉庫找配方
完成後就可以開始 照著配方釀酒 了,直接 brew install gosh
就會開始跑跑跑,跑完就裝好了而且 brew 會幫你把檔案放在 /usr/local/bin/gosh
,因為這個路徑是在 PATH
裡面所以等等可以直接下指令 gosh
仔細看一下反白的地方,可以看到確實是從我的 Github Release 下載的
接著只要輸入 gosh
就可以開始用了,我們特製的 timeout 指令也跑得很好呢
或是你實在太愛 Gosh 了,那也可以跑這段腳本把它設為預設的 Shell(我個人是建議不要啦XD)
sudo sh -c "echo $(which gosh) >> /etc/shells"
chsh -s $(which gosh)
因為我怕大家試用之後會覺得 Gosh 太糞了,連放在硬碟佔空間都不想,所以跟你們說一下其實可以跑 brew uninstall gosh
把 Gosh 刪掉
解除安裝的過程也是如此簡單快速不拖拉,不會像 Windows 的軟體永遠刪不乾淨,這也是我很喜歡 Homebrew 的原因之一
複習一下今天的重點:
Gosh v1.0.0
,這樣 Homebrew 才能下載到brew tap
告訴 brew 要去哪裡找配方brew install gosh
、解除安裝是 brew uninstall gosh
希望大家看完今天的文章後都知道怎麼發佈軟體到 Homebrew,有問題的話下面留言,沒問題的話大家明天見囉