Cum de a patch kernel-ul fără a restarta revizuirea instrumentelor moderne - blog-ul companiei Selektel

Cum de a patch kernel-ul fără a restarta revizuirea instrumentelor moderne - blog-ul companiei Selektel

Cel mai simplu exemplu: livepatch

Să începem cu un experiment foarte simplu. Pentru aceasta avem nevoie de orice distribuție Linux kernel-C versiunea 4.0 sau mai mare (în acest caz, Ubuntu 16.04, în continuare exemple de comenzi sunt în mod special pentru această distribuție). Noile versiuni ale funcției de kernel de a adăuga patch-uri „on the fly“ (se numește - livepatch) este activată în mod implicit.
Pentru a vedea cum funcționează, avem nevoie, în primul rând, pentru a instala antetele kernel:

Apoi, instalați simbolurile de depanare kernel:

Prin experimentul, totul este gata, puteți începe. Executați următoarea comandă:

Am descărcat codul sursă al modulului de kernel, care se schimbă codul de bază de bază și modifică de ieșire a comanda cat / proc / linie_cmd. Acum, acest lucru este nevoia de a asambla modulul. Pentru a face acest lucru, creați următorul make-fișier:

Va colecta modul și introduceți-l în kernel:

Să vedem ce se întâmplă. Finalizat:

În loc de informațiile standard privind parametrii de kernel, vom vedea aici este un astfel de text:

După cum puteți vedea, patch-ul a fost aplicat cu succes.

Toate informațiile despre patch-uri descărcate sunt stocate în directorul / sys / kernel / livepatch:

Dezactivați plasturele, utilizați comanda:

Să începem cu instalarea dependențelor necesare:

Pentru a vizualiza acest kpatch, de asemenea, recomandabil să se instala ccache:

Asta-i toate dependențele instalate. Puteți seta kpatch:

În experimentul nostru, vom patch sursele de kernel. Clona magazia de la sursa versiunii actuale de Ubuntu:

La finalizarea Clonarea va copia codul sursă într-un director ubuntu-kpatch-care se referă la oaspeți (este necesar să se facă modificări codului sursă, și apoi a construi pe baza acestor schimbări, patch-uri):

Deschideți fișierul ubuntu-kpatch-care se referă la oaspeți / ubuntu-care se referă la oaspeți / fs / proc / version.c și vnesom în următoarele modificări:

patch-uri Cozdadim folosind comanda:

Patch-ul este un fișier text simplu care listează modificările făcute:

Pentru a adăuga un patch pentru kernel-ul, executa:

După cum se poate observa din ieșire doar citat, de ieșire vom obține modulul de kernel. Pentru a aplica patch-uri, trebuie doar să adăugați acest modul într-un mod standard:

Să vedem ce sa întâmplat, ca rezultat:

Serviciul Livepatch Canonical

Acum câteva luni, compania a lansat serviciul oficial Canonical Canonical LivePatch Service, care vă permite să patch kernel-ul "on the fly", folosind comenzi simple. Acest serviciu se adresează în principal utilizatorilor la nivel de întreprindere, și, prin urmare, se plătește.
Dar utilizatorii obișnuiți, de asemenea, se pot obține rapid toate cele mai recente actualizare de nucleu. Pentru a face acest lucru, trebuie să vă înregistrați pe Ubuntu One și a obține un simbol. Indicativul oferă o oportunitate de a stabili un program pentru 3 masini canonic-livepatch, care încarcă și adaugă patch-uri.

Să vedem cum funcționează Canonical Livepatch service. Să trecem de la link-ul de mai sus, vom obține token-ul și apoi executați:

După instalare, log out, apoi Să ne schimba înapoi și de a face:

Dacă totul a fost făcut în mod corect, vom primi următorul mesaj:

Apoi, rulați comanda:

Concluzia arată că sanonical-livepatch funcționează, iar în miezul tuturor cele mai recente actualizări. Mai multe informații pot fi obținute prin utilizarea opțiunii --verbose:

De asemenea, informații despre patch-uri instalate pot fi obținute prin analizarea deja menționate mai sus, directorul / sys / kernel / livepatch:

Kpatch_livepatch_Ubuntu_4_4_0_47_68_generic_14 - acesta este ultimul patch-uri încărcate. Cele mai recente cifre din numele de patch-uri (14) coincide cu numărul de versiune specificat în comanda de stare de ieșire canonic-livepatch (vezi. De mai sus).

Asigurați-vă că un nou plasture a fost adăugat, și puteți folosind comanda lspci:

concluzie

Și dacă doriți să exploreze subiectul mai profund, să acorde o atenție la următoarele link-uri:

Deși în moderne Linux kernel sisteme diferă un nivel destul de ridicat de stabilitate, posibilitatea de grave erori de sistem, cu toate acestea, există întotdeauna. Atunci când o eroare fatală, există o stare numită panică nucleu (kernel panică): handler implicit afișează informațiile pe care ar trebui să ajute la rezolvarea problemelor, și intră într-un sens infinit.

Continuam seria de articole despre mecanismele de containerizare. Ultima dată când am vorbit despre procesul de izolare folosind „namespace“ mecanism (namespace). Dar conteinerizare singur izolarea sunt resurse insuficiente. Dacă vom rula o aplicație într-un mediu izolat, trebuie să fim siguri că această cerere este alocat suficiente resurse și că nu se va consuma resurse suplimentare, rupând astfel restul lucrării sistemului. Pentru a rezolva această problemă în kernel.