轉(zhuǎn)載來之原作者Elsewhere**
http://col.dog/2015/11/22/homebrew/
Mac 下的軟件安裝 —— 從 pkg,dmg 到 brew,cask
發(fā)表于 2015-11-22
| 分類于 Mac |
本文前驅(qū)鋪墊梳理了從 linux 源碼安裝軟件到 DPKG/RPM 軟件包管理機制,闡述了 *UNX 平臺的軟件安裝包管理機制的演變和現(xiàn)代化。后半部分介紹了 Mac 下的軟件安裝包格式 —— pkg & dmg,以及軟件包管理工具 —— brew 及 brew-cask,并梳理日常 Command Usage。
linux 軟件的安裝與管理
linux 是一套免費使用和自由傳播的基于 POSIX 和 UNIX 的多用戶、多任務、支持多線程和多 CPU 的開源的類 Unix 操作系統(tǒng)。由于 linux 操作系統(tǒng)開放源代碼,因而在其上安裝的大部分也都是開源軟件。開源軟件的開發(fā)者往往僅需在開源代碼托管平臺上發(fā)布一份源碼包,用戶即可自由下載源碼包到本地,基于源碼包編譯安裝軟件。這倒是非常符合 C 語言的設計哲學:一次編寫,到處編譯。
基于源碼安裝軟件
基于源碼安裝軟件一般由以下幾個步驟組成:
下載解壓源碼
閱讀 README、INSTALL 等說明文檔,這一步至關(guān)重要
分析安裝平臺環(huán)境(ifconfigure)
編譯安裝軟件(make,make install)
基于源代碼安裝軟件的好處是:用戶可以自由配置編譯選項,按需編譯實現(xiàn)功能定制,極大地滿足個性化需求。此外,用戶還可以自己選擇安裝路徑,方便管理。卸載軟件也很方便,只需刪除對應的安裝目錄即可。但是,配置、編譯命令需要了解操作系統(tǒng)本身,并且依賴開源項目所使用的編程語言對應的工具鏈。為了使用一個應用軟件,用戶需要熟悉 linux 系統(tǒng)的文件組織架構(gòu)和一堆 Shell 交互命令,還得解決編譯過程中可能涉及到的繁雜的依賴關(guān)系。一定的英文水平也是必需的,關(guān)鍵是要有折騰不息的精神和頑強的動手能力!English、OS、Linux、命令行交互方式、…,這些令人望而卻步的門檻足以將普通用戶拒之門外。安裝后,你可能都不知道安裝到哪里去了;甚至離開了 Windows 桌面,你都不知道從哪里啟動軟件。我依稀地記得剛接觸 linux 那會兒,為了能在 linux 上播放個視頻文件,廢了老大勁才安裝好一個 MPlayer。當時就森森地覺得 linux 真不是一般人能折騰得起,盡管現(xiàn)在已經(jīng)折騰慣了,但依然覺得費腦傷神。作為一個曾經(jīng)的計算機旁系學生(自動化,別名計算機控制)、現(xiàn)在的半職業(yè)化軟件攻城獅(涉獵甚廣,淺顯浮泛)和偽自由軟件追崇者(用過盜版,不懂破解,從無貢獻),因為工作關(guān)系經(jīng)常穿梭于 Windows 和 Mac OS X 之間(游離其間,無所專精),不折騰下 Linux/Unix 都覺得沒法混 github。盡管對于 vim 鍵盤型用戶(估計基本都是程序員吧),很喜歡那種游離于指尖的”自由感”,但對于普通鼠標型 Windows 用戶,若無力駕馭,自由便是負擔。
只有開發(fā)人員才需要學習一個操作系統(tǒng)本身,用戶只需要學習操作系統(tǒng)里面的每個“應用程序”怎么使用?!?Linus Torvalds
DPKG / RPM
伴隨著 linux 的發(fā)展普及,linux 開發(fā)商開始在固定的硬件平臺與操作系統(tǒng)上將要安裝或升級的軟件編譯好,然后將這個軟件的所有相關(guān)文件打包成一個特殊格式的文件。在這個軟件內(nèi),還包含了預先檢測系統(tǒng)與依賴軟件(或動態(tài)鏈接庫)的腳本,并提供記載該軟件提供的所有文件信息等,最終將這個軟件發(fā)布。客戶端取得軟件后,只要通過特定的命令來安裝,那么該軟件就會按照內(nèi)部的腳本來檢測相關(guān)的前驅(qū)軟件是否存在。若安裝的環(huán)境和條件符合要求,則開始安裝。軟件在安裝完成后,還會將信息寫入軟件管理機制中,以便完成未來的升級、刪除(反安裝)等操作。
目前,在 Linux 界最常見的軟件安裝方式有兩種:
DPKG
DPKG(Debian Packager)是由 Debian Linux 社區(qū)所開發(fā)出來的,著名的 package
概念由此被引入到 GNU/Linux 系統(tǒng)中。
通過 DPKG 機制,Debian 提供的軟件就能夠簡單安裝起來,同時還能提供安裝后的軟件信息。派生于 Debian 的其他 Linux Distributions 大多使用 dpkg 機制來管理軟件,包括 B2D、Ubuntu、Linux Mint 等。
Debian 為解決軟件包更新問題,引入了 APT(Advanced Package Tool)在線升級機制,并在 /etc/apt/sources.list
文件列出了可獲得軟件包的鏡像站點地址。APT 由幾個名字以 apt-
打頭的程序組成,apt-get、apt-cache 和 apt-cdrom 是處理軟件包的命令行工具。
apt 作為 dpkg 的前端工具,自動管理關(guān)聯(lián)文件和維護已有配置文件,擁有出色的解決軟件依賴問題的能力。
RPM
RPM(RedHat Package Manager)是由 Red Hat 公司所開發(fā)出來的軟件包管理程序。除了可以用來安裝(-i)外,還可以進行查詢(-q)、驗證(-V)、更新(-U)、刪除(-e)等操作,這些功能選項讓軟件的管理更加方便。包括 Fedora、CenterOS、SUSE/openSUSE 等知名的 linux 發(fā)行版本都使用 RPM 作為軟件安裝的管理機制。
RPM 包的封裝格式一般有兩種,分別是 RPM 和 SRPM。RPM 格式的文件 xxx.rpm
內(nèi)含已經(jīng)經(jīng)過編譯的二進制包和配置文件等數(shù)據(jù)。SRPM(Source RPM)對應的 RPM 文件類似于 xxx.src.rpm
格式,它包含了源碼文件和一些編譯指定的參數(shù)文件。因而,在使用的時候,需要先以 RPM 管理的方式編譯為 RPM 文件(rpmbuild,再將編譯完成的 RPM 文件安裝到 Linux 系統(tǒng)中。
RPM 無法自動解決軟件的依賴關(guān)系,使用與 APT 對應的 YUM (Yellowdog Updater Modified) 機制可以解決屬性依賴問題。YUM 作為基于 RPM 的 Shell 前端軟件包管理器,主要用于自動升級、安裝/移除 RPM 軟件包。它能夠自動查找并解決 RPM 包之間的依賴關(guān)系,而無需管理員逐個手工的去安裝每一個 RPM 包。
Distribution 代表
包管理機制
使用命令
在線升級機制(命令)
Red Hat / Fedora
RPM
rpm,rpmbuild
YUM(yum)
Debian / Ubuntu
DPKG
dpkg
APT(apt-get)
在 linux 眾多發(fā)行版中,ubuntu 占領(lǐng)桌面,RHEL/CentOS 占領(lǐng)服務器,比較小眾的 Gentoo 采用獨特的 Portage包管理系統(tǒng)。Gentoo 的軟件樹稱為 Portage,對應的包管理器是 emerge,包元文件稱為 ebuild。Gentoo 是個強調(diào)能自由選擇的分發(fā)版,它使用源碼來做包管理的方式。由于能自己編譯及調(diào)整源碼依賴等選項,而獲得至高的自定義性及優(yōu)化的軟件,在源碼包也有相當多新舊版本的選擇,因此吸引了許多狂熱愛好者以及專業(yè)人士。
RPM / SRPM
RPM 軟件包命名規(guī)范:name-version-release.arch.rpm
。其中,version
表示系統(tǒng)的發(fā)行版,如 fc18、el6 表明這個軟件包是在 Fedora 18、RHEL 6.x / CentOS 6.x 下使用的;arch
表示硬件平臺,常見的有 i386、x86_64 等。
**rp-pppoe-3.1-5.i386.rpm
** 是一個典型的 RPM 安裝包,它由幾個部分構(gòu)成:
rp-pppoe
:名稱
3.1
:版本信息
5
:發(fā)布次數(shù)
.i386
:適合的硬件平臺
.rpm
:擴展名
RPM 文件必須要在相同的 linux 環(huán)境才能安裝,而 SRPM 是源代碼格式。我們可以通過修改 SRAM 內(nèi)的參數(shù),按需編譯生成適合我們 linux 環(huán)境的 RPM 文件,而不必與原作者打包的 Linux 環(huán)境相同。通常一個軟件在發(fā)布的時候,都會同時釋放出該軟件的 RPM 與 SRPM。
文件格式
擴展名格式
直接安裝與否
內(nèi)含程序類型
可否修改參數(shù)并編譯
RPM
xxx.rpm
√
已編譯
×
SRPM
xxx.src.rpm
×
未編譯的源碼
√
RPM 建包的原理并不復雜,可以理解為按照標準的格式整理一些信息,包括:軟件基礎(chǔ)信息,以及安裝、卸載前后執(zhí)行的腳本,對源碼包解壓、打補丁、編譯,安裝路徑和文件等。我們可以基于標準規(guī)范,來使用 rpmbuild 制作自己的 RPM 包。
Mac 軟件包管理工具
linux 平臺下的 apt-get 和 yum 命令行工具分別適用于 deb、rpm 包管理方式的發(fā)行版本,主要用于自動從互聯(lián)網(wǎng)的軟件倉庫中搜索、安裝、升級和卸載軟件。在 Mac OS X 平臺下,除了直接從 AppleStore 下載認證上架的軟件進行安裝外,還可以在系統(tǒng)偏好設置的【安全性與隱私】中允許從任何來源下載的應用。
dmg & pkg
一些應用會提供 dmg、pkg 安裝包,例如 git-2.5.3-intel-universal-mavericks.dmg
、Subversion-1.9.2_10.10.x.pkg
。
dmg 是蘋果的壓縮鏡像文件(類似 Windows 下的 iso ),它是 Mac 應用軟件通用的打包格式(相當于 ipa),里面一般包含 應用程序.app
的圖標和一個應用程序文件夾(/Applications
)快捷方式,直接將 應用程序.app
拖曳至應用程序文件夾即可完成安裝。卸載也同樣綠色,直接在 Launchpad
中或 cd 到 /Applications
目錄下刪除應用(文件夾)即可。
pkg 屬于系統(tǒng)級軟件的安裝程序,相當于 iOS 越獄后裝的 deb,一般會修改系統(tǒng)配置,權(quán)限較高。pkg 安裝一般要求 sudo 授權(quán),卸載 pkg 安裝的應用 也比較麻煩。pkg 類似 Windows 下的安裝程序 Setup.exe 和 *.msi。Windows 下可以使用 Install Shield 來 制作安裝程序,可使用 Xcode 自帶的 PackageMaker 或打包命令行工具 pkgbuild+productbuild+pkgutil 或 Iceberg(an Integrated Packaging Environment (IPE) )來制作安裝包。
mpkg:pkg 是單個應用程序的安裝包,而 mpkg(multi pkg)是多個 pkg 。我們來看一下從 AppleStore 下載的 OS X EI Capitan 安裝器文件——安裝 OS X EI Capitan.app
的 /Contents/SharedSupport
目錄:
faner@MBP-FAN:/Applications/Install OS X El Capitan.app/Contents/SharedSupport|? tree .├── InstallESD.dmg└── OSInstall.mpkg0 directories, 2 files
下載完 安裝 OS X EI Capitan.app
之后,可以使用 **createinstallmedia
** 命令制作 U 盤安裝盤,或恢復到 U 盤制作啟動盤。
dmg with pkg:像 git-2.5.3-intel-universal-mavericks.dmg
這種 dmg 打包的是 git command CLI 的安裝 pkg,需要使用 DiskImageMounter 掛載 dmg,然后打開 pkg(使用 Installer),按照引導一步步 next 即可安裝完成。當然也可使用 命令行 完成掛載安裝操作。
除了使用 dmg、pkg 來安裝軟件外,Mac 下同樣有優(yōu)秀的軟件包管理工具,可以下載、安裝和管理大量 AppleStore 沒有提供、而又經(jīng)常會用到的開源軟件。我們有兩種選擇 —— MacPorts 和 Homebrew。
MacPorts
MacPorts (DarwinPorts) 是由 FreeBSD 的 port 移植而來的軟件包管理系統(tǒng),,用來簡化 Mac OS X和 Darwin 操作系統(tǒng)上軟件的安裝。在 Mac 中安裝 MacPorts 讓你在Mac 的 Shell 下更加游刃有余。MacPorts 有個原則,對于軟件包之間的依賴,都在 MacPorts 內(nèi)部(/opt/local
)解決,無論系統(tǒng)本身是否包含了需要的庫,都不會加以利用。這使得 MacPorts 龐大臃腫,導致系統(tǒng)出現(xiàn)大量軟件包的冗余,占用不小的磁盤空間,同時稍大型一點的軟件編譯時間都會難以忍受。
Homebrew
Homebrew(簡稱 brew)是 Mac OS X 不可或缺的軟件管理工具(The missing package manager for OS X),讓 Mac 擁有類似 apt-get 的功能,用以簡化軟件的安裝、升級和卸載過程。
Homebrew is the easiest and most flexible way to install the UNIX tools.
Homebrew 是一款使用 Ruby 進行開發(fā)的托管于 GitHub 上的自由及開放源代碼的軟件包管理系統(tǒng),通過用戶的貢獻擴大對軟件包的支持。
MacPorts vs Homebrew
MacPorts 和 Homebrew 這兩種包管理系統(tǒng)的工作方式都是下載源代碼,然后在本地編譯。但是這兩種包管理系統(tǒng)還是存在很大差異的,主要差異有以下三點:
MacPorts 的理念是盡量減少對系統(tǒng)現(xiàn)有庫的依賴,編譯時間較長;而 Homebrew 則是盡量依賴系統(tǒng)現(xiàn)有庫,編譯時間會顯著減少。
MacPorts 的 Package 是安裝到 /opt/local
,不會與系統(tǒng)現(xiàn)有的軟件發(fā)生沖突;而 Homebrew 的 Package 是安裝到 /usr/local
,可能與系統(tǒng)自帶的軟件發(fā)生沖突。
Macports 使用 rsync 進行同步(也可以使用svn),而 Homebrew 使用 git 進行同步。
總體來說,Homebrew 使用簡單,編譯時間短,比較適合新手使用。MacPorts 編譯時間長,命令還要帶上 sudo,易用性上沒有 Homebrew 好,但是比較干凈,適合有潔癖的人使用。
以上梳理了 Linux 和 Mac 下的包管理機制,下面重點介紹 Mac OS X 上的包管理 CLI 命令行工具 brew 及其增強工具 brew-cask。
brew (homebrew)
brew 是從軟件包倉庫下載源代碼碼到本地進行解壓,進而執(zhí)行 ./configure
&& make install
,將軟件編譯安裝到單獨的目錄(/usr/local/Cellar
)下,然后軟鏈(symlink)到 /usr/local
目錄下,同時會自動檢測下載相關(guān)依賴庫,并自動配置好各種環(huán)境變量。這個對程序員來說簡直是福音,使用簡單的指令就能快速安裝、升級和卸載本地的各種開發(fā)環(huán)境。
安裝 brew
brew 的安裝很簡單,使用一條 ruby 命令調(diào)用 curl 下載安裝即可。
1.Mac OS X 上默認已安裝 ruby:
faner@MBP-FAN:~|? ruby -vruby 2.0.0p645 (2015-04-13 revision 50299) [universal.x86_64-darwin15]
2.Mac OS X 上默認已內(nèi)置了 curl(Command Line URL Viewer):
faner@MBP-FAN:~|? curl --versioncurl 7.43.0 (x86_64-apple-darwin15.0) libcurl/7.43.0 SecureTransport zlib/1.2.5Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets
說明:
curl 是基于跨平臺網(wǎng)絡協(xié)議庫 libcurl 的利用 URL 語法在命令行方式下工作的開源文件傳輸工具。curl常用命令 可參考 curl 詳解、curl網(wǎng)站開發(fā)指南。
舊的安裝
很早之前,homebrew 的安裝 url 是 https://raw.github.com/Homebrew/homebrew/go/install
:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
首次執(zhí)行 brew install
安裝軟件時,將提示不能創(chuàng)建 /usr/local/Cellar
目錄,原因是沒有 /usr/local
的寫權(quán)限。
? ~ brew install nodeError: Could not create /usr/local/CellarCheck you have permission to write to /usr/local
解決方法:
執(zhí)行 chown
命令改變 /usr/local
的所有者為 whoami
,-R
表示遞歸(Recursive)。
? ~ whoamifaner? ~ sudo chown -R faner /usr/local
新的安裝
可以在 brew 的官網(wǎng)首頁的末尾看到最新的安裝代碼:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
最新的安裝過程中將會要求輸入密碼授權(quán) sudo chown ${whoami} /usr/local/*
:
~ $ brew-bash: brew: command not found~ $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"==> This script will install:/usr/local/bin/brew/usr/local/Library/.../usr/local/share/man/man1/brew.1==> The following directories will be made group writable:/usr/local/./usr/local/bin/usr/local/include/usr/local/lib/usr/local/lib/pkgconfig==> The following directories will have their owner set to thomasfan:/usr/local/./usr/local/bin/usr/local/include/usr/local/lib/usr/local/lib/pkgconfig==> The following directories will have their group set to admin:/usr/local/./usr/local/bin/usr/local/include/usr/local/lib/usr/local/lib/pkgconfigPress RETURN to continue or any other key to abort==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/. /usr/local/bin /usr/local/include /usr/local/lib /usr/local/lib/pkgconfigPassword:==> /usr/bin/sudo /usr/sbin/chown thomasfan /usr/local/. /usr/local/bin /usr/local/include /usr/local/lib /usr/local/lib/pkgconfig==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local/. /usr/local/bin /usr/local/include /usr/local/lib /usr/local/lib/pkgconfig==> /usr/bin/sudo /bin/mkdir /Library/Caches/Homebrew==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew==> /usr/bin/sudo /usr/sbin/chown thomasfan /Library/Caches/Homebrew==> Downloading and installing Homebrew...remote: Counting objects: 3847, done.remote: Compressing objects: 100% (3691/3691), done.remote: Total 3847 (delta 40), reused 520 (delta 21), pack-reused 0Receiving objects: 100% (3847/3847), 3.31 MiB | 105.00 KiB/s, done.Resolving deltas: 100% (40/40), done.From https://github.com/Homebrew/homebrew * [new branch] master -> origin/masterHEAD is now at e191c00 jsonnet: update 0.8.5 bottle.==> Installation successful!==> Next stepsRun brew help to get started~ $
brew help
brew -v / –version
安裝完 brew,執(zhí)行 brew -v
命令可以查看安裝的 brew 版本信息:
faner@MBP-FAN:~|? brew -vHomebrew 0.9.5 (git revision 1eec1; last commit 2015-11-21)faner@MBP-FAN:~|? brew --version0.9.5 (git revision 1eec1; last commit 2015-11-21)
brew 常用命令
執(zhí)行 brew
查看幫助概要(Example usage、Troubleshooting、Brewing):
-h / –h / –help / help
faner@MBP-FAN:~|? brewExample usage: brew [info | home | options ] [FORMULA...] brew install FORMULA... brew uninstall FORMULA... brew search [foo] brew list [FORMULA...] brew update brew upgrade [FORMULA...] brew pin/unpin [FORMULA...]Troubleshooting: brew doctor brew install -vd FORMULA brew [--env | config]Brewing: brew create [URL [--no-fetch]] brew edit [FORMULA...] https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Formula-Cookbook.mdFurther help: man brew brew home
執(zhí)行 man brew
可查看詳細的 brew 幫助文檔。
執(zhí)行 man home
可調(diào)用瀏覽器打開 brew 官方網(wǎng)站。
命令
說明
brew update
更新 brew
brew search FORMULA
查找軟件包,可使用正則表達式
brew info FORMULA
顯示軟件的信息
brew deps FORMULA
顯示包依賴
brew install FORMULA
安裝軟件包
brew uninstall FORMULA
卸載軟件包
brew list
列出已安裝的軟件包,可指定 FORMULA
brew outdated
列出可升級的軟件包
brew upgrade
更新已安裝的軟件包,可指定 FORMULA
brew doctor
診斷 homebrew 環(huán)境
brew prune
刪除 /usr/local 下的無效鏈接(remove broken symlinks)
brew info
**brew info
** 顯示軟件包信息,一般包括:
軟件概要信息
本地是否已安裝:Not installed / Poured from bottle
依賴包:==> Dependencies,Build、Required、Recommended、Optional
編譯、安裝選項: ==> Options
預警信息:==> Caveats
brew info 查看 plist 文件
brew install 示例
tree
linux 下的 tree 命令以樹形結(jié)構(gòu)顯示文件目錄結(jié)構(gòu),Mac 下默認并沒有該命令,只有普通的 **ls
** 命令。可以利用 brew 查找并安裝 tree 命令行工具:
faner@MBP-FAN:~|? brew search treegit-stree mvptree pstree tree treecc treeline homebrew/emacs/dict-tree homebrew/science/quicktree Caskroom/cask/treemaker homebrew/emacs/undo-tree homebrew/x11/prooftree Caskroom/cask/treesheets homebrew/emacs/ztree-emacs Caskroom/cask/figtree homebrew/science/fasttree Caskroom/cask/sourcetree faner@MBP-FAN:~|? brew info treetree: stable 1.7.0 (bottled)Display directories as trees (with optional color/HTML output)http://mama.indstate.edu/users/ice/tree/Not installedFrom: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/tree.rbfaner@MBP-FAN:~|? brew deps treefaner@MBP-FAN:~|? brew install tree==> Downloading https://homebrew.bintray.com/bottles/tree-1.7.0.el_capitan.bottle.1.tar.gz######################################################################## 100.0%==> Pouring tree-1.7.0.el_capitan.bottle.1.tar.gz?? /usr/local/Cellar/tree/1.7.0: 7 files, 128Kfaner@MBP-FAN:~|? tree --versiontree v1.7.0 (c) 1996 - 2014 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro
homebrew 下載已經(jīng)編譯好的二進制包 tree 到緩存目錄 /Library/Caches/Homebrew/tree-1.7.0.el_capitan.bottle.1.tar.gz
解壓 tree-1.7.0.el_capitan.bottle.1.tar.gz
到 /usr/local/Cellar/tree/
目錄,根據(jù)版本存放到文件夾 1.7.0
下。
將 /usr/local/Cellar/tree/1.7.0/bin/tree
軟鏈到 /usr/local/bin/tree
,后者是前者的替身,執(zhí)行 tree 命令時,真正調(diào)用的是其在 Cellar 中的真身。
axel
以下示例查找比 wget 下載速度高幾倍的支持斷點續(xù)傳的多線程下載 CLI 命令行工具 axel,并顯示軟件包信息和依賴關(guān)系,然后安裝該工具:
faner@MBP-FAN:~|? brew search axelaxelfaner@MBP-FAN:~|? brew info axelaxel: stable 2.4 (bottled)Light UNIX download acceleratorhttps://packages.debian.org/sid/axelNot installedFrom: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/axel.rbfaner@MBP-FAN:~|? brew deps axelfaner@MBP-FAN:~|? faner@MBP-FAN:~|? brew install axel==> Downloading https://homebrew.bintray.com/bottles/axel-2.4.el_capitan.bottle.1.tar.gz############################################### 66.5%curl: (56) SSLRead() return error -9806Error: Failed to download resource "axel"Download failed: https://homebrew.bintray.com/bottles/axel-2.4.el_capitan.bottle.1.tar.gzWarning: Bottle installation failed: building from source.==> Downloading https://mirrors.ocf.berkeley.edu/debian/pool/main/a/axel/axel_2.4.orig.tar.gz######################################################################## 100.0%==> ./configure --prefix=/usr/local/Cellar/axel/2.4 --debug=0 --i18n=0==> make==> make install?? /usr/local/Cellar/axel/2.4: 8 files, 104K, built in 13 secondsfaner@MBP-FAN:~|? axel -VAxel version 2.4 (Darwin)Copyright 2001-2002 Wilmer van der Gaast.
從 homebrew 官方倉庫 homebrew.bintray.com
下載 axel 失敗后,自動從鏡像源 mirrors.ocf.berkeley.edu
重新下載。下載的源碼緩存到目錄 /Library/Caches/Homebrew/axel-2.4.tar.gz
。
下載完成后,依次執(zhí)行 ./configure
、make
和 make install
將軟件編譯安裝到 /usr/local/Cellar/axel/
目錄下,根據(jù)版本存放到文件夾 2.4
下。
將 usr/local/Cellar/axel/2.4/bin/axel
軟鏈到 /usr/local/bin/axel
,后者是前者的替身,執(zhí)行 axel 命令時,真正調(diào)用的是其在 Cellar 中的真身。
subversion
search-info-deps-install
過程日志參考 brew install subversion.log。
brew cask
Homebrew 作為 Ruby 社區(qū)極富想象力的作品,使得 Mac 下安裝 Mysql 等常用包不再困難。那么,是否也可以通過 brew install mysql
這樣簡單的方式來安裝 Google Chrome 瀏覽器呢?為解決這一問題,phinze 的作品 homebrew-cask 應運而生。
about
Homebrew 可以管理 Mac 下的命令行工具(wget、node),brew cask 則是一套建立在 brew 上的增強命令行工具,支持管理 Mac 下的 GUI 程序,例如 qq、 google-chrome、evernote 等。cask 從鏡像源下載已經(jīng)編譯好了的應用軟件二進制包(.dmg/.pkg)到本地解壓到單獨的目錄(/opt/homebrew-cask/Caskroom
)下,然后軟鏈(symlink)到 /Applications
目錄下。cask 包含了很多在 AppStore 里沒有的常用軟件,省掉了手動下載、解壓、拖拽(安裝)等步驟,且卸載也相當容易與干凈,使用起來非常方便。
假設你已安裝好了 Homebrew,執(zhí)行以下命令查找 cask
包并顯示軟件包信息和依賴關(guān)系:
faner@MBP-FAN:~|? brew search caskcaskhomebrew/completions/brew-cask-completionfaner@MBP-FAN:~|? brew info caskcask: stable 0.7.3, HEADEmacs dependency managementhttps://cask.readthedocs.org/Not installedFrom: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/cask.rbfaner@MBP-FAN:~|? brew deps caskemacs
install
安裝 cask 極其簡單,打開終端輸入:
brew tap phinze/homebrew-caskbrew install brew-cask
brew tap phinze/homebrew-cask
由于 brew 和包含的包源都是通過 github 來管理,人為的維護管理。除了默認的倉庫,還允許別人的源添加進來。通過 brew tap
指定第三方包源:
$ brew tap
默認的源是 caskroom/cask
,以下顯式 tap 原作者的源(phinze/homebrew-cask
):
faner@MBP-FAN:~|? brew tap phinze/homebrew-cask==> Tapping phinze/caskCloning into '/usr/local/Library/Taps/phinze/homebrew-cask'...remote: Counting objects: 3278, done.remote: Compressing objects: 100% (3202/3202), done.remote: Total 3278 (delta 83), reused 731 (delta 59), pack-reused 0Receiving objects: 100% (3278/3278), 5.82 MiB | 428.00 KiB/s, done.Resolving deltas: 100% (83/83), done.Checking connectivity... done.Tapped 1 formula (3257 files, 24M)
brew install brew-cask
faner@MBP-FAN:~|? brew install brew-cask==> Installing brew-cask from phinze/homebrew-cask==> Cloning https://github.com/caskroom/homebrew-cask.gitCloning into '/Library/Caches/Homebrew/brew-cask--git'...remote: Counting objects: 3248, done.remote: Compressing objects: 100% (3172/3172), done.remote: Total 3248 (delta 82), reused 771 (delta 59), pack-reused 0Receiving objects: 100% (3248/3248), 5.82 MiB | 467.00 KiB/s, done.Resolving deltas: 100% (82/82), done.Checking connectivity... done.Note: checking out 'd39c95942f4226fb6c0e1a56c11008695ddeeade'.You are in 'detached HEAD' state. You can look around, make experimentalchanges and commit them, and you can discard any commits you make in thisstate without impacting any branches by performing another checkout.If you want to create a new branch to retain commits you create, you maydo so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name>==> Checking out tag v0.59.0?? /usr/local/Cellar/brew-cask/0.59.0: 2976 files, 12M, built in 32 seconds
本機已經(jīng)安裝了 brew-cask
的依賴軟件 **emacs
** :
faner@MBP-FAN:~|? whereis emacs/usr/bin/emacsfaner@MBP-FAN:~|? emacs --versionGNU Emacs 22.1.1Copyright (C) 2007 Free Software Foundation, Inc.GNU Emacs comes with ABSOLUTELY NO WARRANTY.You may redistribute copies of Emacsunder the terms of the GNU General Public License.For more information about these matters, see the file named COPYING.
如果沒有安裝 **emacs
*,則 brew 在安裝 cask 之前會自動幫我們下載安裝 emacs
:
==> Installing dependencies for cask: emacs==> Installing cask dependency: emacs==> Downloading https://homebrew.bintray.com/bottles/emacs-24.5.yosemite.bottle.1.tar.gz######################################################################## 100.0%==> Pouring emacs-24.5.yosemite.bottle.1.tar.gz==> CaveatsTo have launchd start emacs at login: ln -sfv /usr/local/opt/emacs/.plist ~/Library/LaunchAgentsThen to load emacs now: launchctl load ~/Library/LaunchAgents/homebrew.mxcl.emacs.plist==> Summary?? /usr/local/Cellar/emacs/24.5: 3915 files, 105M
brew cask
執(zhí)行 brew cask
或 brew-cask
可查看幫助概要(首次需輸入 sudo 密碼):
faner@MBP-FAN:~|? brew cask==> We need to make Caskroom for the first time at /opt/homebrew-cask/Caskroom==> We'll set permissions properly so we won't need sudo in the futurePassword:brew-cask provides a friendly homebrew-style CLI workflow for theadministration of Mac applications distributed as binaries.!! !! no command verb: !! Commands: audit verifies installability of Casks cat dump raw source of the given Cask to the standard output cleanup cleans up cached downloads and tracker symlinks create creates the given Cask and opens it in an editor doctor checks for configuration issues edit edits the given Cask fetch downloads Cask resources to local cache home opens the homepage of the given Cask info displays information about the given Cask install installs the given Cask list with no args, lists installed Casks; given installed Casks, lists staged files search searches all known Casks uninstall uninstalls the given Cask update a synonym for 'brew update' zap zaps all files associated with the given CaskSee also "man brew-cask"
執(zhí)行 brew-cask --version
命令可以查看安裝的 brew-cask 版本信息:
faner@MBP-FAN:~|? brew-cask --version0.59.0
command usage
brew cask 大部分命令和 brew 保持一致,新增了以下幾條命令:
命令
說明
brew cask audit
查詢指定 Cask 的可安裝性
brew cask cat
查看指定 Cask 安裝源信息
brew cask zap
打包指定 Cask
brew cask cleanup
清理緩存及軟鏈
安裝了 cask 之后,就可以像 brew 一樣來搜索安裝軟件,以下示例 google-chrome :
搜索安裝包
faner@MBP-FAN:~|? brew-cask search google-chrome==> Exact matchgoogle-chrome
查詢安裝性
faner@MBP-FAN:~|? brew-cask audit google-chromeaudit for google-chrome: passed
查詢包信息
1.執(zhí)行 brew-cask cat
查詢指定 Cask 的源信息:
faner@MBP-FAN:~|? brew-cask cat google-chromecask :v1 => 'google-chrome' do version :latest sha256 :no_check url 'https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg' name 'Google Chrome' homepage 'https://www.google.com/chrome/' license :gratis tags :vendor => 'Google' app 'Google Chrome.app' zap :delete => [ '~/Library/Application Support/Google/Chrome', '~/Library/Caches/Google/Chrome', '~/Library/Caches/com.google.Chrome', '~/Library/Caches/com.google.Chrome.helper.EH', '~/Library/Caches/com.google.Keystone.Agent', '~/Library/Caches/com.google.SoftwareUpdate', '~/Library/Google/GoogleSoftwareUpdate', '~/Library/Logs/GoogleSoftwareUpdateAgent.log', ], :rmdir => [ '~/Library/Caches/Google', '~/Library/Google', ] caveats <<-EOS.undent The Mac App Store version of 1Password won't work with a Homebrew-Cask-linked Google Chrome. To bypass this limitation, you need to either: + Move Google Chrome to your /Applications directory (the app itself, not a symlink). + Install 1Password from outside the Mac App Store (licenses should transfer automatically, but you should contact AgileBits about it). EOSend
2.執(zhí)行 brew-cask info
查詢指定 Cask 的包信息:
faner@MBP-FAN:~|? brew-cask info google-chromegoogle-chrome: latestGoogle Chromehttps://www.google.com/chrome/Not installedhttps://github.com/phinze/homebrew-cask/blob/master/Casks/google-chrome.rb==> Contents Google Chrome.app (app)==> CaveatsThe Mac App Store version of 1Password won't work with a Homebrew-Cask-linked Google Chrome. To bypass this limitation, you need to either: + Move Google Chrome to your /Applications directory (the app itself, not a symlink). + Install 1Password from outside the Mac App Store (licenses should transfer automatically, but you should contact AgileBits about it).
安裝/卸載 應用
brew-cask
安裝和卸載的命令同 brew
,都是使用 install / uninstall
。
1.執(zhí)行 brew cask install google-chrome
命令安裝 google-chrome:
brew cask install google-chromefaner@MBP-FAN:~|? brew cask install google-chrome ==> CaveatsThe Mac App Store version of 1Password won't work with a Homebrew-Cask-linked Google Chrome. To bypass this limitation, you need to either: + Move Google Chrome to your /Applications directory (the app itself, not a symlink). + Install 1Password from outside the Mac App Store (licenses should transfer automatically, but you should contact AgileBits about it).==> Downloading https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg######################################################################## 100.0%==> Symlinking App 'Google Chrome.app' to '/Users/faner/Applications/Google Chrome.app'?? google-chrome staged at '/opt/homebrew-cask/Caskroom/google-chrome/latest' (216 files, 183M)
2.執(zhí)行 brew cask uninstall google-chrome
命令卸載 google-chrome:
faner@MBP-FAN:~|? brew-cask uninstall google-chrome==> Removing App symlink: '/Users/faner/Applications/Google Chrome.app'
uninstall
命令將刪除 /opt/homebrew-cask/Caskroom/google-chrome
及其在 ~/Applications/
下的軟鏈(symlink)。我們也可手動刪除 homebrew 下載目錄中緩存的 google-chrome 安裝包 /Library/Caches/Homebrew/google-chrome-latest.dmg
及其軟鏈 /Library/Caches/Homebrew/Casks/google-chrome-latest.dmg
。
升級更新軟件
brew-cask 并沒有提供 brew 的 upgrade
命令,升級更新軟件只能通過 DIY:
進入應用軟件的【關(guān)于】,手動檢查是否可更新升級,使用軟件自己的更新流程。
卸載重裝 (brew cask uninstall
&& brew cask install
) ,實現(xiàn)間接升級。
brew-cask install 示例
文件預覽插件
有些插件可以讓 Mac 上的文件預覽更有效,比如語法高亮、markdown 渲染、json 預覽等等。通過 brew cask install
命令可以安裝這些插件:
$ brew cask install qlcolorcode$ brew cask install qlstephen$ brew cask install qlmarkdown$ brew cask install quicklook-json$ brew cask install qlprettypatch$ brew cask install quicklook-csv$ brew cask install betterzipql$ brew cask install webp-quicklook$ brew cask install suspicious-package
Visual Studio Code
~ $ brew cask search visual-studio-code==> Exact matchvisual-studio-code~ $ brew-cask cat visual-studio-codecask :v1 => 'visual-studio-code' do version '0.10.1' sha256 'b71089670b3c2a259bf26ad6a6ad7b0abc9bb805353e8087f5c86361a5f8defc' # vo.msecnd.net is the official download host per the vendor homepage url "https://az764295.vo.msecnd.net/public/#{version}-release/VSCode-darwin.zip" name 'Visual Studio Code' homepage 'https://code.visualstudio.com/' license :mit tags :vendor => 'Microsoft' app 'Visual Studio Code.app' zap :delete => [ '~/Library/Application Support/Code', '~/Library/Caches/Code', ]end~ $ brew-cask info visual-studio-codevisual-studio-code: 0.10.1Visual Studio Codehttps://code.visualstudio.com/Not installedhttps://github.com/caskroom/homebrew-cask/blob/master/Casks/visual-studio-code.rb==> Contents Visual Studio Code.app (app)~ $ brew-cask audit visual-studio-codeaudit for visual-studio-code: passed~ $ brew cask install visual-studio-code==> Downloading https://az764295.vo.msecnd.net/public/0.10.1-release/VSCode-darwin.zip######################################################################## 100.0%==> Symlinking App 'Visual Studio Code.app' to '/Users/thomasfan/Applications/Visual Studio Code.app'?? visual-studio-code staged at '/opt/homebrew-cask/Caskroom/visual-studio-code/0.10.1' (1675 files, 177M)
Wireshark
search-info-cat-audit-install
過程日志參考 brew-cask install wireshark.log。
參考
Mac 利器:brew、brew cask、zshMac安裝軟件新方法:Homebrew-cask簡潔優(yōu)雅的Mac OS X軟件安裝體驗 - homebrew-cask使用brew cask來安裝Mac應用Mac下通過 brew 安裝不同版本的 PHP
Launchrocket 幫助管理 Homebrew 安裝的服務homebrew cask 安裝 launchrocket