好像发现出Oracle 甲骨文免费的vps安装RouterOS的方法了. 主要思路就是必须使用Rocky Linux 9.x, 因为这个系统使用的是BIOS引导, 其他的是EFI, 然后用同样的方法DD, 或者 代码: curl -L https://download.mikrotik.com/routeros/7.13/chr-7.13.img.zip | funzip | dd of=/dev/sda bs=1M 以上以7.13为例
Hetzner Cloud 也有个官方说明 https://community.hetzner.com/tutorials/mikrotik-chr-basic-setup 先进入救援系统( rescue ) 代码: # curl -L https://download.mikrotik.com/routeros/6.49.10/chr-6.49.10.img.zip > mikrotik-chr.zip # funzip mikrotik-chr.zip > mikrotik-chr.img # dd if=/path/to/mikrotik-chr.img of=/dev/sda bs=1M
vps救援模式下一键安装 代码: apt update apt install wget unzip curl -L https://download.mikrotik.com/routeros/7.13.5/chr-7.13.5.img.zip | funzip | dd of=/dev/vda bs=1M
感谢楼主这个帖子,说的很详细。不过也有几个问题: 1 按帖子的方法,下载的 ros,似乎是EFI 启动的固件?,查看 vps 系统 是EFI 还是 传统bios 启动方法: 代码: [ -d /sys/firmware/efi ] && echo "EFI mode" || echo "Legacy BIOS mode" 2 chr.img 中可能会存在两个分区,我测试,挂载 /mnt 使用,需要计算的是第二个分区的star位置 * 512 3 查看根目录挂载的住驱动器,说的有些歧义(我就看误解了),例如根目录的驱动器如果是 /dev/vda1 应该要去掉数字部分,则主驱动器为:/dev/vda ,也可以直接使用这个命令(ubuntu 、rocky linux 测试ok):findmnt -n -o SOURCE / | sed 's/[0-9]*//g' dd if=chr.img bs=1024 of=$(findmnt -n -o SOURCE / | sed 's/[0-9]*//g') 4 GATE0=`ip route list | grep default | cut -d' ' -f 3` 这一步,可能会获取两个网关,可以修改为: GATE0=`ip route list | grep -m1 default | cut -d' ' -f 3` 5 我发现不需要启动到恢复模式,遇到的错误,基本是挂载ros img镜像出问题(例如下载的ros 的img 中如果存在两分区的,则挂载第二个分区)、和dd 的 of参数设置错误(根主分区),恢复模式在rocky linux 系统,会有些麻烦,且默认不能联网。 6 我测试通过的脚本,基于 传统bios 启动的vps (先安装ROS v6 版本,后续upgrade 到 v7 即可) : 代码: wget http://download2.mikrotik.com/routeros/6.43.8/chr-6.43.8.img.zip -O chr.img.zip && \ gunzip -c chr.img.zip > chr.img && \ mount -o loop,offset=33554944 chr.img /mnt && \ ADDR0=`ip addr show eth0 | grep global | cut -d' ' -f 6 | head -n 1` && \ GATE0=`ip route list | grep -m1 default | cut -d' ' -f 3` && \ echo -e "/ip address add address=$ADDR0 interface=[/interface ethernet find where name=ether1]\n/ip route add gateway=$GATE0\n" > /mnt/rw/autorun.scr && \ umount /mnt && \ echo u > /proc/sysrq-trigger && \ dd if=chr.img bs=1024 of=$(findmnt -n -o SOURCE / | sed 's/[0-9]*//g') && \ reboot