linux:lxc:非特権コンテナメモ

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
linux:lxc:非特権コンテナメモ [2014/01/20 10:36] tenforwardlinux:lxc:非特権コンテナメモ [2014/01/20 10:45] (現在) tenforward
行 12: 行 12:
 とある. とある.
  
-まず lxc/src/lxc/cgroup.c で +  * まず lxc/src/lxc/cgroup.c で<code c>
- +
-<code c>+
 static bool find_cgroup_hierarchies(struct cgroup_meta_data *meta_data, static bool find_cgroup_hierarchies(struct cgroup_meta_data *meta_data,
         bool all_kernel_subsystems, bool all_named_subsystems,         bool all_kernel_subsystems, bool all_named_subsystems,
行 39: 行 37:
                  * we only extract hierarchy and subsystems                  * we only extract hierarchy and subsystems
                  * here */                  * here */
-</code>+</code>こんなコードがあり,/proc/self/cgroup から「現在の cgroup」を取得するようになってる 
 +  * Ubuntu 14.04 だと一般ユーザでログインすると<code>karma@lxctest02:~$ id 
 +uid=1000(karma) gid=1000(karma) groups=1000(karma),27(sudo) 
 +karma@lxctest02:~$ cat /proc/self/cgroup  
 +11:name=systemd:/user/1000.user/5.session 
 +10:hugetlb:/user/1000.user/5.session 
 +9:perf_event:/user/1000.user/5.session 
 +8:blkio:/user/1000.user/5.session 
 +7:freezer:/user/1000.user/5.session 
 +6:devices:/user/1000.user/5.session 
 +5:memory:/user/1000.user/5.session 
 +4:cpuacct:/user/1000.user/5.session 
 +3:cpu:/user/1000.user/5.session 
 +2:cpuset:/user/1000.user/5.session</code> 
 +  * ここは書き込み権がある <code>karma@lxctest02:~$ LANG=C ls -ld /sys/fs/cgroup/cpu/user/1000.user/5.session 
 +drwxr-xr-x 2 karma karma 0 Jan 20 10:37 /sys/fs/cgroup/cpu/user/1000.user/5.session</code> 
 +  * ちなみに普通に echo $$ > tasks みたいに cgroup に登録する.以下のコード <code>#!/bin/bash 
 +for c in /sys/fs/cgroup/
 +do 
 +  sudo mkdir $c/karma 
 +  sudo chown -R karma: $c/karma 
 +  if [ `basename $c` = "cpuset" ]; then 
 +    echo 0 > $c/karma/cpuset.cpus 
 +    echo 0 > $c/karma/cpuset.mems 
 +  fi 
 +  echo $PID > $c/karma/tasks 
 +done</code> を実行すると,当然 <code>karma@lxctest02:~$ cat /proc/self/cgroup  
 +11:name=systemd:/karma 
 +10:hugetlb:/karma 
 +9:perf_event:/karma 
 +8:blkio:/karma 
 +7:freezer:/karma 
 +6:devices:/karma 
 +5:memory:/karma 
 +4:cpuacct:/karma 
 +3:cpu:/karma 
 +2:cpuset:/karma</code> 
 +  * /sys/fs/cgroup/user/1000.user/5.session みたいなのは誰が作ってるのか? どうも systemd のデーモンのどれかっぽい.(pam_loginuid 使って?) <code c>int cg_path_get_session(const char *path, char **session) { 
 +        const char *e, *n; 
 +        char *s; 
 + 
 +        assert(path); 
 +        assert(session); 
 + 
 +        e = path_startswith(path, "/user/"); 
 +        if (!e) 
 +                return -ENOENT; 
 + 
 +        /* Skip the user name */ 
 +        e = skip_label(e); 
 +        if (!e) 
 +                return -ENOENT; 
 + 
 +        n = strchrnul(e, '/'); 
 +        if (n - e < 8) 
 +                return -ENOENT; 
 +        if (memcmp(n - 8, ".session", 8) != 0) 
 +                return -ENOENT; 
 + 
 +        s = strndup(e, n - e - 8); 
 +        if (!s) 
 +                return -ENOMEM;
  
-こんなコードがあり,/proc/self/cgroup から「現在の cgroup」を取得するようになってる+        *session = s; 
 +        return 0; 
 +}</code> systemd/src/shared/cgroup-util.c
  • linux/lxc/非特権コンテナメモ.1390214218.txt.gz
  • 最終更新: 2014/01/20 10:36
  • by tenforward