您的位置:首页 > 其它

Mac包管理工具对比-Fink

2017-03-31 22:42 316 查看
Fink历史较老,据说以前只支持二进制包安装,但在源码编译之风盛行之下,Fink也开始与时俱进,根据我的观察现在的Fink以源码为主,binary包为辅,没用过的人真心体会不到花费将近一个小时的时间通过源码编译安装Fink的感受,看着满屏飞动的文本内心是绝望的,故而我并没有使用官方提供的pkg安装包再次安装,我要把这种感觉深藏到心里,永远的膜拜Fink~

Fink Install

同MacPorts一样,Fink同样需要Xcode的支持,首先安装以下组件:

1. Xcode (app store)

2. xcode-select –install (terminal)

3. xcodebuild -license (terminal)

然后从官网上下载最新版本的tar.gz包执行以下命令

$ tar xf fink-0.41.1.tar.gz
$ cd fink-0.41.1
$ ./bootstrap


bootstrap文件是一个perl脚本,执行之后会弹出若干个选项,如无特殊要求无需修改直接回车。

.............
Writing updated configuration to '/sw/etc/fink.conf'...
plist is dpkg-bootstrap
Bootstrapping a base system via /sw/bootstrap.
Scanning package description files..........
Information about 146 packages read in 1 seconds.

BOOTSTRAP PHASE ONE: download tarballs.

curl --connect-timeout 30 -f -L -A 'fink/0.41.1' -O http://distfiles.master.finkmirrors.net/distfiles/dpkg_1.10.21.tar.gz % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 1643k  100 1643k    0     0  18349      0  0:01:31  0:01:31 --:--:-- 22589
curl --connect-timeout 30 -f -L -A 'fink/0.41.1' -O http://distfiles.master.finkmirrors.net/distfiles/bzip2-1.0.6.tar.gz % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
......................


上面log截取于脚本执行的中间,从这里开始脚本会下
4000
载若干个源码包,然后编译构建Fink的base system到/sw目录下,随随便便一个小时就过去了。

bootstrap脚本执行完毕之后为了方便在terminal中执行Fink的命令将以下命令添加到
~/.profile


. /sw/bin/init.sh


至此Fink就安装成功了。

Fink Uninstall

移除Fink也相当简单,直接删除相关文件和文件夹即可。

sudo rm -rf /sw /Applications/Fink/*


并且从
~/.profile
中移除之间加载的shell文件。

Fink Mechanism

Fink是基于Debian系统移植的包管理工具,因此除了fink命令之外还有熟悉的dpkg/apt工具,本质上来讲fink建立在dpkg/apt之上,即fink下载源码包编译成deb包,然后使用dpkg/apt安装。

参见apt源配置文件
/sw/etc/apt/sources.list


# Local modifications should either go above this line, or at the end.
#
# Default APT sources configuration for Fink, written by the fink program

# Local package trees - packages built from source locally
# NOTE: this is automatically kept in sync with the Trees: line in
# /sw/etc/fink.conf
# NOTE: run 'fink scanpackages' to update the corresponding Packages.gz files
deb file:/sw/fink local main
deb file:/sw/fink stable main

# Official binary distribution: download location for packages
# from the latest release
deb http://bindist.finkmirrors.net/10.12 stable main

# Put local modifications to this file below this line, or at the top.


其中靠前的两条语句定义了
/sw/fink
目录为apt本地源,目录结构如下

localhost:apt ftericsson$ cd /sw/fink
localhost:fink ftericsson$ ls
10.12       10.9-libcxx    debs     dists


其中
dists
文件夹里存放通过源码编译之后的deb文件,而
debs
文件夹则是各个deb包对应的softlink,因此在Fink架构下使用apt工具安装软件经常会出现没有相应的dependency导致安装失败的情况,原因就在于apt需要使用的deb包还要通过Fink下载源码编译。

通过以下Fink命令安装openssl的log也可以看出Fink的机制。

............
Do you want to continue? [Y/n] y
curl --connect-timeout 30 -f -L -A 'fink/0.41.1' -O http://distfiles.master.finkmirrors.net/distfiles/openssl-1.0.2h.tar.gz % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 5150k  100 5150k    0     0  13126      0  0:06:41  0:06:41 --:--:-- 16586
Setting runtime build-lock...
dpkg-deb -b /sw/src/fink.build/root-fink-buildlock-openssl100-dev-1.0.2h-1 /sw/src/fink.build
dpkg-deb: building package `fink-buildlock-openssl100-dev-1.0.2h-1' in `/sw/src/fink.build/fink-buildlock-openssl100-dev-1.0.2h-1_2017.03.31-23.22.37_darwin-x86_64.deb'.
Installing build-lock package...
/sw/bin/dpkg-lockwait -i /sw/src/fink.build/fink-buildlock-openssl100-dev-1.0.2h-1_2017.03.31-23.22.37_darwin-x86_64.deb
Selecting previously deselected package fink-buildlock-openssl100-dev-1.0.2h-1.
(Reading database ... 4583 files and directories currently installed.)
.............


Fink下载源码包到/sw/src/路径下,然后在/sw/fink/dists目录下解压编译并使用dpkg打包成deb包,随后在使用apt命令安装。

tar.gz ---> Fink ---> deb ---> dpkg/apt


Fink的镜像源配置文件为
/sw/etc/fink.conf
,可直接编辑更改source地址,也可通过
fink configure
在交互模式下修改配置。

Fink Usage

fink slefupdate(update itself)

fink list; fink info <pkg>

fink install <pkg>; fink remove <pkg>; fink update-all(update all pkg)

dpkg -l(list installed); dpkg -L <pkg><list files of pkg>


总结:Fink的资源比较少,而且编译时间较长,整个软件的设计理念较传统,比如使用http和rsync方式同步资源,没有GitHub源,在MacPorts和HomeBrew存在的今天确实有点鸡肋,我喜爱传统的东西,所以对于Fink我怀着崇敬的心情将它的主页放入收藏夹,但在实际生产环境中真心用不到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: