<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://leste.maemo.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kgoetz</id>
	<title>Maemo Leste Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://leste.maemo.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kgoetz"/>
	<link rel="alternate" type="text/html" href="https://leste.maemo.org/Special:Contributions/Kgoetz"/>
	<updated>2026-06-05T11:26:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://leste.maemo.org/index.php?title=Virtual_Machine&amp;diff=910</id>
		<title>Virtual Machine</title>
		<link rel="alternate" type="text/html" href="https://leste.maemo.org/index.php?title=Virtual_Machine&amp;diff=910"/>
		<updated>2021-01-06T10:26:59Z</updated>

		<summary type="html">&lt;p&gt;Kgoetz: expand on virt manager&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Device&lt;br /&gt;
|image=&lt;br /&gt;
|manufacturer=Generic&lt;br /&gt;
|codename=&lt;br /&gt;
|dimensions=&lt;br /&gt;
|release_date=&lt;br /&gt;
|soc=&lt;br /&gt;
|dram=&lt;br /&gt;
|power=&lt;br /&gt;
|lcd=&lt;br /&gt;
|video=&lt;br /&gt;
|audio=&lt;br /&gt;
|network=&lt;br /&gt;
|storage=&lt;br /&gt;
|usb=&lt;br /&gt;
|camera=&lt;br /&gt;
|sensors=&lt;br /&gt;
|other=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Generic virtual machine target. This is particularly useful when doing development and testing.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
https://maedevu.maemo.org/images/virtual-machines/&lt;br /&gt;
&lt;br /&gt;
There are three different types of images: VirtualBox (.box), QEMU (.qcow2, .vdi) and Vagrant. The VirtualBox image may be converted to a VMware VMDK image which has been reported to perform better and have good hardware acceleration.&lt;br /&gt;
Converting the qcow2 image to raw allows it to be used on real hardware.&lt;br /&gt;
&lt;br /&gt;
=== VirtualBox ===&lt;br /&gt;
&lt;br /&gt;
Download latest .vdi.xz image, unpack it with &amp;quot;xz -d&amp;quot; command.&lt;br /&gt;
Create new Virtual Machine, select &amp;quot;Debian (64-bit)&amp;quot; and 1024MB RAM. Use the downloaded file as virtual hard disk.&lt;br /&gt;
You are done!&lt;br /&gt;
&lt;br /&gt;
=== QEMU ===&lt;br /&gt;
&lt;br /&gt;
In general something like:&lt;br /&gt;
  qemu-system-x86_64 -hda maemo-leste-1.0-amd64.qcow2 -enable-kvm -cpu host -smp cores=2 -m 1024 &lt;br /&gt;
should work. But there seem to be issues with some QEMU versions, for more details see [https://github.com/maemo-leste/bugtracker/issues/198 issue#198].&lt;br /&gt;
&lt;br /&gt;
To set up a port forward for SSH, add:&lt;br /&gt;
  -nic user,hostfwd=tcp:127.0.0.1:7722-:22&lt;br /&gt;
And then log in like this (password: &amp;lt;code&amp;gt;toor&amp;lt;/code&amp;gt;):&lt;br /&gt;
  ssh root@localhost -p 7722&lt;br /&gt;
&lt;br /&gt;
If the mouse pointer is grabbed and no cursor shows, you can add:&lt;br /&gt;
  -usb -device usb-tablet&lt;br /&gt;
to the command line. Alternatively if that dose not work you can instead add:&lt;br /&gt;
  -usb -device usb-mouse -machine vmport=off&lt;br /&gt;
&lt;br /&gt;
If you have a USB modem you can also use that in QEMU. You can either use sudo to elevate your privileges to be able to use it:&lt;br /&gt;
  sudo qemu-system-x86_64 -hda maemo-leste-1.0-amd64-virtual-20200324.qcow2 -enable-kvm -cpu host -smp cores=2 -m 1024 \&lt;br /&gt;
  -nic user,hostfwd=tcp:127.0.0.1:7722-:22 \&lt;br /&gt;
  -usb -device usb-ehci,id=ehci \&lt;br /&gt;
  -device usb-host,bus=ehci.0,vendorid=0x0bdb,productid=0x193e&lt;br /&gt;
&lt;br /&gt;
Or you can make a udev rule for your device. For example, with a Lenovo Ericsson N5321 gw you can create &amp;quot;/etc/udev/rules.d/45-n5321.rules&amp;quot; with this in it:&lt;br /&gt;
  # Lenovo Ericsson N5321 gw simple udev rule&lt;br /&gt;
  SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;0bdb&amp;quot;, ATTRS{idProduct}==&amp;quot;193e&amp;quot;, \&lt;br /&gt;
    MODE:=&amp;quot;0666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And then activate it by running these two commands as root:&lt;br /&gt;
  # udevadm control --reload-rules&lt;br /&gt;
  # udevadm trigger&lt;br /&gt;
&lt;br /&gt;
Now you can run QEMU without the need for sudo!&lt;br /&gt;
&lt;br /&gt;
=== virt-manager ===&lt;br /&gt;
&lt;br /&gt;
Virt-manager can use multiple virtualisation backends via libvirt and its default is QEMU/KVM, allowing easy importing of the QEMU image.&lt;br /&gt;
&lt;br /&gt;
The following tweaks need to be done when importing (before starting the instance) to ensure the qemu image works correctly.&lt;br /&gt;
&lt;br /&gt;
 * Change the disk driver from VirtIO to sata; there is an [https://github.com/maemo-leste/bugtracker/issues/291 outstanding bug] with how drives are mounted.&lt;br /&gt;
 * In some situations changing from QVA to VGA may be required (see [https://github.com/maemo-leste/bugtracker/issues/291 the previously linked] issue.&lt;br /&gt;
&lt;br /&gt;
== Initial configuration ==&lt;br /&gt;
&lt;br /&gt;
On the first run you may want to generate ssh host keys and set the timezone. To do so open the &amp;quot;X Terminal&amp;quot; application and run:&lt;br /&gt;
 sudo su -&lt;br /&gt;
 dpkg-reconfigure openssh-server&lt;br /&gt;
 dpkg-reconfigure tzdata&lt;br /&gt;
&lt;br /&gt;
Make the system up-to-date:&lt;br /&gt;
 apt update&lt;br /&gt;
 apt upgrade&lt;br /&gt;
 apt install linux-image-amd64&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
To get networking to work (at least in virtualbox), launch a shell and do &lt;br /&gt;
 sudo ifconfig eth0 up&lt;br /&gt;
 sudo dhclient eth0&lt;br /&gt;
&lt;br /&gt;
== Connectivity ==&lt;br /&gt;
&lt;br /&gt;
If you have a modem exposed to QEMU, you still need to do some steps manually to get connectivity.&lt;br /&gt;
&lt;br /&gt;
First off you need to add the development APT repository to your APT sources:&lt;br /&gt;
 # echo &#039;deb https://maedevu.maemo.org/leste beowulf-devel main contrib non-free&#039; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
Now update and upgrade:&lt;br /&gt;
 # apt update &amp;amp;&amp;amp; apt upgrade&lt;br /&gt;
&lt;br /&gt;
Then you can install these things:&lt;br /&gt;
 # apt install ofono libicd-network-ofono connui-iapsettings-gprs connui-statusbar-cellular connui-home-cellular connui-cellular-settings connui-conndlgs-cellular&lt;br /&gt;
&lt;br /&gt;
We need mdbus2 to manipulate oFono:&lt;br /&gt;
 # wget http://ftp.nl.debian.org/debian/pool/main/m/mdbus/mdbus2_2.3.3-2_amd64.deb&lt;br /&gt;
 # dpkg -i mdbus2_2.3.3-2_amd64.deb&lt;br /&gt;
&lt;br /&gt;
Then we can check if oFono finds our modem:&lt;br /&gt;
 # mdbus2 -s org.ofono&lt;br /&gt;
 /&lt;br /&gt;
 /bluetooth&lt;br /&gt;
 /bluetooth/profile&lt;br /&gt;
 /bluetooth/profile/dun_gw&lt;br /&gt;
 /bluetooth/profile/hfp_ag&lt;br /&gt;
 /bluetooth/profile/hfp_hf&lt;br /&gt;
 /mbm_0&lt;br /&gt;
&lt;br /&gt;
Then can check our mbm_0 modem:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0&lt;br /&gt;
 [METHOD]   org.freedesktop.DBus.Introspectable.Introspect() -&amp;gt; (s:xml)&lt;br /&gt;
 [METHOD]   org.ofono.Modem.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.Modem.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.Modem.PropertyChanged(s:name, v:value)&lt;br /&gt;
&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.Modem.GetProperties&lt;br /&gt;
 ({&#039;Online&#039;: &amp;lt;false&amp;gt;, &#039;Powered&#039;: &amp;lt;false&amp;gt;, &#039;Lockdown&#039;: &amp;lt;false&amp;gt;, &#039;Emergency&#039;: &amp;lt;false&amp;gt;, &#039;SystemPath&#039;: &amp;lt;&#039;/sys/devices/pci0000:00/0000:00:04.0/usb1/1-1&#039;&amp;gt;, &#039;Interfaces&#039;: &amp;lt;@as []&amp;gt;, &#039;Features&#039;: &amp;lt;@as []&amp;gt;, &#039;Type&#039;: &amp;lt;&#039;hardware&#039;&amp;gt;},)&lt;br /&gt;
&lt;br /&gt;
Power on the modem:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.Modem.SetProperty Powered true&lt;br /&gt;
 ()&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.Modem.GetProperties&lt;br /&gt;
 ({&#039;Online&#039;: &amp;lt;false&amp;gt;, &#039;Powered&#039;: &amp;lt;true&amp;gt;, &#039;Lockdown&#039;: &amp;lt;false&amp;gt;, &#039;Emergency&#039;: &amp;lt;false&amp;gt;, &#039;Manufacturer&#039;: &amp;lt;&#039;Lenovo&#039;&amp;gt;, &#039;Model&#039;: &amp;lt;&#039;N5321 gw&#039;&amp;gt;, &#039;Revision&#039;: &amp;lt;&#039;R3C11&#039;&amp;gt;, &#039;Serial&#039;: &amp;lt;&#039;xxxxxxxxxxxx&#039;&amp;gt;, &#039;SystemPath&#039;: &amp;lt;&#039;/sys/devices/pci0000:00/0000:00:04.0/usb1/1-1&#039;&amp;gt;, &#039;Interfaces&#039;: &amp;lt;[&#039;org.ofono.SimManager&#039;]&amp;gt;, &#039;Features&#039;: &amp;lt;[&#039;sim&#039;]&amp;gt;, &#039;Type&#039;: &amp;lt;&#039;hardware&#039;&amp;gt;},)&lt;br /&gt;
&lt;br /&gt;
Check if we need to enter a pin:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.SimManager.GetProperties&lt;br /&gt;
 ({&#039;Present&#039;: &amp;lt;true&amp;gt;, &#039;CardIdentifier&#039;: &amp;lt;&#039;xxxxxx&#039;&amp;gt;, &#039;FixedDialing&#039;: &amp;lt;false&amp;gt;, &#039;BarredDialing&#039;: &amp;lt;false&amp;gt;, &#039;SubscriberNumbers&#039;: &amp;lt;@as []&amp;gt;, &#039;LockedPins&#039;: &amp;lt;[&#039;pin&#039;]&amp;gt;, &#039;PreferredLanguages&#039;: &amp;lt;[&#039;de&#039;, &#039;en&#039;, &#039;fr&#039;]&amp;gt;, &#039;PinRequired&#039;: &amp;lt;&#039;pin&#039;&amp;gt;, &#039;Retries&#039;: &amp;lt;{&#039;pin&#039;: byte 0x03, &#039;pin2&#039;: 0x03, &#039;puk&#039;: 0x0a, &#039;puk2&#039;: 0x0a}&amp;gt;, &#039;CardSlotCount&#039;: &amp;lt;uint32 1&amp;gt;, &#039;ActiveCardSlot&#039;: &amp;lt;uint32 1&amp;gt;},)&lt;br /&gt;
&lt;br /&gt;
If PinRequired is &#039;pin&#039; we need to enter a pin to unlock the sim:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.SimManager.EnterPin pin 1234&lt;br /&gt;
 ()&lt;br /&gt;
&lt;br /&gt;
Then we can bring the modem online:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0 org.ofono.Modem.SetProperty Online true&lt;br /&gt;
 ()&lt;br /&gt;
&lt;br /&gt;
If we now redo the first mdbus2 command on /mbm_0:&lt;br /&gt;
 # mdbus2 -s org.ofono /mbm_0&lt;br /&gt;
 [METHOD]   org.freedesktop.DBus.Introspectable.Introspect() -&amp;gt; (s:xml)&lt;br /&gt;
 [METHOD]   org.ofono.Modem.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.Modem.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.Modem.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.ChangePin(s:type, s:oldpin, s:newpin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.EnterPin(s:type, s:pin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.ResetPin(s:type, s:puk, s:newpin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.LockPin(s:type, s:pin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.UnlockPin(s:type, s:pin) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimManager.GetIcon(y:id) -&amp;gt; (ay:icon)&lt;br /&gt;
 [SIGNAL]   org.ofono.SimManager.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.AllowedAccessPoints.GetAllowedAccessPoints() -&amp;gt; (as:apnlist)&lt;br /&gt;
 [METHOD]   org.ofono.SimAuthentication.GetApplications() -&amp;gt; (a{oa{sv}}:applications)&lt;br /&gt;
 [METHOD]   org.ofono.SimAuthentication.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.SimToolkit.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.SimToolkit.SelectItem(y:item, o:agent) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimToolkit.RegisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SimToolkit.UnregisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.SimToolkit.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.RadioSettings.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.RadioSettings.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.RadioSettings.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.MessageManager.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.MessageManager.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.MessageManager.SendMessage(s:to, s:text) -&amp;gt; (o:path)&lt;br /&gt;
 [METHOD]   org.ofono.MessageManager.GetMessages() -&amp;gt; (a(oa{sv}):messages)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.IncomingMessage(s:message, a{sv}:info)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.ImmediateMessage(s:message, a{sv}:info)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.MessageAdded(o:path, a{sv}:properties)&lt;br /&gt;
 [SIGNAL]   org.ofono.MessageManager.MessageRemoved(o:path)&lt;br /&gt;
 [METHOD]   org.ofono.PushNotification.RegisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.PushNotification.UnregisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SmartMessaging.RegisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SmartMessaging.UnregisterAgent(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SmartMessaging.SendBusinessCard(s:to, ay:card) -&amp;gt; (o:path)&lt;br /&gt;
 [METHOD]   org.ofono.SmartMessaging.SendAppointment(s:to, ay:appointment) -&amp;gt; (o:path)&lt;br /&gt;
 [METHOD]   org.ofono.LocationReporting.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.LocationReporting.Request() -&amp;gt; (h:fd)&lt;br /&gt;
 [METHOD]   org.ofono.LocationReporting.Release() -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.LocationReporting.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.SupplementaryServices.Initiate(s:command) -&amp;gt; (s:result_name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.SupplementaryServices.Respond(s:reply) -&amp;gt; (s:result)&lt;br /&gt;
 [METHOD]   org.ofono.SupplementaryServices.Cancel() -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.SupplementaryServices.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [SIGNAL]   org.ofono.SupplementaryServices.NotificationReceived(s:message)&lt;br /&gt;
 [SIGNAL]   org.ofono.SupplementaryServices.RequestReceived(s:message)&lt;br /&gt;
 [SIGNAL]   org.ofono.SupplementaryServices.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [METHOD]   org.ofono.CellBroadcast.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.CellBroadcast.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.CellBroadcast.PropertyChanged(s:property, v:value)&lt;br /&gt;
 [SIGNAL]   org.ofono.CellBroadcast.IncomingBroadcast(s:message, q:channel)&lt;br /&gt;
 [SIGNAL]   org.ofono.CellBroadcast.EmergencyBroadcast(s:message, a{sv}:dict)&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.SetProperty(s:property, v:value) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.AddContext(s:type) -&amp;gt; (o:path)&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.RemoveContext(o:path) -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.DeactivateAll() -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.GetContexts() -&amp;gt; (a(oa{sv}):contexts_with_properties)&lt;br /&gt;
 [METHOD]   org.ofono.ConnectionManager.ResetContexts() -&amp;gt; ()&lt;br /&gt;
 [SIGNAL]   org.ofono.ConnectionManager.PropertyChanged(s:name, v:value)&lt;br /&gt;
 [SIGNAL]   org.ofono.ConnectionManager.ContextAdded(o:path, a{sv}:properties)&lt;br /&gt;
 [SIGNAL]   org.ofono.ConnectionManager.ContextRemoved(o:path)&lt;br /&gt;
 [METHOD]   org.ofono.NetworkRegistration.GetProperties() -&amp;gt; (a{sv}:properties)&lt;br /&gt;
 [METHOD]   org.ofono.NetworkRegistration.Register() -&amp;gt; ()&lt;br /&gt;
 [METHOD]   org.ofono.NetworkRegistration.GetOperators() -&amp;gt; (a(oa{sv}):operators_with_properties)&lt;br /&gt;
 [METHOD]   org.ofono.NetworkRegistration.Scan() -&amp;gt; (a(oa{sv}):operators_with_properties)&lt;br /&gt;
 [SIGNAL]   org.ofono.NetworkRegistration.PropertyChanged(s:name, v:value)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;/div&gt;</summary>
		<author><name>Kgoetz</name></author>
	</entry>
</feed>