http://jianlee.ylinux.org/Computer/Server/obs_use_of_osc.html 

使用 OSC 命令行

by Jian Lee


参考 简介 简单使用 Webclient 界面 使用 OSC 上传 srpm osc_add_srpm 批量提交



参考

  • Build Service/Tutorial - openSUSE (中文)

简介

OSC 使用 OBS 系统的一个 Python 语言编写的命令行接口程序,类似与 SVN 的操作,很多时候比起 WebClient 方式访问 OBS 系统更方便。

简单使用

假设我用 jianlee 的用户名在一个 OBS 服务器上注册了帐号,密码是 “ffffff” (六个f)。这里我用自己建立的 OBS 服务器。接口如下:



http://172.16.70.28:81/ webclient 接口 http://172.16.70.28:82/ frontend 接口(即 api) http://172.16.70.28:83/ download 接口



和 openSUSE 提供的 OBS 服务接口对于关系如下(后面所有实例,如果您想使用 openSUSE 的编译服务,就把对于的接口换成 openSUSE 的):



http://172.16.70.28:81/ ==> https://build.opensuse.org/ http://172.16.70.28:82/ ==> https://api.opensuse.org/ http://172.16.70.28:83/ ==> http://download.opensuse.org



以下示例已我建立的实验环境为基础。

Webclient 界面

用 webclient 创建 project

webclient 方式最简明,所以我们第一步访问 http://172.16.70.28:81/ 。使用 jianlee 用户登录,创建名为 home:jianlee 的 project 。(通常其他不已 home 开头的 project 没有创建权限)

添加一个 Repository (详见创建OBS服务器部分)

在 webclient 上创建软件包,添加文件都很直观,此处不赘述!

使用 OSC

checkout 项目

使用 OSC,首先要 checkout 项目到本地:



# osc checkout home:jianlee
A    home:jianlee
A    home:jianlee/obs-server
# ls
home:jianlee



注意 : 第一次运行 osc 命令,会创建一个默认的 ~/.oscrc 文件,但是默认的 apiurl 参数指向 https://api.opensuse.org ,我们终止 osc 的执行,修改 apiurl 为 "http://172.16.70.28:82/"。再次执行,会询问用户名和密码。输入即可。如果我们再次打开 ~/.oscrc 文件查看,会看到这些信息:



[http://172.16.70.28:82]
user=jianlee
pass=ffffff



现在 osc 当前目录创建了一个 "home:jianlee" 目录,进去看看(因为我刚才在 webclient访问的时候,顺手就创建了一个包 obs-server,所以这里会看到这个目录。:-)):



# cd home\:jianlee/
# ls
obs-server
# find
.
./.osc
./.osc/_project
./.osc/_packages
./.osc/_apiurl
./obs-server
./obs-server/.osc
./obs-server/.osc/_osclib_version
./obs-server/.osc/_project
./obs-server/.osc/_package
./obs-server/.osc/_files
./obs-server/.osc/_apiurl



创建和上传包
osc meta pkg -e project package

进入 "home:jianlee" 目录,

这里的例子以创建一个 obs-server 编译安装依赖的一堆包为例,刚才我在 webclient 里创建了 obs-server 包,编译安装 obs-server 还要其他的包,比如 lighttpd, rails等。

创建一个 lighttpd 包



# osc meta pkg -e home:jianlee lighttpd



现在 osc 会用一个打开编辑器让你编写一个配置文件。选用何种编辑器可以在 osc 配置文件里配置。默认使用 VI。

我编写过的文件内容大致如下:



<package name="lighttpd">

  <title>A Light weight web server</title>

  <description>
A light weight web server,
obs-server need it.
  </description>

  <person role="maintainer" userid="jianlee"/>
  <person role="bugowner" userid="jianlee"/>
  <url>http://www.lighttpd.net/</url>
...
</package>



编辑完保存退出,现在我们还看不到刚才创建的 package,用 osc 更新一下目录:



# osc up



现在可以看到 lighttpd 目录了。

拷贝文件到 package 目录

现在进入 lighttpd 目录,

拷贝一些需要的文件到这个目录里。就是 RPM 编译目录中 SOURCES 和 SPECS 目录中的文件。一定要有这个 spec 文件!



[root@localhost lighttpd]# ls
favicon.ico                      lighttpd-1.4.20-defaultconf.patch  lighttpd-mod_geoip.c
index.html                       lighttpd-1.4.20-initinfo.patch     lighttpd-mod_geoip.txt
light_button.png                 lighttpd-1.4.22.tar.bz2            lighttpd.spec
light_logo.png                   lighttpd-empty.png                 php.d-lighttpd.ini
lighttpd-1.4.18-mod_geoip.patch  lighttpd.logrotate



使用 'osc add' 添加文件到 package 项目

拷贝完文件后,更新这些数据到项目中。



[root@localhost lighttpd]# osc add *
A    favicon.ico
A    index.html
A    light_button.png
A    light_logo.png
A    lighttpd-1.4.18-mod_geoip.patch
A    lighttpd-1.4.20-defaultconf.patch
A    lighttpd-1.4.20-initinfo.patch
A    lighttpd-1.4.22.tar.bz2
A    lighttpd-empty.png
A    lighttpd.logrotate
A    lighttpd-mod_geoip.c
A    lighttpd-mod_geoip.txt
A    lighttpd.spec
A    php.d-lighttpd.ini



提交项目

上面命令 (osc add ) 把这些文件标记为可提交状态。现在提交:



# osc commit



填写完一些信息后,osc 就开始提交了。

* 添加仓库


现在我们要选择仓库

获取仓库列表



# osc ls GTES:11.3 deleted home:jianlee



osc 编辑 project 配置



# osc meta prj -e home:jianlee



我们任何时候都可以这样编辑 project 配置

现在的样子:



<project name="home:jianlee">
  <title>Jian Lee's home project</title>
  <description>Jian Lee's home project on GTES</description>
  <person role="maintainer" userid="jianlee"/>
  <person role="bugowner" userid="jianlee"/>
  <repository name="standard">
    <path project="GTES:11.3" repository="standard"/>
    <arch>x86_64</arch>
    <arch>i586</arch>
  </repository>
</project>



注意:repository="standard"用于将来的扩展(仓库的分支)。

上传 srpm

前提:创建好 project,使用 'osc checkout' 更新到本地。假设我们的 project 是 GTES:11:U4,现在处于 GTES:11:U4 目录。

处理一个软件包简单流程是:

  • 创建 package ,编辑它的信息 : osc meta pkg -e GTES:11:U4 package
  • 进入 package 目录: cd package
  • 拷贝需要的文件
  • 添加文件: osc add *
  • 提交:osc commit -as

如果要处理多个软件包就需要再次重复这个流程,可是很多时候我们需要直接提交很多 srpm 包,我们只是想利用 obs 的编译环境编译一下它们,如果按照上面的方法就非常麻烦了。

对于批量提交最主要的麻烦 'osc meta pkg -e' 阶段需要我们手动干预,如果能变成自动的就 OK。

osc 对 meta 命令提供了一个 '-F' 选项可以提交指定的文件为软件包描述信息,我们只要根据每个软件包自身的信息自动创建一个描述文件就可以了,我写了一个脚本完成这个任务。

osc_add_srpm

前提:安装 osc 包,下载 osc_tools 到本地, 处于 project 目录下。


/path/to/osc_add_srpm -u Your_username Your_srpm



批量提交

有了 osc_add_srpm ,批量上传就简单了。