编译Lean的Openwrt固件全攻略

更新2019.12.20

软路由

之前自己配了一台软路由,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。

  1. 创建用户:vagrant为用户名

    sudo useradd -m vagrant -d /home/vagrant -s /bin/bash

2、为创建的用户设置密码

sudo passwd vagrant

3、修改用户的权限:( /etc/sudoers文件只有r权限,在改动前需要增加w权限,改动后,再去掉w权限 )

(1)为sudoers增加写入权限
      sudo chmod +w /etc/sudoers
      sudo vim /etc/sudoers
(2)为用户XXX添加读写权限
      # User privilege specification 
      root ALL=(ALL:ALL) ALL
      vagrant ALL=(ALL:ALL) ALL    // 这一行为新添加的代码
(3)将sudoers文件的操作权限改为只读模式

安装必备组件

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

开始编译

Clone源码

使用 git clone https://github.com/coolsnowwolf/lede.git 命令下载好源代码,然后 cd lede 进入目录

配置编译

./scripts/feeds update -a 
./scripts/feeds install -a
make menuconfig 

下载dll库

make -j8 download V=s 下载dl库(国内请尽量全局科学上网)

配置固件

之后进入如下界面,这实际上是一个配置界面,用来配置编译的配置,并不是编译的过程。

oplean1-1.png
进入Target System和Subtarget勾选你需要编译的平台,我用的是X86,并且是64位的,所以你需要选择自助选择。

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.png
oplean1-5.png

在这里有一些别的选项,比如一些VPN、aria2的web管理等等,根据需要自己进去研究。

勾选完需要的东西就可以退回第一个界面保存退出,保存按默认的文件名称(.config)保存即可,不需要修改。编译会根据.config的内容编译,想要恢复到初始配置删掉.config文件即可。

在编译的过程中,要下载一些组件什么的,如果你不翻墙,下载速度会非常慢,甚至下载不下来。

编译

保存后执行以下命令

make -j1 V=s    //第一次编译非常的慢,要花上一两个小时

Snipaste_2019-09-15_22-31-56.png

取得固件

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隐藏了

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

重新编译或修改配置后再次编译

(二次编译是指下一次你编译别的固件的时候)

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 && bash swap.sh

LEAN大佬原版的说明

https://github.com/coolsnowwolf/lede

刷写固件方法

转自:https://www.jinbo123.com/7672.html

好吧,最后如何刷机都告诉大家吧。如何把固件刷到软路由上面,建议使用以下两个方案。

  1. DiskImage直接刷写(最直接方便)
    刷写方法:制作一个PE盘,把DiskImage和LEDE固件拷贝到PE盘,插到路由上,启动PE,然后和方法一差不多,打开DiskImage,选择软路由上的那块硬盘,选择OpenWrt.img,点开始,等进度条结束,然后关机,拔掉U盘,再开机就可以了

15698111189320.jpg

  1. 用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之后,你发现在菜单里依然没有选项。因为作者又一次调皮了,居然给隐藏了。
输入以下代码后可以看到

echo 0xDEADBEEF > /etc/config/google_fu_mode

看到一个excel维护的luci清单
OpenWRT编译make menuconfig配置及LUCI插件说明.xlsx

引用文章:
https://www.cnvito.top/37.html
https://www.right.com.cn/forum/thread-344825-1-1.html
https://blog.csdn.net/qq_33867131/article/details/86490083

最后修改:2020 年 05 月 04 日 07 : 34 PM

47 条评论

  1. aluo110

    这么搞很不科学啊,不是每个喜欢软路由的都是linux码农,求编译出来的固件,造福万民:)))))))))))))))))

  2. aerowave

    博主你好,L大神默认编译的为中文,但是想改成默认为英文,怎么操作?我去到menuconfig里面去更改,貌似中文选项被锁定了。

  3. jw41016101

    添加了科学上网plus后,不先编译luci-base,不报错????

    1. Rui
      @jw41016101

      我的一切正常啊? 去掉注释之后就可以了

  4. lihao39

    请问最后一个步骤编译过程大概需要多长时间完成呢?打算用2vcpu,8G 内存和50G的硬盘的谷歌云虚机去编译。

    1. Rui
      @lihao39

      第一次我大概2个小时,你这个应该能快点。

  5. 我想问一下 那个固件版本一般作者会写上自己的名字 我怎么去掉

  6. Ben

    想用Github的actions在线编译rpi 4B的固件,但前面的配置文件搞不定啊,能给个rpi 4B的配置文件么。。。

    1. Rui
      @Ben

      那个aciton没试过,不是很懂

  7. 小白爱折腾

    你这个是最详细的,可我还是报错 world 什么的, 快崩溃了,也在阿里hk上编译的 配置2 vCPU 512 MB 各种报错,各种装系统重来,这已经不知道是第几次了,希望能好,也搜不到解决的问题,无意中看恩山好像有解决办法,这就又试一次.....

    1. Rui
      @小白爱折腾

      如果不行,你可以用我的环境。我给你root账户密码,你去编译试试

      1. 爱折腾的小白
        @Rui

        应该是整好了,在gcp开了个高配置机器,折腾了快一星期始终有报错,可能刚开始装的那一堆软件有些更新,反正搜了报错提示后又装了两个软件(g++ g--好像是这开头的软件),换了编译指令后好了,也不知道到底是哪个起的作用,另外博客速度挺好的

        1. Rui
          @爱折腾的小白

          昂 就是机器的问题 一般换个vps的事

  8. nmvbxcz

    想问一下有线路由器想要去除无线模块,应该在哪里设置

    1. 肥肥羊羊
      @nmvbxcz

      不装驱动就好了啊

    2. Rui
      @nmvbxcz

      额 这个我也不会呀 哈哈哈

  9. 羽毛

    博主这篇文章写得非常详细 参考你的操作,我也尝试了一次编译,还算比较成功吧。img刷路由器无效,还好升级包sysupgrade刷成功了

  10. 羽毛

    博主 请教一下编译这个固件的VPS需要多大的硬盘的。我的国外小鸡硬盘才30G

    1. Rui
      @羽毛

      30g应该也够了吧

    2. ccceye
      @羽毛

      50G

  11. choicky

    挺详细的。我试试。

  12. 在座的各位都是弟弟

    我是打算直接编译放进买的二手服务器里ヾ (≧∇≦*) ゝ这软路由器跟二手服务器的价钱差不多OωO

    1. Rui
      @在座的各位都是弟弟

      二手服务器功耗有点大

  13. zhd

    您好,我也用的是lean 固件,装在虚拟机里,但是无规律断网 ,不知道什么原因,记得最长稳定了运行九天。
    想了解一下,您这个稳定么,稳定运行几天。

    1. Rui
      @zhd

      这个是自己编译的,插件、配置什么的都是自己弄,所以不好说。我也是在esxi里面,一切正常非常稳。

  14. 无敌哥

    赞一个,根据博主的文章,正在编译中

  15. fend

    很好,我也是一样的情况,3205软路由,也准备自己编译。刚编译了一个tplink用的,准备试试X86的。我是在win10wsl下编译,蛮好用。

    1. Rui
      @fend

      3205做软路由也是性能过程,我用了esxi开了2-3个虚拟机

      1. 雨天
        @Rui

        3205就已经过剩了,我还特意买了个i5-4310u 呢,不过刚到手就觉得有点亏了,还有同价的i5-5200u。。。OωO

        1. Rui
          @雨天

          拿来做虚拟机倒是无所谓,反正能用得上

          1. 雨天
            @Rui

            我根据你说的使用WSL编译一次超过12个小时了还没结束,然后在网上找别人编译好的写到U盘里面,通过BIOS结果启动报错。wating for root device PARTUUID=******。。。尴尬。。好折腾啊。。(´இ皿இ`)

            1. Rui
              @雨天

              换个vps试试吧,有时候环境影响挺大的。

  16. lee

    博主您好我只想要插件但是不想要固件是要怎么选择??

    1. iPixelOldC
      @lee

      编译后的bin文件夹下那些ipk格式 的就是

    2. Rui
      @lee

      这个我也不知道啊

  17. 士大夫

    你好,这里如何加入网卡驱动呢?我的电脑网卡比较老。

  18. cy

    git clone 的时候是不是要用sudo?不然不给下载呀,怎么办?

    1. cy
      @cy

      好像可以了,之前没在新建用户的文件夹下去执行。

      1. Rui
        @cy

        那就ok啦 其实也挺简单的 选对了选项就ok了

  19. Shaonan

    为什么要两次编译呢,小白求问

    1. Rui
      @Shaonan

      没有两次编译啊?

  20. krya

    感谢,很详细,适合小白。

  21. tianlang

    整理得不错啊 编译好的文件在哪儿。

  22. thang009

    博主找到怎么设置跟koolss一样的控制局域网主机默认不通过ss吗

    1. Rui
      @thang009

      ss里面有路由设定啊

  23. VPS234主机测评

    软路由才行吧

    1. Rui
      @VPS234主机测评

      是的,主要是用在软路由上的。OωO

发表评论