NEWS

新闻

了解openKylin最新资讯,关注社区和产品动态。

NEWS

Learn about the latest news.

【小白课程】一文教你调试OKBS编译错误

2024-05-21 14:52:27
OKBS(openKylin Build Service),软件包编译发布平台,提供openKylin X86、RISC-V、RAM架构软件包的同源编译、管理及软件源自动更新发布等功能,简化代码仓维护者对软件包编译、管理、发布的工作。未来软件包编译发布平台还将支持更多的体系结构,即使openKylin社区开发者没有自己的硬件,也能编译发布出同源代码仓各体系结构的二进制软件包。

社区开发者在OKBS上编包时,偶尔遇到依赖冲突,又没有显示冲突的根源,或者遇到了与本地编译不一样的问题,这时候就需要开发者搭建编译环境来调试,下面就教大家如何正确调试OKBS编译错误。

1.下载chroot

进入build任务页面(以下为选取举例)

openKylin(开放麒麟)


点击上图框内Architecture下的链接,这里是:https://build.openkylin.top/openkylin/nile/amd64

然后将地址栏中的build.openkylin.top替换为api.build.openkylin.top/devel

替换后为:http://api.build.openkylin.top/devel/openkylin/nile/amd64,访问该地址,信息如下:

openKylin(开放麒麟)


其中,chroot_url为这个包编译环境的下载地址。

将其下载到相同体系架构的系统中。

  • x86架构:

    http://api.build.openkylin.top/devel/openkylin/nile/amd64

  • arm架构

    http://api.build.openkylin.top/devel/openkylin/nile/arm64

  • riscv架构:

    http://api.build.openkylin.top/devel/openkylin/nile/riscv64


2.解压chroot,并且配置成OKBS平台上编译时相同的软件源

将下载的chroot压缩包以root权限解压:

sudo tar -xaf chroot-openkylin-nile-amd64.tar.gz

然后修改 chroot-autobuild/etc/apt/sources.list文件。

在OKBS编译日志的开头,将会看到如下内容:

openKylin(开放麒麟)

RUN: /usr/share/launchpad-buildd/bin/in-target mount-chroot --backend=chroot --series=nile --arch=amd64 PACKAGEBUILD-229378
Starting target for build PACKAGEBUILD-229378
RUN: /usr/share/launchpad-buildd/bin/in-target override-sources-list --backend=chroot --series=nile --arch=amd64 PACKAGEBUILD-229378 'deb http://archive.build.openkylin.top/openkylin nile main' 'deb http://archive.build.openkylin.top/openkylin nile-security main' 'deb http://archive.build.openkylin.top/openkylin nile-updates main' 'deb http://archive.build.openkylin.top/openkylin nile-proposed main'
Can't find dpkg-alter package
Overriding sources.list in build-PACKAGEBUILD-229378

将sources.list原来的内容删除,写入以下内容,和buildlog里override-sources-list的参数是对应的:

deb http://archive.build.openkylin.top/openkylin nile main
deb http://archive.build.openkylin.top/openkylin nile-security main
deb http://archive.build.openkylin.top/openkylin nile-updates main
deb http://archive.build.openkylin.top/openkylin nile-proposed main

如果要测试编译过程,则需要把src源添加到sources.list中,或者手动下载源码包到chroot中。

deb-src http://archive.build.openkylin.top/openkylin nile maindeb-src http://archive.build.openkylin.top/openkylin nile-proposed main


3.chroot到编译环境中,先把环境升级到最新

# 进入chroot环境
sudo chroot chroot-autobuild
# 更新环境
apt updateapt dist-upgrade


4.分析问题

4.1 分析依赖冲突原因

尝试安装buildlog中报错的包:

# apt install python3-aptThe following packages have unmet dependencies: python3-apt : Depends: libapt-inst2.0 (>= 1.2.28~) but 1.2.15-ok0.2 is to be installed               Depends: libapt-pkg5.0 (>= 1.2.28~) but 1.2.15-ok0.2 is to be installed    E: Unable to correct problems, you have held broken packages.

使用apt policy命令列出软件源中libapt-inst2.0的可选版本:

# apt policy libapt-inst2.0libapt-inst2.0:  Installed: (none)  Candidate: 1.2.15-ok0.2k2  Version table:     1.2.15-ok0.2k2 1100       1100 http://archive.build.openkylin.top/openkylin nile-proposed main amd64 Packages     1.2.10-ok1k1 50         50 http://archive.build.openkylin.top/openkylin nile main amd64 Packages

显示优先安装nile-proposed源的1.2.15版本,不满足python3-apt对libapt-inst2.0的安装版本要求。

再列出python3-apt的可选版本:

# apt policy python3-aptpython3-apt:  Installed: (none)  Candidate: 1.1.0~beta1ok0.16.04.8  Version table:     1.1.0~beta1ok1 50         50 http://archive.build.openkylin.top/openkylin nile main amd64 Packages     1.1.0~beta1ok0.16.04.8 500        500 http://archive.build.openkylin.top/openkylin nile-proposed main amd64 Packages

与上述情况相同

解决办法:对不满足依赖版本的要求的软件包,进行升级版本,以达到上述版本要求。

以上是一个简单分析举例。具体编译情况类型较多,根据具体现象分析。

4.2 测试编译过程

    # 创建编译测试文件夹mkdir ~/build-testcd ~/build-test
    # 下载源码包 [方法1]使用deb-src源自动下载+解包apt source 包名=版本号# 举例: apt source hello=2.12.1-ok2
    # 下载源码包 [方法2]手动下载(wget示例)apt install wgetwget https://...orig.tar.gz https://...debian.tar.xz https://...dscdpkg-source -x ...dsc# 举例: 打开OKBS平台的源码包页面 https://build.openkylin.top/openkylin/+source/hello/2.12.1-ok2,找到Downloads部分的源码包下载链接# 手动下载源码包: wget https://build.openkylin.top/openkylin/+archive/primary/+sourcefiles/hello/2.12.1-ok2/hello_2.12.1.orig.tar.gz https://build.openkylin.top/openkylin/+archive/primary/+sourcefiles/hello/2.12.1-ok2/hello_2.12.1-ok2.debian.tar.xz https://build.openkylin.top/openkylin/+archive/primary/+sourcefiles/hello/2.12.1-ok2/hello_2.12.1-ok2.dsc# 手动解包:dpkg-source -x hello_2.12.1-ok2.dsc
    # 安装编译依赖 [方法1]使用deb-src源自动安装apt build-dep 包名=版本号# 举例: apt build-dep hello=2.12.1-ok2
    # 安装编译依赖 [方法2]手动安装(需要提前进入源码解包后的文件夹)cd 源码包解压的目录apt build-dep ../...dsc# 举例: cd hello-2.12.1# 举例:apt build-dep ../hello_2.12.1-ok2.dsc
    # 如果使用安装编译依赖方法2, 则已经进入源码包解包目录,不用重复执行此步cd 源码包解压的目录# 举例: cd hello-2.12.1
    # 挂载必要目录mount -t devtmpfs dev /devmount -t proc proc /procmount -t sysfs sys /sys
    # 如果是amd64体系dpkg-buildpackage -b # 如果是其他体系dpkg-buildpackage -B
    # 调试完成后记得将上面的目录卸载umount /procumount /devumount /sys


    以上就是本次如何调试OKBS编译错误的简单步骤啦,你学会了吗?如有更多疑问,欢迎反馈交流~

    openKylin(开放麒麟)