软路由(OpenWRT)进阶编译,深度裁剪

Overview

介绍

先介绍一下,我的软路由固件是用 LEDE 分支进行编译的,其实我也在犹豫到底是使用 OpenWRT 分支代码自己慢慢加入插件,还是使用现成的,经过一翻尝试,建议使用LEDE分支,如果是原生OpenWRT,要把我这些插件弄齐也挺费时费力的,最太忙了,没有时间慢慢折腾,等以后有空了,可以考虑。不过LEDE做的挺好的,我想也没有这个必要,如果有一些特殊的点你认为自己是走在前面的,可以给LEDE提一个pull request就好了。

交叉编译环境

我使用的是gentoo linux,我简单介绍一下gentoo需要安装的依赖。 如果是ubuntu LTS或是 Debian 11应该要安装的依赖,在LEDE的README.md中介绍了,照着做就好了。以下是gentoo的依赖:

1emerge app-arch/bzip2 app-arch/sharutils app-arch/unzip app-arch/zip app-text/asciidoc dev-libs/libusb-compat dev-libs/libxslt dev-libs/openssl dev-util/intltool dev-vcs/git dev-vcs/mercurial net-misc/rsync net-misc/wget sys-apps/util-linux sys-devel/bc sys-devel/bin86 sys-devel/dev86 sys-libs/ncurses sys-libs/zlib sys-process/time virtual/perl-ExtUtils-MakeMaker -pvt
2
3# 正式安装请把后面的 `-pvt` 去掉

目录准备

我的目录,看官可以自行定义

 1mkdir /data/openwrt/lede
 2cd /data/openwrt/lede
 3# checkout lede分支的代码
 4git clone git@github.com:coolsnowwolf/lede.git openwrt
 5
 6# 新建一个插件目录
 7mkdir custom_feed
 8
 9# 修改一下feeds文件
10vim openwrt/feeds.conf.default
11# 在文件的末尾增加一行
12src-link custom /data/openwrt/lede/custom-feed

增加的插件

 1cd /data/openwrt/lede/custom_feed
 2# 挺重要的
 3git clone git@github.com:fw876/helloworld.git
 4
 5# 这个是一个主题,我感觉挺好看的,谢过thinktip, 据作者说自己做了6年,看来也是大忙人啊
 6git clone git@github.com:thinktip/luci-theme-neobird.git
 7
 8# 我自己有加passwall, passwall2,有兴趣的可以自己加一下,加了passwall2的必须要加passwall,因为有依赖关系
 9# 我个人比较喜欢passwall2
10git clone git@github.com:xiaorouji/openwrt-passwall.git
11git clone git@github.com:xiaorouji/openwrt-passwall2.git

修改默认IP地址

位置在

1openwrt/package/base-files/files/bin/config_generate

文件中,找到以下内容,LEDE默认是192.168.1.1,你可以随意改成你想要的

1ipad=${ipaddr:-"192.168.1.1"}

下载安装feeds

1cd /data/openwrt/lede/openwrt
2./scripts/feeds update -a
3./scripts/feeds install -a

更新upx

可选(202304更新的时候已经不需要)

  • 如果选用passwall2的请更新一下upx, 这是gentoo上的指令
  • 如果有upx相关的错误,请按如下更新
1emerge upx
2cp /usr/bin/upx staging_dir/host/bin/

下载依赖

这里需要全局科学上网(好像是个玄学哦,使用openwrt的目的之一可能就是为了更好的科学上网,可惜编译他就需要科学上网,人生也是不易啊~

1make download -j8

了解硬件配置

这里介绍一下我自己的,你们自己的买的,自己搞清楚硬件就好了。

1# 我的是联想J3710主板套装(二手的) + Intel 82580 I350-T2
2CPU: J3710(64位)
3网卡: RTL8168/8111/8112 Gigabit Ethernet Controller
4PCIE网卡: Intel(R) 82575/82576 PCI-Express Gigabit Ethernet

定制内核

1cd /data/openwrt/lede/openwrt
2make menuconfig

主界面

1Target System (x86) --> x86
2Subtarget (x86_64) --> x86_64
3Target Profile (Generic x86_64) --> Generic x86_64

Target Images --->

1# 文件系统我只选择了ext4,squashfs我就没有要了
2[*] ext4 -->
3[ ] squashfs ---
4# 我这个主板是支持EFI的,所以只需要EFI的就可以了
5[ ] Build GRUB images (Linux x86 or x86_64 host only)
6[*] Build GRUB EFI images (Linux x86 or x86_64 host only)
7[*] GZip images

进入Base system --> 把busybox的定制打开

1<*> busybox
2[*] Customize busybox options

打开以下几个选项(不知道是啥的就不用改了)

 1Linux Module Utilities
 2[*] lsod
 3[*] modprobe
 4[*] rmmod
 5
 6Linux System Utilities
 7[*] mkfs.vfat
 8
 9Networking Utilities
10[*] telnet (8.8kb)

回到Base system

1# 针对IPv6的还是要开启
2-*- dnsmasq-full
3[*] build with DHCP support
4[*]   Build with DHCPv6 support
5
6# 即使要用openssh server的,也建议这个选项留着,sshd 貌似有一个bug,不知道修复没有,如果sshd有问题,起码这里还可以救一救
7<*> dropbear --- Small SSH2 client/server

Administration -->

1<*> htop ..... Interactive process viewer
2[*]   Compile Htop with lm-sensors support

Extra packages

1<*> ipv6helper ..... IPv6 Helper and Dynamic Update he.net of ip

Firmware --->

尽可能的都去掉,因为我都没有

Kernel modules -->

 1Filesystems --->
 2# 除了必须的,ntfs是需要选上的,万一你要挂硬盘得有一个比较常用的文件系统
 3
 4Native Language Support -->
 5<*> kmod-nls-cp936 ...... Codepage 936 (Simplified Chinese)
 6
 7Network device -->
 8kmod-igb --- Intel(R) 82575/82576 PCI-Express Gigabit Ethernet
 9# 我不知道板载网卡上驱动到底是哪个,懒的查了,直接两个都干进去,没有的网卡全部去掉
10kmod-r8125 --- Driver for Realteck r8125
11kmod-r8168 --- Driver for Realteck r8168
12
13
14# 另一台设备的网卡以及无线网卡(帮朋友编译的)
15kmod-ixgbe -- Intel(R) 82598/82599 PCI-Express 10 Gigabit Ethernet
16
17
18USB Support --->
19<*> kmod-usb-hid ....
20<*> kmod-usb2
21<*> kmod-usb3
22# 我没有usb网卡,所以只需要保留人体学输入设备和usb storage就可以了
23
24Wireless Drivers --->
25# 尽可能全部去掉,我没有wifi,自己的都去掉了
26
27# 另一台设备的网卡以及无线网卡(帮朋友编译的)
28kmod-ath5k
29kmod-b43 # Default Enabled

LuCI -->

 1Modules --->
 2<*> luci-mod-rpc .....
 3<*> luci-newapi .....
 4
 5# 除了以面选中的,其他全部取消
 6Applications ---->
 7<*> luci-app-accesscontrol .....
 8<*> luci-app-adbyby-plus .....
 9<*> luci-app-arpbind .....
10<*> luci-app-autoreboot .....
11<*> luci-app-ddns .....
12<*> luci-app-diskman # default include
13<*> luci-app-filetransfer .....
14<*> luci-app-firewall .....
15<*> luci-app-ipsec-vpnd .....
16<*> luci-app-nlbwmon .....
17<*> luci-app-openvpn .....
18<*> luci-app-openvpn-server .....
19<*> luci-app-passwall2 # default include
20<*> luci-app-privoxy .....
21<*> luci-app-ramfree .....
22<*> luci-app-samba .....
23<*> luci-app-ssr-plus # default include
24<*> luci-app-statistics .....
25<*> luci-app-app-ttyd .....
26<*> luci-app-turboacc .....
27<*> luci-app-v2ray-server .....
28<*> luci-app-vlmcsd .....
29<*> luci-app-webadmin .....
30<*> luci-app-wireguard .....
31
32# 朋友机设备需要
33<*> luci-app-docker .....
34
35# 我认为三个比较好看的主题,不过貌似个把月不见一次......
36Themes -->
37<*> luci-theme-argon .....
38<*> luci-theme-neobird .....
39<*> luci-theme-netgear .....

Network --->

 1SSH ---> # 除了这两个其他的我都不需要了,前面说了openssh-server有bug,所以不想选
 2<*> openssh-client ....
 3<*> openssh-keygen ....
 4
 5
 6<*> tcpdump .......... Network monitoring and data scquisition tool
 7
 8
 9Version Control System --->
10<*> git ............. The fast version control system

Utilities -->

 1Editors ---> 
 2<*> vim-full
 3
 4Shells -->
 5<*> bash
 6<*> zsh
 7
 8# collected 是做监控使用的,后面我会专门写一篇文章来分享我的监控是怎么做的
 9# 根据自己的需要,以下是我选择的Plugins
10collectd ............... Lightweight system statistics collection daemon
11[*]     Enable ability to use encrypted networking
12<*>     collectd-mod-contextswith
13<*>     collectd-mod-cpu
14<*>     collectd-mod-cpufreq
15<*>     collectd-mod-df
16<*>     collectd-mod-ethstat
17<*>     collectd-mod-exec
18<*>     collectd-mod-interface
19<*>     collectd-mod-ipstatistics
20<*>     collectd-mod-iptables
21<*>     collectd-mod-irq
22<*>     collectd-mod-iwinfo
23<*>     collectd-mod-load
24<*>     collectd-mod-momory
25<*>     collectd-mod-netlink
26<*>     collectd-mod-network
27<*>     collectd-mod-openvpn
28<*>     collectd-mod-ping
29<*>     collectd-mod-processes
30<*>     collectd-mod-rrdtool
31<*>     collectd-mod-sensors
32<*>     collectd-mod-swap
33<*>     collectd-mod-thermal
34<*>     collectd-mod-users

编译

1make -j1 V=s

编译完成后的目标文件在

1$ ls bin/targets/x86/64/       
2config.buildinfo                                 openwrt-x86-64-generic-ext4-rootfs.img.gz  packages
3feeds.buildinfo                                  openwrt-x86-64-generic-kernel.bin          sha256sums
4openwrt-x86-64-generic-ext4-combined-efi.img.gz  openwrt-x86-64-generic.manifest            version.buildinfo

可能遇到的错误

如果编译过程中报mbedtls错误

1...
2configure: error: mbed TLS libraries not found.
3...

或者s

1* check_data_file_clashes: Package libustream-openssl wants to install file /home/shixiaofeng/source/build_dir/target-mipsel_24kc_musl/root-ramips/lib/libustream-ssl.so
2        But that file is already provided by package  * libustream-mbedtls

解决办法

12https://github.com/AlexZhuo/openwrt-feeds/tree/master/base/mbedtls 
3替换 
4package/libs/mbedtls