2018-04-24 09:10:51 |
bugproxy |
bug |
|
|
added bug |
2018-04-24 09:10:53 |
bugproxy |
tags |
|
architecture-s39064 bugnameltc-166979 severity-high targetmilestone-inin1604 |
|
2018-04-24 09:10:55 |
bugproxy |
ubuntu: assignee |
|
Skipper Bug Screeners (skipper-screen-team) |
|
2018-04-24 09:10:58 |
bugproxy |
affects |
ubuntu |
linux (Ubuntu) |
|
2018-04-24 09:27:52 |
Christian Ehrhardt |
bug task added |
|
libguestfs (Ubuntu) |
|
2018-04-24 09:28:27 |
Christian Ehrhardt |
libguestfs (Ubuntu): assignee |
|
Skipper Bug Screeners (skipper-screen-team) |
|
2018-04-24 09:28:41 |
Christian Ehrhardt |
bug task deleted |
linux (Ubuntu) |
|
|
2018-04-24 09:29:16 |
Christian Ehrhardt |
bug task added |
|
ubuntu-z-systems |
|
2018-04-24 09:29:28 |
Christian Ehrhardt |
ubuntu-z-systems: assignee |
|
Skipper Bug Screeners (skipper-screen-team) |
|
2018-04-24 09:29:49 |
Christian Ehrhardt |
nominated for series |
|
Ubuntu Xenial |
|
2018-04-24 09:29:49 |
Christian Ehrhardt |
bug task added |
|
libguestfs (Ubuntu Xenial) |
|
2018-04-24 09:29:49 |
Christian Ehrhardt |
nominated for series |
|
Ubuntu Bionic |
|
2018-04-24 09:29:49 |
Christian Ehrhardt |
bug task added |
|
libguestfs (Ubuntu Bionic) |
|
2018-04-24 09:29:49 |
Christian Ehrhardt |
nominated for series |
|
Ubuntu Artful |
|
2018-04-24 09:29:49 |
Christian Ehrhardt |
bug task added |
|
libguestfs (Ubuntu Artful) |
|
2018-04-24 09:52:35 |
Frank Heimes |
tags |
architecture-s39064 bugnameltc-166979 severity-high targetmilestone-inin1604 |
architecture-s39064 bugnameltc-166979 severity-high targetmilestone-inin1604 universe |
|
2018-04-24 09:53:22 |
Frank Heimes |
ubuntu-z-systems: status |
New |
Triaged |
|
2018-04-24 09:54:16 |
Frank Heimes |
ubuntu-z-systems: importance |
Undecided |
High |
|
2018-05-22 08:46:25 |
Andrew Cloke |
ubuntu-z-systems: assignee |
Skipper Bug Screeners (skipper-screen-team) |
Canonical Foundations Team (canonical-foundations) |
|
2018-05-26 12:23:40 |
Francis Ginther |
tags |
architecture-s39064 bugnameltc-166979 severity-high targetmilestone-inin1604 universe |
architecture-s39064 bugnameltc-166979 id-5b04b5dd6052dc18608ce46a severity-high targetmilestone-inin1604 universe |
|
2018-06-07 16:34:45 |
Frank Heimes |
libguestfs (Ubuntu): status |
New |
Fix Committed |
|
2018-06-07 16:38:09 |
bugproxy |
tags |
architecture-s39064 bugnameltc-166979 id-5b04b5dd6052dc18608ce46a severity-high targetmilestone-inin1604 universe |
architecture-s39064 targetmilestone-inin1604 |
|
2018-06-08 12:23:42 |
Francis Ginther |
tags |
architecture-s39064 targetmilestone-inin1604 |
architecture-s39064 id-5b04b5dd6052dc18608ce46a targetmilestone-inin1604 |
|
2018-07-03 16:24:11 |
Dimitri John Ledkov |
ubuntu-z-systems: assignee |
Canonical Foundations Team (canonical-foundations) |
|
|
2018-07-03 16:24:14 |
Dimitri John Ledkov |
libguestfs (Ubuntu Bionic): assignee |
Skipper Bug Screeners (skipper-screen-team) |
|
|
2018-07-03 16:24:19 |
Dimitri John Ledkov |
libguestfs (Ubuntu): assignee |
Skipper Bug Screeners (skipper-screen-team) |
|
|
2018-07-03 16:24:38 |
Dimitri John Ledkov |
libguestfs (Ubuntu): assignee |
|
Christian Ehrhardt (paelzer) |
|
2018-07-03 16:25:12 |
Dimitri John Ledkov |
libguestfs (Ubuntu Xenial): status |
New |
Incomplete |
|
2018-07-03 16:25:13 |
Dimitri John Ledkov |
libguestfs (Ubuntu Artful): status |
New |
Incomplete |
|
2018-07-03 16:25:15 |
Dimitri John Ledkov |
libguestfs (Ubuntu Bionic): status |
New |
Incomplete |
|
2018-07-03 17:02:17 |
Frank Heimes |
ubuntu-z-systems: status |
Triaged |
In Progress |
|
2018-07-17 07:21:53 |
Christian Ehrhardt |
libguestfs (Ubuntu): status |
Fix Committed |
Fix Released |
|
2018-07-17 07:21:56 |
Christian Ehrhardt |
libguestfs (Ubuntu Xenial): status |
Incomplete |
Won't Fix |
|
2018-07-17 07:21:58 |
Christian Ehrhardt |
libguestfs (Ubuntu Artful): status |
Incomplete |
Won't Fix |
|
2018-07-17 08:43:02 |
Launchpad Janitor |
merge proposal linked |
|
https://code.launchpad.net/~paelzer/ubuntu/+source/libguestfs/+git/libguestfs/+merge/349700 |
|
2018-07-17 09:19:33 |
bugproxy |
tags |
architecture-s39064 id-5b04b5dd6052dc18608ce46a targetmilestone-inin1604 |
architecture-s39064 bugnameltc-166979 id-5b04b5dd6052dc18608ce46a severity-high targetmilestone-inin1604 |
|
2018-07-17 13:09:25 |
Launchpad Janitor |
merge proposal linked |
|
https://code.launchpad.net/~paelzer/ubuntu/+source/libguestfs/+git/libguestfs/+merge/349757 |
|
2018-07-17 13:14:02 |
Christian Ehrhardt |
bug |
|
|
added subscriber Christian Ehrhardt |
2018-07-25 10:27:52 |
Frank Heimes |
libguestfs (Ubuntu Bionic): status |
Incomplete |
In Progress |
|
2018-07-30 09:11:00 |
Christian Ehrhardt |
description |
The libguestfs versions < 1.37.22 don't work on s390x, as they don't
contain the patches which include the s390x specifics to instruct qemu-kvm
correctly. Ubuntu 16.04 contains an older version than that, which makes
libguestfs not usable on s390x.
Steps to reproduce
==================
A chronological list of steps which will bring off the issue I noticed:
mz@s390xhost$ docker run -it --privileged --rm ubuntu:xenial bash
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/# apt update
root@5dde0aef5d2e:/# DEBIAN_FRONTEND=noninteractive apt install -y \
libguestfs-tools \
python-libguestfs \
linux-image-generic \
qemu
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/# export LIBGUESTFS_DEBUG=1
root@5dde0aef5d2e:/# export LIBGUESTFS_TRACE=1
root@5dde0aef5d2e:/# libguestfs-test-tool
Expected result
===============
The libguestfs-test-tool passes and I can use it on s390x.
To check if qemu on s390x works independently from libguestfs, I use this
command:
root@5dde0aef5d2e:/# qemu-system-s390x \
-enable-kvm \
-nographic \
-kernel /boot/vmlinuz-4.4.0-119-generic \
-initrd /boot/initrd.img-4.4.0-119-generic \
-m 1G \
-M s390-ccw-virtio
[...] # boot
BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
Actual result
=============
libguestfs instructs qemu to use pci devices and serial consoles
which doesn't work on s390x, e.g.:
root@5dde0aef5d2e:/# libguestfs-test-tool
************************************************************
* IMPORTANT NOTICE
*
* When reporting bugs, include the COMPLETE, UNEDITED
* output below in your bug report.
*
************************************************************
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
LIBGUESTFS_DEBUG=1
LIBGUESTFS_TRACE=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SELinux: sh: 1: getenforce: not found
libguestfs: trace: add_drive_scratch 104857600
libguestfs: trace: get_tmpdir
libguestfs: trace: get_tmpdir = "/tmp"
libguestfs: trace: disk_create "/tmp/libguestfs82Gj1d/scratch.1" "raw" 104857600
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/tmp/libguestfs82Gj1d/scratch.1" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: get_append
libguestfs: trace: get_append = "NULL"
guestfs_get_append: (null)
libguestfs: trace: get_autosync
libguestfs: trace: get_autosync = 1
guestfs_get_autosync: 1
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "direct"
guestfs_get_backend: direct
libguestfs: trace: get_backend_settings
libguestfs: trace: get_backend_settings = []
guestfs_get_backend_settings: []
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/var/tmp"
guestfs_get_cachedir: /var/tmp
libguestfs: trace: get_direct
libguestfs: trace: get_direct = 0
guestfs_get_direct: 0
libguestfs: trace: get_hv
libguestfs: trace: get_hv = "/usr/bin/qemu-system-s390x"
guestfs_get_hv: /usr/bin/qemu-system-s390x
libguestfs: trace: get_memsize
libguestfs: trace: get_memsize = 500
guestfs_get_memsize: 500
libguestfs: trace: get_network
libguestfs: trace: get_network = 0
guestfs_get_network: 0
libguestfs: trace: get_path
libguestfs: trace: get_path = "/usr/lib/s390x-linux-gnu/guestfs"
guestfs_get_path: /usr/lib/s390x-linux-gnu/guestfs
libguestfs: trace: get_pgroup
libguestfs: trace: get_pgroup = 0
guestfs_get_pgroup: 0
libguestfs: trace: get_program
libguestfs: trace: get_program = "libguestfs-test-tool"
guestfs_get_program: libguestfs-test-tool
libguestfs: trace: get_recovery_proc
libguestfs: trace: get_recovery_proc = 1
guestfs_get_recovery_proc: 1
libguestfs: trace: get_selinux
libguestfs: trace: get_selinux = 0
guestfs_get_selinux: 0
libguestfs: trace: get_smp
libguestfs: trace: get_smp = 1
guestfs_get_smp: 1
libguestfs: trace: get_tmpdir
libguestfs: trace: get_tmpdir = "/tmp"
guestfs_get_tmpdir: /tmp
libguestfs: trace: get_trace
libguestfs: trace: get_trace = 1
guestfs_get_trace: 1
libguestfs: trace: get_verbose
libguestfs: trace: get_verbose = 1
guestfs_get_verbose: 1
host_cpu: s390x
Launching appliance, timeout set to 600 seconds.
libguestfs: trace: launch
libguestfs: trace: version
libguestfs: trace: version = <struct guestfs_version *>
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "direct"
libguestfs: launch: program=libguestfs-test-tool
libguestfs: launch: version=1.32.2
libguestfs: launch: backend registered: unix
libguestfs: launch: backend registered: uml
libguestfs: launch: backend registered: libvirt
libguestfs: launch: backend registered: direct
libguestfs: launch: backend=direct
libguestfs: launch: tmpdir=/tmp/libguestfs82Gj1d
libguestfs: launch: umask=0022
libguestfs: launch: euid=0
libguestfs: trace: get_backend_setting "force_tcg"
libguestfs: trace: get_backend_setting = NULL (error)
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/var/tmp"
libguestfs: [00000ms] begin building supermin appliance
libguestfs: [00000ms] run supermin
libguestfs: command: run: /usr/bin/supermin
libguestfs: command: run: \ --build
libguestfs: command: run: \ --verbose
libguestfs: command: run: \ --if-newer
libguestfs: command: run: \ --lock /var/tmp/.guestfs-0/lock
libguestfs: command: run: \ --copy-kernel
libguestfs: command: run: \ -f ext2
libguestfs: command: run: \ --host-cpu s390x
libguestfs: command: run: \ /usr/lib/s390x-linux-gnu/guestfs/supermin.d
libguestfs: command: run: \ -o /var/tmp/.guestfs-0/appliance.d
supermin: version: 5.1.14
supermin: package handler: debian/dpkg
supermin: acquiring lock on /var/tmp/.guestfs-0/lock
supermin: build: /usr/lib/s390x-linux-gnu/guestfs/supermin.d
supermin: reading the supermin appliance
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/base.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/daemon.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/excludefiles type uncompressed excludefiles
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/hostfiles type uncompressed hostfiles
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/init.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-hfsplus type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-reiserfs type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-xfs type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/udev-rules.tar.gz type gzip base image (tar)
supermin: mapping package names to installed packages
supermin: resolving full list of package dependencies
supermin: build: 194 packages, including dependencies
supermin: build: 6751 files
supermin: build: 3694 files, after matching excludefiles
supermin: build: 3696 files, after adding hostfiles
supermin: build: 3696 files, after removing unreadable files
supermin: build: 3700 files, after munging
supermin: kernel: picked kernel vmlinuz-4.4.0-119-generic
supermin: kernel: picked modules path /lib/modules/4.4.0-119-generic
supermin: kernel: kernel_version 4.4.0-119-generic
supermin: kernel: modules /lib/modules/4.4.0-119-generic
supermin: ext2: creating empty ext2 filesystem '/var/tmp/.guestfs-0/appliance.d.s5hkw6ja/root'
supermin: ext2: populating from base image
supermin: ext2: copying files from host filesystem
supermin: ext2: copying kernel modules
supermin: ext2: creating minimal initrd '/var/tmp/.guestfs-0/appliance.d.s5hkw6ja/initrd'
supermin: ext2: wrote 9 modules to minimal initrd
supermin: renaming /var/tmp/.guestfs-0/appliance.d.s5hkw6ja to /var/tmp/.guestfs-0/appliance.d
libguestfs: [01090ms] finished building supermin appliance
libguestfs: [01090ms] begin testing qemu features
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -help
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -version
libguestfs: qemu version 2.5
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -machine accel=kvm:tcg
libguestfs: command: run: \ -device ?
libguestfs: [01166ms] finished testing qemu features
libguestfs: trace: get_backend_setting "gdb"
libguestfs: trace: get_backend_setting = NULL (error)
[01172ms] /usr/bin/qemu-system-s390x \
-global virtio-blk-pci.scsi=off \
-nodefconfig \
-enable-fips \
-nodefaults \
-display none \
-machine accel=kvm:tcg \
-cpu host \
-m 500 \
-no-reboot \
-rtc driftfix=slew \
-global kvm-pit.lost_tick_policy=discard \
-kernel /var/tmp/.guestfs-0/appliance.d/kernel \
-initrd /var/tmp/.guestfs-0/appliance.d/initrd \
-device virtio-scsi-pci,id=scsi \
-drive file=/tmp/libguestfs82Gj1d/scratch.1,cache=unsafe,format=raw,id=hd0,if=none \
-device scsi-hd,drive=hd0 \
-drive file=/var/tmp/.guestfs-0/appliance.d/root,snapshot=on,id=appliance,cache=unsafe,if=none \
-device scsi-hd,drive=appliance \
-device virtio-serial-pci \
-serial stdio \
-chardev socket,path=/tmp/libguestfs82Gj1d/guestfsd.sock,id=channel0 \
-device virtserialport,chardev=channel0,name=org.libguestfs.channel.0 \
-append 'panic=1 console=ttyS0 udevtimeout=6000 udev.event-timeout=6000 no_timer_check acpi=off printk.time=1 cgroup_disable=memory root=/dev/sdb selinux=0 guestfs_verbose=1 TERM=xterm'
qemu-system-s390x: Warning: global kvm-pit.lost_tick_policy has invalid class name
Alarm clock
Environment
===========
This affects ubuntu 16.04 (see below)
host
----
$ lsb_release -a
LSB Version: core-9.20160110ubuntu0.2-noarch:core-9.20160110ubuntu0.2-s390x:printing-9.20160110ubuntu0.2-noarch:printing-9.20160110ubuntu0.2-s390x:security-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-s390x
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
container
---------
root@5dde0aef5d2e:/# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
root@5dde0aef5d2e:/# apt-cache policy libguestfs-tools
libguestfs-tools:
Installed: 1:1.32.2-4ubuntu2
Candidate: 1:1.32.2-4ubuntu2
Version table:
*** 1:1.32.2-4ubuntu2 500
500 http://ports.ubuntu.com/ubuntu-ports xenial/universe s390x Packages
100 /var/lib/dpkg/status
Additional information
======================
Please be aware that there this is a known libguestfs upstream bug [1]
which is already fixed and backported by RedHat [2][3] and was the
trigger for a patch series on the libguestfs mailing list [4]. As an
example, the latest known needed patch is [5]. As a smoke test, in case
the libguestfs-test-tool result was a false positive, I used the python
binding code in Appendix A below, which is based on [6].
FWIW, I checked Ubuntu 18.04 (beta), and it doesn't work there too.
The packaged version of libguestfs is v1.36 in 18.04 bionic beaver,
which is too old (and/or doesn't contain the needed backports).
References
==========
[1] Bug 1376547 - qemu-system-s390x: -device isa-serial,chardev=charserial0,
id=serial0: 'isa-serial' is not a valid device model name
https://bugzilla.redhat.com/show_bug.cgi?id=1376547
[2] [Private] Bug 1479526 - [RFE] libguestfs for z Systems
https://bugzilla.redhat.com/show_bug.cgi?id=1479526
[3] The RHEL7.5 branch of libguestfs with backports to v1.36
https://github.com/libguestfs/libguestfs/tree/rhel-7.5
[4] The patch series of libguestfs on s390x:
https://www.redhat.com/archives/libguestfs/2017-May/msg00066.html
[5] Fix of an x86 specific item to enable s390x in v1.37.22
https://github.com/libguestfs/libguestfs/commit/5b60dd4eff02f48d344bcdad0d4bad4676ca9168
[6] https://rwmj.wordpress.com/2010/02/01/libguestfs-python-example/
Appendix A
==========
Smoke test, based on the example from the author of libguestfs [6]:
root@26248e573a87:/# cat smoke.py
#!/usr/bin/python
# To see the Python docs, do: help (guestfs)
# To see the general docs http://libguestfs.org/guestfs.3.html
# For FAQ see http://libguestfs.org/FAQ.html
import os
import guestfs
g = guestfs.GuestFS()
f = open("/tmp/test.img", "w")
f.truncate(500 * 1024 * 1024)
f.close()
g.add_drive("/tmp/test.img")
g.launch()
g.part_disk("/dev/sda", "mbr")
g.mkfs("ext2", "/dev/sda1")
g.mount("/dev/sda1", "/")
f = open("/tmp/ks.cfg", "w")
f.write("# this would be the kickstart file\n")
f.write("#\n")
f.write ("# end of file\n")
f.close()
g.upload("/tmp/ks.cfg", "/ks.cfg")
g.sync()
g.umount_all()
== Comment: #1 - Markus Zoeller <mzoeller@de.ibm.com> - 2018-04-20 06:51:10 ==
With the Debian Sid repository I could install libguestfs v1.38 in an
Ubuntu 18.04 (bionic beaver) container, all on s390x:
[mz@s390xhost]$ docker run -it --privileged --rm s390x/ubuntu:18.04 bash
$ apt update
$ apt install -y vim
$ apt-cache policy libguestfs-tools
$ apt install -y software-properties-common \
debian-archive-keyring \
dirmngr
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
$ add-apt-repository "deb http://ftp.de.debian.org/debian sid main"
$ cat << EOF > /etc/apt/preferences.d/libguestfs.pref
# Note: 2 blank lines are required between entries
Package: *
Pin: release a=bionic
Pin-Priority: 500
Package: *
Pin: origin "ftp.de.debian.org"
Pin-Priority: 300
# Pattern includes 'python-guestfs' and 'libguestfs-tools' and similarily named dependencies
Package: *guestfs*
Pin: origin "ftp.de.debian.org"
Pin-Priority: 700
EOF
$ cat /etc/apt/preferences.d/libguestfs.pref
$ apt update
$ apt-cache policy libguestfs-tools
$ DEBIAN_FRONTEND=noninteractive apt install -y \
libguestfs-tools \
python-libguestfs \
linux-image-generic \
qemu-system \
qemu-kvm
$ apt-cache policy libguestfs-tools
$ export LIBGUESTFS_DEBUG=1
$ export LIBGUESTFS_TRACE=1
$ libguestfs-test-tool
[...]
===== TEST FINISHED OK =====
This verifies that libguestfs v1.38 has the needed code to work on s390x. |
[Impact]
* the way libguestfs launches libvirt is not working on s390x
* backport fixes to work on that platform as well
* The TL;DR of the changes is to add arch specific options to the calls being made
[Test Case]
* TL;DR: install and use libguestfs-tools on s390x
IBM outlined a test using the libvrtguestfs-test-tool, but that is
just one of too many options to try - find more details in the comments below.
Note: IBM will assist in verifying those and already has on the PPA
[Regression Potential]
* This modifies how arguments are created, but it does so only for s390x so the regression should be limited to that architecture.
The issue would be that it doesn't start properly, but since that is the current state there is no real regression - it would just replacve one way of failing for another - and since the tests by IBM on the PPA were good we are convinced that even that regression-risk would not trigger.
* The FTBFS is a build time only change and should not trigger regressions later on.
[Other Info]
* Along the fix requested this fixes an FTBFS in Bionic due to the move to a new default JDK version.
---
The libguestfs versions < 1.37.22 don't work on s390x, as they don't
contain the patches which include the s390x specifics to instruct qemu-kvm
correctly. Ubuntu 16.04 contains an older version than that, which makes
libguestfs not usable on s390x.
Steps to reproduce
==================
A chronological list of steps which will bring off the issue I noticed:
mz@s390xhost$ docker run -it --privileged --rm ubuntu:xenial bash
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/# apt update
root@5dde0aef5d2e:/# DEBIAN_FRONTEND=noninteractive apt install -y \
libguestfs-tools \
python-libguestfs \
linux-image-generic \
qemu
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/# export LIBGUESTFS_DEBUG=1
root@5dde0aef5d2e:/# export LIBGUESTFS_TRACE=1
root@5dde0aef5d2e:/# libguestfs-test-tool
Expected result
===============
The libguestfs-test-tool passes and I can use it on s390x.
To check if qemu on s390x works independently from libguestfs, I use this
command:
root@5dde0aef5d2e:/# qemu-system-s390x \
-enable-kvm \
-nographic \
-kernel /boot/vmlinuz-4.4.0-119-generic \
-initrd /boot/initrd.img-4.4.0-119-generic \
-m 1G \
-M s390-ccw-virtio
[...] # boot
BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
Actual result
=============
libguestfs instructs qemu to use pci devices and serial consoles
which doesn't work on s390x, e.g.:
root@5dde0aef5d2e:/# libguestfs-test-tool
************************************************************
* IMPORTANT NOTICE
*
* When reporting bugs, include the COMPLETE, UNEDITED
* output below in your bug report.
*
************************************************************
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
LIBGUESTFS_DEBUG=1
LIBGUESTFS_TRACE=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SELinux: sh: 1: getenforce: not found
libguestfs: trace: add_drive_scratch 104857600
libguestfs: trace: get_tmpdir
libguestfs: trace: get_tmpdir = "/tmp"
libguestfs: trace: disk_create "/tmp/libguestfs82Gj1d/scratch.1" "raw" 104857600
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/tmp/libguestfs82Gj1d/scratch.1" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: get_append
libguestfs: trace: get_append = "NULL"
guestfs_get_append: (null)
libguestfs: trace: get_autosync
libguestfs: trace: get_autosync = 1
guestfs_get_autosync: 1
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "direct"
guestfs_get_backend: direct
libguestfs: trace: get_backend_settings
libguestfs: trace: get_backend_settings = []
guestfs_get_backend_settings: []
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/var/tmp"
guestfs_get_cachedir: /var/tmp
libguestfs: trace: get_direct
libguestfs: trace: get_direct = 0
guestfs_get_direct: 0
libguestfs: trace: get_hv
libguestfs: trace: get_hv = "/usr/bin/qemu-system-s390x"
guestfs_get_hv: /usr/bin/qemu-system-s390x
libguestfs: trace: get_memsize
libguestfs: trace: get_memsize = 500
guestfs_get_memsize: 500
libguestfs: trace: get_network
libguestfs: trace: get_network = 0
guestfs_get_network: 0
libguestfs: trace: get_path
libguestfs: trace: get_path = "/usr/lib/s390x-linux-gnu/guestfs"
guestfs_get_path: /usr/lib/s390x-linux-gnu/guestfs
libguestfs: trace: get_pgroup
libguestfs: trace: get_pgroup = 0
guestfs_get_pgroup: 0
libguestfs: trace: get_program
libguestfs: trace: get_program = "libguestfs-test-tool"
guestfs_get_program: libguestfs-test-tool
libguestfs: trace: get_recovery_proc
libguestfs: trace: get_recovery_proc = 1
guestfs_get_recovery_proc: 1
libguestfs: trace: get_selinux
libguestfs: trace: get_selinux = 0
guestfs_get_selinux: 0
libguestfs: trace: get_smp
libguestfs: trace: get_smp = 1
guestfs_get_smp: 1
libguestfs: trace: get_tmpdir
libguestfs: trace: get_tmpdir = "/tmp"
guestfs_get_tmpdir: /tmp
libguestfs: trace: get_trace
libguestfs: trace: get_trace = 1
guestfs_get_trace: 1
libguestfs: trace: get_verbose
libguestfs: trace: get_verbose = 1
guestfs_get_verbose: 1
host_cpu: s390x
Launching appliance, timeout set to 600 seconds.
libguestfs: trace: launch
libguestfs: trace: version
libguestfs: trace: version = <struct guestfs_version *>
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "direct"
libguestfs: launch: program=libguestfs-test-tool
libguestfs: launch: version=1.32.2
libguestfs: launch: backend registered: unix
libguestfs: launch: backend registered: uml
libguestfs: launch: backend registered: libvirt
libguestfs: launch: backend registered: direct
libguestfs: launch: backend=direct
libguestfs: launch: tmpdir=/tmp/libguestfs82Gj1d
libguestfs: launch: umask=0022
libguestfs: launch: euid=0
libguestfs: trace: get_backend_setting "force_tcg"
libguestfs: trace: get_backend_setting = NULL (error)
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/var/tmp"
libguestfs: [00000ms] begin building supermin appliance
libguestfs: [00000ms] run supermin
libguestfs: command: run: /usr/bin/supermin
libguestfs: command: run: \ --build
libguestfs: command: run: \ --verbose
libguestfs: command: run: \ --if-newer
libguestfs: command: run: \ --lock /var/tmp/.guestfs-0/lock
libguestfs: command: run: \ --copy-kernel
libguestfs: command: run: \ -f ext2
libguestfs: command: run: \ --host-cpu s390x
libguestfs: command: run: \ /usr/lib/s390x-linux-gnu/guestfs/supermin.d
libguestfs: command: run: \ -o /var/tmp/.guestfs-0/appliance.d
supermin: version: 5.1.14
supermin: package handler: debian/dpkg
supermin: acquiring lock on /var/tmp/.guestfs-0/lock
supermin: build: /usr/lib/s390x-linux-gnu/guestfs/supermin.d
supermin: reading the supermin appliance
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/base.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/daemon.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/excludefiles type uncompressed excludefiles
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/hostfiles type uncompressed hostfiles
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/init.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-hfsplus type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-reiserfs type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-xfs type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/udev-rules.tar.gz type gzip base image (tar)
supermin: mapping package names to installed packages
supermin: resolving full list of package dependencies
supermin: build: 194 packages, including dependencies
supermin: build: 6751 files
supermin: build: 3694 files, after matching excludefiles
supermin: build: 3696 files, after adding hostfiles
supermin: build: 3696 files, after removing unreadable files
supermin: build: 3700 files, after munging
supermin: kernel: picked kernel vmlinuz-4.4.0-119-generic
supermin: kernel: picked modules path /lib/modules/4.4.0-119-generic
supermin: kernel: kernel_version 4.4.0-119-generic
supermin: kernel: modules /lib/modules/4.4.0-119-generic
supermin: ext2: creating empty ext2 filesystem '/var/tmp/.guestfs-0/appliance.d.s5hkw6ja/root'
supermin: ext2: populating from base image
supermin: ext2: copying files from host filesystem
supermin: ext2: copying kernel modules
supermin: ext2: creating minimal initrd '/var/tmp/.guestfs-0/appliance.d.s5hkw6ja/initrd'
supermin: ext2: wrote 9 modules to minimal initrd
supermin: renaming /var/tmp/.guestfs-0/appliance.d.s5hkw6ja to /var/tmp/.guestfs-0/appliance.d
libguestfs: [01090ms] finished building supermin appliance
libguestfs: [01090ms] begin testing qemu features
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -help
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -version
libguestfs: qemu version 2.5
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -machine accel=kvm:tcg
libguestfs: command: run: \ -device ?
libguestfs: [01166ms] finished testing qemu features
libguestfs: trace: get_backend_setting "gdb"
libguestfs: trace: get_backend_setting = NULL (error)
[01172ms] /usr/bin/qemu-system-s390x \
-global virtio-blk-pci.scsi=off \
-nodefconfig \
-enable-fips \
-nodefaults \
-display none \
-machine accel=kvm:tcg \
-cpu host \
-m 500 \
-no-reboot \
-rtc driftfix=slew \
-global kvm-pit.lost_tick_policy=discard \
-kernel /var/tmp/.guestfs-0/appliance.d/kernel \
-initrd /var/tmp/.guestfs-0/appliance.d/initrd \
-device virtio-scsi-pci,id=scsi \
-drive file=/tmp/libguestfs82Gj1d/scratch.1,cache=unsafe,format=raw,id=hd0,if=none \
-device scsi-hd,drive=hd0 \
-drive file=/var/tmp/.guestfs-0/appliance.d/root,snapshot=on,id=appliance,cache=unsafe,if=none \
-device scsi-hd,drive=appliance \
-device virtio-serial-pci \
-serial stdio \
-chardev socket,path=/tmp/libguestfs82Gj1d/guestfsd.sock,id=channel0 \
-device virtserialport,chardev=channel0,name=org.libguestfs.channel.0 \
-append 'panic=1 console=ttyS0 udevtimeout=6000 udev.event-timeout=6000 no_timer_check acpi=off printk.time=1 cgroup_disable=memory root=/dev/sdb selinux=0 guestfs_verbose=1 TERM=xterm'
qemu-system-s390x: Warning: global kvm-pit.lost_tick_policy has invalid class name
Alarm clock
Environment
===========
This affects ubuntu 16.04 (see below)
host
----
$ lsb_release -a
LSB Version: core-9.20160110ubuntu0.2-noarch:core-9.20160110ubuntu0.2-s390x:printing-9.20160110ubuntu0.2-noarch:printing-9.20160110ubuntu0.2-s390x:security-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-s390x
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
container
---------
root@5dde0aef5d2e:/# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
root@5dde0aef5d2e:/# apt-cache policy libguestfs-tools
libguestfs-tools:
Installed: 1:1.32.2-4ubuntu2
Candidate: 1:1.32.2-4ubuntu2
Version table:
*** 1:1.32.2-4ubuntu2 500
500 http://ports.ubuntu.com/ubuntu-ports xenial/universe s390x Packages
100 /var/lib/dpkg/status
Additional information
======================
Please be aware that there this is a known libguestfs upstream bug [1]
which is already fixed and backported by RedHat [2][3] and was the
trigger for a patch series on the libguestfs mailing list [4]. As an
example, the latest known needed patch is [5]. As a smoke test, in case
the libguestfs-test-tool result was a false positive, I used the python
binding code in Appendix A below, which is based on [6].
FWIW, I checked Ubuntu 18.04 (beta), and it doesn't work there too.
The packaged version of libguestfs is v1.36 in 18.04 bionic beaver,
which is too old (and/or doesn't contain the needed backports).
References
==========
[1] Bug 1376547 - qemu-system-s390x: -device isa-serial,chardev=charserial0,
id=serial0: 'isa-serial' is not a valid device model name
https://bugzilla.redhat.com/show_bug.cgi?id=1376547
[2] [Private] Bug 1479526 - [RFE] libguestfs for z Systems
https://bugzilla.redhat.com/show_bug.cgi?id=1479526
[3] The RHEL7.5 branch of libguestfs with backports to v1.36
https://github.com/libguestfs/libguestfs/tree/rhel-7.5
[4] The patch series of libguestfs on s390x:
https://www.redhat.com/archives/libguestfs/2017-May/msg00066.html
[5] Fix of an x86 specific item to enable s390x in v1.37.22
https://github.com/libguestfs/libguestfs/commit/5b60dd4eff02f48d344bcdad0d4bad4676ca9168
[6] https://rwmj.wordpress.com/2010/02/01/libguestfs-python-example/
Appendix A
==========
Smoke test, based on the example from the author of libguestfs [6]:
root@26248e573a87:/# cat smoke.py
#!/usr/bin/python
# To see the Python docs, do: help (guestfs)
# To see the general docs http://libguestfs.org/guestfs.3.html
# For FAQ see http://libguestfs.org/FAQ.html
import os
import guestfs
g = guestfs.GuestFS()
f = open("/tmp/test.img", "w")
f.truncate(500 * 1024 * 1024)
f.close()
g.add_drive("/tmp/test.img")
g.launch()
g.part_disk("/dev/sda", "mbr")
g.mkfs("ext2", "/dev/sda1")
g.mount("/dev/sda1", "/")
f = open("/tmp/ks.cfg", "w")
f.write("# this would be the kickstart file\n")
f.write("#\n")
f.write ("# end of file\n")
f.close()
g.upload("/tmp/ks.cfg", "/ks.cfg")
g.sync()
g.umount_all()
== Comment: #1 - Markus Zoeller <mzoeller@de.ibm.com> - 2018-04-20 06:51:10 ==
With the Debian Sid repository I could install libguestfs v1.38 in an
Ubuntu 18.04 (bionic beaver) container, all on s390x:
[mz@s390xhost]$ docker run -it --privileged --rm s390x/ubuntu:18.04 bash
$ apt update
$ apt install -y vim
$ apt-cache policy libguestfs-tools
$ apt install -y software-properties-common \
debian-archive-keyring \
dirmngr
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
$ add-apt-repository "deb http://ftp.de.debian.org/debian sid main"
$ cat << EOF > /etc/apt/preferences.d/libguestfs.pref
# Note: 2 blank lines are required between entries
Package: *
Pin: release a=bionic
Pin-Priority: 500
Package: *
Pin: origin "ftp.de.debian.org"
Pin-Priority: 300
# Pattern includes 'python-guestfs' and 'libguestfs-tools' and similarily named dependencies
Package: *guestfs*
Pin: origin "ftp.de.debian.org"
Pin-Priority: 700
EOF
$ cat /etc/apt/preferences.d/libguestfs.pref
$ apt update
$ apt-cache policy libguestfs-tools
$ DEBIAN_FRONTEND=noninteractive apt install -y \
libguestfs-tools \
python-libguestfs \
linux-image-generic \
qemu-system \
qemu-kvm
$ apt-cache policy libguestfs-tools
$ export LIBGUESTFS_DEBUG=1
$ export LIBGUESTFS_TRACE=1
$ libguestfs-test-tool
[...]
===== TEST FINISHED OK =====
This verifies that libguestfs v1.38 has the needed code to work on s390x. |
|
2018-07-30 09:12:43 |
Christian Ehrhardt |
libguestfs (Ubuntu): assignee |
Christian Ehrhardt (paelzer) |
|
|
2018-08-10 20:28:48 |
Steve Langasek |
libguestfs (Ubuntu Bionic): status |
In Progress |
Incomplete |
|
2018-08-13 05:39:53 |
Christian Ehrhardt |
libguestfs (Ubuntu Bionic): status |
Incomplete |
In Progress |
|
2018-08-13 05:40:59 |
Christian Ehrhardt |
description |
[Impact]
* the way libguestfs launches libvirt is not working on s390x
* backport fixes to work on that platform as well
* The TL;DR of the changes is to add arch specific options to the calls being made
[Test Case]
* TL;DR: install and use libguestfs-tools on s390x
IBM outlined a test using the libvrtguestfs-test-tool, but that is
just one of too many options to try - find more details in the comments below.
Note: IBM will assist in verifying those and already has on the PPA
[Regression Potential]
* This modifies how arguments are created, but it does so only for s390x so the regression should be limited to that architecture.
The issue would be that it doesn't start properly, but since that is the current state there is no real regression - it would just replacve one way of failing for another - and since the tests by IBM on the PPA were good we are convinced that even that regression-risk would not trigger.
* The FTBFS is a build time only change and should not trigger regressions later on.
[Other Info]
* Along the fix requested this fixes an FTBFS in Bionic due to the move to a new default JDK version.
---
The libguestfs versions < 1.37.22 don't work on s390x, as they don't
contain the patches which include the s390x specifics to instruct qemu-kvm
correctly. Ubuntu 16.04 contains an older version than that, which makes
libguestfs not usable on s390x.
Steps to reproduce
==================
A chronological list of steps which will bring off the issue I noticed:
mz@s390xhost$ docker run -it --privileged --rm ubuntu:xenial bash
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/# apt update
root@5dde0aef5d2e:/# DEBIAN_FRONTEND=noninteractive apt install -y \
libguestfs-tools \
python-libguestfs \
linux-image-generic \
qemu
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/# export LIBGUESTFS_DEBUG=1
root@5dde0aef5d2e:/# export LIBGUESTFS_TRACE=1
root@5dde0aef5d2e:/# libguestfs-test-tool
Expected result
===============
The libguestfs-test-tool passes and I can use it on s390x.
To check if qemu on s390x works independently from libguestfs, I use this
command:
root@5dde0aef5d2e:/# qemu-system-s390x \
-enable-kvm \
-nographic \
-kernel /boot/vmlinuz-4.4.0-119-generic \
-initrd /boot/initrd.img-4.4.0-119-generic \
-m 1G \
-M s390-ccw-virtio
[...] # boot
BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
Actual result
=============
libguestfs instructs qemu to use pci devices and serial consoles
which doesn't work on s390x, e.g.:
root@5dde0aef5d2e:/# libguestfs-test-tool
************************************************************
* IMPORTANT NOTICE
*
* When reporting bugs, include the COMPLETE, UNEDITED
* output below in your bug report.
*
************************************************************
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
LIBGUESTFS_DEBUG=1
LIBGUESTFS_TRACE=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SELinux: sh: 1: getenforce: not found
libguestfs: trace: add_drive_scratch 104857600
libguestfs: trace: get_tmpdir
libguestfs: trace: get_tmpdir = "/tmp"
libguestfs: trace: disk_create "/tmp/libguestfs82Gj1d/scratch.1" "raw" 104857600
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/tmp/libguestfs82Gj1d/scratch.1" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: get_append
libguestfs: trace: get_append = "NULL"
guestfs_get_append: (null)
libguestfs: trace: get_autosync
libguestfs: trace: get_autosync = 1
guestfs_get_autosync: 1
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "direct"
guestfs_get_backend: direct
libguestfs: trace: get_backend_settings
libguestfs: trace: get_backend_settings = []
guestfs_get_backend_settings: []
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/var/tmp"
guestfs_get_cachedir: /var/tmp
libguestfs: trace: get_direct
libguestfs: trace: get_direct = 0
guestfs_get_direct: 0
libguestfs: trace: get_hv
libguestfs: trace: get_hv = "/usr/bin/qemu-system-s390x"
guestfs_get_hv: /usr/bin/qemu-system-s390x
libguestfs: trace: get_memsize
libguestfs: trace: get_memsize = 500
guestfs_get_memsize: 500
libguestfs: trace: get_network
libguestfs: trace: get_network = 0
guestfs_get_network: 0
libguestfs: trace: get_path
libguestfs: trace: get_path = "/usr/lib/s390x-linux-gnu/guestfs"
guestfs_get_path: /usr/lib/s390x-linux-gnu/guestfs
libguestfs: trace: get_pgroup
libguestfs: trace: get_pgroup = 0
guestfs_get_pgroup: 0
libguestfs: trace: get_program
libguestfs: trace: get_program = "libguestfs-test-tool"
guestfs_get_program: libguestfs-test-tool
libguestfs: trace: get_recovery_proc
libguestfs: trace: get_recovery_proc = 1
guestfs_get_recovery_proc: 1
libguestfs: trace: get_selinux
libguestfs: trace: get_selinux = 0
guestfs_get_selinux: 0
libguestfs: trace: get_smp
libguestfs: trace: get_smp = 1
guestfs_get_smp: 1
libguestfs: trace: get_tmpdir
libguestfs: trace: get_tmpdir = "/tmp"
guestfs_get_tmpdir: /tmp
libguestfs: trace: get_trace
libguestfs: trace: get_trace = 1
guestfs_get_trace: 1
libguestfs: trace: get_verbose
libguestfs: trace: get_verbose = 1
guestfs_get_verbose: 1
host_cpu: s390x
Launching appliance, timeout set to 600 seconds.
libguestfs: trace: launch
libguestfs: trace: version
libguestfs: trace: version = <struct guestfs_version *>
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "direct"
libguestfs: launch: program=libguestfs-test-tool
libguestfs: launch: version=1.32.2
libguestfs: launch: backend registered: unix
libguestfs: launch: backend registered: uml
libguestfs: launch: backend registered: libvirt
libguestfs: launch: backend registered: direct
libguestfs: launch: backend=direct
libguestfs: launch: tmpdir=/tmp/libguestfs82Gj1d
libguestfs: launch: umask=0022
libguestfs: launch: euid=0
libguestfs: trace: get_backend_setting "force_tcg"
libguestfs: trace: get_backend_setting = NULL (error)
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/var/tmp"
libguestfs: [00000ms] begin building supermin appliance
libguestfs: [00000ms] run supermin
libguestfs: command: run: /usr/bin/supermin
libguestfs: command: run: \ --build
libguestfs: command: run: \ --verbose
libguestfs: command: run: \ --if-newer
libguestfs: command: run: \ --lock /var/tmp/.guestfs-0/lock
libguestfs: command: run: \ --copy-kernel
libguestfs: command: run: \ -f ext2
libguestfs: command: run: \ --host-cpu s390x
libguestfs: command: run: \ /usr/lib/s390x-linux-gnu/guestfs/supermin.d
libguestfs: command: run: \ -o /var/tmp/.guestfs-0/appliance.d
supermin: version: 5.1.14
supermin: package handler: debian/dpkg
supermin: acquiring lock on /var/tmp/.guestfs-0/lock
supermin: build: /usr/lib/s390x-linux-gnu/guestfs/supermin.d
supermin: reading the supermin appliance
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/base.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/daemon.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/excludefiles type uncompressed excludefiles
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/hostfiles type uncompressed hostfiles
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/init.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-hfsplus type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-reiserfs type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-xfs type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/udev-rules.tar.gz type gzip base image (tar)
supermin: mapping package names to installed packages
supermin: resolving full list of package dependencies
supermin: build: 194 packages, including dependencies
supermin: build: 6751 files
supermin: build: 3694 files, after matching excludefiles
supermin: build: 3696 files, after adding hostfiles
supermin: build: 3696 files, after removing unreadable files
supermin: build: 3700 files, after munging
supermin: kernel: picked kernel vmlinuz-4.4.0-119-generic
supermin: kernel: picked modules path /lib/modules/4.4.0-119-generic
supermin: kernel: kernel_version 4.4.0-119-generic
supermin: kernel: modules /lib/modules/4.4.0-119-generic
supermin: ext2: creating empty ext2 filesystem '/var/tmp/.guestfs-0/appliance.d.s5hkw6ja/root'
supermin: ext2: populating from base image
supermin: ext2: copying files from host filesystem
supermin: ext2: copying kernel modules
supermin: ext2: creating minimal initrd '/var/tmp/.guestfs-0/appliance.d.s5hkw6ja/initrd'
supermin: ext2: wrote 9 modules to minimal initrd
supermin: renaming /var/tmp/.guestfs-0/appliance.d.s5hkw6ja to /var/tmp/.guestfs-0/appliance.d
libguestfs: [01090ms] finished building supermin appliance
libguestfs: [01090ms] begin testing qemu features
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -help
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -version
libguestfs: qemu version 2.5
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -machine accel=kvm:tcg
libguestfs: command: run: \ -device ?
libguestfs: [01166ms] finished testing qemu features
libguestfs: trace: get_backend_setting "gdb"
libguestfs: trace: get_backend_setting = NULL (error)
[01172ms] /usr/bin/qemu-system-s390x \
-global virtio-blk-pci.scsi=off \
-nodefconfig \
-enable-fips \
-nodefaults \
-display none \
-machine accel=kvm:tcg \
-cpu host \
-m 500 \
-no-reboot \
-rtc driftfix=slew \
-global kvm-pit.lost_tick_policy=discard \
-kernel /var/tmp/.guestfs-0/appliance.d/kernel \
-initrd /var/tmp/.guestfs-0/appliance.d/initrd \
-device virtio-scsi-pci,id=scsi \
-drive file=/tmp/libguestfs82Gj1d/scratch.1,cache=unsafe,format=raw,id=hd0,if=none \
-device scsi-hd,drive=hd0 \
-drive file=/var/tmp/.guestfs-0/appliance.d/root,snapshot=on,id=appliance,cache=unsafe,if=none \
-device scsi-hd,drive=appliance \
-device virtio-serial-pci \
-serial stdio \
-chardev socket,path=/tmp/libguestfs82Gj1d/guestfsd.sock,id=channel0 \
-device virtserialport,chardev=channel0,name=org.libguestfs.channel.0 \
-append 'panic=1 console=ttyS0 udevtimeout=6000 udev.event-timeout=6000 no_timer_check acpi=off printk.time=1 cgroup_disable=memory root=/dev/sdb selinux=0 guestfs_verbose=1 TERM=xterm'
qemu-system-s390x: Warning: global kvm-pit.lost_tick_policy has invalid class name
Alarm clock
Environment
===========
This affects ubuntu 16.04 (see below)
host
----
$ lsb_release -a
LSB Version: core-9.20160110ubuntu0.2-noarch:core-9.20160110ubuntu0.2-s390x:printing-9.20160110ubuntu0.2-noarch:printing-9.20160110ubuntu0.2-s390x:security-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-s390x
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
container
---------
root@5dde0aef5d2e:/# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
root@5dde0aef5d2e:/# apt-cache policy libguestfs-tools
libguestfs-tools:
Installed: 1:1.32.2-4ubuntu2
Candidate: 1:1.32.2-4ubuntu2
Version table:
*** 1:1.32.2-4ubuntu2 500
500 http://ports.ubuntu.com/ubuntu-ports xenial/universe s390x Packages
100 /var/lib/dpkg/status
Additional information
======================
Please be aware that there this is a known libguestfs upstream bug [1]
which is already fixed and backported by RedHat [2][3] and was the
trigger for a patch series on the libguestfs mailing list [4]. As an
example, the latest known needed patch is [5]. As a smoke test, in case
the libguestfs-test-tool result was a false positive, I used the python
binding code in Appendix A below, which is based on [6].
FWIW, I checked Ubuntu 18.04 (beta), and it doesn't work there too.
The packaged version of libguestfs is v1.36 in 18.04 bionic beaver,
which is too old (and/or doesn't contain the needed backports).
References
==========
[1] Bug 1376547 - qemu-system-s390x: -device isa-serial,chardev=charserial0,
id=serial0: 'isa-serial' is not a valid device model name
https://bugzilla.redhat.com/show_bug.cgi?id=1376547
[2] [Private] Bug 1479526 - [RFE] libguestfs for z Systems
https://bugzilla.redhat.com/show_bug.cgi?id=1479526
[3] The RHEL7.5 branch of libguestfs with backports to v1.36
https://github.com/libguestfs/libguestfs/tree/rhel-7.5
[4] The patch series of libguestfs on s390x:
https://www.redhat.com/archives/libguestfs/2017-May/msg00066.html
[5] Fix of an x86 specific item to enable s390x in v1.37.22
https://github.com/libguestfs/libguestfs/commit/5b60dd4eff02f48d344bcdad0d4bad4676ca9168
[6] https://rwmj.wordpress.com/2010/02/01/libguestfs-python-example/
Appendix A
==========
Smoke test, based on the example from the author of libguestfs [6]:
root@26248e573a87:/# cat smoke.py
#!/usr/bin/python
# To see the Python docs, do: help (guestfs)
# To see the general docs http://libguestfs.org/guestfs.3.html
# For FAQ see http://libguestfs.org/FAQ.html
import os
import guestfs
g = guestfs.GuestFS()
f = open("/tmp/test.img", "w")
f.truncate(500 * 1024 * 1024)
f.close()
g.add_drive("/tmp/test.img")
g.launch()
g.part_disk("/dev/sda", "mbr")
g.mkfs("ext2", "/dev/sda1")
g.mount("/dev/sda1", "/")
f = open("/tmp/ks.cfg", "w")
f.write("# this would be the kickstart file\n")
f.write("#\n")
f.write ("# end of file\n")
f.close()
g.upload("/tmp/ks.cfg", "/ks.cfg")
g.sync()
g.umount_all()
== Comment: #1 - Markus Zoeller <mzoeller@de.ibm.com> - 2018-04-20 06:51:10 ==
With the Debian Sid repository I could install libguestfs v1.38 in an
Ubuntu 18.04 (bionic beaver) container, all on s390x:
[mz@s390xhost]$ docker run -it --privileged --rm s390x/ubuntu:18.04 bash
$ apt update
$ apt install -y vim
$ apt-cache policy libguestfs-tools
$ apt install -y software-properties-common \
debian-archive-keyring \
dirmngr
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
$ add-apt-repository "deb http://ftp.de.debian.org/debian sid main"
$ cat << EOF > /etc/apt/preferences.d/libguestfs.pref
# Note: 2 blank lines are required between entries
Package: *
Pin: release a=bionic
Pin-Priority: 500
Package: *
Pin: origin "ftp.de.debian.org"
Pin-Priority: 300
# Pattern includes 'python-guestfs' and 'libguestfs-tools' and similarily named dependencies
Package: *guestfs*
Pin: origin "ftp.de.debian.org"
Pin-Priority: 700
EOF
$ cat /etc/apt/preferences.d/libguestfs.pref
$ apt update
$ apt-cache policy libguestfs-tools
$ DEBIAN_FRONTEND=noninteractive apt install -y \
libguestfs-tools \
python-libguestfs \
linux-image-generic \
qemu-system \
qemu-kvm
$ apt-cache policy libguestfs-tools
$ export LIBGUESTFS_DEBUG=1
$ export LIBGUESTFS_TRACE=1
$ libguestfs-test-tool
[...]
===== TEST FINISHED OK =====
This verifies that libguestfs v1.38 has the needed code to work on s390x. |
[Impact]
* the way libguestfs launches libvirt is not working on s390x
* backport fixes to work on that platform as well
* The TL;DR of the changes is to add arch specific options to the calls being made
[Test Case]
* Note: IBM will assist in verifying those and already has on the PPA
* To run yourself from the original description you can use libguestfs-test-tool:
1. apt install libguestfs-tools python-libguestfs linux-image-generic qemu
2. sudo libguestfs-test-tool
This will by default break on e.g.:
qemu-system-s390x: -device virtio-rng-pci,rng=rng0: MSI-X support is mandatory in the S390 architecture
libguestfs: error: appliance closed the connection unexpectedly, see earlier error messages
3. (upgrade from ppa or proposed depending on what you test)
4. sudo libguestfs-test-tool
[...]
===== TEST FINISHED OK =====
[Regression Potential]
* This modifies how arguments are created, but it does so only for s390x so the regression should be limited to that architecture.
The issue would be that it doesn't start properly, but since that is the current state there is no real regression - it would just replacve one way of failing for another - and since the tests by IBM on the PPA were good we are convinced that even that regression-risk would not trigger.
* The FTBFS is a build time only change and should not trigger regressions later on.
[Other Info]
* Along the fix requested this fixes an FTBFS in Bionic due to the move to a new default JDK version.
---
The libguestfs versions < 1.37.22 don't work on s390x, as they don't
contain the patches which include the s390x specifics to instruct qemu-kvm
correctly. Ubuntu 16.04 contains an older version than that, which makes
libguestfs not usable on s390x.
Steps to reproduce
==================
A chronological list of steps which will bring off the issue I noticed:
mz@s390xhost$ docker run -it --privileged --rm ubuntu:xenial bash
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/# apt update
root@5dde0aef5d2e:/# DEBIAN_FRONTEND=noninteractive apt install -y \
libguestfs-tools \
python-libguestfs \
linux-image-generic \
qemu
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/#
root@5dde0aef5d2e:/# export LIBGUESTFS_DEBUG=1
root@5dde0aef5d2e:/# export LIBGUESTFS_TRACE=1
root@5dde0aef5d2e:/# libguestfs-test-tool
Expected result
===============
The libguestfs-test-tool passes and I can use it on s390x.
To check if qemu on s390x works independently from libguestfs, I use this
command:
root@5dde0aef5d2e:/# qemu-system-s390x \
-enable-kvm \
-nographic \
-kernel /boot/vmlinuz-4.4.0-119-generic \
-initrd /boot/initrd.img-4.4.0-119-generic \
-m 1G \
-M s390-ccw-virtio
[...] # boot
BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
Actual result
=============
libguestfs instructs qemu to use pci devices and serial consoles
which doesn't work on s390x, e.g.:
root@5dde0aef5d2e:/# libguestfs-test-tool
************************************************************
* IMPORTANT NOTICE
*
* When reporting bugs, include the COMPLETE, UNEDITED
* output below in your bug report.
*
************************************************************
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
LIBGUESTFS_DEBUG=1
LIBGUESTFS_TRACE=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SELinux: sh: 1: getenforce: not found
libguestfs: trace: add_drive_scratch 104857600
libguestfs: trace: get_tmpdir
libguestfs: trace: get_tmpdir = "/tmp"
libguestfs: trace: disk_create "/tmp/libguestfs82Gj1d/scratch.1" "raw" 104857600
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/tmp/libguestfs82Gj1d/scratch.1" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: get_append
libguestfs: trace: get_append = "NULL"
guestfs_get_append: (null)
libguestfs: trace: get_autosync
libguestfs: trace: get_autosync = 1
guestfs_get_autosync: 1
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "direct"
guestfs_get_backend: direct
libguestfs: trace: get_backend_settings
libguestfs: trace: get_backend_settings = []
guestfs_get_backend_settings: []
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/var/tmp"
guestfs_get_cachedir: /var/tmp
libguestfs: trace: get_direct
libguestfs: trace: get_direct = 0
guestfs_get_direct: 0
libguestfs: trace: get_hv
libguestfs: trace: get_hv = "/usr/bin/qemu-system-s390x"
guestfs_get_hv: /usr/bin/qemu-system-s390x
libguestfs: trace: get_memsize
libguestfs: trace: get_memsize = 500
guestfs_get_memsize: 500
libguestfs: trace: get_network
libguestfs: trace: get_network = 0
guestfs_get_network: 0
libguestfs: trace: get_path
libguestfs: trace: get_path = "/usr/lib/s390x-linux-gnu/guestfs"
guestfs_get_path: /usr/lib/s390x-linux-gnu/guestfs
libguestfs: trace: get_pgroup
libguestfs: trace: get_pgroup = 0
guestfs_get_pgroup: 0
libguestfs: trace: get_program
libguestfs: trace: get_program = "libguestfs-test-tool"
guestfs_get_program: libguestfs-test-tool
libguestfs: trace: get_recovery_proc
libguestfs: trace: get_recovery_proc = 1
guestfs_get_recovery_proc: 1
libguestfs: trace: get_selinux
libguestfs: trace: get_selinux = 0
guestfs_get_selinux: 0
libguestfs: trace: get_smp
libguestfs: trace: get_smp = 1
guestfs_get_smp: 1
libguestfs: trace: get_tmpdir
libguestfs: trace: get_tmpdir = "/tmp"
guestfs_get_tmpdir: /tmp
libguestfs: trace: get_trace
libguestfs: trace: get_trace = 1
guestfs_get_trace: 1
libguestfs: trace: get_verbose
libguestfs: trace: get_verbose = 1
guestfs_get_verbose: 1
host_cpu: s390x
Launching appliance, timeout set to 600 seconds.
libguestfs: trace: launch
libguestfs: trace: version
libguestfs: trace: version = <struct guestfs_version *>
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "direct"
libguestfs: launch: program=libguestfs-test-tool
libguestfs: launch: version=1.32.2
libguestfs: launch: backend registered: unix
libguestfs: launch: backend registered: uml
libguestfs: launch: backend registered: libvirt
libguestfs: launch: backend registered: direct
libguestfs: launch: backend=direct
libguestfs: launch: tmpdir=/tmp/libguestfs82Gj1d
libguestfs: launch: umask=0022
libguestfs: launch: euid=0
libguestfs: trace: get_backend_setting "force_tcg"
libguestfs: trace: get_backend_setting = NULL (error)
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/var/tmp"
libguestfs: [00000ms] begin building supermin appliance
libguestfs: [00000ms] run supermin
libguestfs: command: run: /usr/bin/supermin
libguestfs: command: run: \ --build
libguestfs: command: run: \ --verbose
libguestfs: command: run: \ --if-newer
libguestfs: command: run: \ --lock /var/tmp/.guestfs-0/lock
libguestfs: command: run: \ --copy-kernel
libguestfs: command: run: \ -f ext2
libguestfs: command: run: \ --host-cpu s390x
libguestfs: command: run: \ /usr/lib/s390x-linux-gnu/guestfs/supermin.d
libguestfs: command: run: \ -o /var/tmp/.guestfs-0/appliance.d
supermin: version: 5.1.14
supermin: package handler: debian/dpkg
supermin: acquiring lock on /var/tmp/.guestfs-0/lock
supermin: build: /usr/lib/s390x-linux-gnu/guestfs/supermin.d
supermin: reading the supermin appliance
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/base.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/daemon.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/excludefiles type uncompressed excludefiles
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/hostfiles type uncompressed hostfiles
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/init.tar.gz type gzip base image (tar)
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-hfsplus type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-reiserfs type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/packages-xfs type uncompressed packages
supermin: build: visiting /usr/lib/s390x-linux-gnu/guestfs/supermin.d/udev-rules.tar.gz type gzip base image (tar)
supermin: mapping package names to installed packages
supermin: resolving full list of package dependencies
supermin: build: 194 packages, including dependencies
supermin: build: 6751 files
supermin: build: 3694 files, after matching excludefiles
supermin: build: 3696 files, after adding hostfiles
supermin: build: 3696 files, after removing unreadable files
supermin: build: 3700 files, after munging
supermin: kernel: picked kernel vmlinuz-4.4.0-119-generic
supermin: kernel: picked modules path /lib/modules/4.4.0-119-generic
supermin: kernel: kernel_version 4.4.0-119-generic
supermin: kernel: modules /lib/modules/4.4.0-119-generic
supermin: ext2: creating empty ext2 filesystem '/var/tmp/.guestfs-0/appliance.d.s5hkw6ja/root'
supermin: ext2: populating from base image
supermin: ext2: copying files from host filesystem
supermin: ext2: copying kernel modules
supermin: ext2: creating minimal initrd '/var/tmp/.guestfs-0/appliance.d.s5hkw6ja/initrd'
supermin: ext2: wrote 9 modules to minimal initrd
supermin: renaming /var/tmp/.guestfs-0/appliance.d.s5hkw6ja to /var/tmp/.guestfs-0/appliance.d
libguestfs: [01090ms] finished building supermin appliance
libguestfs: [01090ms] begin testing qemu features
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -help
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -version
libguestfs: qemu version 2.5
libguestfs: command: run: /usr/bin/qemu-system-s390x
libguestfs: command: run: \ -display none
libguestfs: command: run: \ -machine accel=kvm:tcg
libguestfs: command: run: \ -device ?
libguestfs: [01166ms] finished testing qemu features
libguestfs: trace: get_backend_setting "gdb"
libguestfs: trace: get_backend_setting = NULL (error)
[01172ms] /usr/bin/qemu-system-s390x \
-global virtio-blk-pci.scsi=off \
-nodefconfig \
-enable-fips \
-nodefaults \
-display none \
-machine accel=kvm:tcg \
-cpu host \
-m 500 \
-no-reboot \
-rtc driftfix=slew \
-global kvm-pit.lost_tick_policy=discard \
-kernel /var/tmp/.guestfs-0/appliance.d/kernel \
-initrd /var/tmp/.guestfs-0/appliance.d/initrd \
-device virtio-scsi-pci,id=scsi \
-drive file=/tmp/libguestfs82Gj1d/scratch.1,cache=unsafe,format=raw,id=hd0,if=none \
-device scsi-hd,drive=hd0 \
-drive file=/var/tmp/.guestfs-0/appliance.d/root,snapshot=on,id=appliance,cache=unsafe,if=none \
-device scsi-hd,drive=appliance \
-device virtio-serial-pci \
-serial stdio \
-chardev socket,path=/tmp/libguestfs82Gj1d/guestfsd.sock,id=channel0 \
-device virtserialport,chardev=channel0,name=org.libguestfs.channel.0 \
-append 'panic=1 console=ttyS0 udevtimeout=6000 udev.event-timeout=6000 no_timer_check acpi=off printk.time=1 cgroup_disable=memory root=/dev/sdb selinux=0 guestfs_verbose=1 TERM=xterm'
qemu-system-s390x: Warning: global kvm-pit.lost_tick_policy has invalid class name
Alarm clock
Environment
===========
This affects ubuntu 16.04 (see below)
host
----
$ lsb_release -a
LSB Version: core-9.20160110ubuntu0.2-noarch:core-9.20160110ubuntu0.2-s390x:printing-9.20160110ubuntu0.2-noarch:printing-9.20160110ubuntu0.2-s390x:security-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-s390x
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
container
---------
root@5dde0aef5d2e:/# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
root@5dde0aef5d2e:/# apt-cache policy libguestfs-tools
libguestfs-tools:
Installed: 1:1.32.2-4ubuntu2
Candidate: 1:1.32.2-4ubuntu2
Version table:
*** 1:1.32.2-4ubuntu2 500
500 http://ports.ubuntu.com/ubuntu-ports xenial/universe s390x Packages
100 /var/lib/dpkg/status
Additional information
======================
Please be aware that there this is a known libguestfs upstream bug [1]
which is already fixed and backported by RedHat [2][3] and was the
trigger for a patch series on the libguestfs mailing list [4]. As an
example, the latest known needed patch is [5]. As a smoke test, in case
the libguestfs-test-tool result was a false positive, I used the python
binding code in Appendix A below, which is based on [6].
FWIW, I checked Ubuntu 18.04 (beta), and it doesn't work there too.
The packaged version of libguestfs is v1.36 in 18.04 bionic beaver,
which is too old (and/or doesn't contain the needed backports).
References
==========
[1] Bug 1376547 - qemu-system-s390x: -device isa-serial,chardev=charserial0,
id=serial0: 'isa-serial' is not a valid device model name
https://bugzilla.redhat.com/show_bug.cgi?id=1376547
[2] [Private] Bug 1479526 - [RFE] libguestfs for z Systems
https://bugzilla.redhat.com/show_bug.cgi?id=1479526
[3] The RHEL7.5 branch of libguestfs with backports to v1.36
https://github.com/libguestfs/libguestfs/tree/rhel-7.5
[4] The patch series of libguestfs on s390x:
https://www.redhat.com/archives/libguestfs/2017-May/msg00066.html
[5] Fix of an x86 specific item to enable s390x in v1.37.22
https://github.com/libguestfs/libguestfs/commit/5b60dd4eff02f48d344bcdad0d4bad4676ca9168
[6] https://rwmj.wordpress.com/2010/02/01/libguestfs-python-example/
Appendix A
==========
Smoke test, based on the example from the author of libguestfs [6]:
root@26248e573a87:/# cat smoke.py
#!/usr/bin/python
# To see the Python docs, do: help (guestfs)
# To see the general docs http://libguestfs.org/guestfs.3.html
# For FAQ see http://libguestfs.org/FAQ.html
import os
import guestfs
g = guestfs.GuestFS()
f = open("/tmp/test.img", "w")
f.truncate(500 * 1024 * 1024)
f.close()
g.add_drive("/tmp/test.img")
g.launch()
g.part_disk("/dev/sda", "mbr")
g.mkfs("ext2", "/dev/sda1")
g.mount("/dev/sda1", "/")
f = open("/tmp/ks.cfg", "w")
f.write("# this would be the kickstart file\n")
f.write("#\n")
f.write ("# end of file\n")
f.close()
g.upload("/tmp/ks.cfg", "/ks.cfg")
g.sync()
g.umount_all()
== Comment: #1 - Markus Zoeller <mzoeller@de.ibm.com> - 2018-04-20 06:51:10 ==
With the Debian Sid repository I could install libguestfs v1.38 in an
Ubuntu 18.04 (bionic beaver) container, all on s390x:
[mz@s390xhost]$ docker run -it --privileged --rm s390x/ubuntu:18.04 bash
$ apt update
$ apt install -y vim
$ apt-cache policy libguestfs-tools
$ apt install -y software-properties-common \
debian-archive-keyring \
dirmngr
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
$ add-apt-repository "deb http://ftp.de.debian.org/debian sid main"
$ cat << EOF > /etc/apt/preferences.d/libguestfs.pref
# Note: 2 blank lines are required between entries
Package: *
Pin: release a=bionic
Pin-Priority: 500
Package: *
Pin: origin "ftp.de.debian.org"
Pin-Priority: 300
# Pattern includes 'python-guestfs' and 'libguestfs-tools' and similarily named dependencies
Package: *guestfs*
Pin: origin "ftp.de.debian.org"
Pin-Priority: 700
EOF
$ cat /etc/apt/preferences.d/libguestfs.pref
$ apt update
$ apt-cache policy libguestfs-tools
$ DEBIAN_FRONTEND=noninteractive apt install -y \
libguestfs-tools \
python-libguestfs \
linux-image-generic \
qemu-system \
qemu-kvm
$ apt-cache policy libguestfs-tools
$ export LIBGUESTFS_DEBUG=1
$ export LIBGUESTFS_TRACE=1
$ libguestfs-test-tool
[...]
===== TEST FINISHED OK =====
This verifies that libguestfs v1.38 has the needed code to work on s390x. |
|
2018-08-13 08:06:43 |
Łukasz Zemczak |
libguestfs (Ubuntu Bionic): status |
In Progress |
Fix Committed |
|
2018-08-13 08:06:45 |
Łukasz Zemczak |
bug |
|
|
added subscriber Ubuntu Stable Release Updates Team |
2018-08-13 08:06:47 |
Łukasz Zemczak |
bug |
|
|
added subscriber SRU Verification |
2018-08-13 08:06:51 |
Łukasz Zemczak |
tags |
architecture-s39064 bugnameltc-166979 id-5b04b5dd6052dc18608ce46a severity-high targetmilestone-inin1604 |
architecture-s39064 bugnameltc-166979 id-5b04b5dd6052dc18608ce46a severity-high targetmilestone-inin1604 verification-needed verification-needed-bionic |
|
2018-08-13 08:52:32 |
Christian Ehrhardt |
tags |
architecture-s39064 bugnameltc-166979 id-5b04b5dd6052dc18608ce46a severity-high targetmilestone-inin1604 verification-needed verification-needed-bionic |
architecture-s39064 bugnameltc-166979 id-5b04b5dd6052dc18608ce46a severity-high targetmilestone-inin1604 verification-done verification-done-bionic |
|
2018-08-20 10:55:18 |
Łukasz Zemczak |
removed subscriber Ubuntu Stable Release Updates Team |
|
|
|
2018-08-20 10:55:16 |
Launchpad Janitor |
libguestfs (Ubuntu Bionic): status |
Fix Committed |
Fix Released |
|
2018-08-20 17:25:56 |
Frank Heimes |
ubuntu-z-systems: status |
In Progress |
Fix Released |
|