尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LEDE ImageBuilder 如何在构建固件时自动安装 ./packages 目录里的本地 .ipk 包

LEDE ImageBuilder 如何在构建固件时自动安装 ./packages 目录里的本地 .ipk 包 LEDE ImageBuilder 如何在构建固件时自动安装 ./packages 目录里的本地 .ipk 包【免费下载链接】ledeLeans LEDE source项目地址: https://gitcode.com/GitHub_Trending/le/lede如果你手里有本地编译或第三方提供的.ipk包不想改动主源码树的配置、更不想为加一个包重跑整棵源码的完整编译LEDELeans LEDE source源码树自带的 ImageBuilder 机制就是干这个的ImageBuilder 归档解压后带有一个packages/目录把.ipk放进去之后每次make image都会自动重建该目录的包索引你可以用PACKAGES按包名把它安装进固件。前提条件主源码树已按 README.md 完成对应目标平台的构建ImageBuilder 归档已产出在bin/targets输出路径下README 明确编译完成后输出路径bin/targets。机制./packages 目录是 ImageBuilder 的本地软件源ImageBuilder 打包脚本 在生成归档时做了几件事理解它们是后面所有步骤的基础在归档内创建packages/目录并touch一个空的Packages索引文件注释写明目的是create an empty package index soopkgdoesnt report an error同时把 target/imagebuilder/files/README.md 拷贝进packages/向归档内的repositories.conf追加一行本地源并标注不可删除## This is the local package repository, do not remove! src imagebuilder file:packages在标准构建未启用CONFIG_BUILDBOT且未启用CONFIG_IB_STANDALONE下把主树中的libc_*.ipk、kernel_*.ipk、kmod-*.ipk拷贝进packages/保证固件构建的基础依赖可用启用CONFIG_IB_STANDALONE时改为把各包目录下的全部*.ipk拷入packages/启用CONFIG_SIGNATURE_CHECK时向repositories.conf写入option check_signature并把keys/目录和opkg-key工具一并带入归档。files/README.md 对运行时的行为做了说明每次 ImageBuilder 构建固件镜像时packages/目录都会被重新加载并生成新的包索引若启用了签名检查./packages/Packages索引用本地生成的密钥对签名。产出并解压 ImageBuilder 归档target/Makefile 中imagebuilder是 target 构建目录之一且仅在CONFIG_IB开启时参与 target 安装阶段$(if $(CONFIG_IB),imagebuilder)。也就是说在主源码树中通过make menuconfig启用CONFIG_IB选项后正常构建ImageBuilder 归档就会随构建产出在bin/targets对应目标平台目录下。归档名由 target/imagebuilder/Makefile 的IB_NAME规则生成形如版本标识-imagebuilder-目标板卡[-子目标][版本号].宿主机OS-宿主机架构.tar.xz版本号仅当CONFIG_VERSION_FILENAMES开启时出现。在bin/targets对应目录中找到该文件后解压tar -xf imagebuilder归档名.tar.xz cd 解压出的imagebuilder目录解压后的根目录包含Makefile、repositories.conf和packages/目录packages/内此时只有一个空的Packages索引文件和 README 说明。后续所有命令都在这个解压目录内执行。放入 .ipk 并构建固件在packages/目录中放入你要安装的.ipk文件。注意 repositories.conf 头部注释的要求源中的包必须与架构和版本匹配they must match the architecture and version放错架构的包不会被正确解析。先确认要用的目标 profilemake info该命令打印Current Target、Current Architecture、当前 revision以及全部可用 profile 列表每个 profile 附带其预置包列表和 supported devices。然后执行构建。PACKAGES中的值填.ipk的包名以空格分隔的列表...为需要替换的占位符make image PACKAGESpkg1 pkg2需要更换目标 profile 时追加PROFILEprofilenameprofilename用make info列出的名字。构建开始时日志会先打印一行Packages: 本次将安装的完整包列表这是确认你指定的包已进入安装集合的第一处观察点。构建过程中与packages/目录相关的动作见 target/imagebuilder/files/Makefilepackage_reload检查packages/Packages、packages/Packages.gz是否存在并用find -cnewer检查目录里是否有比Packages.gz更新的文件。只要索引缺失或过期就重新生成索引日志输出Package list missing or not up-to-date, generating it.索引由ipkg-make-index.sh生成Packages经gzip -9压缩启用CONFIG_SIGNATURE_CHECK时再用usign -S -m Packages -s $(BUILD_KEY)对索引签名。这就是每次构建自动重新加载./packages的机制——你新放入的.ipk不需要手动跑任何索引命令。image目标在构建前先执行_check_keys若启用签名检查且本地BUILD_KEY/BUILD_KEY.pub不存在自动用usign -G生成密钥对并用opkg-key add导入公钥缺.ucert证书时再用ucert -I生成。package_install按顺序先安装libc、kernel再安装BUILD_PACKAGESprofile 预置包 你PACKAGES指定的包。包列表里以-开头的项表示从安装列表中移除该包Makefile 注释-pkgname in the package list means remove pkgname from the package list例如PACKAGES-luci。用 make manifest 核对包是否真正装进镜像make image只告诉你构建过程是否装进镜像用manifest目标验证。它会执行与 image 相同的package_reloadpackage_install流程然后列出全部将安装进镜像的包make manifest PACKAGESpkg1 pkg2你放入packages/的.ipk对应的包名应当出现在该列表中列表内容随目标和 profile 变化不存在固定的预期输出。追加STRIP_ABI1可在输出包名中去掉 ABI 版本号。排查.ipk的依赖关系时还有两个目标PACKAGE填包名make package_depends PACKAGEpkg make package_whatdepends PACKAGEpkg前者列出该包自身的安装依赖后者列出依赖该包的所有包。限制与边界放入packages/只允许安装files/README 原文will allow the ImageBuilder to install them包真正进入镜像取决于PACKAGES或 profile 预置列表不要默认放进去就会进镜像。标准模式下packages/预置的只有libc_/kernel_/kmod-*这类基础 ipk未启用CONFIG_IB_STANDALONE时repositories.conf还会追加主树配置的远程软件源列表.ipk的其他依赖必须能从这些源解析否则安装会失败。固件启用签名检查时本地生成的密钥默认不会进镜像构建时追加ADD_LOCAL_KEY1即可把本地生成的签名公钥存入构建出的镜像make image ADD_LOCAL_KEY1。构建完想清理临时文件时执行make clean它会删除tmp/、dl/、target 目录和输出目录Makefile 中rm -rf $(TMP_DIR) $(DL_DIR) $(TARGET_DIR) $(BIN_DIR)。可选把更大的本地包目录挂成自定义 feedpackages/目录内的 README 说明 建议包数量较多的复杂场景下改用自定义 feed在 ImageBuilder 根目录的repositories.conf中加入一行该文件头注释即提示自定义仓库写在这里src custom file:///path/to/packages其中file:///path/to/packages的path/to/packages替换为你本地包目录的绝对路径。这样./packages之外的目录也能作为 opkg 源被解析索引行为与./packages相同。【免费下载链接】ledeLeans LEDE source项目地址: https://gitcode.com/GitHub_Trending/le/lede创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表