Just to be clear, by proceeding with this, you acknowledge that you either have an RB1100Hx2 or an RB1100AHx2 which is not currently being used in a production capacity and which you are willing to experiment on, and that neither MikroTik nor I can be held liable for any damage you may cause to yourself, your property, or your business by performing this mod. In theory, this is just a software change that should have no permanent impact on the hardware and which is easy to undo; however, there are no guarantees attached to this procedure, and...
...THIS IS NOT OFFICIALLY SUPPORTED BY MIKROTIK. AT ALL. PERIOD. DO NOT CONTACT MIKROTIK SUPPORT ABOUT THIS PROCEDURE, EVER. YOU ARE CHOOSING TO PROCEED AT YOUR OWN RISK!
The reason that MetaROUTER is not supported on the Hx2 or the AHx2 is because they are dual-processor systems, and MetaROUTER does not support multiprocessor systems at this time. So in a nutshell, what we are going to be doing to get MetaROUTER working on these boards is replacing the multicore/SMP Linux kernel with the uniprocessor Linux kernel. When RouterOS is installed on a device, the installer determines which kernel to install depending on the hardware it is being installed to. The uniprocessor kernel *should* (in theory) boot and run an (A)Hx2 board just fine, and this kernel contains all of the support needed to host MetaROUTER guests. The downside is that by doing this, you will be limited to 1 CPU core while running this kernel, essentially "downgrading" your 1100AHx2 to an 1100AH. If MetaROUTER support is worth more to you than the extra CPU core, then this procedure will give you the freedom to choose to make that sacrifice.
Here are the materials that you will need to assemble beforehand:
- 1 RB1100Hx2 or RB1100AHx2
- 1 other RouterOS router (any kind) to act as a Netboot host
- 1 MicroSD card
- 1 serial cable
- The "upgrade package" NPK for the version of RouterOS you wish to run on the (A)Hx2
- A computer with a functioning Python interpreter installed
- The following files:
Basically, what we are going to be doing is extracting the 4 kernel files from the PowerPC NPK and replacing the kernel on the 1100AHx2 with the kernel for the 1100AH. Each PowerPC upgrade NPK contains 4 kernels:
- One for RB333/600 (Freescale MPC83xx)
- One for RB1200 (APM/AMCC PPC44x)
- One for RB800/1000/1100/1100AH (Freescale MPC85xx -- uniprocessor)
- One for RB1100Hx2/1100AHx2 (Freescale MPC85xx -- multiprocessor)
Here we go, step-by-step:
- It is recommended that you start by performing a clean, fresh Netinstall of RouterOS onto your Hx2/AHx2.
- Boot up the router, and try to create a MetaROUTER guest. You should see the error "not enough resources". This is expected.
- On the machine that has Python installed, put the dumpnpk-ppc-kernels.py Python script and the "upgrade" NPK into the same directory.
- Run the Python script and supply the path to the NPK as the first argument; for example: "python dumpnpk-ppc-kernels.py ./routeros-powerpc-6.4.npk"
- Verify that the script extracted 4 kernel files from the NPK, located in a subdirectory called 'boot', named 'kernel1' through 'kernel4'.
- Copy the 'kernel' files onto the MicroSD card. Insert into the SD slot on the (A)Hx2.
- Prepare the other RouterOS router (item #2 in the "materials needed" list; can be of any type, even x86) to be a Netboot host for the (A)Hx2 by doing the following:
- Copy the 'openwrt-rb1100-linux-2.6.35-initrd.elf' file to the router.
- Create a DHCP server on this router; set the "Boot File Name" of the DHCP Network to 'openwrt-rb1100-linux-2.6.35-initrd.elf'
- Enable the TFTP server on RouterOS.
- Hook a serial cable up to the (A)Hx2, and plug ether13 on the (A)Hx2 into the other RouterOS router.
- Power up the (A)Hx2. Interrupt the RouterBOOT boot process when you see "Press any key".
- Set the (A)Hx2 to boot via ethernet using options o, 1, and then x to exit and resume booting.
- You should eventually see "Please press Enter to activate this console." Press Enter to get to a shell.
- Mount the SD card: "mount -t vfat /dev/mmcblk0 /mnt"
- Copy the kernel files from the SD card to the RAM disk temporarily: "cp /mnt/kernel? ~"
- Unmount the SD card: "umount /mnt"
- Prepare the boot partition of the RouterBOARD's NAND for mounting: "ubiattach /dev/ubi_ctrl -m 0"
- Mount the boot partition of the RouterBOARD's NAND: "mount -t ubifs /dev/ubi0_0 /mnt"
- Pick one of the 4 kernels you extracted from the NPK to replace the kernel on the boot partition, and copy it over on top of the existing kernel: e.g., "cp ~/kernel4 /mnt/kernel"
- Cleanly unmount the boot partition: "umount /mnt"
- Reboot the router: "reboot"
Once you have found and successfully installed the uniprocessor kernel, you should be able to go to System -> Resources and verify that it only sees 1 CPU core instead of 2. At this point, try creating and booting a MetaROUTER guest again. If all went well, it should work. Congratulations! You can remove the SD card at this point; it does not need to remain in the router after you have finished the procedure.
To undo the change, simply re-Netinstall the RouterOS version of your choice, which will cause the original multiprocessor kernel to be copied back into the boot partition of the NAND.
Have fun, good luck, and happy routing,