如果没看过上篇的,建议先去看一下,L大OpenWrt固件源码仓库地址也贴在上篇里面。
上篇地址:《言小五系列教程之基于L大OpenWrt源码编译软路由固件(上)

再啰嗦一句,一定要保证宿主机全局科学上网!再次声明,本文采用的是Win10电脑下的Vritual Box虚拟机安装的Ubuntu 18.04 server版本来进行编译OpenWrt固件。如果你使用的是非中国内地的vps进行编译,那么当我没说过。
博主使用的是搬瓦工官方机场Just My Socks的洛杉矶CN2 GIA节点,IP被封自动换,压根就不需要担心IP被封的问题,推荐方案如下:
方案2:月付5.88刀/年付58.88刀/每月500G流量/2.5G带宽/限制5个设备/洛杉矶
方案3:月付9.88刀/年付98.88刀/每月1000G流量/5G带宽/不限制设备/洛杉矶
详见《言小五系列教程之搬瓦工Just My Socks详细购买及使用教程与优惠码

好了,话不多说,下面开始实施!

一、首次编译
1、Xshell连接上Ubuntu虚拟机,用普通账户登陆,不要用root。输入下方命令并回车更新系统;需要输入一下用户密码,因为不是root用户;(这个步骤是考验节点网速的第一步)
sudo apt-get update

2、安装各种程序和依赖包,命令如下:(继续考验节点网速)
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

3、下载L大的源码到Ubuntu上,命令如下:
git clone https://github.com/coolsnowwolf/lede

4、进入lede目录,编辑feeds.conf.default(很重要,除非你不想要SSR科学上网Plus+插件)
cd lede
vi feeds.conf.default

5、找到#src-git helloworld https://github.com/fw876/helloworld,这个helloworld就很应景了。按 i 进入编辑模式,删掉这段代码最前面的 # 号,按ESC退出编辑模式,输入 :wq! 保存并退出。

6、更新luci、插件包、OpenWrt官方源码以及ssr-plus项目以及安装,命令如下:
./scripts/feeds update -a
./scripts/feeds install -a

7、接下来切换到Virtual Box的Ubuntu 18.04窗口,Xshell不用关闭;先同第1步骤一样,以普通账户登陆,不要用root;然后进入到lede目录,再输入make menuconfig进入到自编译固件编辑主菜单页面。
cd lede
make menuconfig


提示:在这个界面,按空格选中(注意,在Target System (x86)、Subtarget (x64 64bit)以及Target Profile (Generic)菜单里面,出现 X 即为选中,在其它所有的菜单选项中,按空格键,出现 * 号就是选中),按两下ESC是返回上级菜单。

7.1、如果是intel处理器的软路由,可以直接奔着LuCI去就行了;如果是其它处理器,则需要根据处理器的不同来自己勾选。
Target System (x86) —> 根据处理器选择(默认x86,intel处理器默认x86);

Subtarget (x64 64bit) —> 默认x64位,类似于win系统有32位和64位一个道理;

Target Profile (Generic) —> 通用的,默认选中的不管它;
Target Images —> 固件启动方式和格式,如果不了解的话,保持默认就行;需要注意一点,如果发现[*]squashfs这个选项没有选中,一定要手动选中。

7.1.1、单独补充说一下这个Target Images里面的选项,常见软路由无非是物理机安装以及虚拟机安装;

7.1.1.1、物理机固件有两个版本:
Build GRUB images (Linux x86 or x86_64 host only)即combined
Build EFI GRUB images (Linux x86 or x86_64 host only)即uefi-gpt

L大默认选中的也是必选项就是Build GRUB images (Linux x86 or x86_64 host only),软路由主板不一定都支持uefi启动,比如说我的J1900入门级四网口软路由支持uefi,当时刷koolshare论坛LEDE的时候,就是用的uefi;诶?跑题了。简单点来说,如果主板支持uefi启动,那就选中EFI;如果不确定主板支不支持uefi启动,那就不选EFI。
7.1.1.2、虚拟机安装有4个版本,如果在上面选中了EFI,则选中下方虚拟机固件时,会编译相对应的虚拟机专用uefi固件。
Build VirtualBox image files (VDI)
Build VMware image files (VMDK)—默认选中,毕竟用VMware虚拟的也有很多。
Build Hyper-V image files (VHD)
Build PVE/KVM image files (QCOW2)

7.2、以下几个选项均无需设置或选中;
Global build settings
Advanced configuration options (for developers)
Build the OpenWrt Image Builder
Build the OpenWrt SDK
Package the OpenWrt-based Toolchain
Image configuration

7.3、Base system,如果需要DHCPv6服务,则需要在该菜单里面,dnsmasq-full下方选中Build with DHCPv6 support,其它的默认就行;

7.4、以下几个选项默认不用管;
Administration
Boot Loaders
Development
Extra packages
Firmware
Fonts
Kernel modules
Languages
Libraries

7.5、光标移动到LuCI选项前面,回车进入LuCI选项界面;

7.5.1、LuCI菜单里面以下几个选项基本不用点进去看,直接保持默认就行;
Collections
Modules
Protocls
Libraries
Freifunk
default-settings

7.5.2、所有的功能插件都在Applications选项里面;还记得我在上篇说过先列举出来所需要的功能插件吗?在Applications里面对着清单自己选择吧,有很多是L大默认选中的,个人根据实际需求选中或不选就行了。比如第一个选项,luci-app-accesscontrol 即上网时间控制,是默认选中的,但是我没这个需求,所以取消选中。
如果出现选项前面出现 -*- ,那么说明这个是必选项,比如luci-app-firewall(即防火墙)。

对于我来说,最重要的就是这个不可描述的插件了,即luci-app-ssr-plus,这个插件选项有几个子选项,我常用shadowsocks,v2ray以及trojan,所以我只保留了这三个。

7.5.3、哦,差点忘了。LuCI里面还有个Themes,这个就是OpenWrt的主题了,也叫皮肤;

7.5.3.1、进入Themes菜单之后是这样的,默认也是必须选中的是bootstrap,根据实际需要自行选择或者不选择其它皮肤。
luci-theme-argon
luci-theme-bootstarp(默认皮肤)
luci-theme-material
luci-theme-netgear


7.5.3.2、四款皮肤预览见下方这篇文章。
《言小五自编译常用插件集成版OpenWrt固件预览》

7.6、最后确认一下相关插件和皮肤都选上了没,不需要的取消选中没,然后方向右键移动到 Save 上,回车,选 OK ,回车;

7.7、光标默认在 Exit 上,回车返回到LuCI子菜单;

7.8、LuCI子菜单

7.9,再按两下 ESC,回到固件编辑主菜单;

7.8、主菜单Luci下方的几个选项也不用点进去了,保持默认就好。
Mail
Multimedia
Network
Sound
Utilities
Xorg

7.8、光标移动到 Exit上,回车,退出固件编辑页面,回到命令行界面。

8、好了,程序和插件已经选好了,那么切换到Xshell操作,输入下方代码下载dl库,又到了考验上网节点网速的时刻,我在这一步花了5分钟时间。请忽略截图中没有 V=s 参数,首次编译的时候忘记截图了而已。
make -j8 download V=s

9、接下来开始编译,命令如下:(首次编译的时候忘记截图了,用第N次编译的截图顶替一下)
make -j1 V=s

9.1、编译需要多久取决于你的电脑CPU运算能力,我在上文中说过,我首次1线程编译耗时150分钟,宿主机是八年前的I5笔记本,编译完成之后是这样的:

10、编译完成之后,固件文件在 /lede/bin/targets 目录里面,比如我编译的x86 64位,则文件在 /lede/bin/targets/x86/64下面;

11、那么怎么把编译好的固件下载到宿主机本机上呢?我比较喜欢在Xshell上用lrzsz来上传下载文件,直接输入下方命令安装lrzsz;
sudo apt-get install lrzsz
11.1、按照固件文件地址下载固件到本地,直接进入到固件所在文件夹,输入 ls 查看所有固件列表;
cd bin/targets/x86/64/
ls

11.2、然后输入 sz 对应文件名包括后缀 进行下载;
比如输入:
sz openwrt-x86-64-combined-squashfs.img

11.3、输入上面命令之后,会弹出本地文件夹浏览框,选择文件夹,点击确定开始下载,下载完成之后,到文件夹去找到固件,然后就没有然后了。

11.4、在上面7.1步骤已经说过了,就是 Target Images 选项,默认编译三个不同用法的固件,分别是:
openwrt-x86-64-combined-squashfs.img —这个是最常用的物理机固件,一般用这个;
openwrt-x86-64-rootfs-squashfs.img ——这个是root分区用的,熟悉linux的直接dd;
openwrt-x86-64-combined-squashfs.vmdk—这个是VMware虚拟机专用,Virtual Box也能用。

11.4.1、我为了写这篇文章,两种启动模式的物理机和虚拟机固件我都编译了,编译出来的固件分别是:(固件分别怎么用,在上篇已经解释过了,这里就不再啰嗦)
openwrt-x86-64-combined-squashfs.img
openwrt-x86-64-combined-squashfs.qcow2
openwrt-x86-64-combined-squashfs.vdi
openwrt-x86-64-combined-squashfs.vhdx
openwrt-x86-64-combined-squashfs.vmdk
openwrt-x86-64-rootfs-squashfs.img
openwrt-x86-64-uefi-gpt-squashfs.img
openwrt-x86-64-uefi-gpt-squashfs.qcow2
openwrt-x86-64-uefi-gpt-squashfs.vdi
openwrt-x86-64-uefi-gpt-squashfs.vhdx
openwrt-x86-64-uefi-gpt-squashfs.vmdk

二、二次编译
1、进入lede目录
cd lede
2、重新拉取仓库内容,若无更新则会自动略过;
git pull
3、检查更新和升级feeds
./scripts/feeds update -a && ./scripts/feeds install -a
4、读取程序和插件选项配置
make defconfig
5、下载dl依赖,若无更新则会自动略过;
make -j8 download
6、开始编译;j$(($(nproc) + 1))代表自动获取当前处理器线程,比如我给虚拟机分配了1CPU,只有1个线程,则还是使用1线程,如果分配给虚拟机4CPU,则使用4线程;根据自己宿主机实际CPU来调节分配。
make -j$(($(nproc) + 1)) V=s
7、二次编译总共耗时10分钟。

三、重新配置程序和插件包,重新编译。如果重新编译与前一次编译时间相隔不久,那么可以略过下面前三步。
1、进入lede目录
cd lede
2、重新拉取仓库内容,若无更新则自动略过;
git pull
3、检查更新和升级feeds
./scripts/feeds update -a && ./scripts/feeds install -a
4、删除上一次编译的缓存和配置文件;
rm -rf ./tmp && rm -rf .config
5、重新开始配置程序和插件包;这里我依旧切换到Virtual Box下Ubuntu虚拟机窗口命令行操作;
make menuconfig
6、开始编译;
make -j$(($(nproc) + 1)) V=s
7、此次编译耗时18分钟(分配核心数同二次编译的第6步骤一致)。

四、物理机安装怎么写盘?算了,不写了,请看下方这篇文章,过程没啥区别,只是把LEDE的固件换成了自己编译的;也可以直接在系统 – 备份/升级里面直接刷写新的固件;但是还是建议写盘安装,我不知道直接升级会不会遇到什么问题,虽然我直接从LEDE升级到自编译的OpenWrt没出现什么问题。
言小五LEDE软路由日记(一) J1900工控准系统LEDE软路由系统安装及配置

本文完结。

2 thoughts on “言小五系列教程之基于L大OpenWrt源码编译软路由固件(下)

  1. kennyzjg说道:

    编译好之后并没有出现你图上那个uefi-gpt固件,openwrt-x86-64-generic-squashfs-combined-efi,只有这个,conbined-efi。。啥原因?源码更新的结果?

    1. 言小五说道:

      @kennyzjg 没错,就是源码更新之后的固件命名改变了。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注