编译L大OpenWrt固件指南

如果没阅读上篇,建议先去浏览,L大OpenWrt固件源码的仓库地址也在上篇中提供。

上篇地址:

再次强调,确保宿主机全局科学上网!本文将使用Win10电脑下的Virtual Box虚拟机,安装Ubuntu 18.04 server版本来编译OpenWrt固件。如果你使用的是非中国内地的VPS进行编译,那么请忽略此文。

博主使用的服务器是搬瓦工的洛杉矶CN2 GIA节点,IP被封可以自动更换,无需担心IP封禁的问题,推荐方案如下:

方案2:

方案3:

具体见

好了,言归正传,下面开始实施!

一、首次编译

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,将代码最前的#号删去,按ESC退出编辑模式,输入:wq!保存并退出。

6、更新luci、插件包、OpenWrt官方源码及SSR-Plus项目并安装,命令如下:

`./scripts/feeds update -a

./scripts/feeds install -a`

7、然后返回Virtual Box中的Ubuntu 18.04窗口,Xshell不需要关闭;以普通账户登录,不用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;如果不确定,建议不选EFI。

7.1.1.2、虚拟机安装则有四个版本,若上方选中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-bootstrap(默认皮肤)

luci-theme-material

luci-theme-netgear`

7.5.3.2、皮肤预览见下文。

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算力相关,我在前文提到首次使用单线程编译花费了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))代表自动获取当前处理器线程,例如我为虚拟机分配了1个CPU,只有1个线程,则用1线程,分配给虚拟机4个CPU,则用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并未出现问题。

本文完结。