Uživatelské nástroje

Nástroje pro tento web

Tato dokumentace již není udržována týmem projektu Turris (přestože ji lze i nadále používat pro sdílení komunitního obsahu). Aktuální oficiální dokumentace se nachází na docs.turris.cz.

Spuštění Turris OS 3 v QEMU

Pre testovanie default medkitu (bez konfigurácie) pozrite https://github.com/jose1711/qemu_turrisos

Cieľom tohto postupu je spustiť (upravený) klon TOS v emulovanom prostredí prostredníctvom QEMU. To môže poslúžiť napr. na testovanie zatiaľ nerealizovanej aktualizácie a podobne. Samozrejme nemožno očakávať plnú funkčnosť, keďže QEMU nedokáže emulovať celý hardvér ani prípadné pripojené USB zariadenia. Pre účely zjednodušenia bude virtualizovaný TOS používať len 2 rozhrania:

  • eth0 - „wan“ - dhcp z rozsahu 10.x.x.x/24
  • eth1 - lan - statická adresa 192.168.123.1

Príprava (PC)

nainštaluj qemu (potrebovať budeš qemu-system-arm)

podľa distribúcie (napr. apt install qemu)

vo firewalle povoľ packet forwarding medzi sieťovými rozhraniami

sudo iptables -P FORWARD ACCEPT
# možno budeš musieť upraviť (prípadne dočasne vypnúť) firewall na PC

vytvor adresár s kernelom a rootfs

mkdir -p ~/omnia-qemu/root

stiahni kernel pre 32-bit arm architektúru z OpenWrt (pôvodný kernel z TOS nefungoval)

curl -o ~/omnia-qemu/zImage https://downloads.openwrt.org/snapshots/targets/armvirt/32/openwrt-armvirt-32-zImage

do ~/omnia-qemu nakopíruj štartovací skript start_omnia.sh

#!/bin/sh
LAN=ledetap0
KERNEL=zImage

# enable ip forwarding
fwd_orig=$(sysctl net.ipv4.ip_forward | awk '{print $NF}')
sysctl net.ipv4.ip_forward=1

# create tap interface which will be connected to OpenWrt LAN NIC
ip tuntap add mode tap $LAN
ip link set dev $LAN up

ip addr add 192.168.123.100/24 dev $LAN

qemu-system-arm \
 -nographic -M virt -kernel "${KERNEL}" -m 512 -no-reboot \
 -fsdev local,id=rootdev,path=root,security_model=none \
 -device virtio-9p-pci,fsdev=rootdev,mount_tag=/dev/root \
 -append 'rootflags=trans=virtio,version=9p2000.L,cache=loose rootfstype=9p' \
 -nic user \
 -device virtio-net-pci,netdev=lan \
 -netdev tap,id=lan,ifname=$LAN,script=no,downscript=no \

# cleanup. delete tap interface created earlier
ip addr flush dev $LAN
ip link set dev $LAN down
ip tuntap del mode tap dev $LAN

sysctl net.ipv4.ip_forward=${fwd_orig}

Záloha systému (Omnia, root prompt)

urob novú zálohu systému a exportuj ju na zariadenie s dostatkom voľného miesta

schnapps export /some/path

uloží do adresára /some/path archív omnia-medkit-XXXXXXXX.tar.gz obsahujúcim root adresár Omnie. Zvyšné príkazy budú spúšťané už len na PC.

Úprava konfigurácie a spustenie emulácie

Prenes a rozbaľ archív na PC

ssh omnia 'cat /some/path/omnia-medkit-XXXXXXXX.tar.gz' | ( cd ~/omnia-qemu/root; tar xvzf -; )

do root/etc/inittab pridaj riadok:

ttyAMA0::askfirst:/bin/ash --login

uprav konfiguráciu v root/etc/config/network:

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'wan'
        option ifname 'eth0'
        option ipv6 '1'
        option dns '8.8.8.8 8.8.4.4'
        option proto 'dhcp'

config interface 'wan6'
        option ifname '@wan'
        option proto 'dhcpv6'

config interface 'lan'
        option proto 'static'
        option ipaddr '192.168.123.1'
        option netmask '255.255.255.0'
        option ifname 'eth1'

prepíš root/usr/bin/crypto-wrapper, ktorý bude obsahovať len tieto riadky:

#!/bin/sh
echo 0000000000000000
exit

uprav root/etc/init.d/start-indicator nasledovným spôsobom:

start() {
  .. # existujúce riadky nemeň
  .. # existujúce riadky nemeň
  # pridaj za posledný príkaz v bloku (echo)
  echo 'Turris Omnia' > /tmp/sysinfo/model
}

Voliteľne povypínaj služby (option enabled '0' ), ktoré vo virtualizovanom systéme nemajú význam:

  • root/etc/config/ddns
  • root/etc/config/hd-idle
  • root/etc/config/minidlna
  • root/etc/config/mjpg-streamer
  • root/etc/config/openvpn

spusti qemu ako root

cd ~/omnia_qemu
sudo ./start_omnia.sh

Enterom aktivuj konzolu a počkaj na hlášku Router Turris successfully started.

Over, či tieto príkazy fungujú:

/sbin/ifstatus wan   # má vrátiť json
cat /tmp/sysinfo/model  # má vrátiť Turris Omnia
ls -l /tmp/run/foris-controller-client.sock  # má vrátiť meno a atribúty súboru, ak vracia chybu skús spustiť
                                             # /etc/init.d/foris-controller start a chvíľu počkať

V prehliadači otvor stránku https://192.168.123.1/. Udeľ certifikátu výnimku. Na prihlásenie použi svoje nastavené heslo.

Nefungujúce veci

  • OpenVPN
  • firewall (iptables)
  • LXC
  • schnapps a ďalšie veci súvisiace s btrfs (vnútri emulovaného systému je použitý 9p filesystém)
  • niektoré stránky vo Foris/Luci súvisiace so sieťou (lan, network, network interfaces)
  'FileNotFoundError: [Errno 2] No such file or directory: '/sys/firmware/devicetree/base/model'
  'No such file or directory: '/proc/net/nf_conntrack'

Ukončenie emulácie

v konzoli:

reboot

qemu sa ukončí, ledetap0 rozhranie bude odstránené a ipv4 forwarding sa vráti do pôvodného stavu.

Poznámky

Popisovaný postup vychádza z https://openwrt.org/docs/guide-user/virtualization/qemu a bol úspešne otestovaný na „produkčnom“ TOS verzie 3, hostiteľské PC = x86_64 s nainštalovaným Arch Linuxom.