家里在两年前添置了
群晖918+
作为家庭网络存储,主要用来备份照片、视频以及作为家庭媒体中心等。
918+
的内存配置有4G
,平时基本稳定在50%
使用率,想尽可能的压榨它,正好最近疫情封控在家,所以闲的没事做,来折腾一下OpenWrt
。
其实还有另外一个更重要的原因:改善ke学上网
环境体验;由于家庭设备不一定每一台设备都需要ke学上网
环境,所以之前一直都是在我PC
上安装相关软件 + 机场
的方式来实现。
两个原因加起来,就计划自行编译OpenWrt
来定制我所需要的一些功能或插件(网上很多编译好的,但是要么功能缺失,要么过于臃肿),不过这里也推荐一个Esir
大佬编译的固件,地址:Google Drive
环境准备
总的来说,编译 OpenWrt
并不复杂,只要按照源码的编译步骤说明一步一步来操作基本上都能成功(我也是一次成功)。下面是一些准备工作,这些东西做好了,成功率应该可以保证的。
上网环境
首先需要全局的ke学上网
环境,因为OpenWrt
里面的很多依赖、插件等都需要从外网进行下载,所以你得提前想办法拥有该上网环境。
源码
本次编译基于 Lean 大的 LEDE 仓库,大家可一直接点击链接进入仓库。
编译平台
根据
Lean
大的编译说明,首先装好Linux
系统,推荐Debian 11
或Ubuntu LTS
。
我这里选用 Ubuntu 18.04 LTS
版本的镜像,由于我使用的是Mac
,所以计划将 Ubuntu
安装到 Parallels Desktop
虚拟机中(简单、快捷)。
具体安装过程这里就不介绍了,网上很多教程,要保证的是虚拟机Ubuntu
能够ke学上网
、存储空间要给大一点(至少要保证 /dev/mapper/ubuntu--vg-ubuntu--lv
大于 35G
)
- 为了能够解决
ke学上网
问题,我已经提前安装了一个旁路由,所以我这里安装系统时手动配置了旁路由的网关,同时,虚拟机也设置成了桥接模式(当然PD
默认的虚拟网卡也是可以的)
- 存储空间我分配了
80 GB
,这样/dev/mapper/ubuntu--vg-ubuntu--lv
能够分配到80Gb
左右,因为默认分配64Gb
,实际/dev/mapper/ubuntu--vg-ubuntu--lv
空间只有32Gb
,在二次编译过程中由于存储空间不够用而编译失败
第一次编译
不要用 root 用户!!!
不要用 root 用户!!!
不要用 root 用户!!!
为了验证编译环境,建议在第一次编译时,除了选择对应的架构平台外,其他的插件保持默认,在第一次编译成功后再进行二次编译。
安装编译依赖
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip libpython3-dev qemu-utils \
rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
下载源代码
# 注意:建议在非 root 用户的 home 目录执行下面的操作
git clone https://github.com/coolsnowwolf/lede
# 这里是因为自己在实际编译过程中会报没有权限的错误而加的
sudo chmod 777 lede
cd lede
更新 feeds
./scripts/feeds update -a && ripts/feeds install -a
选择配置
make menuconfig
执行这个命令后,会出现一个配置界面,根据界面菜单进行对应镜像的配置,第一次主要配置一下需要编译的平台,由于我这边群晖是一个 x86
的平台,所以不需要进行更多的配置,只需要按方向键右键定位到 Save
后回车保存到 .config
文件即可
下载 dl 库,编译固件
# -j 后面是线程数,第一次编译推荐用单线程,$(nproc)可以获取机器的CPU线程数
# make download -j$(nproc)
make download -j8
make V=s -j1
二次编译
二次编译分两种情况:需要重新配置、不需要重新配置
不需要重新配置
如果只需要更新源代码,则执行下方的命令即可
# 进入源码目录
cd lede
# 拉取最新代码
git pull
# 删除缓存
./scripts/feeds update -a && ./scripts/feeds install -a
# 更新config
make defconfig
# 下载 dl 库,编译固件
make download -j8
make V=s -j$(nproc)
需要重新配置
这里也要分为两种情况:不需要更新插件源、需要更新插件源
不需要更新插件源
这种情况是使用默认插件源,只是需要修改不同的插件、配置等,可直接执行下方命令:
# 删除缓存
rm -rf ./tmp && rm -rf .config
# 更新源
./scripts/feeds update -a && ./scripts/feeds install -a
# 重新配置
make menuconfig
# 编译
make V=s -j$(nproc)
需要更新插件源
由于LEDE
默认的插件列表中已经找不到ke学上网
相关的插件了,所以需要自行去查找相关的第三方插件源或者相关的插件安装包。
- 在
lede
源码主目录找到feeds.conf.default
文件,使用vim
编辑工具打开
vim feeds.conf.default
- 按
shift + g
键,跳转到最后一行 - 按
o
键,新开一行并进入编辑模式 - 按删除键,删除前方的
#
注释符 - 粘贴如下信息
#HelloWorld 插件
src-git HelloWorld https://github.com/fw876/helloworld
# Packages 插件源
src-git kenzok8 https://github.com/kenzok8/small-package
src-git freifunk https://github.com/freifunk/openwrt-packages.git
src-git kenzo https://github.com/kenzok8/openwrt-packages
- 按
ESC
键退出编辑模式 - 按
Shift + :
进入命令模式并输入wq
后按回车键保存并退出 - 执行下方的编译命令(使用
make clean
命令和./scripts/feeds clean
命令清除编译的缓存,如果是首次编译就添加了源的情况下就无须clean
)
# 清理make缓存
make clean
# 清理源
./scripts/feeds clean
# 删除缓存(可选)
rm -rf ./tmp && rm -rf .config
# 更新并安装源
./scripts/feeds update -a && ./scripts/feeds install -a
# 重新配置
make menuconfig
# 编译
make -j$(($(nproc) + 1)) V=s
固件输出目录
编译完成后输出路径:bin/targets
其他说明
常用配置
镜像格式
- 使用
make menuconfig
命令进入配置界面 - 定位到
Target Images
- 进行镜像格式选择(方便重置系统,选择
squashfs
模式,固件大小按实际情况设置)
IPV6 配置
- 使用
make menuconfig
命令进入配置界面 - 进入
Extra packages
- 勾选
ipv6helper
(另外,如果你没有SMB
共享或者外挂硬盘的需要的话可以取消勾选automount
和autosamba
)
- 退出,返回主目录
- 进入
Base system
- 勾选
Build With DHCPv6 Support
与DNSSEC
选项
- 退出,返回主目录
- 进入
Network ---> Firewall ---> ip6tables
,勾选ip6tables-extra
和ip6tables-mod-nat
- 返回主目录
- 光标移动到
Save
并按两次回车保存
主题配置
- 使用
make menuconfig
命令进入配置界面 - 进入
LuCI ---> 4. Themes
- 按
Y
选中你需要编译的主题(如果有其他第三方主题,需要克隆主题源码到feeds/luci/themes/
目录) - 返回主目录,保存退出
插件配置
- 使用
make menuconfig
命令进入配置界面 - 进入
LuCI ---> 3. Applications
- 按
Y
选中你需要的软件包即可 - 返回主目录,保存退出
- 推荐的插件
luci-app-adguardhome
luci-app-autoreboot
luci-app-bypass
luci-app-fileassistant
luci-app-filetransfer
luci-app-firewall
luci-app-mwan3
luci-app-netdata # 在网页后台以直观的方式监控软路由运行情况
luci-app-openclash # OpenVPN的服务端,从外面连回家里的内网
luci-app-qos # 客户端连接速度的限制
luci-app-ramfree # 一键释放空闲内存,适用于内存较小的机器
luci-app-turboacc # 一件管理各种网络加速组件,例如 BBR ,Shorcut-FE,Fullcone NAT 等
luci-app-ttyd # 网页后台命令行支持
luci-app-unblockmusic # 解锁网易云音乐
luci-app-upnp # 通用即插即用模块以及后台管理界面,动态映射端口
luci-app-vlmcsd
luci-app-wolplus
luci-app-zerotier
修改默认IP
- 使用下方命令编辑配置文件
vim package/base-files/files/bin/config_generate
- 按
:
键并输入set nu
后回车,显示行数(可选) - 按
/
键并输入192.168.1.1
找到IP
配置的地方 - 按
i
键进入编辑模式,并将该IP
配置为你想设置的IP
地址
- 按
ESC
键,并按:
键,输入wq
后回车保存并退出即可
他可能会用到的命令
# 清理编译结果
make clean
# 理所有编译文件
make dirclean
# 理所有编译文件以及相关依赖
make distclean
# 复初始状态
git clean -xdf
评论区