ImmortalWrt 系统编译与定制 🏔️
🛠️ 从零开始构建专属的 OpenWrt 固件,满足个性化需求。本指南详细介绍了 ImmortalWrt 的编译、定制、安装和优化全过程。
✨ 目录
✨ 概述
ImmortalWrt 是 OpenWrt 的一个分支,专注于提供更稳定的功能和更好的用户体验。本指南将帮助您:
✅ 了解 ImmortalWrt 的基本概念和优势
✅ 掌握在线定制编译的方法
✅ 配置个性化的软件包组合
✅ 创建自动化的首次启动脚本
✅ 处理镜像扩容和系统优化
✅ 部署和维护您的定制系统
🎯 一、准备工作
📚 学习资源
🔧 环境要求
1
2
3
4
5
6
7
8
9
10
# 硬件要求
- 处理器: x86_64 或 ARM 架构
- 内存: 至少 2GB RAM
- 存储: 至少 10GB 可用空间
- 网络: 稳定的互联网连接
# 软件要求
- 操作系统: Linux ( 推荐 Ubuntu 20.04+ 或 iStoreOS/OpenWrt)
- 基础工具: git, curl, wget, build-essential
- 编译依赖: 参见官方文档
🛠️ 必要工具安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 在 Ubuntu/Debian 上安装基础工具
sudo apt update
sudo apt install -y \
git curl wget \
build-essential \
libssl-dev \
libncurses5-dev \
unzip gzip \
python3 python3-pip
# 在 OpenWrt/iStoreOS 上安装工具
opkg update
opkg install \
git-http \
curl \
wget \
unzip \
gzip \
parted \
losetup \
resize2fs \
openssh-sftp-server
📁 创建工作目录
1
2
3
4
5
6
# 创建项目目录
mkdir -p ~/immortalwrt-build
cd ~/immortalwrt-build
# 克隆相关工具
git clone https://github.com/wukongdaily/OpenBackRestore.git
⚙️ 二、在线定制编译
🌐 访问在线构建器
打开 ImmortalWrt 官方在线构建器:
Firmware Selector
🎛️ 配置构建参数
选择版本 : 23.05.4
(稳定版)
选择平台 :
架构: x86/64
子目标: generic
变体: ext4-combined
(推荐)
点击展开按钮 → 自定义预装软件
🔍 软件包搜索技巧
需要查找软件包名称?访问:
软件包仓库
📝 构建配置示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 目标系统配置
TARGET: x86
SUBTARGET: 64
PROFILE: generic
# 镜像格式
EXT4_ROOTFS: enabled
COMBINED_IMAGE: enabled
GRUB_IMAGES: disabled
# 基础组件
BASE: enabled
LUCI: enabled
LUCI_SSL: enabled
⏳ 编译过程监控
1
2
3
4
5
6
7
8
# 编译时间预估(根据硬件配置)
- 低端设备: 2-4 小时
- 中端设备: 1-2 小时
- 高端设备: 30-60 分钟
- 云服务器: 15-30 分钟
# 监控编译进度
tail -f build.log | grep -E "(processing|install|Creating)"
📦 三、预装软件配置
🎯 推荐预装软件列表
🌐 网络工具
1
2
3
4
5
6
7
8
9
10
11
# 基础网络
luci-i18n-firewall-zh-cn
luci-i18n-opkg-zh-cn
luci-i18n-ttyd-zh-cn
openssh-sftp-server
# 高级网络
luci-app-wol
luci-i18n-wol-zh-cn
luci-app-upnp
luci-i18n-upnp-zh-cn
📁 文件管理
1
2
3
4
5
6
7
8
9
10
11
12
13
# 文件浏览器
luci-app-filebrowser
luci-i18n-filebrowser-zh-cn
# FTP 服务
vsftpd
luci-app-vsftpd
# 磁盘管理
luci-app-diskman
parted
fdisk
e2fsprogs
🎨 主题界面
1
2
3
4
5
6
7
8
# Argon 主题
luci-theme-argon
luci-app-argon-config
luci-i18n-argon-config-zh-cn
# 其他主题
luci-theme-material
luci-theme-bootstrap
🔒 科学上网
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# PassWall
luci-app-passwall
luci-i18n-passwall-zh-cn
# OpenClash
luci-app-openclash
# HomeProxy
luci-app-homeproxy
luci-i18n-homeproxy-zh-cn
# Shadowsocks
shadowsocks-libev
luci-app-shadowsocks-libev
🛠️ 系统工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 监控统计
luci-app-statistics
luci-i18n-statistics-zh-cn
# 带宽监控
luci-app-nlbwmon
luci-i18n-nlbwmon-zh-cn
# 定时任务
luci-app-cron
luci-i18n-cron-zh-cn
# 磁盘扩展
luci-app-partexp
🔧 自定义软件选择技巧
1. 按功能需求选择
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 家庭用户基础套餐
luci-i18n-firewall-zh-cn
luci-i18n-upnp-zh-cn
luci-app-wol
luci-theme-argon
# 高级用户套餐
luci-app-passwall
luci-app-diskman
luci-app-statistics
luci-app-filebrowser
# 最小化套餐
luci-i18n-firewall-zh-cn
luci-i18n-opkg-zh-cn
openssh-sftp-server
2. 空间优化策略
1
2
3
4
5
6
7
# 查看软件包大小(编译前)
opkg info <package-name> | grep Size
# 精简语言包(只保留中文)
luci-i18n-base-zh-cn
luci-i18n-firewall-zh-cn
# 避免安装所有语言包
3. 依赖关系处理
1
2
3
4
5
6
7
# 自动解决依赖
./scripts/feeds update -a
./scripts/feeds install -a
# 检查缺失依赖
make defconfig
make -j1 V = s 2>& 1 | grep "missing"
4. 模块化配置
1
2
3
4
5
6
7
8
9
10
# 创建自定义软件包列表
cat > custom_packages.list << 'EOF'
luci-i18n-firewall-zh-cn
luci-i18n-opkg-zh-cn
luci-theme-argon
openssh-sftp-server
EOF
# 批量安装
xargs -a custom_packages.list opkg install
🔧 四、首次启动脚本
🚀 初始化脚本配置
创建首次启动配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/sh
# /etc/uci-defaults/99-custom-init
logger -t custom-init "开始执行首次启动配置"
# 1. 启用 WAN 口防火墙访问
uci set firewall.@zone[ 1] .input= 'ACCEPT'
uci commit firewall
logger -t custom-init "已启用 WAN 口防火墙访问"
# 2. 解决 Android TV 网络连接问题
uci add dhcp domain
uci set "dhcp.@domain[-1].name=time.android.com"
uci set "dhcp.@domain[-1].ip=203.107.6.88"
uci commit dhcp
logger -t custom-init "已配置 Android TV 时间服务器"
# 3. 智能网络配置
NETWORK_CONFIGURED = false
# 检测物理网卡数量
PHYSICAL_IFACES = $( ls /sys/class/net | grep -E '^(eth|en|wl)' | grep -v lo)
IFACE_COUNT = $( echo " $PHYSICAL_IFACES " | wc -w)
logger -t custom-init "检测到 $IFACE_COUNT 个物理网卡: $PHYSICAL_IFACES "
case $IFACE_COUNT in
0)
logger -t custom-init "未检测到物理网卡,保持默认配置"
;;
1)
# 单网卡模式:DHCP 客户端
uci set network.lan.proto= 'dhcp'
uci delete network.lan.ipaddr 2>/dev/null
uci delete network.lan.netmask 2>/dev/null
uci commit network
logger -t custom-init "已配置为单网卡 DHCP 客户端模式"
NETWORK_CONFIGURED = true
;;
*)
# 多网卡模式:静态 IP 路由
uci set network.lan.ipaddr= '192.168.100.1'
uci set network.lan.netmask= '255.255.255.0'
uci commit network
logger -t custom-init "已配置为多网卡静态路由模式 (192.168.100.1/24)"
NETWORK_CONFIGURED = true
;;
esac
# 4. 设置时区和地区
uci set system.@system[ 0] .timezone= 'CST-8'
uci set system.@system[ 0] .zonename= 'Asia/Shanghai'
uci set system.@system[ 0] .hostname= 'ImmortalWrt-Router'
uci commit system
logger -t custom-init "已设置时区为亚洲/上海"
# 5. 启用 SSH 根登录(首次配置方便)
uci set dropbear.@dropbear[ 0] .RootLogin= '1'
uci set dropbear.@dropbear[ 0] .PasswordAuth= 'on'
uci set dropbear.@dropbear[ 0] .GatewayPorts= 'on'
uci commit dropbear
logger -t custom-init "已启用 SSH 根登录"
# 6. 配置软件源镜像
if [ -f /etc/opkg/distfeeds.conf ] ; then
sed -i \
-e 's|https://downloads.immortalwrt.org|https://mirrors.cernet.edu.cn/immortalwrt|g' \
-e 's|https://mirrors.vsean.net/openwrt|https://mirrors.cernet.edu.cn/immortalwrt|g' \
/etc/opkg/distfeeds.conf
logger -t custom-init "已配置国内软件源镜像"
fi
# 7. 创建初始用户配置标志
touch /etc/.first_boot_complete
logger -t custom-init "首次启动配置完成"
# 8. 重启网络服务(如果需要)
if [ " $NETWORK_CONFIGURED " = "true" ] ; then
/etc/init.d/network restart
logger -t custom-init "网络服务已重启"
fi
exit 0
🛠️ 脚本部署方法
方法一:编译时集成
1
2
3
4
5
6
7
8
9
# 在编译目录中创建文件
mkdir -p files/etc/uci-defaults
cat > files/etc/uci-defaults/99-custom-init << 'EOF'
#!/bin/sh
# 你的脚本内容
EOF
# 设置执行权限
chmod +x files/etc/uci-defaults/99-custom-init
方法二:首次启动后上传
1
2
3
4
5
6
7
8
# 通过 SCP 上传脚本
scp 99-custom-init root@192.168.1.1:/etc/uci-defaults/
# 设置权限并执行
ssh root@192.168.1.1 "
chmod +x /etc/uci-defaults/99-custom-init
./etc/uci-defaults/99-custom-init
"
方法三:使用 Luci 界面
登录 Luci 管理界面
进入「系统」→「启动项」
在「本地启动脚本」中添加配置
保存并执行
🔍 脚本调试技巧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看脚本执行日志
logread -e custom-init
# 手动测试脚本
chmod +x /etc/uci-defaults/99-custom-init
sh -x /etc/uci-defaults/99-custom-init
# 检查配置结果
uci show network
uci show system
uci show firewall
# 验证网络配置
ifconfig
route -n
⚙️ 高级配置选项
动态 DNS 配置
1
2
3
4
5
6
7
8
# 检测 WAN 口 IP 并配置 DDNS
WAN_IP = $( uci get network.wan.ipaddr 2>/dev/null || ip addr show dev br-lan | grep 'inet ' | awk '{print $2}' | cut -d/ -f1)
if [ -n " $WAN_IP " ] ; then
uci set ddns.myddns.ipaddr= " $WAN_IP "
uci commit ddns
logger -t custom-init "已配置 DDNS IP: $WAN_IP "
fi
硬件特定配置
1
2
3
4
5
6
7
8
9
10
# 检测硬件类型并优化配置
CPU_CORES = $( nproc)
MEMORY_KB = $( grep MemTotal /proc/meminfo | awk '{print $2}' )
if [ " $CPU_CORES " -ge 4 ] && [ " $MEMORY_KB " -ge 4000000 ] ; then
# 高性能设备优化
uci set system.@system[ 0] .cronloglevel= '9'
uci set uhttpd.main.limits= '100'
logger -t custom-init "已启用高性能模式配置"
fi
💾 五、镜像扩容处理
📈 镜像扩容步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1. 解压下载的镜像文件
echo "解压镜像文件..."
gzip -kd immortalwrt-23.05.4-x86-64-generic-ext4-combined.img.gz
# 2. 增加 2GB 空间到镜像
echo "扩展镜像大小..."
dd if = /dev/zero bs = 1M count = 2048 >> immortalwrt-23.05.4-x86-64-generic-ext4-combined.img
# 3. 使用 parted 调整分区
echo "调整分区大小..."
parted immortalwrt-23.05.4-x86-64-generic-ext4-combined.img << EOF
print
resizepart 2 100%
print
quit
EOF
# 4. 检查分区信息
echo "分区调整完成,验证结果:"
fdisk -l immortalwrt-23.05.4-x86-64-generic-ext4-combined.img
🛠️ 所需工具安装
在 OpenWrt/iStoreOS 上:
1
2
3
4
5
6
7
8
9
10
11
12
opkg update
opkg install \
parted \
fdisk \
losetup \
resize2fs \
e2fsprogs \
openssh-sftp-server
# 验证工具安装
which parted && echo "parted 已安装" || echo "parted 未安装"
which resize2fs && echo "resize2fs 已安装" || echo "resize2fs 未安装"
在 Ubuntu/Debian 上:
1
2
3
4
5
6
7
sudo apt update
sudo apt install -y \
parted \
fdisk \
dosfstools \
e2fsprogs \
qemu-utils
🔄 自动化扩容脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/bash
# resize_image.sh - 自动扩容 OpenWrt/ImmortalWrt 镜像
set -e
IMAGE_FILE = " $1 "
EXPAND_SIZE = " ${ 2 :- 2048 } " # 默认扩展 2GB
if [ -z " $IMAGE_FILE " ] || [ ! -f " $IMAGE_FILE " ] ; then
echo "用法: $0 <镜像文件> [扩展大小(MB)]"
echo "示例: $0 openwrt.img 2048"
exit 1
fi
echo "正在处理镜像: $IMAGE_FILE "
echo "扩展大小: ${ EXPAND_SIZE } MB"
# 备份原镜像
BACKUP_FILE = " ${ IMAGE_FILE } .backup. $( date +%Y%m%d_%H%M%S) "
echo "创建备份: $BACKUP_FILE "
cp " $IMAGE_FILE " " $BACKUP_FILE "
# 扩展镜像文件
echo "扩展镜像文件..."
dd if = /dev/zero bs = 1M count = " $EXPAND_SIZE " >> " $IMAGE_FILE "
# 调整分区表
echo "调整分区表..."
PARTITION_INFO = $( parted -s " $IMAGE_FILE " unit MB print)
PARTITION_NUM = $( echo " $PARTITION_INFO " | grep -E '^ [2-9]' | wc -l)
if [ " $PARTITION_NUM " -eq 0 ] ; then
echo "错误: 未找到可调整的分区"
exit 1
fi
# 调整最后一个分区
parted -s " $IMAGE_FILE " resizepart 2 100%
# 挂载并调整文件系统
echo "调整文件系统大小..."
LOOP_DEVICE = $( losetup -f --show -P " $IMAGE_FILE " )
if [ -z " $LOOP_DEVICE " ] ; then
echo "错误: 无法设置 loop 设备"
exit 1
fi
# 检查文件系统并调整大小
e2fsck -f " ${ LOOP_DEVICE } p2"
resize2fs " ${ LOOP_DEVICE } p2"
# 清理
losetup -d " $LOOP_DEVICE "
echo "镜像扩容完成!"
echo "原镜像备份: $BACKUP_FILE "
echo "新镜像大小: $( du -h " $IMAGE_FILE " | cut -f1) "
📊 使用示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 给脚本执行权限
chmod +x resize_image.sh
# 扩展镜像
./resize_image.sh immortalwrt.img 2048
# 或者直接使用一行命令
gzip -kd image.img.gz && \
dd if = /dev/zero bs = 1M count = 2048 >> image.img && \
parted -s image.img resizepart 2 100% && \
LOOP_DEV = $( losetup -f --show -P image.img) && \
e2fsck -f ${ LOOP_DEV } p2 && \
resize2fs ${ LOOP_DEV } p2 && \
losetup -d $LOOP_DEV
🔍 验证扩容结果
1
2
3
4
5
6
7
8
9
10
# 检查镜像文件大小
ls -lh immortalwrt-*.img
# 检查分区信息
fdisk -l immortalwrt-*.img
# 验证文件系统
losetup -f --show -P immortalwrt-*.img
tune2fs -l /dev/loop0p2 | grep 'Block count'
losetup -d /dev/loop0
🚀 六、安装与部署
🔄 软件源优化配置
首次启动后建议更换国内软件源:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 备份原配置
cp /etc/opkg/distfeeds.conf /etc/opkg/distfeeds.conf.bak
# 使用教育网镜像源
cat > /etc/opkg/distfeeds.conf << 'EOF'
src/gz immortalwrt_core https://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.4/targets/x86/64/packages
src/gz immortalwrt_base https://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.4/packages/x86_64/base
src/gz immortalwrt_luci https://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.4/packages/x86_64/luci
src/gz immortalwrt_packages https://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.4/packages/x86_64/packages
src/gz immortalwrt_routing https://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.4/packages/x86_64/routing
src/gz immortalwrt_telephony https://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.4/packages/x86_64/telephony
EOF
# 更新软件列表
opkg update
# 测试软件源
opkg list | head -10
📊 一键分区扩容工具
使用 sirpdboy 的分区扩容工具:
1
2
3
4
5
6
7
8
9
10
11
# 一键安装分区扩容工具
wget -O install.sh https://cafe.cpolar.cn/wkdaily/OneKeyExpand/raw/branch/main/install.sh
chmod +x install.sh
./install.sh
# 或者手动安装
opkg install luci-app-partexp
# 使用扩容工具
partexp
# 或者通过 Luci 界面操作
💾 系统备份与恢复
使用一键备份工具:
1
2
3
4
5
6
7
8
9
10
# 克隆备份工具仓库
git clone https://github.com/wukongdaily/OpenBackRestore.git
# 执行备份(仅 squashfs 格式有效)
cd OpenBackRestore
chmod +x backup.sh
./backup.sh
# 备份文件位置
ls -la /tmp/backup/
🖥️ 物理机安装方法
使用 DD 命令写入
1
2
3
4
5
6
7
8
9
# 确认磁盘设备(谨慎操作!)
fdisk -l
# 写入镜像(将 /dev/sdX 替换为你的磁盘)
dd if = immortalwrt.img of = /dev/sdX bs = 4M status = progress
# 同步并验证
sync
fdisk -l /dev/sdX
使用 Etcher 工具
下载
Balena Etcher
选择镜像文件
选择目标磁盘
点击 Flash 开始写入
使用 Ventoy 启动
准备 Ventoy U盘
将镜像文件拷贝到 U盘
从 U盘启动选择镜像安装
☁️ 虚拟机部署
Proxmox VE 部署
1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建虚拟机
qm create 100 --name immortalwrt --memory 512 --net0 virtio,bridge= vmbr0
# 导入磁盘
qm importdisk 100 immortalwrt.img local-lvm
# 配置虚拟机
qm set 100 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-100-disk-0
qm set 100 --boot c --bootdisk scsi0
qm set 100 --serial0 socket --vga serial0
# 启动虚拟机
qm start 100
VMware/VirtualBox 部署
创建新虚拟机
选择 Linux 2.6.x 32-bit
使用现有虚拟磁盘文件
调整网络设置(桥接模式)
启动并配置
⚡ 七、优化与技巧
🎨 主题优化配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装 Argon 主题
opkg update
opkg install \
luci-theme-argon \
luci-app-argon-config \
luci-i18n-argon-config-zh-cn
# 设置默认主题
uci set luci.main.mediaurlbase= '/luci-static/argon'
uci set luci.main.lang= 'zh_cn'
uci commit luci
# 重启 Luci 服务
/etc/init.d/uhttpd restart
🔧 性能调优设置
系统参数优化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 优化 DNS 解析
echo "options timeout:1 attempts:2 rotate" >> /etc/resolv.conf
# 增加文件描述符限制
echo "fs.file-max = 524288" >> /etc/sysctl.conf
# 优化网络参数
cat >> /etc/sysctl.conf << 'EOF'
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
EOF
# 应用配置
sysctl -p
内存优化
1
2
3
4
5
6
7
8
9
10
11
# 调整 SWAP 使用策略
echo "vm.swappiness = 10" >> /etc/sysctl.conf
# 清理内存缓存脚本
cat > /usr/bin/clearcache << 'EOF'
#!/bin/sh
sync
echo 3 > /proc/sys/vm/drop_caches
echo "内存缓存已清理"
EOF
chmod +x /usr/bin/clearcache
📱 移动端优化
1
2
3
4
5
6
7
8
9
10
11
12
# 优化移动设备显示
uci set luci.main.mediaurlbase= '/luci-static/argon'
uci set luci.main.responsive= '1'
uci commit luci
# 启用响应式布局
opkg install luci-compat
# 移动端专用主题设置
if [ -f /usr/lib/lua/luci/view/argon/mobile.htm ] ; then
ln -sf /usr/lib/lua/luci/view/argon/mobile.htm /www/index.html
fi
🛡️ 安全加固
SSH 安全配置
1
2
3
4
5
6
7
8
9
10
11
12
13
# 禁用 root 密码登录(首次配置后)
uci set dropbear.@dropbear[ 0] .RootLogin= '0'
uci set dropbear.@dropbear[ 0] .PasswordAuth= 'off'
uci commit dropbear
/etc/init.d/dropbear restart
# 创建普通用户
useradd -m -s /bin/bash admin
passwd admin
# 配置 sudo 权限
opkg install sudo
echo "admin ALL=(ALL) ALL" >> /etc/sudoers
防火墙加固
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 禁用不必要的服务
uci set uhttpd.main.listen_http= '0.0.0.0:80'
uci set uhttpd.main.listen_https= '0.0.0.0:443'
uci commit uhttpd
# 配置防火墙规则
uci add firewall rule
uci set firewall.@rule[ -1] .name= 'Allow-WAN-HTTP'
uci set firewall.@rule[ -1] .src= 'wan'
uci set firewall.@rule[ -1] .proto= 'tcp'
uci set firewall.@rule[ -1] .dest_port= '80'
uci set firewall.@rule[ -1] .target= 'ACCEPT'
uci add firewall rule
uci set firewall.@rule[ -1] .name= 'Allow-WAN-HTTPS'
uci set firewall.@rule[ -1] .src= 'wan'
uci set firewall.@rule[ -1] .proto= 'tcp'
uci set firewall.@rule[ -1] .dest_port= '443'
uci set firewall.@rule[ -1] .target= 'ACCEPT'
uci commit firewall
📊 监控与日志
系统监控设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装监控工具
opkg install \
luci-app-statistics \
collectd \
collectd-mod-cpu \
collectd-mod-memory \
collectd-mod-interface
# 配置数据收集
uci set luci_statistics.collectd_interval= 10
uci set luci_statistics.rrdtool= 1
uci commit luci_statistics
# 启动服务
/etc/init.d/collectd enable
/etc/init.d/collectd start
日志管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 配置日志轮转
cat > /etc/logrotate.conf << 'EOF'
/var/log/messages /var/log/daemon.log /var/log/system.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/etc/init.d/rsyslog reload >/dev/null 2>&1 || true
endscript
}
EOF
# 创建日志清理脚本
cat > /usr/bin/cleanlogs << 'EOF'
#!/bin/sh
find /var/log -name "*.log" -mtime +7 -delete
find /var/log -name "*.gz" -mtime +30 -delete
echo "日志文件已清理"
EOF
chmod +x /usr/bin/cleanlogs
⚠️ 八、注意事项
🔴 重要警告
💾 备份数据 : 刷机前务必备份原有配置
1
2
3
4
# 备份当前配置
sysupgrade -b /tmp/backup.tar.gz
# 或者手动备份
tar -czf /tmp/config-backup.tar.gz /etc/config/
🔌 电源稳定 : 确保刷机过程中不断电
📶 网络连接 : 编译和下载需要稳定网络
⚡ 兼容性 : 确认硬件兼容性再刷机
✅ 最佳实践
🧪 测试环境 : 先在虚拟机测试新固件
1
2
# 使用 QEMU 测试
qemu-system-x86_64 -m 512 -hda immortalwrt.img -nographic
📝 记录配置 : 记录所有自定义配置
1
2
3
# 导出当前配置
uci show > /root/uci-config-backup.txt
opkg list-installed > /root/packages-backup.txt
⏰ 维护窗口 : 在业务低峰期进行更新
🔧 逐步更新 : 每次只更改一个配置项测试
🐛 常见问题解决
启动失败问题
1
2
3
4
5
6
7
8
# 查看启动日志
dmesg | tail -50
logread -e error
# 恢复模式
1. 从备份镜像启动
2. 使用恢复控制台
3. 重新刷写固件
网络异常问题
1
2
3
4
5
6
7
8
# 诊断网络问题
ifconfig
route -n
ping -c 4 8.8.8.8
# 重置网络配置
/etc/init.d/network restart
rm -f /etc/config/network && firstboot -y
空间不足问题
1
2
3
4
5
6
7
# 检查磁盘空间
df -h
du -sh /overlay/*
# 清理临时文件
rm -rf /tmp/*
opkg clean
软件冲突问题
1
2
3
4
5
# 排查冲突软件
opkg list-installed | grep -E '(dns|vpn|proxy)'
# 安全移除冲突包
opkg remove --force-removal-of-dependent-packages <package-name>
📋 编译检查清单
🔧 故障恢复方案
快速恢复步骤
连接串口控制台
进入恢复模式
重新刷写固件
恢复配置文件
紧急恢复工具
1
2
3
4
5
# 准备恢复镜像
wget https://downloads.immortalwrt.org/releases/23.05.4/targets/x86/64/immortalwrt-23.05.4-x86-64-generic-ext4-combined.img.gz
# 创建恢复U盘
dd if = immortalwrt.img of = /dev/sdX bs = 4M status = progress
💡 专业提示 : 建议在投入生产环境前,先在测试设备上充分验证新固件的稳定性和兼容性。定期检查 ImmortalWrt 的更新,及时获取安全补丁和功能改进。
Happy Building! 🎉 祝您编译顺利!
📚 扩展资源
❓ 常见问题解答
Q: 编译过程中出现错误怎么办?
A: 查看编译日志中的具体错误信息,通常缺少依赖包或配置错误。可以尝试 make -j1 V=s
来获取详细错误信息。
Q: 如何添加自定义软件包?
A: 在 package/
目录下创建自定义软件包目录,编写 Makefile,然后在 make menuconfig
中选择。
Q: 固件太大无法写入怎么办?
A: 移除不必要的软件包,或者使用 squashfs 格式的固件,它支持 overlay 分区扩展。
Q: 如何更新 ImmortalWrt 系统?
A: 使用 sysupgrade
命令:sysupgrade -n /path/to/new-firmware.bin
Q: 忘记 Luci 密码怎么办?
A: 通过 SSH 登录后使用 passwd
命令重置密码,或者使用恢复模式重设。