热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mac包管理工具对比HomeBrew

作为Linux的忠实爱好者,真的是无法容忍一款没有命令行包管理工具的类unix操作系统,比如说Mac,但又割舍不下对苹果本子的喜爱

作为Linux的忠实爱好者,真的是无法容忍一款没有命令行包管理工具的类unix操作系统,比如说Mac,但又割舍不下对苹果本子的喜爱,于是我决定使用第三方软件填补Mac在这一方面的缺失,搜索一番之后发现原来早就有此类开发项目存在,所以说生活在当下真是幸福,Mac平台下的第三方包管理工具主要有三款:Fink,Macports和HomeBrew,我自然不会放弃试用上面任何一款包管理工具,之前也提及过任何一款包管理工具提供的功能以及实现功能的机制都是类似的:


Mechanism: get resource from Remote source repository & provide dependency management of packages
Function: 1. search packages from remote side; 2. download/install/upgrade packages from remote side; 3. list packages installed and files of special package; 4. uninstall packages


上面是对包管理工具的essential function简要概括,下面分别安装三款工具作对比。


HomeBrew


HomeBrew使用ruby脚本作为安装程序,可见https://brew.sh

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

上述命令的意思是调用ruby解释器执行网址指定的install脚本,和直接用浏览器将网址定义的文件下载到本地然后ruby 相同的效果。

在terminal中敲入上述命令,在选项出敲击回车即可,部分回显信息摘录如下。

==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
==> The following existing directories will be made group writable:
/usr/local/bin
==> The following existing directories will have their owner set to ftericsson:
/usr/local/bin
==> The following existing directories will have their group set to admin:
/usr/local/bin
==> The following new directories will be created:
/usr/local/Cellar
/usr/local/Homebrew
/usr/local/Frameworks
/usr/local/etc
/usr/local/include
/usr/local/lib
/usr/local/opt
/usr/local/sbin
/usr/local/share
/usr/local/share/zsh
/usr/local/share/zsh/site-functions
/usr/local/varPress RETURN to continue or any other key to abort

可见HomeBrew默认安装路径是/usr/local/,brew命令在/usr/local/bin/brew,该命令为shell脚本。在HomeBrew的世界里formula的概念很重要,每个软件包都有对应的formula文件,文件为ruby脚本,大体描述了软件包的用处,下载地址,需要直接从homebrew bottle下载包(bottle do)还是从脚本定义的URL下载包,然后就是安装软件所需要的操作,包括compile,建立softlink和文件移动等。

localhost:Formula ftericsson$ cat /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/zzz.rb
class Zzz end

例如说上面这个包就不使用bottle repo,而是直接从URL定义的地址下载源码包,然后在本地安装。

localhost:Formula ftericsson$ cat libpano.rb
class Libpano :sierrasha256 "a4920c760a4aff60251d8876499ae14eeb52dd4f17adc5a19d14d2f79959590d" => :el_capitansha256 "9188bc29e6e0b271cea0e3b017c0f222825d49bf67d1f65f2a2ecbde6bf870ea" => :yosemitesha256 "cfba56608e1be4c285ad75dd67299405384b690b8cad0d397859a4e29f7f2e9c" => :mavericksenddepends_on "libpng"depends_on "jpeg"depends_on "libtiff"def installsystem "./configure", "--disable-dependency-tracking","--prefix=#{prefix}","--mandir=#{man}"system "make", "install"end
end

而对于这个包就使用bottle repo地址下载然后安装。

brew command usage:
brew help; brew help
brew config
brew search(list all package in remote side); brew search
brew install ; brew uninstall ; brew upgrade
brew info
brew list
brew update

使用brew config命令可以看到以下回显信息

localhost:bin ftericsson$ brew config
HOMEBREW_VERSION: 1.1.11
ORIGIN: https://github.com/Homebrew/brew
HEAD: 394f9fa0aaa5854aa52bc589708a079665dcf462
Last commit: 3 weeks ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 99463de1bf4c31e360915768148b1ada4ae3ae9c
Core tap last commit: 28 minutes ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_REPOSITORY: /usr/local/Homebrew
HOMEBREW_CELLAR: /usr/local/Cellar
HOMEBREW_BOTTLE_DOMAIN: https://homebrew.bintray.com
CPU: quad-core 64-bit haswell
Homebrew Ruby: 2.0.0-p648
Clang: 8.0 build 800
Git: 2.10.1 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Perl: /usr/bin/perl
Python: /usr/bin/python
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
Java: 1.8.0_121
macOS: 10.12.3-x86_64
Xcode: 8.2.1
CLT: N/A
X11: N/A

通过上面的配置信息可以看出HomeBrew的软件架构:

1.使用HOMEBREW_PREFIX变量为安装程序定义根目录,然后在该root目录下建立bin, lib, etc等Unix类系统常用文件夹以便于为安装程序建立softlink调用,默认是/usr/local

2.使用HOMEBREW_REPOSITORY变量定义HomeBrew程序根路径,HomeBrew程序托管在GitHub上,因此程序也以git.repo的形式存储在本地定义的根目录下,这样既方便程序的更新也可防止程序被修改后没法恢复的风险,默认情况下HomeBrew程序包含两个repo,分别是brew.githomebrew-core.git,brew.git repo的路径为$HOMEBREW_REPOSITORY,默认就是/usr/local/Homebrew

localhost:Homebrew ftericsson$ pwd
/usr/local/Homebrew
localhost:Homebrew ftericsson$ git remote -v
origin https://github.com/Homebrew/brew (fetch)
origin https://github.com/Homebrew/brew (push)

homebred-core.git repo的路径为$HOMEBREW_REPOSITORY/Library/Taps/homebrew/homebrew-core,默认是/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core

localhost:homebrew-core ftericsson$ pwd
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
localhost:homebrew-core ftericsson$ git remote -v
origin https://github.com/Homebrew/homebrew-core (fetch)
origin https://github.com/Homebrew/homebrew-core (push)

3.使用HOMEBREW_CELLAR变量定义程序下载后在本地的存放路径,也即程序真实的安装路径,默认是/usr/local/Cellar,一般会通过在/usr/local/bin文件夹下建立softlink的方式实现终端调用执行。

4.使用HOMEBREW_BOTTLE_DOMAIN变量指定Homebrew Bottles源,默认是官方的源 https://homebrew.bintray.com

因此我们可以在不改变本地HomeBrew文件架构的情况下更换git和软件源以实现快速更新。


更换和重置git源参考 https://lug.ustc.edu.cn/wiki/mirrors/help/brew.git



cd $HOMEBREW_REPOSITORY
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
#git remote set-url origin https://github.com/Homebrew/brew.git
cd $HOMEBREW_REPOSITORY/Library/Taps/homebrew/homebrew-core
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
#git remote set-url origin https://github.com/Homebrew/homebrew-core.git

更换和重置软件源参考 https://lug.ustc.edu.cn/wiki/mirrors/help/homebrew-bottles


echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile

HomeBrew卸载


官方方案ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

传统方案参考 https://superuser.com/questions/203707/how-to-uninstall-homebrew-mac-os-x-package-manager

cd `brew --prefix`
git checkout master
git ls-files -z | pbcopy
rm -rf Cellar
bin/brew prune
pbpaste | xargs -0 rm
rm -r Library/Homebrew Library/Aliases Library/Formula Library/Contributions
test -d Library/LinkedKegs && rm -r Library/LinkedKegs
rmdir -p bin Library share/man/man1 2> /dev/null
rm -rf .git
rm -rf ~/Library/Caches/Homebrew
rm -rf ~/Library/Logs/Homebrew
rm -rf /Library/Caches/Homebrew

Command Line Tools


The bottle needs the Apple Command Line Tools to be installed.
You can install them, if desired, with xcode-select --install.


HomeBrew架构深层次探究


Brew

通过观察研究将HomeBrew的基本架构归纳如上图所示:

HomeBrew不仅紧密依托ruby脚本来构建软件包的formula文件,更是依托GitHub构建出灵活扩展的repository架构,每个repository都可通过git clone命令部署到本地,且路径格式保持一致均是///,且git repo均以homebrew-开头,在repo下构建Formulas文件夹,该文件夹下是以软件包命名的ruby脚本。

Repo的索引格式是/,对应GitHub链接是https://github.com//homebrew-,该repo下包的索引格式是//,repo本地路径则是/usr/local/Homebrew/Library/Taps/homebrew-/

Repo可分为官方和第三方两种类型,official repo的git user是homebrew,目前第三方的repo就是所谓的HomeBrew-cask,该repo的git user是caskroom。

official repo:https://github.com/Homebrew
Homebrew cask repo: https://github.com/caskroom

其中官方的homebrew-core repo是随着homebrew安装默认部署(tap)到本地的,想要部署其他的官方和非官方的repo需要使用brew tap命令。 http://docs.brew.sh/brew-tap.html

brew tap adds more repositories to the list of formulae that brew tracks, updates, and installs from. By default, tap assumes that the repositories come from GitHub, but the command isn’t limited to any one location.


brew tap
brew tap /

Example:

localhost:homebrew-cask ftericsson$ brew tap caskroom/homebrew-fonts
==> Tapping caskroom/fonts
Cloning into '/usr/local/Homebrew/Library/Taps/caskroom/homebrew-fonts'...
remote: Counting objects: 1121, done.
remote: Compressing objects: 100% (648/648), done.
remote: Total 1121 (delta 756), reused 538 (delta 470), pack-reused 0
Receiving objects: 100% (1121/1121), 206.66 KiB | 41.00 KiB/s, done.
Resolving deltas: 100% (756/756), done.
Tapped 0 formulae (1,137 files, 925.4KB)localhost:homebrew-cask ftericsson$ brew tap
caskroom/cask
caskroom/fonts
homebrew/core

从这里也可以看出每个tap的repository都是一个软件索引源,homebrew-core是官方的索引源,homebrew-cask是第三方索引源。


HomeBrew-Cask https://caskroom.github.io


Homebrew Cask extends Homebrew and brings its elegance, simplicity, and speed to macOS applications and large binaries alike.

homebrew-cask基于homebrew的拓展命令构建,It’s implemented as a homebrew external command called cask,参考http://docs.brew.sh/External-Commands.html

External commands come in two flavors: Ruby commands and shell scripts.
In both cases, the command file should be executable (chmod +x) and live somewhere in PATH.

因此如果基于homebrew(official repo)使用brew,正常使用brew命令即可,软件会安装到/usr/local/Cellar路径下。如果基于caskroom(third-party repo)使用brew,在brew命令之后添加一个cask参数即可,程序安装到/usr/local/Caskroom路径下。

localhost:~ ftericsson$ brew cask search google-chrome
==> Exact match
google-chrome
localhost:~ ftericsson$ brew cask install google-chrome
==> Satisfying dependencies
complete
==> Downloading https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg
######################################################################## 100.0%
==> No checksum defined for Cask google-chrome, skipping verification
==> Moving App 'Google Chrome.app' to '/Applications/Google Chrome.app'google-chrome was successfully installed!
localhost:~ ftericsson$ brew cask list
google-chrome
localhost:~ ftericsson$ brew cask info google-chrome
google-chrome: latest
https://www.google.com/chrome/
/usr/local/Caskroom/google-chrome/latest (57KB)
From: https://github.com/caskroom/homebrew-cask/blob/master/Casks/google-chrome.rb
==> Name
Google Chrome
==> Artifacts
Google Chrome.app (app)
localhost:~ ftericsson$ brew cask uninstall google-chrome
==> Removing App: '/Applications/Google Chrome.app'

推荐阅读
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
author-avatar
心雨00937
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有