Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫

saka發表於2018-01-16

【homebrew 系列文章】

  1. HomeBrew常規使用教程
  2. Homebrew進階使用教程(一)
  3. Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫
  4. Homebrew進階使用教程(三)-apue.h在mac下安裝並使用連線

我的github地址:github地址:https://github.com/rangaofei/homebrew-saka

軟體執行

這裡容我先裝個逼,推廣一下自己的倉庫,雖然只有兩個包: github地址

  1. 安裝saka倉庫
brew tap rangaofei/saka
複製程式碼

2.安裝軟體

brew install sweather
複製程式碼

3.執行軟體

sweather -v----顯示軟體版本

Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫

sweather -setloc liangxi----設定天氣地址為無錫樑溪區

由於此處設定的是liangxi,地址庫中搜尋到的匹配地址只有無錫的樑溪區,所以自動設定為無錫樑溪區。

Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫

假如查詢的時候有多個地址供選擇,則如下所示:

Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫

此處我選擇9:

Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫

選取完畢後輸入查詢命令,三天天氣

sweather
複製程式碼

Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫

歡迎各位大佬使用,同時假如有自己要釋出的庫可以直接留言,大佬如果允許的話我幫助各位編寫好ruby指令碼釋出到該倉庫,供所有人使用。

homebrew的倉庫

brew會提供一個官方的倉庫,homebrew-coregithub地址

homebrew安裝完畢後這個倉庫自動載入到usr/local/Homerew/Library/Taps/資料夾下,這是一個git管理的地址,意味著我們可以提交自己的pullrequest到該倉庫。

重點關注一下homebrew-core/Formula/,該資料夾下包含我們所有的倉庫中的軟體安裝指令碼,例如curl.rb這個ruby指令碼即是安裝curl時需要的指令碼。

加入第三方倉庫

此處我們以自己建立的倉庫為例講解:

  • 倉庫名稱

brew時以github為基礎構建的ruby指令碼,所有倉庫都集中再github上,所有此處演示的也是構建再github上的倉庫。

  1. 倉庫名稱必須以homebrew-anything格式來命名,homebrew- 字首是可選的,但是如果不加該字首,必須使用整個url來安裝,相當麻煩,所以務必加上此字首。anything可以設定為任意自己喜歡的名字。 這是我的倉庫的名稱:
    Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫
  2. 建立一個Formula資料夾,用來存放安裝指令碼,裡邊的檔名稱就是你在brew install 時候的名稱。
  • 命令

  1. brew tap
brew tap <user/repo>

將你自己的倉庫clone到本地Tap資料夾下,你可以通過brew [un]install來管理你的倉庫中的軟體的安裝與解除安裝。當你使用brew update時,也會更新自己倉庫中的包安裝檔案。

例如上面的我的倉庫homebrew-saka,我的使用者名稱是rangaofei,則我可以使用 brew tap rangaofei/saka,來增加我自己的倉庫:

Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫

如上圖所示,我的倉庫已經新增進來了。

brew tap <user/repo>

通過url將其他非github的倉庫新增進來,這個地址可以不是http協議,只要支援git協議即可。此處不演示。

brew untap user/repo

刪除已增加的倉庫,同時在該倉庫下的軟體也都能再使用。

brew tap-pin user/repo

將指定倉庫標記為包首選搜尋倉庫。

brew tap-unpin user/repo

取消指定倉庫的包首選搜尋。

名字重複的包

假如自己的倉庫中有和homebrew-core倉庫中名字相同的包,當然可以。 當使用brew_install命令時brew會有一個預設的搜尋順序:

  • pinned taps(標記的倉庫)
  • core formulae(核心倉庫)
  • other taps(其他倉庫)

也就是說假如我們給任何倉庫一個pinned標記,homebrew會自動先搜尋核心倉庫,再搜尋其他倉庫。假如標記了某個倉庫,則會先搜尋標記的倉庫,在搜尋核心倉庫,最後是其他倉庫。 假如我們標記了某個倉庫,例如saka,那當我的倉庫中有curl包,core中也有curl包時,首先安裝saka倉庫中的curl。

如果你想從指定的倉庫安裝某個包也可以通過加上user/repo來執行。比如我們想安裝vim,則有如下兩種方式:

brew install vim                     # 從homebrew/core安裝
brew install username/repo/vim       # 從指定倉庫安裝
複製程式碼

釋出自己的包

brew是以ruby指令碼來執行安裝,語法遵循ruby語法。

  1. 釋出原始碼包地址

現在我有一個c語言編寫的獲取天氣命令列客戶端,放在github託管,檔案地址為

https://raw.githubusercontent.com/rangaofei/SimpleWeather/master/sweather-1.1.0.tar.gz
複製程式碼

格式最好以壓縮檔案格式結尾,此處只需要打包必須的檔案,儘量小巧。重點關注一下最後幾個字元:sweather-1.0.7.tar.gz

sweather表示包的名稱,也就是我們安裝好後的資料夾的名稱

1.1.0表示版本號,此處最好與你釋出的程式版本號一致, 例如我在cmake中程式版本號設定

set(VERSION_MAJOR 1)
set(VERSION_MINOR 1)
set(VERSION_PATCH 0)
複製程式碼
  1. 建立formula 執行命令列
brew create https://raw.githubusercontent.com/rangaofei/SimpleWeather/master/sweather-1.0.7.tar.gz
複製程式碼

brew會自動建立一個sweather.rb 檔案,檔案內容大致如下(此處我已修改了一些內容,包括desc,homepage,cmake依賴以及安裝時改用cmake):

# Documentation: https://docs.brew.sh/Formula-Cookbook.html
#                http://www.rubydoc.info/github/Homebrew/brew/master/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!

class Sweather < Formula
  desc "一個非常簡單的獲取天氣客戶端\n    ----by saka"
  homepage "https://juejin.im/user/5855ebea8d6d810065a4befa/posts"
  url "https://raw.githubusercontent.com/rangaofei/SimpleWeather/master/sweather-1.0.7.tar.gz"
  sha256 "64808c700bd46d837c6b06d7965f4f99d3c91b4c2764c3d02f893b8dfb9e9aa2"

  depends_on "cmake" => :build
#  depends_on "curl"=>:run
  def install
    etc.install Dir["src/*"]
    mkdir "build" do
      system "cmake", "..", *std_cmake_args
      system "make"
      system "make", "install" # if this fails, try separate make/make install steps

    end
  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 sweather`. 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
複製程式碼

這個檔案會建立在核心倉庫,也就是在/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/位置,只要copy我們自己倉庫的位置即可,我的是/usr/local/Homebrew/Library/Taps/rangaofei/homebrew-saka/Formula/。更改完畢後,通過git提交至自己的github即可。

git add sweather.rb
git commit -m 'add new formula sweather'
git push origin
複製程式碼

提交完畢後我們執行 brew update來更新倉庫。 然後執行

brew search sweather # 搜尋包
brew info sweather # 顯示包的資訊
brew install sweather # 安裝包
複製程式碼

Homebrew進階使用教程(二)-用一個命令列天氣客戶端構建自己的倉庫

由於安裝時依賴了cmake,所以會自動先下載安裝cmake(我已安裝好),然後下載sweather安裝。 此時你就可以在命令列檢視天氣了:

sweather -v # 檢視當前版本
sweather -setloc liangxi #設定天氣地址為樑溪-無錫
sweather -now #檢視現在天氣
sweather #檢視三天的天氣
複製程式碼

相關文章