openSUSE:OBS Light 用例
概述
现在您已经理解了 OBS 服务器的基本原理(构建和共享程序,从相同的源代码为给定的平台和给定的体系结构),您想测试该系统。
以下实践实验将为您提供一些简单的示例,使用“免费”OBS 服务器启动 OBSLight。
每个实验都有一个目标,并解释实现它所需的整个过程。
实验 1:使用 openSUSE 的“Hello World”软件包
目标: 我想创建一个软件包,并使用 OBS Light 和 openSUSE 构建服务为 openSUSE 12.2 发行版和 i586 体系结构构建它。
在本实验中,您将学习
- 如何在 OBS 服务器 上设置项目
- 如何编辑仓库以构建适用于给定 Linux 发行版和给定体系结构的软件包
- 如何配置 OBS Light 导入项目
- 如何使用 OBS Light 从头开始创建项目中的软件包
- 如何使用 autotools 编辑您的文件
- 如何执行软件包的本地构建
- 如何提交您的源代码并验证 OBS 服务器上的构建状态
- 如何使用 OBS Light 补丁您的文件以升级您的程序
先决条件
OBSLight 和 openSUSE 构建服务
在遵循本教程之前,您必须
- 已安装软件包 obslight 和 obslight-gui。如果尚未完成,请参阅 obslight 安装
- 在 openSUSE 的“免费”OBS 服务器上拥有一个帐户:https://build.opensuse.org/ 并生成您的主目录
- 已阅读 OBS Light 客户端手册 的“图形界面”部分
- 对 OBS 服务器的 Web 界面有所了解
工具
您还需要安装 vim 编辑器和 GNU 构建系统的某些工具。对于 openSUSE 发行版,请在终端中键入以下命令
$ sudo zypper in vim autoconf automake
注意:本教程不涉及 rpm 软件包和 autotools,但通过本实验,您可能会学到关于这些概念的一些基础知识。
享受乐趣! :)
步骤 1:在您的 OBS 服务器上设置您的项目
首先,我们将使用 openSUSE OBS 的 Web 界面设置您的项目。打开您喜欢的浏览器并登录到 openSUSE OBS:https://build.opensuse.org/
然后单击页面右上角的 主项目。您将看到您的主项目的所有可用配置。
您可以看到您的项目中没有软件包,例如,没有发布构建结果。单击 仓库,然后单击 添加仓库 以编辑您想要构建的仓库。现在您可以查看可用于构建您的软件包的可用仓库列表。在本教程中,我们想要为 openSUSE 发行版构建一个软件包,因此,选中 openSUSE 12.2 复选框。
然后单击页面底部的 添加选定的仓库 以确认您的选择。默认情况下,为该仓库预定义了两种体系结构(i586 和 x86_64)。您可以通过单击主项目仓库选项卡中的 编辑仓库 来修改您想要构建的体系结构。对于本教程,我们将保留默认选择,因为我们想要为 openSUSE 12.2、i586 构建我们的软件包,该体系结构已启用。
现在您的主项目已配置为针对 openSUSE 12.2、i586(和 x86_64)仓库构建软件包。
步骤 2:从 OBS 服务器导入您的项目,并使用 OBS Light 创建一个软件包
打开终端并启动 OBS Light GUI。
$ obslightgui
在 OBS Light GUI 中设置您的 OBS 服务器配置。为此,单击 文件 > OBS 服务器 > 添加现有服务器。在 预配置服务器 字段中选择 opensuse.org,并使用您在 https://build.opensuse.org/ 上的 OBS 服务器帐户中配置的登录名和密码填写 用户名 和 密码 字段。
完成操作后,单击 下一步 以验证配置。然后,系统会要求您选择服务器别名,默认情况下为 opensuse.org。您可以根据需要修改它,否则单击 完成。
在 OBSLight GUI 的项目选项卡中,单击 导入 > OBS 服务器项目 > 从列表中选择,然后选择您要导入软件包的服务器。然后单击 下一步 以验证您的选择。
注意:服务器显示其别名。如果您在 OBSLight 中配置服务器时更改了默认别名,则可能会有所不同。无论哪种方式,请选择您之前定义的别名。
现在我们将选择要导入的项目。在本实验中,我们使用主项目,这是所有 OBS 用户所需的唯一项目。在 筛选 字段中,键入您为 OBS 服务器定义的用户名,以便轻松找到您的项目。选择它,然后单击 下一步。
选择目标和您想要构建的体系结构。在本例中,选择 openSUSE_12.2,单击 下一步。选择 i586 作为体系结构,然后单击 下一步。选择您的项目别名,然后单击 验证
完成操作后,选择 创建新软件包,然后单击 下一步。填写如下表单,然后单击 完成
现在您的项目已导入,并且已创建软件包。
在您的软件包源代码中打开一个终端。单击 软件包源代码 选项卡中的 打开终端。
步骤 3:编辑您的 spec 文件和您的源代码
注意:本节中的键盘键为 vi,颜色为绿色。
在打开的终端中键入以下命令
$ touch Makefile.am $ mkdir src $ cd src $ touch helloworld.c Makefile.am
在您的软件包终端中,编辑 helloworld.c 文件
$ vi helloworld.c
i
复制粘贴以下行
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("Hello, world\n");
return EXIT_SUCCESS;
}
保存并退出
<esc>
:wq!
$ cd ..
运行 autoscan 脚本以生成未来 configure.ac 文件的模板,该模板是生成 configure 脚本所必需的。
$ autoscan $ vi configure.scan
i
将其修改为如下所示
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([helloworld], [1.0], [n.zingile@gmail.com]) AC_CONFIG_SRCDIR([src/helloworld.c]) AC_CONFIG_HEADERS([config.h]) # Init automake AM_INIT_AUTOMAKE([foreign -Wall -Werror]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. AC_CHECK_HEADERS([stdlib.h]) # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT
保存您的更改并将 configure.scan 文件重命名为 configure.ac 文件
<esc>
:wq!
$ mv configure.scan configure.ac
编辑文件 Makefike.am
$ vi Makefile.am
i
复制粘贴以下行
SUBDIRS = src
保存您的更改并退出 vim 编辑器
<esc>
:wq!
编辑文件 src/Makefile.am
$ vi src/Makefile.am
i
复制粘贴以下行
bin_PROGRAMS = helloworld helloworld_SOURCE = helloworld.c
保存您的更改并退出 vim 编辑器
<esc>
:wq!
为了避免手动运行不同的工具(autoconf、automake、libtool),我们将使用 autogen 脚本来准备整个项目进行构建。从官方网站将 autogen 脚本下载到您的软件包目录
$ wget http://sourceforge.net/projects/buildconf/files/autogen/2009.12.23/buildconf.2009.12.23.tar.gz $ tar xvzf buildconf.2009.12.23.tar.gz $ cd buildconf $ mv autogen.sh .. $ cd .. $ rm -rf buildconf*
运行 autogen 脚本以生成您的 configure 脚本和 Makefile.in 文件
$ ./autogen.sh --verbose
运行 ls 命令以查看您的软件包目录中的文件。
$ ls
您应该在您的软件包目录中看到以下文件
aclocal.m4 autogen.sh autoscan.log config.h.in configure.ac depcomp install-sh Makefile.in README AUTHORS autom4te.cache/ ChangeLog configure COPYING INSTALL Makefile.am missing src/
验证您的 src 目录中的文件
$ ls src
您应该在您的 src 目录中看到以下文件
helloworld.c Makefile.am Makefile.in
现在我们将文件压缩到 tar.gz 存档中。tar.gz 存档版本必须与您将在 spec 文件中定义的版本兼容。我们将使用版本 1.0 作为 helloworld 软件包的版本。
$ mkdir helloworld-1.0 $ mv !(helloworld-1.0) helloworld-1.0 $ tar -cvzf helloworld-1.0.tar.gz helloworld-1.0 $ rm -r helloworld-1.0
您的源代码现在已准备好进行编译。现在您必须编辑 spec 文件,其中包含构建、安装和创建 RPM 软件包的所有信息。在您的软件包目录中键入以下命令
$ vi helloworld.spec
i
默认情况下,将生成一个 spec 文件模板(由 vim,从一个骨架文件)。您只需填写如下表单
# # spec file for package # # Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # Name: helloworld Version: 1.0 Release: 0 License: GPL-2.0 Summary: A simple helloworld program #Url: Group: Education Source: %{name}-%{version}.tar.gz #Patch: #BuildRequires: #PreReq: #Provides: BuildRoot: %{_tmppath}/%{name}-%{version}-build %description The helloworld program prints "Hello world" on the screen %prep %setup -q %build %configure make %{?_smp_mflags} %install %make_install %post %postun %files %defattr(-,root,root) %{_bindir}/helloworld %doc ChangeLog README COPYING %changelog
完成操作后,保存您的更改
<esc>
:wq!
返回到 OBS Light GUI 界面。您可以在 软件包源代码 字段中看到您使用命令行创建的文件。
步骤 4:通过执行本地构建来检查正常运行
使用远程 OBS 服务器构建您的软件包可能需要很长时间,具体取决于服务器 worker 的繁忙程度。为了避免等待软件包的构建结果,在将您的源代码发送到 OBS 服务器之前执行本地构建是一个很好的做法。
转到 项目文件系统 选项卡,然后单击 新建 以生成项目的虚拟文件系统(openSuse 12.2 i586)。您需要等待一段时间,OBS Light 会下载所有必需的软件包以生成您的最小虚拟文件系统。您可以单击 显示日志 在出现的小窗口中查看正在发生的事情。
要执行 helloworld 软件包的本地构建,您必须执行 helloworld.spec 文件中的不同部分。可以通过单击 OBS Light GUI 的 项目文件系统 选项卡中与 spec 文件关联的相应按钮来完成此操作。单击 %prep 以在虚拟文件系统中解压缩您的源代码。然后重新选择 OBS Light GUI 的 helloworld 软件包。您会看到 chroot jail 状态从“未安装”更改为“已准备”。还会在虚拟文件系统中创建一个与您的软件包同名的专用文件夹,以允许本地构建。您可以导航到 helloworld-1.0 文件夹以查看您的源代码。
单击 %build 以执行 helloworld 软件包的本地构建。然后单击 %install 以将软件包的二进制文件和相关文件(README、COPYING、ChangeLog)安装到虚拟文件系统的 BUILDROOT 目录中。重新选择您的 helloworld 软件包并展开 BUILDROOT 目录以验证您的二进制文件和文档的路径是否与您想要匹配的路径匹配。在 spec 文件中,我们没有在 %configure 宏中使用前缀。
%build
%configure
make %{?_smp_mflags}
%install
%make_install
%post
%postun
%files
%defattr(-,root,root)
%{_bindir}/helloworld
%doc ChangeLog README COPYING
%changelog
由于我们想要为 openSUSE 发行版构建 helloworld 软件包,因此二进制文件的默认路径为 /usr/bin,与软件包相关的文档的默认路径安装在 /usr/share/doc/packages/helloworld 中。如果您想为构建软件包的文件安装选择其他前缀,您只需将 prefix 选项添加到 spec 文件中的 %configure 宏中:%configure --prefix=/usr/local 例如,使用 /usr/local 路径作为您的前缀。
单击 %files 以创建 helloworld 软件包的 RPM 软件包和 SRPM 软件包。此命令还会清除 BUILDROOT 目录中所有已安装的文件。然后重新选择您的 helloworld 软件包并验证是否已生成 RPM 软件包,方法是展开 RPM 目录。
步骤 5:使用 OBS Light 将您的文件提交到 OBS 服务器并控制构建状态
要将您的文件提交到远程 OBS 服务器,请单击 软件包管理 选项卡中的 提交,如下所示。将出现一个窗口,邀请您对提交进行评论。填写您想要的内容。
然后,登录到 openSUSE OBS:https://build.opensuse.org/,然后单击 主项目。单击您的 helloworld 软件包。在窗口右侧,您可以看到 helloworld 软件包的构建状态。验证状态是否为 成功。您应该有一个如下所示的窗口
注意:您可能需要单击 构建结果 按钮以更新构建状态。
步骤 6:改进您的软件包并使用 OBS Light 创建补丁
现在,您的 helloworld 软件包已为 openSUSE 12.2 发行版和 i586(和 x86_64)体系结构构建。如果您想修改或改进您的软件包,您需要创建一个补丁。以下行解释了补丁您的源代码的各个步骤。
导航到如下所示的虚拟文件系统,并打开 helloworld.c 文件。文件将使用您系统的默认编辑器打开。
注意:由于 vim 默认情况下未安装在虚拟文件系统中,因此无法使用虚拟文件系统的终端编辑该文件。
进行更改
修改代码,如下所示。整个修改后的代码如下所示
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("Hello, world...");
printf("Life is beautiful.\n");
return EXIT_SUCCESS;
}
然后保存您的更改并关闭您的编辑器。
创建您的补丁
回到 OBS Light GUI 的 软件包源 选项卡并点击 新建 以生成您的补丁。 会出现一个框来设置补丁的名称。 使用您想要的名称进行编辑。 您只需要注意扩展名是 .patch。 然后确认。 它将在您的软件包源目录中创建一个补丁。 helloworld.spec 文件将自动更新,以考虑该补丁。 对于本实验,补丁命名为 beautiful.patch。
执行本地构建
执行本地构建以验证您的已打补丁的软件包是否可以本地构建。 为此,请转到 OBS Light GUI 的 项目文件系统 选项卡。 依次点击 %prep、%build、%install 和 files。 检查您的 RPM 软件包是否已创建。
提交您的更改
通过点击 OBS Light GUI 的 软件包管理 字段中的 提交 按钮来提交您的更改。 不要忘记为您的提交添加消息。 然后,通过在 OBS 服务器上查看构建状态来控制一切是否正常。
Autotools 文档
如果您想更好地了解 autotools,可以访问此页面了解 GNU 构建系统。
实验 2:在 OBS Light 服务器设备中从 git 仓库构建 Tizen.org 软件包
目标:我想使用 git-buildpackage 服务在 OBS 上创建一个软件包。
我们使用 obs-service-tar_scm 的打补丁版本
最新的 OBS Light 服务器(devel 版本 https://en.opensuse.net.cn/index.php?title=openSUSE:OBS_Light_Appliances#Devel)包含该打补丁版本。
- 在您的 OBS 服务器上配置您的 git 连接
Tizen Setup Development Environment
- 在您的本地主机上创建您的项目
osc -A https://obslightserver:444 co $PROJECT
- 创建您的软件包
cd $PROJECT mkdir tzdata
- 创建您的服务文件
cat > tzdata/_service << EOF
<services>
<service name="tar_scm">
<param name="url">review.tizen.org:toolchains/tzdata.git</param>
<param name="revision">master</param>
<param name="scm">git</param>
<param name="usegbp">yes</param>
<param name="specFile">packaging/tzdata.spec</param>
</service>
</services>
EOF
该行 <param name="specFile">packaging/tzdata.spec</param> 是可选的。 如果软件包有很多 spec 文件,则很有用。
- 提交您的软件包
osc add tzdata osc commit -m "- create tzdata package."
- 将仓库添加到您的项目元数据
(示例)
<repository name="standard"> <path project="tizen.org:Tizen:Base" repository="standard"/> <arch>i586</arch> </repository>
- 运行服务以使用来自 Git 的最新源代码上传和构建
osc service remoterun $PROJECT
注意:为了优化网络流量,您需要在您的网络上创建本地 git 克隆,以便仅获取更新。 OBS 服务器每次都会进行克隆,因此您希望流量保持在您的网络内部。



























