Przejdź do głównej zawartości

Podman

Możliwe jest zastąpienie Docker'a na maszynie sensora programem Podman, jeśli jest on w wersji 4.0.0 lub nowszej.

Należy pamiętać że jest to konfiguracja dla bardziej zaawansowanych użytkowników, i mogą wystąpić problemy z kompatybilnością.

notatka

Podman może być uruchomiony w trybie rootfull, gdzie analogicznie do Docker'a, kontenery uruchamiane są przez użytkownika root.

Może być on także uruchomiony w trybie rootless, gdzie kontenery uruchamiane są przez użytkownika bez dostępów root.

Należy zwrócić uwagę w jakim trybie uruchomiliśmy podman.socket. Jeśli jako rootfull, w TrapInit powinnyśmy skonfigurować dostęp jako użytkownik root. W przeciwnym wypadku, dostęp powinien być skonfigurowany dla tego samego użytkownika dla którego uruchomiony jest podman.socket.

ważne

Ze względu na aktualne ograniczenia Podman, pułapki uruchomione na sensorze z rootless Podman nie będa poprawnie raportowały źródłowego IP w incydentach.

Wymagania

Aby użyć Podman zamiast Docker z aplikacją TrapInit, należy upewnić się że:

  • instalacja Podman jest w wersji 4.0.0 lub nowszej, i obsługuje komendę podman system dial-stdio

  • podman.socket jest włączony i uruchomiony:

    • systemctl --user enable --now podman.socket jeśli korzystamy z rootless podman
    • sudo systemctl enable --now podman.socket jeśli korzystamy z rootfull podman
  • system posiada komendę docker zmapowaną na podman, np. za pomocą: sudo ln -s /usr/bin/podman /usr/bin/docker

    • uwaga: nie wystarczy zwykły alias - docker musi być dostępny poprzez ssh, np. ssh <user>@<ip> docker --version powinien się poprawnie wykonywać
  • użytkownik, który będzie używany przez TrapInit może uruchamiać kontenery w podman z limitem zasobów

    • należy upewnić się, że np. podman run --rm -m 250MB hello-world uruchamia się bez żadnych błędów - zobacz sekcję dostęp cgroup poniżej
wskazówka

Należy pamiętać, aby powyższe komendy podman wykonywać jako ten sam użytkownik, który będzie skonfigurowany w aplikacji TrapInit.

Dostęp cgroup

Aby poprawnie działało uruchamianie kontenerów Może być wymagane ustawienie domyślnego runtime na crun, aby działało to poprawnie. W ~/.config/containers/containers.conf ustawiamy (należy się też upewnić, że crun jest zainstalowany w systemie):

[engines]
runtime = "crun"

Jeśli korzystamy z rootless podman, konieczna jest dodatkowo odpowiednia konfiguracja uprawnień użytkownika.

Konfiguracja użytkownika

  1. Upewnij się, że lista uprawnień zawiera cpuset cpu memory pids

    cat "/sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers"

    Jeśli tak jest, dalsze działania nie są konieczne.

  2. Dodaj konieczne uprawnienia

    sudo mkdir -p /etc/systemd/system/user@.service.d
    echo -e "[Service]\nDelegate=memory pids cpu cpuset" | sudo tee /etc/systemd/system/user@.service.d/delegate.conf
    sudo systemctl daemon-reload
    systemctl --user daemon-reload
  3. Po nadaniu uprawnień, ponownie sprawdź ich poprawność:

    cat "/sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers"

    Oczekiwany rezultat to: cpuset cpu memory pids