MacPorts
只要你最近一直在用Linux的主流发行版本(Ubuntu、Fedora、Debian、Gentoo等等),或者有过BSD使用经验,一定对*nix平台上的软件包管理机制不陌生。不管是Apt-get、rpm、pkg等等,对于普通用户的体验来说,都是一键安装(一条命令)软件,不用考虑不同软件之间复杂的依赖关系,也不用考虑去哪儿下载软件比较靠谱,更不用担心软件的自动更新问题。依托开源社区的强大支持,海量软件随用随装。
Mac作为BSD系统商业化的最成功代表,继承了BSD系统稳定、可靠的传统和特性,但没有经过调教的Mac OS X不是为程序员而定制的。这和乔帮主一贯的产品设计理念是分不开的:苹果的产品能够让一个小学二年级教育文化水平的人,无需说明书即可开始使用。程序员嘛,受教育文化水平肯定是要高于小学二年级教育文化水平的。所以,程序员需要控制台,用键盘的时间要多于用鼠标。非程序员,不需要控制台,最好连键盘都不要用到。
MacPorts可以看做是BSD系统上的ports机制在苹果系统上的移植版本,关于MacPorts的安装,如果你是用的Snow Leopard或者其他较新的苹果系统版本的话,官方网站上提供了直接可用的二进制dmg版本,下载双击安装即可。
下面重点介绍安装好MacPorts后的几个关键环节:
MacPorts改良
MacPorts的默认安装版本(1.9.2)有两个对于我来说非常不爽的“缺陷”:
不支持多线程下载
下载过程没有任何进度提示
经过一段时间的hack之后,我找到了上述两个问题的改良方法。
搜索curl
新增:
set currentTTy [exec "tty"] |
把其中的代码换成以下
if {![catch {system "/opt/local/bin/axel -n 10 -o ${distpath}/${distfile}.TMP $file_url > $currentTTy"} result] && ![catch {file rename -force "${distpath}/${distfile}.TMP" "${distpath}/${distfile}"} result]} { |
如果报错了就用下面这个吧
[catch {system “/opt/local/bin/axel -n 20 -o ${distpath}/${distfile}.TMP $file_url”} result]
上述代码使用axel,20线程并发下载。根据自己的网速情况,可以增加或减少并发线程数。只要下载速度还可以,就别设置太多并发下载线程了,为服务器节约点带宽给其他人用,呵呵。
看官看到这里请注意了,axel不是系统默认中就有的,正好可以先通过安装axel来体验一把给力的MacPorts。
MacPorts速成
以上述axel安装为例来体验MacPorts。
首先是更新MacPorts的本地软件列表
$ sudo port selfupdate
然后是在MacPorts中查找是否有axel这个软件
$ port search axel
axel @2.4 (net, www)
A light Unix download accelerator
安装
$ sudo port install axel
MacPorts安装软件的过程可以简单分为:下载代码、编译代码、安装二进制程序、配置程序,实际的安装软件过程还包含代码依赖性问题的解决过程。
关于MacPorts的常用命令,我整理了一个列表,如下:
更新port: port selfupdate
升级port里面的所有软件包:port -d sync
查询port里面是否有该软件:port search xxx
用port安装某软件:port install xxx
查看port里面的软件是否有升级:port outdated
查看某个软件是否有升级:port outdated xxx
升级某个软件: port upgrade xxx
升级某个软件(不升级依赖软件): port -n upgrade xxx
升级所有能升级的软件: port upgrade installed
禁用某个软件(但不删除): port uninstall xxx
彻底清除某个软件: port clean –all xxx
查看某个软件的详细信息:port info xxx
查看某款软件的备注信息:port notes xxx (例如启动dbus的方法:port notes dbus)
查看软件在系统上安装了哪些文件:port contents xxx
查看已安装的软件列表:port installed [xxx]
查看软件的可选安装组件或编译参数:port variants xxx
以安装curl为例:
$ port variants curl
curl has the variants:
ares: Add support for resolving names asynchronously
gnutls: Allow secure connections using GNU TLS
* conflicts with ssl
gss: Support the Generic Security Service API
openldap: Support performing Lightweight Directory Access Protocol queries with
OpenLDAP
sftp_scp: Add SFTP/SCP support via libssh2
spnego: Enable SPNEGO authentication support
[+]ssl: Allow secure connections using OpenSSL
universal: Build for multiple architectures
有[+]的选项表示非默认组件或编译参数,如果需要安装或启用则需要在安装时显式的指定,如:
$ sudo port install curl +ssl