如果没阅读上篇,建议先去浏览,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下方的选项也无需点击,保持默认。
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并未出现问题。
本文完结。