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/.
Użytkownik

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_MOUNTMoje 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 filePo 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







Podobno człowiek...;)








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





Cenzor wirtualnego świata
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
Użytkownik

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
doneSkrypcik ł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