鉴于国内网络环境烂到没话可说,Yocto又很多资源在墙外,只能想办法.
首先用下面命令把所有软件包dump出来.
bitbake -s | tee packages.log
使用vim把最开始几行的状态信息什么删掉,再把最后几行的垃圾信息删掉,然后用awk提取下第一列,得到所有软件包.
awk '{print $1}' packages.log > packages_clean.log
用vim替换,给每一行开头结尾加参数.
vim packages_clean.log :% s/^/bitbake /g :% s/$/ -c fetchall /g
如果要包含商业软件包,需要增加配置(一般来说大概有十分之一的包是商业软件包):
LICENSE_FLAGS_WHITELIST="commercial"
如果存在必要的话,还可以增加一些不是默认meta内的数据.
BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-efl" BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-gpe" BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-initramfs" BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-perl" BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-ruby" BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-systemd" BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-webserver" BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-xfce"
建议使用像Cloudcone之类时长计费,流量基本无限的VPS,搞个双核大硬盘实例最佳,再好点的也没什么帮助.然后运行bash批量获取所有,然后去睡觉,毕竟总量至少是2500+个软件包的.
bash packages_clean.log
就算有失败也不用担心,实际上已经全部抓取OK的,其他都是virtual包关联没做对(因为我们是针对每个文件进行拉取,肯定有这毛病.)
上图是我最近那个IMX6Quad移植计划中的,所有打包软件包,体积.够大吧.