软路由(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
解决办法
1用
2https://github.com/AlexZhuo/openwrt-feeds/tree/master/base/mbedtls
3替换
4package/libs/mbedtls