openSUSE:OBS Light Manual
这是 OBS Light 的命令行和图形界面的用户手册。
基本原则
操作模式
OBS Light 通过命令行 (obslight) 和图形用户界面 GUI (obslightgui) 提供。无论您使用命令行还是 GUI,您都可以访问相同的服务。
视频教程
我们创建了一系列视频,将为您提供有关如何开始使用 OBS Light 的快速概述。
它们涵盖
- 在哪里找到工具和信息
- 如何安装 OBS Light 并获取 OBS 的写入权限
- 创建您的第一个项目和导入软件包
- 在项目文件系统中工作
- 自动创建补丁并上传到 OBS
http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training
实践实验
您可以咨询实践实验来开始使用 OBS Light。这些实验为您提供有关使用 OBS Light 的相关用例。
介绍幻灯片
在 2012 年 5 月 7 日于美国加利福尼亚州旧金山举行的 Tizen 开发者大会上进行的演示文稿 [1]
逐步操作
获取 OBS 服务器的登录权限
OBS Light 是一种简化模型,用于通过 OBS 进行代码开发。它不会取代您的 OBS。
要使用 OBS Light,您需要 OBS 的登录权限。您可以通过以下两种简单方法获取 OBS 上的登录权限
- 您可以在多个“免费”OBS 上创建登录名
- MeeGo Community https://build.pub.meego.com/
- OpenSUSE https://build.opensuse.org/
- 运行您的私有 OBS 实例
- 选择一个 现成的 MeeGo OBS 设备(强烈推荐)
- 安装您的私有完整设备(仅限高级用户) 构建服务私有实例
一旦您在 OBS 实例上拥有登录名,您需要复制一个项目进行操作。您可以使用实用程序 obstag 和 obs2obscopy 以简单的方式实现这一点。请参阅 obstag。
配置您的 OBS 服务器
OBS Light 需要知道您将连接到哪个服务器。由于 OBS Light 比 osc 工具功能更多,因此需要更多信息。您将被要求提供以下信息
- OBS 服务器 Web URL
- OBS 服务器 API URL
- OBS 仓库 URL
- 登录
- 密码
- 别名(请注意,别名需要与 osc 配置中已存在的任何别名不同,并且 OBS Light 将强制执行此约束)。如果您计划使用导入/导出功能,请确保在发送和接收主机上使用相同的别名。
即使这些信息被复制到 .osrcrc 中,也必须通过 OBS Light 命令进行维护。
导入要处理的软件包
在配置一个或多个 OBS 服务器后,您可以导入一个软件包进行处理。您也可以创建空软件包(如果您愿意)。
OBS Light 将在您的工作站上创建该软件包的本地副本,这与 osc checkout 操作非常相似。与 osc 一样,OBS Light 会透明地跟踪软件包与相关 OBS 服务器之间的链接。
创建项目文件系统
加载软件包后,您可以请求创建“chroot 监狱”(此后称为“文件系统”或“项目文件系统”),软件包可以在其中构建,而不会干扰主机文件系统。创建的文件系统是特定于项目的,如果它已经存在,将不会被重新创建。在创建文件系统期间,根据构建依赖关系自动加载额外的软件包。如果您连接到远程 OBS,则此阶段可能需要一些时间,并且可能需要一些耐心。
OBS Light 尝试根据 RPM 中 .spec 文件的分析自动加载依赖项,但这并不总是可能的。用户可以选择手动将额外的文件和/或软件包添加到文件系统。
软件包可以从 OBS Light 中已存在的项目或任何 URL 导入。
将代码导入到项目文件系统
创建文件系统后,可以从软件包中导入源代码到文件系统。在此过程中,OBS Light 将加载构建该特定导入源所需的额外软件包,并创建一个特殊的 git 树,该树将监视用户所做的任何更改。
用户可以直接从 OBS Light 打开文件系统上的窗口。默认使用的控制台程序可以在 OBS Light 配置文件中定义。从那里可以直接修改文件系统中的代码,并可以根据需要尽可能多地运行本地构建。
提交更改
当用户对更改感到满意时,他可以请求将文件系统中的更改提交到软件包中。
将创建一个补丁并添加到软件包中,并由 OBS Light 配置在 .spec 文件中。
将更改保存到 OBS 服务器
一旦给定项目(可以处理一个或多个软件包)上的更改达到值得推送到 OBS 服务器的阶段,用户可以简单地请求保存项目,OBS Light 将自动提交更改。
示例:修补 MeeGo 1.2 内核软件包
步骤 1:告知 obslight 您的 OBS 帐户
## synthax: obslight server add server_alias <server_alias> login <login> password <password> api_url <api_url> repository_url <repository_url> web_url <web_url>
- server_alias
- 是您希望用于引用此服务器的别名。
- api_url
- 是 OBS 控制 API 的 URL。如果您正在使用 OBS 设备,它可能在端口 444 上。
- repository_url
- 是 OBS 软件包仓库的 URL。如果您正在使用 OBS 设备,它可能在端口 82 上。
- web_url
- 是 OBS Web 界面的 URL。
- 该项目在 ~/OBSLight/ObsProjects/MeeGo_1.2_oss/ 中创建
## synthax: obslight obsproject add <project_alias> <name_on_obs> <target> <arch> <server_alias> obslight obsproject add MeeGo_1.2_oss MeeGo:1.2:oss standard i586 <server_alias>
- project_alias
- 是您将使用 obslight 命令引用该项目(例如,MeeGo_1.2_oss)的名称。
- name_on_obs
- 是 OBS 上的项目名称(例如,MeeGo:1.2:oss)。
- target
- 是我们构建的目标(standard 是只有一个目标时的常见名称)。
- arch
- 是项目的目标架构。
- server_alias
- 是来自我们获取项目的 OBS 服务器的别名(在第一步中配置)。
步骤 3:将内核软件包添加到您的本地项目
- 该软件包在 ~/OBSLight/ObsProjects/MeeGo_1.2_oss/MeeGo:1.2:oss/kernel/ 中创建
- 在此目录中,软件包可以通过 osc 进行管理。
## synthax: obslight package add package <package> project_alias <project_alias> obslight package add package kernel project_alias MeeGo_1.2_oss
- package.spec
- 是您想要处理的软件包的名称(例如,kernel)。
- project_alias
- 是您在步骤 2 中创建的项目。
步骤 4:创建项目的文件系统
- 文件系统根目录是 ~/OBSLight/ObsProjects/MeeGo_1.2_oss/aChroot/。
- zypper 包含在文件系统中,您的 OBS 项目的仓库会自动添加。
## synthax: obslight filesystem create <project_alias> obslight filesystem create MeeGo_1.2_oss
步骤 5:将内核软件包的源代码添加到您的文件系统
- 源软件包被提取到目录 /root/rpmbuild/BUILD/kernel-X.X.X/linux-X.X.X 中。
## synthax: obslight rpmbuild prepare package <package> project_alias <project_alias> obslight rpmbuild prepare package kernel project_alias MeeGo_1.2_oss
步骤 6:在您的文件系统中随心所欲地工作
- 目录 ~/OBSLight/ObsProjects/MeeGo_1.2_oss/chrootTransfert/ 安装在 chroot 监狱中的 /chrootTransfert/ 中。
- 在 aChroot 中执行的每个脚本都存储在 /chrootTransfert/ 中,作为 runMe_YYYY-MM-DD_HHhMMmSS.sh。
## synthax: obslight filesystem enter package <package> project_alias <project_alias> obslight filesystem enter package kernel project_alias MeeGo_1.2_oss
现在您已登录到 chroot 监狱。在此示例中,我们只是修改了内核配置。
$ cp configs/kernel-x86.config .config $ make menuconfig
步骤 7:保存您的修改
有两种方法。
方法 1:创建补丁
$ cp .config config-x86 $ exit
## synthax: obslight rpmbuild createpatch <patch> package <package> project_alias <project_alias> obslight rpmbuild createpatch myKernelPatch.patch package kernel project_alias MeeGo_1.2_oss
- 补丁会自动添加到本地 spec 文件中。
- myKernelPatch.patch 会自动添加到本地软件包目录中。
- 内核软件包特定:您必须在本地 spec 文件中将补丁应用命令 %patchXXX -p1 移动到命令 cp $RPM_SOURCE_DIR/config-* . 之后
vi ~/OBSLight/MeeGo_1.2_oss/MeeGo:1.2:oss/kernel/kernel.spec
方法 2:将新的配置文件复制到 OSC 目录
$ cp .config /chrootTransfert/config-x86 $ exit cp ~/OBSLight/ObsProjects/MeeGo_1.2_oss/chrootTransfert/config-x86 ~/OBSLight/ObsProjects/MeeGo_1.2_oss/MeeGo:1.2:oss/kernel/
第8步:将您的修改上传到OBS服务器
- package commit 命令会在提交软件包到OBS服务器之前,检查文件的添加和删除。
## synthax: obslight package commit <message> package <package> project_alias <project_alias> obslight package commit "Patch kernel" package kernel project_alias MeeGo_1.2_oss
命令行
该工具集成了帮助信息。obslight help 将为您提供在线帮助。
要获取特定命令的更多详细信息,您可以输入 obslight <command> help。
$ obslight help
OBSlight:
Provides a tool to manage an OBS project on your local machine in command line
For informations, see the Help section
obslight --Help
The gui for OBSlight is obslightgui
A FAQ is available at:
*http://wiki.meego.com/OBS_Light_FAQ
For additional informations, see:
*http://wiki.meego.com/OBS_Light
Usage: OBSlight [global command] <command> [--command-options]
Type OBSlight <command> --Help to get Help on a specific command.
Commands:
server: Manage the OBS server
obsproject: Manage the OBSlight project
package: Manage the packages of OBSlight project
projectfilesystem (projectfs,filesystem,pfs) :
Manage the project filesystem of OBSlight project
rpmbuild (rb) : Manage the rpmbuild of the package into the project filesystem
man: print the man help document
global Options:
quiet (-quiet,--quiet) : run obslight in quiet mode
debug (-debug,--debug) : run obslight in debugger mode
version (--version) : show program's version number and exit
help (-h,-help,--help) : show this help message and exit
noaction: Execute command but do nothing
图形界面
通过命令 obslightgui 启动GUI。仅支持 --version 参数。
它有两个主选项卡:一个用于OBS项目,一个用于MIC项目
每个部分中的按钮适用于相对部分。当鼠标定位在按钮上时,会显示工具提示。按钮在未激活或尚未实现时会变灰。
OBS项目选项卡
此选项卡允许您管理OBS项目、其软件包(及其文件)和其文件系统。
它有3个主要区域
- OBS项目
- 软件包
- 本地文件和项目文件系统(在一个选项卡上)
项目面板
左侧面板显示本地配置的OBS项目列表以及有关所选项目的信息。
|
|
软件包面板
中间面板显示所选项目的软件包列表以及有关所选软件包的信息。
|
|
|
文件面板
文件面板有两个选项卡:本地目录和项目文件系统。
本地目录选项卡
此选项卡显示所选软件包中包含的文件列表。
| |
| 文件相关按钮 | 补丁相关按钮 |
|
|
项目文件系统选项卡
此选项卡显示所选项目文件系统的完整文件树。如果选择了软件包并已将其先前导入到文件系统,则其路径默认展开。
| ||
| 仓库相关按钮 | 文件系统相关按钮 | Rpmbuild相关按钮 |
|
|
|
MIC项目选项卡
此选项卡允许您管理MIC(MeeGo Image Creator)项目。您可以更改其架构和镜像类型,并编辑其Kickstart文件。
在左侧面板上,您可以看到MIC项目列表。单击新建以添加一个,系统将要求您输入名称,并创建一个空的Kickstart文件。
项目选项
在此选项卡中,您可以
- 更改生成的镜像类型
- fs:包含整个文件系统的目录层次结构
- livecd:适合CD的可启动镜像
- liveusb:适合USB密钥的可启动镜像
- loop:要使用loop设备挂载的(使用mount -o loop)文件系统镜像
- raw
- 更改项目的架构(仅测试了i686)
- 使用默认文件浏览器打开项目目录
- 导入Kickstart文件(这将覆盖当前文件)
- 导出当前的Kickstart文件
- 启动镜像的创建
Kickstart选项
在此选项卡中,您可以添加、删除或修改项目Kickstart文件的不同选项。这些选项记录在 此处。
- 要添加选项,请按添加按钮,并在底部的文本字段中输入完整的选项行,然后按保存。
- 要修改选项,请选择它,修改底部的文本字段并按保存。
- 要删除选项,请选择它,按删除,然后保存。
请注意,某些选项可能有别名,这些别名将出现在选项列表的同一行上。repo选项将在此处不列出,而是在仓库选项卡中。
仓库
在此选项卡中,您可以添加、删除或修改Kickstart仓库。
- 要添加仓库,有两种可能性
- 仓库来自您使用OBS Light处理过的OBS项目:按从OBS项目导入并选择项目。
- 仓库来自外部项目:按通过URL添加,系统将要求您提供URL和名称。
- 要删除仓库,请选择它并按删除。
- 要编辑仓库,双击要编辑的属性的单元格(如果它是复选框,则单击即可)。
更改将自动保存。
软件包
此处您可以编辑项目Kickstart文件的软件包列表。请注意,原始Kickstart文件的多个%package部分已合并为一个。
每个软件包都有一个包含参数,该参数指示是否应将其包含在生成的镜像中。如果未选中包含,则该软件包将在Kickstart文件中明确排除(其名称将以'-'为前缀)。
软件包组
您可以在此处编辑项目Kickstart文件的软件包组列表。目前,未对软件包组进行任何验证。
脚本
您可以在此处添加、删除或修改Kickstart脚本。
- 要添加脚本,请按添加,在底部的文本字段中编写脚本,在右侧面板中选择脚本选项,然后按保存。
- 要删除脚本,请选择它并按删除。
- 要修改脚本,请选择它,修改底部的文本字段或右侧面板中的脚本选项,然后按保存。
覆盖文件
您可以在此处添加将包含在项目镜像中的文件。
- 要添加覆盖文件,请按添加,将出现文件浏览器。浏览到您的文件并验证。然后将出现一个文本对话框,输入您希望将文件复制到镜像中的路径。tar 归档文件将在您选择的位置解压缩,而不是简单地复制。
- 要删除覆盖文件,请选择它并按删除。
实现细节
- 源文件首先复制到MIC项目的目录中
- 每个覆盖文件将显示为Kickstart文件中的%post --nochoot脚本(但将在脚本选项卡中隐藏)。
故障排除
"找不到源软件包'xxx'" 或 "问题:需要X但Y未提供"
这些消息可能出现在以下两种情况:
- 您尝试构建的软件包缺少依赖项。OBS Light无法搜索来自软件包来源的项目的外部依赖项。您需要在项目文件系统中配置额外的仓库,使用命令filesystem repositories add或GUI中的仓库相关按钮。
- 在ARM项目文件系统中,zypper或libzypp已损坏,它们看不到noarch软件包。此问题报告了zypper 1.5.3和libzypp 8.12.1。我们建议您将zypper版本更新到1.6+。为了方便起见,我们为Meego 1.2.0预构建了zypper 1.6.15和libzypp 9.10.2。
如何在ARM项目文件系统中安装zypper 1.6.15
从命令行
首先将我们的仓库添加到文件系统的zypper配置文件
obslight filesystem repositories add http://repo.pub.meego.com/Project:/OBS_Light:/Zypper/MeeGo_1.2_OSS/ "Zypper_1.6.15_backport" $ProjectName
然后chroot到文件系统并更新zypper
obslight filesystem enter $ProjectName $ zypper update zypper $ exit
从GUI
- 项目文件系统选项卡,仓库->新建,URL http://repo.pub.meego.com/Project:/OBS_Light:/Zypper/MeeGo_1.2_OSS/ 和别名“Zypper_1.6.15_backport”
- 然后项目文件系统->打开终端
# zypper update zypper # exit
"错误:架构未包含:armv8el"
您的项目文件系统的build软件包不支持armv8el构建。请考虑使用另一个版本,例如MeeGo仓库的2011.03.29。
如何在MeeGo 1.2.0项目文件系统中安装build版本2011.03.29
首先将MeeGo构建工具仓库添加到您的项目文件系统的zypper配置文件
obslight filesystem repositories add http://download.meego.com/live/Tools:/Building/MeeGo_1.2.0/ "Tools:Building_MeeGo_1.2.0" $ProjectName
然后chroot到文件系统并更新build
obslight filesystem enter $ProjectName # zypper update build # exit
"chroot:无法运行命令`sh':没有这样的文件或目录"
当binfmt_misc未正确配置或配置错误时,会出现此错误。启动qemu的binfmt配置脚本(以root身份)。
qemu-binfmt-conf.sh
如果您仍然收到相同的消息,请尝试以下操作(以root身份):禁用binfmt arm目标
echo -1 > /proc/sys/fs/binfmt_misc/arm
选择您的qemu二进制文件
ARM_BINFMT=`which qemu-arm`
测试
echo $ARM_BINFMT /usr/bin/qemu-arm-binfmt
启用您的binfmt arm目标
echo ":arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:$ARM_BINFMT:P" > /proc/sys/fs/binfmt_misc/register
更多信息
gnomekeyring.IOError
此错误出现在Ubuntu上,当从没有图形环境的控制台运行obslight时。目前,唯一的已知解决方案是从图形环境(例如Gnome)运行obslight。
"sudo:抱歉,您必须有一个tty才能运行sudo"
如果sudo配置文件的requiretty选项已设置,此消息可能会出现在日志中。编辑/etc/sudoers并注释掉以下行
Defaults requiretty
测试
基础设施
您可以在 OBS Light Git仓库 中找到一些用于 Vagrant 和 Veewee 的配置文件。使用它们,您可以构建参考虚拟机(Fedora 16、openSUSE 12.1、Ubuntu 11.10和12.04)并在其上运行测试套件。
- 复制基本虚拟机
- 将测试脚本和相关文件复制到共享文件夹
- 运行虚拟机
- 通过SSH在虚拟机内运行测试脚本
- 从共享文件夹获取结果
- 销毁(或在发生故障时停止)虚拟机
完整的过程在 README 中进行了说明。
测试场景
目前我们只提供一个测试场景
- 安装OBS Light
- 配置服务器
- 导入项目
- 创建项目文件系统
- 导入一些软件包(vim、tzdata、fastinit)
- 执行这些软件包的准备步骤
- 构建这些软件包的RPM
此场景在shell脚本中实现,此处 可用。






