皮皮网

【wrk源码分析】【__LINE__宏源码】【寄售模式源码下载】freebsd 目录源码

2024-12-25 15:00:33 来源:杭州装修网源码

1.freebsd下jail命令说明
2.ctm是目码什么意思
3.FreeBSD下修改安装源的方法
4.freebsd9.1源码安装apache.mysql.php环境
5.UNIX、BSD(FreeBSD)操作系统简介
6.FreeBSD常用命令--ports使用方法讲解

freebsd 目录源码

freebsd下jail命令说明

       Jail 命令在FreeBSD 4.0中首次出现。录源用于“监禁”进程以及其衍生的目码子进程。而且jail和FreeBSD本身的录源secure_level合并使用可以显著限制(jail中的)root的能力。

       假设某一个应用程序在系统内中运行,目码一段时间之后该应用程序被发现包含有致命的录源wrk源码分析安全漏洞,如果在通常的目码系统中,这个应用程序可能已经在这个上面构成了漏洞,录源甚至cracker们已经成功地攻破这一应用并且成为root,目码控制了系统;但假如该应用程序放在jail内运行,录源即使cracker们已经攻破系统,目码也无法访问到jail之外系统的录源其他部分。因为尽管应用程序可以在jail之中自由活动,目码但是录源无法获得更多权限以及访问在jail之外的任何资源。通过这一特性,目码在系统管理上面可以做到防范未知漏洞,避免这些潜在的漏洞对整个系统的安全构成威胁。

       jail通常有两类应用方向:

       一、对应用程序的活动能力进行限制。

       比如ftp服务器,DNS服务器,这样一些东西,比如wu-ftpd,bind这样一些隔三岔五就会爆出漏洞的“著名”软件放到jail里面会让人更加放心。

       二、受控制的主机。

       某些时候,需要对外提供有shell的管理性访问,比如作为某公司A,其合作单位B有某项目需要在A的机器上获得shell乃至root权限,这就需要提供受控制的主机,用户可以在jail里面控制几乎所有他需要的资源(除了jail不允许他访问的部分)。

       第一类应用并不是非常复杂,实际上这类应用实现方法相对简单,只要在Linux下面玩过chroot就没有什么大问题;第二类应用则有很多有趣的特性,而jail最吸引人的部分也是这些很有趣的特性。

       下面从最简单的部分开始:

       第一类:限制应用程序活动能力

       首先按照通常习惯的方式安装好你想要jail的应用程序,下面我们将会使用pure-ftpd(我不是很熟悉它,只不过顺手拿过来而已,据说还算好用)作为例子。

       这个ftpd的安装位置,默认为:/usr/local/sbin;/usr/local/bin;在/etc下面还有一些相关的文件,整个结构感觉不是特别干净,不过它运行需要的东西并不很多,包括 /usr/local/sbin/pure-ftpd , /etc/xxx /etc/xxxx 这样一些文件。

       接下来先用ldd看看/usr/local/sbin/pure-ftpd需要的__LINE__宏源码那些运行库:

       tester# cd /usr/local/sbin

       tester# ldd pure-ftpd

       pure-ftpd:

       libcrypt.so.2 = /usr/lib/libcrypt.so.2 (0xb)

       libpam.so.1 = /usr/lib/libpam.so.1 (0x)

       libc.so.4 = /usr/lib/libc.so.4 (0xd)

       这样我们的工作任务清单上面就多出来这样一些东西了: /usr/lib/......

       使用ldd我们还可以获得其他一些需要放入jail的程序的运行库位置,信息搜集完成之后,我们开始建立jail目录树(这里我们假定jail环境构造在/jail内,当然你也可以选择你喜欢的位置):

       tester# mkdir -p /jail/usr/{ lib,libexec,local/sbin,local/bin,local/etc,etc,var/run,var/log}

       然后将上面列出的,libcrypt.so.2 等这些文件都复制到对应位置。当然还有我们FreeBSD下非常重要的一个文件ld-elf.so.1,尽管ldd没有给出提示,也还需要复制过去,否则应用程序也跑不起来。这样我们就获得了一个很干净(最小化)的应用程序运行环境jail命令的格式是:

       jail path hostname ip-number command

       下面开始在jail里面运行它:

       tester# jail /jail jailed.host.name $JAILED_IP_ADDR /usr/local/sbin/pure-ftpd [options]

       这里,/jail是你的jail环境的位置,也就是被jail之后,应用程序“以为”自己所在的“/”的位置;jailed.host.name是你打算提供给这个jail环境的主机名,某些情况下,应用程序需要知道这个变量;$JAILED_IP_ADDR是你打算提供ftp服务(如果是其他应用软件,那就是其他服务咯,比如web服务)的那个IP地址,至于/usr/local/sbin/pure-ftpd [options] 则是你打算运行的那个应用程序在jail里面的所在位置以及运行所需的参数。

       然后用ps 查看一下进程状态:

       tester# ps -axf |grep pureftpd

        IsJ 0:. pure-ftpd (SERVER) (pure-ftpd)

       可以看到所有这些pure-ftpd的进程都有一个J,标志这这一程序正在jail下面运行。

       这时候可能会有一些管理用的程序无法正常工作,因为这些管理用程序无法找到他们需要访问的那些文件,只要找到这些应用程序需要调用的文件(比如日志文件)的位置,然后制造一个soft link就可以了,通常这些管理程序都可以继续正常运行。

       到此为止,一个针对应用程序的jail构造完成。

       第二类,构造受控制的主机

       在这种情况下面,我们首先需要构造一个当前版本操作系统的完整镜像(下面这个脚本是从FreeBSD 4.6r的man page里面来的,实际上4.5以及之前的man page在构造jail目录树脚本上面都有一定的问题,4.6才纠正过来):

       tester# cat /root/mkjail.sh

       jailhome=/data/jail

       cd /usr/src

       mkdir -p $jailhome

       make world DESTDIR=$jailhome

       cd etc

       make distribution DESTDIR=$jailhome -DNO_MAKEDEV_RUN

       cd $jailhome/dev

       sh MAKEDEV jail

       cd $jailhome

       ln -sf dev/null kernel

       ^D

       tester# sh /root/mkjail.sh

       最后在/data/jail下面获得一个完整的根据当前源码树编译得来的jail目录树。

       接下来:

       /

*

       tester# mkdir $jailhome/stand

       tester# cp /stand/sysinstall $jailhome/stand

       tester# jail $jailhome jailed.system.box ..0. /bin/csh

       (这时候就获得了一个jail下面的shell)

       jailed# /stand/sysinstall

       */

       通过sysinstall这个程序可以对jail系统的常用变量进行设置,比如时区,DNS,Mail。还有jail系统在“启动”的时候需要执行的程序。

       如果你足够熟悉这个系统,可以考虑自己手工一个个的做过来。

       复制/etc/localtime 到 $jailhome/etc,使jail环境下的应用程序可以得到正确的时间;

       复制/etc/resolv.conf 到 $jailhome/etc/resolv.conf 使jail下面可以正确解释域名;

       在jail里面运行newaliases 避免sendmail的不断抱怨;

       如果打算运行inetd,需要修改inetd的启动参数,加上 -a $LISTEN_ADDR 选项(因为jail无法自己获得当前系统的ip地址,所以必须提供一个ip地址给它)在rc.conf里面看起来应该是这样:

       inetd_flags="-wW -a ..0."

       将系统本身的syslogd 运行加上 -ss 选项,避免这个syslog启动****端口;修改/etc/rc.conf 加上 syslogd_flags="-ss" (对$jailhome/etc/rc.conf也如法炮制)

       在jail内创建一个空的寄售模式源码下载/etc/fstab,在rc.conf里面去掉网卡地址的绑定,这样在jail系统在启动的时候不会抱怨。

       为了实际运行这个jail系统,还需要为jail提供一个可以连接的IP地址,这个地址可以与实际环境同一个子网,也可以处于另外一个子网中。

       tester# ifconfig fxp0 ..0. netmask 0xffffffff alias

       (这里为网卡fxp0绑定了一个别名,准备提供服务。)

       所有这些东西都执行完了以后,可以有几个方法把jail系统启动起来,一个是在jail外面运行

       tester# jail $jailhome jailed.system.box $jail_IP_ADDR /bin/sh $jailhome/etc/rc

       一个是单纯把ssh/telnetd这样一些提供远程访问的服务在jail内启动起来:

       tester# jail $jailhome jailed.system.box $jail_IP_ADDR /bin/sh $jailhome/bin/inetd -wW -a $jail_IP_ADDR

       然后从外面登录系统,运行、配置jail系统环境,或者手工启动需要的应用服务。

       如果打算运行一个用于生产环境的jail系统的话,推荐使用第一种方法,并且把启动jail的命令放到(实际环境的)/etc/rc.local脚本里面去,这样jail系统可以有比较完备,与实际机器相类似的环境。

       这样一个jail系统就算构造完成并且可以正常运作,加上在实际环境里面定期的严格的备份,安全检查与审计,就可以得到一个很不错的安全系统。一般的scriptkids已经无法对你的系统构成实际威胁,即使是某些与黑帽子走得很近的人在漏洞公开之前得到实际的攻击脚本,并且进入你的系统,他也只能在jail里面活动,而且你可以知道他什么时候进入和离开系统,做了什么。这样你可以很轻松的恢复系统和防范下一次未知的攻击。

       在jail系统的管理上面有几个问题需要注意:

       1. jail里面的帐号、密码是跟实际系统不同的,但是在jail之外ps或者查看jail目录树内的文件时,那些jail内部的uid会被看成外部的uid,因此最好把jail里面的/etc/adduser.conf进行修改,把他们的uid起始号码放大,比如:uid_start="",这样当你在jail外部进行文件、进程管理的时候不至于误会文件或者进程的宿主。

       2. jail内的任何活动,其能力都受到了限制。比如top/vmstat这样的东西都不能使用,mknod,dd等等这样需要访问直接硬件的东西也无法工作。所以在jail内监控系统运行状态也比较难。echarts雷达图源码

       3. 当想要远程关闭jail系统的时候,可以有两种方法,一是进入jail之后kill -TERM -1 或者 kill -KILL -1 ,这样向所有该jail内的进程发送SIGTERM或者SIGKILL信号,也可以在jail里面运行/etc/rc.shutdown来关闭jail。如果是本地想要关闭jail倒是简单,只要把所有带有J标记的进程干掉就可以了。

       4. 一个系统可以运行多个jail,各个jail之间无法互相干涉,如果在jail外面使用

       tester# jail $jailhome jailed.system.box $jail_IP_ADDR /path/to/application

       这种方式运行某个应用程序,下一次试图通过运行

       tester# jail $jailhome jailed.system.box $jail_IP_ADDR /bin/csh

       这种方式获得的jail过的shell来管理该应用程序将会失败。因为这时是两个各自独立的jail,互相不能干涉。为了能对jail系统内进程灵活地进行管理,推荐在jail里面除开应用软件之外,再启动telnetd或者sshd之类的服务,这些服务此时与应用程序运行在同一个jail里面,就可以通过远程登入系统后获得与那些应用程序在同一个jail内的shell。

       5. jail系统内的所有应用软件版本号应该与外部实际系统保持一致。当外部系统的源码同步到某个版本并且重新做过make world之后,推荐也重新生成一次jail,以避免某些可能的莫名其妙的错误。

       6. 另外有一个做法不知道是否正确,在jail里面每次使用ps的时候,系统都会报告没有/var/run/dev.db文件,让人感觉很不舒服,复制实际系统的/var/run/dev.db 到 $jailhome/var/run/ ,就不会再碰到这个问题。

ctm是什么意思

       CTM 是保持远程目录树和中央服务器目录树同步的一种方法。它被开发用于 FreeBSD 的源代码树,虽然其他人随着时间推移会发现它可以用于其他目的。当前几乎没有,也或者只有很少的文档讲述创建 deltas 的步骤

       在您的日常生活中使用 CTM

       要应用 deltas,简单的键入:

       # cd /where/ever/you/want/the/stuff

       # ctm -v -v /where/you/store/your/deltas/src-xxx.*

       CTM 能够理解被 gzip 压缩的 deltas,所以您不需要先 gunzip 他们,这可以节省磁盘空间。

       除非觉得整个过程非常可靠, CTM 不会涉及到您的代码树的。您也可以使用 -c 标记来校验 delta,这样 CTM 就不会涉及代码树; 它会只校验 delta 的完整性看看是否可以安全的用于您的当前代码树

FreeBSD下修改安装源的方法

       说明:

       FreeBSD中安装软件一般有两种方式:

       (一)、使用pk_add -r Package 来安装软件,Package安装的是已经编译好的二进制软件包,Package默认下载软件包的路径是在/var/db/pkg中

       (二)、使用Ports方式编译安装,源码时代没学出来Ports是下载源码到本地,再执行编译安装,ports软件包的路径是在/usr/ports中

以上两种安装方式都需要从网络下载软件包,默认是从官方的源下载软件包的,速度比较慢,可以修改配置文件指定国内的镜像源来快速安装软件

       

1、修改Pcakage源为的镜像源

       

       setenv PACKAGESITE .freebsd.org #安装ports

       ee /etc/portsnap.conf #编辑文件

       SERVERNAME=portsnap.cn.FreeBSD.org #更改服务器为国内镜像

       按esc 回车,再按a保存

       portsnap fetch extract #下载ports快照

       portsnap update #更新

       ee /etc/make.conf #编辑文件,添加下面代码

       MASTER_SITE_BACKUP?=f的配置文件

       chown –R root .   修改mysql文件夹内所有文件用户为root

       chown –R mysql data修改mysql文件夹内data文件夹用户为mysql

       ./bin/mysqld_safe –user=mysql  启动mysql服务

       ./bin/mysql –u root –p 密码为空

       use mysql

       Delete from user where host’.0.0.1’;

       select host,user,password from user;

       update user set host=’%’,password=password(‘shadow’); //修改登录ip为任意;密码为shadow

       flush privileges;   //刷新mysql帐号权限

       然后远程连一下数据库试试吧。。

       初始化root密码

       bin/mysqladmin -u root password 'newpassword'

       bin/mysqladmin –u root password  

       ./mysqladmin   -u   root   -p   password   ''

       然后系统会询问你现在的密码,你输入现在的密码回车就可以了

       下次使用MYSQL的时候,ROOT   的口令就是了

       测试帐号

       bin/mysql –u root –p

       然后输入密码,出现提示符:

       mysql

       技巧提示:

       mysql #运行mysql 客户端,并开放root用户的远程访问权限。以便调试

       use mysql

       update user set host = '%' where user = 'root' and host 'localhost';

       flush privileges;

       quit

2、apache安装

       Step 1

       编译Apache的要求

       1.  磁盘空间   2.ANSI- C编译器及编译环境 3.确保准确的时间 4.Perl5 [可选]

       5.  apr/apr-util = 1.2

       需要先下载  apr-1.4.6.tar.gz 和 apr-util-1.5.1.tar.gz

       配置并安装  地址  plete."字样,那么就可以进行安装了:

       (make编译时fpm模块出错:解决办法php5.4./sapi/fpm/fpm/fpm_sockets.c文件修改三处代码    info.tcpi_sacked  改为: info.__tcpi_sacked

       info.tcpi_unacked 改为: info.__tcpi_unacked)

       make install

       完成即可  可以平滑重启

       3、拷贝php配置文件

       cp  php.ini-development(开发模式)  或者production生产模式     /usr/local/servers/php/etc/php.ini

       修改php.ini

       disable_functions =system,exec,shell_exec,passthru,ini_alter,dl,pfsockopen,openlog,syslog,readlink,symlink,link,

       leak,popen,escapeshellcmd,apache_child_terminate,apache_get_modules,apache_get_version,

       apache_getenv,apache_note,apache_setenv,virtual;,phpinfo

       4、修改配置

       修改/usr/local/servers/php/etc/php.ini文件(新版本可能不需要)

       register_globals = On

       修改/usr/local/apache/conf/ /www

       输入后,会提示输入用户的密码,密码不能太长,不能有特殊字符。

       注意,以上路径需根据各服务具体路径而定

       www1:*:::User :/home/www1:/usr/sbin/nologin

       www2:*:::User :/home/www2:/usr/sbin/nologin

       www3:*:::User :/home/www3:/usr/sbin/nologin

       www4:*:::User :/home/www4:/usr/sbin/nologin

       www5:*:::User :/home/www5:/usr/sbin/nologin

       www6:*:::User :/home/www6:/usr/sbin/nologin

       www7:*:::User :/home/www7:/usr/sbin/nologin

       www8:*:::User :/home/www8:/usr/sbin/nologin

       www9:*:::User :/home/www9:/usr/sbin/nologin

UNIX、BSD(FreeBSD)操作系统简介

       UNIX操作系统,由Ken Thompson在年于AT&T电话公司开发,是使用Digital PDP-7小型机的汇编语言实现的。其名称源于同事对MULTICS(多信息及计算服务)的一句玩笑,灵感源于MULTICS项目,其中包括树形结构的文件系统、单独的程序用于解释命令(shell)以及将文件作为无结构字节流看待的概念(一切皆为文件)。C语言是Dennis Ritchie设计并实现的,该语言于年步入成熟期,用于几乎整个UNIX内核的重写,使UNIX成为最早以高级语言开发的操作系统之一。

       从年到年,UNIX发布了多个版本。其中,第一版于年发布,运行在PDP-上,附带了FORTRAN编译器和许多雏形程序。第二版于年发布,安装在AT&T的台计算机上。第三版于年发布,包括了C编译器和管道的首个实现。第四版于年发布,几乎完全以C语言重写。第五版于年发布,当时UNIX的装机数已超过台。第六版于年发布,这是在AT&T之外广泛使用的首个版本。

       BSD操作系统是在/学年期间,由Thompson在加州大学伯克利分校担任客座教授时开发的,他与研究生们一起为UNIX开发了许多新特性。许多UNIX的新工具和新特性在伯克利问世,包括C shell、vi编辑器、改进型的文件系统(伯克利快速文件系统)、sendmail、Pascal语言编译器,以及用于新型Digital VAX架构的虚拟内存管理机制。年月,首个完整的UNIX发布版3BSD诞生。年,加州大学伯克利分校的计算机系统研究组发布了4.2BSD,该版本包含了完整的TCP/IP实现和套接字应用编程接口,以及各种网络工具。

       GNU项目由Richard Stallman于年开始创建,旨在开发一个“自由的”UNIX实现,包含内核以及所有相关软件包。Stallman的“自由”概念在法律意义上意味着软件可以免费或以低价获得。GNU项目在年成立了自由软件基金会,以支持项目和广义上的自由软件开发。年的4.3BSD版本和年的4.4BSD版本对BSD系统产生了深远影响。

       在世纪年代初,Bill和Lynne Jolitz将BSD系统移植到位的x cpu上,命名为/bsd。这项移植工作基于4.3BSD源码的版本之一,该版本中残存的所有AT&T专有源码被替换或删除。FreeBSD和NetBSD分别基于/BSD创建了自己的版本,NetBSD侧重于大量硬件平台的可移植性,而FreeBSD则主要关注性能,并成为应用最为广泛的BSD。

       在年,Berkeley Software Design, Incorporated(BSDi)发行了受商业支持的BSD UNIX——BSD/OS,包含二进制和源代码,售价美元。然而,BSDi被USL(UNIX System Laboratories)起诉,声称含有USL专有源码及商业机密。在和解后,加州大学继续发布BSD,并且BSDi、FreeBSD以及NetBSD纷纷以经过修改的4.4BSD-Lite源码替换了各自的Net/2基础源码。

       现今,大多数UNIX发行版如Solaris、HP-UX和AIX已变成小众产品,而BSD的开源衍生版仍受到操作系统专家、自由软件布道师和注重安全的管理员的狂热追捧。mac OS也有BSD的血统,FreeBSD是应用非常广泛的BSD衍生版之一,市场份额超过%,用户包括WhatsApp、Google、百度和Netflix等大型互联网公司。

FreeBSD常用命令--ports使用方法讲解

       更新 INDEX 对照表

       4.x 的 INDEX 位於 /usr/ports/INDEX,5.x 位於 /usr/ports/INDEX-5。 INDEX 是对照 ports 所有相依等资讯的对照表,若长期未更新的话,会导致ports 对照失败。官方有定期更新 INDEX,如果 想自行更新的话,则:

       cd /usr/ports/

       make fetchindex

       更新 INDEX HTML

       FreeBSD 提供了用网页的方式来观看 ports collection,即可使用 lynx, w3m, links 或其它可浏览网页的程式来查阅。制作全部 ports collection 的方式如下:

       cd /usr/ports/

       make readmes

       如果是仅须要做目前目录下的资讯,或单一更新某一分类下的资讯,如 /usr/ports/ftp/ 的话,则:

       cd /usr/ports/ftp/

       make readme

       则仅会更新 /usr/ports/ftp/ 这个目录的资讯,其上与其下的目录皆不会更动到。 执行成功後,会在相对应的目录下产生 README.html 的档案。

       更新 ports Mk

       Mk (/usr/ports/Mk/) 是编译 ports 时所叁考的设定,有时若发生 ports

       collections 太新,而导致 Mk 的内容不符,此时 就是应该更新 Mk 的时候了。

       cd /usr/src/

       make update

       cd /usr/src/share/mk

       make install

       以关键字在ports寻找软件

       如果要从全部的 ports collection 中找寻与关键字 "ldap" 有关的 ports,则:

       cd /usr/ports/

       make search key=ldap | grep ^Path

       如果只要从与 ftp 相关的 ports 下找寻与关键字 "ldap" 有关的 ports,则:

       cd /usr/ports/ftp/

       make search key=ldap | grep ^Path

       还有另一个用法,方法只是将 key 换成 name 。如果已经知道要搜寻 ports 的名称,或只想找名称相关的关键字 "ldap", 则:

       cd /usr/ports/

       make search name=ldap | grep ^Path

       如果只要从 ftp 相关的 ports 下找寻名称与关键字 "ldap" 有关的 ports,则:

       cd /usr/ports/ftp/

       make search name=ldap | grep ^Path

       安装一个新的 port

       如果系统上未安装此软体,则可以选择安装一个新的 port。以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make install

       如此会在系统上安装一个新的 joe 软体。如果需要在安装完成後,一并清除编辑时期所留下来的暂存目录,则:

       cd /usr/ports/editors/joe/

       make clean

       如何得知 ports system 对某个 ports 所提供的编译叁数

       所有的 ports collections 中所提供的编译叁数都会在对应的 Makefile 档案内详述,如 sysutils/portupgrade 的话,则是位在 /usr/ports/sysutils/portupgrade/Makefile 档案下。

       可以对此档案浏览以得知编译时期可以下达的叁数,如对 sysutils/portupgrade 有提供 NOPORTDOCS,则:

       cd /usr/ports/sysutils/portupgrade/

       make -DNOPORTDOCS install 和make NOPORTDOCS=yes install 亦同那麽安装此 ports 时,会将 NOPORTDOCS 所对应的相关叁数指定进去。有时候设定较人性化的 ports 会在安装前提供叁数供选择,但是其实大部份的ports 都没有提供,因此必须自行去搜寻可编 译的叁数,在此我提供的方式如下:

       cd /usr/ports/sysutils/portupgrade/

       grep defined Makefile

       如此几乎可以知道所有提供的可编译叁数,虽然有时会多出一些不相干的资料,不会这个确实是一个不错可叁考的方式。

       安装 ports 前查询所需依赖/相关的套件

       在安装 ports 前,可以查询所需依赖/相关的套件。以 mail/p5-Mail-SpamAssassin 为例的话,则:

       cd /usr/ports/mail/p5-Mail-SpamAssassin/

       make all-depends-list

        #显示所有相关的套件

       make pretty-print-build-depends-list #显示编译期间所需要的套件

       make pretty-print-run-depends-list #显示此套件要执行时所需要的套件

       手动加入编译 ports 的叁数

       在ports collections 有提供的前提之下,有时候并不是所有该软体所支援的叁数 都会收纳在 ports collections 中,因此有时候会需要手动加入编译的叁数。如 ftp/pure-ftpd 中,如果不想把 inetd 的支援编入的选项,并没有被 ports collections 所纳入,因此必须手动加上这个 编译叁数,如下:

       cd /usr/ports/ftp/pure-ftpd/

       make CONFIGURE_ARGS+="--without-inetd" install

       指定 ports 的安装路径

       预设 ports collecions 已安排安装的路径 (/usr/local/),如果不想将套件安装在预设路径的话,可以手动指定安装路径。 以 editors/joe 为例,则:

       cd /usr/ports/editors/joe/

       make PREFIX=/usr install

       那么 joe 就会将档案对应在 /usr 目录下,而不是预设的 /usr/local 目录下。

       只下载源码包

       cd /usr/ports/editors/joe/

       make fetch

       预设会将 joe 的 源码包 下载至 /usr/ports/distfiles/ 目录下。

       下载安装此 ports 所有须要的其他 ports 的 源码包

       cd /usr/ports/systuils/portupgrade/

       make fetch-recursive

       预设会将此 ports 的源码包与所有须要的其他ports 的源码包,下载至 /usr/ports/distfiles/ 目录下。

       下载全部所有 ports 的 源码包

       cd /usr/ports/

       make fetch

       则会所将全部所有 ports 的 源码包 下载至 /usr/ports/distfiles/ 目录下。

       下载全部 ftp 下所有 ports 的 源码包

       cd /usr/ports/ftp/

       make fetch

       则会所将全部 ftp 下所有 ports 的 源码包 下载至 /usr/ports/distfiles/目录下。

       下载并解开源码包的步骤

       cd /usr/ports/editors/joe/

       make extract

       会将源码包解开至 /usr/ports/editors/joe/work/ 目录下。

       解开源码包并补上官方提供的 patch

       先补上官方提供的 patch ,再行 patch 自己的修正。以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make patch

       会将源码包解开至 /usr/ports/editors/joe/work/ 目录下,并已经 patch 上官方提供的 patch。

       如果想要一次清掉所有 ports 产生的暂存资料,则只要回到 ports 的根目录执行即可:

       cd /usr/ports/

       make clean

       安装一个新的 port,并将打包(package)起来

       将安装完成的软体打包起来,有许多便利性:包括在丛集系统中,可供其它机器 使用,或将未来此软体出问题可重新利用此 package 重新快速安装。以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make package

       如此会在系统上安装一个新的 joe 软体,并将此软体打包(package)起来。package 预设会在 /usr/ports/editors/joe/ 目录下,如果希望集中管理的话,建议做如下的步骤:

       mkdir -p /usr/ports/packages/All/以後打包的 packages 都会存放在此目录下,并且系统会自动做分类,以方便管理。如果需要在安装完成後,一并清除编辑 时期所留下来的暂存目录,使用,如:

       cd /usr/ports/editors/joe/

       make package clean

       打包一个 port,并将其所有相依的 ports 也打包起来

       如果编辑一个 port 需要依赖其它的ports,那麽必须将其它 ports 也一起打包,否则安装 packages 会有相 依赖其它 ports 的 packages 的问题。以 sysutils/portupgrade 为例的话,则:

       cd /usr/ports/sysutils/portupgrade/

       make DEPENDS_TARGET=package package

       如此会在对所有 portupgrade 所相依赖的 ports 一并打包,也包括自己本身。

       对一个已经安装的 port 打包

       如果安装好一个套软,事前并未打包,事後想打包的话,则:

       以 editors/joe 为例的话

       cd /var/db/pkg/

       pkg_create -b joe-{ 版本号}

       会将已安装的 port 打包起来,放在 /var/db/pkg/ 目录下。

       清理 ports 编辑期间所产生的暂存资料

       在编辑 port 的时候,会有编辑期间所需要的工作目录(work),因此通常安装好一个套件後,会清除此暂存目录,以节省系 统磁碟空间。以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make clean

       如果是希望清除所有 ports 的暂存目录,则:

       cd /usr/ports/

       make clean

       如果是希望清除全部 ftp 下所有的暂存目录,则:

       cd /usr/ports/ftp/

       make clean

       清理 ports 编辑期间所产生的暂存资料,以及其相对应的源码包

       make clean,仅只是清除编辑期间所需要的工作目录(work),并没有将编译ports 时一并下载的 源码包 删除(相对应之 源码包 预设会存放在 /usr/ports/distfiles/),如果欲把 源码包 一并删除,以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make distclean

       make distclean 的步骤包含了 make clean 的功能,也就是说除了会删除源码包 外,还会一并清除编辑期间所产生的工作目录。

       如果是希望清除所有 ports 的暂存目录,及源码包 ,则:

       cd /usr/ports/

       make distclean

       如果是希望清除全部 ftp 下所有的暂存目录,及 源码包,则:

       cd /usr/ports/ftp/

       make distclean

       移除已安装的 ports

       以 editors/joe 为例的话,则:

       cd /usr/ports/editors/joe/

       make deinstall

       或是使用 pkg_delete

       cd /var/db/pkg/

       pkg_delete joe-{ version}

       有时候套件之间的相依性会导致无法直接移除,如果要强制移除的话,则:

       cd /var/db/pkg/

       pkg_delete -f joe-{ version}但很有可能会导致其它的套件执行起来出现问题。

       一并移除所相依的 ports

       以 sysutils/portupgrade 为例的话,则:

       cd /usr/ports/sysutils/portupgrade/

       make deinstall-depends

       执行此步骤前,请注意是否会移除应该保护的套件。

       或是使用 pkg_delete

       cd /var/db/pkg/

       pkg_delete -r portupgrade-{ version} 重新安装已安装过的 ports

       重新安装的前提是,之前有安装过或目前已安装。以 editors/joe 为例的话,

       则:

       cd /usr/ports/editors/joe/

       make deinstall

       make clean

       make install 或 make reinstall

       升级已安装的 ports

       如果已经安装好套件,事後欲升级的话,必须先移除旧版本的 port,移除的方法以 editors/joe 为例,则:

       cd /var/db/pkg/

       pkg_delete joe-{ version}

       cd /usr/ports/editors/joe/

       make install

       或是

       cd /usr/ports/editors/joe/

       make clean

       make reinstall

       安装旧版的 ports

       有时候会因为相依性,或是新版有问题,而会想装旧版本的套件。这里的方法是利用 CVS 的好处,回归到以前旧版本存在的日子,以安装旧版本的套件。首先,若我们要回复到某一个套件的版本时,需要去查询 FreeBSD ports CVS repository。最常见的就是 Freshports 网站、 FreeBSD 的 Mailing FreeBSD cvs 或是 FreeBSD ports cvsweb。

       查到该套件版本所依存的日子後,就修改 CVS tag。一般预设 ports 的 CVStag 会写在 /usr/share/examples/cvsup/ports-supfile ,如要回朔到// 号的话,则:

       vi /usr/share/examples/cvsup/ports-supfile