Benutzer-Werkzeuge

Webseiten-Werkzeuge


freebsd:bhyve

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
freebsd:bhyve [2021-05-04 20:42:31] manfredfreebsd:bhyve [2022-05-01 17:29:23] (aktuell) – gelöscht manfred
Zeile 1: Zeile 1:
-====== Bhyve ====== 
- 
-  * [[https://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/virtualization-host-bhyve.html|FreeBSD als Host mit bhyve]] 
-    * [[https://reviews.freebsd.org/D10335|VirtFS/9p filesystem passthrough support (virtio-9p)]] 
-  * [[https://libvirt.org/drvbhyve.html|Bhyve driver]] 
-    * [[https://libvirt.org/drvbhyve.html#fs-9p|Virtio-9p filesystem]] 
- 
-[[https://wiki.freebsd.org/bhyve|Bhyve]] ist ein Hypervisor, auf dem Gastbetriebssysteme in einer virtuellen Maschine ausgeführt werden. 
- 
- 
-==== Bhyve installieren ==== 
- 
-das Virtualisierungsmodul laden: 
-  > kldload vmm 
-  > echo 'vmm_load="YES"' >> /boot/loader.conf 
- 
-die Netzwerkanbindung vorbereiten: 
-  > ifconfig tap0 create 
-  > sysctl net.link.tap.up_on_open=1 
-  net.link.tap.up_on_open: 0 -> 1 
-  > ifconfig bridge0 create 
-  > ifconfig bridge0 addm igb0 addm tap0 
-  > ifconfig bridge0 up 
- 
-Konfiguration persistent machen, damit sie nach einem Reboot wieder vorhanden ist: 
-  > echo "net.link.tap.up_on_open=1" >> /etc/sysctl.conf 
-  > echo 'cloned_interfaces="bridge0 tap0"' >> /etc/rc.conf 
-  > echo 'ifconfig_bridge0="addm igb0 addm tap0"' >> /etc/rc.conf 
-  > echo 'kld_list="vmm nmdm"' >> /etc/rc.conf 
- 
-für eine 2. VM bräuchte man dann ein weiteres TAP: 
-  > ifconfig tap1 create 
-  > ifconfig bridge0 addm tap1 
- 
-und diese beiden Zeilen müssten dann in der '''' geändert werden: 
-  > vi /etc/rc.conf 
-  ... 
-  cloned_interfaces="bridge0 tap0 tap1" 
-  ifconfig_bridge0="addm igb0 addm tap0 addm tap1" 
-  ... 
- 
- 
-==== FreeBSD als Gast in der VM starten ==== 
- 
-eine virtuelle Festplatte erstellen: 
-  > truncate -s 16G freebsd.img 
- 
-FreeBSD 10.3 in der VM installieren: 
-  > sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 1024M -t tap0 -d freebsd.img -i -I FreeBSD-10.3-RELEASE-amd64-bootonly.iso guestname 
- 
-die VM von ihrer virtuellen Platte starten: 
-  > sh /usr/share/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d freebsd.img guestname 
- 
- 
-===== Bhyve-Netzwerkkonfiguration ===== 
- 
-  * [[https://empt1e.blogspot.com/2016/10/bhyve-networking-options.html|Bhyve Networking Options]] 
-    * __NAT__ - //VM und Host gehen über die selbe Netzwerkkarte und der selben IP ins Netz// 
-      * [[https://adventurist.me/posts/00304|Simple ipfw NAT for bhyve virtual machines and vnet jails]] 
-    * __Bridged networking__ - //VM und Host gehen über die selbe Netzwerkkarte aber unterschiedlichen IPs ins Netz// 
-      * ''bhyve -c 2 -m 4G -w -H -s 0,hostbridge -s 3,ahci-cd,/home/novel/FreeBSD-11.0-CURRENT-amd64-20160217-r295683-disc1.iso **-s 5,virtio-net,tap1** -s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait -s 30,xhci,tablet -s 31,lpc -l com1,stdio -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd vm0'' 
-    * __NIC Passthrough__ - //eine Netzwerkkarte alleine nur für die VM// 
-      * ''bhyve -c 2 -m 1G -w -H -S -s 0,hostbridge -s 4,ahci-hd,/home/novel/img/uefi_fbsd.raw **-s 6,passthru,3/0/0** -s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait -s 30,xhci,tablet -s 31,lpc -l com1,stdio -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd vm0'' 
- 
- 
- 
-===== Bridged networking - VM und Host gehen über die selbe Netzwerkkarte aber unterschiedlichen IPs ins Netz ===== 
- 
-  > pkg install sysutils/grub2-bhyve 
- 
-eine virtuelle Festplatte erstellen: 
-  > truncate -s 16G linux.img 
- 
- 
-==== Linux als Gast in der VM installieren ==== 
- 
-Map-Datei für den Grub anlegen: 
-  > vi device.map 
-  (hd0) ./linux.img 
-  (cd0) ./buntu-20.04-legacy-server-amd64.iso 
- 
-Grub läd den Linux-Kernel vom Installations-ISO-Image: 
-  > grub-bhyve -m device.map -r cd0 -M 1024M linuxguest 
- 
-VM starten: 
-  > ubhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img -s 4:0,ahci-cd,./buntu-20.04-legacy-server-amd64.iso -l com1,stdio -c 4 -m 1024M linuxguest 
-  > bhyvectl --destroy --vm=linuxguest 
- 
- 
-==== in der VM installiertes Linux starten ==== 
- 
-Map-Datei für den Grub anpassen: 
-  > vi device.map 
-  (hd0) ./linux.img 
-   
-Grub läd den Linux-Kernel von der virtuellen Festplatte: 
-  > grub-bhyve -m device.map -r hd0,msdos1 -M 1024M linuxguest 
- 
-VM starten: 
-  > bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img -l com1,stdio -c 4 -m 1024M linuxguest 
-  > bhyvectl --destroy --vm=linuxguest 
- 
- 
-==== Konsolen in der virtuellen Maschine ==== 
- 
-  > kldload nmdm 
-  > bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img -l com1,/dev/nmdm0A -c 4 -m 1024M linuxguest 
-  > cu -l /dev/nmdm0B 
-  Connected 
-   
-  Ubuntu 13.10 handbook ttyS0 
-   
-  handbook login: 
- 
- 
-==== Virtuelle Maschinen verwalten ==== 
- 
-  > ls -al /dev/vmm 
-  total 1 
-  dr-xr-xr-x   2 root  wheel    512 Mar 17 12:19 ./ 
-  dr-xr-xr-x  14 root  wheel    512 Mar 17 06:38 ../ 
-  crw-------   1 root  wheel  0x1a2 Mar 17 12:20 guestname 
-  crw-------   1 root  wheel  0x19f Mar 17 12:19 linuxguest 
-  crw-------   1 root  wheel  0x1a1 Mar 17 12:19 otherguest 
- 
-  > bhyvectl --destroy --vm=guestname 
- 
- 
-==== vereinfachen per Skript am Beispiel einer Minecraft-VM ==== 
- 
-Das Host-System heißt in diesem Beispiel "server", die VM hat die IP "192.168.1.250" und den Namen "minecraft". 
-Auf dem Host-System tun wir fast alles als Benutzer "fritz" und in der VM als "root". 
- 
-Die VM sollte derart vorbereitet sein, dass "fritz" sich passwortlos per ''ssh root@192.168.1.250'' einloggen kann. 
-  * dazu muss eine statische Netzwerkkonfiguration im VM-OS konfiguriert sein 
-  * weiterhin muss der Benutzer "fritz" einen SSH-Schlüssel besitzen 
-  * und der öffentliche Teil von "fritz" seinem SSH-Schlüssel muss beim Benutzer "root" in der VM hinterlegt werden => [[::SSH-Schlüssel austauschen für ein passwortlosen Login#Schlüsselpaar generieren]] 
-Dann ist das stoppen der VM viel einfacher. 
- 
-Auch wenn das Verzeichnis ''/home/Minecraft/'' in diesem Fall unter ''/home/'' liegt, ist es kein Home-Verzeichnis. 
-Ich habe es nur als allgemeinen Ablageort für die Dateien bezüglich dieser VM gewählt: 
-  > ls -lha /home/Minecraft/ 
-  drwxr-xr-x   3 root  wheel    10B 13 Nov. 02:22 . 
-  drwxr-xr-x  31 root  wheel    52B 13 Nov. 09:13 .. 
-  -rwxr-xr-x   1 root  wheel   754B 13 Nov. 09:11 Minecraft_VM.sh 
-  drwxr-xr-x   2 root  wheel     3B 13 Nov. 01:56 bin 
-  -rw-r--r--   1 root  wheel    32B 13 Nov. 00:59 device.map 
-  -rw-r--r--   1 root  wheel   100G 13 Nov. 09:50 linux.img 
-  -rwx------   1 root  wheel   787M 12 Nov. 23:10 ubuntu-20.04-legacy-server-amd64.iso 
-   
-  > ls -lha /home/Minecraft/bin/ 
-  drwxr-xr-x  2 root  wheel     3B 13 Nov. 01:56 . 
-  drwxr-xr-x  3 root  wheel    10B 13 Nov. 02:22 .. 
-  -rwxr-xr-x  1 root  wheel    88B 13 Nov. 01:58 mc.sh 
- 
-<file bash /home/Minecraft/Minecraft_VM.sh> 
-#!/bin/bash 
- 
-VM_GAST="Minecraft" 
-HDD="linux.img" 
-CDROM="ubuntu-20.04-legacy-server-amd64.iso" 
-CPU="2" 
-RAM="16G" 
-NETZWK="tap0" 
- 
-#==============================================================================# 
- 
-cd $(dirname ${0}) || exit 123 
- 
-ps alxwww | fgrep -v grep | fgrep grub-bhyve | fgrep Minecraft && killall grub-bhyve 
-sleep 0.5 
-ps alxwww | fgrep -v grep | fgrep grub-bhyve | fgrep Minecraft && killall grub-bhyve 
-sleep 0.5 
- 
-grub-bhyve -m device.map -r hd0,msdos1 -M ${RAM} ${VM_GAST} 
-bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,${NETZWK} -s 3:0,virtio-blk,./${HDD} -l com1,stdio -c ${CPU} -m ${RAM} ${VM_GAST} 
- 
-bhyvectl --destroy --vm=${VM_GAST} 
-ls -lha /dev/vmm/ 
- 
-#==============================================================================# 
-</file> 
- 
-<file bash /home/Minecraft/bin/mc.sh> 
-#!/bin/bash 
- 
-screen -S Minecraft /home/Minecraft/Minecraft_VM.sh 
-</file> 
- 
-  > echo "fritz           ALL=NOPASSWD:/home/Minecraft/bin/mc.sh" > /usr/local/etc/sudoers.d/minecraft 
- 
-starten: 
-  [fritz@server ~]$ sudo /home/Minecraft/bin/mc.sh 
- 
-Kontrolle: 
-  [fritz@server ~]$ sudo /home/Minecraft/bin/mc.sh 
-  [fritz@server ~]$ ls -lha /dev/vmm/ 
-  total 2 
-  dr-xr-xr-x   2 root  wheel   512B 13 Nov. 09:22 . 
-  dr-xr-xr-x  36 root  wheel   512B  3 Nov. 11:01 .. 
-  crw-------   1 root  wheel   0x9b 13 Nov. 09:22 Minecraft 
-   
-  [root@server ~]# screen -ls 
-  There are screens on: 
-          3793.Minecraft  (Detached) 
-  1 Socket in /tmp/screens/S-root. 
- 
-"fritz" verbindet sich über das Netzwerk mit der VM: 
-  [fritz@server ~]$ ssh root@192.168.1.250 
- 
-"root" öffnet den Screen, in dem die VM läuft (Konsolenzugang): 
-  [root@server ~]# screen -x Minecraft 
- 
-stoppen: 
-  [fritz@server ~]$ ssh root@192.168.1.250 halt -p 
- 
- 
-=== Minecraft in der VM installieren === 
- 
-soweit ist jetzt alles vorbereitet, jetzt kann Minecraft installiert werden => [[https://www.digitalocean.com/community/tutorials/how-to-create-a-minecraft-server-on-ubuntu-20-04-de|So erstellen Sie einen Minecraft-Server unter Ubuntu 20.04]] 
- 
-Den gewünschten Minecraft-Server kann man beispielsweise von [[https://getbukkit.org/|hier (die neueste von spigot)]] oder [[https://getbukkit.org/get/|hier (die stabilste von spigot)]] runterladen. 
- 
-in der VM müssen folgende Kommandos ausgeführt werden: 
-  root@minecraft:~# apt update 
-  root@minecraft:~# apt full-upgrade 
-  root@minecraft:~# apt install openjdk-8-jre-headless screen vim mc net-tools 
-  root@minecraft:~# mkdir Minecraft_Server 
-  root@minecraft:~# cd Minecraft_Server 
-  root@minecraft:~/Minecraft_Server# wget https://cdn.getbukkit.org/spigot/spigot-1.16.1.jar -O spigot-1.16.1.jar 
-  root@minecraft:~/Minecraft_Server# java -Xmx3G -Xms3G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -jar spigot-1.16.1.jar nogui 
-  root@minecraft:~/Minecraft_Server# echo "eula=true" >> eula.txt 
-  root@minecraft:~/Minecraft_Server# cp server.properties server.properties_original 
-  root@minecraft:~/Minecraft_Server# cat server.properties_original | sed "s/server-ip=.*/server-ip=$(hostname -i)/" > server.properties 
- 
- 
-=== Skripte zum starten des Minecraft-Servers === 
- 
-Das Ubuntu-Linux 20.04 wurde in der VM bei der Installation mit dem Hostnamen "minecraft", dem Benutzer **"mc"** und der IP **"192.168.1.250"** konfiguriert. 
-Der Hostname und die IP wurden auch im DNS eingetragen. 
- 
-Die VM sollte derart vorbereitet sein, dass "mc" sich passwortlos per ''ssh root@192.168.1.250'' einloggen kann. 
-  * dazu muss eine statische Netzwerkkonfiguration im VM-OS konfiguriert sein 
-  * weiterhin muss der Benutzer "mc" einen SSH-Schlüssel besitzen 
-  * und der öffentliche Teil von "mc" seinem SSH-Schlüssel muss beim Benutzer "root" in der VM hinterlegt werden => [[::SSH-Schlüssel austauschen für ein passwortlosen Login#Schlüsselpaar generieren]] 
-Dann ist das stoppen der VM viel einfacher. 
- 
-  root@minecraft:~# ls -lh /root/ 
-  drwxr-xr-x 2 root root 4.0K Nov 13 13:33 bin 
-  drwx------ 7 root root 4.0K Nov 13 14:16 Minecraft_Server 
-  -rw-r--r-- 1 root root    0 Nov 13 11:13 systemctl 
- 
-  root@minecraft:~# ls -lh /root/bin/ 
-  -rwxr-xr-x 1 root root 620 Nov 13 13:33 mc.sh 
-  -rwxr-xr-x 1 root root 206 Nov 13 10:59 Start.sh 
- 
-<file bash /root/bin/mc.sh> 
-#!/usr/bin/env bash 
-# 
- 
-SERVER_JAR="spigot-1.16.1.jar" 
-SPEICHER="3G" 
-PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" 
- 
-echo java -Xmx3G -Xms3G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -jar spigot-1.16.1.jar nogui 
-cd /root/Minecraft_Server/ && java -Xmx${SPEICHER} -Xms${SPEICHER} -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -jar ${SERVER_JAR} nogui 
- 
-#read PAUSE 
-</file> 
- 
-<file bash /root/bin/Start.sh> 
-#!/usr/bin/env bash 
-# 
- 
-PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" 
- 
-cd /root/Minecraft_Server/ || exit 123 
-screen -S Minecraft /root/bin/mc.sh 
-</file> 
- 
- 
-=== Start-Prozedur des Minecraft-Servers === 
- 
-einloggen in die VM: 
-  [fritz@server ~]$ ssh root@192.168.1.250 
- 
-Minecraft-Servers starten: 
-  root@minecraft:~# /root/bin/Start.sh 
- 
-aus dem Screen raus gehen: 
-  [Strg]+[a],[d] 
- 
-Kontrolle: 
-  screen -ls 
- 
- 
-=== Stop-Prozedur des Minecraft-Servers === 
- 
-Entweder hat man die Konsole vom Start des Minecraft-Servers noch offen, dann kann man dort einfach "stop" eingeben. 
- 
-... oder man muss sich wieder in die VM einloggen: 
-  [fritz@server ~]$ ssh root@192.168.1.250 
-   
-  root@minecraft:~# screen -ls 
-  There is a screen on: 
-          1653.Minecraft  (11/13/2020 01:33:14 PM)        (Attached) 
-  1 Socket in /run/screen/S-root. 
-   
-  root@minecraft:~# screen -x Minecraft 
-  > stop 
- 
- 
-===== NIC Passthrough - eine Netzwerkkarte alleine nur für die VM ===== 
- 
-  * [[https://wiki.freebsd.org/bhyve/pci_passthru|bhyve PCI Passthrough]] 
-  * [[https://www.davidschlachter.com/misc/t480-bhyve-wifi-pci-passthrough|FreeBSD WiFi PCI Passthrough: Intel Wireless 8265, bhyve, 13.0-CURRENT]] 
- 
-  > pciconf -v -l | fgrep -A1 -B3 network 
-  em1@pci0:0:31:6:        class=0x020000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x0d4d subvendor=0x1849 subdevice=0x0d4d 
-     vendor     = 'Intel Corporation' 
-     device     = 'Ethernet Connection (11) I219-V' 
-     class      = network 
-     subclass   = ethernet 
- 
-Ethernet Connection: ''em1@pci0:**0:31:6 -> 0/31/6**'' 
- 
-das hier funktioniert bei mir nicht: 
-  > echo 'pptdevs="0/31/6"' >> /boot/loader.conf 
-  > reboot 
- 
-  > devctl set driver -f pci0:0:31:6 ppt 
- 
-  > pciconf -lv | fgrep -A1 -B3 network 
-  ppt0@pci0:0:31:6:       class=0x020000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x0d4d subvendor=0x1849 subdevice=0x0d4d 
-      vendor     = 'Intel Corporation' 
-      device     = 'Ethernet Connection (11) I219-V' 
-      class      = network 
-      subclass   = ethernet 
- 
-... PCI passthrough requires direct memory allocation, hence the -S flags.\\ 
-[[http://freebsd.1045724.x6.nabble.com/bhyve-PCI-pass-through-to-Linux-guest-td6061452.html|bhyve PCI pass-through to Linux guest]] 
-  > grub-bhyve -m device.map -r hd0,msdos1 -S -M 4G Linux 
-  > bhyve -A -H -P -S -s 0:0,hostbridge -s 1:0,lpc -s 2:0,passthru,0/31/6 -s 3:0,virtio-blk,./linux.img -l com1,stdio -c 1 -m 4G Linux 
-  > bhyvectl --destroy --vm=Linux 
-  > ls -lha /dev/vmm 
-  total 1 
-  dr-xr-xr-x   2 root  wheel   512B Mar 16 02:23 . 
-  dr-xr-xr-x  21 root  wheel   512B Mar 16 03:12 .. 
-  crw-------   1 root  wheel   0xae Mar 16 02:23 Linux 
- 
-Wenn jetzt kein Ping durchgeht, dann hat man sicherlich vergessen, ein Eth-Kabel anzuschließen. :-) 
- 
  
/home/http/wiki/data/attic/freebsd/bhyve.1620160951.txt · Zuletzt geändert: von manfred