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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2022-02-07 16:15:00

  doskanoness - Użytkownik

doskanoness
Użytkownik
Zarejestrowany: 2021-10-11

Problem z konfiguracją cgroups

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:

Kod:

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:

Kod:

# ~/.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:

Kod:

# /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:

Kod:

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

 

#2  2022-02-08 09:55:47

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Problem z konfiguracją cgroups

Te pliki konfiguracyjne cgconfiog są do doopy.

Bez systemd?

Kod:

cat /service/cgroup/run

Kod:

#!/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"

Kod:

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

Kod:

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:

Kod:

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:

Kod:

# 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)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2022-02-08 20:41:00

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Problem z konfiguracją cgroups

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

Tu masz bardziej cywilizowaną wersję. xD

Offline

 

#4  2022-03-04 11:17:39

  doskanoness - Użytkownik

doskanoness
Użytkownik
Zarejestrowany: 2021-10-11

Re: Problem z konfiguracją cgroups

No wrzuciłem takie coś do swojego pliczku /etc/local.d/lxc-cgroups.start:

Kod:

#!/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.

Kod:

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

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)