前言
用过大佬编译好的固件,也自己基于大佬的固件手动编译,最终还是决定用官方的源码编译,只加入自己想要的软件相关链接:
- 官方的地址
- 大佬的源码:
Lean's LEDE
: https://github.com/coolsnowwolf/ledeLienol's OpenWrt
: https://github.com/Lienol/openwrt
准备工作
环境
- 系统:Debian 11 x64位系统 / Ubuntu 18.04 x64位系统
- 网络:可以访问外网(国内请全局科学上网)
- 磁盘:大约有 30G 的空闲空间
- 内存:至少 4G 物理内存
- CPU:越快越好,影响编译速度
依赖
以 root
用户执行以下命令或者有 root
权限的用户
sudo apt update -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
# 下载源码(-b 指定分支/标签、 --single-branch 仅下载单个分支/标签、 --depth=1 只下载最新的一次提交 )
git clone -b v23.05.5 --single-branch --depth=1 https://github.com/openwrt/openwrt.git
# 进入到该目录
cd openwrt
配置
vermagic
自行编译时,会出现内核的魔法值不一样,需要完成如下修改:
获取值
获取值时,要注意后续选择平台,本文以 x64
平台为例
方式一:
执行以下脚本即可写入到 vermagic
文件中。注意: 23.05.5
为版本号
方式二:
- 打开官方对应版本的下载链接:https://downloads.openwrt.org/releases
- 点击:23.05.5 -> targets -> x86 -> 64
- 下载
Supplementary Files
中的openwrt-23.05.5-x86-64.manifest
文件 - 使用文本编辑器打开该文件,记录下
kernel
最后面的那串字符串 - 执行以下脚本写入到
vermagic
文件中
# 注意:47964456485559d992fe6f536131fc64 就是上文中的字符串
echo '47964456485559d992fe6f536131fc64' > vermagic
修改内核配置文件
# 编辑配置文件
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
修改完成后效果如下:
时区
# 编辑配置文件
vim package/base-files/files/bin/config_generate +315
# 修改时区为 CST-8
set system.@system[-1].timezone='CST-8'
# 再在下一行添加如下内容
set system.@system[-1].zonename='Asia/Shanghai'
修改完成后效果如下:
默认IP
默认管理IP为 192.168.1.1
,可以根据自己的需求进行修改
# 编辑配置文件
vim package/base-files/files/bin/config_generate +165
# 修改如下内容
lan) ipad=${ipaddr:-"192.168.188.1"} ;;
修改完成后效果如下:
软件包
添加第三方软件有两种方式:
- 将软件包仓库地址写入
feeds.conf.default
文件中,可以参考kenzok8
的软件包的说明文档 - 使用
git clone
手动下载软件包放入到package
文件夹中,下文中使用这种方式
不论是哪种方式加入第三方软件,都需要执行以下代码更新 feeds
包
./scripts/feeds update -a
./scripts/feeds install -a
菜单配置
执行以下命令打开菜单配置
make menuconfig
终于来到了一个图形化界面,该界面有如下操作
↑ ↓
键:上下切换PgUp PgDn
键:上下翻页Enter
回车键:- 进入子菜单
- 选择/确认
Y
键:选中,在< >
上进行操作,操作后变为<*>
N
键:取消选中,在<*>
上进行操作,操作后变为< >
Esc
键:连击两下,返回上层菜单,如果在主菜单则为退出配置
按照如下配置进行选择,其他未说明的不要动
- Target System -> x86
# 软路由选择 x86,硬路由根据型号厂家自行选择
- Subtarget -> x86_64
#
CPU 子选项
- Target Images
# 设置镜像编译的格式(squashfs,ext4)
- < > tar.gz
- < > ext4
# 默认 squashfs
- < > Build GRUB images
- (1) Seconds to wait before booting the default entry
# 添加较多插件时,为了避免空间不足,建议修改下面两项默认大小(x86/64)
(16) Kernel partition size (in MB)
# 内核大小 默认是16,建议修改为256
- (256) Root filesystem partition size
# 分区大小 默认是256,建议修改为512
- Base system
- < > dnsmasq
- <*> dnsmasq-full
- LuCI
- Collections
- <*> luci
- Modules
- Translations
- <*> Chinese Simplified
- Translations
- Applications
- 根据自己的需要选择软件包
插件中文说明对照表:
点击查看
- Collections
Themes
选择喜欢的主题,可以选多个
#为 星空组网 开启必要的 依赖
- Libraries
<*> libcap-bin. Linux capabilities library binaries
- Kernel modules
<*>kmod-tun. Universal TUN/TAP driver
如果不小心配错了,可以执行以下命令重新配置
rm -rf ./tmp && rm -rf .config
make menuconfig
预下载
这里会先把编译时要下载的文件下载下来(只是一部分,后面编译阶段还会下载,仍需保持网络畅通)
make download -j8 V=s
编译
接下来就要进入漫长的编译时间了,使用 -j
参数可以指定编译时使用的线程数
亲测笔记本 i7-8750H
12线程全开需要接近2小时完成,单线程需要4-5小时
# 根据CPU核心数开启指定线程数执行编译
make V=s -j$(nproc)
# 如果编译过程中报错了,需要使用单线程模式,确认出错的地方,然后排查(注:有时候单线程就不报错了)
make V=s -j1
获取成果
编译完成后,镜像文件地址是:
./bin/targets/x86/64/openwrt-x86-64-generic-squashfs-combined-efi.img.gz
下载到本地后需要先解压
# 如果是PVE中安装,上传 .img 文件后,可以使用以下命令导入镜像文件
qm importdisk 100 /var/lib/vz/template/iso/openwrt-x86-64-generic-squashfs-combined-efi.img local
其它
在固件中集成 Docker的方法
在上面的配置中增加如下设置
Target Images
(2048) Root filesystem partition size
Kernel modules
Network Devices
<*>kmod-macvlan. MAC-VLAN support
- Network Support
<*>kmod-tun. Universal TUN/TAP driver<*> kmod-veth. Virtual ethernet pair deviceLuCI
- Collections
- <*>luci-lib-docker. LuCI library for docker
- Applications
- <*> luci-app-dockerman. LuCI Support for docker
- <*> luci-app-dockerman. LuCI Support for docker
Utilities
<*>docker. Docker Community Edition CLI-*- dockerd. Docker Community Edition Daemon ---><*> cgroup-tools. CGroup config and exec tools<*> cgroupfs-mount. cgroup mount scripts ----网上找的其他依赖仅供参考
#luci-lib-docker dockerd luci-lib-jsonc docker
#docker dockerd luci-app-dockerman luci-i18n-dockerman-zh-cn
#dockerd luci-app-dockerman luci-i18n-dockerman-zh-cn
kmod-macvlan docker-compose
二次编译:
cd openwrt ./scripts/feeds update -a ./scripts/feeds install -a make menuconfig make download -j8 make V=s -j$(nproc)
评论
发表评论