Re: nspawn for rawhide?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* Stephen Smoogen:

> On Fri, 19 Aug 2022 at 05:44, Florian Weimer <fweimer@xxxxxxxxxx> wrote:
>
>  * Kevin Fenzi:
>
>  > Greetings everyone. 
>  >
>  > Many years ago mock introduced and then made default it's isolation to
>  > use systemd-nspawn instead of chroot. Shortly after the nspawn isolation
>  > was added, it was used in fedoraproject koji builds, but there were
>  > issues and since then the fedoraproject koji has defaulted to using
>  > chroot isolation. 
>  >
>  > Releng has had a ticket open for a long time to switch
>  > ( https://pagure.io/releng/issue/6967 )
>  >
>  > I think the two items listed there (kernel bind mounts and loop devices)
>  > have long since been fixed, so I would like to propose we switch rawhide
>  > to using nspawn and see if any other issues show up. 
>
>  What's the version of nspawn that will be used here?  Presumably it's
>  not the rawhide version, but the host version?
>
> Currently I think all builders are Fedora 36. 

Okay, I tried to reproduce this environment with the mock in Fedora 36
and the fedora-rawhide-x86_64 configuration.  This tester:

#include <err.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/syscall.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>

static void
noop_handler (int signo)
{
}

int
main (int argc, char **argv)
{
  if (argc != 3)
    {
      fprintf (stderr, "usage: %s FIRST-SYSCALL LAST-SYSCALL\n", argv[0]);
      return 1;
    }
  int first_syscall = atoi (argv[1]);
  if (first_syscall <= 0)
    errx (1, "invalid system call number: %s", argv[1]);
  int last_syscall = atoi (argv[2]);
  if (last_syscall <= 0)
    errx (1, "invalid system call number: %s", argv[2]);

  if (signal (SIGALRM, noop_handler) == SIG_ERR)
    err (1, "signal (SIGALRM)");

  volatile long int *results = mmap (NULL, 2 * sizeof (*results),
                                     PROT_READ | PROT_WRITE,
                                     MAP_ANONYMOUS | MAP_SHARED, -1, 0);
  if (results == MAP_FAILED)
    err (1, "mmap");

  for (int nr = first_syscall; nr <= last_syscall; ++nr)
    {
      results[0] = -1;
      results[1] = 0;
      pid_t pid = fork ();
      if (pid < 0)
        err (1, "fork");
      if (pid == 0)
        {
          errno = 0;
          results[0] = syscall (nr, 0, 0, 0, 0, 0, 0, 0);
          results[1] = errno;
          _exit (0);
        }

      alarm (1);
      int status;
      int waitpid_ret = waitpid (pid, &status, 0);
      int waitpid_error = errno;
      alarm (0);

      if (waitpid_ret < 0)
        {
          if (errno != EINTR)
            {
              errno = waitpid_error;
              err (1, "waitpid");
            }
          else
            printf ("%d: timeout\n", nr);
        }
      else if (results[1] != ENOSYS)
        {
          errno = results[1];
          printf("%d: %ld (errno %ld [%#m])\n", nr, results[0], results[1]);
        }
    }
}

Produces this output when run with arguments 330 800:

330: 1 (errno 0 [Success])
331: 0 (errno 0 [Success])
332: -1 (errno 14 [Bad address])
333: -1 (errno 22 [Invalid argument])
334: -1 (errno 22 [Invalid argument])
424: -1 (errno 9 [Bad file descriptor])
425: -1 (errno 14 [Bad address])
426: -1 (errno 95 [Operation not supported])
427: -1 (errno 95 [Operation not supported])
428: -1 (errno 14 [Bad address])
429: -1 (errno 14 [Bad address])
430: -1 (errno 14 [Bad address])
431: -1 (errno 22 [Invalid argument])
432: -1 (errno 22 [Invalid argument])
433: -1 (errno 14 [Bad address])
434: -1 (errno 22 [Invalid argument])
435: -1 (errno 22 [Invalid argument])
436: 0 (errno 0 [Success])
437: -1 (errno 22 [Invalid argument])
438: -1 (errno 9 [Bad file descriptor])
439: -1 (errno 14 [Bad address])
440: -1 (errno 9 [Bad file descriptor])
441: -1 (errno 22 [Invalid argument])
442: -1 (errno 22 [Invalid argument])
444: -1 (errno 14 [Bad address])
445: -1 (errno 77 [File descriptor in bad state])
446: -1 (errno 77 [File descriptor in bad state])
448: -1 (errno 9 [Bad file descriptor])
449: -1 (errno 22 [Invalid argument])
450: 0 (errno 0 [Success])

This looks very good, no problematic EPERM errors.  So I don't expect
this type of system call compatibility issues from the switch.

Thanks,
Florian
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx
Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux