USE 标志手册:AMD64 / 操作 / USE

什么是 USE 标志
USE 标志的核心思想

安装 Gentoo 时,用户会根据自身工作环境做出选择。服务器的配置与工作站不同,游戏工作站与 3D 渲染工作站也存在差异。
这不仅体现在选择安装哪些软件包上,还涉及特定软件包应支持哪些功能。如果不需要 OpenGL,为何要费心安装和维护 OpenGL,并在大多数软件包中构建 OpenGL 支持呢?如果有人不想使用 KDE,在这些软件包无需 KDE 支持也能完美运行的情况下,为何要编译支持 KDE 的软件包呢?
为帮助用户决定安装 / 激活什么以及不安装 / 激活什么,Gentoo 希望用户能以简单的方式指定其环境。这促使用户明确自己的真实需求,并简化 Portage 做出有效决策的过程。

USE 标志的定义

USE 标志应运而生。这种标志是一个关键字,包含了对特定概念的支持和依赖信息。如果某个 USE 标志被设置为启用,Portage 就会知道系统管理员需要该关键字的支持。当然,这可能会改变软件包的依赖信息。根据 USE 标志的不同,可能需要引入更多依赖项,以满足请求的依赖关系变化。
来看一个具体示例:kde USE 标志。如果该标志未在 USE 变量中设置(或其值以减号前缀:-kde),那么所有具有可选 KDE 支持的软件包将在不支持 KDE 的情况下编译。所有具有可选 KDE 依赖的软件包在安装时也不会安装 KDE 库(作为依赖项)。
kde标志设置为启用时,这些软件包将编译为支持 KDE,并且 KDE 库将作为依赖项安装。
通过正确定义 USE 标志,系统将专门针对系统管理员的需求进行定制。

使用 USE 标志
声明永久 USE 标志

所有 USE 标志都在 USE 变量中声明。为方便用户搜索和选择 USE 标志,我们已经提供了默认的 USE 设置。该设置是我们认为 Gentoo 用户常用的一系列 USE 标志的集合。此默认设置在所选配置文件的 make.defaults 文件中声明。
系统所遵循的配置文件由 /etc/portage/make.profile 符号链接指向。每个配置文件都基于其他配置文件,因此最终结果是所有配置文件的总和。顶层配置文件是基础配置文件(/var/db/repos/gentoo/profiles/base)。
要查看当前活动的 USE 标志(完整),请使用 emerge --info:

root # emerge --info | grep ^USE
USE="a52 aac acpi alsa branding cairo cdr dbus dts ..."

此变量已包含相当多的关键字。不过,请勿修改任何 make.defaults 文件来根据个人需求定制 USE 变量:当 Gentoo 存储库更新时,这些文件中的更改将被覆盖!
要更改此默认设置,请向 USE 变量添加或从中删除关键字。这可通过在 /etc/portage/make.conf 中定义 USE 变量来全局完成。在该变量中,可以添加所需的额外 USE 标志,或删除不再需要的 USE 标志。后者可通过在关键字前加减号(-)来实现。
例如,要删除对 KDE 和 Qt 的支持,但添加对 LDAP 的支持,可在 /etc/portage/make.conf 中定义以下 USE:

文件 /etc/portage/make.conf
USE="-kde -qt5 ldap"
为单个软件包声明 USE 标志

有时用户希望为一个(或几个)应用程序声明特定的 USE 标志,而不是在系统范围内设置。要实现这一点,请编辑 /etc/portage/package.use。package.use 通常是单个文件,但也可以是一个包含子文件的目录;请参阅下面的提示,然后查看 man 5 portage 以获取有关如何使用此约定的更多信息。以下示例假定 package.use 是单个文件。
例如,要仅为 VLC 媒体播放器软件包启用蓝光支持:

文件 /etc/portage/package.use
media-video/vlc bluray


如果 package.use 已存在为目录(而非单个文件),则只需在 package.use/ 目录下创建文件即可修改软件包的 USE 标志。任何文件命名约定都可以使用,但最好实现一致的命名方案。一种约定是简单地使用软件包名称作为子文件的标题。例如,为 media-video/vlc 软件包设置bluray USE 标志可按如下方式执行:

root # echo "media-video/vlc bluray" >> /etc/portage/package.use/vlc

同样,也可以明确禁用某个应用程序的 USE 标志。例如,要禁用 PHP 中的 bzip2 支持(但通过 make.conf 中的 USE 标志声明为所有其他软件包启用它):

文件 /etc/portage/package.use
dev-lang/php -bzip2
声明临时 USE 标志

有时用户需要临时设置 USE 标志。无需两次编辑 /etc/portage/make.conf(进行和撤销 USE 更改),只需将 USE 变量声明为环境变量即可。请记住,此设置仅适用于输入的命令;重新 emerging 或更新此应用程序(无论是显式操作还是作为系统更新的一部分)将撤销通过(临时)USE 标志定义触发的更改。
以下示例在安装 SeaMonkey 期间临时从 USE 变量中删除pulseaudio值:

root # USE="-pulseaudio" emerge www-client/seamonkey
优先级

当然,关于 USE 设置的优先级有一定的规则。USE 设置的优先级按以下顺序排列(优先级从低到高):

  • 配置文件中 make.defaults 文件声明的默认 USE 设置
  • 用户在 /etc/portage/make.conf 中定义的 USE 设置
  • 用户在 /etc/portage/package.use 中定义的 USE 设置
  • 用户作为环境变量定义的 USE 设置
    要查看 Portage 所看到的最终 USE 设置,请运行 emerge --info。这将列出所有相关变量(包括 USE 变量)及其 Portage 已知的当前定义。
root # emerge --info
使整个系统适应新的 USE 标志

更改 USE 标志后,应更新系统以反映必要的更改。为此,请在 emerge 中使用--newuse选项:

root # emerge --update --deep --newuse @world

接下来,运行 Portage 的 depclean 以删除在 “旧” 系统上 emerged 但已被新 USE 标志淘汰的条件依赖项。
重要提示
仔细检查提供的 “已淘汰” 软件包列表,确保不会删除所需的软件包。在以下示例中,添加--pretend-p)开关以使 depclean 仅列出软件包而不删除它们:

root # emerge --pretend --depclean

当 depclean 完成后,emerge 可能会提示重建动态链接到可能已删除软件包提供的共享对象的应用程序。Portage 将保留必要的库,直到执行此操作,以防止应用程序损坏。它将需要重建的内容存储在preserved-rebuild集合中。要重建必要的软件包,请运行:

root # emerge @preserved-rebuild

完成所有这些操作后,系统将使用新的 USE 标志设置。

软件包特定的 USE 标志
查看可用的 USE 标志

以 seamonkey 为例:它支持哪些 USE 标志?要找出答案,我们使用带有--pretend--verbose选项的 emerge:

root # emerge --pretend --verbose www-client/seamonkey

以下是将按顺序合并的软件包:
计算依赖关系... 完成!

[ebuild  N     ] www-client/seamonkey-2.48_beta1::gentoo  USE="calendar chatzilla crypt dbus gmp-autoupdate ipc jemalloc pulseaudio roaming skia startup-notification -custom-cflags -custom-optimization -debug -gtk3 -jack -minimal (-neon) (-selinux) (-system-cairo) -system-harfbuzz -system-icu -system-jpeg -system-libevent -system-libvpx -system-sqlite {-test} -wifi" L10N="-ca -cs -de -en-GB -es-AR -es-ES -fi -fr -gl -hu -it -ja -lt -nb -nl -pl -pt-PT -ru -sk -sv -tr -uk -zh-CN -zh-TW" 216,860 KiB

总计:1 个软件包(1 个新软件包),下载大小:216,860 KiB
emerge 并非唯一能完成此任务的工具。实际上,有一个专门用于软件包信息的工具称为 equery,它位于 app-portage/gentoolkit 软件包中:

root # emerge --ask app-portage/gentoolkit

现在运行带有uses参数的 equery 以查看某个软件包的 USE 标志。例如,对于 app-portage/portage-utils 软件包:

user $ equery --nocolor uses =app-portage/portage-utils-0.93.3

[说明:U - 安装的最终标志设置]
[ : I - 软件包安装时带有该标志 ]
[颜色:设置,未设置 ]

  • 为 app-portage/portage-utils-0.93.3 找到以下 USE 标志:
    U I

    • nls : 添加本地语言支持(使用 gettext - GNU 区域设置实用程序)
    • openmp : 构建对 OpenMP 的支持(支持并行计算),需要 >=sys-devel/gcc-4.2 并使用 USE="openmp" 构建
    • qmanifest : 构建 qmanifest 小程序,这会添加对 GPG、OpenSSL 和 BLAKE2B 哈希的额外依赖
    • qtegrity : 构建 qtegrity 小程序,这会添加对 OpenSSL 的额外依赖

    • static : !! 引导期间请勿设置此标志!!导致二进制文件静态链接而非动态链接
满足 REQUIRED_USE 条件

为使某些 ebuild 正常工作,需要或禁止某些 USE 标志的组合。这通过放置在 REQUIRED_USE 表达式中的一组条件来表示。这些条件确保所有功能和依赖项完整,并且构建将成功并按预期执行。如果未满足任何条件,emerge 将提醒您并要求解决问题。

示例描述
REQUIRED_USE="foo? ( bar )"如果设置了foo,则必须设置bar
REQUIRED_USE="foo? ( !bar )"如果设置了foo,则不得设置bar
`REQUIRED_USE="foo? (( bar baz ) )"`如果设置了foo,则必须设置barbaz
REQUIRED_USE="^^ ( foo bar baz )"必须恰好设置foobarbaz中的一个。
`REQUIRED_USE="( foo bar baz )"`必须至少设置foobarbaz中的一个。
REQUIRED_USE="?? ( foo bar baz )"最多只能设置foobarbaz中的一个。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值