根据恩山L大的源码编译OpenWRT固件,第三次终于成功,记录下来前两次的坑, OpenWRT 编译恩山L大的源码踩过的坑
L大源码地址,根据这个地址里面的编译说明进行编译,前两次失败,踩过几个坑,第三次顺利编译成功
首先是L大的注意事项:
- 不要用 root 用户 git 和编译!!!
- 国内用户编译前最好准备好全局代理软件
- 默认登陆IP 192.168.1.1, 密码 password
L大的编译命令如下:
- 首先装好 Ubuntu 64bit,推荐 Ubuntu 18 LTS x64
- 命令行输入
sudo apt-get update
,然后输入sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf
- 使用
git clone https://github.com/coolsnowwolf/lede
命令下载好源代码 (执行以上两条命令之前先填第1个坑,后面详述) - 然后
cd lede
进入目录 ./scripts/feeds update -a
(执行此命令之前先填第2个坑,后面详述)./scripts/feeds install -a
make menuconfig
make -j8 download V=s
下载dl库(执行此命令之前先填3个坑,后面详述)- 输入
make -j1 V=s
(-j1 后面是线程数。第一次编译推荐用单线程)即可开始编译你要的固件了。
说的就是这么简洁有力,我踩了几个坑,记录如下,可能还有更多的坑我还没有踩到
运行环境概述:
VPS的CPU、内存和硬盘空间对于编译这种固件感觉不够用,所以我是用家里i5-9400F+16G内存+系统盘50G以上空闲空间
的Win10机器自带的虚拟机安装Ubuntu 18.04进行编译的,Win10安装虚拟机非常简单,0成本,不需要第三方虚拟机软件,自带的有,但是缺省没有开启,需要先开启自带虚拟机
- 开始>控制面板>程序>启用或关闭 Windows 功能>适用于 Linux 的 Windows 子系统,在这个前面打勾选上
- 如何打开 Microsoft Store ,搜索 Ubuntu,选择自己需要的版本进行安装,跟安装一般的应用一样的体验
- 安装完成在所有程序里找到 Ubuntu 点击进入虚拟机系统,需要先设置用户名和密码
- 如何用新设置的用户名和密码进入 Ubuntu 系统
开始编译操作:
OpenWRT 编译 第1坑:
按照L大源码仓库的说明进行系统升级、依赖安装及源码克隆,电脑开启全局代理,然后就开始漫长漫长漫长的等待,没事的时候看一眼,依赖安装及源码克隆的速度只有10几KB每秒啊, 大半天的等待以后才下完几百M的数据,并且进行第9步使用单线程编译等待3小时左右提示错误,是有些软件下载失败,被服务器拒绝,发现应该是虚拟机没有使用 Windows 全局代理,只有可怜的直连速度, 解决办法一是应该在虚拟机 Ubuntu
上安装代理软件进行全局代理
二是后来发现可以通过设置系统代理的方式给虚拟机使用的,把电脑代理软件设置成绕过局域网或者全局,输入以下命令进行代理设置, 端口根据实际情况修改,前两行是 socks5 端口,后两行是 http 端口:
$ echo "export ALL_PROXY=\"socks5://127.0.0.1:1080\"" >> ~/.bashrc
$ echo "export all_proxy=\"socks5://127.0.0.1:1080\"" >> ~/.bashrc
$ sudo tee -a /etc/apt/apt.conf <<< 'Acquire::http::Proxy "http://127.0.0.1:1080";' > /dev/null
$ sudo tee -a /etc/apt/apt.conf <<< 'Acquire::https::Proxy "http://127.0.0.1:1080";' > /dev/null
# 然后执行以下命令应用配置:
$ source ~/.bashrc
# 最后执行以下命令进行验证,无报错并显示代理 IP 则为成功:
$ sudo apt update && curl ip.sb
同时解决 git clone
慢的方法是修改 hosts
文件, 找到 GitHub.com
这个域名对应的ip地址,然后在hosts
文件中加上ip–>域名的映射,刷新DNS缓存便可,查询域名对应的IP地址可以在此网站进行搜索,或者ping域名也可以得到对应的IP地址
$ sudo vi /etc/hosts
140.82.112.4 github.com
$ sudo /etc/init.d/networking restart
OpenWRT 编译 第2坑:
此坑不先填的话5、6、7步都要重新来一遍,按照L大源码仓库的说明进行编译,第7步进入到编译插件页面看不到想要的那个插件Luci-app-xxx plus,以为是编译好了会自带(太天真了吧),后来在网上查了很久才发现作者说这个是彩蛋,在feed里面隐藏了此插件,需要进行相应设置
$ git pull
$ rm -rf ./tmp
# 如果还没有编译过可以忽略上面两条
$ vi feeds.conf.default #需要将下面helloworld那一行前面的#号去掉
src-git luci https://github.com/coolsnowwolf/luci
src-git routing https://git.openwrt.org/feed/routing.git;openwrt-19.07
#src-git telephony https://git.openwrt.org/feed/telephony.git;openwrt-19.07
#src-git helloworld https://github.com/fw876/helloworld
去掉helloworld
那一行前面的#号后保存,然后重新从第5步开始,就会下载相应的软件包,编译的时候就能看到了
OpenWRT 编译 第3坑:
选择好插件和主题后使用第9步编译命令进行编译,开始编译后CPU占用50%左右、内存占用8G左右,系统盘占用2G左右的空间,根据L大的说明是使用单线程进行编译,漫长等待2.5小时的不停跑码以后报错,可以看到 install
错误,根据视频主的介绍,输入以下命令,输入后没有提示,然后再一次进行编译就成功了
$ PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g')
OpenWRT 编译 第4坑: (此处也不算真正的坑)
前两次执行第9步的时候都是根据L大的命令进行的,采用单线程的方式,都耗时3小时左右,前几个坑填完以后觉得干脆不管单线程,利用本机6核6线程进行编译应该快一些,就对命令进行了修改,去掉了单线程的限制
$ make V=s
结果这一次40分钟就编译完成,并且编译成功,安装以后可以正常使用
不修改配置二次编译:
$ cd lede
$ git pull
$ ./scripts/feeds update -a && ./scripts/feeds install -a
$ make defconfig
$ make -j8 download
$ make -j$(($(nproc) + 1)) V=s
如果需要重新配置编译:
$ cd lede
$ rm -rf ./tmp && rm -rf .config
$ git pull
$ ./scripts/feeds update -a && ./scripts/feeds install -a
$ make menuconfig
$ make -j8 download
$ make -j$(($(nproc) + 1)) V=s
单独编译某个插件:
前提是之前至少成功编译过一次固件
$ cd lede
$ git pull #重新拉取最新代码
$ make target/linux/compile V=s #先编译内核
$ make package/lean/luci-app-netdata/compile V=s #编译插件,此处以luci-app-netdata为例
编译完成后输出路径:/lede/bin/targets
安装完成后的OpenWRT的默认登陆IP 192.168.1.1, 密码 password
