1. 14 Aug, 2013 6 commits
    • lxc-stop: exit with 1 or 2, not -1 or -2. · b93aac46
      Serge Hallyn authored
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • cgroups: rework to handle nested containers with multiple and partial mounts · b98f7d6e
      Serge Hallyn authored
      Currently, if you create a container and use the mountcgruop hook,
      you get the /lxc/c1/c1.real cgroup mounted to /.  If you then try
      to start containers inside that container, lxc can get confused.
      This patch addresses that, by accepting that the cgroup as found
      in /proc/self/cgroup can be partially hidden by bind mounts.
      
      In this patch:
      
      Add optional 'lxc.cgroup.use' to /etc/lxc/lxc.conf to specify which
      mounted cgroup filesystems lxc should use.  So far only the cgroup
      creation respects this.
      
      Keep separate cgroup information for each cgroup mountpoint.  So if
      the caller is in devices cgroup /a but cpuset cgroup /b that should
      now be ok.
      
      Change how we decide whether to ignore failure to set devices cgroup
      settings.  Actually look to see if our current cgroup already has the
      settings.  If not, add them.
      
      Finally, the real reason for this patch: in a nested container,
      /proc/self/cgroup says nothing about where under /sys/fs/cgroup you
      might find yourself.  Handle this by searching for our pid in tasks
      files, and keep that info in the cgroup handler.
      
      Also remove all strdupa from cgroup.c (not android-friendly).
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • add lxc-user-nic · 20ab58c7
      Serge Hallyn authored
      It is meant to be run setuid-root to allow unprivileged users to
      tunnel veths from a host bridge to their containers.  The program
      looks at /etc/lxc/lxc-usernet which has entries of the form
      
      	user type bridge number
      
      The type currently must be veth.  Whenver lxc-user-nic creates a
      nic for a user, it records it in /var/lib/lxc/nics (better location
      is needed).  That way when a container dies lxc-user-nic can cull
      the dead nic from the list.
      
      The -DISTEST allows lxc-user-nic to be compiled so that it uses
      files under /tmp and doesn't actually create the nic, so that
      unprivileged users can compile and test the code.  lxc-test-usernic
      is a script which runs a few tests using lxc-usernic-test, which
      is a version of lxc-user-nic compiled with -DISTEST.
      
      The next step, after issues with this code are raised and addressed,
      is to have lxc-start, when running unprivileged, call out to
      lxc-user-nic (will have to exec so that setuid-root is honored).
      On top of my previous unprivileged-creation patchset, that should
      allow unprivileged users to create and start useful containers.
      
      Also update .gitignore.
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • hooks/Makefile.am: add ubuntu-cloud-prep · 3fb18be9
      Serge Hallyn authored
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
  2. 13 Aug, 2013 2 commits
  3. 12 Aug, 2013 2 commits
  4. 09 Aug, 2013 4 commits
  5. 07 Aug, 2013 3 commits
    • Logging: don't confuse command line and config file specified values · b40a606e
      Serge Hallyn authored
      Currently if loglevel/logfile are specified on command line in a
      program using LXC api, and that program does any
      container->save_config(), then the new config will be saved with the
      loglevel/logfile specified on command line.  This is wrong, especially
      in the case of
      
      cat > lxc.conf << EOF
      lxc.logfile=a
      EOF
      
      lxc-create -t cirros -n c1 -o b
      
      which will result in a container config with lxc.logfile=b.
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • lxc-clone: don't s/oldname/newname in the config file and hooks · 96532523
      Serge Hallyn authored
      1. container hooks should use lxcpath and lxcname from the environment.
      2. the utsname now gets separately updated
      3. the rootfs path gets updated by the bdev backend.
      4. the fstab mount targets should be relative
      5. the fstab source directories could be separately updated if needed.
      
      This leaves one definate bug: the lxc.logfile does not get updated.
      This made me wonder why it was in the configuration file to begin with.
      Digging deeper, I realized that whatever '-o outfile' you give
      lxc-create gets set in log.c and gets used by the lxc_container object
      we create at write_config().  So if you say
      	lxc-create -t cirros -n c1 -o /tmp/out1
      then /var/lib/lxc/c1/config will have lxc.logfile=/tmp/out1 - which is
      clearly wrong.  Therefore I leave fixing that for later.
      
      I'm looking for candidates for $p/$n expansion.  Note we can't expand
      these at config_utsname() etc, because then lxc-clone would see the
      expanded variable.  So we want to read $p/$n verbatim at config_*(),
      and expand them only when they are used.  lxc.logfile is an obvious
      good use case.  lxc.utsname can do it too, in case you want container
      c1 to be called "c1-whatever".  I'm not sure that's worth it though.
      Are there any others, or is that it?
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • ubuntu-cloud: remove debugging echo · d273b8ab
      Serge Hallyn authored
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
  6. 26 Jul, 2013 1 commit
  7. 23 Jul, 2013 3 commits
  8. 22 Jul, 2013 5 commits
  9. 18 Jul, 2013 1 commit
  10. 17 Jul, 2013 1 commit
    • ubuntu templates: add some kernel filesystems to container fstab · 6f259716
      Serge Hallyn authored
      The debugfs, fusectl, and securityfs may not be mounted inside a
      non-init userns.  But mountall hangs waiting for them to be
      mounted.  So just pre-mount them using $lxcpath/$name/fstab as
      bind mounts, which will prevent mountall from trying to mount
      them.
      
      If the kernel doesn't provide them, then the bind mount failure
      will be ignored, and mountall in the container will proceed
      without the mount since it is 'optional'.  But without these
      bind mounts, starting a container inside a user namespace
      hangs.
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
      Acked-by: 's avatarStéphane Graber <stgraber@ubuntu.com>
  11. 16 Jul, 2013 4 commits
  12. 15 Jul, 2013 1 commit
    • lxc_create: prepend pretty header to config file (v2) · 3ce74686
      Serge Hallyn authored
      Define a sha1sum_file() function in utils.c.  Use that in lxcapi_create
      to write out the sha1sum of the template being used.  If libgnutls is
      not found, then the template sha1sum simply won't be printed into the
      container config.
      
      This patch also trivially fixes some cases where SYSERROR is used after
      a fclose (masking errno) and missing consts in mkdir_p.
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
  13. 12 Jul, 2013 4 commits
  14. 11 Jul, 2013 3 commits
    • Accomodate stricter devices cgroup rules · 283678ed
      Serge Hallyn authored
      3.10 kernel comes with proper hierarchical enforcement of devices
      cgroup.  To keep that code somewhat sane, certain things are not
      allowed.  Switching from default-allow to default-deny and vice versa
      are not allowed when there are children cgroups.  (This *could* be
      simplified in the kernel by checking that all child cgroups are
      unpopulated, but that has not yet been done and may be rejected)
      
      The mountcgroup hook causes lxc-start to break with 3.10 kernels, because
      you cannot write 'a' to devices.deny once you have a child cgroup.  With
      this patch, (a) lxcpath is passed to hooks, (b) the cgroup mount hook sets
      the container's devices cgroup, and (c) setup_cgroup() during lxc startup
      ignores failures to write to devices subsystem if we are already in a
      child of the container's new cgroup.
      
      ((a) is not really related to this bug, but is definately needed.
      The followup work of making the other hooks use the passed-in lxcpath
      is still to be done)
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • lxcapi_create: fix template handling · cbee8106
      Serge Hallyn authored
      1. If no template is passed in, then do not try to execute it.  The user
      just wanted to write the configuration.
      
      2. If template is passed in as a full path, then use that instead of
      constructing '$templatedir/lxc-$template'.
      Reported-by: 's avatarWanlong Gao <gaowanlong@cn.fujitsu.com>
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • lxcapi_create: split out the template execution · 96b3cb40
      Serge Hallyn authored
      Make it its own function to make both more readable.
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>