openSUSE:OSC
简介
osc是用 Python 编写的,除了命令行界面之外,它还提供了一个 Python 模块供其他 Python 程序使用。
osc是一个具有命令行界面和类似于 Subversion 的网络行为的客户端。它作为构建服务源代码仓库组件的客户端,用于编辑元数据或查询构建结果。
下载和安装
osc 包含在最新版本的 openSUSE Linux 发行版中。只需运行
sudo zypper in osc
即可获取它。
较新的版本(如果您认为有必要),可以在 openSUSE 工具仓库 找到,那里还有针对各种其他发行版(SLES、Fedora、Mandriva、Debian 等)的软件包。
如果您想查看更近期的代码,可以使用 Git
git clone git://github.com/openSUSE/osc
为了使 osc 正常工作,需要 python-xml,如果它没有通过 zypper 自动安装(例如,直接通过 git 路由),您可能需要在之后手动安装它。
为了在本地构建软件包,请安装
sudo zypper in build rpm-build quilt
逐步指南
身份验证
您需要一个 openSUSE 帐户用于 https://build.opensuse.org。这是所有这些站点的相同帐户
如果您已经拥有其中一个站点的帐户,可以使用它。如果没有,您需要通过单击注册或在 idp-portal 中创建帐户。
osc 会在您第一次使用它时询问您的凭据,并将它们存储在 ~/.config/osc/oscrc 中。
保护您的~/.config/osc/oscrc文件和文件系统。 (在旧版本中,它存储在~/.oscrc)
python-keyring应该已经由 openSUSE 提供并与 osc 一起安装(osc rpm 包推荐),否则您可能 手动安装它(最好在第一次运行 osc 之前)或 添加合适的仓库 之后再安装osc软件包。
如果您想使用密钥环,并且您已经是 osc 用户,则需要从 ~/.config/osc/oscrc 中删除您的凭据部分,并取消注释文件 ~/.config/osc/oscrc [general] 部分中的行 #use_keyring = 1(取决于您的 osc 版本)。
下次运行 osc 时,系统会再次提示您输入凭据。
有报告称,使用python-keyring和上述 ~/.config/osc/oscrc 中的更改,与 Gnome 密钥环的身份验证不起作用。在这种情况下,卸载python-keyring并仅添加行gnome_keyring=1代替keyring=1到服务器部分有所帮助。
推荐的初始配置
如果您是 osc 的新手,请尝试此配置。
编辑文件~/.config/osc/oscrc找到、取消注释并设置这些值
# compile with N jobs (default: "getconf _NPROCESSORS_ONLN") build-jobs = 2
# extra packages to install when building packages locally (osc build) # this corresponds to osc build's -x option and can be overridden with that # -x can also be given on the command line to override this setting, or # you can have an empty setting here. extra-pkgs = gdb less mc strace tmux tree unzip vim
[https://api.opensuse.org] user = your_user pass = your-password email = your@mail.com aliases = obs
编辑您的 ~/.bashrc,将其作为最后一行添加
export COMP_WORDBREAKS=${COMP_WORDBREAKS/:/}
编辑您的 ~/.alias(此文件可能不存在,只需创建它),添加这些别名
alias oscb="osc build --ccache" alias oscsd="osc service runall download_files"
使用示例
以下显示了入门使用示例。请注意 构建服务教程,它提供了更系统的介绍。
显示命令的使用信息
osc help osc help <cmd>
列出服务器上现有的内容
osc ls # list projects osc ls Apache # list packages in a project osc ls Apache subversion # list files of package of a project
检出内容
osc co Apache # entire project osc co Apache subversion # a package osc co Apache subversion foo # single file
更新工作目录
osc up
osc up <directory>
osc up * # from within a project dir, update all packages
osc up # from within a project dir, update all packages
AND check out all newly added packages
上传更改的内容
osc ci # current dir osc ci <file1> <file2> # only specific files osc ci <dir1> <dir2> ... # multiple packages osc ci -m "updated foobar" # specify a commit message
查看提交日志
osc log
显示状态(哪些文件已在本地更改)
osc st osc st <directory>
如果无法自动合并更新,则文件处于“C”(冲突)状态,冲突用特殊的 <<<<<<< 和 >>>>>>> 行标记。手动解决问题后,使用
osc resolved <file>
标记要在下一次“checkin”中添加或删除的文件
osc add foo osc rm foo
添加本地副本中的所有新文件并删除所有已消失的文件。
osc addremove
生成差异以查看更改
osc diff [file]
显示软件包的构建结果
osc results osc results <platform>
显示软件包的日志文件(您需要位于软件包目录中)
osc buildlog <platform> <arch>
显示 .repo 文件的 URL,这些文件是 Yum/YaST/smart 的软件包源
osc repourls [dir]
为软件包的所有仓库/架构触发软件包重建
osc rebuildpac [dir]
在您的本地平台上构建软件包
osc build <platform> <arch> <specfile> [--clean|--noinit|...]
显示配置的平台/构建目标。
osc platforms [project]
显示您的项目的可用构建目标。
osc repos
显示元信息
osc meta prj <project> osc meta pkg <project> <package> osc meta user <username> osc meta prjconf <project>
编辑元信息。如果不存在,则创建新的软件包/项目。它将打开一个编辑器,其中包含原始 XML 元数据。如果您不确定 XML,可以使用 Web 客户端 代替。
osc meta prj -e <project> osc meta pkg -e <project> <package> osc meta prjconf -e <project>
(项目配置 (prjconf) 可能是空的。它仅在特殊情况下才需要。)
使用 spec 文件中的元数据更新软件包元数据
osc updatepacmetafromspec <dir>
下载 spec 文件中通过源 URL 引用到的文件。
osc service runall download_files
软件包跟踪
使用 osc 还可以以类似于 svn 的方式管理软件包。此功能称为软件包跟踪,必须在 ~/.oscrc 的 [general] 部分中启用
# manage your packages in a svn like way do_package_tracking = 1
将新软件包添加到项目
osc mkpac <package>
将已存在的目录及其文件添加到项目
osc add <directory>
从项目中删除软件包及其文件
osc deletepac <package>
上述所有命令仅更改您的本地工作副本。要将您的更改提交到构建服务,您必须提交它们 (osc ci -m <message>)。
status 命令还显示软件包的状态
osc st
文档
除了 osc 的手册页之外,还有一个 备忘单 也是可用的。
如何修复一个非工厂软件包?
检出您选择的软件包
修复它,并在您验证软件包构建后提交它
通过插件扩展 osc
osc 是 可扩展的。您可以修改行为或编写自己的命令。有关更多信息,请参阅 openSUSE:OSC plugins。
配置迁移
版本 0.114 对配置文件处理进行了一些清理,因此一些选项现在已被弃用,即
- apisrv
- scheme
添加了一个新选项
apiurl = <protocol>://<somehost> # use this as the default apiurl. If this option isn't specified the default (https://api.opensuse.org) is used.
到目前为止,osc 仍然为这些选项保留了一些向后兼容性,但将来可能会删除它,因此如果仍然使用其中一个选项,它会发出弃用警告。新的配置方案如下所示
# entry for an apiurl [<protocol>://<apiurl>] user = <username> password = <password> ...
在开始迁移之前,请保存您的 ~/.oscrc 文件!
如果迁移由于任何原因失败,请随时给我发送电子邮件或在 opensuse-buildservice 邮件列表中或在 #opensuse-buildservice irc 频道中提问。
迁移情况 I (仅 apisrv)
apisrv 选项用于指定默认的 apihost。如果未指定 apisrv,则使用默认值 ("api.opensuse.org")。当前的 [general] 部分如下所示
[general] ... apisrv = <somehost> # or apisrv = <protocol>://<somehost>
apisrv 已被新的 apiurl 选项取代,如下所示
[general] ... apiurl = <protocol>://<somehost>
如果 apisrv 没有 "<protocol>",则使用 https。确保所有 apiurl 部分都具有上述新格式。之后可以删除 apisrv。
迁移情况 II (仅 scheme)
当前的 [general] 部分如下所示
[general] ... scheme = <protocol>
这意味着所有不具有上述新格式的 apiurl 部分,例如
[<somehost>] user = <username> password = <password> ...
必须转换为
[<protocol>://<somehost>] user = <username> password = <password> ...
之后,可以从 [general] 部分删除 scheme 选项(可能某些部分已经具有正确的格式)。
迁移情况 III (apisrv 和 scheme)
当前的 [general] 部分如下所示
[general] ... apisrv = <somehost> scheme = <protocol>
如果所有 apiurl 部分都具有上述新格式,则可以删除这两个选项。因此,只需调整所有 apiurl 部分(可能某些部分已经具有正确的格式)。
构建软件包
构建后端
在内部,osc 使用 obs-build 在隔离的环境中构建软件包。默认情况下,软件包使用 chroot 环境构建,该环境提供快速的构建速度。
您可以使用 --vm-type=<TYPE> 参数选择要使用的 vm-type。
osc build --vm-type=kvm
可用的环境是
- chroot
- LXC
- kvm
- qemu
- docker (rootful)
- podman (rootless)
有关更多详细信息,请参阅 obs-build 仓库 README。
使用 xen 构建 osc
您需要安装 xen 软件包和 xen 内核并启动才能继续。
要激活使用 xen 的本地构建,您必须将这些行添加到 ~/.oscrc 的 [general] 部分
build-type=xen build-device=/tmp/FILE.root build-swap=/tmp/FILE.swap build-memory=512
然后创建这两个文件
dd if=/dev/zero of=/tmp/FILE.root bs=1M count=4096 # 4GB partition for / . On big projects 8GB should be used. mkfs.ext3 /tmp/FILE.root # Hit (y) if it complains about the file not being a device node. dd if=/dev/zero of=/tmp/FILE.swap bs=1M count=512 # use other sizes as needed mkswap /tmp/FILE.swap
如果您更改了文件的大小或文件系统类型,您可能还需要更新 build-vmdisk-* 选项。
如果您想使用交叉编译功能,您必须将以下内容添加到 /etc/sysconfig/kernel
- binfmt_misc 到 INITRD_MODULES
- binfmt_misc 到 DOMU_INITRD_MODULES
- binfmt_misc 到 MODULES_LOADED_ON_BOOT
然后,您应该使用 dracut 重新创建 initrd。
重新启动后,运行 osc build。
~/.config/osc/oscrc (旧版本为 ~/.oscrc) 的配置备忘单
[general] 部分
存储
# Downloaded packages are cached here. Must be writable by you. # default: packagecachedir = /var/tmp/osbuild-packagecache
# rootdir to setup the chroot environment # can contain %(repo)s and/or %(arch)s for replacement # /<path>/%(repo)s-%(arch)s-%(project)s-%(package)s # default: build-root = /var/tmp/build-root/
API 通信
# use this API server (hostname[:port]) # (it needs a section [api.opensuse.org] with the credentials) # default: apisrv = api.opensuse.org
# use this protocol to access the API server (http or https) # default: scheme = https
API 主机
# API hosts can be referenced by aliases, e.g. 'osc -A alias ...' # List aliases for API hosts under the API host section. # https://api.opensuse.org # user=jdoe # aliases=
本地构建
# Wrapper to call build as root (sudo, su -, ...) # default: su-wrapper = su -c # no password required with: #su-wrapper = sudo #with entry in sudoers file: # <username> ALL = NOPASSWD: /usr/bin/build
# For convenience/debugging, osc adds internally vim gdb strace to # the packages installed in the build chroot if extra-pkgs is not set to: #extra-pkgs=
# build type - possibe values: # * empty -> chroot # * xen -> xen VM # * kvm -> kvm VM (testing needed) # default: not set/chroot #build-type=xen
# build-device - root filesystem to use for VM # default: not set #build-device=/tmp/FILE.root
# build-swap - swap filesystem to use for VM # default: not set #build-swap=/tmp/FILE.swap
# build-memory - amount of memory for VM # default: not set #build-memory=512
Debian 和 Ubuntu 设置
虽然 osc 包含在 Debian 和 ubuntu 的默认仓库中,但建议添加openSUSE:Tools仓库。此仓库包含 Debian 和 ubuntu 默认仓库中没有的 obs 服务。
添加openSUSE:Toolsrepo
首先,我们需要获取仓库的签名 GPG 密钥。您可以在 https://build.opensuse.org/projects/openSUSE:Tools/signing_keys 下载它
如果,例如,下载的密钥位于~/Downloads/openSUSE_Tools.gpg,运行
sudo gpg --dearmor -o /etc/apt/keyrings/openSUSE_Tools.gpg ~/Downloads/openSUSE_Tools.gpg
我们可以创建一个文件(以 root 身份)/etc/apt/sources.list.d/openBuildService.list并在其中放置
对于 Debian Bookworm
deb [signed-by=/etc/apt/keyrings/openSUSE_Tools.gpg] https://download.opensuse.org/repositories/openSUSE:/Tools/Debian_12/ ./
对于 Ubuntu 22.10
deb [signed-by=/etc/apt/keyrings/openSUSE_Tools.gpg] https://download.opensuse.org/repositories/openSUSE:/Tools/xUbuntu_22.10/ ./
如果您查看仓库 URL 并将其与 https://build.opensuse.org/project/show/openSUSE:Tools 上的仓库目标进行交叉引用,您可以弄清楚如何为许多不同版本的 ubuntu 和 Debian 获取软件包。
最后,我们运行(以 root 身份)
apt update
告诉 apt 我们的新仓库源。
安装和设置
您可以通过运行(以 root 身份)安装 osc
sudo apt install osc
osc build可能无法运行,抱怨缺少Build.pm。这似乎发生在您不使用openSUSE:Tools版本时。我们可以通过设置环境变量来修复它
export PERL5LIB=/usr/lib/obs-build
当运行该命令时,构建应该可以正常工作。您可以将其添加到您的.bashrc如果您希望它在 shell 会话之间保持不变。