Featured image of post ImmortalWrt 系统编译与定制 🏔️

ImmortalWrt 系统编译与定制 🏔️

ImmortalWrt 系统编译与定制 🏔️ 🛠️ 从零开始构建专属的 OpenWrt 固件,满足个性化需求。本

ImmortalWrt 系统编译与定制 🏔️

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

🎛️ 配置构建参数

  1. 选择版本: 23.05.4 (稳定版)
  2. 选择平台:
    • 架构: x86/64
    • 子目标: generic
    • 变体: ext4-combined (推荐)
  3. 点击展开按钮 → 自定义预装软件

🔍 软件包搜索技巧

需要查找软件包名称?访问: 软件包仓库

📝 构建配置示例

 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 界面

  1. 登录 Luci 管理界面
  2. 进入「系统」→「启动项」
  3. 在「本地启动脚本」中添加配置
  4. 保存并执行

🔍 脚本调试技巧

 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 工具

  1. 下载 Balena Etcher
  2. 选择镜像文件
  3. 选择目标磁盘
  4. 点击 Flash 开始写入

使用 Ventoy 启动

  1. 准备 Ventoy U盘
  2. 将镜像文件拷贝到 U盘
  3. 从 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 部署

  1. 创建新虚拟机
  2. 选择 Linux 2.6.x 32-bit
  3. 使用现有虚拟磁盘文件
  4. 调整网络设置(桥接模式)
  5. 启动并配置

⚡ 七、优化与技巧

🎨 主题优化配置

 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. 💾 备份数据: 刷机前务必备份原有配置
1
2
3
4
# 备份当前配置
sysupgrade -b /tmp/backup.tar.gz
# 或者手动备份
tar -czf /tmp/config-backup.tar.gz /etc/config/
  1. 🔌 电源稳定: 确保刷机过程中不断电
  • 使用 UPS 设备
  • 避免在电力不稳定时操作
  1. 📶 网络连接: 编译和下载需要稳定网络
  • 使用有线连接
  • 准备备用网络
  1. ⚡ 兼容性: 确认硬件兼容性再刷机
  • 检查网卡驱动支持
  • 验证存储控制器兼容性

✅ 最佳实践

  1. 🧪 测试环境: 先在虚拟机测试新固件
1
2
# 使用 QEMU 测试
qemu-system-x86_64 -m 512 -hda immortalwrt.img -nographic
  1. 📝 记录配置: 记录所有自定义配置
1
2
3
# 导出当前配置
uci show > /root/uci-config-backup.txt
opkg list-installed > /root/packages-backup.txt
  1. ⏰ 维护窗口: 在业务低峰期进行更新
  • 安排周末或夜间维护
  • 提前通知用户
  1. 🔧 逐步更新: 每次只更改一个配置项测试
  • 修改前备份配置
  • 测试后再进行下一个修改

🐛 常见问题解决

启动失败问题

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. 恢复配置文件

紧急恢复工具

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 命令重置密码,或者使用恢复模式重设。