使用 OpenWrt 22.03.5 官网源码编译固件
2023/04/05
OpenWrt
> 推荐看完视频教程再来看此文章:[软路由安装PVE虚拟机安装OpenWrt、爱快iKuai、NAS,打造all in one小主机,超详细!](https://www.bilibili.com/video/BV1pu411z7v4) 下文以官方 22.03.4 为例 # 前言 用过大佬编译好的固件,也自己基于大佬的固件手动编译,最终还是决定用官方的源码编译,只加入自己想要的软件 相关链接: - 官方的地址 - 源码:[https://github.com/openwrt/openwrt](https://github.com/openwrt/openwrt) - 固件:[https://downloads.openwrt.org](https://downloads.openwrt.org) - 大佬编译好的固件: - `bleach` : 恩山论坛 [每日更新 高大全/精简版 Openwrt x86 6.1内核 软路由固件](https://www.right.com.cn/forum/thread-8267087-1-1.html) - `eSir` : [https://drive.google.com/drive/folders/1uRXg_krKHPrQneI3F2GNcSVRoCgkqESr](https://drive.google.com/drive/folders/1uRXg_krKHPrQneI3F2GNcSVRoCgkqESr) 打不开就算了 - 大佬的源码: - `Lean's LEDE` : [https://github.com/coolsnowwolf/lede](https://github.com/coolsnowwolf/lede) - `Lienol's OpenWrt` : [https://github.com/Lienol/openwrt](https://github.com/Lienol/openwrt) # 准备工作 ## 环境 - 系统:Linux 系统( Debian 11 或 Ubuntu LTS ) - 网络:可以访问外网(国内请尽量全局科学上网) - 磁盘:大约有 30G 的空闲空间 - 内存:至少 4G 物理内存 - CPU:越快越好,影响编译速度 ## 依赖 以 `root` 用户执行以下命令或者有 `root` 权限的用户 ```bash sudo apt update -y sudo apt full-upgrade -y sudo apt install -y ack antlr3 aria2 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` ```bash # 下载源码(-b 指定分支/标签、 --single-branch 仅下载单个分支/标签、 --depth=1 只下载最新的一次提交 ) git clone -b v22.03.5 --single-branch --depth=1 https://github.com/openwrt/openwrt.git # 进入到该目录 cd openwrt ``` # 配置 ## vermagic 自行编译时,会出现内核的魔法值不一样,需要完成如下修改: ### 获取值 > 方式一: 执行以下脚本即可写入到 `vermagic` 文件中。注意: `22.03.5` 为版本号 ```bash curl -s https://downloads.openwrt.org/releases/22.03.5/targets/x86/64/openwrt-22.03.5-x86-64.manifest | grep kernel | awk '{print $3}' | awk -F- '{print $3}' > vermagic ``` > 方式二: 1. 打开官方对应版本的下载链接:[https://downloads.openwrt.org/releases](https://downloads.openwrt.org/releases) 2. 点击:22.03.5 -> targets -> x86 -> 64 3. 下载 `Supplementary Files` 中的 `openwrt-22.03.5-???-???.manifest` 文件 4. 使用文本编辑器打开该文件,记录下 `kernel` 最后面的那串字符串 5. 执行以下脚本写入到 `vermagic` 文件中 ```bash # 注意:c90b8cdeba326c5459f96b8e3bd16c5a 就是上文中的字符串 echo 'c90b8cdeba326c5459f96b8e3bd16c5a' > vermagic ``` ### 修改内核配置文件 ```bash # 编辑配置文件 vim include/kernel-defaults.mk +121 # 找到这一行,然后注释掉! grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | $(MKHASH) md5 > $(LINUX_DIR)/.vermagic # 再在下一行添加如下内容 cp $(TOPDIR)/vermagic $(LINUX_DIR)/.vermagic ``` 修改完成后效果如下:  ## 时区 ```bash # 编辑配置文件 vim package/base-files/files/bin/config_generate +306 # 修改时区为 CST-8 set system.@system[-1].timezone='CST-8' # 再在下一行添加如下内容 set system.@system[-1].zonename='Asia/Shanghai' ``` 修改完成后效果如下:  ## 默认IP 默认管理IP为 `192.168.1.1` ,可以根据自己的需求进行修改 ```bash # 编辑配置文件 vim package/base-files/files/bin/config_generate +165 # 修改如下内容 lan) ipad=${ipaddr:-"192.168.188.1"} ;; ``` 修改完成后效果如下:  ## 软件包 添加第三方软件有两种方式: 1. 将软件包仓库地址写入 `feeds.conf.default` 文件中,可以参考 `kenzok8` 的软件包的说明文档 2. 使用 `git clone` 手动下载软件包放入到 `package` 文件夹中,下文中使用这种方式 不论是哪种方式加入第三方软件,都需要执行以下代码更新 `feeds` 包 ```bash ./scripts/feeds update -a ./scripts/feeds install -a ``` ## 菜单配置 执行以下命令打开菜单配置 ```bash make menuconfig ``` 终于来到了一个图形化界面,该界面有如下操作 - `↑ ↓` 键:上下切换 - `PgUp PgDn` 键:上下翻页 - `Enter` 回车键: - 进入子菜单 - 选择/确认 - `Y` 键:选中,在 `< >` 上进行操作,操作后变为 `<*>` - `N` 键:取消选中,在 `<*>` 上进行操作,操作后变为 `< >` - `Esc` 键:连击两下,返回上层菜单,如果在主菜单则为退出配置 按照如下配置进行选择,其他未说明的不要动 - Target System -> x86 - Subtarget -> x86_64 - Target Images - < > tar.gz - < > ext4 - < > Build GRUB images - (1) Seconds to wait before booting the default entry - (256) Root filesystem partition size - Base system - < > dnsmasq - <*> dnsmasq-full - LuCI - Collections - <*> luci - Modules - Translations - <*> Chinese Simplified - Applications - 根据自己的需要选择软件包 如果不小心配错了,可以执行以下命令重新配置 ```bash rm -rf ./tmp && rm -rf .config make menuconfig ``` ## 预下载 这里会先把编译时要下载的文件下载下来(只是一部分,后面编译阶段还会下载,仍需保持网络畅通) ```bash make download -j8 V=s ``` # 编译 接下来就要进入漫长的编译时间了,使用 `-j` 参数可以指定编译时使用的线程数 亲测笔记本 `i7-8750H` 12线程全开需要接近2小时完成,单线程需要4-5小时 ```bash # 根据CPU核心数开启指定线程数执行编译 make V=s -j$(nproc) # 如果编译过程中报错了,需要使用单线程模式,确认出错的地方,然后排查 make V=s -j1 ``` # 获取成果 编译完成后,镜像文件地址是:`./bin/targets/x86/64/openwrt-x86-64-generic-squashfs-combined-efi.img.gz` 下载到本地后需要先解压 ```bash # 如果是PVE中安装,上传 .img 文件后,可以使用以下命令导入镜像文件 qm importdisk 100 /var/lib/vz/template/iso/openwrt-x86-64-generic-squashfs-combined-efi.img local ```
98