请先阅读之前的文档。
网站gitee.com/openeuler/RISC-V、gitee.com/openeuler-RISC-V和gitee.com/src-openeuler是什么关系?
openeuler/RISC-V就是你现在看到的,是openEuler RISC-V SIG网站,主要存放文档工具资料。
src-openeuler是openEuler所有软件包的源码仓库。
openeuler-RISC-V是src-openeuler的fork,也称中间仓,用于临时承载对软件包所做的RISC-V修改适配。未来这些修改适配都要合并到src-openeuler仓库。
怎样fork src-openeuler的软件包?
在这个网站,针对riscv_fork_list.yaml提出PR,增加要fork的软件包名,按字母顺序排序,并简要阐述理由。
能不能直接向src-openeuler提交PR?
可以。
怎样选择软件包源码分支?
软件包的源码分支名字指明了分支对应的发行版版本,可以根据你的目标OBS工程来选择。
提交修包PR应注意些什么?
理由应充分,maintainer不一定熟悉所有包;有成功构建的链接;修改符合规范;如果引入了上游或三方补丁,应用git show
等命令保留原作者信息。
https://build.openeuler.openatom.cn和https://build.tarsier-infra.com我应该用哪个?
构建日志信息RPM build errors: bad date in %changelog
是错误吗?
不是。构建中提示的一些与RPM有关的宏、.spec书写规范类错误,不影响软件包的正常构建。
失败日志最后显示的错误是失败的直接原因吗?
一般不是。构建通常并行进行,也有的错误延后传导,因此最后看到的往往不是失败的直接原因。
能查看一个软件包前几次的构建日志吗?
不能。
想查看构建日志但blocked了怎么办?
在这个工程里找一个能查看的软件包,比如:https://build.tarsier-infra.com/build/openEuler:22.03/openEuler_2203_self/riscv64/gcc/_log,把软件包名改成你关心的。
提示网络访问错误怎么处理?
默认OBS上的软件包以qemu-user模式构建(docker下),这时不能访问网络,也不能访问/proc/类的文件。可以调整成qemu-system模式:在软件包增加一个_constraints文件(上传),内容
<constraints>
<sandbox>qemu</sandbox>
</constraints>
软件包总是显示blocked构建不了怎么办?
编辑这个软件包所在工程的Meta
标签页,在repository name=
行,增加rebuild="local" block="never" linkedbuild="off"
。
Meta
标签页还有啥有用的东西?
<publish> <enable|disable/> </publish>
可以控制软件包是否发布到下载站,<build> <enable|disable/> </build>
可以控制软件包是否构建。工程的Meta控制的是整个工程的所有软件包,软件包的Meta控制的是这个软件包本身。工程的Meta标签页repository name=
行下有path project=
,是工程的依赖,即工程需要的构建依赖包从哪里来。
OBS的下载站在哪儿?
软件包的_link文件是否可以删除?
可以。
工程的Project Config
标签有什么用?
用处非常大,也是比较高级的应用,等你熟练后可以找一个工程看看,文档链接。
日志提示Job seems to be stuck here, killed. (after 28800 seconds of inactivity)
怎么办?
构建过程超过28800秒没有任何输出时,OBS会认为软件包已卡死了,然后kill掉构建。如果你认为不是卡死了,而仅仅是慢,可以编辑工程的Project Config
标签页,增加如下代码解决%build阶段的假死问题,相应的%check阶段用__spec_check_pre:
Macros:
%__spec_build_pre %{___build_pre} \
case %{name} in \
软件包名) \
function keepalive() { while true; do sleep 28000; date; done } \
keepalive & ;; \
esac
:Macros
构建时下载网络组件总是失败怎么办?
手工下载,作为补丁进行修包处理。
怎样让自己构建成功的包参与别的包构建?
首先,编辑成功包的Repositories
标签页,勾选Use for Build Flag
,这是默认设置。然后,将成功包所在的工程,加入到目标工程的依赖里,并放在原有依赖的前面,见上面关于Meta
标签页的描述;如果成功包和目标包在一个工程里,则不需要这一步。
怎样发布自己构建成功的包?
编辑软件包的Repositories
标签页,勾选Publish Flag
。
什么是QEMU构建环境?
指RISC-V QEMU虚拟机里,另外一个虚拟环境,存放在/var/tmp/build-root/目录下。osc build
命令初始化这个环境,并在其中构建软件包。
怎么查看构建日志?
在checkout出的软件包目录下,执行osc lbl|less
。为防止后续的构建冲掉日志,可以将其另存起来。
失败日志最后的error: Bad exit status from /var/tmp/rpm-tmp.kp0vhP (%build)
指示了什么?
指示出在构建环境里,%build阶段,执行/var/tmp/rpm-tmp.kp0vhP脚本出错了。整个构建过程分为%prep、%build、%install、%check等分立的阶段,每个阶段有一个shell脚本,执行这个阶段的所有任务,各个脚本分别对应着软件包spec文件中的有关描述。查看这个脚本可以了解构建设置了什么环境、宏怎么展开的、执行了哪些具体命令。
构建过程中要访问网络怎么办?
构建前,将/etc/resolv.conf拷贝到构建环境中的/etc目录下。
怎么手工进入构建环境?
chroot /var/tmp/build-root/xx工程
构建环境里手动运行java说找不到动态库怎么办?
一些程序运行时要访问/proc,可以在手工chroot进构建环境前,执行mount --bind /proc /var/tmp/build-root/xx工程/proc
。记得退出后,及时umount。
在构建环境里怎样重新运行出错命令?
方法一:找到并重新执行出错的具体命令。因为环境设置原因,这个命令不一定能正常运行。
方法二:运行对应的/var/tmp/rpm-tmp.xxx脚本。当然你事先可以编辑这个脚本的内容。这是比较可靠的方法。
方法三:用osc build --stage=xx
重新运行指定的构建阶段,具体请查看osc和rpmbuild的帮助。只运行单独阶段并不一定都可行,如%check,因为可能缺少前面阶段输出的文件。
重复构建时能不能跳过依赖包的下载安装?
可以,用osc build --noinit
。
多次构建后出现一些莫名其妙的问题咋办?
删除构建环境及包缓存试试:rm -rf /var/tmp/{build-root,osbuild-packagecache}
。
怎样在构建环境里安装依赖包?
最好在OBS工程上解决好依赖,由osc自动处理依赖包安装。如果确实需要,也可以手工下载rpm包,chroot进构建环境后用rpm -i
安装。这比较麻烦,且在构建时要加上--noinit参数以防止手工安装的包被自动删除。
修包一般思路是什么?
超时等环境配置、性能引起的失败怎么处理?
不需要修包,通知maintainer即可。
不想修包只想升级可以吗?
可以。OBS的Factory:RISC-V...工程专门用于软件包的滚动升级;中间仓的roll分支用于承载升级源码,可在向本仓库提交申请PR时注明升级需求,由maintainer创建roll分支;PR除一般要求外,还要对API接口变更做简要评估,以便maintainer掌握可能的兼容性问题。
可不可以引入新的软件包?
可以,需要一点点理由。具体操作可以提issue或咨询SIG。
我可不可以象其它发行版那样申请成为maintainer?
欢迎!期望你能使申请的包持续保持良好状态。
除了修包还有什么参与方式?
只要有利于openEuler RISC-V发展的都可以,比如:清理完善文档、系统使用报告、设计应用项目等。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。