How to install socket.io-computer on your server
- Note: The CollabVM team does not develop this product. Cosmic Sans, Dartz, and other members of the team will not provide support for any problems you have with socket.io-computer. It is highly recommended that you instead install CollabVM Server 1.x instead. Socket.io-computer is inferior in almost every way and cannot be used to create UserVMs (because they are incompatible with CollabVM 1.x). Also, this article was originally written in 2016, and is thus very likely out of date.
This article documents how to install the socket.io-computer, better known as socket.computer, on your server.
The instructions are for Debian-based distributions, including Ubuntu. However this tutorial should work on any flavor of Linux and will probably work on Windows and Mac as well.
Preparation
- You can download the socket.computer source code from here. You can use Git to clone it or you can download the files manually.
- Now it's time to install the dependencies. We'll start with Qemu. Installing Qemu is really easy. Depending on your distribution, this might be different, but on Debian you can type
sudo apt install qemu-system-x86 -y
. Click here for a whole list of install commands. - Next dependency is redis-server. Install it by doing
sudo apt install redis-server -y
if you're on Debian. It should install with no errors. - Next dependency is node.js. We can install it by doing
sudo apt install nodejs npm
. NOTICE: On Debian-based distributions, there is a package called node. This is NOT nodejs! That is an unrelated package designed for TCP/IP and packet radio network connections. - Afterwards, we are going to create a symbolic link to make sure that our dependencies will have no issues. Type this command into the terminal like so:
sudo ln -s /usr/bin/nodejs /usr/bin/node
- Next we need Canvas. Canvas is somewhat known for being a pain to install on Ubuntu-based distros, but it's not too hard. First what we need is to download
libjpeg9a
andlibjpeg9a-dev
. These are not in the Ubuntu or Debian based distributions so we must download and install them manually. We do not need compilation for this.- Download these from here: https://packages.debian.org/search?keywords=libjpeg9 and download them based on your distribution. If you're not testing Debian 9 just pick sid on
libjpeg9
andlibjpeg9-dev
. - To install the packages do this:
sudo dpkg -i libjpeg99a-2(yourarch).deb && sudo dpkg -i libjpeg9-dev9a-2(yourarch).deb
- Download these from here: https://packages.debian.org/search?keywords=libjpeg9 and download them based on your distribution. If you're not testing Debian 9 just pick sid on
- Next, install Canvas dependencies by doing the following command:
sudo apt install libcairo2-dev libpango1.0-dev libgif-dev build-essential g++
Configuring & launching socket.computer
- Finally, let's go back to the socket.computer folder and install everything we need. Type
npm install -g
, or if you want them all in the same folder you can just donpm install
. It doesn't really matter. - Let's go ahead and make a Qemu disk image now. socket.computer can run any operating system that QEMU can, but it is not recommended to run Windows 95 or anything that doesn't support USB because -usbdevice tablet is somewhat necessary for nice operation. To make a Qemu disk image for this example, type
qemu-img create -f qcow2 winxp.img 5G
. You can learn more about qemu-img by clicking here. This will make a qcow2 named winxp.img with the size of about 5 gigabytes. - We now need to edit redis.js and app.js. Go to line 4 and you'll find a line that says
var uri = process.env.COMPUTER_REDIS_URI || 'localhost:6379';
. Change thelocalhost
part of'localhost:6379'
(don't remove the port or anything else) to your VPS/computers IP. - Next, open app.js and go to line 32, which looks like this:
var url = process.env.COMPUTER_IO_URL || 'http://localhost:6001';
Again, change the localhost part to your VPS/computers IP. - To edit the way Qemu starts up, open qemu.js and go to line 36, where you will find the init function and from there you can see the arguments array which you can edit to your liking. It is HIGHLY recommended that you install your operating system in the real QEMU instead of socket.computer, then run the snapshot in socket.computer! It is also highly recommended to keep a backup of said snapshot somewhere on the computer, or use loadvm and savevm in the possible event someone destroys your virtual machine.
- To start socket.computer use the following commands:
node app.js && node io.js && COMPUTER_ISO=(youriso).iso COMPUTER_IMG=(yourimg).img node qemu.js && COMPUTER_IMG=(yourimg).img node emu-runner.js
(Note, you might need to run them with sudo privileges) And now you are all set up and ready to use socket.computer! There's also an optional patch. socket.computer has a vulnerability that allows people to send QEMU commands and take mouse control. As this can result in the compromisation of your server it is recommended to install this unofficial patch on your server which fixes these problems. This has been thoroughly tested but there could be other methods. Let me know if you find any. You can download the patch here: http://computernewb.com/socketcomputerpatch.zip