[Eisfair] FYI: qemu auf eisx64, q.e.d.

D. Oezbilen oezbilen at gmx.net
Do Feb 6 17:15:44 CET 2020


Hallo @all,

oft lese ich im Forum, dass manche Proxmox/VBox einsetzen. Warum nicht 
direkt qemu (mit kvm) auf eisx64? In diesem Posting beschreibe ich die 
Machbarkeit, es funkt. Wer es angeht, wird es sicher auch so oder 
aehnlich umsetzen koennen. Viel Erfolg.

Es ist *moeglich* nativ auf eisx64 (und mit paar :-) dev-Paketen) qemu 
zu kompilieren und mit der kvm-Option VMs zu starten.

Sicher, Vbox und Proxmox bieten eine GUI an, machen es in der Anwendung 
etwas einfacher. Auch unter deb (und anderen linuces) kann man mit vmm 
sich in weniger als 20s eine virt. Maschine zusammen klicken, egal 
welche Netzwerkonfig man haben will, s.u.

eis ist eine wunderbare Plattform, die vieles ermoeglicht, Olaf hat es 
neulich sehr treffend beschrieben. Vieles gibt es schon fertig als 
Sorglospaket, doch man hat auch die Freiheit sich eine blutige Nase ;-) 
zu holen.

Auf der anderen Seite, der Lerneffekt -wenn auch manchmal steil- ist 
nicht zu unterschaetzen.

Ich will auch nicht das Rad neu erfinden, doch ich denke qemu macht 
einen eisx64 irgendwie komplett, auch, wenn es wohl aufgrund der 
komplexen, mannigfaltigen Syntax (ob der Moeglichkeiten) der bin ein 
eis-Paket schwer aufsetzbar sein wird. Wie will man da die Uebersicht 
ueber die Parameter halten um diese in der eis-setup-Schicht zu 
praesentieren? Das Mail-Paket (exim) hat schon viele; qemu s. Anhang.

Ich wollte es fuer mich wissen und habe mich dran gesetzt qemu zu 
kompilieren. factum ist, es funkt einwandfrei. Yessss.

Hier paar Schreenshots, die ersten vms auf eis.

	<https://ibb.co/M2W0hJm>
	<https://ibb.co/4ZNZyV0>
	<https://ibb.co/XDqrVLm>
	<https://ibb.co/Z2kYnS8>

Die qemu-SW gibt es hier:

	git clone https://github.com/qemu/qemu

linuxsrv 2.8.23 # git clone https://github.com/qemu/qemu
Cloning into 'qemu'...	
remote: Enumerating objects: 473976, done.
remote: Total 473976 (delta 0), reused 0 (delta 0), pack-reused 473976
Receiving objects: 100% (473976/473976), 261.74 MiB | 5.63 MiB/s, done.
Resolving deltas: 100% (383004/383004), done.

Anzahl der Dateien = 7159 -- Gesamtgroesse= 390498488 / 373M

Wenn man ./configure/make wie nachfolgend laufen laesst, ist der Lauf in 
1h6min beendet.

./configure --sysconfdir=/etc --includedir=/usr/include 
--libdir=/usr/lib64 $1 $2 $3
(so kompiliere ich auf eisx64 alle sourcen)

Wie o.a. wird dann qemu (ohne Plattform-Spez.)  fuer *alle* Plattformen 
kompiliert. dg. :-( ;-)

Trotzdem sind die Fehler in der config.log stark ueberschaubar. Am Ende 
sind es dann 4.9 GB im Verzeichnis, wenn man undiff. configure 
anstoesst. ;-)

Anzahl der Dateien = 23944 -- Gesamtgroesse= 5168786692 / 4.9G
v. 373M auf 4,9G, cool. ;-) Das alles muss so nicht sein.

Deswegen ist es *folgendermassen besser/zielfuehrender*:

./configure \
--sysconfdir=/etc \
--includedir=/usr/include \
--libdir=/usr/lib64 \

--target-list=x86_64-softmmu \	x86_64bit Plattform
--enable-spice \			hierzu muessen die Spice server/client sourcen 
vorliegen, s.u.
--enable-tcmalloc \		dazu werden sourcen gperftools (Google-Ent.) benoetigt
--enable-libusb \		usb passthrough
--enable-linux-aio \		parallele I/O auf HDs, sehr sinnvoll
--enable-vde \			verteiltes Ethernet im Rahmen SDN
--enable-cap-ng \		um Pakete mitschneiden zu koennen
--enable-gnutls \		Crypto-Lib mit FIPS 1.40 (nettle kann das nicht, s.u.)
--enable-gcrypt \		Crypto-Lib, libgcrypt-1.8.5.tar.bz2

--enable-guest-agent \	 klar, sollte sein, Kommunikation mit dem Gast
					ueber --moniitor od. --chardev (s.u.)

--enable-usb-redir \		USB-Umleitung, bin nicht sicher, ob erst
					usbredir-0.7.1
					was auf der Einheit ist die usb-Redir ermoglicht.
					usbredir-0.7.1 ist felerhaft, doch der Kompiler gibt aus, wie man es
					doch sauber kompilieren kann.

--enable-malloc-trim \	Speicheroptimierung, funkt/funkt nicht?

--enable-sdl-image \	
--enable-sdl \			Simple DirectMedia Layer, alte Technik(?),

-------------------------------------------------------------------------------------------------------------

Diese u.a. features versuchte ich mit einzuabeun, NT. :-)

--enable-mpath \		Multipath, funkte nicht, weil dazu libudev.h benoetigt 
wird,
					diese kommt aber ueber systemd. s.o.

Anmerkung:
systemd konnte ich mit den paar Abhaengigkeiten (Meson/ninja) 
konfigurieren, doch make lief trotzdem nicht durch. Doch, wollte ich 
systemd auf eis haben? :-)

--enable-lzfse \			Schnelle Kompression, aber leider nogo, da die 
sourcen  *nur*
					statische libs  *.a erzeugen, keine dynamischen *.so; keine Ahnung,
					wie ich das haette aufloesen koennen.

--enable-nettle \		Crypto-Lib, ist aehnlich wie gcrypt. GnuTLS, 
libgcrypt koennen
					FIPS140, nettle nicht. Ebenso kann libsodium (fuer ntopng) kein
					FIPS140.

--enable-membarrier \	nicht klar, ob es einen Zugewinn im Specherzugriff 
bringt, schadet
					aber nicht heisst es. s. Link
<http://man7.org/linux/man-pages/man2/membarrier.2.html>
					Auf eis/kernel gibt es kein linux/membarrier.h. dg.
					Nur ein sys_membarrier.h.

--enable-libpmem \		irgendwas Abgefahrenes, NVDIMM (vNVDIMM)
					fuer Speicher/Intel funkt nicht, da auch eine spez. HW benoetigt(?)

--enable-guest-agent-msi \	die MSI-Datei EXE fuer den Gust-Agent soll 
mitentstehen;
						 nur mingw32-Umgebungn.

--enable-libiscsi \		diese Funktion binde ich spaeter ein, wenn ich 
iscsi auf eis habe
					,kompilieren konnte ich es. Kann/muss nicht sein.

--enable-libnfs			nicht mit eis-dev-Paketen, leider nicht
					 Install libnfs devel >= 1.9.3, nur wie ...

=> Ausgabe des o.a. configure-Laufs:

-------------------------------------------------------------------------------------------------------------

linuxsrv 2.8.23 # ./cfgqemuall

Disabling malloc_trim with non-libc memory allocator
Install prefix    /usr/local
BIOS directory    /usr/local/share/qemu
firmware path     /usr/local/share/qemu-firmware
binary directory  /usr/local/bin
library directory /usr/lib64
module directory  /usr/lib64/qemu
libexec directory /usr/local/libexec
include directory /usr/include
config directory  /etc
local state directory   /usr/local/var
Manual directory  /usr/local/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Build directory   /home/opt/qemu.kvm/qemu
Source path       /home/opt/qemu.kvm/qemu
GIT binary        git
GIT submodules    ui/keycodemapdb tests/fp/berkeley-testfloat-3 
tests/fp/berkeley-softfloat-3 capstone slirp
C compiler        cc
Host C compiler   cc
C++ compiler      c++
Objective-C compiler cc
ARFLAGS           rv
CFLAGS            -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g
QEMU_CFLAGS       -I/usr/include/pixman-1   -Werror  -pthread 
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include  -fPIE -DPIE -m64 
-mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE 
-Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings 
-Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 
  -Wexpansion-to-defined -Wendif-labels -Wno-shift-negative-value 
-Wno-missing-include-dirs -Wempty-body -Wnested-externs 
-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers 
-Wold-style-declaration -Wold-style-definition -Wtype-limits 
-fstack-protector-strong -I/usr/include/p11-kit-1 
-I/usr/include/libpng16  -pthread -DOPENSSL_LOAD_CONF 
-I/usr/include/spice-1 -I/usr/include/spice-server 
-I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 
-I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 
-I$(SRC_PATH)/capstone/include
QEMU_LDFLAGS       -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 
-fstack-protector-strong
make              make
install           install
python            /usr/bin/python3 -B (3.6.5)
slirp support     git
smbd              /usr/sbin/smbd
module support    no
host CPU          x86_64
host big endian   no
target list       x86_64-softmmu
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
SDL support       yes (2.0.9)
SDL image support yes
GTK support       no
GTK GL support    no
VTE support       no
TLS priority      NORMAL
GNUTLS support    yes
libgcrypt         yes
   hmac            yes
   XTS             yes
nettle            no
libtasn1          yes
PAM               yes
iconv support     yes
curses support    yes
virgl support     no
curl support      yes
mingw32 support   no
Audio drivers      oss
Block whitelist (rw)
Block whitelist (ro)
VirtFS support    yes
Multipath support no
VNC support       yes
VNC SASL support  yes
VNC JPEG support  yes
VNC PNG support   yes
xen support       no
brlapi support    yes
Documentation     no
PIE               yes
vde support       yes
netmap support    no
Linux AIO support yes
Linux io_uring support no
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
HAX support       no
HVF support       no
WHPX support      no
TCG support       yes
TCG debug enabled no
TCG interpreter   no
malloc trim support no
RDMA support      no
PVRDMA support    no
fdt support       no
membarrier        no
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
posix_memalign    yes
libcap-ng support yes
vhost-net support yes
vhost-crypto support yes
vhost-scsi support yes
vhost-vsock support yes
vhost-user support yes
vhost-user-fs support yes
Trace backends    log
spice support     yes (0.12.15/0.14.1)
rbd support       no
xfsctl support    yes
smartcard support no
libusb            yes
usb net redir     yes
OpenGL support    no
OpenGL dmabufs    no
libiscsi support  no
libnfs support    no
build guest agent yes
QGA VSS support   no
QGA w32 disk info no
QGA MSI support   no
seccomp support   no
coroutine backend ucontext
coroutine pool    yes
debug stack usage no
mutex debugging   no
crypto afalg      no
GlusterFS support no
gcov              gcov
gcov enabled      no
TPM support       yes
libssh support    yes
QOM debugging     yes
Live block migration yes
lzo support       yes
snappy support    no
bzip2 support     yes
lzfse support     no
NUMA host support yes
libxml2           yes
tcmalloc support  yes
jemalloc support  no
avx2 optimization yes
replication support yes
VxHS block device no
bochs support     yes
cloop support     yes
dmg support       yes
qcow v1 support   yes
vdi support       yes
vvfat support     yes
qed support       yes
parallels support yes
sheepdog support  yes
capstone          git
libpmem support   no
libudev           no
default devices   yes
plugin support    no
cross containers  no

NOTE: guest cross-compilers enabled: cc

-------------------------------------------------------------------------------------------------------------

Am Ende ist unter ../x86_64-softmmu eine 67782K grosse
	qemu-system-x86_64.

Gesrtipped faellt sie auf 15233K. Das war es dann. Doch, das ist 
nur/nicht mal die 1/2 Miete. ;-)

#######################################################

Damit alles ohne Haenger durchlaeuft, habe ich folgende Pakete, zum 
groesstenteil  per
git clone xyz
v. github geholt, selten eine .gz.tar-Version.

SDL2_image-2.0.5/
SDL2_image-2.0.5.tar.gz
automake-1.16/
automake-1.16.tar.gz
gperftools/
ipmctl/	nicht eingesetzt
jemalloc/	talloc-gperftools ist schneller
libgcrypt-1.8.5/
libgcrypt-1.8.5.tar.bz2
libibverbs-1.2.0/
libibverbs-1.2.0.tar.gz
librdmacm/
libunwind/
lzfse/
ndctl/
netmap/
numactl/
pmdk/
rdma-core/	nciht eingesetzt
snappy/
spice-protocol/
spice-protocol-0.12.15/
spice-protocol-0.12.15.tar.bz2
spice-protocol-0.12.3/
spice-protocol-0.12.3.tar.bz2
spice-streaming-agent-0.3/
spice-streaming-agent-0.3.tar
usbredir-0.7.1/
usbredir-0.7.1.tar.bz2
vde-2/

Manche waren nur ein Versuch wie ipmctl, lzfse, rdms-core, ndctl, andere 
fuehrten zum Erfolg, wie spice/usb-redir/vde-2/gperftools/libcrypt. 
Libunwind erfolgreich kompiliert, doch am Ende funkt rdma (fuer Rados 
Block Device (rbd)) nicht.

jemalloc vs. tcmalloc
jemaloc war wohl lange Zeit vor tcmalloc (ich mein Google-Entwicklung), 
doch die letzten talloc Versionen sind, was den Speicherdurchfluss 
betriff gleichauf, oder gar besser.

#######################################################

Was ist nun mit derm Kompilat auf eisx64 moeglich? Virtualisierung. ;-) 
mit qemu mit/ohne kvm. Natuerlich mit kvm, sonst wird es halt etwas traeger.

	./qemu-system-x86_64 \
	-accel kvm \
	-cdrom DD11Home.iso \
	-m 512
	-boot d
	-vnc :1
	-spice port=5902,disable-ticketing

bekommt diese VM im Netz per
	vncviewer mit der IP-eisx64:5901
oder
	per virt.-viewer IP-eisx64:5902 (mit Ton).

Erster schneller Entwurf aus eisx64, ob die bin irgendwas macht. Sie 
macht. Virtio funkt, USB redir auch, Monitorfunktionen der VM per

	-chardev socket,path=
	-monitor unix:	
	-monitor telnet::[Port]

ebenso. Dies ist insofern wichtig, weil es keine virsh-Shell gibt, sprich

	virsh start VM
	virsh destroy VM
	virsh shutdown VM (und andere Ops)

sind nicht moeglich. Wenn die VM runtergefahren muss, kann man ueber 
nc/telnet/socat gepiped den Status der VM veraendern.

Z.B. kommt man mit
	minicom -D unix\#monitor.sock
auf
-------------------------------------------------------------------------------------------------------------
Welcome to minicom 2.7.1

OPTIONS:
Port unix#monitor.sock

Press CTRL-A Z for help on special keys

QEMU 4.2.50 monitor - type 'help' for more information
(qemu)
-------------------------------------------------------------------------------------------------------------
help gibt dann eine LIste raus:

=>

acl_add aclname match allow|deny [index] -- add a match rule to the 
access control list
acl_policy aclname allow|deny -- set default access control list policy
acl_remove aclname match -- remove a match rule from the access control list
...
watchdog_action [reset|shutdown|poweroff|pause|debug|none] -- change 
watchdog action
wavcapture path audiodev [frequency [bits [channels]]] -- capture audio 
to a wave file (default frequency=44100 bits=16 chann)
x /fmt addr -- virtual memory dump starting at 'addr'
x_colo_lost_heartbeat  -- Tell COLO that heartbeat is lost,
                         a failover or takeover is needed.
xp /fmt addr -- physical memory dump starting at 'addr'
-------------------------------------------------------------------------------------------------------------

Das alles ist irgendwie beherrschbar, und sicherlich mit paar Klicks 
auch nicht gesetzt aber doch manuell erreichbar, was andere GUIs 
huebsch, klickbar praesentieren.

___Aber___ die Netzwerkconfig manuell _unter_auf_eis ist doch eine 
leichte Herausforderung gewesen. Nicht nur, dass qemu X-fache Optionen 
zur Netzwerkconfig mitbringt, leider hat die Setup-Schicht unter eis 
paar Beschraenkungen, die nur manuell zu loesen sind.

Ich bin es gewohnt unter Debian sowohl das Bonding v. x-fachen NICs als 
auch direkte  Bridges, wie auch Bridges, die auf das gebondete device 
aufsetzen __ohne__ IP zu konfigurieren. Das geht rel. transparent. Der 
Betrieb auf den Servern belegt auch, dass die Config dem Alltag gerecht 
wird. Diese synthetischen devices/Konstrukte werden v. den VMs 
herangezogen, auf diese Einheiten wird per vnetX eine Netzwerkverbindung 
aufgebaut.

Das ist leider unter eis *nicht* moeglich, da das Bridge-Paket ohne IP 
nicht abschliesst. dg. Ich gehe davon aus, dass eine Einschraenkung auch 
(?) fuer das Bonding-Paket vorhanden sein koennte.

Mein Netzwerksetup ist folgendermassen (in Anlehnung an die 
Debian-Einheiten):

onboard - eisx64-dev mit IP, fuer ds BS an sich.
Erster Port der Quad-NIC mit IP, wird (z.Z. auf dem eis noch) nicht 
verwendet ist konfiguriert, hat mit den VMs nicht durch, ich nutze die 
eis als LAN-LAN Router, deswegen zwei NICs.
Zweiter Port der Quad-NIC ohne IP wird fuer die VMs benutzt/Konfiguriert.

Dieser zweiter Port soll konfiguriert und gestartet werden *OHNE*, dass 
er eine IP-Adresse hat. Das ist bei Debian moeglich, unter eis manuell auch.

Dieses Bild zeigt gut eine Uebersicht, wie man die Begriffe einparken kann.
<https://wiki.gentoo.org/images/b/ba/Qemu_network_diag.png>
Das NAT wischen br0 und eth1 habe ich nicht, brauche ich nicht. Wozu 
auch. Alter bloeder Spruch, aber passt: Wo man routen kann, routet man, 
wenn man nicht routen kann, NATtet man.

brctl show zeigt im Betrieb dies:
-------------------------------------------------------------------------------------------------------------
bridge name     bridge id               STP enabled     interfaces
br7             8000.001b21692233       no              enx001b21692233
			                                                        tap0
                         			                                tap1
Kurze Beschreibung, br7 setzt auf die NIC enx000... auf, auf dieser br 
sitzen zwei taps auf.
Wie kommt man zu dieser Konfig?

Anlage der Bridge br7:
	brctl addbr br7
---------	
zu dieser Bridge wird das Interface enx001b21692233 dazugenommen:
	brctl addif br7 enx001b21692233
=>
br7             8000.001b21692233       no              enx001b21692233
noch keine tapX-devs Vorhanden.
---------
tap0 wird angelegt; der Benutzer ist erstmal root, es sollte spaeter ein 
Benutzer fuer die VMs defniert werden, z.B. kvmusr etc, der darf die 
Bridges hoch- und runterfahren.
	ip tuntap add dev tap0 mode tap user $(whoami)
---------
tap0 wird Br7 zugeschlagen
	ip link set tap0 master br7
---------
br7 wird gestartet
	ip link set dev br7 up
---------
tap0 auch.
ip link set dev tap0 up
---------
Selbiges gilt fuer tap1.
-------------------------------------------------------------------------------------------------------------

Diese tapX werde in der Config so angegeben.

-device virtio-net-pci,netdev=network0,mac=52:55:00:d1:55:01 \
-netdev tap,id=network0,ifname=tap0,script=no,downscript=no \

In der zweiten Zeile wird ein netdev mit dem Namen (id) network0 
definiert, das auf (ifname) tap0 aufsetzt. Das ist der Backendbereich, 
es ist die hostseitige Sicht/Schicht. Die erste Zeile fuehrt hingegen 
den guest-Bereich/Sicht auf, also, das, was der Gast v. oben sieht, z.B. 
die MAC oder den Typ der Netzwerkkarte hier virtio-net-pci oder eine 
e1000 etc.

Mir war es wichtig, dass virtioXYZ zum Einsatz kommt, die Bridge ohne IP 
ist und ohne das NAT-Geraffel etc. Die VM _direkt_ ueber die 
verschlungenen Pfade ins LAN kommt und eben dort eine dhcp-IP ziehen 
kann. Es funkt. q.e.d.

VirtioXYZ / Ballon-Treiber werden v. den mir vorleigenden 
win32-Einheiten erkannt und nachgezogen.

Die anderen Netzwerkkonfigurationen sind auch moeglich, doch ich habe 
bisher diese nicht gebraucht. Diese zweiseitige Def. zum Host/Guest ist 
auch beim Parameter -monitor gegeben.

Am Ende sollte man sowas haben Kommentare mit #
------------------------------------------------------------------------------------------------------------------
./qemu-system-x86_64 \
-cdrom /home/CD_Images/knoppix77.iso \
# HW Boost ueber die CPU Flags
-accel kvm \
# q35 ist OK duer W7, nicht fuer XP,  pc ist fuer XP gut. q35 ist Stand 
ICH6, etwas moderner Chip, als pc-i440fx-2.1 Boards (der legendaere 
HX-Chipsatz fuer 5/486?)
-machine q35 \
# die Vorbereitung um HW durchzureichen, sofern die HW, das Bios, die 
CPU (vt-d) dies unterstuetzt
-device intel-iommu \
# Sound hda ist im Allg. gut, ac97 fuer xp
-soundhw hda \
-smp cpus=4 \
# Tastatur
-k de \
-enable-fips \
-usb \
# ist sehr empfehlenswerf, Mauseinstellung
-device usb-tablet \
# das ist nur ein test, hier reiche ich einen BT Stick in die VM durch, 
kommt an.
-device usb-host,hostbus=4,hostaddr=5 \
# Speicher
-m 4096 \
# ... Netzwerk um auf dem Host per umgeleitetem Port ssh auf den guest 
zu ermoeglichen
# also ssh -p 7777 benutzer at localhost kommt im guest an, sofern ssh 
vorhanden.
-device e1000,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::7777-:22 \
# ... Netzwerk LAN
-device virtio-net-pci,netdev=network0,mac=52:55:00:d1:55:01 \
-netdev tap,id=network0,ifname=tap0,script=no,downscript=no \
# Boot CDROM, c ist HD, n ist Netzwerk oder menu
-boot d \
# Boost beim Zugriff auf die festplatten, nicht fuer LVM tauglich, nur 
fuer file-based-HD
-object iothread,id=io1 \
-device virtio-blk-pci,drive=disk0,iothread=io1 \
# das ist die virt. HD
-drive 
if=none,id=disk0,cache=writeback,format=raw,aio=threads,file=/media/sdb1/tmp/W7Pvirtio 
\
# VNC 5901
-vnc :1 \
# Monitor fuer qemu, die naechsten drei Zeilen
# monitor kann per telnet/unix-socket als auch mit qmp(JSON, wer es 
kann) erfolgen.
-monitor telnet::55555,server,nowait -serial mon:stdio \
-chardev socket,id=monitor,path=./monitor.sock,server,nowait \
-monitor chardev:monitor \
# spice *ohne* Passwort
-spice port=5902,disable-ticketing \
# Speichertreiber
-device virtio-balloon \
# Videokarte, koennte auch -vga qxl sein
# -vga none -device qxl-vga,vgamem_mb=32 ginge auch
# aber auch -device virtio-vga,max_outputs=2
-vga virtio

------------------------------------------------------------------------------------------------------------------

Resultat/extract:

Sicher, es ist im ersten Entwurf *nicht* einfacher; aber es ist nativ 
und mit paar Parametern auf der cli kann man eine virt. Einheit starten, 
wenn man die Syntax der cli genauer angeschaut hat. Es ist 
beeindruckend, was qemu kann. Viele Schichten (auch virsh) isolieren die 
Vielfalt qemus auf der cli (und bringen mehr mit, einfacher?)

@Anmerkung zu meinem eisx64
Auf meiner Einheit sind andere Pakete integriert/installiert, die andere 
libs erforderten z.B. libdnet fuer snorf, suricata, libsodium fuer 
ntop/ng etc. Evtl. deswegen lief configure sauber durch(?). Nur 
pixman-dev musste ich nachziehen.

Das ist jedoch auf jeder anderen eisx64 Einheit ebenso moeglich. Wenn 
configure moniert, dass ihm diese und jene Abhaengigkeit fehle, aus dem 
Inet holen, kompilieren, configure/make+install etc.

Beeindruckend war, dass so wenige Fehler (config.log) in einer Stunde 
(s.o. 1h6min) gemeldet wurden, die Log ist gerade mal 165k gewesen. 
libmicrohttpd-0.9.69 (fuer motion benoetigt) hat ca. 167k. Die Fehler 
habe ich versucht alle rueckzuverfolgen; manche Fehler sind, weil die 
Plattform nicht passt und voellig was anderes gesucht wurde, was nicht 
alltaeglich ist.

Akt. ist die config.log 192792 gross. Darin sind elf Vorfaelle, die ich 
alle im Detail geklaert habe, s.o. teilweise systemd, teilweise 
scheiterte es an statischen libs oder teilweise ist/hat der akt Kernel 
nicht diese Headerdateien *.h (z.B. endian, vm_sockets, kcov). Oder 
valgrind, die Umgebung zum Debuggen wird moniert, ich brauchte, brauche 
es nicht/nie, ;-)

qnio_api.h fuehrt zu
	libvxhs is a storage connector library for accessing vdisks on Veritas 
HyperScale storage.

Oder rbd/librbd.h fuehrt zu ceph.io, RADOS-Devices, Rados Block Device 
(rbd).

brlapi.h hingegen fuehrt zu
https://github.com/brltty/brltty/blob/master/Programs/brlapi.h.in
BRLTTY is a background process (daemon) providing access to the Linux/Unix
console (when in text mode) for a blind person using a refreshable braille
display
Dies konnte ich erfolgreich integrieren.

xenctrl.h kommt mit xen, ohne die tools konnte ich xen (fast) 
kompilieren, doch xen liess sich wg. segm. fault nicht ausgefuehrt. 
Leider war hier der Lauf nur ohne die Tools moeglich, da Python.h 
moniert wird, obwohl eine im System vorlag. Keine Ahnung, wie ich das 
haette aufloesen koennen. Doch, xen wollte ich auch nicht. :-) qemu. sic.
xenctrl ist auch dafuer, dass man mit qemu xen steuern kann.

Aber, leider auch, dass z.B. random.h nicht gefunden wurde, obwohl diese 
vorhanden war, ein ln -s brachte hier die Loesung.

Sprich, am Ende funkt es. Es ist natives qemu (mit kvm), und bringt 
alles mit, was man braucht.
q.e.d. ;-)
sapere aude.

Danke @eis-Team fuer die Basis.

Gruss
Oezbilen

#######################################################
-------------------------------------------------------------------------------------------------------------
#######################################################

Parameter der bin:

QEMU emulator version 4.2.50 (v4.2.0-1209-gf31160c7d1)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
usage: qemu-system-x86_64 [options] [disk_image]

'disk_image' is a raw hard disk image for IDE hard disk 0

Standard options:
-h or -help     display this help and exit
-version        display version information and exit
-machine [type=]name[,prop[=value][,...]]
                 selects emulated machine ('-machine help' for list)
                 property accel=accel1[:accel2[:...]] selects accelerator
                 supported accelerators are kvm, xen, hax, hvf, whpx or 
tcg (default: tcg)
                 vmport=on|off|auto controls emulation of vmport 
(default: auto)
                 dump-guest-core=on|off include guest memory in a core 
dump (default=on)
                 mem-merge=on|off controls memory merge support 
(default: on)
                 aes-key-wrap=on|off controls support for AES key 
wrapping (default=on)
                 dea-key-wrap=on|off controls support for DEA key 
wrapping (default=on)
                 suppress-vmdesc=on|off disables self-describing 
migration (default=off)
                 nvdimm=on|off controls NVDIMM support (default=off)
                 enforce-config-section=on|off enforce configuration 
section migration (default=off)
                 memory-encryption=@var{} memory encryption object to 
use (default=none)
                 hmat=on|off controls ACPI HMAT support (default=off)
-cpu cpu        select CPU ('-cpu help' for list)
-accel [accel=]accelerator[,prop[=value][,...]]
                 select accelerator (kvm, xen, hax, hvf, whpx or tcg; 
use 'help' for a list)
                 igd-passthru=on|off (enable Xen integrated Intel 
graphics passthrough, default=off)
                 kernel-irqchip=on|off|split controls accelerated 
irqchip support (default=on)
                 kvm-shadow-mem=size of KVM shadow MMU in bytes
                 tb-size=n (TCG translation block cache size)
                 thread=single|multi (enable multi-threaded TCG)
-smp 
[cpus=]n[,maxcpus=cpus][,cores=cores][,threads=threads][,dies=dies][,sockets=sockets]
                 set the number of CPUs to 'n' [default=1]
                 maxcpus= maximum number of total cpus, including
                 offline CPUs for hotplug, etc
                 cores= number of CPU cores on one socket (for PC, it's 
on one die)
                 threads= number of threads on one CPU core
                 dies= number of CPU dies on one socket (for PC only)
                 sockets= number of discrete sockets in the system
-numa 
node[,mem=size][,cpus=firstcpu[-lastcpu]][,nodeid=node][,initiator=node]
-numa 
node[,memdev=id][,cpus=firstcpu[-lastcpu]][,nodeid=node][,initiator=node]
-numa dist,src=source,dst=destination,val=distance
-numa cpu,node-id=node[,socket-id=x][,core-id=y][,thread-id=z]
-numa 
hmat-lb,initiator=node,target=node,hierarchy=memory|first-level|second-level|third-level,data-type=access-latency|read-latency|write-latency[,latency=lat][,bandwidth=bw]
-numa 
hmat-cache,node-id=node,size=size,level=level[,associativity=none|direct|complex][,policy=none|write-back|write-through][,line=size]
-add-fd fd=fd,set=set[,opaque=opaque]
                 Add 'fd' to fd 'set'
-set group.id.arg=value
                 set <arg> parameter for item <id> of type <group>
                 i.e. -set drive.$id.file=/path/to/image
-global driver.property=value
-global driver=driver,property=property,value=value
                 set a global default for a driver property
-boot [order=drives][,once=drives][,menu=on|off]

[,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
                 'drives': floppy (a), hard disk (c), CD-ROM (d), 
network (n)
                 'sp_name': the file's name that would be passed to bios 
as logo picture, if menu=on
                 'sp_time': the period that splash picture last if 
menu=on, unit is ms
                 'rb_timeout': the timeout before guest reboot when boot 
failed, unit is ms
-m [size=]megs[,slots=n,maxmem=size]
                 configure guest RAM
                 size: initial amount of guest memory
                 slots: number of hotplug slots (default: none)
                 maxmem: maximum amount of guest memory (default: none)
NOTE: Some architectures might enforce a specific granularity
-mem-path FILE  provide backing storage for guest RAM
-mem-prealloc   preallocate guest memory (use with -mem-path)
-k language     use keyboard layout (for example 'fr' for French)
-audio-help     show -audiodev equivalent of the currently specified 
audio settings
-audiodev [driver=]driver,id=id[,prop[=value][,...]]
                 specifies the audio backend to use
                 id= identifier of the backend
                 timer-period= timer period in microseconds
                 in|out.mixing-engine= use mixing engine to mix streams 
inside QEMU
                 in|out.fixed-settings= use fixed settings for host audio
                 in|out.frequency= frequency to use with fixed settings
                 in|out.channels= number of channels to use with fixed 
settings
                 in|out.format= sample format to use with fixed settings
                 valid values: s8, s16, s32, u8, u16, u32
                 in|out.voices= number of voices to use
                 in|out.buffer-length= length of buffer in microseconds
-audiodev none,id=id,[,prop[=value][,...]]
                 dummy driver that discards all output
-audiodev oss,id=id[,prop[=value][,...]]
                 in|out.dev= path of the audio device to use
                 in|out.buffer-count= number of buffers
                 in|out.try-poll= attempt to use poll mode
                 try-mmap= try using memory mapped access
                 exclusive= open device in exclusive mode
                 dsp-policy= set timing policy (0..10), -1 to use 
fragment mode
-audiodev wav,id=id[,prop[=value][,...]]
                 path= path of wav file to record
-soundhw c1,... enable audio support
                 and only specified sound cards (comma separated list)
                 use '-soundhw help' to get the list of supported cards
                 use '-soundhw all' to enable all of them
-device driver[,prop[=value][,...]]
                 add device (based on driver)
                 prop=value,... sets driver properties
                 use '-device help' to print all possible drivers
                 use '-device driver,help' to print all possible properties
-name string1[,process=string2][,debug-threads=on|off]
                 set the name of the guest
                 string1 sets the window title and string2 the process name
                 When debug-threads is enabled, individual threads are 
given a separate name
                 NOTE: The thread names are for debugging and not a 
stable API.
-uuid %08x-%04x-%04x-%04x-%012x
                 specify machine UUID

Block device options:
-fda/-fdb file  use 'file' as floppy disk 0/1 image
-hda/-hdb file  use 'file' as IDE hard disk 0/1 image
-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
-blockdev [driver=]driver[,node-name=N][,discard=ignore|unmap]
           [,cache.direct=on|off][,cache.no-flush=on|off]
           [,read-only=on|off][,auto-read-only=on|off]
           [,force-share=on|off][,detect-zeroes=on|off|unmap]
           [,driver specific parameters...]
                 configure a block backend
-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
        [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]
        [,snapshot=on|off][,rerror=ignore|stop|report]
        [,werror=ignore|stop|report|enospc][,id=name][,aio=threads|native]
        [,readonly=on|off][,copy-on-read=on|off]
        [,discard=ignore|unmap][,detect-zeroes=on|off|unmap]
        [[,bps=b]|[[,bps_rd=r][,bps_wr=w]]]
        [[,iops=i]|[[,iops_rd=r][,iops_wr=w]]]
        [[,bps_max=bm]|[[,bps_rd_max=rm][,bps_wr_max=wm]]]
        [[,iops_max=im]|[[,iops_rd_max=irm][,iops_wr_max=iwm]]]
        [[,iops_size=is]]
        [[,group=g]]
                 use 'file' as a drive image
-mtdblock file  use 'file' as on-board Flash memory image
-sd file        use 'file' as SecureDigital card image
-pflash file    use 'file' as a parallel flash image
-snapshot       write to temporary files instead of disk image files
-fsdev 
local,id=id,path=path,security_model=mapped-xattr|mapped-file|passthrough|none
  [,writeout=immediate][,readonly][,fmode=fmode][,dmode=dmode]

[[,throttling.bps-total=b]|[[,throttling.bps-read=r][,throttling.bps-write=w]]]

[[,throttling.iops-total=i]|[[,throttling.iops-read=r][,throttling.iops-write=w]]]

[[,throttling.bps-total-max=bm]|[[,throttling.bps-read-max=rm][,throttling.bps-write-max=wm]]]

[[,throttling.iops-total-max=im]|[[,throttling.iops-read-max=irm][,throttling.iops-write-max=iwm]]]
  [[,throttling.iops-size=is]]
-fsdev proxy,id=id,socket=socket[,writeout=immediate][,readonly]
-fsdev proxy,id=id,sock_fd=sock_fd[,writeout=immediate][,readonly]
-fsdev synth,id=id
-virtfs 
local,path=path,mount_tag=tag,security_model=mapped-xattr|mapped-file|passthrough|none

[,id=id][,writeout=immediate][,readonly][,fmode=fmode][,dmode=dmode][,multidevs=remap|forbid|warn]
-virtfs 
proxy,mount_tag=tag,socket=socket[,id=id][,writeout=immediate][,readonly]
-virtfs 
proxy,mount_tag=tag,sock_fd=sock_fd[,id=id][,writeout=immediate][,readonly]
-virtfs synth,mount_tag=tag[,id=id][,readonly]
-iscsi [user=user][,password=password]
        [,header-digest=CRC32C|CR32C-NONE|NONE-CRC32C|NONE
        [,initiator-name=initiator-iqn][,id=target-iqn]
        [,timeout=timeout]
                 iSCSI session parameters

USB options:
-usb            enable on-board USB host controller (if not enabled by 
default)
-usbdevice name add the host or guest USB device 'name'

Display options:
-display vnc=<display>[,<optargs>]
-display curses[,charset=<encoding>]
-display none
                 select display backend type
                 The default display is equivalent to
                 "-vnc localhost:0,to=99,id=default"
-nographic      disable graphical output and redirect serial I/Os to console
-curses         shorthand for -display curses
-alt-grab       use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
-ctrl-grab      use Right-Ctrl to grab mouse (instead of Ctrl-Alt)
-no-quit        disable SDL window close capability
-sdl            shorthand for -display sdl
-spice [port=port][,tls-port=secured-port][,x509-dir=<dir>]
        [,x509-key-file=<file>][,x509-key-password=<file>]
        [,x509-cert-file=<file>][,x509-cacert-file=<file>]
        [,x509-dh-key-file=<file>][,addr=addr][,ipv4|ipv6|unix]
        [,tls-ciphers=<list>]
        [,tls-channel=[main|display|cursor|inputs|record|playback]]
        [,plaintext-channel=[main|display|cursor|inputs|record|playback]]
        [,sasl][,password=<secret>][,disable-ticketing]
        [,image-compression=[auto_glz|auto_lz|quic|glz|lz|off]]
        [,jpeg-wan-compression=[auto|never|always]]
        [,zlib-glz-wan-compression=[auto|never|always]]
        [,streaming-video=[off|all|filter]][,disable-copy-paste]
        [,disable-agent-file-xfer][,agent-mouse=[on|off]]
        [,playback-compression=[on|off]][,seamless-migration=[on|off]]
        [,gl=[on|off]][,rendernode=<file>]
    enable spice
    at least one of {port, tls-port} is mandatory
-portrait       rotate graphical output 90 deg left (only PXA LCD)
-rotate <deg>   rotate graphical output some deg left (only PXA LCD)
-vga [std|cirrus|vmware|qxl|xenfb|tcx|cg3|virtio|none]
                 select video card type
-full-screen    start in full screen
-vnc <display>  shorthand for -display vnc=<display>

i386 target only:
-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug
-no-fd-bootchk  disable boot signature checking for floppy disks
-no-acpi        disable ACPI
-no-hpet        disable HPET
-acpitable 
[sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,{data|file}=file1[:file2]...]
                 ACPI table description
-smbios file=binary
                 load SMBIOS entry from binary file
-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]
               [,uefi=on|off]
                 specify SMBIOS type 0 fields
-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]
               [,uuid=uuid][,sku=str][,family=str]
                 specify SMBIOS type 1 fields
-smbios type=2[,manufacturer=str][,product=str][,version=str][,serial=str]
               [,asset=str][,location=str]
                 specify SMBIOS type 2 fields
-smbios type=3[,manufacturer=str][,version=str][,serial=str][,asset=str]
               [,sku=str]
                 specify SMBIOS type 3 fields
-smbios type=4[,sock_pfx=str][,manufacturer=str][,version=str][,serial=str]
               [,asset=str][,part=str]
                 specify SMBIOS type 4 fields
-smbios type=17[,loc_pfx=str][,bank=str][,manufacturer=str][,serial=str]
                [,asset=str][,part=str][,speed=%d]
                 specify SMBIOS type 17 fields

Network options:
-netdev user,id=str[,ipv4[=on|off]][,net=addr[/mask]][,host=addr]
          [,ipv6[=on|off]][,ipv6-net=addr[/int]][,ipv6-host=addr]
          [,restrict=on|off][,hostname=host][,dhcpstart=addr]
          [,dns=addr][,ipv6-dns=addr][,dnssearch=domain][,domainname=domain]

[,tftp=dir][,tftp-server-name=name][,bootfile=f][,hostfwd=rule][,guestfwd=rule][,smb=dir[,smbserver=addr]]
                 configure a user mode network backend with ID 'str',
                 its DHCP server and optional services
-netdev 
tap,id=str[,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]

[,br=bridge][,helper=helper][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off]
          [,vhostfd=h][,vhostfds=x:y:...:z][,vhostforce=on|off][,queues=n]
          [,poll-us=n]
                 configure a host TAP network backend with ID 'str'
                 connected to a bridge (default=br0)
                 use network scripts 'file' (default=/etc/qemu-ifup)
                 to configure it and 'dfile' (default=/etc/qemu-ifdown)
                 to deconfigure it
                 use '[down]script=no' to disable script execution
                 use network helper 'helper' 
(default=/usr/local/libexec/qemu-bridge-helper) to
                 configure it
                 use 'fd=h' to connect to an already opened TAP interface
                 use 'fds=x:y:...:z' to connect to already opened 
multiqueue capable TAP interfaces
                 use 'sndbuf=nbytes' to limit the size of the send 
buffer (the
                 default is disabled 'sndbuf=0' to enable flow control 
set 'sndbuf=1048576')
                 use vnet_hdr=off to avoid enabling the IFF_VNET_HDR tap 
flag
                 use vnet_hdr=on to make the lack of IFF_VNET_HDR 
support an error condition
                 use vhost=on to enable experimental in kernel accelerator
                     (only has effect for virtio guests which use MSIX)
                 use vhostforce=on to force vhost on for non-MSIX virtio 
guests
                 use 'vhostfd=h' to connect to an already opened vhost 
net device
                 use 'vhostfds=x:y:...:z to connect to multiple already 
opened vhost net devices
                 use 'queues=n' to specify the number of queues to be 
created for multiqueue TAP
                 use 'poll-us=n' to speciy the maximum number of 
microseconds that could be
                 spent on busy polling for vhost net
-netdev bridge,id=str[,br=bridge][,helper=helper]
                 configure a host TAP network backend with ID 'str' that is
                 connected to a bridge (default=br0)
                 using the program 'helper 
(default=/usr/local/libexec/qemu-bridge-helper)
-netdev 
l2tpv3,id=str,src=srcaddr,dst=dstaddr[,srcport=srcport][,dstport=dstport]

[,rxsession=rxsession],txsession=txsession[,ipv6=on/off][,udp=on/off]
          [,cookie64=on/off][,counter][,pincounter][,txcookie=txcookie]
          [,rxcookie=rxcookie][,offset=offset]
                 configure a network backend with ID 'str' connected to
                 an Ethernet over L2TPv3 pseudowire.
                 Linux kernel 3.3+ as well as most routers can talk
                 L2TPv3. This transport allows connecting a VM to a VM,
                 VM to a router and even VM to Host. It is a 
nearly-universal
                 standard (RFC3391). Note - this implementation uses static
                 pre-configured tunnels (same as the Linux kernel).
                 use 'src=' to specify source address
                 use 'dst=' to specify destination address
                 use 'udp=on' to specify udp encapsulation
                 use 'srcport=' to specify source udp port
                 use 'dstport=' to specify destination udp port
                 use 'ipv6=on' to force v6
                 L2TPv3 uses cookies to prevent misconfiguration as
                 well as a weak security measure
                 use 'rxcookie=0x012345678' to specify a rxcookie
                 use 'txcookie=0x012345678' to specify a txcookie
                 use 'cookie64=on' to set cookie size to 64 bit, 
otherwise 32
                 use 'counter=off' to force a 'cut-down' L2TPv3 with no 
counter
                 use 'pincounter=on' to work around broken counter 
handling in peer
                 use 'offset=X' to add an extra offset between header 
and data
-netdev socket,id=str[,fd=h][,listen=[host]:port][,connect=host:port]
                 configure a network backend to connect to another network
                 using a socket connection
-netdev socket,id=str[,fd=h][,mcast=maddr:port[,localaddr=addr]]
                 configure a network backend to connect to a multicast 
maddr and port
                 use 'localaddr=addr' to specify the host address to 
send packets from
-netdev socket,id=str[,fd=h][,udp=host:port][,localaddr=host:port]
                 configure a network backend to connect to another network
                 using an UDP tunnel
-netdev vhost-user,id=str,chardev=dev[,vhostforce=on|off]
                 configure a vhost-user network, backed by a chardev 'dev'
-netdev hubport,id=str,hubid=n[,netdev=nd]
                 configure a hub port on the hub with ID 'n'
-nic [tap|bridge|user|l2tpv3|vhost-user|socket][,option][,...][mac=macaddr]
                 initialize an on-board / default host NIC (using MAC 
address
                 macaddr) and connect it to the given host network backend
-nic none       use it alone to have zero network devices (the default is to
                 provided a 'user' network connection)
-net nic[,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
                 configure or create an on-board (or machine default) 
NIC and
                 connect it to hub 0 (please use -nic unless you need a hub)
-net [user|tap|bridge|socket][,option][,option][,...]
                 old way to initialize a host network interface
                 (use the -netdev option if possible instead)

Character device options:
-chardev help
-chardev null,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]
-chardev 
socket,id=id[,host=host],port=port[,to=to][,ipv4][,ipv6][,nodelay][,reconnect=seconds]

[,server][,nowait][,telnet][,websocket][,reconnect=seconds][,mux=on|off]

[,logfile=PATH][,logappend=on|off][,tls-creds=ID][,tls-authz=ID] (tcp)
-chardev 
socket,id=id,path=path[,server][,nowait][,telnet][,websocket][,reconnect=seconds]
          [,mux=on|off][,logfile=PATH][,logappend=on|off] (unix)
-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]
          [,localport=localport][,ipv4][,ipv6][,mux=on|off]
          [,logfile=PATH][,logappend=on|off]
-chardev msmouse,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]
-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]
          [,mux=on|off][,logfile=PATH][,logappend=on|off]
-chardev ringbuf,id=id[,size=size][,logfile=PATH][,logappend=on|off]
-chardev file,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]
-chardev pipe,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]
-chardev pty,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]
-chardev 
stdio,id=id[,mux=on|off][,signal=on|off][,logfile=PATH][,logappend=on|off]
-chardev 
serial,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]
-chardev tty,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]
-chardev 
parallel,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]
-chardev 
parport,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]

TPM device options:
-tpmdev passthrough,id=id[,path=path][,cancel-path=path]
                 use path to provide path to a character device; default 
is /dev/tpm0
                 use cancel-path to provide path to TPM's cancel sysfs 
entry; if
                 not provided it will be searched for in 
/sys/class/misc/tpm?/device
-tpmdev emulator,id=id,chardev=dev
                 configure the TPM device using chardev backend

Linux/Multiboot boot specific:
-kernel bzImage use 'bzImage' as kernel image
-append cmdline use 'cmdline' as kernel command line
-initrd file    use 'file' as initial ram disk
-dtb    file    use 'file' as device tree image

Debug/Expert options:
-fw_cfg [name=]<name>,file=<file>
                 add named fw_cfg entry with contents from file
-fw_cfg [name=]<name>,string=<str>
                 add named fw_cfg entry with contents from string
-serial dev     redirect the serial port to char device 'dev'
-parallel dev   redirect the parallel port to char device 'dev'
-monitor dev    redirect the monitor to char device 'dev'
-qmp dev        like -monitor but opens in 'control' mode
-qmp-pretty dev like -qmp but uses pretty JSON formatting
-mon [chardev=]name[,mode=readline|control][,pretty[=on|off]]
-debugcon dev   redirect the debug console to char device 'dev'
-pidfile file   write PID to 'file'
-singlestep     always run in singlestep mode
--preconfig     pause QEMU before machine is initialized (experimental)
-S              freeze CPU at startup (use 'c' to start execution)
-realtime [mlock=on|off]
                 run qemu with realtime features
                 mlock=on|off controls mlock support (default: on)
-overcommit [mem-lock=on|off][cpu-pm=on|off]
                 run qemu with overcommit hints
                 mem-lock=on|off controls memory lock support (default: off)
                 cpu-pm=on|off controls cpu power management (default: off)
-gdb dev        wait for gdb connection on 'dev'
-s              shorthand for -gdb tcp::1234
-d item1,...    enable logging of specified items (use '-d help' for a 
list of log items)
-D logfile      output log to logfile (default stderr)
-dfilter range,..  filter debug output to range of addresses (useful for 
-d cpu,exec,etc..)
-seed number       seed the pseudo-random number generator
-L path         set the directory for the BIOS, VGA BIOS and keymaps
-bios file      set the filename for the BIOS
-enable-kvm     enable KVM full virtualization support
-xen-domid id   specify xen guest domain id
-xen-attach     attach to existing xen domain
                 libxl will use this when starting QEMU
-xen-domid-restrict     restrict set of available xen operations
                         to specified domain id. (Does not affect
                         xenpv machine type).
-no-reboot      exit instead of rebooting
-no-shutdown    stop before shutdown
-loadvm [tag|id]
                 start right away with a saved state (loadvm in monitor)
-daemonize      daemonize QEMU after initializing
-option-rom rom load a file, rom, into the option ROM space
-rtc [base=utc|localtime|<datetime>][,clock=host|rt|vm][,driftfix=none|slew]
                 set the RTC base and clock, enable drift fix for clock 
ticks (x86 only)
-icount 
[shift=N|auto][,align=on|off][,sleep=on|off,rr=record|replay,rrfile=<filename>,rrsnapshot=<snapshot>]
                 enable virtual instruction counter with 2^N clock ticks per
                 instruction, enable aligning the host and virtual clocks
                 or disable real time cpu sleeping
-watchdog model
                 enable virtual hardware watchdog [default=none]
-watchdog-action reset|shutdown|poweroff|inject-nmi|pause|debug|none
                 action when watchdog fires [default=reset]
-echr chr       set terminal escape character instead of ctrl-a
-show-cursor    show cursor
-tb-size n      set TB size
-incoming tcp:[host]:port[,to=maxport][,ipv4][,ipv6]
-incoming rdma:host:port[,ipv4][,ipv6]
-incoming unix:socketpath
                 prepare for incoming migration, listen on
                 specified protocol and socket address
-incoming fd:fd
-incoming exec:cmdline
                 accept incoming migration on given file descriptor
                 or from given external command
-incoming defer
                 wait for the URI to be specified via migrate_incoming
-only-migratable     allow only migratable devices
-nodefaults     don't create default devices
-chroot dir     chroot to dir just before starting the VM
-runas user     change to user id user just before starting the VM
                 user can be numeric uid:gid instead
-sandbox on[,obsolete=allow|deny][,elevateprivileges=allow|deny|children]
           [,spawn=allow|deny][,resourcecontrol=allow|deny]
                 Enable seccomp mode 2 system call filter (default 'off').
                 use 'obsolete' to allow obsolete system calls that are 
provided
                     by the kernel, but typically no longer used by modern
                     C library implementations.
                 use 'elevateprivileges' to allow or deny QEMU process 
to elevate
                     its privileges by blacklisting all set*uid|gid 
system calls.
                     The value 'children' will deny set*uid|gid system 
calls for
                     main QEMU process but will allow forks and execves 
to run unprivileged
                 use 'spawn' to avoid QEMU to spawn new threads or 
processes by
                      blacklisting *fork and execve
                 use 'resourcecontrol' to disable process affinity and 
schedular priority
-readconfig <file>
-writeconfig <file>
                 read/write config file
-no-user-config
                 do not load default user-provided config files at startup
-trace [[enable=]<pattern>][,events=<file>][,file=<file>]
                 specify tracing options
-plugin [file=]<file>[,arg=<string>]
                 load a plugin
-enable-fips    enable FIPS 140-2 compliance
-msg timestamp[=on|off]
                 control error message format
                 timestamp=on enables timestamps (default: off)
-dump-vmstate <file>
                 Output vmstate information in JSON format to file.
                 Use the scripts/vmstate-static-checker.py file to
                 check for possible regressions in migration code
                 by comparing two such vmstate dumps.
-enable-sync-profile
                 enable synchronization profiling

Generic object creation:
-object TYPENAME[,PROP1=VALUE1,...]
                 create a new object of type TYPENAME setting properties
                 in the order they are specified.  Note that the 'id'
                 property must be set.  These objects are placed in the
                 '/objects' path.

During emulation, the following keys are useful:
ctrl-alt-f      toggle full screen
ctrl-alt-n      switch to virtual console 'n'
ctrl-alt        toggle mouse and keyboard grab

When using -nographic, press 'ctrl-a h' to get some help.

See <https://qemu.org/contribute/report-a-bug> for how to report bugs.
More information on the QEMU project at <https://qemu.org>.
#######################################################
Ende des Beitrages. :-)


Mehr Informationen über die Mailingliste Eisfair