mac port 改造

mac用着确实挺爽,但是对于用惯了linux的我来说,少了gnome-terminal,没了pacman、axel、wget之类常用的软件就就觉得很难受了,尤其是没有包管理软件,实在太痛苦了,于是装上macports,一个类似于linux下包管理的工具,有了它咱又能省力高效地安装软件咯~可是这个ports缺点也不少,不能看下载进度,总不能开个终端到dist文件夹ls -lh吧,还有不知道它用的是啥下载软件,速度实在慢的可以,受够了它的龟速,开始改源码吧~

开源就是这点儿好,软件哪儿用着不爽直接写个补丁就好了。先到/opt/local/share/macports,grep Attempting\ to\ fetch -r ./* 发现在Tcl/port1.0文件夹下有个portfetch.tcl的脚本,vim打开之~~

[catch {eval curl fetch --effective-url effectiveURL $fetch_options {$file_url} {"${distpath}/${distfile}.TMP"}} result]

发现在Attempting to fetch下面一行的下载代码,是用crul去下载的。不知道高手们怎么看,我个人的感觉是这个东西很笨重而复杂,很容易出错,可能是我功力不到家,不过不管怎么说,靠这个东西来下载也太不靠谱了~怎么改成wget或者axel呢?Google告诉我们Tcl执行外部程序要么用system,要么用 exec。OK,试试system先。

[catch {system "/opt/local/bin/axel -n 20 -o ${distpath}/${distfile}.TMP $file_url"} result]

sudo port install xxx然后到dist文件夹(/opt/local/var/macports/distfiles/xxx)看看,发现已经可以用了。还欠缺点儿东西,输出怎们弄呢?怎么在当前终端显示下载速度和进度呢?重定向就可以啦~用>将输出重定向到当前终端。用tty得到当前终端的设备id,然后将源码改为

set currentTTy [exec "tty"]

[catch {system "/opt/local/bin/axel -n 20 -o ${distpath}/${distfile}.TMP $file_url > $currentTTy"} result]

一切OK

下一步想修改下下载的源,虽然用了axel,开20线程才30k+的速度,也太不给力了。。。

猜你喜欢

转载自buaacss.iteye.com/blog/792124