diff mbox series

test: use virt-make-fs to build image

Message ID 20200713221534.433297-1-xypron.glpk@gmx.de
State Accepted, archived
Commit 53ce9a6ed98b69a82e54a28254b014e480fc98ca
Headers show
Series test: use virt-make-fs to build image | expand

Commit Message

Heinrich Schuchardt July 13, 2020, 10:15 p.m. UTC
Avoid sudo for test/py/tests/test_efi_secboot by using virt-make-fs.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
 test/py/tests/test_efi_secboot/conftest.py | 27 ++++------------------
 test/py/tests/test_efi_secboot/defs.py     |  7 ------
 2 files changed, 4 insertions(+), 30 deletions(-)

--
2.27.0

Comments

AKASHI Takahiro July 13, 2020, 11:02 p.m. UTC | #1
Heinrich,

On Tue, Jul 14, 2020 at 12:15:34AM +0200, Heinrich Schuchardt wrote:
> Avoid sudo for test/py/tests/test_efi_secboot by using virt-make-fs.

Have you read this?
https://lists.denx.de/pipermail/u-boot/2020-July/419345.html

-Takahiro Akashi

> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  test/py/tests/test_efi_secboot/conftest.py | 27 ++++------------------
>  test/py/tests/test_efi_secboot/defs.py     |  7 ------
>  2 files changed, 4 insertions(+), 30 deletions(-)
> 
> diff --git a/test/py/tests/test_efi_secboot/conftest.py b/test/py/tests/test_efi_secboot/conftest.py
> index 71ef723e59..c6709700a8 100644
> --- a/test/py/tests/test_efi_secboot/conftest.py
> +++ b/test/py/tests/test_efi_secboot/conftest.py
> @@ -38,34 +38,15 @@ def efi_boot_env(request, u_boot_config):
> 
>      image_path = u_boot_config.persistent_data_dir
>      image_path = image_path + '/' + EFI_SECBOOT_IMAGE_NAME
> -    image_size = EFI_SECBOOT_IMAGE_SIZE
> -    part_size = EFI_SECBOOT_PART_SIZE
> -    fs_type = EFI_SECBOOT_FS_TYPE
> 
>      if HELLO_PATH == '':
>          HELLO_PATH = u_boot_config.build_dir + '/lib/efi_loader/helloworld.efi'
> 
>      try:
> -        mnt_point = u_boot_config.persistent_data_dir + '/mnt_efisecure'
> +        mnt_point = u_boot_config.build_dir + '/mnt_efisecure'
> +        check_call('rm -rf {}'.format(mnt_point), shell=True)
>          check_call('mkdir -p {}'.format(mnt_point), shell=True)
> 
> -        # create a disk/partition
> -        check_call('dd if=/dev/zero of=%s bs=1MiB count=%d'
> -                   % (image_path, image_size), shell=True)
> -        check_call('sgdisk %s -n 1:0:+%dMiB'
> -                   % (image_path, part_size), shell=True)
> -        # create a file system
> -        check_call('dd if=/dev/zero of=%s.tmp bs=1MiB count=%d'
> -                   % (image_path, part_size), shell=True)
> -        check_call('mkfs -t %s %s.tmp' % (fs_type, image_path), shell=True)
> -        check_call('dd if=%s.tmp of=%s bs=1MiB seek=1 count=%d conv=notrunc'
> -                   % (image_path, image_path, 1), shell=True)
> -        check_call('rm %s.tmp' % image_path, shell=True)
> -        loop_dev = check_output('sudo losetup -o 1MiB --sizelimit %dMiB --show -f %s | tr -d "\n"'
> -                                % (part_size, image_path), shell=True).decode()
> -        check_output('sudo mount -t %s -o umask=000 %s %s'
> -                     % (fs_type, loop_dev, mnt_point), shell=True)
> -
>          # suffix
>          # *.key: RSA private key in PEM
>          # *.crt: X509 certificate (self-signed) in PEM
> @@ -145,8 +126,8 @@ def efi_boot_env(request, u_boot_config):
>                     % (mnt_point, EFITOOLS_PATH),
>                     shell=True)
> 
> -        check_call('sudo umount %s' % loop_dev, shell=True)
> -        check_call('sudo losetup -d %s' % loop_dev, shell=True)
> +        check_call('virt-make-fs --partition=gpt --size=+1M --type=vfat {} {}'.format(mnt_point, image_path), shell=True)
> +        check_call('rm -rf {}'.format(mnt_point), shell=True)
> 
>      except CalledProcessError as exception:
>          pytest.skip('Setup failed: %s' % exception.cmd)
> diff --git a/test/py/tests/test_efi_secboot/defs.py b/test/py/tests/test_efi_secboot/defs.py
> index 099f453979..ba6b9f391e 100644
> --- a/test/py/tests/test_efi_secboot/defs.py
> +++ b/test/py/tests/test_efi_secboot/defs.py
> @@ -3,13 +3,6 @@
>  # Disk image name
>  EFI_SECBOOT_IMAGE_NAME = 'test_efi_secboot.img'
> 
> -# Size in MiB
> -EFI_SECBOOT_IMAGE_SIZE = 16
> -EFI_SECBOOT_PART_SIZE = 8
> -
> -# Partition file system type
> -EFI_SECBOOT_FS_TYPE = 'vfat'
> -
>  # Owner guid
>  GUID = '11111111-2222-3333-4444-123456789abc'
> 
> --
> 2.27.0
>
Heinrich Schuchardt July 13, 2020, 11:18 p.m. UTC | #2
Am 14. Juli 2020 01:02:07 MESZ schrieb AKASHI Takahiro <takahiro.akashi@linaro.org>:
>Heinrich,
>
>On Tue, Jul 14, 2020 at 12:15:34AM +0200, Heinrich Schuchardt wrote:
>> Avoid sudo for test/py/tests/test_efi_secboot by using virt-make-fs.
>
>Have you read this?
>https://lists.denx.de/pipermail/u-boot/2020-July/419345.html
>
>-Takahiro Akashi

Just put chmod 644 /boot/vmlinu* into your update-initramfs hook directory /etc/initramfs-tools and complain to Ubuntu maintainers about them breaking their own packages.

Hook scripts are described here: http://manpages.ubuntu.com/manpages/xenial/man8/initramfs-tools.8.html

>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>>  test/py/tests/test_efi_secboot/conftest.py | 27
>++++------------------
>>  test/py/tests/test_efi_secboot/defs.py     |  7 ------
>>  2 files changed, 4 insertions(+), 30 deletions(-)
>> 
>> diff --git a/test/py/tests/test_efi_secboot/conftest.py
>b/test/py/tests/test_efi_secboot/conftest.py
>> index 71ef723e59..c6709700a8 100644
>> --- a/test/py/tests/test_efi_secboot/conftest.py
>> +++ b/test/py/tests/test_efi_secboot/conftest.py
>> @@ -38,34 +38,15 @@ def efi_boot_env(request, u_boot_config):
>> 
>>      image_path = u_boot_config.persistent_data_dir
>>      image_path = image_path + '/' + EFI_SECBOOT_IMAGE_NAME
>> -    image_size = EFI_SECBOOT_IMAGE_SIZE
>> -    part_size = EFI_SECBOOT_PART_SIZE
>> -    fs_type = EFI_SECBOOT_FS_TYPE
>> 
>>      if HELLO_PATH == '':
>>          HELLO_PATH = u_boot_config.build_dir +
>'/lib/efi_loader/helloworld.efi'
>> 
>>      try:
>> -        mnt_point = u_boot_config.persistent_data_dir +
>'/mnt_efisecure'
>> +        mnt_point = u_boot_config.build_dir + '/mnt_efisecure'
>> +        check_call('rm -rf {}'.format(mnt_point), shell=True)
>>          check_call('mkdir -p {}'.format(mnt_point), shell=True)
>> 
>> -        # create a disk/partition
>> -        check_call('dd if=/dev/zero of=%s bs=1MiB count=%d'
>> -                   % (image_path, image_size), shell=True)
>> -        check_call('sgdisk %s -n 1:0:+%dMiB'
>> -                   % (image_path, part_size), shell=True)
>> -        # create a file system
>> -        check_call('dd if=/dev/zero of=%s.tmp bs=1MiB count=%d'
>> -                   % (image_path, part_size), shell=True)
>> -        check_call('mkfs -t %s %s.tmp' % (fs_type, image_path),
>shell=True)
>> -        check_call('dd if=%s.tmp of=%s bs=1MiB seek=1 count=%d
>conv=notrunc'
>> -                   % (image_path, image_path, 1), shell=True)
>> -        check_call('rm %s.tmp' % image_path, shell=True)
>> -        loop_dev = check_output('sudo losetup -o 1MiB --sizelimit
>%dMiB --show -f %s | tr -d "\n"'
>> -                                % (part_size, image_path),
>shell=True).decode()
>> -        check_output('sudo mount -t %s -o umask=000 %s %s'
>> -                     % (fs_type, loop_dev, mnt_point), shell=True)
>> -
>>          # suffix
>>          # *.key: RSA private key in PEM
>>          # *.crt: X509 certificate (self-signed) in PEM
>> @@ -145,8 +126,8 @@ def efi_boot_env(request, u_boot_config):
>>                     % (mnt_point, EFITOOLS_PATH),
>>                     shell=True)
>> 
>> -        check_call('sudo umount %s' % loop_dev, shell=True)
>> -        check_call('sudo losetup -d %s' % loop_dev, shell=True)
>> +        check_call('virt-make-fs --partition=gpt --size=+1M
>--type=vfat {} {}'.format(mnt_point, image_path), shell=True)
>> +        check_call('rm -rf {}'.format(mnt_point), shell=True)
>> 
>>      except CalledProcessError as exception:
>>          pytest.skip('Setup failed: %s' % exception.cmd)
>> diff --git a/test/py/tests/test_efi_secboot/defs.py
>b/test/py/tests/test_efi_secboot/defs.py
>> index 099f453979..ba6b9f391e 100644
>> --- a/test/py/tests/test_efi_secboot/defs.py
>> +++ b/test/py/tests/test_efi_secboot/defs.py
>> @@ -3,13 +3,6 @@
>>  # Disk image name
>>  EFI_SECBOOT_IMAGE_NAME = 'test_efi_secboot.img'
>> 
>> -# Size in MiB
>> -EFI_SECBOOT_IMAGE_SIZE = 16
>> -EFI_SECBOOT_PART_SIZE = 8
>> -
>> -# Partition file system type
>> -EFI_SECBOOT_FS_TYPE = 'vfat'
>> -
>>  # Owner guid
>>  GUID = '11111111-2222-3333-4444-123456789abc'
>> 
>> --
>> 2.27.0
>>
AKASHI Takahiro July 15, 2020, 4:19 a.m. UTC | #3
Heinrich,

On Tue, Jul 14, 2020 at 01:18:04AM +0200, Heinrich Schuchardt wrote:
> Am 14. Juli 2020 01:02:07 MESZ schrieb AKASHI Takahiro <takahiro.akashi@linaro.org>:
> >Heinrich,
> >
> >On Tue, Jul 14, 2020 at 12:15:34AM +0200, Heinrich Schuchardt wrote:
> >> Avoid sudo for test/py/tests/test_efi_secboot by using virt-make-fs.
> >
> >Have you read this?
> >https://lists.denx.de/pipermail/u-boot/2020-July/419345.html
> >
> >-Takahiro Akashi
> 
> Just put chmod 644 /boot/vmlinu* into your update-initramfs hook directory /etc/initramfs-tools and complain to Ubuntu maintainers about them breaking their own packages.

If this solves all the issues, that's fine.
But if you require this extra step to run the test, you should
describe it explicitly somewhere. Otherwise, people can get confused.

I believe that it would be still useful to have a fall-back
method of "sudo" version.

> Hook scripts are described here: http://manpages.ubuntu.com/manpages/xenial/man8/initramfs-tools.8.html
> 
> >
> >> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> >> ---
> >>  test/py/tests/test_efi_secboot/conftest.py | 27
> >++++------------------
> >>  test/py/tests/test_efi_secboot/defs.py     |  7 ------
> >>  2 files changed, 4 insertions(+), 30 deletions(-)
> >> 
> >> diff --git a/test/py/tests/test_efi_secboot/conftest.py
> >b/test/py/tests/test_efi_secboot/conftest.py
> >> index 71ef723e59..c6709700a8 100644
> >> --- a/test/py/tests/test_efi_secboot/conftest.py
> >> +++ b/test/py/tests/test_efi_secboot/conftest.py
> >> @@ -38,34 +38,15 @@ def efi_boot_env(request, u_boot_config):
> >> 
> >>      image_path = u_boot_config.persistent_data_dir
> >>      image_path = image_path + '/' + EFI_SECBOOT_IMAGE_NAME
> >> -    image_size = EFI_SECBOOT_IMAGE_SIZE
> >> -    part_size = EFI_SECBOOT_PART_SIZE
> >> -    fs_type = EFI_SECBOOT_FS_TYPE
> >> 
> >>      if HELLO_PATH == '':
> >>          HELLO_PATH = u_boot_config.build_dir +
> >'/lib/efi_loader/helloworld.efi'
> >> 
> >>      try:
> >> -        mnt_point = u_boot_config.persistent_data_dir +
> >'/mnt_efisecure'
> >> +        mnt_point = u_boot_config.build_dir + '/mnt_efisecure'

Please use persistent_data_dir here as a work directory.
'build_dir' is for U-Boot build.

-Takahiro Akashi


> >> +        check_call('rm -rf {}'.format(mnt_point), shell=True)
> >>          check_call('mkdir -p {}'.format(mnt_point), shell=True)
> >> 
> >> -        # create a disk/partition
> >> -        check_call('dd if=/dev/zero of=%s bs=1MiB count=%d'
> >> -                   % (image_path, image_size), shell=True)
> >> -        check_call('sgdisk %s -n 1:0:+%dMiB'
> >> -                   % (image_path, part_size), shell=True)
> >> -        # create a file system
> >> -        check_call('dd if=/dev/zero of=%s.tmp bs=1MiB count=%d'
> >> -                   % (image_path, part_size), shell=True)
> >> -        check_call('mkfs -t %s %s.tmp' % (fs_type, image_path),
> >shell=True)
> >> -        check_call('dd if=%s.tmp of=%s bs=1MiB seek=1 count=%d
> >conv=notrunc'
> >> -                   % (image_path, image_path, 1), shell=True)
> >> -        check_call('rm %s.tmp' % image_path, shell=True)
> >> -        loop_dev = check_output('sudo losetup -o 1MiB --sizelimit
> >%dMiB --show -f %s | tr -d "\n"'
> >> -                                % (part_size, image_path),
> >shell=True).decode()
> >> -        check_output('sudo mount -t %s -o umask=000 %s %s'
> >> -                     % (fs_type, loop_dev, mnt_point), shell=True)
> >> -
> >>          # suffix
> >>          # *.key: RSA private key in PEM
> >>          # *.crt: X509 certificate (self-signed) in PEM
> >> @@ -145,8 +126,8 @@ def efi_boot_env(request, u_boot_config):
> >>                     % (mnt_point, EFITOOLS_PATH),
> >>                     shell=True)
> >> 
> >> -        check_call('sudo umount %s' % loop_dev, shell=True)
> >> -        check_call('sudo losetup -d %s' % loop_dev, shell=True)
> >> +        check_call('virt-make-fs --partition=gpt --size=+1M
> >--type=vfat {} {}'.format(mnt_point, image_path), shell=True)
> >> +        check_call('rm -rf {}'.format(mnt_point), shell=True)
> >> 
> >>      except CalledProcessError as exception:
> >>          pytest.skip('Setup failed: %s' % exception.cmd)
> >> diff --git a/test/py/tests/test_efi_secboot/defs.py
> >b/test/py/tests/test_efi_secboot/defs.py
> >> index 099f453979..ba6b9f391e 100644
> >> --- a/test/py/tests/test_efi_secboot/defs.py
> >> +++ b/test/py/tests/test_efi_secboot/defs.py
> >> @@ -3,13 +3,6 @@
> >>  # Disk image name
> >>  EFI_SECBOOT_IMAGE_NAME = 'test_efi_secboot.img'
> >> 
> >> -# Size in MiB
> >> -EFI_SECBOOT_IMAGE_SIZE = 16
> >> -EFI_SECBOOT_PART_SIZE = 8
> >> -
> >> -# Partition file system type
> >> -EFI_SECBOOT_FS_TYPE = 'vfat'
> >> -
> >>  # Owner guid
> >>  GUID = '11111111-2222-3333-4444-123456789abc'
> >> 
> >> --
> >> 2.27.0
> >> 
>
Tom Rini July 15, 2020, 12:55 p.m. UTC | #4
On Wed, Jul 15, 2020 at 01:19:20PM +0900, AKASHI Takahiro wrote:
> Heinrich,
> 
> On Tue, Jul 14, 2020 at 01:18:04AM +0200, Heinrich Schuchardt wrote:
> > Am 14. Juli 2020 01:02:07 MESZ schrieb AKASHI Takahiro <takahiro.akashi@linaro.org>:
> > >Heinrich,
> > >
> > >On Tue, Jul 14, 2020 at 12:15:34AM +0200, Heinrich Schuchardt wrote:
> > >> Avoid sudo for test/py/tests/test_efi_secboot by using virt-make-fs.
> > >
> > >Have you read this?
> > >https://lists.denx.de/pipermail/u-boot/2020-July/419345.html
> > >
> > >-Takahiro Akashi
> > 
> > Just put chmod 644 /boot/vmlinu* into your update-initramfs hook directory /etc/initramfs-tools and complain to Ubuntu maintainers about them breaking their own packages.
> 
> If this solves all the issues, that's fine.
> But if you require this extra step to run the test, you should
> describe it explicitly somewhere. Otherwise, people can get confused.
> 
> I believe that it would be still useful to have a fall-back
> method of "sudo" version.

We're not dropping sudo until CI runs and passes the tests that use
guestfstools, etc, instead of sudo.  To be clear, once we fix the
current broken check that doesn't try and run sudo when guestfstools
exists but exits badly, the tests pass.  We aren't there yet with just
using guestfstools only.
AKASHI Takahiro July 16, 2020, 12:45 a.m. UTC | #5
Heinrich,

On Wed, Jul 15, 2020 at 08:55:15AM -0400, Tom Rini wrote:
> On Wed, Jul 15, 2020 at 01:19:20PM +0900, AKASHI Takahiro wrote:
> > Heinrich,
> > 
> > On Tue, Jul 14, 2020 at 01:18:04AM +0200, Heinrich Schuchardt wrote:
> > > Am 14. Juli 2020 01:02:07 MESZ schrieb AKASHI Takahiro <takahiro.akashi@linaro.org>:
> > > >Heinrich,
> > > >
> > > >On Tue, Jul 14, 2020 at 12:15:34AM +0200, Heinrich Schuchardt wrote:
> > > >> Avoid sudo for test/py/tests/test_efi_secboot by using virt-make-fs.
> > > >
> > > >Have you read this?
> > > >https://lists.denx.de/pipermail/u-boot/2020-July/419345.html
> > > >
> > > >-Takahiro Akashi
> > > 
> > > Just put chmod 644 /boot/vmlinu* into your update-initramfs hook directory /etc/initramfs-tools and complain to Ubuntu maintainers about them breaking their own packages.
> > 
> > If this solves all the issues, that's fine.
> > But if you require this extra step to run the test, you should
> > describe it explicitly somewhere. Otherwise, people can get confused.
> > 
> > I believe that it would be still useful to have a fall-back
> > method of "sudo" version.
> 
> We're not dropping sudo until CI runs and passes the tests that use
> guestfstools, etc, instead of sudo.  To be clear, once we fix the
> current broken check that doesn't try and run sudo when guestfstools
> exists but exits badly, the tests pass.  We aren't there yet with just
> using guestfstools only.

So are you going to work on this?

-Takahiro Akashi

> -- 
> Tom
diff mbox series

Patch

diff --git a/test/py/tests/test_efi_secboot/conftest.py b/test/py/tests/test_efi_secboot/conftest.py
index 71ef723e59..c6709700a8 100644
--- a/test/py/tests/test_efi_secboot/conftest.py
+++ b/test/py/tests/test_efi_secboot/conftest.py
@@ -38,34 +38,15 @@  def efi_boot_env(request, u_boot_config):

     image_path = u_boot_config.persistent_data_dir
     image_path = image_path + '/' + EFI_SECBOOT_IMAGE_NAME
-    image_size = EFI_SECBOOT_IMAGE_SIZE
-    part_size = EFI_SECBOOT_PART_SIZE
-    fs_type = EFI_SECBOOT_FS_TYPE

     if HELLO_PATH == '':
         HELLO_PATH = u_boot_config.build_dir + '/lib/efi_loader/helloworld.efi'

     try:
-        mnt_point = u_boot_config.persistent_data_dir + '/mnt_efisecure'
+        mnt_point = u_boot_config.build_dir + '/mnt_efisecure'
+        check_call('rm -rf {}'.format(mnt_point), shell=True)
         check_call('mkdir -p {}'.format(mnt_point), shell=True)

-        # create a disk/partition
-        check_call('dd if=/dev/zero of=%s bs=1MiB count=%d'
-                   % (image_path, image_size), shell=True)
-        check_call('sgdisk %s -n 1:0:+%dMiB'
-                   % (image_path, part_size), shell=True)
-        # create a file system
-        check_call('dd if=/dev/zero of=%s.tmp bs=1MiB count=%d'
-                   % (image_path, part_size), shell=True)
-        check_call('mkfs -t %s %s.tmp' % (fs_type, image_path), shell=True)
-        check_call('dd if=%s.tmp of=%s bs=1MiB seek=1 count=%d conv=notrunc'
-                   % (image_path, image_path, 1), shell=True)
-        check_call('rm %s.tmp' % image_path, shell=True)
-        loop_dev = check_output('sudo losetup -o 1MiB --sizelimit %dMiB --show -f %s | tr -d "\n"'
-                                % (part_size, image_path), shell=True).decode()
-        check_output('sudo mount -t %s -o umask=000 %s %s'
-                     % (fs_type, loop_dev, mnt_point), shell=True)
-
         # suffix
         # *.key: RSA private key in PEM
         # *.crt: X509 certificate (self-signed) in PEM
@@ -145,8 +126,8 @@  def efi_boot_env(request, u_boot_config):
                    % (mnt_point, EFITOOLS_PATH),
                    shell=True)

-        check_call('sudo umount %s' % loop_dev, shell=True)
-        check_call('sudo losetup -d %s' % loop_dev, shell=True)
+        check_call('virt-make-fs --partition=gpt --size=+1M --type=vfat {} {}'.format(mnt_point, image_path), shell=True)
+        check_call('rm -rf {}'.format(mnt_point), shell=True)

     except CalledProcessError as exception:
         pytest.skip('Setup failed: %s' % exception.cmd)
diff --git a/test/py/tests/test_efi_secboot/defs.py b/test/py/tests/test_efi_secboot/defs.py
index 099f453979..ba6b9f391e 100644
--- a/test/py/tests/test_efi_secboot/defs.py
+++ b/test/py/tests/test_efi_secboot/defs.py
@@ -3,13 +3,6 @@ 
 # Disk image name
 EFI_SECBOOT_IMAGE_NAME = 'test_efi_secboot.img'

-# Size in MiB
-EFI_SECBOOT_IMAGE_SIZE = 16
-EFI_SECBOOT_PART_SIZE = 8
-
-# Partition file system type
-EFI_SECBOOT_FS_TYPE = 'vfat'
-
 # Owner guid
 GUID = '11111111-2222-3333-4444-123456789abc'