~serge-hallyn/ubuntu/quantal/lxc/lxc-fixapi

« back to all changes in this revision

Viewing changes to debian/patches/0018-make-lxc-ps-search-proc.patch

  • 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: make lxc-ps work with separate mtab
2
 
 cgroup-bin mounts cgroupfs with '-n', so if mtab is not linked to
3
 
 /proc/self/mounts, 'mount -t cgroup' won't show these mounts.  But
4
 
 lxc-ps is depending on them.  Instead, search /proc/self/mounts.
5
 
 Note - this does not support the host init being in different cgroups
6
 
 for different subsystems.
7
 
 This was sent upstream on July 28, 2011, but not yet applied.
8
 
Origin: http://www.mail-archive.com/lxc-users@lists.sourceforge.net/msg02363.html
9
 
Forwarded: yes
10
 
 
11
 
Index: lxc-0.7.5/src/lxc/lxc-ps.in
12
 
===================================================================
13
 
--- lxc-0.7.5.orig/src/lxc/lxc-ps.in    2011-08-11 15:54:57.000000000 +0000
14
 
+++ lxc-0.7.5/src/lxc/lxc-ps.in 2012-01-10 14:50:48.808494856 +0000
15
 
@@ -53,25 +53,32 @@
16
 
        my $mount_string;
17
 
 
18
 
        $mount_string=`mount -t cgroup |grep -E -e '^lxc '`;
19
 
-       unless ($mount_string) {
20
 
-               $mount_string=`mount |grep -m1 'type cgroup'`;
21
 
-       }
22
 
-       chomp($mount_string);
23
 
        if ($mount_string) {
24
 
+                # use the one 'lxc' cgroup mount if it exists
25
 
+               chomp($mount_string);
26
 
                $$ref_cgroup=`echo "$mount_string" |cut -d' ' -f3`;
27
 
                chomp($$ref_cgroup);
28
 
        }
29
 
-       die "unable to find mounted cgroup" unless $$ref_cgroup;
30
 
+       # Otherwise (i.e. cgroup-bin) use the first cgroup mount
31
 
+       $mount_string=`grep -m1 -E '^[^ \t]+[ \t]+[^ \t]+[ \t]+cgroup' /proc/self/mounts`;
32
 
+       unless ($mount_string) {
33
 
+               die "unable to find mounted cgroup" unless $$ref_cgroup;
34
 
+       }
35
 
+       chomp($mount_string);
36
 
+       $$ref_cgroup=`echo "$mount_string" |cut -d' ' -f2`;
37
 
+       chomp($$ref_cgroup);
38
 
+       return;
39
 
 }
40
 
 
41
 
 sub get_pids_in_containers {
42
 
        my $ref_names = shift;
43
 
        my $ref_cgroup = shift;
44
 
        my $ref_pids = shift;
45
 
+       my $init_cgroup = shift;
46
 
        my @pidlist;
47
 
 
48
 
        for (@{$ref_names}) {
49
 
-               my $task_file = "$$ref_cgroup/$_/tasks";
50
 
+               my $task_file = "$$ref_cgroup/$init_cgroup/lxc/$_/tasks";
51
 
 
52
 
                $LXC_NAMES{$_} = 1;
53
 
                open(tasks, "cat $task_file 2>/dev/null |") or next;
54
 
@@ -108,6 +115,20 @@
55
 
     close ps;
56
 
 }
57
 
 
58
 
+sub get_init_cgroup {
59
 
+    my $filename = "/proc/1/cgroup";
60
 
+    open(LXC, "$filename");
61
 
+    my @cgroup = <LXC>;
62
 
+    close LXC;
63
 
+    my $container = '';
64
 
+    foreach ( @cgroup ) {
65
 
+        chomp;
66
 
+        # find the container name after :/
67
 
+        s/.*:\///o;
68
 
+    }
69
 
+    return $container;
70
 
+}
71
 
+
72
 
 sub get_container {
73
 
     my $pid = shift;
74
 
     my $filename = "/proc/$pid/cgroup";
75
 
@@ -119,8 +140,10 @@
76
 
     foreach ( @cgroup ) {
77
 
         chomp;
78
 
         # find the container name after :/
79
 
-       s/.*:\///o;
80
 
-       $container = $_;
81
 
+        s/.*:\///o;
82
 
+        # chop off everything up to 'lxc/'
83
 
+        s/lxc\///o;
84
 
+        $container = $_;
85
 
     }
86
 
     return $container;
87
 
 }
88
 
@@ -160,6 +183,7 @@
89
 
 my $arg_usage = '';
90
 
 my $arg_lxc   = '';
91
 
 my @arg_name;
92
 
+my $init_cgroup = '/';
93
 
 
94
 
 GetOptions('help'   => \$arg_help,
95
 
           'usage'  => \$arg_usage,
96
 
@@ -186,8 +210,9 @@
97
 
        my $pid_list;
98
 
        $LXC_DISPLAY = 2;
99
 
 
100
 
+       $init_cgroup = get_init_cgroup();
101
 
        get_cgroup \$cgroup;
102
 
-       get_pids_in_containers(\@arg_name, \$cgroup, \$pid_list);
103
 
+       get_pids_in_containers(\@arg_name, \$cgroup, \$pid_list, $init_cgroup);
104
 
        if ($pid_list) {
105
 
                @ARGV = ("-p $pid_list",@ARGV);
106
 
        }