Propozimi për të transferuar log-et sistemore lastlog, btmp, utmp dhe wtmp në përdorimin e SQLite

Në listën e shpërndarjes linux-api është hedhur në diskutim propozimi (RFC) për të zëvendësuar formatet binare të vjetra të regjistrimeve të sistemeve lastlog, btmp, utmp dhe wtmp me biblioteka të reja të ndara që përdorin SQLite si backend. Iniciativa ka për qëllim zgjidhjen e problemeve të akumuluara, përfshirë mbushjen e numëruesve të kohës 32-bitësh në vitin 2038, mungesën e zgjerueshmërisë, performancën e ulët të pyetjeve dhe mungesën e atomizmit në shkrim.

Aktualisht, për ruajtjen e të dhënave mbi sesionet dhe përpjekjet për autentifikim në Linux përdoren këto skedarë binarë me strukturë fikse:

  • /var/log/lastlog — время последнего входа (структура «struct lastlog» с полем «ll_time» 32-разрядного типа time_t);
  • /var/log/btmp — неудачные попытки входа;
  • /var/run/utmp — текущие сеансы;
  • /var/log/wtmp — история входов и выходов.

Formati i të dhënave të skedareve është zhvilluar disa dekada më parë dhe ka një sërë kufizimesh fundamentale:

  • Fusha “tv_sec” në strukturën “utmpx” dhe fusha “ll_time” në “lastlog” kanë tipin “int32_t”, vlera e numëruesve të kohës, mbi të cilën do të mbushet më 19 janar 2038. Për shkak të kërkesave për ABI ‑kompatibilitet, edhe në sistemet 64-bit këto fusha mbeten 32-bit, kështu që problemi do të preki të gjitha instalimet Linux.
  • Madhësia fikse e regjistrimeve nuk lejon shtimin e fushave të reja (p.sh., identifikuesi i enës, emri i shërbimit, adresa IP) pa zëvendësimin e plotë të formatit dhe rikonfigurimin e të gjitha utiliteteve.
  • Utilitetet last, lastb, who dhe lastlog janë të detyruara të skanojnë përmbajtjen e skedareve në mënyrë lineare. Kur regjistrimet janë të mëdha, pa përdorimin e indekseve që lejojnë filtrimin efikas të regjistrimeve, ngarkesa në sistemin e hyrjes/jesh dhe vonesat në ekzekutimin e pyetjeve bëhen të pranueshme.
  • Shkrimi në skedarin binar nuk është një operacion atomik. Në rast dështimi, shkrimi mund të dëmtohet pjesërisht.
  • Për të shmangur konfliktet gjatë shkrimit të një regjistri nga disa procese (p.sh., sshd dhe login) përdoren bllokimet flock, të cilat nuk garantojnë atomizmin dhe mund të çojnë në bllokime reciproke.

Autori i RFC propozon heqjen e plotë të formateve binarë në favor të bibliotekave të specializuara të ndara që përdorin SQLite. Për secilin lloj regjistri krijohet një bibliotekë e veçantë me një ndërfaqe të uniformizuar C: liblastlog2, libbtmp2, libutmp2 dhe libwtmp2. Të gjitha bibliotekat punojnë me Baza të të Dhënave, struktura e të cilave përfshin vulat 64-bit (tip INTEGER) dhe indekse sipas përdoruesit dhe kohës. Ka mundësi për të shtuar fushat e reja pa prishur pajtueshmërinë (nëpërmjet ALTER TABLE).

Mes argumenteve për përdorimin e SQLite përmendet përdorimi i tipit 64-bit INTEGER për ruajtjen e kohës epokale, angazhimi i indekseve për të ulur hyrjen/jesh përmes qasjes selektive në regjistrimet në vend të skanimit të plotë, mundësia për të shtuar fushat e reja pa ndryshuar regjistrimet ekzistuese, mbështetje për transaksionet ACID, moda WAL (Write-Ahead Logging) për qasje konkurruese pa bllokime, qëndrueshmëria e provuar e punës së SQLite.

Për të siguruar një kalim të qetë, propozimi ofron një strategji të “shkrim dual” (dual-write):

  • Programet që shkruajnë në skedarët binarë (login, sshd, sudo, cron etj.) modifikohen në mënyrë që të kryejnë njëkohësisht shkrimin si në skedarin e vjetër binar, ashtu edhe në bazën e re SQLite përmes bibliotekës përkatëse.
  • Po zhvillohen versione të reja të utiliteteve (last2, lastb2, who2, lastlog2), të cilat lexojnë të dhëna nga bazat SQLite, duke përdorur indekse për punë të shpejtë. Utilitetet e vjetra vazhdojnë të punojnë me skedarët e mëparshëm.
  • Pas disa vitesh, kur shumica dërrmuese e sistemeve do të azhurnohet, mbështetje për shkrimin në formatet e vjetra mund tëndalohet, dhe utilitetet e vjetra të shpallen të pasaktë.

Pyetjet që shtrohen për diskutim të mëtejshëm:

  • Arsyeja e ndarjes në biblioteka të veçanta ose bashkimit në një (p.sh., libsession2).
  • Zgjedhja e emrave për bibliotekat dhe utilitetet (të ruajmë emrat historikë ose të kalojmë në emra më të përgjithshëm).
  • Vendndodhja e skedarëve të bazave të të dhënave (/var/lib/ si për gjendjen e aplikacioneve apo /var/log/ për regjistrat).
  • Mekanizmi i versionimit të skemës dhe migrimit.
  • Parametrat e performancës së SQLite për skenarë të ndryshëm (hostingut, sisteme të inkorporuara).
  • Sigurimi i një backend fallback që ruan regjistrat në një format binar të thjeshtuar për sistemet ku SQLite mund të jetë tepër i madh (p.sh., pajisjet e inkorporuara me kufizime të rrepta në memorie).

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster