发布时间:2026/8/18 18:29:40
如何为 Universal Blue main 添加或移除软件包?packages.json 配置深度指南 如何为 Universal Blue main 添加或移除软件包packages.json 配置深度指南【免费下载链接】mainOCI base images of Fedora with batteries included项目地址: https://gitcode.com/gh_mirrors/main9/mainUniversal Blue main 是 Fedora 生态中开箱即用的 OCI 基础镜像OCI base images of Fedora with batteries included而packages.json 配置正是决定这个镜像里预装哪些软件包的核心清单。无论你是想为镜像添加常用工具比如 htop、tmux、ffmpeg还是移除默认自带的软件包只需要改好这一个 JSON 文件其余交给构建流水线即可。本文将从零开始带你彻底搞懂 packages.json 的结构、添加与移除软件包的正确姿势以及配置背后的运行原理读完你就能动手定制自己的 Fedora 镜像。 packages.json 是什么为什么它如此重要在 Universal Blue main 的仓库根目录下有一个名为 packages.json 的文件。它是一份软件包白名单 黑名单构建镜像时CI 会读取这份配置通过 dnf5 批量安装include里的软件包并移除exclude里的软件包。也就是说添加软件包 修改 include 段移除软件包 修改 exclude 段完全不需要改动任何构建脚本。这份文件是镜像内容定制的唯一入口也是项目以配置驱动构建理念的体现。而真正负责解析并执行这份配置的脚本是 build_files/packages.sh。在 Containerfile 的构建流程中它会在 build_files/install.sh 之后被调用完成最后的软件包增删动作。 packages.json 配置结构全解析打开 packages.json你会发现它只有两个顶层键include要安装的包和exclude要移除的包。每个键下面又分为三类分类键作用范围典型示例all所有镜像变体通用htop、tmux、ffmpegsilverblue仅 GNOME 桌面版Silverblueadw-gtk3-theme、ibus-mozckinoite仅 KDE 桌面版Kinoitefcitx5-mozc、kate、kcm-fcitx5举个例子仓库当前的 packages.json 中include.all里预置了distrobox、fzf、just、nvtop、smartmontools、zstd等实用工具而exclude.all则移除了fedora-third-party这类 Fedora 默认但 Universal Blue 不需要的软件包。这种全局 分桌面定制的结构非常巧妙公共工具只写一次Silverblue 和 Kinoite 各自维护专属软件列表互不干扰。➕ 如何为镜像添加软件包最快捷的配置方法给 Universal Blue main 添加软件包非常简单只需三步编辑 packages.json在include.all数组中新增一行例如添加btop终端系统监控工具。遵循 JSON 语法每个包名用双引号包裹与上一个包之间用英文逗号分隔。提交并触发构建推送改动后GitHub Actions 会自动重新构建镜像并发布新版本。如果你想让某个软件包只出现在 Silverblue 上就把它加进include.silverblue只给 Kinoite 用就放进include.kinoite。按需分类镜像体积更精简。 小贴士如果某个包在 Silverblue 和 Kinoite 都要装但base变体不需要可以同时写入两个桌面分类而不是塞进all。➖ 如何从镜像中移除软件包exclude 配置详解移除软件包的逻辑与添加完全对称。你只需在exclude段中填入要删除的包名全局移除写入exclude.all所有变体都会删掉它。比如当前配置里的google-noto-sans-cjk-vf-fonts、default-fonts-cjk-sans。按桌面移除写入exclude.silverblue或exclude.kinoite。例如当前配置中 Silverblue 移除了gnome-software-rpm-ostreeKinoite 移除了plasma-discover-rpm-ostree目的是用 Flatpak 应用商店替代系统级软件管理。一个值得注意的细节是exclude 中列出的包如果本就不存在于镜像中构建不会报错。脚本会先用rpm -qa查询实际已安装的包只对真正存在的包执行 dnf5 remove所以你可以放心写不必担心删不存在的包导致构建失败。⚙️ 配置是如何生效的揭开 packages.sh 的运行原理想深入理解配置机制就一定要看 build_files/packages.sh 这个核心脚本。它的工作流程可以拆解为四步校验 JSON先用jq empty检查 packages.json 语法是否合法格式错误会直接中止构建防止带病上线。合并软件包列表用 jq 将all与当前镜像变体通过$IMAGE_NAME环境变量判断的 include 列表合并、去重、排序。批量安装对合并后的列表执行dnf5 -y install一次性装入全部软件包。按需移除对 exclude 列表做同样的合并去重再过滤出实际安装过的包执行dnf5 -y remove。而$IMAGE_NAME如silverblue、kinoite、base和$FEDORA_MAJOR_VERSION这两个关键变量来自 Justfile 和 image-versions.yaml 的构建参数传递。也就是说同一份 packages.json会根据构建目标自动适配不同的软件包组合这也是一份配置、多镜像复用的精髓。 如何验证配置是否正确本地构建与测试指南改完 packages.json 后建议先在本地验证而不是直接依赖 CI校验 JSON 语法运行jq empty packages.json没有输出即代表格式正确。本地构建镜像使用项目自带的 Justfile 任务执行just build构建默认的 silverblue 镜像构建成功后进入容器检查软件包是否存在podman run -it --rm localhost/silverblue:44 bash rpm -q btop确认版本锁定项目会对内核等关键包执行 versionlock如果你添加的软件包恰好与锁定列表冲突构建会给出明确提示此时需要检查 build_files/install.sh 中的 versionlock 逻辑。⚠️ 注意构建前请确保本机已安装 podman并按照 CONTRIBUTING.md 的指引准备好开发环境。 常见踩坑与避坑指南逗号遗漏JSON 数组中最后一个元素不能带逗号中间元素不能漏逗号这是最常见的构建失败原因好在 packages.sh 的 jq 校验会第一时间拦住你。包名拼写请以dnf search 包名或 Fedora 软件仓库查询到的准确名称填写错误包名会导致安装阶段失败。桌面分类混淆把 GNOME 专用包写进include.kinoite会白白增加 KDE 镜像体积甚至引发依赖冲突。添加前先确认该包属于哪个桌面生态。exclude 与依赖冲突如果某包被其他包依赖dnf5 remove 可能会连带移除依赖它的软件建议先小范围测试。✅ 总结一份配置掌控整个镜像通过 packages.json 这一个文件你就能完成 Universal Blue main 镜像的软件包增删定制include段添加、exclude段移除、all与桌面分类灵活组合配合 build_files/packages.sh 的自动解析真正做到改一处、处处生效。对新手来说这可能是接触 OCI 系统镜像定制最友好、风险最低的入口——不需要懂复杂的构建脚本只需维护一份清晰的 JSON 清单。现在不妨克隆仓库动手试试git clone https://gitcode.com/gh_mirrors/main9/main在 packages.json 里加上你心仪的工具体验一把配置驱动镜像定制的乐趣吧【免费下载链接】mainOCI base images of Fedora with batteries included项目地址: https://gitcode.com/gh_mirrors/main9/main创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/18 18:24:40

osu-droid Mod系统全解析:30+模组效果一览与新手推荐组合

osu-droid Mod系统全解析:30模组效果一览与新手推荐组合 【免费下载链接】osu-droid 项目地址: https://gitcode.com/gh_mirrors/os/osu-droid 如果你是刚接触 osu-droid 的节奏游戏玩家,一定会被选歌界面那一排花花绿绿的模组图标弄晕。osu-dro…

2026/8/18 19:29:45

Python 对接腾讯云 OCR API|多场景图片文字识别完整开发指南(本地 / 网络图片、批量识别、业务落地)

目录 一、前言 二、腾讯云 OCR 服务开通与前置配置全流程 2.1 云服务开通步骤 2.2 Python SDK 环境依赖安装 2.3 核心前置参数说明 三、Python 完整封装 OCR 工具类(多识别模式) 四、三大真实业务落地应用案例 案例 1 政务档案数字化批量文字提取 业务痛点 改造方案…

2026/8/18 19:29:45

GAIA-v2-LILT:多语言智能体基准测试的核心挑战与构建实践

1. 从“单语测试”到“多语实战”:为什么我们需要GAIA-v2-LILT? 如果你最近在关注智能体(Agent)领域的发展,可能会发现一个有趣的现象:几乎所有衡量智能体能力的基准测试(Benchmark)…

2026/8/18 19:29:45

AI视频生成新范式:基于智能体反馈循环的创作者驱动式工作流

1. 项目概述:当创作者意图遇上AI视觉生成 最近在探索AI视频生成领域,一个核心痛点始终挥之不去:我们如何让AI真正理解并持续执行一个复杂的、充满细节的创作意图?现有的文生视频模型,无论是Runway、Pika还是Sora&#…

2026/8/18 19:24:45

引入虚拟阻抗控制环节的构网型(GFM)VSG变流器(电压电流双闭环控制结构)并网系统小干扰稳定性提升/宽频振荡抑制效果分析(适用于多元化新能源并网、储能并网等新型电力系统场景)

目录 1、引言 2、考虑虚拟阻抗控制的构网型VSG变流器拓扑结构及控制策略 3、基于Nyquist判据的新型电力系统小干扰稳定性分析 3.1 构网型并网系统Nyquist频域稳定性判据 3.2 强弱电网阻抗及工况 4、考虑虚拟阻抗控制的构网型并网系统稳定性分析 4.1 考虑虚拟阻抗控制的构…

2026/8/17 10:49:52

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 6:58:27

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/18 0:02:05

Qwen3.8-27B本地部署实战:17GB内存运行270亿参数大模型

1. 这篇文章真正要解决的问题 你是否曾对动辄需要上百GB显存才能运行的百亿参数大模型望而却步?是否觉得在个人电脑上部署一个功能强大的语言模型是天方夜谭?最近,通义千问团队发布的 Qwen3.8-27B 模型,宣称仅需 17GB 内存即可在本…

2026/8/18 0:02:05

ME3169 36V,8A,180KHz 恒压Buck DC-DC 转换器

概述ME3169 是一款180KHz,PWM 模式恒压Buck DC-DC 转换器,8V 到36V 宽工作电压范围,低纹波,内置低导通电阻功率MOS。ME3169 内置环路补偿电路,可以减少外围元器件数量。内部设计有恒压环路,可以通过外部电阻…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/17 17:27:06

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/18 7:12:40

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…