Puncte:0

`kernel.core_pattern` nu este eficient pe VM-ul meu Ubuntu 18.04 după repornire

drapel ao

Mediu de testare

Eu folosesc ubuntu/bionic64 Cutie vagabondă ca mediu de testare.

Condiții prealabile

După ce am creat VM-ul, am instalat doar ansible 2.9.23 urmărind instrucțiunile din documentul oficial.

Am instalat și ansible.posix Colectie (ansible-galaxy collection install ansible.posix) pentru că voi dori să folosesc modulul ansible.posix.sysctl.

Verificați că modelul de bază actual nu a fost ceea ce mi-am dorit:

vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E

De asemenea, /etc/sysctl.conf nu a avut modelul de bază:

vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
vagrant@ubuntu-bionic:~$

Intentia mea

Vreau să schimb modelul de bază în /var/tmp/core.%h.%e.%t.

Ce am facut

Am rulat următoarele ansible comanda:

ansible -bKvvv -m "sysctl" -a "nume=kernel.core_pattern stare=valoare prezentă='/var/tmp/core.%h.%e.%t' reload=yes" localhost

și a reușit cu rezultatul:

localhost | SCHIMBAT => {
    „schimbat”: adevărat, 
    „invocare”: {
        „module_args”: {
            „ignoreerrors”: fals, 
            "nume": "kernel.core_pattern", 
            „reîncărcare”: adevărat, 
            "state": "prezent", 
            "sysctl_file": "/etc/sysctl.conf", 
            „sysctl_set”: fals, 
            „valoare”: „/var/tmp/core.%h.%e.%t”
        }
    }
}

Am verificat și configurația curentă:

vagrant@ubuntu-bionic:/etc$ sysctl kernel.core_pattern
kernel.core_pattern = /var/tmp/core.%h.%e.%t

De asemenea, am confirmat că core_pattern a fost scris în /etc/sysctl.conf:

vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf 
kernel.core_pattern=/var/tmp/core.%h.%e.%t

Apoi mi-am repornit VM. După repornire, este valabil în prezent core_pattern a fost dat înapoi:

vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E

Gândurile mele și ce am încercat

Această întrebare nu pare să fie aplicabil pentru mine pentru că, în primul rând, a fost întrebat acum aproximativ 10 ani și, în al doilea rând, Ubuntu Server 18.04 nu pare să folosească parvenit mai mult.

M-am gândit la altul .conf fișierele pot fi citite mai târziu /etc/sysctl.conf deci setările au fost suprascrise undeva. Dar sysctl(8) pagina de manual enumeră ordinea .conf fișiere de citit și arată ca /etc/sysctl.conf ar trebui să fie ultimul care trece peste orice altceva.

sysctl.conf(5) pagina de manual furnizează lista de aceeași ordine ca sysctl(8).

Nu am gasit nimic in sysctl.d(5), fie. De fapt, secțiunea „DIRECTORII DE CONFIGURARE ȘI PRECEDENTĂ” îmi confirmă înțelegerea:

Fișierele din /etc/ suprascriu fișierele cu același nume în /run/ și /lib/. Fișierele din /run/ suprascriu fișierele cu același nume în /lib/.

am găsit kernel.core_pattern ar fi setat așa cum era de așteptat odată ce am alergat sudo sysctl --system manual. Aceasta poate însemna că, în mod implicit, aceste setări de sistem nu sunt citite.

Puncte:0
drapel ao

După investigații suplimentare, am găsit kernel.core_pattern a fost suprascris de către pachet apport la pornirea sistemului.

Ar fi trebuit să mă gândesc să verific apport când am văzut șirul „/usr/share/apport/apport”. Nu eram sigur dacă apport a fost de fapt cel care suprascrie kernel.core_pattern, așa că am decis să arunc o privire la codul sursă.

Prin alergare politica apt-cache apport, am descoperit că versiunea pe care o foloseam era 2.20.9-0ubuntu7.24:

vagrant@ubuntu-bionic:~$ apt-cache policy apport
aport:
  Instalat: 2.20.9-0ubuntu7.24
  Candidat: 2.20.9-0ubuntu7.24
  Tabel de versiuni:
 *** 2.20.9-0ubuntu7.24 500
        500 http://archive.ubuntu.com/ubuntu bionic-updates/main pachete amd64
        500 http://security.ubuntu.com/ubuntu bionic-security/main pachete amd64
        100 /var/lib/dpkg/status
     2.20.9-0ubuntu7 500
        500 http://archive.ubuntu.com/ubuntu bionic/main Pachete amd64
vagrant@ubuntu-bionic:~$

Apoi apportlui Pagina LaunchPad, am găsit link-ul de descărcare: apport_2.20.9-0ubuntu7.tar.gz.

Căutând în codul sursă, am găsit fișierul debian/apport.init are urmatorul continut:

face_start()
{
    ...
    ...
    echo „|$AGENT %p %s %c %d %P” > /proc/sys/kernel/core_pattern
    echo 2 > /proc/sys/fs/suid_dumpable
}

Așa că am fugit dpkg -L apport pe VM-ul meu pentru a vedea dacă există acest fișier:

vagrant@ubuntu-bionic:~$ dpkg -L apport | grep init
/etc/init.d
/etc/init.d/apport

Nu exista niciun fișier cu numele fișierului care se potrivește exact, dar am decis să arunc o privire /etc/init.d/apport și am găsit că acesta este fișierul pe care îl căutam:

face_start()
{
        ...
        ...
        echo „|$AGENT %p %s %c %d %P %E” > /proc/sys/kernel/core_pattern
        echo 2 > /proc/sys/fs/suid_dumpable
}

am știut că /etc/sysctl.conf este citit de serviciu systemd-sysctl, așa că următorul lucru pe care am vrut să-l stabilesc a fost dacă systemd-sysctl a fost început înainte apport.

Am căutat dacă există apport-serviciu aferent și am găsit unul:

vagrant@ubuntu-bionic:~$ systemctl list-units | grep apport
apport.service încărcat activ ieșit LSB: generare automată a raportului de avarie

Am verificat apoi interdependența lor și am găsit apport.service este început după systemd-sysctl.service:

vagrant@ubuntu-bionic:~$ systemctl list-dependencies apport.service
apport.service
â ââsistem.slice
â ââsysinit.target
...
â ââsystemd-sysctl.service
...
...
vagrant@ubuntu-bionic:~$

Asta inseamna systemd-sysctl.service citește corect setarea mea de kernel.core_pattern în /etc/sysctl.conf dar setarea este apoi imediat suprascrisă de apport.service.

Pentru a verifica acest lucru, am adăugat două rânduri în /etc/init.d/apport:

do_start()
{
        ...
        ...
        # NOTĂ(ywen): Scrieți valoarea curentă într-un fișier.
        sysctl kernel.core_pattern > /home/vagrant/sysctl.kernel.core_pattern.txt

        echo „|$AGENT %p %s %c %d %P %E” > /proc/sys/kernel/core_pattern
        echo 2 > /proc/sys/fs/suid_dumpable

        # NOTĂ(ywen): Adăugați valoarea curentă la fișier.
        sysctl kernel.core_pattern >> /home/vagrant/sysctl.kernel.core_pattern.txt
}

Apoi am repornit VM-ul. Când VM-ul a fost din nou pornit, am găsit fișierul /home/vagrant/sysctl.kernel.core_pattern.txt avea urmatorul continut:

vagrant@ubuntu-bionic:~$ cat sysctl.kernel.core_pattern.txt 
kernel.core_pattern = /var/tmp/core.%h.%e.%t
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
vagrant@ubuntu-bionic:~$

Deci, într-adevăr, setarea mea a fost citită corect, dar apoi a fost suprascrisă de apport.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.