Gentoo 包管理操作手册

8 分钟
本页目录

这篇专门面向 Portage。把仓库元数据、目标配置、已安装版本和 world 选择集分开,才能解释重编译与 depclean。命令以有权限维护 Gentoo 的终端为前提;不把切换 profile 或全量重编译当作常规修复。

当前任务入口
看更新与冲突先看求解结果
修改 USE / keyword最小范围的配置
卸载与孤立依赖world 与依赖
编译失败、配置更新维护与证据

同步仓库后,先预览变更

记录环境、同步仓库、阅读迁移通知

# 记录 profile、工具链与全局构建配置
emerge --info

排错时保留完整输出,同时审阅可能包含的本机信息。维护操作需要相应权限。

# 更新已配置仓库的元数据
emerge --sync

这一步不升级已安装软件;同步失败先修复仓库访问,再解释更新计划。

# 查看同步后新增的维护通知
eselect news list
# 阅读列表中与本机相关的通知
eselect news read 1

1 替换为实际编号;涉及 profile、Python 或工具链迁移时先完成文中前置步骤。

先审阅求解,再执行同一范围更新

# 预览 world 更新与 USE 引起的重建
emerge -pvuDN @world --verbose-conflicts

-p 只预览,-v 显示细节,-u 更新,-D 深入依赖,-N 检查新 USE;查看 blockers、slot、降级和重建原因。不要为清掉冲突提示直接删除依赖。

# 对已审阅范围再次确认并执行更新
emerge -avuDN @world

-a 替代 -p,求解结果仍应复核;期间改过配置或同步仓库,就以新计划为准。完成后按维护节合并配置,验证关键服务,再考虑 depclean。

按问题选择包查询

# 列出已安装包
equery list '*'

equery 由 app-portage/gentoolkit 提供;下面几条是独立查询,不是维护步骤链。

# 查看目标包的 USE 标记
equery uses app-editors/neovim
# 查找依赖该包的反向依赖
equery depends app-editors/neovim

这是反向依赖查询,不是列出 neovim 自己需要的全部依赖。

# 确认包安装了哪些文件
equery files app-editors/neovim

equery 来自 gentoolkit,eix/qlist 是可选工具。预览关注新包、升级、降级、重装、slot 变化和 blockers;先读相关 news,再执行已审阅的 emerge -avuDN @world。--with-bdeps=y 是否保留构建依赖应与二进制包/源码维护策略一致。

USE、keyword、mask 各管一件事

配置用途注意
package.use控制包的构建特性先查 equery uses,不能给任意包套 gtk/qt 示例
package.accept_keywords接受指定架构的测试版等优先限包/版本,不全局 **
package.mask / package.unmask限制版本候选/解除指定屏蔽unmask 不自动解决 keyword 或依赖冲突

两个独立文件的内容示例,按现有目录或单文件布局合并;不要将二者拼进同一个配置文件。修改前先用下方查询确认标记支持。

/etc/portage/package.use/editor

app-editors/vim python

/etc/portage/package.accept_keywords/editor

app-editors/neovim ~amd64

~amd64 只适用于相应架构的测试关键字;仅在确有需求时接受,不能把示例当成所有系统的默认设置。

修改包级配置前后各看一次

# 确认示例包支持的标记及当前状态
equery uses app-editors/vim

本页 python 是 Vim 的特性示例;先确认当前 ebuild 支持,再将上方配置片段合并到对应文件。

# 查看修改后该包将采用的版本与 USE
emerge -pv app-editors/vim

预览与期望不符时检查更具体的 package.use、profile 和 mask;不要直接叠加全局 USE。

按维护策略选择 USE 重建范围

# 预览启用状态变化引起的更新
emerge -pvuD --changed-use @world

侧重实际状态变化;这是下面 --newuse 策略的替代选项。

# 预览包含新增或移除标记影响的更新
emerge -pvuDN @world

选择与系统维护策略一致的一种;执行时用 -a 代替 -p 并保留其余求解选项。

--newuse 与 --changed-use 的预览并不完全等价:newuse 还可能因新增或移除的未启用 flag 触发重装,changed-use 更关注实际启用状态变化。临时 USE=... emerge 不会保存到 package.use;autounmask-write 的结果也需要审阅合并。

不在 world 中,不代表可以删除

正在呈现知识画面
world 选择如何保留依赖

取消显式选择不会卸载包;depclean 依据受保护集合的依赖可达性判断候选,被另一包依赖的共享库仍需保留。

先确认显式选择,再取消不再需要的目标

# 查看用户显式保留的包
cat /var/lib/portage/world

这是 world 的用户包列表,不是整个 @world 依赖闭包;还可能有 world_sets、system/profile 集合。

# 在取消选择前查看当前清理候选
emerge --pretend --depclean
# 仅在确实不再需要时取消显式保留
emerge --ask --deselect app-editors/neovim

此步改变选择集但不卸载。若只是查看依赖,不执行本条;若取消错了可用 emerge --ask --noreplace app-editors/neovim 重新选择。

重新求解后执行清理

# 根据新的选择集重新计算清理计划
emerge --pretend --depclean

逐项核对服务、临时工具和构建依赖;仍被其他包需要的 neovim 不会仅因 deselect 就消失。

# 确认完整列表后清理不再可达的包
emerge --ask --depclean

先完成更新、解决依赖问题;不要用 --unmerge 强行实现期望列表。

# 按提示重建仍使用保留共享库的消费者
emerge --ask @preserved-rebuild

根据 emerge 的提示执行,结束后检查关键程序与服务。它不是所有编译/运行故障的通用修复。

先完成更新并检查整份清理计划。deselect 只取消显式选择,包仍可能被其他包依赖;emerge -1 安装也不会加入 world。--unmerge 可绕过依赖保护,不用它代替 depclean。preserved-rebuild 处理保留旧共享库的消费者,不能代替所有故障排查。

配置合并、仓库与构建失败

配置更新:先找差异,再逐项合并

# 查找等待合并的配置文件
find /etc -name '._cfg*'

不足权限导致的错误不表示没有待更新文件。

# 交互审阅并合并配置
dispatch-conf

逐项查看 diff、保留本机定制;退出后对受影响服务做语法校验,再按服务需求 reload/restart。不能默认全部采用新文件。

仓库与工具链只读确认

# 查看仓库清单与启用状态
eselect repository list

此命令由相应 eselect repository 模块提供,启用不代表已同步。

# 需要同步所有仓库时使用的另一入口
emaint sync -a

与前文 emerge --sync 按实际 auto-sync 配置选择使用,不必连续重复。单个已启用仓库可指定 -r NAME。

# 读取当前 profile,暂不切换
eselect profile show
# 查看已安装编译器与当前选择
gcc-config -l

失败恢复:保留首个错误与求解计划

# 按时间定位失败的包与维护阶段
less /var/log/emerge.log

q 退出;详细编译错误在对应 PORTAGE_TMPDIR 下的包 temp/build.log,清理前先保存。

# 修复原因后预览上次未完成任务
emerge --resume --pretend

确认确实是要恢复的任务,再用 emerge --resume --ask;不能用 skipfirst 掩盖必需包失败。若目标配置已改变,应重新求解所需更新。

问题先保留的证据处理方向
编译失败emerge --info; build.log保存该包 temp/build.log,定位第一处实际错误,不只截最后五行
配置文件更新._cfg*dispatch-conf 或 etc-update 审阅合并;两者均非默认自动接受
切换 profile / Python / GCCeselect news; emerge --info遵循对应迁移文档;改变解释器命令不等于完成依赖迁移

启用 overlay 前审阅来源与包覆盖范围,再 eselect repository enable NAME、emaint sync -r NAME。MAKEOPTS 的单包并行与 emerge 的并行包数会叠加内存压力;按内存和实际构建观测设置,不机械等于 CPU 线程数。清理内核要保留已验证能启动的回退版本,见 内核手册。

Gentoo Portage · USE · emerge manual