更新至官方 24.10.0 版本、arm 架构编译为例,若为其他平台(x86、树莓派等其他架构)则下文中获取内核的魔法值、菜单配置需自行更改
以 root 用户执行以下命令或者有 root 权限的用户运行以下命令
Debian / Ubuntu / Mint
Modernized set for Ubuntu 24.04 that has Python 3.12 without python3-distutils: (OpenWrt main/master in Apr 2024)
sudo apt update sudo apt install build-essential clang flex bison g++ gawk \ gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev \ python3-setuptools rsync swig unzip zlib1g-dev file wget
以下命令以普通用户执行,不要用 root
先进入自己的工作目录,例如我的是~/Downloads
cd Downloads
注意
git clone 不要用 --depth=1
参数,这是非常愚蠢的行为,因为它会导致你编译的 base-files 版本号与官方不一致!
下载源码(
-b
指定分支/标签、--single-branch
仅下载单个分支/标签、)--depth=1
只下载最新的一次提交
git clone -b openwrt-24.10 https://github.com/openwrt/openwrt.git openwrt-24.10
进入到该目录
cd openwrt-24.10
编译时,一定会遇到内核的魔法值不一样,需要完成如下修改:
获取值时,要注意后续选择平台,本文以 arm 平台为例
方式一:(不知什么原因,该方式失效)
执行以下脚本即可写入到 vermagic 文件中。注意: 24.10.0 为版本号
curl -s https://downloads.openwrt.org/releases/24.10.0/targets/ipq40xx/generic/openwrt-24.10.0-ipq40xx-generic.manifest | grep kernel | awk '{print $3}' | awk -F- '{print $3}' > vermagic
方式二:
echo '60aeaf7e722ca0f86e06f61157755da3' > vermagic
echo 'fe73d0be6a246a6dcf1bbde8cd8b0d43' > vermagic
编辑配置文件
vim include/kernel-defaults.mk +130
找到这一行,然后注释掉!
# 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为 192.168.1.1 ,可以根据自己的需求进行修改
编辑配置文件
vim package/base-files/files/bin/config_generate +165
修改如下内容
lan) ipad=${ipaddr:-"192.168.50.1"} ;;
每次编译之前,都需要执行以下代码更新 feeds 包
./scripts/feeds update -a ./scripts/feeds install -a
git clone https://github.com/fullcone-nat-nftables/nft-fullcone.git package/nft-fullcone
git clone https://github.com/xiaorouji/openwrt-passwall2.git package/luci-app-passwall2
git clone https://github.com/xiaorouji/openwrt-passwall-packages.git package/passwall-packages
git clone --branch master --single-branch --no-checkout https://github.com/muink/openwrt-natmapt.git package/natmapt
git clone --branch master --single-branch --no-checkout https://github.com/muink/luci-app-natmapt.git package/luci-app-natmapt
git clone --branch master --single-branch --no-checkout https://github.com/muink/openwrt-stuntman.git package/stuntman
git clone https://github.com/gSpotx2f/luci-app-log.git package/luci-app-log-viewer
git clone https://github.com/jerrykuku/luci-theme-argon.git package/luci-theme-argon
git clone https://github.com/sirpdboy/luci-app-advanced.git package/luci-app-advanced
git clone https://github.com/xiaoxiao29/luci-app-adguardhome.git package/luci-app-adguardhome
git clone --branch master --single-branch --no-checkout https://github.com/muink/openwrt-fastfetch.git package/fastfetch
pushd package/xxx umask 022 git checkout popd
执行以下命令打开菜单配置
make menuconfig
终于来到了一个图形化界面,该界面有如下操作
提示
↑
↓
键:上下切换PgUp
PgDn
键:上下翻页Enter
回车键:
-进入子菜单
-选择/确认Sapce
空格键:在 < > 上进行操作,按一次变为 <*>,按两次变为 < M >Y
键:选中,在 < > 上进行操作,操作后变为 <*>N
键:取消选中,在 <*> 上进行操作,操作后变为 < >Esc
键:连击两下,返回上层菜单,如果在主菜单则为退出配置配置根据自己的需要进行选择
Target System -> Qualcomm Atheros IPQ40XX
Subtarget -> generic
Target Profile -> Linksys WHW03 V2
[*] Package the OpenWrt-based Toolchain
Base system --->
< > dnsmasq
<*> dnsmasq-full
Kernel modules ---> Netfilter Extensions --->
<M> kmod-nft-fullcone
{M} kmod-nft-compat
LuCI ---> Collections --->
<*> luci
LuCI ---> Collections ---> Modules --->
<*> luci-base
LuCI ---> Collections ---> Modules ---> Translations --->
<*> Chinese Simplified
注意
如果不小心配错了,可以执行以下命令重新配置
rm -rf ./tmp && rm -rf .config make menuconfig
如果想要清除以前旧的配置和缓存,可以使用以下命令
仅清理编译结果(bin目录)
make clean
清理所有编译文件(除了.config、dl文件夹和feeds以外都清理)
make dirclean
清理所有编译文件以及相关依赖(完全清理干净,一键回到刚git clone下来的时候)
make distclean
还原使用make menuconfig对配置文件.config进行的调整
make defconfig
为了防止ssh连接因各种原因断开导致命令中断,务必采用tmux命令
tmux new -s openwrt
先把编译时需要的文件下载下来(只是一部分,后面编译阶段还会下载,仍需保持网络畅通)
make download -j$(nproc)
接下来就要进入漫长的编译时间了,使用 -j 参数可以指定编译时使用的线程数
亲测Thinkpad X1 Carbon i5 线程全开需要接近1小时完成
根据CPU核心数开启指定线程数执行编译
make V=s -j$(nproc)
如果编译过程中报错了,需要使用单线程模式,确认出错的地方,然后排查(注:有时候单线程就不报错了)
make V=s -j1
make menuconfig
make package/luci-app-xxxx/compile V=99
如果ssh连接中断,再次ssh到服务器,输入以下tmux命令恢复会话
tmux attach -t openwrt
编译完成后,文件所在位置是:
~/Downloads/openwrt/bin/targets/ipq40xx/generic/