====== 修包笔记 ====== 编写任何文件时,希望各位在文件末尾 add a new line,方便自己和他人,更方便强迫症患者。 ===== openEuler 软件包 Patch 补丁编号顺序 ===== 请参考 oEEP-0012,不过这个 **openEuler 演进提案 Evolution Proposal** 目前还在初始化中,不作为必须要求。 * 所有来自同一版本 upstream 的补丁声明范围为 0001-0999 * 所有架构相关的补丁声明范围为 1000 - 1999 * 预留补丁编号范围 2000 - 2999 * 所有CVE漏洞修复及上游其他版本backport 补丁,声明范围为 3000 - 4999 * 所有 openEuler 特性补丁声明范围为 5000 - 其它规定: * 原则上不按架构分别打补丁,rpm spec 文件中出现 ifarch 宏的,必须在之前一行通过注释的方式明确说明原因和当前技术限制。 * 补丁名称显式说明是否已经被 upstream 接纳,或来自某个特定版本的backport,便于版本升级时处理。 * 原则上新增架构相关代码文件,和修改架构相关代码的补丁应明确分开,不在同一个补丁中既修改代码,又新增文件。 * 对于修改架构相关代码的补丁,一个补丁尽量不要包含太多文件修改,尽量拆分,可使用 split-patch 工具,一个补丁最多包括5个文件修改(暂定)。 * 对于同一个文件的不同架构补丁,原则上按架构相对稳定程度排序,优先应用架构稳定的补丁。不同软件包维护者可根据实际情况选择,但在不同文件的补丁应用中应保持一致。 ===== yaml ===== 建仓的时候除了 spec 文件和源码,一定要包含一个 yaml 文件。如果 ''version_control'' 是 ''git'',那么 ''src_repo'' 就要填写完整的地址。 version_control: github src_repo: KDE/kweathercore tag_prefix: "^v" separator: "." ===== upstream 源码包名字跟仓内不一样 ===== 以 aom 包为例: Source0: https://aomedia.googlesource.com/%{name}/+archive/%{commit}.tar.gz#/%{name}-%{shortcommit}.tar.gz ===== KDE 系列包 ===== Update(2024-11-11): 目前已经有 ''%cmake_build'' 和 ''%cmake_install'' 了,不用这么麻烦了。 目前有宏了,之前没有宏的话需要这样: %build mkdir %{_target_platform} pushd %{_target_platform} %{cmake_kf5} .. popd %make_build -C %{_target_platform} %install make install/fast DESTDIR=%{buildroot} -C %{_target_platform} ===== 单 part 执行 ===== su - abuild For prep: rpmbuild -bp --define "_srcdefattr (-.root,root)" --nosignature --short-circuit /home/abuild/rpmbuild/SOURCES/texlive-base.spec For compile: rpmbuild -bc --define "_srcdefattr (-.root,root)" --nosignature --short-circuit /home/abuild/rpmbuild/SOURCES/texlive-base.spec For install: rpmbuild -bi --define "_srcdefattr (-.root,root)" --nosignature --short-circuit /home/abuild/rpmbuild/SOURCES/texlive-base.spec For wrote rpm: rpmbuild -bb --define "_srcdefattr (-.root,root)" --nosignature --short-circuit /home/abuild/rpmbuild/SOURCES/texlive-base.spec For files(but check): rpmbuild -bl --define "_srcdefattr (-.root,root)" --nosignature --short-circuit /home/abuild/rpmbuild/SOURCES/texlive-base.spec For all: rpmbuild -ba --define "_srcdefattr (-.root,root)" --nosignature --short-circuit /home/abuild/rpmbuild/SOURCES/texlive-base.spec ==== 安装单 part 执行 ==== 参考[[这个 bugzilla|https://bugzilla.redhat.com/show_bug.cgi?id=671210]],可以使用 ''--nodeps'' 指令,想要寻找这类包也可以直接使用 ''rpm -Va --nofiles'' 命令: # rpm -ivh chromedriver-119.0.6045.159-1.oe2309.riscv64.rpm chromium-119.0.6045.159-1.oe2309.riscv64.rpm chromium-common-119.0.6045.159-1.oe2309.riscv64.rpm error: Failed dependencies: rpmlib(ShortCircuited) <= 4.9.0-1 is needed by chromedriver-119.0.6045.159-1.oe2309.riscv64 rpmlib(ShortCircuited) <= 4.9.0-1 is needed by chromium-119.0.6045.159-1.oe2309.riscv64 rpmlib(ShortCircuited) <= 4.9.0-1 is needed by chromium-common-119.0.6045.159-1.oe2309.riscv64 # rpm -ivh chromedriver-119.0.6045.159-1.oe2309.riscv64.rpm chromium-119.0.6045.159-1.oe2309.riscv64.rpm chromium-common-119.0.6045.159-1.oe2309.riscv64.rpm --nodeps Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:chromium-common-119.0.6045.159-1.################################# [ 33%] 2:chromedriver-119.0.6045.159-1.oe2################################# [ 67%] 3:chromium-119.0.6045.159-1.oe2309 ################################# [100%] ===== QT5 cmake -> 包名 ===== 一些速查 ^ cmake ^ 包名 ^ | cmake(Qt5Core) | qt5-qtbase-devel | | cmake(Qt5Gui) | ::: | | cmake(Qt5Widgets) | ::: | | cmake(Qt5DBus) | ::: | | cmake(Qt5Xml) | ::: | | cmake(Qt5Test) | ::: | | cmake(Qt5Network) | ::: | | cmake(Qt5Qml) | qt5-qtdeclarative-devel | | cmake(Qt5QuickControls2) | qt5-qtquickcontrols2-devel | | cmake(Qt5Multimedia) | qt5-qtmultimedia-devel | | cmake(Qt5Svg) | qt5-qtsvg-devel | ===== bcond with & without ===== openEuler 内没有 "%bcond_with" 这个宏。只有 "%bcond_without"。 在 RPM spec 文件中,"%bcond_without" 是一个条件宏,用于定义一个默认为打开(on)的构建选项。这个宏的工作方式是,如果在构建包时没有明确指定 "--without