OSC简介

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

参考

简介

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 ,批量上传就简单了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OSC(Open Sound Control)是一种通信协议,用于在音频、音乐和多媒体应用程序之间传输数据。以下是使用C语言编写OSC协议的示例代码: 首先需要定义OSC消息的结构体,包括地址、参数类型和参数值: ```c typedef struct osc_message { char *address; char *types; void **arguments; } osc_message; ``` 接下来,可以使用套接字(socket)来发送OSC消息。以下是一个简单的OSC消息发送函数: ```c #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define OSC_PORT 9000 void send_osc_message(osc_message *message, char *ip_address) { int sockfd; struct sockaddr_in servaddr; sockfd = socket(AF_INET, SOCK_DGRAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr(ip_address); servaddr.sin_port = htons(OSC_PORT); sendto(sockfd, message, sizeof(*message), 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); close(sockfd); } ``` 此函数将OSC消息打包并发送到指定的IP地址和端口。可以使用以下代码创建并发送一个简单的OSC消息: ```c osc_message message = { .address = "/test", .types = "s", .arguments = (void **)&("Hello, world!") }; send_osc_message(&message, "127.0.0.1"); ``` 这将发送一个地址为“/test”的OSC消息,参数类型为字符串(“s”),参数值为“Hello, world!”到本地主机(127.0.0.1)的端口9000。 以上是一个简单的OSC协议C语言编写示例,供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值