这几天一直在折腾路由器openwrt固件,开始是《记录我的无脑刷极路由3openwrt过程!》,而现在转成了“Ctrl+V”、“Ctrl+C”来复制代码编译自己的固件,前四次都没有成功,第五次正在进行。为什么花这么大的时间和精力来编译openwrt固件,现在真的找不到自己心意的固件,为了固件中一个插件,得要找好多固件来刷机、测试。就拿我的竞斗云2.0来说,第一次刷的全功能版固件,才用三天时间可用内存就降到了10%,当我断电重启的时候,结果固件奔溃了,等了十来分钟连路由器后台都进不了。后来又转到了精简版,但是精简版的动态DNS很不稳定。动态DNS是我最需要的功能,怎么能让他不稳定。所以不得不自己尝试来学习自己编译固件了。
编译openwrt固件有三种方式,一种是在本地建虚拟机后安装ubantu,在全局上网之后进行编译,但是这种情况会因网络波动等原因而导致失败。第二就是利用github进行云编译,但是云编译配置文件还得要在本地虚拟机编译生成的配置文件里复制,不过现在也有大神出了图开界面了,所以很多小伙伴选择了这种方式。而我是选择了第三种,在VPS上编译。VPS上编译对硬件要求比较高,而我正好有台吃灰了配置高的VPS,正好也就拿来练手了!
其实编译过程非常简单,而成功与否的关键不是技术,而是你的全局上网的网络。编译无非也就是那几行代码:
一、首次编译
1.建立非root用户、设置密码
#创建一个名为free的用户 sudo useradd -m free -d /home/free -s /bin/bash #创建用户free密码,这里需要输入两次 sudo passwd free
2.修改sudoers文件属性,写入刚才非root用户所有权限(其实这里也可以直接利用工具直接修改)
sudo chmod +w /etc/sudoers
利用winscp工具打开/etc/sudoers文件
#找下如下位置,并在下面添加最后一行代码 # User privilege specification root ALL=(ALL:ALL) ALL #添加以下代码 free ALL=(ALL:ALL) ALL
修改sudoers文件权限为只读:在winscp中右击,把“W”去掉即可
3.非root用户登录之后安装编译依赖
sudo apt-get update #我也不知道这个是干什么的,百度了下 #这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。我们在新立得软件包管理器里看到的软件列表,都是通过update命令更新的。
#安装依赖 sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 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 wget curl swig rsync
4.下载L大的openwrt源码
git clone https://github.com/coolsnowwolf/lede
5.修改feeds.conf.default,让SSR可编译
用winscp打开lede目录下的feeds.conf.default,去掉下面代码前的#号,即可编译SSR了
#src-git helloworld https://github.com/fw876/helloworld
6.图形界面选择路由器型号、选择插件等
#进入lede目录 cd /home/free/lede #更新第5步feeds.conf.default文件内的插件、主题列表并安装 ./scripts/feeds update -a ./scripts/feeds install -a #选择型号、插件、主题等 make menuconfig
7.下载dl库(国内请尽量全局科学上网)。
make -j8 download V=s
#输入 make -j1 V=s (-j1 后面是线程数。第一次编译推荐用单线程)即可开始编译你要的固件了。 make -j1 V=s
二、重新配置参数、添加/删除插件等二次编译
1.删除原配置
cd /home/free/lede git pull 同步更新源码 rm -rf ./tmp && rm -rf .config
2.重复上面5-6步,添加其他插件或主题。例:https://github.com/kenzok8/openwrt-packages
在feeds.conf.default中添加如下代码,就可以选择kenzok8里面的插件和主题了!
src-git kenzo https://github.com/kenzok8/openwrt-packages src-git small https://github.com/kenzok8/small
3.重新配置参数
make menuconfig
4.进行二次编译
make -j$(($(nproc) + 1)) V=s
这里要注意,如果你是第二次编译,最好使用make clean命令和 ./scripts/feeds clean命令清除一些障碍,如果是全新安装就无须clean。
遇到的问题:
1.
今天进行二次编译,在二次编译的时候在feeds.conf.default里加入了https://github.com/kenzok8/openwrt-packages,也就是加入了L大外的主题和插件,结果在进行./scripts/feeds install -a进出现如下错误:
ERROR: please fix package/feeds/kenzo/adguardhome/Makefile - see logs/package/feeds/kenzo/adguardhome/dump.txt for details ERROR: please fix package/feeds/kenzo/luci-app-adguardhome/Makefile - see logs/package/feeds/kenzo/luci-app-adguardhome/dump.txt for details Collecting package info: done Collecting target info: done WARNING: Makefile 'package/feeds/kenzo/adguardhome/Makefile' has a build dependency on 'node-yarn/host', which does not exist WARNING: Makefile 'package/feeds/kenzo/adguardhome/Makefile' has a build dependency on 'packr/host', which does not exist
在群里请教时说是adguardhome的依赖没有安装,大家给出了
cat package/feeds/kenzo/adguardhome/Makefile
结果最后还是出现了两个警告:
WARNING: Makefile 'package/feeds/kenzo/adguardhome/Makefile' has a build dependency on 'node-yarn/host', which does not exist WARNING: Makefile 'package/feeds/kenzo/adguardhome/Makefile' has a build dependency on 'packr/host', which does not exist
2.
今天又请教了群里的朋友,给出的解决方法
WARNING: Makefile 'package/feeds/kenzo/adguardhome/Makefile' has a build dependency on 'node-yarn/host', which does not exist WARNING: Makefile 'package/feeds/kenzo/adguardhome/Makefile' has a build dependency on 'packr/host', which does not exist https://github.com/immortalwrt/packages git clone下来 在里面找到 node-yarn和packr 复制到lean lede的package目录 你再./script/feeds install -a看看 OK 不想用clone就简单点 svn co https://github.com/immortalwrt/packages/tree/openwrt-18.06/lang/node-yarn svn co https://github.com/immortalwrt/packages/tree/openwrt-18.06/devel/packr
但是用了这个方法,又出现了其他错误:
ERROR: please fix package/devel/packr/Makefile - see logs/package/devel/packr/dump.txt for details ERROR: please fix package/feeds/kenzo/adguardhome/Makefile - see logs/package/feeds/kenzo/adguardhome/dump.txt for details为
3.编译更新OpenWrt PassWall和SSR-plus插件
(这里用了第三方的插件库,但是adguardhome出错)
#添加下面代码到 openwrt 或 lede 源码根目录 feeds.conf.default 文件 src-git kenzo https://github.com/kenzok8/openwrt-packages src-git small https://github.com/kenzok8/small #或者,直接 clone 到 openwrt/package 目录下: git clone https://github.com/kenzok8/openwrt-packages.git git clone https://github.com/kenzok8/small.git #然后执行: ./scripts/feeds update -a ./scripts/feeds install -a #接着编译 Passwall 和 SSR-plus 就都有了。
注意比较修改feeds.conf.default与直接执行的命令区别。
#如果 feeds update 出现一堆类似下面的警告: WARNING: Makefile 'package/lean/shadowsocksR-libev-full/Makefile' has a dependency on 'libpcre', which does not exist 解决办法就是删掉 feeds 整个文件夹,在 lede 或 openwrt 目录下执行 #rm -rf ./feeds,然后再 update。
使用了这个方法,但是好像并没有成功,不知道何解。
4.单独添加Lienol的passwall 插件方法(非第三方插件库)
在feeds.conf.default里添加如下代码:
src-git lienol https://github.com/Lienol/openwrt-package
[mark_b]
这句话的功能是在接下来的更新和安装feed的时候,可以调用SRC源 Lienol先生 的Package包, Lienol先生自主开发的PassWall具有非常好的性能,强烈推荐使用。
然后就可以执行lean大页面接下来的命令了。
这里要注意,如果你是第二次编译,最好使用make clean命令和 ./scripts/feeds clean命令清除一些障碍,如果是全新安装就无须clean。
clean完以后,就可以输入以下命令./scripts/feeds update -a
[/mark_b]
#因为 Lienol 的Package包 和lean大的部分 Package包 冲突,所以不好意思,要删掉 Lienol 的部分Package包 。 rm -rf feeds/lienol/lienol/ipt2socks rm -rf feeds/lienol/lienol/shadowsocksr-libev rm -rf feeds/lienol/lienol/pdnsd-alt rm -rf feeds/lienol/package/verysync rm -rf feeds/lienol/lienol/luci-app-verysync
下面我们运行新命令./scripts/feeds install -a
[mark_a]下面我们来加载tty228先生的Serverchan。serverchan是一款非常实用的服务器状态监控软件,可以支持微信推送[/mark_a]
#进入 package/lean目录 cd package cd lean #加载插件 git clone https://github.com/tty228/luci-app-serverchan.git
[mark_d]注意这部分内容,加载其他方插件的再坐种方法,一种是更新配置文件,命令自动下载插件更新,而另外一种方法就是进入目录之后,直接命令方法把插件下载到插件库中。[/mark_d]
这部分内容参考:http://lanhome.com/?id=21
整个编译学习的过程我都是按XXX中文网来的,可是L大已经更新了依赖代码,而这个网站却没有更新。所以对于不懂技术的我来说失败三次。应该直接到https://github.com/coolsnowwolf/lede上复制L大的编译代码,这点一定要注意。
坐等编译结束,如果还不成功的话,就折腾云编译去了!
软路由是以后发展的趋势,现在的折腾,是为了以后更好的使用软路由做好基础!