openSUSE:构建服务教程
先决条件
您应该对 RPM 及其创建方式有大致了解。请参阅 openSUSE 的打包指南,或类似文档,例如 dpkg 等其他受支持的打包系统。本文档并非旨在替代打包文档,后者可在上述链接中找到。
您应该熟悉您的项目用于打包的源代码环境。Build Service 可以解决一些常见错误,并会在出现故障时尝试引导您。我们有一个 buildservice 邮件列表,可以从中获得帮助和建议。但是,关于应用哪些补丁、使用哪些编译器标志等决定最终取决于您。
要求
要充分利用 Build Service,您需要使用您的 openSUSE/SUSE 帐户登录(与维基、bugzilla 相同……)。如果您还没有帐户,请单击页面顶部的“注册”链接创建一个。请记住,如果您有一天更改了密码,您也需要更改~/.oscrc或~/.config/osc/oscrc,如果您未能这样做,并且仍然运行涉及服务器的 osc 命令,则在多次尝试使用不正确的密码后,用户帐户可能会被锁定。
此外,如果您以普通用户身份启动构建(好主意!),系统会要求您输入本地计算机的 root 密码。如果您按照以下步骤将用户添加到/etc/sudoers,则可以避免这种情况
- 运行以下命令:
sudo /usr/sbin/visudo
- 添加以下行并用您的登录名替换占位符 LOGIN
LOGIN ALL = NOPASSWD: /usr/bin/build LOGIN ALL = NOPASSWD: /usr/bin/osc
术语
Build Service 包含项目(您可以查看其列表)。每个项目都包含构建一个或多个软件包(即 RPM/DEB 等)所需的资源。这些资源包括源档案、补丁文件、spec 文件等。项目的输出是一个或多个存储库。存储库是一个熟悉的旧概念:它只是一堆 RPM,按目录层次结构组织,并带有一些索引/元数据文件,这些文件使 zypper 等工具易于搜索和解决依赖关系。项目输出的存储库对应于不同的操作系统版本,例如 openSUSE 15.6 等。
就现有项目而言,有一些“官方”openSUSE 项目会构建标准 openSUSE 发行版中提供的 RPM。 “factory”项目是正在进行的项目,它将成为下一个版本的 openSUSE。还有许多特定领域的项目,例如 Apache 和 network:telephony。最后,每个用户都有自己的“游乐场”项目,名为 home:用户名。
RPM 往往对其他 RPM 有很多依赖,而且这些 RPM 通常来自 Build Service 中的不同项目。这有两层重要含义。
首先,如果您的软件包在运行时依赖于某个其他软件包(“Requires”),它通常在构建时也会依赖于它(即“BuildRequires”)。Build Service 不会自动为您搜索和查找构建依赖关系(除了您正在构建的标准发行版中包含的内容)。因此,您必须以某种方式告诉 Build Service 在何处获取所需的软件包。
其次,一个很好的目标是使存储库传递闭包,即存储库中任何软件包的任何依赖项也都在存储库中(标准发行版中的软件包除外)。这使得安装您的项目提供的 RPM 的用户的生活更轻松。但这并非必需:用户始终可以使用搜索界面手动查找这些依赖项。
Build Service 提供了几种不同的方式来促进这些依赖项的处理。
首先,您可以直接将所需的软件包添加到您的存储库中。如果其他项目没有构建所需的软件包,这无疑是您必须采取的方法。然而,通常这些软件包已经被其他项目构建。考虑重复利用它们的工作。
第二种选择是将其他项目的存储库链接到您的存储库。这称为分层。通过编辑项目的元数据来完成。将其他项目/存储库添加为附加路径。这只会添加到 Build Service 在构建时搜索“BuildRequires”依赖关系的存储库列表中。这将允许您的包构建成功,解决第一个问题,但它根本不解决“传递闭合”目标:用户必须自己获取所需的包。但是,当您的项目与另一个项目有多个依赖关系和/或用户无论如何都可能从两个存储库中拉取时,这是一个不错的选择。
第三种选择称为链接,它是一种允许您的项目重用已存在于另一个项目中的软件包的方式。当您将软件包链接到您的项目时,依赖软件包将能够构建,并且该软件包也将出现在您的项目存储库中,从而在不重复任何工作的情况下解决这两个问题。
链接有两种类型:链接和聚合。当您链接时,您可以选择修改软件包的构建方式。您可以添加补丁,并为其他存储库启用构建。您构建的软件包的 RPM 将具有与原始项目构建的软件包不同的构建编号。请注意,这可能会给用户带来困惑。实际上,您正在构建一个同名软件包的不同版本。
除非您需要修改所需的软件包,否则应聚合而非链接。当您聚合时,您正在执行“只读”链接。该软件包不会在您的项目中构建;相反,已构建的软件包会从原始项目复制到您的项目中。因此,相同的 RPM(具有相同的构建号)将出现在两个项目中。对于用户来说,困惑较少,因为 RPM 是相同的。
Build Service 会自动检测链接软件包中的更改,并触发任何依赖于它们的软件包的重新构建。
工作流程
以下步骤概述了创建项目并向其中添加包的正常工作流程。当然,在实际示例中,您可能会在某些步骤中失败,并且必须重复它,直到不再失败。此概述只是为了让您对我们正在尝试实现的目标有所了解。
如果可能,我们将向您展示两种不同的方式
第一步 – 登录并一次性进行本地项目设置
如果您已经拥有 openSUSE 帐户,这是最简单的一步。
- Web 客户端:打开 http://build.opensuse.org/ 并使用右上角的登录链接登录。之后,点击您的用户名即可访问您的主项目。
- 命令行:首先,您必须在您的机器上安装命令行客户端。您可以在 openSUSE-Tools 软件下载存储库(是的:这也是一个 Build Service 项目)中找到适用于不同发行版的 osc 软件包。使用您最喜欢的软件包管理器安装 osc 软件包。
假设您正在使用 openSUSE Tumbleweed,osc 软件包的安装如下所示
zypper in osc
之后,cd进入您希望用于项目文件的目录。现在,熟悉 SVN 的人会感到“宾至如归”:尝试使用以下命令检出您的主项目
cd <directory_to_contain_project_root> osc checkout home:<username> cd home:<username>
- (请替换<用户名>为您的登录名)。
- 系统将提示您输入您的用户名和密码 — 之后,osc 将尝试检出您的主项目中的软件包并创建一个名为home:<用户名>.
- 您可以编辑文件中的设置~/.oscrc或~/.config/osc/oscrc.
- 如果您输入错误的密码,您需要删除服务中密码错误的整个 api 部分,osc 才能再次询问密码。
- 如果您设置了 plaintext_passwd = 0 并删除了 api 部分,osc 将再次询问用户名和密码,并将密码以 base64 编码存储。它可以轻松解码,但不能一目了然。
- 如果您想使用多个构建服务(或https://api.opensuse.org 以外的服务),请使用 -A 选项。您可以缩短-A参数,方法是在 api 部分设置aliases选项。您还可以编写一个 my_buildservice 脚本,其中包含类似以下内容exec osc -A https://api.my.build.server "$@"
第二步 – 创建和上传软件包
您可以使用您的主项目作为“试验场”来测试软件包,如果一切正常,这些软件包将被转移到其他更可见的项目。
- Web 客户端:在右侧单击“主项目”以打开您的主项目,然后单击“用户”并单击“添加用户”以将自己添加为维护者。之后,在概述 > 软件包选项卡中单击“创建新软件包”。您应该填写以下三个文本字段:“名称”(必填)、“标题”和“描述”。只需将软件包名称用作“名称”,将软件包摘要用作“标题”,将软件包描述用作“描述”即可。
- 创建软件包后,转到“源代码”选项卡以添加软件包的文件。您需要上传软件包的源代码以及至少一个 spec 文件(另请参阅 打包指南)。
- 命令行:
osc meta pkg -e home:<username> <packagename>
osc 将在您喜欢的编辑器中打开一个模板 xml 文件(基于EDITOR环境变量),您可以像上面描述的那样添加相同的内容(名称、标题和描述)。
现在调用
osc co home:<username> <packagename>
要通过命令行添加文件,只需 cd 到项目目录,复制相关文件(通常是 .tar.xz 和支持文件)。
openSUSE RPM 软件包的构建说明位于 spec 文件中。请参阅打包指南了解如何创建此文件。一个更简单的方法是从类似的软件包或 tar 压缩包(如果可用)中复制并调整 spec 文件。文件准备好后,调用
osc add *
这会标记目录中的文件以便下次提交。要提交文件,请调用
osc commit
一次提交会自动触发构建过程。您可能希望延迟提交,直到您在本地成功构建软件包之后(请参见下文)。
第三步 – 选择构建目标
现在您必须选择您的软件包应该针对哪些发行版(例如 openSUSE 13.1、Ubuntu 14.04 等)进行构建。
- Web 客户端:转到您项目的“存储库”选项卡,然后单击“添加存储库”,并选择其中一个可用的发行版和体系结构。
- 命令行:在 OBS 中,发行版和任何其他项目之间没有区别。您需要在项目列表中找到正确的项目名称。对于 openSUSE,它可以是 openSUSE:Factory、openSUSE:13.1、SUSE:SLE-11:SP3 等。
$ osc ls / ... openSUSE:Factory openSUSE:Factory:ARM openSUSE:Factory:ARM:Live ...
OBS 服务器管理员还可以配置一个向用户显示的公共发行版列表。如果存在这样的列表,您可以使用此命令获取它。
$ osc dists
找到要构建的项目后,获取其存储库列表
$ osc repositories openSUSE:Factory standard x86_64 standard i586 snapshot x86_64 snapshot i586 ports ppc64le ports ppc64 ports ppc ports armv6l ports armv7l ports aarch64 images local images i586 images x86_64
然后通过编辑您的项目元数据将存储库添加到您的项目
osc meta prj -e home:<username>
并添加存储库,例如
<repository name="openSUSE_Factory"> <path project="openSUSE:Factory" repository="standard" /> <arch>x86_64</arch> <arch>i586</arch> </repository>
repository="standard" 仅用于将来的扩展(存储库的分支)。
第四步 – 构建您的软件包
您的软件包在提交后或某些文件更改后会自动安排构建。如果所需软件包被重建,您的软件包也会自动重建。
如果需要,您也可以手动触发重建
osc rebuildpac <project> <package> [<repo> [<arch>]]
通过可选的 <repo> 和 <arch> 参数,可以将重建限制在特定的存储库或体系结构。
如果您的项目名为 home:username,您现在可以在 http://download.opensuse.org/repositories/home:/username/ 找到您的项目
本地构建您的软件包
有时,在本地机器上构建软件包可能比等待 Build Service 的结果更快。osc如果您的本地硬件支持,则支持您的软件包的本地构建(在 x86_64 上可以为 i586 和 x86_64 构建,在 i586 上只能为 i586 构建)。
确保您拥有最新源代码
使用osc checkout (osc co)或osc up以确保您拥有最新版本的源代码。
如果这是您从未检出过的项目/软件包
cd <your_obs_working_dir> osc co <project> <package> cd <project>/<package>
或现有已检出项目的新软件包
cd <your_obs_working_dir>/<project> osc co <package> cd <package>
或进入现有软件包的本地副本并更新
cd <your_obs_working_dir>/<project>/<package> osc up
执行本地构建
osc build <platform> <arch> <specfile> [--clean|--noinit]
例如
~/obs/home:user/my_project/my-package # osc build openSUSE_Leap_42.1 x86_64 my-package.spec
osc将连接到 OBS 存储库服务器并下载所有必需的 RPM 到/var/tmp/osbuild-packagecache/platform/repository/arch作为缓存目录。如果您想避免网络流量,可以事先用 DVD 或 ISO 中的 rpm 填充缓存。为此,将 rpm 从 DVD 复制到缓存目录。
osc将创建 chroot 环境于/var/tmp/build-root/并开始构建您的软件包。如果您只有少量更改,可以使用选项--noinit来避免重建构建环境。如果您怀疑您的 chroot 环境已损坏,可以使用选项--clean来触发完全重建。您可以配置 chroot 目录;请参阅您文件中的注释~/.oscrc或~/.config/osc/oscrc文件中提供相同的供应商和标识信息。
sudo rpm --import - <<_END_KEY $(osc signkey offending-project) _END_KEY
您的软件包在此 chroot 环境中构建完成后,您可以在以下位置找到生成的软件包/var/tmp/build-root/home/abuild/rpmbuild/RPMS/(较旧版本的 rpmbuild 使用/usr/src/packages/RPMS/.
如果您的软件包使用 URL 下载服务,您可能需要先执行以下命令
zypper ar -r http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_11.3/openSUSE:Tools.repo
本地构建的完整日志文件存储在 /var/tmp/build-root/.build.log 中。
纠正本地构建过程中的错误
您需要为 openSUSE 或任何其他发行版编译新软件包的主要原因是,如果您的软件包尚未针对您的操作系统版本和发行版进行编译,则需要确保兼容性。但是,那样您可能会在构建过程中遇到需要修复的新错误。修复错误的最简单方法是 chroot 到构建环境并在那里创建修复。您可能希望使用 openroot 而不是 chroot,以便获得 X11 访问权限并挂载所有其他必要的目录。
osc chroot openSUSE_12.1 x86_64
或老式且繁琐的
chroot /var/tmp/build-root/ cd /home/abuild/rpmbuild/BUILD/your-package-dir ls or: openroot /var/tmp/build-root/ 'cd /home/abuild/rpmbuild/ILD/your-package-dir; ls; bash' ... exit
依赖关系
如果在构建过程中出现依赖错误,请添加包含构建依赖关系的行,例如
BuildRequires: cmake libkde4-devel
在这种情况下,cmake 和 libkde4-devel 将在您的软件包构建之前安装。
安装额外的软件包到构建根目录
为了调试目的,您可能需要将额外的软件包安装到您的本地构建根目录,以调试和修复与构建相关的问题。这可以通过 ~/.oscrc 文件和变量 extra-pkgs 来完成。例如
extra-pkgs = vim gdb strace valgrind
安装权限
如果您收到类似这样的错误消息
error: Bad exit status from /var/tmp/rpm-tmp.qrRAn2 (%install)
这意味着您的 %install 步骤失败了(所有之前的步骤都顺利)。这可能是因为您尝试安装到错误的位置而缺少写入权限。在这种情况下,将以下 make install 命令添加到您的 spec 文件中
make install DESTDIR=%buildroot
将您的工作提交回 OBS
一旦您拥有您的<package>目录按照您想要的方式设置好,使用以下命令将您的工作提交回 OBS。
添加新文件到软件包
osc add
从包中删除文件
osc rm
更新更改日志(即 *.changes)
osc vc
将更新的文件提交回 OBS
osc commit
补丁
尽可能尝试上游工作以对源代码进行任何更改,而不是修补服务或应用程序。但有时需要创建补丁以包含上游不可用或特定于 SUSE 部署的修复。
有几种创建新补丁的方法。例如,您可以使用一个简单的工具 diff 或高级工具 quilt。如果源代码在 git 中可用,那么 git 命令行也可以生成补丁。
有关补丁的更多信息,请访问补丁指南。
使用 diff
如果您计划打补丁一个文件,请在编辑前将其复制到 .orig,在构建过程中重试所需的步骤直到成功,然后为其创建补丁。
为了使构建更详细,您可能希望在您的 spec 文件中插入一个set -x,使 bash 念出所有执行的命令(set +x之后禁用念出)。
diff -Pdpru /var/tmp/build-root/home/abuild/rpmbuild/BUILD/your-package-dir/Makefile.orig \
/var/tmp/build-root/home/abuild/rpmbuild/BUILD/your-package-dir/Makefile \
>/osc/home:user/your-package-dir/my.patch
现在通过列出将补丁添加到 specfile 中Patch67: my.patch(其中 67 通常替换为补丁中未占用的最低数字)在头部。然后让它在构建过程中(通常在%setup)的适当位置应用%patch67 -p7(-p7 在您未手动编辑补丁文件头部的文件目录时剥离七个目录级别)。
使用 git --format-patch
如果更改包含在 git 树头部的单个提交中,则可以通过运行此命令生成补丁
git format-patch HEAD^
这将生成一个文件0001-<提交消息的第一行>.patch。此文件可以像上面“使用 diff”部分所述那样包含在 .spec 文件中。请注意,补丁中的路径将深一层,因此请使用-p1在 .spec 文件中。
使用 quilt
您可能会发现使用像 quilt 这样的特殊程序来自动生成补丁会更容易。
osc co yourproject/yourpackage
cd yourproject/yourpackage
quilt setup -v *spec
cd yourpackage-*/
quilt push -a # apply old patches
quilt new yourpackage-version_fixbuild.patch
quilt edit src/foo.c
quilt refresh
foo-fixbuild.patch 将自动在父目录中创建。如果您正在处理一个尚未有补丁的包。您必须记住将补丁从补丁目录复制到您的包目录。重新运行 quilt setup 以获得初始补丁。您可以使用 quilt pop 从您的工作副本中删除补丁。
一个例子.quiltrc文件
# Options passed to GNU diff when generating patches
QUILT_DIFF_OPTS="--show-c-function"
# QUILT_DIFF_OPTS=""
# Options passed to GNU patch when applying patches
#QUILT_PATCH_OPTS="--ignore-whitespace --unified-reject"
# Options to pass to commands (QUILT_${COMMAND}_ARGS)
QUILT_PUSH_ARGS="--color=auto"
QUILT_DIFF_ARGS="--color=auto"
QUILT_REFRESH_ARGS="--backup -p0"
QUILT_PATCH_OPTS="--unified-reject-files --backup"
第五步:检查日志文件
构建服务为每个软件包的构建生成一个大的日志文件。
- Web 客户端:只需单击软件包视图中“构建结果”选项卡的状态即可。
- 命令行:您有几种选择,具体取决于您的需求(如果您在软件包目录中,则
project和package是可选的)
osc prjresults [<project>]
显示整个项目的汇总构建结果。或者您可以执行
osc results [<project> <package>]
显示单个软件包的构建结果。
osc buildlog <platform> <arch>
显示软件包的日志文件(您需要在软件包目录内)。
创建模式
自 Code12 (SLES-12/openSUSE-13.2) 以来,我们采用了新的模式定义方法,而不是旧的基于 XML 的模式文件。模式及其依赖关系现在由一个 rpm 软件包表示。少数模式特定的属性由该 patterns-package 提供。不再需要额外的 XML 文件。
有关 patterns-packages 的更多详细信息可以在这里以及维护 openSUSE 模式的项目 obs://build.opensuse.org/system:install:head/patterns-openSUSE 中找到。
自 SLES-12/openSUSE-13.2 起已废弃:以下部分指的是使用 XML 文件定义模式的旧方法。
模式文件包含包列表以及它们用途的描述。此外,Build Service 会为每个生成的存储库模式创建 .ymp 文件。用户可以使用这些 .ymp 文件进行一键安装。
简而言之,模式对于满足典型需求而无需在包之间创建依赖关系的一组软件安装非常有用。
可以通过直接使用 API 或使用 osc 提交模式
- 在 $EDITOR 中打开一个模式(如果不存在则创建)
osc meta pattern -e <project> <pattern>
- 列出现有模式
osc meta pattern <project>
- 获取现有模式
osc meta pattern <project> <pattern>
- 您也可以按如下方式提交现有文件
osc meta pattern --file <local_file> <project> <pattern>
测试:点击 Konqueror 中的 .ymp 应该启动安装程序,如果您没有安装 Konqueror,您可以尝试以普通用户身份从 shell 启动
/sbin/yast2 MetaPackageHandler http://download.opensuse.org/repositories/<project>/<SUSE_Factory or openSUSE_10.2>/<pattern>.ymp
以下文件是 KDE:KDE4 项目中的一个示例模式文件。您可以在这里看到它生成的 .ymp 文件。
<pattern
xmlns="http://novell.com/package/metadata/suse/pattern"
xmlns:rpm="http://linux.duke.edu/metadata/rpm"
>
<name>KDE 4 Games</name>
<summary>KDE 4 Games</summary>
<description>A number of games for KDE 4.</description>
<uservisible/>
<category lang="en">Desktop Functions</category>
<rpm:recommends>
<rpm:entry name="kde4-kpat"/>
<rpm:entry name="kde4-kmahjongg"/>
<rpm:entry name="kde4-kmines"/>
<rpm:entry name="kde4-kreversi"/>
<rpm:entry name="kde4-ksudoku"/>
</rpm:recommends>
<rpm:suggests>
<rpm:entry name="kde4-katomic"/>
<rpm:entry name="kde4-kbattleship"/>
<rpm:entry name="kde4-ksquares"/>
<rpm:entry name="kde4-bovo"/>
<rpm:entry name="kde4-kiriki"/>
<rpm:entry name="kde4-kwin4"/>
<rpm:entry name="kde4-kolf"/>
<rpm:entry name="kde4-klines"/>
<rpm:entry name="kde4-ksame"/>
<rpm:entry name="kde4-lskat"/>
<rpm:entry name="kde4-kgoldrunner"/>
<rpm:entry name="kde4-kblackbox"/>
<rpm:entry name="kde4-kbounce"/>
<rpm:entry name="kde4-ktuberling"/>
<rpm:entry name="kde4-knetwalk"/>
<rpm:entry name="kde4-kjumpingcube"/>
<rpm:entry name="kde4-kspaceduel"/>
<rpm:entry name="kde4-konquest"/>
<rpm:entry name="kde4-kshisen"/>
</rpm:suggests>
</pattern>
一些标签描述
| 标签 | 描述 |
|---|---|
<rpm:requires> <rpm:entry name="example" /> </rpm:requires> |
Requires RPM 示例:此包必须安装 - 否则模式将不满足。 |
<rpm:recommends> <rpm:entry name="example" /> </rpm:recommends> |
Recommends RPM 示例:如果可用且此软件包的所有依赖项都已满足,则将安装该软件包。如果软件包不可用,则没有错误消息。如果软件包依赖项未满足,则软件包将可见但未安装。 |
<rpm:suggests> <rpm:entry name="example" /> </rpm:suggests> |
Suggests RPM 示例:将显示在模式中,但默认不安装 |
一个简单更改的端到端示例
这里的目标是提供一个具体的示例,作为教程使用。
一项常见的活动是分支现有项目中已有的包,进行更改并将其提交回原始包。
基本步骤是
- 分支原始软件包osc branch <原始项目> <原始软件包>这将创建一个新的分支项目,其名称特定于您,名为home:<您的用户名>:branches:<原始项目名>并在其中创建一个与原始软件包同名的新软件包,它基本上是原始软件包的副本。
- 检出分支软件包osc checkout home:<您的用户名>:branches:<原始项目名>/<原始软件包名>这将从服务器下载分支软件包的源文件到名为home:<您的用户名>:branches:<原始项目名>/<原始软件包名>
- 进入本地子目录cd home:<你的用户名>:branches:<原始项目名>/<原始包名>并设置通常的默认 umaskumask 0022
- 处理您本地的软件包副本,直到它对您起作用
- 更改本地源文件(例如编辑 specfile 或创建补丁)
- 执行本地构建
- 执行本地软件包安装
- 测试本地安装的软件包
- 更新更改文件osc vc这会打开一个编辑器(通常是 'vi')并为 RPM 更改条目创建适当的标题。如果存在错误报告,则必须将其引用为 bsc#123456
- 如果您添加了新文件(例如新补丁)或删除了文件(例如过时补丁),请更新本地源文件的版本控制状态osc addremove并验证osc status没有版本控制状态有问题的文件,例如“?”或“!”
- 将本地源文件提交到分支软件包osc commit这会将本地源文件上传到服务器上的分支软件包,并触发分支软件包的自动重新构建。
- 查看分支软件包在原始软件包所有已启用构建存储库中的构建结果osc results --verbose home:<您的用户名>:branches:<原始项目名> <原始软件包名>要列出原始软件包已启用的构建存储库,请获取其构建结果osc results <原始项目> <原始软件包>
- 如果分支软件包在原始软件包所有已启用构建存储库中的重新构建“成功”,则创建请求以将分支软件包提交回原始软件包osc submitrequest --message='<描述您所做更改的简短消息,如果存在匹配的错误报告,则包含 bsc#123456>' home:<您的用户名>:branches:<原始项目名> <原始软件包名> <原始项目> <原始软件包>并记住请求 ID 号。
- 不时检查您的请求发生了什么osc request show <请求 ID 号>如果您需要直接联系原始软件包的维护者osc maintainer <原始项目> <原始软件包>显示他们的用户名,以及osc whois <用户名>显示 Build Service 用户的全名和电子邮件。
这需要几个步骤,但一旦您掌握了它,它就会变成第二天性。
这假设您已经在 OBS 上有一个帐户。如果没有,请前往 http://build.opensuse.org/ 设置一个,并使用右上角的登录链接登录。OBS 使用与 openSUSE 基础设施的其他部分(如 bugzilla)相同的身份验证系统,因此您很可能已经有一个帐户,只需首次登录,OBS 帐户主项目将自动创建。
这是一个真实的例子
命令行一次性设置
sudo zypper in osc mkdir ~/obs
然后您需要分支一个软件包的本地副本。
cd ~/obs umask 0022 osc branch security:forensics sleuthkit osc co home:<your_user_name>:branches:security:forensics/sleuthkit cd ~/obs/home:<your_user_name>:branches:security:forensics/sleuthkit
现在您已经拥有一个现有软件包,它就像
# this untars the tarball and does some magic quilt setup sleuthkit.spec # chdir to sources cd sleuthkit-3.2.3 # apply all patches quilt push -a # add new patch quilt new testing.patch # add a file to the patch quilt add some-file vi <some-file> # or alternatively: quilt edit <some-file> # and finally quilt refresh -p1 # copy the patch up to the project dir cp patches/testing.patch .. # and now handle the spec file cd .. vi sleuthkit.spec # Add patch to it by creating a Patch0 entry in the header area and a %patch0 -p1 line to the %prep section # tell OBS that the package now includes a new file osc add testing.patch # update the changes file osc vc -m "Fix some typos." # and build, install and test your work osc build # perform a local install. At the end of the osc build output the full path of the RPM file should be shown zypper in -f <full_path_to_rpm> # repeat until happy. Go back to quilt edit if not happy. # send your edits back to OBS osc commit # wait a period of time for new packages to build on OBS # check the build status via the WebUI for your branched package # Once published, install the RPM from OBS and test again # submit your changes back to the original package. If there is a bugzilla entry, be sure to reference it
完成测试后,将更改提交回您分支的原始软件包
osc sr