Saya menggunakan lxcwadah yang tidak terjangkau di Arch Linux. Berikut adalah informasi sistem dasar:
[chb@conventiont ~]$ uname -a
Linux conventiont 3.17.4-Chb #1 SMP PREEMPT Fri Nov 28 12:39:54 UTC 2014 x86_64 GNU/Linux
Ini kernel yang dikustomisasi / dikompilasi dengan user namespace enabled:
[chb@conventiont ~]$ lxc-checkconfig
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
[chb@conventiont ~]$ systemctl --version
systemd 217
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD +IDN
Sayangnya, systemdtidak bermain dengan baik lxcsaat ini. Terutama pengaturan cgroupsuntuk pengguna non-root tampaknya tidak berfungsi dengan baik atau saya tidak terlalu terbiasa bagaimana melakukan ini. lxchanya akan memulai sebuah wadah dalam mode tidak privat ketika itu dapat membuat cgroup yang diperlukan di /sys/fs/cgroup/XXX/*. Namun ini tidak mungkin lxckarena me systemd-mount roothierarki cgroup di /sys/fs/cgroup/*. Solusi tampaknya untuk melakukan hal berikut:
for d in /sys/fs/cgroup/*; do
f=$(basename $d)
echo "looking at $f"
if [ "$f" = "cpuset" ]; then
echo 1 | sudo tee -a $d/cgroup.clone_children;
elif [ "$f" = "memory" ]; then
echo 1 | sudo tee -a $d/memory.use_hierarchy;
fi
sudo mkdir -p $d/$USER
sudo chown -R $USER $d/$USER
echo $$ > $d/$USER/tasks
done
Kode ini membuat cgroupdirektori yang sesuai dalam cgrouphierarki untuk pengguna yang tidak memiliki hak. Namun, sesuatu yang saya tidak mengerti terjadi. Sebelum mengeksekusi di atas saya akan melihat ini:
[chb@conventiont ~]$ cat /proc/self/cgroup
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpu,cpuacct:/
2:cpuset:/
1:name=systemd:/user.slice/user-1000.slice/session-c1.scope
Setelah mengeksekusi kode yang tadi saya lihat di shell saya menjalankannya:
[chb@conventiont ~]$ cat /proc/self/cgroup
8:blkio:/chb
7:net_cls:/chb
6:freezer:/chb
5:devices:/chb
4:memory:/chb
3:cpu,cpuacct:/chb
2:cpuset:/chb
1:name=systemd:/chb
Tetapi di shell lain saya masih melihat:
[chb@conventiont ~]$ cat /proc/self/cgroup
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpu,cpuacct:/
2:cpuset:/
1:name=systemd:/user.slice/user-1000.slice/session-c1.scope
Oleh karena itu, saya dapat memulai lxcwadah yang tidak terjangkau di shell saya menjalankan kode yang disebutkan di atas tetapi tidak di yang lain.
Adakah yang bisa menjelaskan perilaku ini?
Adakah yang menemukan cara yang lebih baik untuk menyiapkan yang diperlukan
cgroupsdengan versisystemd(>= 217) saat ini?