通常云服务器、VPS小鸡都是不提供OpenWRT镜像的,上传自定义镜像安装,还不如直接根据现有环境编译好镜像,直接dd一把梭...
有人问为什么要在VPS上安装OpenWRT?这不是闲得嘛...
我只能说,人各有骚!有些骚操作的玩法,DDDD

本文操作环境:

  • 系统:Debian11 5.10.0-21-amd64 EFI
  • 云平台:Ucloud
  • 固件:ImmortalWrt,使用官方的在线固件选择进行编译

一、收集信息

  1. 确定当前系统的启动方式为legacy还是uefi,因为不同启动方式需要的固件不一样。可以使用lsblk查看,如果是uefi启动,会有/boot/efi目录或者一个分区号比较大的类似于/dev/vda128的分区,如果没有此目录,那就是legacy启动(不一定,通常是这样)
root@temp-sh:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    254:0    0   40G  0 disk 
├─vda1 254:1    0    1M  0 part 
├─vda2 254:2    0  191M  0 part /boot/efi
└─vda3 254:3    0 39.8G  0 part /
  1. 记录当前系统的网络配置,网络类型分两种:

    1. VPS在内网中,IP地址为内网IP,获取IP方式为DHCP或者static
    2. VPS直接分配公网IP
    auto eth0
    iface eth0 inet static
      address 123.123.60.154/24
      gateway 123.123.60.1
      dns-nameservers 8.8.8.8 1.1.1.1
     #如果IP是DHCP获取的,可以使用netstat -rn 查看网关

二、编写配置脚本

这一步非常重要!
这一步非常重要!
这一步非常重要!

有的VPS是不能够用VNC操作的,所以这里的脚本要根据网络配置写好,不然dd后不能联通网络
这里的脚本会放到uci-defaults中作为系统第一次启动时执行,一次性交(脚)本,执行后自动删除

脚本需求:

  1. 配置网络
  2. 配置防火墙
  3. 修改其他信息,例如ssh端口等

以下是我根据自己的需求编写,请根据自己的实际情况修改

#!/bin/sh

# 清空原网络配置
echo "" > /etc/config/network

# 写入新内容,其中 gateway、ipaddr、dns,这三项自己按需修改。如果你的VPS使用DHCP获取IP,建议也配置使用static方式获取,以免发生意外
# 此配置禁用了ipv6

echo "config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'wan'
        option device 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option gateway '10.1.1.1'
        option ipaddr '10.1.1.10'
        option delegate '0'
        list dns '1.1.1.1'
        list dns '8.8.8.8'

config device
        option name 'eth0'
        option ipv6 '0'" > /etc/config/network

# 清空原防火墙配置
echo "" > /etc/config/firewall

# 写入新内容
echo "config defaults
        option input 'ACCEPT'
        option output 'ACCEPT'
        option fullcone '1'
        option forward 'ACCEPT'

config zone
        option name 'wan'
        list network 'wan'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'

config include
        option path '/etc/firewall.user'

config include 'openclash'
        option type 'script'
        option path '/var/etc/openclash.include'
        option reload '1'" > /etc/config/firewall


# 清空源ssh配置
echo "" > /etc/config/dropbear

# 写入新配置,Port请修改为自己需要的端口。
# SSH服务默认绑定了lan口,本文中使用了wan口,此配置为绑定所有接口
echo "config dropbear
        option PasswordAuth 'on'
        option Port '61100'" > /etc/config/dropbear

#有可能VPS提供商默认不开放80和443,需要改为其他端口
sed -i "s/list listen_http '0.0.0.0:80'/list listen_http '0.0.0.0:8001'/g" /etc/config/uhttpd
sed -i "s/list listen_http '\[::\]:80'/list listen_http '\[::\]:8001'/g" /etc/config/uhttpd
sed -i "s/list listen_https '0.0.0.0:443'/list listen_https '0.0.0.0:8002'/g" /etc/config/uhttpd
sed -i "s/list listen_https '\[::\]:443'/list listen_https '\[::\]:8002'/g" /etc/config/uhttpd
#把ssh端口也改了,注意这里'22'前面的空格要和配置文件里面的保持一致,不然sed不到
#如果你修改了/etc/config/dropbear,这一步则无需执行
#sed -i "s/option Port         '22'/option Port '61100'/" /etc/config/dropbear

exit 0

三、编译固件

自己编译太麻烦了,我直接使用ImmortalWrt的在线编译

编译完成后,根据自己的启动方式下载对应的镜像

四、梭哈!开始dd

  1. 下载固件到现有系统上
    curl -o imm.img.gz "download link"
  2. 解压固件
    gzip -d imm.img.gz
  3. 将固件dd到当前vps上的/dev/vda磁盘上,使用lsblk可得知(如上文1所示)
#执行dd
dd if=imm.img of=/dev/vda bs=4M status=progress oflag=sync

#如果你的dd版本较低,使用:
dd if=imm.img of=/dev/vda bs=4M conv=fsync

#有的VPSdd完毕后会报一个提示,但经过多次测试,暂时还没有发现什么影响。
Inconsistency detected by ld.so: ../elf/dl-runtime.c: 80: _dl_fixup: Assertion `ELFW(R_TYPE)(reloc->r_info) == ELF_MACHINE_JMP_SLOT' failed!
  1. 强制系统重启
    echo b > /proc/sysrq-trigger

五、扩容/分区

dd完成后,/分区大小为镜像初始大小,需要手动扩容

  1. opkg update && opkg install cfdisk fdisk e2fsprogs lsblk
  2. 使用cfdisk,选择Free space,回车,然后Write,出现提示之后输入yes,最后Quit退出

  1. 使用lsblk查看新建后的分区
  2. 进入web,系统-挂载点-生成配置,就能看见新键的分区,然后点击编辑

这里保存之后,回到主界面,点击 保存并应用

  1. 将这些命令复制到ssh中执行,注意需要将命令中的/dev/sda1改为新建后的实际分区
mkdir -p /tmp/introot
mkdir -p /tmp/extroot
mount --bind / /tmp/introot
mount /dev/vda3 /tmp/extroot
tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
umount /tmp/introot
umount /tmp/extroot
  1. reboot,再次进入系统,/分区已经完成扩容

接着就可以进行后续的各种骚操作了~

两个第三方软件源

https://op.dllkids.xyz/packages/x86_64

https://op.supes.top/packages/x86_64

本文参考了:

VPS安装Lean OpenWrt-荒岛

OpenWrt 存储空间扩容的两种方案 - 喵斯基部落

最后修改:2023 年 09 月 27 日
如果觉得我的文章对你有用,请随意赞赏