Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Siemka
Chcę móc uruchamiać nieuprzywilejowane kontenery na użytkowniku doskanoness. Używam Gentoo w wersji bez systemd, z kernelem 5.15.19 i ZFS. Oto wpisy z /proc/self/cgroup przed rozpoczęciem konfiguracji systemu:
13:pids:/ 12:hugetlb:/ 11:net_prio:/ 10:perf_event:/ 9:net_cls:/ 8:freezer:/ 7:devices:/ 6:memory:/ 5:blkio:/ 4:cpuacct:/ 3:cpu:/ 2:cpuset:/ 1:name=openrc:/1 0::/display-manager
Patrzyłem na wiki, jak to ogarnąć i z tego jest napisane pod linkiem https://wiki.gentoo.org/wiki/LXC#Configuring_unprivileged_LXC trzeba dodać poniższy kod do pliku ~/.bashrc oraz parę wpisów do /etc/sudoers:
# ~/.bashrc mountpoint -q "/sys/fs/cgroup/systemd" \ || (sudo mkdir -p /sys/fs/cgroup/systemd && sudo mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd) for d in /sys/fs/cgroup/*; do f=$(basename $d) if [ "$f" = "unified" ]; then continue elif [ "$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 # /etc/sudoers.d/lxc # cgroups v1 lxc user permissions Cmnd_Alias CGRP_MKDIR = /bin/mkdir -p /sys/fs/cgroup/*/lxc Cmnd_Alias CG_TEE = /usr/bin/tee -a /sys/fs/cgroup/* Cmnd_Alias CG_CHOWN = /bin/chown -R lxc /sys/fs/cgroup/*/lxc Cmnd_Alias CG_MAKE_SYSTEMD_DIR = /bin/mkdir -p /sys/fs/cgroup/systemd Cmnd_Alias CG_SYSTEMD_MOUNT = /bin/mount -t cgroup cgroup -o none\,name\=systemd /sys/fs/cgroup/systemd lxc ALL=(ALL) NOPASSWD: CGRP_MKDIR, CG_TEE, CG_CHOWN, CG_MAKE_SYSTEMD_DIR, CG_SYSTEMD_MOUNT
Moje pytania:
1. Czy da się to prościej ogarnąć bez robienia osobnego usera pod LXC? Chcę uruchamiać kontenery bezpośrednio z użytkownika doskanoness.
2. Czy wrzucanie tego całego kodu do ~/.bashrc to na pewno dobra metoda? Nie da się tego ogarnąć przez libcgroup? Co gdybym chciał uruchamiać LXC na serwerze, do którego loguję się po SSH?
Mam taki pliczki:
# /etc/cgroup/cgconfig.conf # # Copyright IBM Corporation. 2007 # # Authors: Balbir Singh <balbir@linux.vnet.ibm.com> # This program is free software; you can redistribute it and/or modify it # under the terms of version 2.1 of the GNU Lesser General Public License # as published by the Free Software Foundation. # # This program is distributed in the hope that it would be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # #group daemons/www { # perm { # task { # uid = root; # gid = webmaster; # } # admin { # uid = root; # gid = root; # } # } # cpu { # cpu.shares = 1000; # } #} # #group daemons/ftp { # perm { # task { # uid = root; # gid = ftpmaster; # } # admin { # uid = root; # gid = root; # } # } # cpu { # cpu.shares = 500; # } #} # #mount { # cpu = /mnt/cgroups/cpu; # cpuacct = /mnt/cgroups/cpuacct; #} group lxc { perm { task { uid = doskanoness; gid = doskanoness; } admin { uid = doskanoness; gid = doskanoness; } } cpuset { cgroup.clone_children = 1; cpuset.mems = 0; cpuset.cpus = 0-3; } cpu {} cpuacct {} blkio {} memory { memory.use_hierarchy = 1; } devices {} freezer {} net_cls {} perf_event {} net_prio {} pids {} } mount { "name=systemd" = /sys/fs/cgroup/systemd; } # plik /etc/cgrules.conf # /etc/cgrules.conf #The format of this file is described in cgrules.conf(5) #manual page. # # Example: #<user> <controllers> <destination> #@student cpu,memory usergroup/student/ #peter cpu test1/ #% memory test2/ doskanoness * lxc/ # End of file
Po dodaniu cgred i cgconfig do runlevela default zawartość /proc/self/cgroup jest taka:
14:name=systemd:/ 13:pids:/ 12:hugetlb:/ 11:net_prio:/ 10:perf_event:/ 9:net_cls:/ 8:freezer:/ 7:devices:/ 6:memory:/ 5:blkio:/ 4:cpuacct:/ 3:cpu:/ 2:cpuset:/ 1:name=openrc:/1 0::/display-manager
Jak zrobić przy użyciu libcgroup aby po odpaleniu Konsole lub innego dowolnego emulatora terminala od razu można było tworzyć kontenery?
Offline
Te pliki konfiguracyjne cgconfiog są do doopy.
Bez systemd?
cat /service/cgroup/run
#!/bin/sh exec 2>&1 /usr/local/sbin/cgstart ; /usr/sbin/cgrulesengd --nodaemon --nolog
Demon svscan z pakietu demontools podnosi usługę i przydziela jej "anioła stróża"
root 2984 0.0 0.0 1016 4 ? S lut07 0:00 supervise cgroup root 3733 0.0 0.0 7444 6812 ? S lut07 0:19 /usr/sbin/cgrulesengd --nodaemon --nolog
svstat /service/cgroup/ /service/cgroup/: up (pid 3007) 52413 seconds
przy okazji skrypt cgstart (u mnie) montuje grupy w folderze /cgroup/ i zakłada strukturę grup.
Używam na razie cgroupv1 czyli w wersji pierwszej.
A to skrypcio cgstart we własnej osobie:
https://pastebin.com/raw/0YKG7dB7
Przez ostatnie 7 latek (chyba 7) skrypciowi się strasznie spuchło, ale działa.
xD
Jedna uwaga:
echo "8:16 1048576" >> /cgroup/blkio/users/thunderbird/blkio.throttle.write_bps_device echo "8:16 4194304" >> /cgroup/blkio/users/thunderbird/blkio.throttle.read_bps_device echo "8:0 1048576" >> /cgroup/blkio/users/thunderbird/blkio.throttle.write_bps_device echo "8:0 1048576" >> /cgroup/blkio/users/thunderbird/blkio.throttle.read_bps_device
8:0 i 8:16 to są kody dysków twardych, możesz mieć inne.
Znajduje się je tak:
# root ~> lsblk | grep disk sda 8:0 0 931,5G 0 disk sdb 8:16 0 223,6G 0 disk
Pozdro
Ostatnio edytowany przez Jacekalex (2022-03-06 19:48:33)
Offline
Jacekalex napisał(-a):
A to skrypcio cgstart we własnej osobie:
https://pastebin.com/raw/0YKG7dB7
Przez ostatnie 7 latek (chyba 7) skrypciowi się strasznie spuchło, ale działa.
xD
Offline
No wrzuciłem takie coś do swojego pliczku /etc/local.d/lxc-cgroups.start:
#!/bin/bash mountpoint -q "/sys/fs/cgroup/systemd" \ || (mkdir -p /sys/fs/cgroup/systemd && mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd) for d in /sys/fs/cgroup/*; do f=$(basename $d) if [ "$f" = "unified" ]; then continue elif [ "$f" = "cpuset" ]; then echo 1 > $d/cgroup.clone_children; elif [ "$f" = "memory" ]; then echo 1 > $d/memory.use_hierarchy; fi mkdir -p $d/doskanoness chown -R doskanoness $d/doskanoness done
Skrypcik ładnie montuje mi cgroupy lecz mam problem z cgredem.
doskanoness@lxc-gentoo ~ $ sudo cat /etc/cgroup/cgrules.conf # /etc/cgrules.conf #The format of this file is described in cgrules.conf(5) #manual page. # # Example: #<user> <controllers> <destination> #@student cpu,memory usergroup/student/ #peter cpu test1/ #% memory test2/ doskanoness name=systemd,name=openrc,misc,pids,hugetlb,net_prio,perf_event,net_cls,freezer,devices,memory,blkio,cpuacct,cpu,cpuset doskanoness/ # End of file doskanoness@lxc-gentoo ~ $ echo $$ 2638 doskanoness@lxc-gentoo ~ $ sudo cgclassify -g name\=systemd:doskanoness 2638 Password: Error changing group of pid 2638: Success doskanoness@lxc-gentoo ~ $ sudo cgrulesengd -d ... Adding controller blkio Adding controller cpuacct Adding controller cpu Adding controller cpuset Warning: cgroup_attach_task_pid failed: 50016 Warning: failed to apply the rule. Error was: 50016 cgroup change pid 2789 failed Scanned proc values are 1000 0 0 0 Scanned proc values are 0 0 0 0 No rule found to match PID: 2795, UID: 0, GID: 0 Scanned proc values are 0 0 0 0 Scanned proc values are 0 0 0 0 No rule found to match PID: 2796, UID: 0, GID: 0 Started the CGroup Rules Engine Daemon. Sending proc connector: PROC_CN_MCAST_LISTEN... Sending netlink message len=40, cn_msg len=20 Message sent Socket /var/run/cgred.socket owner successfully set to -1:-1 EXEC Event: PID = 2805, tGID = 2805 Scanned proc values are 1000 1000 1000 1000 Scanned proc values are 100 100 100 100 Found matching rule doskanoness for PID: 2805, UID: 1000, GID: 100 Executing rule doskanoness for PID 2805... Will move pid 2805 to cgroup 'doskanoness/' Adding controller name=systemd Adding controller name=openrc Adding controller misc Adding controller pids Adding controller hugetlb Adding controller net_prio Adding controller perf_event Adding controller net_cls Adding controller freezer Adding controller devices Adding controller memory Adding controller blkio Adding controller cpuacct Adding controller cpu Adding controller cpuset Warning: cgroup_attach_task_pid failed: 50016 Warning: failed to apply the rule. Error was: 50016
Mam nadzieję że ktoś podpowie co i jak ogarnąć, żeby to miało ręce i nogi.
Offline