[systemd-devel] systemd-nspawn image

poma pomidorabelisima at gmail.com
Wed Apr 12 09:53:36 UTC 2017


On 12.04.2017 11:05, Lennart Poettering wrote:
> On Tue, 11.04.17 17:22, poma (pomidorabelisima at gmail.com) wrote:
> 
>> Hello
>>
>> The title doesn't quite work;
>>
>> # qemu-img --version
>> qemu-img version 2.6.2 (qemu-2.6.2-7.fc24), Copyright (c) 2004-2008 Fabrice Bellard
>>
>> # qemu-img convert fedora25.qcow2 fedora25.raw
>>
>> # file fedora25.*
>> fedora25.qcow2: QEMU QCOW Image (v3), 21474836480 bytes
>> fedora25.raw:   DOS/MBR boot sector
>>
>> # fdisk -l fedora25.raw
>> Disk fedora25.raw: 20 GiB, 21474836480 bytes, 41943040 sectors
>> Units: sectors of 1 * 512 = 512 bytes
>> Sector size (logical/physical): 512 bytes / 512 bytes
>> I/O size (minimum/optimal): 512 bytes / 512 bytes
>> Disklabel type: dos
>> Disk identifier: 0x13bd2a55
>>
>> Device        Boot   Start      End  Sectors Size Id Type
>> fedora25.raw1 *       2048  2099199  2097152   1G 83 Linux
>> fedora25.raw2      2099200  6293503  4194304   2G 82 Linux swap / Solaris
>> fedora25.raw3      6293504 41943039 35649536  17G 83 Linux
>>
>> # systemd-nspawn --version
>> systemd 229
>> +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN
>>
>> # systemd-nspawn --machine Fedora25 --image fedora25.raw
>> Spawning container Fedora25 on /indian/cocos/fedora25.raw.
>> Press ^] three times within 1s to kill container.
>> Timezone Indian/Cocos does not exist in container, not updating container timezone.
>> execv() failed: No such file or directory
>> Container Fedora25 failed with error code 1.
>>
>> What could be a brake?
> 
> I am not sure what kind of image that is, but have you checked it
> contains a proper /bin/sh and everything? Try "strace -o log -f
> -s500 systemd-nspawn ..." to see the binaries it ries to execv() and
> can't find...
> 

It's rather standard disk image, part of the libvirt installation.

> If you invoke npsawn with those parameters it will execute a shell in
> the container, but that shell must be installed as /bin/sh in its
> image. And that doesn't appear to be the case for you...
> 
> Note that nspawn doesn't really support MBR parition tables with
> multiple bootable Linux partitions anyway, because we don't know which
> one would be the root partition of that. This is explicitly documented
> btw, in the "--image=" bit of the man page.
> 

In fact it seems that it supports, but of course in the context, see below

> My educated guess is that partition 1 of your image is a boot
> partition, and it is marked with the MBR bootable flag. nspawn uses
> that as root partition, but can't find /bin/sh hence.
> 
> Use an image with GPT partition table, or an image containing a single
> MBR partition marked "bootable" of type 83, or even an image
> containing not partition at all and just a file system.
> 
> Lennart
> 

This will do the trick:

# sfdisk -A fedora25.raw
fedora25.raw1
# sfdisk -A fedora25.raw 3
The bootable flag on partition 1 is disabled now.
The bootable flag on partition 3 is enabled now.

The partition table has been altered.
Syncing disks.
# sfdisk -A fedora25.raw
fedora25.raw3


# man 1 systemd-nspawn
...
OPTIONS
       ...
       -i, --image=
           Disk image to mount the root directory for the container from. Takes a path to a regular file or to a block device node. The file
           or block device must contain either:

           ยท   An MBR partition table with a single partition of type 0x83 that is marked bootable.

           ...

However,
considering the actual relevance of the active "root" partition,
i.e. since this also works:

# sfdisk -A fedora25.raw
fedora25.raw3

# sfdisk -A fedora25.raw 1 3
The bootable flag on partition 3 is disabled now.
The bootable flag on partition 1 is enabled now.
The bootable flag on partition 3 is enabled now.

The partition table has been altered.
Syncing disks.
# sfdisk -A fedora25.raw
fedora25.raw1
fedora25.raw3

i.e.
# fdisk -l fedora25.raw | tail -n4
Device        Boot   Start      End  Sectors Size Id Type
fedora25.raw1 *       2048  2099199  2097152   1G 83 Linux
fedora25.raw2      2099200  6293503  4194304   2G 82 Linux swap / Solaris
fedora25.raw3 *    6293504 41943039 35649536  17G 83 Linux

...
perhaps systemd-nspawn.1 should state:
"An MBR partition table with a '/' partition of type 0x83 that is marked bootable."



More information about the systemd-devel mailing list