diff --git a/os/.gitignore b/os/.gitignore
new file mode 100644
index 00000000..145ea57d
--- /dev/null
+++ b/os/.gitignore
@@ -0,0 +1 @@
+/pi-builder/
diff --git a/os/Makefile b/os/Makefile
new file mode 100644
index 00000000..ff43bdeb
--- /dev/null
+++ b/os/Makefile
@@ -0,0 +1,25 @@
+all:
+ cat Makefile
+
+pi-builder:
+ git clone https://github.com/mdevaev/pi-builder --depth=1
+
+pi-kvm: pi-builder
+ rm -rf pi-builder/builder/scripts/kvm
+ cp -a kvm pi-builder/builder/scripts
+ cd pi-builder && make _rpi \
+ PLATFORM=rpi-2 \
+ BUILDER=kvm-builder \
+ STAGES="base keys watchdog ro kvm"
+
+format: pi-builder
+ cd pi-builder && make format
+
+install: pi-builder
+ cd pi-builder && make install
+
+clean: pi-builder
+ cd pi-builder && make clean
+
+clean-all: clean
+ rm -rf pi-builder
diff --git a/os/kvm/config.txt b/os/kvm/config.txt
new file mode 100644
index 00000000..494deb58
--- /dev/null
+++ b/os/kvm/config.txt
@@ -0,0 +1,2 @@
+gpu_mem=16
+dtparam=act_led_gpio=27
diff --git a/os/kvm/index.html b/os/kvm/index.html
new file mode 100644
index 00000000..f08c0c12
--- /dev/null
+++ b/os/kvm/index.html
@@ -0,0 +1,50 @@
+
+
+
+
+π-kvm
+
+
+
+
+
+
+
+

+
+
+
diff --git a/os/kvm/nginx.conf b/os/kvm/nginx.conf
new file mode 100644
index 00000000..b9b1631b
--- /dev/null
+++ b/os/kvm/nginx.conf
@@ -0,0 +1,51 @@
+user http;
+worker_processes 4;
+
+# error_log /tmp/nginx.error.log;
+error_log /dev/null crit;
+
+events {
+ worker_connections 64;
+ use epoll;
+}
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+ charset utf-8;
+
+ sendfile on;
+ keepalive_timeout 10;
+ # gzip on;
+
+ server {
+ # access_log /tmp/nginx.access.log;
+ access_log off;
+
+ listen 80;
+ server_name localhost;
+
+ client_body_temp_path /tmp/nginx.client_body_temp;
+ fastcgi_temp_path /tmp/nginx.fastcgi_temp;
+ proxy_temp_path /tmp/nginx.proxy_temp;
+ scgi_temp_path /tmp/nginx.scgi_temp;
+ uwsgi_temp_path /tmp/nginx.uwsgi_temp;
+
+ location / {
+ root /srv/http;
+ index index.html;
+ }
+
+ location /video {
+ rewrite /video/?(.*) /$1 break;
+ proxy_pass http://localhost:8082;
+ }
+
+ location /kvm/ws {
+ rewrite /kvm/ws/?(.*) /ws break;
+ proxy_pass http://localhost:8081;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ }
+ }
+}
diff --git a/os/kvm/run.sh b/os/kvm/run.sh
new file mode 100755
index 00000000..c2bb8b7d
--- /dev/null
+++ b/os/kvm/run.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -e
+set -x
+
+. ../functions.sh
+
+
+cat config.txt > "$FS/boot/config.txt"
+pkg_install \
+ python \
+ python-pyaml \
+ python-aiohttp \
+ python-raspberry-gpio \
+ mjpg-streamer-pikvm \
+ nginx
+
+cp index.html "$FS/srv/http/"
+cp nginx.conf "$FS/etc/nginx/"
+rpi systemctl enable nginx