VirtualBox — tipy a triky

Jedna z věcí, které se mi líbí na mém MacBooku je, že na stroji s dvoujádrem na 2,4 GHz a 4GB RAM si přece jenom už člověk může v pohodě virtualizovat jak je libo. Docela dobrým nástrojem zdarma je VirtualBox. Protože ho mám nainstalovaný už nějakou chvíli, podělím se o pár postřehů z používání.

Terminologie

Myslím, že nebude na škodu na úvod vysvětlit terminologii, kterou VirtualBox používá, je totiž hodně matoucí.

  • Guest — Host (virtualizovaný systém; ten systém, který máte ve VirtualBoxu)
  • Host — Hostitel (fyzický systém; ten systém, ve kterém máte spuštěný VirtualBox)

Sdílení složek

Ve VirtualBoxu jde udělat, že sdílíte složku z fyzického systému a přes síť (počítač VBOXSVR) se k ní dostanete z toho virtualizovaného. Nikoho asi nepřekvapím, že složky, které na fyzickém systému sdílíte si nastavíte někde v DevicesShared Folders…. Zajímavější otázka je, jak se k nasdílené složce na síti dostanete z virtualizovaného systému.

Virtualizovaná Windows XP

Tohle se zdá na první pohled zřejmé, dáte StartMy Network Places a tam si najdete počítač VBOXSVR. Ale ve Windows XP je podivná chyba, díky které se vám počítač VBOXSVR v My Network Places nemusí zobrazit. Potom musíte spustit průzkumník (např. StartMy Computer), zařídit abyste vlevo viděli ten panel se soubory (ViewExplorer BarFolders) a začít rozklikávat síť v panelu vlevo. Tam byste už počítač VBOXSVR měli vidět.

Virtualizovaný Linux

Budete potřebovat vědět jméno sdílení. To získáte opět v DevicesShared Folders…. Jméno sdílení je to co tam uvidíte ve sloupci Name. Sdílení si poté připojíte v Linuxu do nějakého adresáře příkazem:

sudo mount -t vboxsf jméno_sdílení kam_připojit

Ovšem pozor:

  • jméno_sdílení v argumentu příkazu mount byste nejspíš měli psát malými písmeny. Takže pokud ve sloupci Name vidíte Public, píšete namísto jméno_sdílení public.
  • Nesmíte použít stejné jméno sdílení a jméno adresáře, kam to připojujete. Takže sudo mount -t vboxsf sdilena sdilena je špatně!

Pokud to popletete, dočkáte se hlášky na způsob:

/sbin/mount.vboxsf: mounting failed with the error: Protocol error

Protože po připojení do složky způsobem výše by (je-li sdílená pro zápis) do ní mohl zapisovat jenom uživatel root a my bychom třeba chtěli abychom do ní mohli zapisovat pod naším uživatelem ze správce souborů v GNOME Nautilus, musíme trochu poopravit náš mountovací příkaz, aby přípojný adresář a soubory v něm vlastnil náš uživatel a skupina. Uživatele poznáme podle jeho uid, skupinu poznáme podle její gid.

uid a gid zjistíme příkazem id. Pustíme-li id bez argumentů, vypíše uid a gid aktuálního uživatele. Jinak můžeme příkazu id předat jeden argument — jméno uživatele. Takže id pepik vypíše uid a gid uživatele pepik.

Máte-li uid a gid, složku připojíte příkazem:

sudo mount -t vboxsf -o uid=vaše_uid -o gid=vaše_gid jméno_sdílení kam_připojit

Teď už by do té složky mělo jít zapisovat normálně ze správce souborů GNOME i pod ne-root uživatelem.

Jak se dostat na porty virtuálního stroje?

První otázka se hned nabízí, totiž proč by to někdo dělal? Třeba proto, že chcete virtualizované Ubuntu použít jako server na webový vývoj. Takže by neškodilo se na něj dostat třeba přes webový prohlížeč a ssh.

Jak se dá zařídit, aby se na virtualizovaný stroj člověk dostal, závisí na tom, jak u něj máte nastavenou síť, konkrétně pole Attached to.

Já tu budu popisovat jenom případ kdy v Attached to potřebujete mít NAT. Potom jde přesměrovat port z virtualizovaného systému na port na fyzickém systému. Například si můžeme říct, že to posuneme o 2000, takže na port 22 na virtualizovaném systému se dostaneme přes port 2022 na fyzickém systému.

Jak na to

Virtuální systém pro který to chcete nastavit vypněte a v nastavení mu nastavte síťovku na nějakou PCnet. Já tam mám PCnet-FAST III (Am79C973).

Pro každé jedno přesměrování potřebujete nastavit tři věci:

  • GuestPort — Číslo portu na virtualizovaném stroji.
  • HostPort — Číslo portu na fyzickém stroji.
  • Protocol — Většinou TCP, někdy UDP.

Přesměrování se dá nastavit dvěma způsoby:

  1. přes nějaké příkazy na příkazovce
  2. editací XML souboru popisujícího virtuální stroj
    • na Macu je najdete v ~/Library/VirtualBox/Machines/jméno_virt_systému/něco.xml
    • na Linuxu je najdete zhruba v ~/.VirtualBox/Machines/jméno_virt_systému/něco.xml

Já tu popíšu cestu přes příkazovku, pak se podívejte, co to do toho XML zapsalo.

VBoxManage list vms

Vypíše jména virtuálních strojů.

Pro každé jedno přesměrování musíte pustit následující tři příkazy:

VBoxManage setextradata jméno_virtualizovaného_systému "VBoxInternal/Devices/pcnet/0/LUN#0/Config/jméno_přesměrování/GuestPort" číslo_portu_na_virtualizovaném_stroji
VBoxManage setextradata jméno_virtualizovaného_systému "VBoxInternal/Devices/pcnet/0/LUN#0/Config/jméno_přesměrování/HostPort" číslo_portu_na_fyzickém_stroji
VBoxManage setextradata jméno_virtualizovaného_systému "VBoxInternal/Devices/pcnet/0/LUN#0/Config/jméno_přesměrování/Protocol" většinou_TCP_někdy_UDP

Jméno virtualizovaného systému získáte z výpisu VBoxManage list vms. Jednotlivá přesměrování si pojmenováváme, pokud přesměrováváte ssh tak si jméno přesměrování dáte asi ssh. :-)

Takže pokud počítač ze kterého to chcete přesměrovat má ve výpisu jmen virtuálních strojů jméno ubuntu a chtěli byste přesměrovat ty dva porty 80 a 22 způsobem jak jsem popisoval, spustíte z příkazové řádky:

VBoxManage setextradata ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22
VBoxManage setextradata ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 2022
VBoxManage setextradata ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP
VBoxManage setextradata ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/GuestPort" 80
VBoxManage setextradata ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/HostPort" 2080
VBoxManage setextradata ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/Protocol" TCP

Kdybyste nějaká přesměrování chtěli někdy zrušit, tak pro každé přesměrování spustíte ty tři příkazy kterými jste jej vytvořili bez hodnot na konci – smaže je to z toho XML, nebo příslušné elementy z XML můžete umazat ručně.

Použití

Teď můžete virtuální stroj zapnout. Nyní by vám pokud máte ve virtualizovaném systému spuštěné služby webový server a ssh server mělo fungovat:

  1. Zobrazování stránek z webového serveru na virtualizovaném systému, pokud jako adresu zadáte:
    http://localhost:2080/
    
  2. Přihlášení se k virtualizovanému systému přes ssh příkazem:
    ssh -p 2022 uzivatel-na-virtualnizovanem-systemu@localhost
    
  3. Dostat se do virtuálizovaného systému přes SFTP, například pomocí Cyberduck s následujícím nastavením:
    • SFTP (SSH File Transfer Protocol)
    • Server — localhost
    • Port — 2022
    • Username — uživatel na virtualizovaném systému

Řešení problémů

Pokud vám to při spuštění vypíše chybovou hlášku stylem:

Failed to start the virtual machine ubuntu. Configuration error: Failed to get the “MAC” value (VERR_CFGM_VALUE_NOT_FOUND). Unkown error creating VM (VERR_CFGM_VALUE_NOT_FOUND).

Tak to je možná proto, že jste si nenastavili tu síťovku na PCnet. Asi by šlo nastavit síťovku na nějaký Intel, ale potom byste museli změnit v těch “VBoxInternal/Devices/pcnet/0/LUN#0/Config/něco/něco” pcnet za něco co by odpovídalo tomu Intelu, to si najděte (zkusil bych e1000).

Závěr

No a to je všechno. Část jak se dostat na porty virtualizovaného stroje je spíš orientačně jak na to, ale mělo by vám to fungovat (mně to funguje).

Linkujte: Kliknutím na ikony můžete doporučit článek dalším lidem.
  • del.icio.us
  • Facebook
  • Bookmarky.cz
  • Jagg
  • Linkuj
  • Mediablog
  • Topčlánky
  • Topodkazy
  • Vybrali.sme

Leave a Reply