.. _freebsd_packages_ports: ====================================== FreeBSD应用程序安装:Packages和Ports ====================================== FreeBSD在核心系统的基础上提供了两种技术来安装第三方软件: - FreeBSD Ports Collection: 从源代码安装第三方软件 - packages: 安装预先编译的执行代码 FreeBSD port是一组设计成自动编译程序的文件集合,提供了所有自动下载、解压、补丁、编译和安装应用程序的所有信息。目前有超过36000个第三方软件已经ported到了FreeBSD。 FreeBSD的packages和ports都能够处理软件包依赖,虽然两者都能达成目标,但是取决于你的需求: - Package优点: - 预编译软件tar包通常比源代码tar包压缩得更小 - Package不需要编译时间,对于大型程序,例如Firefox, KDE Plasma 或 GNOME,在缓慢的主机上使用Package较为合适 - Package不要求使用者理解FreeBSD上编译软件的过程 - Port优点: - Package通常是为最大使用的系统编译的,所以参数没有优化,而使用port编译,可以修订编译参数 - 一些应用程序的编译时间依赖于安装的功能,例如 :ref:`nginx` 有大量的不同编译选项,提供了一个 ``nginx`` 软件包和一个 ``nginx-lite`` 软件包: - 由于激活了大量的选项,nginx安装实际需要很多依赖,导致更多的空间要求、也增加了攻击面 - 由于安装依赖增长巨大,完整的nginx软件包甚至会(令人惊讶)需要一些X库 - 只有通过 ``prot`` 安装 ningx才能从源代码定制出真正需要选项,一方面增强性能一方面降低了安全隐患 - 由于license的限制部分软件不能以二进制发布,则必须在终端用户这里编译 - 有些用户不信任二进制程序,需要检查源代码是否存在风险 - 源代码适合一些定制补丁 .. warning:: 在安装应用程序之前,请检查 https://vuxml.freebsd.org/ 的相关安全信息 要审计已经安装的软件是否存在已知漏洞,请运行 ``pkg audit -F`` 查找软件 ========== FreeBSD提供了一些方法来列出不断增长的软件; - `Ports Portal `_ 可以按照软件分类搜索 - `FreshPorts `_ 提供了完善的搜索工具并跟踪应用程序在Ports Collection中的变化 - 可以在 `SourceForge `_ 或 `GitHub `_ 查找应用程序,然后再回到 `Ports Portal `_ 查看该应用是否已经被ported到FreeBSD了 - 使用 ``pkg`` 命令可以搜索二进制软件包仓库 .. _freebsd_pkg: ``pkg`` 管理二进制软件包 ========================== ``pkg`` 删除软件包 --------------------- - ``pkg remove <软件包名>`` 可以删除一个软件包,但是之前依赖安装的软件包还没有清理,所以需要结合 ``pkg autoremove`` : .. literalinclude:: freebsd_packages_ports/pkg_remove :caption: ``pkg`` 删除软件包 .. _freebsd_ports: ``ports`` Collection ======================== 安装Ports Collection ----------------------- 在使用 ``port`` 来编译一个程序之前,首先必须安装好 ``Port Collection`` : - 首先系统需要具备 :ref:`git` 来维护ports tree: .. literalinclude:: freebsd_packages_ports/pkg_install_git :caption: 安装git 或者通过 ``ports`` 来安装git: .. literalinclude:: freebsd_packages_ports/ports_install_git :caption: ports安装git - ``check out`` ports 的HEAD分支: .. literalinclude:: freebsd_packages_ports/git_checkout_ports :caption: ``check out`` ports 的HEAD分支 也可以 ``check out`` 特定的quarterly分支: .. literalinclude:: freebsd_packages_ports/git_checkout_quarterly_ports :caption: ``check out`` ports 的quarterly分支 - 如果需要,在初始 ``git`` checkout之后,更新 ``/usr/ports`` .. literalinclude:: freebsd_packages_ports/git_pull_ports :caption: ``git`` 更新 ``/usr/ports`` 如果需要,也可以切换到不同的quarterly分支,例如: .. literalinclude:: freebsd_packages_ports/git_switch_ports :caption: ``git`` 切换 ``/usr/ports`` 安装ports ------------ - 以下举例 ``lsof`` 安装: .. literalinclude:: freebsd_packages_ports/ports_lsof :caption: 使用 ``ports`` 安装 ``lsof`` 移除ports ----------- - 移除使用 ``deinstall`` : .. literalinclude:: freebsd_packages_ports/ports_deinstall_lsof :caption: 使用 ``deinstall`` 移除已经安装的ports 升级ports ----------- - 执行以下命令检查系统是否有可以升级的ports(注意需要先更新 ``/usr/ports`` ) .. literalinclude:: freebsd_packages_ports/check_ports :caption: 检查ports是否有可更新已安装的软件 - 安装 ``portmaster`` (管理ports升级工具): .. literalinclude:: freebsd_packages_ports/install_portmaster :caption: 安装 ``portmaster`` - 使用 portmaster 进行更新: .. literalinclude:: freebsd_packages_ports/portmaster :caption: 使用 ``portmaster`` 进行更新 参考 ====== - `FreeBSD Handbook: Chapter 4. Installing Applications: Packages and Ports `_