如何查询BMC文件来源
在定位时大家经常询问的是某个文件是哪个组件负责,本文会详细说明openUBMC文件来源,指导大家管理openUBMC文件。
两级流水线
openUBMC采用两级流水线方式构建,第一级为组件级,负责开发、测试和发布组件;第二级为产品级,负责集成RTOS、驱动、组件、产品定制等成份,构造出可以运行的rootfs镜像,最终制作出可以升级的HPM包。
来源一:RTOS
RTOS提供了openUBMC运行的基础,其包含一个完整的rootfs基础镜像,开发者日常构建时下载制备好的压缩包(rtos.tar.gz),版本发布时按可信构建要求从源码构建得到。
个人构建时,rtos.tar.gz将会下载到./temp/build_<board_name>_<build_type>/sdk/rtos.tar.gz(如./temp/build_Openubmc_debug/sdk/rtos.tar.gz)。
检查文件是否来自于rtos.tar.gz的方式:
xuhj@DESKTOP-M0FU0HP:~/litebmc/manifest$ tar -tvf ./temp/build_Openubmc_debug/sdk/rtos.tar.gz | grep passwd
-rw-r--r-- huawei/user 106 2023-08-22 20:47 rtos_with_driver/rootfs/etc/pam.d/passwd
-rw-r--r-- huawei/user 182 2023-08-22 20:47 rtos_with_driver/rootfs/etc/pam.d/chpasswd来源二:组件产物
构建时按产品描述(manifest.yml的dependencies)集成所需组件,然后收集各组件的制品,原样复制到rootfs中并赋权。
开发者可以在本地构建一次产品包,然后使用如下三种方式检查文件是否来自于组件:
方式一:检查某一组件是否有需要查找的制品
# 在conan缓存目录中查找制品文件,如果能找到就表达文件一定来源于该组件
find ~/.conan/data/ -name profile_schema | grep package方式二:检查某一组件是否有对需要查找的制品赋权
# 在conan缓存目录中查找制品文件,如果能找到就表达文件一定来源于该组件
find ~/.conan/data/ -name permissions.ini | xargs -i{} grep profile_schema {} -RH方式三:某些组件的制品比较复杂,简单的生成文件不能满足要求,就会通过定制化在rootfs中创建文件或目录,如下命令可以为大家提供线索:
# 在conan缓存目录中查找组件定制化文件,如果查找关键字不明显的可能会有很多结果,需要自己分析。
find ~/.conan/ -name customization.py | xargs -i{} grep "opt/bmc/conf" {} -RH结果示例:
# 方式一:查找profile_schema由哪个组件提供
xuhj@DESKTOP-M0FU0HP:~/litebmc/manifest$ find ~/.conan/data/ -name profile_schema | grep package
/home/xuhj/.conan/data/profile_schema/1.10.4/openubmc.release/rc/package/eb863b30644119aa8446f0771512037d0aea/opt/bmc/profile_schema
# 方式二:查找profile_schema由哪个组件提供
xuhj@DESKTOP-M0FU0HP:~/litebmc/manifest$ find ~/.conan/data/ -name permissions.ini | xargs -i{} grep profile_schema {} -RH
/home/xuhj/.conan/data/profile_schema/1.10.4/openubmc.release/rc/package/eb863b30644119aa8446f0771512037d0aea/permissions.ini:opt/bmc/profile_schema rd 550 0 0
/home/xuhj/.conan/data/profile_schema/1.10.4/openubmc.release/rc/package/eb863b30644119aa8446f0771512037d0aea/permissions.ini:opt/bmc/profile_schema r 440 0 0
# 方式三:查找opt/bmc/conf可能由哪些组件提供,要结合搜索结果分析,找到最匹配的记录
xuhj@DESKTOP-M0FU0HP:~/litebmc/manifest$ find ~/.conan/ -name customization.py | xargs -i{} grep "opt/bmc/conf" {} -RH
/home/xuhj/.conan/data/product_mgmt/1.10.2/openubmc.release/rc/source/build/customization.py: sub——process.run(['/usr/bin/sudo', '/usr/bin/mkdir', '-p', f'{self.rootfs_path}/data/opt/bmc/conf/oem/profile/'])
/home/xuhj/.conan/data/product_mgmt/1.10.2/openubmc.release/rc/package/5f2d38da3deee6d7c3c2572d1f9649a97ef90ed6/include/customization.py: sub——process.run(['/usr/bin/sudo', '/usr/bin/mkdir', '-p', f'{self.rootfs_path}/data/opt/bmc/conf/oem/profile/'])来源三:驱动
驱动团队向openUBMC交付的chip Solution组件包含一个sdk.tar.gz压缩包,内容除了insmod_drv.sh、Module.symvers、link_emmc_devs外都是ko驱动文件。
sdk.tar.gz将会下载到./temp/build_<board_name>_<build_type>/sdk/sdk.tar.gz(如./temp/build_Openubmc_debug/sdk/sdk.tar.gz)。
检查文件是否来自于sdk.tar.gz的方式:
xuhj@DESKTOP-M0FU0HP:~/litebmc/manifest$ tar -tvf ./temp/build_Openubmc_debug/sdk/sdk.tar.gz | grep ko/dboot_drv.ko
-r-xr-x--- huawei/user 18344 2023-08-22 20:44 ko/dboot_drv.ko注意: ko文件不只是来自于sdk,openUBMC自身也会构建出ko驱动文件。
来源四:产品定制化
Manifest仓预置了产品定制化能力,包括静态文件定制和定制化脚本。
- 静态文件定制:如
build/rootfs/、build/product/Kunpeng/Openubmc/rootfs/目录都存储一些跟产品强相关的定制文件,为此可在搜索Manifest仓是否存在某些文件。 - 定制化脚本:产品manifest.yml中定制了单板可以执行的customization定制化脚本,该脚本会执行一系列定制化命令,可能会创建、重命名、删除文件。
# 搜索Manifest仓的静态文件定制是否有关心的文件
xuhj@DESKTOP-M0FU0HP:~/litebmc/manifest$ sudo find . -name common-auth
./build/product/Kunpeng/Openubmc/rootfs/etc/pam.d/common-auth
./build/product/Kunpeng/ /rootfs/etc/pam.d/common-auth
./build/product/Kunpeng/openubmc /rootfs/etc/pam.d/common-auth
# 搜索定制化脚本是否有创建文件
xuhj@DESKTOP-M0FU0HP:~/litebmc/manifest$ sudo grep usr/bin/df build/ -Rnw
build/customization/prototype.py:169: self.work.run_command("ln -s /bin/busybox.nosuid usr/bin/df", sudo=True)
build/customization/prototype.py:174: self.work.run_command("ln -s /bin/busybox.nosuid usr/bin/df", sudo=True)TIP
建议查找文件前先构建一次产品,以生成我们查找所需的素材。
# 进入manifest目录
cd manifest
# 执行bmcgo命令构建出产品包,此步会下载所有依赖的组件
bmcgo build