|
完整版本在: http://p.marguerite.su
本来这系列文章准备在我完成中文维基的翻译工作后来提纲挈领的写, 但是前面有看到大局感缺失的 peng yang 居然已经抢先写了半瓶水的出来。为了不误导群众, 我只好写个四分之三瓶的水。
目前的构思是:
- OBS 的注册与安装
- OBS 的常用命令
- RPM 包的构建
- 打包调试
- 提交给发行版
其中 RPM 包的构建由于涉及到比较难的 spec 文件的编写, 会花两到三篇的篇幅来讲, 打包调试由于有好多的常见错误要列示, 会花两篇的篇幅来讲, 其他都是一篇, 总之先凑个 10 篇左右的文章系列, 争取让大家在看到第四到五篇的时候能够真正从头到脚打包出一个打包者是自己的程式。
什么样的基础能看懂呢? 网路上好多号称“零基础”,“无痛”做某事的教学,到头来都是杀人又放血,只留一身五花膘。但学姐的不一样啦, 你只要有一颗折腾的心就够了。和其他人不一样,学姐可以承认自己也是傻瓜过来的,甚至现在在某些问题上还是傻瓜,所以教学里会非常的照顾这些同病相怜的傻瓜。非要说需要什么前提条件呢, 我就试着写一点吧。
- 你的发行版要是 openSUSE。(简单吧?)
- 你要知道在文本编辑器和命令行里按 tab 是自动补全或者空四个格子。(这其实是帮6个月后的你的啦, 是让你的代码格式更易读,免得之后自己都看不懂了。)
没了。其他的我用到都会教, 有进阶教学我会 point 你过去, 感兴趣就去学, 不感兴趣也不影响。
好了, 现在让我们开始 10 次围剿的第一次。(本来想说万里长征的第一步的, 但想到那是国军大大的 failure, 于是就...)
- 什么是 openSUSE Build Service?
openSUSE Build Service (缩写:OBS) 是 openSUSE 的软件打包服务平台, 更多看维基: 编译服务专题
最近“软件中心”这个概念炒的非常火,原因是国人用新手的思维和序员的专业完成的“深度软件中心”登上了OMG!Ubuntu!, 实际上 SUSE 在至少5年前就已经有了很可用的系统中心 YaST 了。当用 YaST 安装软件的时候,有没有想过那些软件包的“鸡/蛋”问题? OBS 就是下蛋的母鸡。
这个不是我不想写,是真的没什么写的,要说支付宝我还能写个注册教学, OBS 不比注册 Google 帐号难, 除非你不懂英文, 大陆小学就开始教的东西, 如果没有学到的话那你肯定也没有学到过算机啦。
一张图解决一切
这个服务是很重要的, 但好多人都不知道, 前面论坛有看到甚至 SUSE China 的人都把 hermes # opensuse.org 当作是个活人, 不知道耶诞节有没有给它发邮件要礼物速运地址哈哈。
它的翻译应该是 爱玛仕,但是这是个奢侈品品牌(学姐当然是很爱的啦), 容易搞错, 所以我就用了“大戟士”的翻译,不知道来自哪里,但感觉像是个“卫兵”的概念, 实际上 hermes 做的也是这个。
任何一个开发者都会有一个邮件通知系统, 这好理解吧。但是要是你上个线都给你发邮件就太 spam 了。大戟士就是这样一个卫兵, 你告诉它什么样的邮件我需要收, 收信的频率是多快。
配置在 https://hermes.opensuse.org, 我之所以提是因为这个地址没有国人知道, 也不会想到去放狗搜。
这里学姐就要开始使用命令行了。(进入命令行的方法是打开 Konsole) 将要使用的是 YaST 的后端 zypper。YaST 的图形界面:YaST 管理员设定 - 软件套件库 也可以做。
- sudo zypper ar -f http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_12.1/ openSUSE:Tools:openSUSE_12.1
复制代码
使用这个命令添加 openSUSE:Tools 源,里面有最新的 OBS 命令行客户端。我是 openSUSE 12.1, 其他发行版和 openSUSE 版本可以看 选择发行版,超多支持的。OBS 暂时是没有本地图形客户端的,唯一的图形客户端就是刚才你注册帐号的那个网页客户端。但是网页比命令行有些不好, 这些慢慢告诉你们。
使用这个命令来安装 OBS 命令行客户端 osc,出现的安装依赖提示输入 y 确认就好。
Tips 0: openSUSE 发行版下面,别的 Linux 学姐没用过不好说, 任何的命令行指令的帮助,都可以通过指令本身 + "--help" 选项看。而且,Tips 来了,可以“分层”看指令的某个选项怎么用,别笑,你们眼中的神秘打包侠 “逍遥游” 就不知道。举例:
- //查看 zypper 指令的帮助
- zypper --help
- //查看 zypper ar 选项的用法
- zypper ar --help
复制代码
为什么要教大家这个? 以后你某个 osc 指令不会用,也可以这样子来看用法呀!
一旦你注册了 OBS, 你就会有一个 home:MargueriteSu 这样的软件工程在 OBS 上, 这就是我们打包者俗称的私人车库。
OBS 对于私人车库的限制是很少的, 你可以在它下面打包违反版权的软件, 只是提交给 openSUSE:Factory 工厂版的时候会被拒绝, 但即使拒绝也不会远程删除你的包。
另外不要初生牛犊不怕虎的去直接提交到工厂版, 首先工厂版的提交是有一定顺序和规则的, 毕竟工厂版就是下一个稳定版本的 openSUSE。这些学姐会在这个系列的最后专门讲这个环节; 其次, 一旦开通了 OBS,就要有承受 Bug Reports 的准备, 如果 auto-build team 的人手一松放你的不完美软件包通过, 那你未来的一段时间可能会在 Novell Bugzilla 收到很多这样的 Bug Reports:
下面讲怎么在本地初始化你的打包环境:
- 首先你需要一个项目文件夹,在你的 home 下面新建一个 Projects 吧。
- mkdir Projects
- cd Projects
复制代码
- 接着用下面命令撷取你的私人车库到本地, 当然现在它是空的。
懂 Subversion 版本管理系统 的人可能会有优势, 因为 osc 好多指令都是 fork 自 svn 那边的。
这会在 Projects 文件夹下面创建一个 home:MargueriteSu 的文件夹。如果你车库里有软件包的话,还会创建的软件包单独的子文件夹。这就是 OBS 的树形文件结构(Hierachy,文件层级标准)
Tips 1: 熟练了之后, 有些时候你的私人车库比较庞大, 你只想改动其中某一个软件, 那么可以这么做:
- osc co home:MargueriteSu application
复制代码
- 取回了你的私人车库之后, 你要设定下你要为哪些发行版打包。
可以像 peng yang 那样在这个界面设定, 比较直观。
但是我们既然已经在命令行下面了,为什么要再去开一个浏览器呢?
用指令可以这样做:
- osc meta prj -e home:MargueriteSu
复制代码
这是 osc 的 meta 元标签指令, 元标签就是你的东西的名字啊描述啊这些东西。prj 表示你编辑的是工程的元标签。(同样的还有 pkg 表示你编辑的是软件包的元标签)-e 表示 edit 编辑。(同样的还有 -c 表示创建, -d 表示删除,除非注销你的 Novell 帐号, 不然你的 私人车库主文件夹 home:MargueriteSu 是不可删除的,你那么做会清空它而不是删除它)更多的命令可以用 Tip0 教你们的方法看帮助:
接着你需要学习下使用 vi 或 vim 命令行编辑器, 前者是后者的简化版本, 我一般用它, 因为我们要做的事情用它已经足够了,而且可以少输入一个字母,因为懒嘛。
你不要去学高难度的使用, 只需要知道:
- 按“i”进入编辑模式, 按 Esc 退出。
- 一般的 Ctrl + C/V 复制粘贴是用不了的,要用鼠标画了右键。
- 在非编辑模式,按":wq"是保存退出,":q!"是退出。
- 在非编辑模式,"j"是下一行,"k"是上一行,PgUp 是上一页,PgDn 是下一页。
因为上面我运行的 osc 命令会给你打开一个远程元数据文件来编辑。- // 这就是预设的样子,名字什么都帮你添好
- <project name="home:MargueriteSu">
- <title>MargueriteSu's Home Project</title>
- // 你需要编辑下你的私人车库描述,写一些煽动的 slogan 上去, 比如“Linux’ll set you free!”之类的。
- <description></description>
- // 这是表示车库权限设置的,最重要的是 bugowner,它看上去像是用户向谁报 bug report,实际上决定了这个源到底属于谁(曾经想删掉自己的表示压力好大); maintainer有提交包/审核包和在该源下打包的权力。可以添加别的用户过来帮你打工。
- <person userid="MargueriteSu" role="bugowner"/>
- <person userid="MargueriteSu" role="maintainer"/>
- //这个一般是不动的,除非你像我一样 800 年不用 i586, 可以改成 <disable>i586</disable>, 但上游有些不懂你为 openSUSE 省电省资源的审核者会不问原因的要求你打开它,一般我都不甩的。
- <build>
- <enable />
- </build>
- //这个一般也是不动的,除非你自己想 debug 你自己的软件来给上游软件开发者报 bug report。
- <debuginfo>
- <disable/>
- </debuginfo>
- //按照这个格式添加 openSUSE_Factory, openSUSE_Tumbleweed, openSUSE_11.4, SLE_11_SP1, SLE_11, SLE_10_SDK,常用的源缩写我都写在这里了,写错会无法保存。
- <repository name="openSUSE_12.1">
- //这是你车库里的软件打包前的预编译环节要求的依赖包的来源。"standard" 一般没问题,有时候 openSUSE_Factory 的这个字节可以用 "snapshot"。
- <path repository="standard" project="openSUSE_12.1/>
- //这是你车库里的软件最终被打包的 CPU 架构,如果你没下载错,是 x86_64 的。这也是我为什么禁用 i586 的原因, 因为没人用。但是不要在这里改,用全局设定。修改方便。
- <arch>i586</arch>
- <arch>x86_64</arch>
- </repository>
- </project>
复制代码
之后用刚教你的 ":wq" 保存,你会发现命令行闪了几个命令就空了,没关系它已经上传到服务器去了。你可以在上面的第三张图的位置看到它们。
Tip2: 可能有的学弟学妹已经注意到了学姐的截图里面,还有 home:Marguerite:gimp-2.7 这样的 sub-project, 觉得好酷,是这样实现的,看这张图,或者用下面的命令:
- osc meta prj -c home:MargueriteSu:gimp-2.7
复制代码
同理可推, checkout 的时候,也可以:
- osc co home:MargueriteSu:gimp-2.7 gimp
复制代码
以上我所有的指令都是用我自己的 私人车库 为例子做的,你们如果照抄的话, 除了 osc co 能正常使用之外, 其它都不行的。但出错了是怎样我还真的不知道,因为 osc 首次使用会在命令行下提示你输入你注册的 OBS 用户名和密码。这个也是可以改的,在你的 /home/usrname/.oscrc 里面。明文存储,储存文明。
好了,玛噶学姐带你学 OBS 的第一篇:注册与安装 就结束了。那么,再会啦~么么~
Marguerite |
|