Podczas aktualizacji systemu Debian zobaczyłem następujący komunikat:
root@dom:/home/mirek# apt-get update ... Pobieranie:15 http://ftp.pl.debian.org/debian buster/non-free Sources 2018-01-13-0228.07.pdiff [386 B] 93% [15 Sources rred 0 B] [19 Sources 33,2 kB/34,5 kB 96%] 46,8 kB/s 0s **** Seccomp prevented execution of syscall 0000000089 on architecture amd64 **** Czytanie list pakietów... Gotowe E: Method rred has died unexpectedly! E: Podproces rred zwrócił kod błędu (31)
i proces aktualizacji został zatrzymany.
Powodem tego błędu jest umieszczenie programu apt w piaskownicy.
Opiszę tutaj dwa rozwiązania. Pierwsze z nich to wyłączenie apt z piaskownicy. Aby to zrobić tworzymy dodatkowy plik w katalogu /etc/apt/aptitude.conf.d
touch /etc/apt/aptitude.conf.d/999seccomp
w którym wpisujemy następujące polecenie
apt::seccomp::enable "false";
Drugi sposób do dodanie wymaganych przez apt funkcji do wyjątków.
Zaczynamy od analizy komunikatu o błedzie:
**** Seccomp prevented execution of syscall 0000000089 on architecture amd64 ****
Widzimy tutaj błąd w wywołaniu funkcji systemowej 89. Aby znaleźć jaka funkcja odpowiada danej wartości należy posłużyć się programem scmp_sys_resolver z pakietu seccomp.
Wpisujemy polecenie:
scmp_sys_resolver 89
i otrzymujemy nazwę funkcji systemowej o podanym kodzie. W moim przypadku jest to funkcja readlink.
Mając nazwę funkcji dodajemy ją do wyjątków.
Tworzymy plik 999seccomp (nazwa jest dowolna) w katalogu /etc/apt/apt.conf.d
Następnie do tego pliku dodajemy następujący kod:
apt::sandbox::seccomp::allow { "readlink" };
Po dodaniu powyższej konfiguracji i wydaniu polecenia apt-get update możemy otrzymać kolejny błąd z innym numerem wywołania systemowego. Powtarzamy operację, tj. szukamy nazwę funkcji systemowej o podanym kodzie i dodajemy ją do wyjątków w konfiguracji apt. W moim przypadku skończyło się na dodaniu wyjątków do dwóch funkcji: readlink oraz shmget.
Po wykonaniu tych czynności apt-get update wykonuje się poprawnie.