软路由
之前自己配了一台软路由,3205的cpu+8G内存,一直使用Koolshare的LEDE,但是koolss插件已经长期停止更新,而且各种问题,经常死机,说实话算不上一个很好的固件。
后来在网上找其他固件,发现LEAN的LEDE固件非常不错,主要是冲着SSR-plus去的,但是研究了一下发现,这个固件那个是非常的高端啊,要自己用ubuntu编译。
说高端就是高端,不得不说lean大佬这个做的太nb了,用作者的原话是:
如果你自认为 Koolshare 论坛或者其固件的脑残粉,本人不欢迎你使用本源代码。所以如果你是,那么使用过程中遇到任何问题本人概不回应。
作者的Github地址:https://github.com/coolsnowwolf/lede
准备工作
注意
- 不要用 root 用户 git 和编译!!!
- 国内用户编译前最好准备好梯子
- 默认登陆IP 192.168.1.1, 密码 password
Ubuntu新建账户
需要准备一个干净的Ubuntu,不能用root账户,最好在国外。我用的是阿里云的香港轻量,ubuntu 18.04。
创建用户:vagrant为用户名
sudo useradd -m vagrant -d /home/vagrant -s /bin/bash
为创建的用户设置密码
sudo passwd vagrant
修改用户的权限:( /etc/sudoers文件只有r权限,在改动前需要增加w权限,改动后,再去掉w权限 )
1 2 3 4 5 6 7 |
(1)为sudoers增加写入权限 sudo chmod +w /etc/sudoers sudo vim /etc/sudoers (2)为用户XXX添加读写权限 root ALL=(ALL:ALL) ALL vagrant ALL=(ALL:ALL) ALL // 这一行为新添加的代码 (3)将sudoers文件的操作权限改为只读模式 |
安装必备组件
sudo apt-get update
1 |
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch 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 |
开始编译
Clone源码
使用 git clone https://github.com/coolsnowwolf/lede.git 命令下载好源代码,然后 cd lede 进入目录
配置编译
1 2 3 |
./scripts/feeds update -a ./scripts/feeds install -a make menuconfig |
下载dll库
1 |
make -j8 download V=s 下载dl库(国内请尽量全局科学上网) |
配置固件
之后进入如下界面,这实际上是一个配置界面,用来配置编译的配置,并不是编译的过程。
oplean1-1.png
进入Target System和Subtarget勾选你需要编译的平台,我用的是X86,并且是64位的,所以你需要选择自助选择。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
OpenWrt Configuration【OpenWrt配置】 Target System (x86) ---> 目标系统(x86) Subtarget (x86_64) ---> 子目标(x86_64) Target Profile (Generic) --->目标配置文件(通用) Target Images ---> 保存目标镜像的格式 Global build settings ---> 全局构建设置 Advanced configuration options (for developers) ---- 高级配置选项(适用于开发人员) Build the OpenWrt Image Builder 构建OpenWrt图像生成器 Build the OpenWrt SDK构建OpenWrt SDK Package the OpenWrt-based Toolchain打包基于OpenWrt的工具链 Image configuration --->图像配置 Base system ---> 基本系统 Administration ---> 管理 Boot Loaders --->引导加载程序 Development ---> 开发 Extra packages ---> 额外包 Firmware --->固件 Fonts --->字体 Kernel modules ---> 内核模块 Languages --->语言 Libraries ---> 图书馆 LuCI ---> LuCI Mail --->邮件 Multimedia --->多媒体 Network --->网络 Sound ---> 声音 Utilities --->实用程序 Xorg --->Xorg |
oplean1-2.png
进入Target Images勾选你需要的固件格式等(img、vmdk等这里我保持默认,默认也够用了吧?)
oplean1-3.png
进入LuCI–>Applications内选中你需要的插件
oplean1-4.pngoplean1-5.png
在这里有一些别的选项,比如一些VPN、aria2的web管理等等,根据需要自己进去研究。
勾选完需要的东西就可以退回第一个界面保存退出,保存按默认的文件名称(.config)保存即可,不需要修改。编译会根据.config的内容编译,想要恢复到初始配置删掉.config文件即可。
在编译的过程中,要下载一些组件什么的,如果你不翻墙,下载速度会非常慢,甚至下载不下来。
编译
保存后执行以下命令
1 |
make -j1 V=s //第一次编译非常的慢,要花上一两个小时 |
Snipaste_2019-09-15_22-31-56.png
取得固件
1 |
cd bin/targets/x86/64 注:这个bin目录在你克隆源码的lede路径下,非根目录下的bin目录 |
在下载openwrt系统时,经常能看到initramfs-kernel.bin,squashfs-factory.bin,squashfs-sysupgrade.bin等结尾的文件,factory适用于从原厂系统刷到openwrt,sysupgrade则是从openwrt刷到openwrt(已经是openwrt系统,在openwrt系统中更新自己),squashfs则是一种文件系统,适用于嵌入式设备。那么initramfs-kernel又是什么呢。
initramfs是放在内存RAM中的rootfs 映像文件,跟kernel放在一起。一般来说用不到initramfs-kernel.bin来刷机,因为启动后,所有的配置在路由器重启后都不能保留(毕竟ram文件系统,所有文件放在ram中,断电就没了)。但也有用到initramfs-kernel.bin的时候,就是在移植openwrt系统的时候,没有设备上的flash闪存的驱动的时候。
固件里面看不到ssr-plus
大佬在feed里里面吧ssr的feed隐藏了
1 2 3 4 5 6 7 8 9 |
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 git pull rm -rf ./tmp vi feeds.conf.default #其中去掉注释 ./script/feeds update -a && ./script/feeds install -a |
1 2 |
git clone https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>github<span class="token punctuation">.</span>com<span class="token operator">/</span>coolsnowwolf<span class="token operator">/</span>lede cd lede |
修改feeds.conf.default
文件 (以下是2021年8月21日的文件)
1 2 3 4 5 6 7 8 |
src<span class="token operator">-</span>git packages https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>github<span class="token punctuation">.</span>com<span class="token operator">/</span>coolsnowwolf<span class="token operator">/</span>packages src<span class="token operator">-</span>git luci https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>github<span class="token punctuation">.</span>com<span class="token operator">/</span>coolsnowwolf<span class="token operator">/</span>luci src<span class="token operator">-</span>git routing https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>git<span class="token punctuation">.</span>openwrt<span class="token punctuation">.</span>org<span class="token operator">/</span>feed<span class="token operator">/</span>routing<span class="token punctuation">.</span>git src<span class="token operator">-</span>git telephony https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>git<span class="token punctuation">.</span>openwrt<span class="token punctuation">.</span>org<span class="token operator">/</span>feed<span class="token operator">/</span>telephony<span class="token punctuation">.</span>git #src<span class="token operator">-</span>git video https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>github<span class="token punctuation">.</span>com<span class="token operator">/</span>openwrt<span class="token operator">/</span>video<span class="token punctuation">.</span>git #src<span class="token operator">-</span>git targets https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>github<span class="token punctuation">.</span>com<span class="token operator">/</span>openwrt<span class="token operator">/</span>targets<span class="token punctuation">.</span>git #src<span class="token operator">-</span>git oldpackages http<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>git<span class="token punctuation">.</span>openwrt<span class="token punctuation">.</span>org<span class="token operator">/</span>packages<span class="token punctuation">.</span>git #src<span class="token operator">-</span>link custom <span class="token operator">/</span>usr<span class="token operator">/</span>src<span class="token operator">/</span>openwrt<span class="token operator">/</span>custom<span class="token operator">-</span>feed |
可以发现并没有XXRPlus
或PassWall
,自行添加XXRPlus
或PassWall
。
1 |
src<span class="token operator">-</span>git helloworld https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>github<span class="token punctuation">.</span>com<span class="token operator">/</span>fw876<span class="token operator">/</span>helloworld |
1 |
src<span class="token operator">-</span>git passwall https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>github<span class="token punctuation">.</span>com<span class="token operator">/</span>xiaorouji<span class="token operator">/</span>openwrt<span class="token operator">-</span>passwall |
最后保存。
重新编译或修改配置后再次编译
(二次编译是指下一次你编译别的固件的时候)
1 2 3 4 5 6 |
cd lede git pull ./scripts/feeds update -a && ./scripts/feeds install -a make defconfig make -j8 download make -j$(($(nproc) + 1)) V=s |
out of memory错误
(2019.12更新)
今天重新打开编译一个文件的时候,提示out of memory错误,看了一下1g内存估计有点溢出了。
一键swap增加:wget https://www.moerats.com/usr/shell/swap.sh
LEAN大佬原版的说明
https://github.com/coolsnowwolf/lede
刷写固件方法
好吧,最后如何刷机都告诉大家吧。如何把固件刷到软路由上面,建议使用以下两个方案。
- DiskImage直接刷写(最直接方便)
刷写方法:制作一个PE盘,把DiskImage和LEDE固件拷贝到PE盘,插到路由上,启动PE,然后和方法一差不多,打开DiskImage,选择软路由上的那块硬盘,选择OpenWrt.img,点开始,等进度条结束,然后关机,拔掉U盘,再开机就可以了
15698111189320.jpg - 用physdiskwrite刷写
刷写方法:制作一个PE盘,把physdiskwrite和LEDE固件拷贝到PE盘(同一个目录下,建议放在根目录,就是打开U盘就能看到的那个目录),插到路由上,启动PE,然后查看下存放固件的盘符(这里举例为U:盘),打开cmd(不懂的就按Win建+r键,输入cmd回车,Win键就是键盘左下方是Windows图标的那个按键)
输入U: (回车确定,切换到U盘的目录)
输入physdiskwrite -u OpenWrt.img(回车确定)
然后会显示目前检测到的硬盘,输入0或者1选择要刷写到哪个盘(看容量,选择硬盘的那个编号),按Y确定,之后等待刷写结束就可以了,然后关机,拔掉U盘,再开机就可以了.
本文到此结果,是不是挺简单的,有轮子了造车还难吗?也希望你成功。
插件详细清单
OpenWrt 编译 LuCI —> Applications 添加插件应用说明 【人人为我,我为人人】 2019.8.3 更新 !!!
make menuconfig 进入定制界面
进入编译选项配置界面,.按照需要配置.( ‘*’ 代表编入固件,‘M’ 表示编译成模块或者IPK包, ‘空’不编译 )
非常感谢大佬”L有大雕“更正补充,20181121
欢迎加入大佬 QQ 讨论群:Gargoyle OpenWrt 编译大群 ,号码 718010658 (QQ更新)
这个地址应该是长期更新插件清单:https://www.right.com.cn/forum/thread-344825-1-1.html
有一个作者维护的frp的ipk:https://github.com/kuoruan/openwrt-frp
即使编译了ssr-plus之后,你发现在菜单里依然没有选项。因为作者又一次调皮了,居然给隐藏了。
输入以下代码后可以看到
1 |
echo 0xDEADBEEF > /etc/config/google_fu_mode |
看到一个excel维护的luci清单
OpenWRT编译make menuconfig配置及LUCI插件说明.xlsx