目录php
portlint数据库
1 系统自带的工具vim
2 推荐的第三方工具ruby
1 设定 Ports 树的位置bash
3 设定工做目录网络
简单的讲,一个 port 就是一个被移植到了 FreeBSD 上的软件。全部这些软件的集合,加上 FreeBSD 处理这些软件的各类工具,就是 Ports 系统。
每个被移植到 FreeBSD 上的软件(就是 Port),都能经过 Ports 系统中的工具方便有序的安装,升级,卸载。并且符合 FreeBSD 系统对应用软件施加的各类规范。免去了你处处寻找软件,本身编译,安装,升级的麻烦。借助这些 ports 维护者的努力,你也不用担忧这些软件与系统不兼容致使没法安装升级等等。
有三种方法来安装 Ports 系统:
这是最简单的方法,可是也有缺点。由于 Ports 系统老是随时更新的。所以你从安装光盘上安装的 Ports 系统确定不是最新的了。
这是推荐的方法。使用portsnap不须要事先安装 ports tree,而且可以在任什么时候候恢复到已知的最新状态(即便手工对ports tree进行了修改)。
使用 portsnap 分红两个步骤:下载压缩的 portsnap 快照,和更新现有系统。下载或更新 portsnap 快照的方法是 portsnap fetch;首次安装,或但愿将 ports tree 恢复到快照的样子,应使用 portsnap extract;以后更新系统中的 ports tree,则能够经过 portsnap update 来完成。对于服务器而言,推荐在 crontab 中增长在天天3点执行 portsnap cron,以减小使用时所须要的下载时间。
首次下载 portsnap 快照时,须要下载一个大约50MB的快照基础文件。在中国大陆,因为网络情况的缘由,这可能须要较长时间。能够考虑用 portsnap fetch -s portsnap.cn.freebsd.org 作首次下载;以后的下载,仍是推荐使用正常的 portsnap fetch。
可使用下面步骤完成上述状况
1.首先设置一个比较快的portsnap服务器,若是系统默认的地址你的访问速度也很快,能够不修改
#vi /etc/portsnap.conf
设置SERVERNAME=portsnap.cn.freebsd.org ,你能够设置相对你速度快点的服务器的地址
2.执行下面命令
#portsnap fetch extract 这里直接下载ports而且解压
这样就完成了下载ports系统以及解压到/usr下面了
3.设置最快的ports镜像
用ports安装软件的时候,若是没有设置相对于你来讲最快的ports服务器地址,那就会默认的 <A class=urlextern title=ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/ href="ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/" rel=nofollow>ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/,这个地址对于不少地方来讲是很慢的。
修改 /etc/make.conf 加入如下代码
MASTER_SITE_OVERRIDE=\ ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}\ ftp://ftp.tw.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}
若是你有最快的地址,能够加到上面去,下载就会块了
这种方法已经再也不推荐使用。
无论事先你有没有安装 Ports 系统,你均可以使用 csup/cvsup (推荐使用 csup,这是基本系统中本身带的)来安装/同步最新的 Ports 系统。把 /usr/share/examples/cvsup/ports-supfile 拷贝到一个地方(好比 /home/user/tmp/ports-supfile),而后做适当的修改(好比修改要链接的服务器)。最后使用以下命令来安装/同步:
csup -L 2 /home/user/tmp/ports-supfile
假设你的 ports 树安装在默认位置 /usr/ports。
文件:
usrportsCHANGES usrportsCOPYRIGHT usrportsGIDs usrportsINDEX-xxx usrportsKNOBS usrportsLEGAL usrportsMOVED usrportsMakefile usrportsREADMEusrportsUIDs usrportsUPDATING
目录:
usrportsMk usrportsTemplates usrportsTools vardbports vardbpkg
除开以上文件和目录,其余全部的目录都是 ports。一个 port 的目录结构:
/usr/ports/分类/名称
好比 firefox 被分类在 www。所以 firefox 在 ports 树中的位置就是:
/usr/ports/www/firefox
好比,你想知道 ports 中是否有 pidgin 这个软件,那么能够这样:
usrports search =pidgin
一样也可使用
usrports search =pidgin
用上面两种方法查询时,显示的信息比较详细,包括维护者、依赖包、主页等内容。若是只想显示所在的路径和软件名称,则能够用
usrports quicksearch =php
这样可使显示的结果更清晰。
/usr/ports/README 中还有更多的例子能够参考。
很是简单。好比你要安装 firefox,那么做为超级用户 root:
#cd /usr/ports/www/firefox#make install clean
要卸载 firefox 的话:
#cd /usr/ports/www/firefox#make deinstall clean
要卸载全部安装的ports:
#cd /var/db/pkg#pkg_delete *#reboot
要升级 firefox:
#cd /usr/ports/www/firefox#make deinstall reinstall clean
有时候,你会发现安装某个 port 的时候会有奇怪的事情发生。好比 editors/vim,安装的时候居然会自动安装 glib1 和 gtk1,而明明本身的系统上已经有了 glib2 和 gtk2。
这是由于有些 port 有不少不是默认的编译选项。这个时候你须要设定一些环境变量让 port 知道该怎么作。对于 editors/vim,你须要设定 WITH_GTK2 来让 vim 依赖 gtk2 而不是 gtk1。
你能够在 csh 下:
setenv WITH_GTK2
或者在 bash 下:
=
也能够把这个选项写到 /etc/make.conf 里面:
=
或者你也能够指定在更新/安装某个 port 的时候使用特定的环境变量。添加以下代码(注:csh 的语法,不是 sh/bash)到 /etc/make.conf 里面:
.if =.endif
这样下次升级 editors/vim 的时候就会自动依赖到 gtk2 而不是 gtk1 了。
相似的例子还包括 WITH_GECKO 环境变量。请阅读 ports/Mk/bsd.gecko.mk 来得到详细资料。
当你把 Ports 树放在非默认位置(/usr/ports)的时候,就须要修改一些环境变量让 Ports 中的工具知道你的修改。这个变量就是 PORTSDIR。好比,你把 Ports 树放在了 /opt/ports,那么 在 sh/bash 中,执行以下命令:
=optports
在 csh 中,你须要执行以下命令:
setenv PORTSDIR /opt/ports
妥贴的办法是把这个环境变量放到超级用户 root 的 dot.cshrc 文件(/root/.cshrc)里面。又或者你想让普通用户也能用到这个环境变量,能够考虑放到 /etc/profile 或者 /etc/csh.cshrc 里面。
注意!若是你使用 portsnap 命令来同步 Ports 树,而你的 Ports 树不在默认位置,请在 /etc/portsnap.conf 中也设定你的 Ports 树的位置。
注意!若是你使用 csup/cvsup 同步 Ports 树,而你的 Ports 树不在默认位置,请在你的 ports-supfile 中也设定你的 Ports 树的位置。
所谓 dist 文件,就是 port 的源码。通常状况下,这些源码都是用 tar 打包而后用 bzip2 压缩的。默认的位置是在 $PORTSDIR/distfiles。可是,你也能够把这些 dist 文件放到另外的地方。须要设定的环境变量就是 DISTDIR。你能够根据上面的例子来设定这个环境变量。
若是没有设定工做目录,ports 系统默认在 port 的目录进行编译。好比你的 firefox 在 /usr/ports/www/firefox,那么默认将在 /usr/ports/www/firefox/work 下编译 firefox。这样有一个缺点,若是你的 /usr 目录不是很大的话,在编译某些大软件的时候,好比 gnome,kde 桌面系统时,你的 /usr 空间可能会不足。
解决的办法之一就是设定环境变量 WRKDIRPREFIX,好比
export WRKDIRPREFIX=/opt/obj/portbld
这个时候 ports 系统就会到 /opt/obj/portbld/usr/ports/www/firefox/work 下编译 firefox。
portsnap 是同步 ports 用的,前文已经做了介绍。
详细用法参照<A class=urlextern title=http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports-using.html href="http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports-using.html" rel=nofollow>这里(搜索“Portsnap 方式”)
为了方便,我在 csh 的配置文件里写入了以下 alias :
alias update-ports 'portsnap fetch update'
你们不妨参考一下。
pkg_add
pkg_create
pkg_delete
pkg_info
pkg_updating
pkg_version
注:
1.具体的用法请参考<A class=urlextern title=http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports.html href="http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports.html" rel=nofollow>手册中的4.四、4.5节。
2.严格来讲,pkg_add,pkg_updating并非用于 ports 的工具,它们只能用于 package 。这里只是为了让你们全面了解,哪些是官方的东西。
portupgrade
portupgrade是一个强大全面的工具,可是依赖于ruby。
我的没有用过,因此很少做评论,你们能够试一下。
portmaster
portmaster是一套仅使用系统软件,而不依赖其余ports的工具。
由于它没有依赖,很“纯”,功能也够用,因此我的比较推崇这个。
我在csh的配置文件里写了关于portmaster的以下alias:
alias update-apps 'portmaster -a --force-config' alias show-dep 'portmaster --show-work ./ | sort'
前者用来更新全部ports,并强制make config。
后者用来显示该软件的依赖,按已装和未装排序,须要事先进入那个软件的目录才能执行。
由于 portmaster 不会读取 /etc/make.conf 里的 BATCH=yes 设置,若是你讨厌烦人的 make config,能够:
portmaster -aG #更新全部ports,并防止 make config
portmaster的配置文件位于/usr/local/etc/portmaster.rc,须要手工建立。
能够参考同目录下的portmaster.rc.sample。
我使用的设置是:
ALWAYS_SCRUB_DISTFILES=dopt #更新完一个ports后自动删除旧版本的源码压缩包 PM_LOG=/var/log/portmaster.log #日志
pkg_rmleaves
这个工具能够用来删除用不着的软件,其做用至关于Gentoo的emerge –depclean,或者Debian的orphaner(deborphan这个包)
它首先列出全部不被其余软件所依赖的“叶子节点”,或者说“孤立的软件包”(这意味着删除它们不会影响依赖关系)。
而后你能够手动指定哪些软件是你不须要的,
选中执行[OK]后,它会进一步筛选“叶子节点”。
如此递归以后,它能够保证该软件及其(不被其余软件依赖的)依赖被完全清除。
pkg_cleanup
这个工具的做用和pkg_rmleaves彻底同样,其工做原理也一致,不用担忧二者冲突或者哪一个剔除起来更完全。
惟一的区别在于,这个软件能充分利用你的显示屏,另外能在上方显示出每一个软件的描述,
好比上图中,光标停在了amarok这一行,它的上面就显示出amarok的介绍:“Media Player for KDE4”。
pkg_cutleaves
这个工具也是用来清理孤立软件包的,它没有图形界面,
可是它支持配置文件,能够预先设定你须要保留的软件包,之后就直接cut,没必要每次都作选择。
pkg-rmleaf
这个是基于 pkgng 的卸载工具,
若是你已经切换到下一代 pkg 系统,那么 pkg_cleanup 将没法工做,
此时能够考虑 pkg-rmleaf,和 pkg_cleanup 有着相似界面,并且速度更快。
pkg_search
可能有的同窗要问,怎样才能快速找到某个ports的位置呢,locate?find?
这个时候,我要向你推荐pkg_search。
pkg_search <name>可让你快速找到该软件包的版本和描述,而加上参数-r,就能够知道它的位置。
pkgsearch
这个工具的做用和上述相同,可是它须要创建一个数据库,并且每次更新ports以后也要更新数据库。
看起来它的工做方式接近于Gentoo的eix。
portconf
它是用来设置全局的编译标记的,相似于Gentoo中设置的USE标记。(详细内容待撰,哪位对它比较熟悉的帮个忙吧)
当你写了一个新的 port 以后,可使用 portlint 来检查本身的 port 是否符合 FreeBSD ports 的规范。
<A class=urlextern title=http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/faq/applications.html href="http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/faq/applications.html" rel=nofollow>中文 FAQ
<A class=urlextern title=http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports.html href="http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports.html" rel=nofollow>中文手册
<A class=urlextern title=http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/porters-handbook/ href="http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/porters-handbook/" rel=nofollow>中文 Porter 手册
<A class=urlextern title=http://www.freshports.org href="http://www.freshports.org/" rel=nofollow>FreshPorts 查看全部 ports 更新的站点