~ubuntu-branches/ubuntu/quantal/lxc/quantal-201205292108

« back to all changes in this revision

Viewing changes to debian/patches/0074-lxc-execute-find-init

  • Committer: Package Import Robot
  • Author(s): Serge Hallyn
  • Date: 2012-04-26 15:18:35 UTC
  • mfrom: (3.1.41 sid)
  • Revision ID: package-import@ubuntu.com-20120426151835-3vz6kb4m90gb26js
Tags: 0.8.0~rc1-4ubuntu1
* Merge from unstable.  Remaining changes:
  - control:
    - update maintainer
    - Build-Depends: add dh-apparmor and libapparmor-dev
    - lxc Depends: add bridge-utils, dnsmasq-base, iptables, rsync
    - lxc Recommends: add cgroup-lite | cgroup-bin, openssl
    - lxc Suggests: add btrfs-tools, lvm2, qemu-user-static
    - lxc Conflicts: remove (cgroup-bin)
  - Add lxc-start-ephemeral and lxc-wait to debian/local
  - apparmor:
    - add lxc.apparmor, lxc-containers.apparmor,
      lxc-default.apparmor, and new lxc.apparmor.in
  - add debian/lxc.conf (default container creation config file)
  - debian/lxc.install.in:
    * add lxc-start-ephemeral
    * add debian/lxc.conf
    * skip lxc-debconf*
    * skip lxc-ls (Use upstream's)
  - debian/lxc*.install.in: use '*', not @DEB_HOST_MULTIARCH@
  - Use our own completely different lxc.postinst and lxc.postrm
  - remove lxc.templates
  - debian/rules:
    * add DEB_DH_INSTALLINIT_ARGS = --upstart-only
    * don't do debconf stuff
    * add debian/*.apparmor.in to files processed under
      override_dh_auto_clean
    * don't comment out ubuntu or busybox templates
    * do apparmor stuff and install our own lxc-wait under override_dh_install
    * install our upstart scripts in override_dh_installinit
  - add lxc.default, lxc.lxc-net.upstart, lxc.upstart under
    debian/

* patches kept:
  - 0013-lxc-create-use-default-config.patch (needed manual rebase)
  - 0030-ubuntu-template-fail.patch
  - 0031-ubuntu-template-resolvconf.patch
  - 0044-lxc-destroy-rm-autos
  - debian/patches/0045-fix-other-templates
  - debian/patches/0046-lxc-clone-change-hwaddr
  - debian/patches/0047-bindhome-check-shell
  - debian/patches/0049-ubuntu-template-sudo-and-cleanup
  - debian/patches/0050-clone-lvm-sizes
  - debian/patches/0052-ubuntu-bind-user-conflict
  - debian/patches/0053-lxc-start-pin-rootfs
  - debian/patches/0054-ubuntu-debug
  - debian/patches/0055-ubuntu-handle-badgrp
  - debian/patches/0056-dont-watch-utmp
  - debian/patches/0057-update-manpages
  - debian/patches/0058-fixup-ubuntu-cloud
  - debian/patches/0059-reenable-daily-cloudimg
  - debian/patches/0060-lxc-shutdown
  - debian/patches/0061-lxc-start-apparmor
  - debian/patches/0062-templates-relative-paths
  - debian/patches/0063-check-apparmor-enabled
  - debian/patches/0064-apparmor-mount-proc
  - debian/patches/0065-fix-bindhome-relpath
  - debian/patches/0066-confile-typo
  - debian/patches/0067-templates-lxc-profile
  - debian/patches/0068-fix-lxc-config-layout 
  - debian/patches/0069-ubuntu-cloud-fix
  - debian/patches/0070-templates-rmdir-dev-shm
  - debian/patches/0071-ubuntu-cloud-fix-image-extraction
  - debian/patches/0072-lxc-shutdown-help
  - debian/patches/0073-lxc-destroy-waits-before-destroy
  - mark all patches which have been forwarded as such, refresh all
* 0074-lxc-execute-find-init: lxc-init had moved.  Introduce a function in
  lxc-execute to go find it.  Otherwise lxc-execute for any older releases
  will fail.
* 0075-lxc-ls-bash: lxc-ls needs bash, not sh
* add debian/lxc.apparmor.in so DEB_HOST_MULTIARCH can be expanded
* 0076-fix-sprintfs:  - check return values for all sprintfs and snprintfs
  which could overflow (LP: #988918)
* 0077-execute-without-rootfs: let lxc-execute succeed with no rootfs
  (LP: #981955)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Description: lxc-init used to be under /usr/lib/lxc.  Now it is under
 
2
 /usr/lib/<multiarch>/lxc, but old containers will still have it under
 
3
 /usr/lib/lxc.  So search for a valid lxc-init to run.
 
4
Author: Serge Hallyn <serge.hallyn@ubuntu.com>
 
5
Forwarded: yes
 
6
 
 
7
Index: lxc-0.8.0~rc1/src/lxc/execute.c
 
8
===================================================================
 
9
--- lxc-0.8.0~rc1.orig/src/lxc/execute.c        2012-04-25 14:15:50.929101176 -0500
 
10
+++ lxc-0.8.0~rc1/src/lxc/execute.c     2012-04-25 17:39:49.174409120 -0500
 
11
@@ -21,10 +21,13 @@
 
12
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
13
  */
 
14
 
 
15
+#include <sys/types.h>
 
16
+#include <sys/stat.h>
 
17
 #include <errno.h>
 
18
 #include <unistd.h>
 
19
 #include <stdlib.h>
 
20
 
 
21
+
 
22
 #include "log.h"
 
23
 #include "start.h"
 
24
 
 
25
@@ -35,12 +38,42 @@
 
26
        int quiet;
 
27
 };
 
28
 
 
29
+/* historically lxc-init has been under /usr/lib/lxc.  Now with
 
30
+ * multi-arch it can be under /usr/lib/$ARCH/lxc.  Serge thinks
 
31
+ * it makes more sense to put it under /sbin.
 
32
+ * If /usr/lib/$ARCH/lxc exists and is used, then LXCINITDIR will
 
33
+ * point to it.
 
34
+ */
 
35
+static char *choose_init(void)
 
36
+{
 
37
+       char *retv = malloc(PATH_MAX);
 
38
+       int ret;
 
39
+       struct stat mystat;
 
40
+       if (!retv)
 
41
+               return NULL;
 
42
+
 
43
+       snprintf(retv, PATH_MAX-1, LXCINITDIR "/lxc-init");
 
44
+       ret = stat(retv, &mystat);
 
45
+       if (ret == 0)
 
46
+               return retv;
 
47
+       snprintf(retv, PATH_MAX-1, "/usr/lib/lxc/lxc-init");
 
48
+       ret = stat(retv, &mystat);
 
49
+       if (ret == 0)
 
50
+               return retv;
 
51
+       snprintf(retv, PATH_MAX-1, "/sbin/lxc-init");
 
52
+       ret = stat(retv, &mystat);
 
53
+       if (ret == 0)
 
54
+               return retv;
 
55
+       return NULL;
 
56
+}
 
57
+
 
58
 static int execute_start(struct lxc_handler *handler, void* data)
 
59
 {
 
60
        int j, i = 0;
 
61
        struct execute_args *my_args = data;
 
62
        char **argv;
 
63
        int argc = 0;
 
64
+       char *initpath;
 
65
 
 
66
        while (my_args->argv[argc++]);
 
67
 
 
68
@@ -48,7 +81,12 @@
 
69
        if (!argv)
 
70
                return 1;
 
71
 
 
72
-       argv[i++] = LXCINITDIR "/lxc-init";
 
73
+       initpath = choose_init();
 
74
+       if (!initpath) {
 
75
+               ERROR("Failed to find an lxc-init");
 
76
+               return 1;
 
77
+       }
 
78
+       argv[i++] = initpath;
 
79
        if (my_args->quiet)
 
80
                argv[i++] = "--quiet";
 
81
        argv[i++] = "--";