侧边栏壁纸
  • 累计撰写 15 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论
标签搜索

目 录CONTENT

文章目录

使用 Ubuntu 18.04 虚拟机编译 OpenWrt 固件

EamonZzz
2022-09-03 / 0 评论 / 0 点赞 / 1,720 阅读 / 2,370 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-09-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

家里在两年前添置了群晖918+作为家庭网络存储,主要用来备份照片、视频以及作为家庭媒体中心等。
918+ 的内存配置有 4G,平时基本稳定在 50% 使用率,想尽可能的压榨它,正好最近疫情封控在家,所以闲的没事做,来折腾一下 OpenWrt
其实还有另外一个更重要的原因:改善ke学上网环境体验;由于家庭设备不一定每一台设备都需要ke学上网环境,所以之前一直都是在我 PC 上安装相关软件 + 机场的方式来实现。
两个原因加起来,就计划自行编译OpenWrt来定制我所需要的一些功能或插件(网上很多编译好的,但是要么功能缺失,要么过于臃肿),不过这里也推荐一个 Esir 大佬编译的固件,地址:Google Drive

环境准备

总的来说,编译 OpenWrt 并不复杂,只要按照源码的编译步骤说明一步一步来操作基本上都能成功(我也是一次成功)。下面是一些准备工作,这些东西做好了,成功率应该可以保证的。

上网环境

首先需要全局的ke学上网环境,因为OpenWrt里面的很多依赖、插件等都需要从外网进行下载,所以你得提前想办法拥有该上网环境。

源码

本次编译基于 Lean 大的 LEDE 仓库,大家可一直接点击链接进入仓库。

编译平台

根据 Lean 大的编译说明,首先装好 Linux 系统,推荐 Debian 11Ubuntu LTS

我这里选用 Ubuntu 18.04 LTS 版本的镜像,由于我使用的是Mac,所以计划将 Ubuntu 安装到 Parallels Desktop 虚拟机中(简单、快捷)。

具体安装过程这里就不介绍了,网上很多教程,要保证的是虚拟机Ubuntu能够ke学上网、存储空间要给大一点(至少要保证 /dev/mapper/ubuntu--vg-ubuntu--lv 大于 35G

  • 为了能够解决ke学上网问题,我已经提前安装了一个旁路由,所以我这里安装系统时手动配置了旁路由的网关,同时,虚拟机也设置成了桥接模式(当然PD默认的虚拟网卡也是可以的)

image-1662295181852

image

  • 存储空间我分配了 80 GB,这样 /dev/mapper/ubuntu--vg-ubuntu--lv 能够分配到 80Gb 左右,因为默认分配 64Gb,实际 /dev/mapper/ubuntu--vg-ubuntu--lv 空间只有 32Gb,在二次编译过程中由于存储空间不够用而编译失败
    image-1662295135888
    image-1662306844800

第一次编译

不要用 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学上网相关的插件了,所以需要自行去查找相关的第三方插件源或者相关的插件安装包。

  1. lede 源码主目录找到 feeds.conf.default 文件,使用 vim 编辑工具打开
vim feeds.conf.default
  1. shift + g 键,跳转到最后一行
  2. o 键,新开一行并进入编辑模式
  3. 按删除键,删除前方的 # 注释符
  4. 粘贴如下信息
#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
  1. ESC 键退出编辑模式
  2. Shift + :进入命令模式并输入 wq 后按回车键保存并退出
  3. 执行下方的编译命令(使用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
image-1662349028701

其他说明

常用配置

镜像格式

  1. 使用 make menuconfig 命令进入配置界面
  2. 定位到 Target Images
  3. 进行镜像格式选择(方便重置系统,选择squashfs模式,固件大小按实际情况设置)
    image-1662304104722

IPV6 配置

  1. 使用 make menuconfig 命令进入配置界面
  2. 进入 Extra packages
  3. 勾选 ipv6helper (另外,如果你没有 SMB 共享或者外挂硬盘的需要的话可以取消勾选 automountautosamba
    image-1662304215096
  4. 退出,返回主目录
  5. 进入 Base system
  6. 勾选 Build With DHCPv6 SupportDNSSEC 选项
    image-1662304587537
  7. 退出,返回主目录
  8. 进入 Network ---> Firewall ---> ip6tables,勾选 ip6tables-extraip6tables-mod-nat
    image-1662304732143
  9. 返回主目录
  10. 光标移动到 Save 并按两次回车保存

主题配置

  1. 使用 make menuconfig 命令进入配置界面
  2. 进入 LuCI ---> 4. Themes
  3. Y 选中你需要编译的主题(如果有其他第三方主题,需要克隆主题源码到 feeds/luci/themes/ 目录)
  4. 返回主目录,保存退出

image-1662338500691

插件配置

  1. 使用 make menuconfig 命令进入配置界面
  2. 进入 LuCI ---> 3. Applications
  3. Y 选中你需要的软件包即可
  4. 返回主目录,保存退出
  5. 推荐的插件
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

image-1662305885680

修改默认IP

  1. 使用下方命令编辑配置文件
vim package/base-files/files/bin/config_generate
  1. : 键并输入 set nu 后回车,显示行数(可选)
  2. / 键并输入 192.168.1.1 找到 IP 配置的地方
  3. i 键进入编辑模式,并将该 IP 配置为你想设置的 IP 地址
    image-1662305370684
  4. ESC 键,并按 : 键,输入 wq 后回车保存并退出即可

他可能会用到的命令

# 清理编译结果
make clean
# 理所有编译文件
make dirclean
# 理所有编译文件以及相关依赖
make distclean
# 复初始状态
git clean -xdf
0

评论区