iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 29
1
Software Development

Gosh!原來用 Go 寫一個 Unix Shell 這麼簡單系列 第 29

Day29-發佈到 Homebrew

Homebrew 是什麼

在把 Gosh 發佈到 Homebrew 之前先介紹一下 Homebrew 是什麼,根據官方的介紹他是 The missing package manager for macOS (or Linux),簡單來說就是一個套件管理器,官網點進去就有一個安裝腳本可以用

很多人會以為他只有支援 macOS,雖然一開始確實是這樣沒錯,但從今年二月 Homebrew 發布 2.0.0 之後也開始支援 Linux 了,而且因為它解決了很多套件相依性的問題、用起來也簡單,所以如果問我推薦什麼 package manager 的話我一律推薦 Homebrew XD

為什麼 Homebrew 叫做 Homebrew?

為什麼要叫做 Homebrew?這問題乍聽之下有點奇怪,但其實 Homebrew 的命名都是有規則可循的

brew 的中文是釀酒的意思,所以 Homebrew 就是自己在家裡釀酒,但你要釀酒總需要有配方(formula)吧,所以在 Homebrew Formulae 上就有各式各樣的配方,只要照著這些配方做,就可以釀出各種不同的酒

你可能好奇釀酒跟套件管理到底有什麼關係?

其實 Homebrew 上的 每一種酒都是一個套件,如果你想安裝某一個套件(釀某一種酒),那你就要到 Homebrew Formulae 上找到他的 安裝腳本(配方)

譬如說你想釀 htop 這種酒,那就直接下 brew install htop,接著 brew 就會幫你找到 htop 的配方 並且照著配方做,做完你就有 htop 了~

所以今天要發布一個新的 package 其實就是 發明一種新的酒寫好他的配方,讓大家可以跟著配方去釀造

發佈到 Homebrew

接著就要進入正題了:為了要讓 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

如果想安裝 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 的原因之一

小結

複習一下今天的重點:

  1. 先到 Github 上發佈 Gosh v1.0.0,這樣 Homebrew 才能下載到
  2. 把寫好的 Gosh 配方發佈到 Github 上自己的配方倉庫
  3. 要安裝的時候先跑 brew tap 告訴 brew 要去哪裡找配方
  4. 安裝是 brew install gosh、解除安裝是 brew uninstall gosh

希望大家看完今天的文章後都知道怎麼發佈軟體到 Homebrew,有問題的話下面留言,沒問題的話大家明天見囉


上一篇
Day28-那些來不及做的功能
下一篇
Day30-結語
系列文
Gosh!原來用 Go 寫一個 Unix Shell 這麼簡單30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言