OpenWrt 编译失败的原因及解决方案 #1 - 文件不完整
前言
编译失败,很大一部分原因就是文件不完整。而网络问题是导致文件下载不完整的罪魁祸首。下面这个例子的问题,不管是本地进行全局代理,还是海外千兆独立服务器都有遇到过很多次。
错误日志
bash
1 | make[3]: Entering directory `/home/admin/openwrt/lede/package/lean/openwrt-fullconenat' |
分析日志
找到第一个出现 error
的地方:
bash
1 | tar: Exiting with failure status due to previous errors # (由于前面的错误,退出时处于失败状态) |
似乎是 tar
解压遇到了问题。那么这个问题应该在前面:
bash
1 | tar: This does not look like a tar archive # (这看起来不像tar档案) |
看到这里我猜想应该是文件解压失败导致的问题,那么是哪个文件呢?于是继续往上看。
bash
1 | /home/admin/openwrt/lede/dl/fullconenat-2018-12-15-d4daedd0.tar.xz | tar -C /home/admin/openwrt/lede/build_dir/target-x86_64_musl/linux-x86_64/fullconenat-2018-12-15-d4daedd0/.. -xf - |
这行日志中出现了一个名为 fullconenat-2018-12-15-d4daedd0.tar.xz
的压缩包文件。顺着路径找到了文件,打开后里面是空的。复制到 Windows 10 环境下尝试用 bandizip 打开,结果报错。然后对其他压缩包以同样的方式进行打开,都是正常的,所以可以断定这个文件有问题。
解决方案
因为其在 dl
目录中,可以确定是 make
时下载的。那么可以把这个文件删除,执行 make download
就会重新下载。
其他文件也可能有同样的问题,以我多次编译经验来判断一般文件大小为 0 或者以 B(字节)为单位都是下载不完整的,一般来说 1k 以上的文件是正常的。桌面版 Linux 可以使用资源管理器打开 dl
目录,用大小排序(Shell 下使用 ls -Slh
命令进行大小排序,或者使用 SFTP 工具),把这些文件删除后同样使用 make download
命令进行重新下载。
重新下载也可能遇到问题,通过执行 make download V=s
查看详细日志,会发现遇到下载文件 404 的情况。自己曾遇到过十多个文件无法下载的情况,很是恼火。这个目前没有很好的解决方法,因为可能是服务器关闭导致的,只能过一段时间再下载,或者找大佬们拷贝已经下载好的文件。
确认所有文件都完整后,再进行编译,这样可以大大提高编译成功率。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 爱折腾的菜鸟!
评论