$ sudo qemu-system-x86_64 -machine none -S -nographic -monitor stdio -serial null
QEMU 3.1.0 monitor - type 'help' for more information
(qemu) info version
3.1.0Debian 1:3.1+dfsg-2ubuntu3.7~cloud1
2. Run "apt install --reinstall" so the prerm scripts copy the modules from /usr/lib/x86_64-linux-gnu/qemu/ to /var/run/qemu/$VERSION
** Note: if /run is mounted as noexec, step 4 will fail with the following message:
(qemu) drive_add 0 readonly=on,file=http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/mini.iso
Failed to initialize module: /usr/lib/x86_64-linux-gnu/qemu/block-curl.so
Note: only modules from the same build can be loaded.
Failed to open module: /var/run/qemu/_Debian_1_2.11+dfsg-1ubuntu7.25_/block-curl.so: failed to map segment from shared object
Unknown protocol 'http'
This affects all fixed releases (B/E+), and the workaround is to remount the /run fs without noexec (sudo mount -o remount,exec /run)
=== Verification ===
1. Start qemu using the proposed package:
$ sudo qemu-system-x86_64 -machine none -S -nographic -monitor stdio -serial null 2ubuntu3. 7~cloud1
QEMU 3.1.0 monitor - type 'help' for more information
(qemu) info version
3.1.0Debian 1:3.1+dfsg-
2. Run "apt install --reinstall" so the prerm scripts copy the modules from /usr/lib/ x86_64- linux-gnu/ qemu/ to /var/run/ qemu/$VERSION
$ md5sum /var/run/ qemu/Debian_ 1_3.1+dfsg- 2ubuntu3. 7~cloud1/ block-curl. so /usr/lib/ x86_64- linux-gnu/ qemu/block- curl.so 3845fd3defbf687 9c /var/run/ qemu/Debian_ 1_3.1+dfsg- 2ubuntu3. 7~cloud1/ block-curl. so 3845fd3defbf687 9c /usr/lib/ x86_64- linux-gnu/ qemu/block- curl.so
9424706c3ea3f1b
9424706c3ea3f1b
3. Remove the module from /usr/lib/ x86_64- linux-gnu/ qemu/
$ sudo rm /usr/lib/ x86_64- linux-gnu/ qemu/block- curl.so x86_64- linux-gnu/ qemu/block- curl.so x86_64- linux-gnu/ qemu/block- curl.so' : No such file or directory
$ ll /usr/lib/
ls: cannot access '/usr/lib/
4. Add a curl device so it pulls the module
(qemu) drive_add 0 readonly=on,file=http:// archive. ubuntu. com/ubuntu/ dists/bionic/ main/installer- amd64/current/ images/ netboot/ mini.iso
OK
5. Confirm it's falling back to /var/run/ qemu/$VERSION when /usr/lib/ x86_64- linux-gnu/ qemu/ does not work
$ pidof qemu-system-x86_64; sudo cat /proc/$(pidof qemu-system- x86_64) /maps | grep -e curl 7fad1eead000 r-xp 00000000 08:02 3937904 /usr/lib/ x86_64- linux-gnu/ libcurl- gnutls. so.4.5. 0 7fad1f0ac000 ---p 0007a000 08:02 3937904 /usr/lib/ x86_64- linux-gnu/ libcurl- gnutls. so.4.5. 0 7fad1f0af000 r--p 00079000 08:02 3937904 /usr/lib/ x86_64- linux-gnu/ libcurl- gnutls. so.4.5. 0 7fad1f0b0000 rw-p 0007c000 08:02 3937904 /usr/lib/ x86_64- linux-gnu/ libcurl- gnutls. so.4.5. 0 7fad1f0b5000 r-xp 00000000 00:16 993 /run/qemu/ Debian_ 1_3.1+dfsg- 2ubuntu3. 7~cloud1/ block-curl. so 7fad1f2b4000 ---p 00005000 00:16 993 /run/qemu/ Debian_ 1_3.1+dfsg- 2ubuntu3. 7~cloud1/ block-curl. so 7fad1f2b5000 r--p 00004000 00:16 993 /run/qemu/ Debian_ 1_3.1+dfsg- 2ubuntu3. 7~cloud1/ block-curl. so 7fad1f2b6000 rw-p 00005000 00:16 993 /run/qemu/ Debian_ 1_3.1+dfsg- 2ubuntu3. 7~cloud1/ block-curl. so
8687
7fad1ee33000-
7fad1eead000-
7fad1f0ac000-
7fad1f0af000-
7fad1f0b0000-
7fad1f0b5000-
7fad1f2b4000-
7fad1f2b5000-
** Note: if /run is mounted as noexec, step 4 will fail with the following message:
(qemu) drive_add 0 readonly=on,file=http:// archive. ubuntu. com/ubuntu/ dists/bionic/ main/installer- amd64/current/ images/ netboot/ mini.iso x86_64- linux-gnu/ qemu/block- curl.so qemu/_Debian_ 1_2.11+ dfsg-1ubuntu7. 25_/block- curl.so: failed to map segment from shared object
Failed to initialize module: /usr/lib/
Note: only modules from the same build can be loaded.
Failed to open module: /var/run/
Unknown protocol 'http'
This affects all fixed releases (B/E+), and the workaround is to remount the /run fs without noexec (sudo mount -o remount,exec /run)