
Shumica e njerëzve e ndjekin kohën. Ne çojmë të ngrihemi në kohë për të kryer ritualet tona të mëngjesit dhe për t'u nisur për në punë, për të bërë një pushim në mesditë, për t'u përmbushur me afatet e projektit, për të festuar ditëlindjet dhe festat, për t'u ulur në aeroplan dhe shumë të tjera.
Për më tepër: disa prej nesh janë të obsesionuar pas kohës. Ora ime është me energji diellore dhe merr kohën e saktë nga Instituti Kombëtar i Standardeve dhe Teknologjisë () në Fort Collins (Kolorado) përmes një radiostacioni me valë të gjatë . Signalet e kohës sinkronizohen me orat atomike, gjithashtu të vendosura në Fort Collins. Fitbit-i im sinkronizohet me telefonin tim, i cili sinkronizohet me serverin , që në fund sinkronizohet me orat atomike.
Pajisjet gjithashtu ndjekin kohën
Ka shumë arsye për të cilat pajisjet dhe kompjuterët tanë kanë nevojë për kohë të saktë. Për shembull, në sektorin bankar, në tregjet financiare dhe në ndërmarrje të tjera, transaksionet duhet të kryhen në mënyrë të duhur dhe për këtë janë tejet të rëndësishme saktësitë e kohës.
Telefoni, tabletët, makinat, sistemet GPS dhe kompjuterët tanë kërkojnë një saktësim të duhur të kohës dhe datës. Dua që ora në tryezën time të kompjuterit të tregojë kohën e saktë. Dua që në kalendarin tim lokal, kujtesat të shfaqen në kohën e duhur. Kohë e saktë gjithashtu siguron që detyrat cron dhe systemd të fillojnë në kohën e duhur.
Data dhe koha gjithashtu janë të rëndësishme për regjistrimin, kështu që është pak më e thjeshtë të gjejmë log-et e caktuara duke u orientuar në datë dhe kohë. Për shembull, një herë punoja në DevOps (në atë kohë nuk e quanim kështu) dhe isha duke konfiguruar një sistem emaili në Karolinën e Veriut. Më parë, ne trajtonim më shumë se 20 milion email-e në ditë. Ndjekja e email-eve përmes një serie serverësh ose përcaktimi i sekuencës së saktë të ngjarjeve duke përdorur skedarët log në hoste gjeografikisht të shpërndara mund të jetë shumë më e lehtë nëse kompjuterët përkatës janë të sinkronizuar në kohë.
Koha Ă«shtĂ« njĂ« â orĂ«t shumĂ«
Hostet Linux duhet tĂ« kenĂ« parasysh se ekziston koha sistemore dhe koha RTC. RTC (Real Time Clock â ora e vĂ«rtetĂ«) Ă«shtĂ« njĂ« emĂ«r paksa i çuditshĂ«m dhe jo shumĂ« i saktĂ« pĂ«r orat harduerike.
Orët hardware punojnë vazhdimisht, edhe kur kompjuteri është i fikur, duke përdorur baterinë në pllakatën kryesore të sistemit. Funksioni kryesor i RTC është ruajtja e kohës kur lidhja me serverin e kohës nuk është e aksesueshme. Në ato kohëra, kur nuk ishte e mundur të lidhej me serverin e kohës përmes internetit, çdo kompjuter duhej të kishte orë të sakta të brendshme. Sistemet operative duhej të aksesonin RTC gjatë ngarkimit, dhe përdoruesi duhej të vendoste manualisht kohën e sistemit duke përdorur ndërfaqen hardware të konfigurimit BIOS, për të siguruar që ajo të ishte e saktë.
Orët hardware nuk e kuptojnë konceptin e zona përkatëse; RTC ruan vetëm kohën, por jo zonën përkatëse ose devijimin nga UTC (Koha Universale e Koordinuar, e njohur gjithashtu si GMT ose koha mesatare në Greenwich). Ju mund ta vendosni RTC duke përdorur një mjet, për të cilin do të flas më vonë në këtë artikull.
Koha e sistemit është koha që OS e përcjell në orët GUI në desktopin tuaj, në daljen e komandës date, në shenjat e kohës së regjistrimeve. Kjo i referohet gjithashtu kohës së krijimit, ndryshimit dhe hapjes së skedarëve.
Në faqen ka një përshkrim të plotë të RTC dhe orëve të sistemit.
ĂfarĂ« ndodh me NTP?
Kompjuterët në të gjithë botën përdorin NTP (protokolli i kohës në rrjet) për të sinkronizuar kohën e tyre me orët standarde referuese përmes internetit duke përdorur një hierarki serverash NTP. Serverët kryesorë të kohës janë në nivelin 1 dhe janë të lidhur drejtpërdrejt me shërbimet kombëtare të kohës në nivelin 0 përmes satelitëve, radios ose madje modemëve përmes linjave telefonike. Shërbimet e kohës në nivelin 0 mund të jenë orë atomike, një marrës radioteleviziv i cili është i vendosur për sinjalet që transmetohen nga orët atomike, ose një marrës GPS që përdor sinjalet e saktë të orëve që transmetohen nga satelitët GPS.
Në shumicën dërrmuese të serverëve referencë, janë të hapura disa mijëra serverë publik NTP stratum 2, të cilët janë të aksesueshëm për të gjithë. Shumë organizata dhe përdorues (përfshirë edhe mua) me numër të madh hostesh që kanë nevojë për një server NTP, preferojnë të vendosin serverët e tyre të kohës, kështu që vetëm një host lokal i qaset stratum 2 ose 3. Më pas, ata rregullojnë njësitë e mbetura në rrjet për të përdorur serverin lokal të kohës. Në rastin e rrjetit tim shtëpiak, ky është një server i nivelit 3.
Implementimet e ndryshme të NTP
Implementimi fillestar i NTP është ntpd. Më pas, dy implementime më të reja i janë bashkuar, chronyd dhe systemd-timesyncd. Të tre sincronizojnë kohën e hostit lokal me serverin NTP. Shërbimi systemd-timesyncd nuk është aq i besueshëm sa chronyd, por është i mjaftueshëm për shumicën e qëllimeve. Nëse RTC nuk është sinkronizuar, ai mund ta korrigjojë gradualisht kohën sistemike për t'u sinkronizuar me serverin NTP, kur koha lokale sistemike devijon pak. Shërbimi systemd-timesync nuk mund të përdoret si një server kohe.
â Ă«shtĂ« njĂ« implementim i NTP qĂ« pĂ«rmban dy programe: demonin chronyd dhe njĂ« ndĂ«rfaqe tĂ« komandĂ«s sĂ« quajtur chronyc. Chrony ka disa funksione qĂ« nĂ« shumĂ« raste janĂ« tĂ« domosdoshme:
- Chrony mund të sinkronizohet me një server kohe shumë më shpejt sesa shërbimi i vjetër ntpd. Kjo është e dobishme për laptopët ose kompjuterët desktop që nuk funksionojnë vazhdimisht.
- Ai mund të kompensojë variacionet e frekuencës së taktimeve, për shembull, kur hosti kalon në gjumë ose hyn në gjumë, ose kur frekuenca e taktimeve ndryshon për shkak të një ndryshimi të papritur të frekuencës që ngadalëson taktimete në ngarkesa të ulëta.
- Ai zgjidh problemet e kohës që lidhen me një lidhje rrjeti të paqëndrueshme ose ngarkesë të rrjetit.
- Ai rregullon vonesat në rrjet.
- Pas sinkronizimit fillestar të kohës, Chrony kurrë nuk ndalon orët. Kjo siguron intervale të qëndrueshme dhe të konsoliduara të kohës për shumë shërbime dhe aplikacione sistemike.
- Chrony mund të punojë edhe pa lidhje në rrjet. Në këtë rast, hosti lokal ose serveri mund të azhurnohet manualisht.
- Chrony mund të veprojë si një server NTP.
Së dyta: NTP është një protokoll që mund të zbatohet në një host Linux duke përdorur Chrony ose systemd-timesyncd.
Paketa RPM për NTP, Chrony dhe systemd-timesyncd janë të disponueshme në depozitë standarde të Fedora. RPM systemd-udev është menaxheri i ngjarjeve të bërthamës, i cili në Fedora instalohet si parazgjedhje, por nuk është i detyrueshëm për t'u përdorur.
Mund të instaloni të tri dhe të kaloni midis tyre, por kjo do të krijonte dhimbje koke të panevojshme. Prandaj, nuk është më mirë. Rrelease moderne të Fedora, CentOS dhe RHEL kanë kaluar në Chrony si zgjidhjen standarde dhe përveç kësaj, ata kanë edhe systemd-timesyncd. Unë besoj se Chrony funksionon mirë, ofron një ndërfaqe më të mirë se shërbimi NTP, ofron shumë më shumë informacion dhe rrit kontrollin, që pa dyshim do t'i pëlqente administratëve të sistemeve.
Ăaktivizimi i shĂ«rbimeve NTP
Mund të ketë një shërbim NTP tashmë të aktivizuar në host-in tuaj. Nëse është kështu, ju duhet ta çaktivizoni atë përpara se të kaloni në diçka tjetër. Unë kisha aktivizuar chronyd, kështu që përdora komandat në vijim për ta ndaluar dhe çaktivizuar atë. Ekzekutoni komandat përkatëse për çdo demon NTP që përdorni në host-in tuaj:
[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Hequr /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#Kontrolloni që shërbimi të jetë ndaluar dhe çaktivizuar:
[root@testvm1 ~]# systemctl status chronyd
â chronyd.service - NTP client/server
Loaded: e ngarkuar (/usr/lib/systemd/system/chronyd.service; e çaktivizuar; preset i shitësit: i aktivizuar)
Active: inaktive (e vdekur)
Docs: man:chronyd(8)
man:chrony.conf(5)
[root@testvm1 ~]#Kontrollimi i statusit para aktivizimit
Statusi i sinkronizimit të orëve të sistemit tregon nëse shërbimi NTP është aktivizuar. Duke qenë se nuk keni aktivizuar ende NTP, komanda timesync-status do të tregojë këtë:
[root@testvm1 ~]# timedatectl timesync-status
Dështoi në pyetjen për serverin: Nuk mund të aktivizoj partnerin e largët.Një kërkesë e drejtpërdrejtë për statusin ofron informacion të rëndësishëm. Për shembull, komanda timedatectl pa argumente ose parametra ekzekuton nënkomandën status si parazgjedhje:
[root@testvm1 ~]# timedatectl status
Koha lokale: Premte 2020-05-15 08:43:10 EDT
Koha universale: Premte 2020-05-15 12:43:10 UTC
Koha RTC: Premte 2020-05-15 08:43:08
Zona horare: Amerika/New_York (EDT, -0400)
Ora e sistemit e sinkronizuar: jo
Shërbimi NTP: jo aktiv
RTC në TZ lokale: po
Kujdes: Sistemi është konfiguruar për të lexuar kohën RTC në zonën e kohës lokale.
Ky mod nuk mund të mbështetet plotësisht. Do të krijojë probleme të ndryshme
me ndryshimet e zonës orare dhe rregullimet për orët verore. Koha RTC
nuk përditësohet kurrë, ajo mbështetet në facilitete të jashtme për ta ruajtur atë.
Nëse është e mundur, përdorni RTC në UTC duke thënë
'timedatectl set-local-rtc 0'.
[root@testvm1 ~]#Kështu do të merrni kohën lokale për hostin tuaj, kohën UTC dhe kohën RTC. Në këtë rast, koha sistemike është vendosur në zonën orare Amerika/New_York (TZ), RTC është vendosur në kohën e zonës lokale, dhe shërbimi NTP nuk është aktiv. Koha RTC ka filluar të devijojë pak nga koha sistemike. Kjo është normale për sistemet, orët e të cilave nuk janë sinkronizuar. Shuma e devijimit në host varet nga koha e kaluar që nga hera e fundit kur është bërë sinkronizimi i sistemit.
Kemi marrĂ« gjithashtu njĂ« paralajmĂ«rim nĂ« lidhje me pĂ«rdorimin e kohĂ«s lokale pĂ«r RTC â kjo lidhet me ndryshimet e zonĂ«s orare dhe rregullimet pĂ«r orĂ«t verore. NĂ«se kompjuteri Ă«shtĂ« i fikur nĂ« momentin kur duhet bĂ«rĂ« ndonjĂ« ndryshim, koha RTC nuk do tĂ« ndryshojĂ«. Por pĂ«r serverĂ«t ose hostet e tjera qĂ« punojnĂ« 24/7, kjo nuk Ă«shtĂ« problem. PĂ«r mĂ« tepĂ«r, çdo shĂ«rbim qĂ« ofron sinkronizimin e kohĂ«s NTP do tĂ« rregullojĂ« kohĂ«n e hostit edhe nĂ« fazĂ«n fillestare tĂ« nisjes, kĂ«shtu qĂ« pas pĂ«rfundimit tĂ« nisjes koha do tĂ« bĂ«het sĂ«rish e saktĂ«.
Vendosja e zonës orare
Zakonesh ju vendosni zonën orare gjatë procedurës së instalimit, dhe nuk keni detyrë ta ndryshoni më pas. Megjithatë, ka raste kur është e nevojshme të ndryshoni zonën orare. Ekzistojnë disa mjete që mund t'ju ndihmojnë. Për të përcaktuar zonën lokale orare, hosti Linux përdor skedarët e zonave orare. Këta skedarë ndodhen në katalogun /usr/share/zoneinfo. Në mënyrë të parazgjedhur, për zonën time orare, sistemi shkruan këtë: /etc/ localtime -> ../usr/share/zoneinfo/America/New_York. Por nuk keni nevojë të dini këto hollësi për të ndryshuar zonën orare.
E rëndësishme është të dini emrin zyrtar të zonës orare për vendndodhjen tuaj dhe komandën përkatëse. Për shembull, nëse dëshironi të ndryshoni zonën orare në Los Anxhelos:
[root@testvm2 ~]# timedatectl list-timezones | column
America/La_Paz Europe/Budapest
America/Lima Europe/Chisinau
America/Los_Angeles Europe/Copenhagen
America/Maceio Europe/Dublin
America/Managua Europe/Gibraltar
America/Manaus Europe/HelsinkiTani tani mund të vendosni zonën tuaj të kohës. Unë përdora komandën date për të kontrolluar ndryshimet, por ju gjithashtu mund të përdorni timedatectl:
[root@testvm2 ~]# date
E martë 19 Maj 2020 04:47:49 PM EDT
[root@testvm2 ~]# timedatectl set-timezone America/Los_Angeles
[root@testvm2 ~]# date
E martë 19 Maj 2020 01:48:23 PM PDT
[root@testvm2 ~]#Tani mund të ndryshoni përsëri zonën tuaj të kohës në kohën lokale.
systemd-timesyncd
Demoni systemd timesync ofron një implementim NTP që është lehtësisht menaxhues brenda kontekstit të systemd. Ai instalohet si rendi standard në Fedora dhe Ubuntu. Megjithatë, ai aktivizohet si rendi standard vetëm në Ubuntu. Nuk jam i sigurt për shpërndarjet e tjera. Ju mund ta kontrolloni vetë:
[root@testvm1 ~]# systemctl status systemd-timesyncdKonfigurimi i systemd-timesyncd
Skeda e konfigurimit për systemd-timesyncd është /etc/systemd/timesyncd.conf. Ky është një skedë e thjeshtë me më pak opsione të aktivizuara krahasuar me shërbimet e vjetra NTP dhe chronyd. Këtu është përmbajtja e kësaj skede (pa ndryshime të tjera) në makinerinë time virtuale me Fedora:
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.
[Time]
#NTP=
#FallbackNTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org 2.fedora.pool.ntp.org 3.fedora.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048E vetmja seksion që përmban, përveç komenteve, është [Time]. Të gjitha rreshtat e tjera janë të komentuar. Këto janë vlera standarde, nuk kanë nevoja për t'u ndryshuar (nëse nuk keni arsye për këtë). Nëse nuk keni një server NTP të caktuar në rreshtin NTP =, Fedora përdor si rezervë serverin standard të kohës së Fedora. Unë zakonisht e shtoj serverin tim të kohës:
NTP=myntpserverAktivizimi i timesync
Mund ta aktivizoni dhe ta bëni systemd-timesyncd aktiv në këtë mënyrë:
[root@testvm2 ~]# systemctl enable systemd-timesyncd.service
Krijuar lidhje simbolike /etc/systemd/system/dbus-org.freedesktop.timesync1.service â /usr/lib/systemd/system/systemd-timesyncd.service.
Krijuar lidhje simbolike /etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service â /usr/lib/systemd/system/systemd-timesyncd.service.
[root@testvm2 ~]# systemctl start systemd-timesyncd.service
[root@testvm2 ~]#Vendosja e orëve harduerike
Ja si duket situata pas aktivizimit të timesyncd:
[root@testvm2 systemd]# timedatectl
Koha lokale: E shtunë 2020-05-16 14:34:54 EDT
Koha universale: E shtunë 2020-05-16 18:34:54 UTC
Koha RTC: E shtunë 2020-05-16 14:34:53
Zona e kohës: America/New_York (EDT, -0400)
Ora e sistemit e sinkronizuar: po
Shërbimi NTP: aktiv
RTC në TZ lokale: jo Fillimi, diferenca midis RTC dhe kohës lokale (EDT) nuk kalon një sekondë, dhe shkalla e ndryshimit rritet me disa sekonda gjatë ditëve në vazhdim. Duke qenë se në RTC nuk ekziston koncepti i zona kohe, ekipi i timedatectl duhet të kryejë një krahasim për të përcaktuar zonën e duhur të kohës. Nëse koha e RTC nuk përputhet saktësisht me kohën lokale, kjo do të thotë se ajo nuk përputhet as me zonën e kohës lokale.
Në kërkim të informacionit shtesë, kontrollova statusin e systemd-timesync dhe zbuloj këtë:
[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
â systemd-timesyncd.service - Sinhronizimi i KohĂ«s nĂ« Rrjet
Ngarkuar: ngarkuar (\/usr\/lib\/systemd\/system\/systemd-timesyncd.service; e aktivizuar; parazgjedhja e shitësit: e çaktivizuar)
Aktiv: aktiv (në funksion) që nga Sat 2020-05-16 13:56:53 EDT; 18 orë më parë
Dok: man:systemd-timesyncd.service(8)
PID kryesor: 822 (systemd-timesyn)
Statusi: "Sinhronizimi inicial me serverin e kohës 163.237.218.19:123 (2.fedora.pool.ntp.org)."
Detyra: 2 (kufiri: 10365)
Memoria: 2.8M
CPU: 476ms
CGroup: \/system.slice\/systemd-timesyncd.service
ââ822 \/usr\/lib\/systemd\/systemd-timesyncd
Mai 16 09:57:24 testvm2.both.org systemd[1]: Po nisin Sinhronizimin e Kohës në Rrjet...
Mai 16 09:57:24 testvm2.both.org systemd-timesyncd[822]: Koha e sistemit është e papërcaktuar ose ka bërë skenë prapa, duke u rikthyer nga koha e regjistruar: Sat 2020-05-16 13:56:53 EDT
Mai 16 13:56:53 testvm2.both.org systemd[1]: Nisin Sinhronizimin e Kohës në Rrjet.
Mai 16 13:57:56 testvm2.both.org systemd-timesyncd[822]: Sinhronizimi inicial me serverin e kohës 163.237.218.19:123 (2.fedora.pool.ntp.org).
[root@testvm2 systemd]#Kujdesi për mesazhin në regjistër, që thotë se koha e sistemit nuk është e përcaktuar ose është rikthyer. Shërbimi Timesync e vendos kohën e sistemit në bazë të markës së kohës. Markat e kohës mbahen nga demonët e timesync dhe krijohen me çdo sinhronizim të suksesshëm.
Komanda timedatectl nuk ka mundësinë të marrë vlerën e orëve harduerike nga orët e sistemit. Ajo mund të vendosë vetëm kohën dhe datën nga vlera e futur në linjën e komandave. Ju mund ta vendosni RTC në të njëjtën vlerë si koha e sistemit, duke përdorur komandën hwclock:
[root@testvm2 ~]# \/sbin\/hwclock --systohc --localtime
[root@testvm2 ~]# timedatectl
Koha lokale: Hënë 2020-05-18 13:56:46 EDT
Koha universale: Hënë 2020-05-18 17:56:46 UTC
Koha RTC: Hënë 2020-05-18 13:56:46
Zona e kohës: Amerika\/New_York (EDT, -0400)
Ora e sistemit e sinhronizuar: po
Shërbimi NTP: aktiv
RTC nĂ« TZ lokale: poOpsioni âlocaltime tregon se orĂ«t harduerike tregojnĂ« kohĂ«n lokale, dhe jo UTC.
Përse ju nevojitet në të vërtetë RTC?
Ădo implementim i NTP do tĂ« vendosĂ« orĂ«n e sistemit gjatĂ« nisjes. Por pĂ«rse Ă«shtĂ« RTC? Kjo nuk Ă«shtĂ« plotĂ«sisht e saktĂ«: kjo ndodh vetĂ«m nĂ«se keni njĂ« lidhje nĂ« rrjet me njĂ« server kohe. SidoqoftĂ«, shumĂ« sisteme nuk kanĂ« qasje tĂ« vazhdueshme nĂ« lidhjen nĂ« rrjet, prandaj orĂ«t harduerike janĂ« tĂ« dobishme pĂ«r tĂ« lejuar Linux-in tĂ« vendosĂ« kohĂ«n e sistemit mbi ta. Kjo Ă«shtĂ« mĂ« mirĂ« se sa vendosja e kohĂ«s manualisht, edhe nĂ«se ajo mund tĂ« devijojĂ« nga koha reale.
Përfundim
NĂ« kĂ«tĂ« artikull shqyrtohen disa mjete pĂ«r menaxhimin e datĂ«s, kohĂ«s dhe zona tĂ« kohĂ«s. Mjeti systemd-timesyncd siguron njĂ« klient NTP, i cili mund tĂ« sinkronizojĂ« kohĂ«n nĂ« hostin lokal me serverin NTP. SidoqoftĂ«, systemd-timesyncd nuk ofron njĂ« shĂ«rbim serveri, prandaj, nĂ«se ju nevojitet njĂ« server NTP nĂ« rrjetin tuaj, duhet tĂ« pĂ«rdorni diçka tjetĂ«r â pĂ«r shembull, Chrony, pĂ«r tĂ« funksionuar si server.
Preferoj të kem një implementim të vetëm për çdo shërbim në rrjetin tim, prandaj përdor Chrony. Nëse nuk keni nevojë për një server NTP lokal ose nëse nuk ju shqetëson të përdorni Chrony si server dhe systemd-timesyncd si klient SNTP. Në fund të fundit, nuk ka nevojë të përdorni funksionalitetet shtesë të Chrony si klient, nëse jeni të kënaqur me funksionalitetin e systemd-timesyncd.
Një vërejtje tjetër: nuk jeni të detyruar të përdorni mjetet systemd për implementimin e NTP. Mund të përdorni një version të vjetër ntpd, Chrony ose një implementim tjetër NTP. Systemd përbëhet nga shumë shërbime; shumë prej tyre janë opcionalë, prandaj mund të çaktivizohen dhe të përdoren diçka tjetër në vend të tyre. Nuk është një monstruozitet i madh monolitik. Mund të mos e preferoni systemd ose pjesët e tij, por ju duhet të merrni një vendim të arsyeshëm.
Më pëlqen implementimi i NTP në systemd, por preferoj Chrony, sepse ai përmbush më mirë nevojat e mia. Ky është Linux, babe -)
SOF6
VDSina ofron , njĂ« zgjedhje e gjerĂ« e sistemeve operative pĂ«r instalim automatik, ka mundĂ«si tĂ« instaloni çdo OS nga , e pĂ«rshtatshme zhvillimi ynĂ« i vetĂ« dhe pagesĂ« nĂ« bazĂ« ditore. KujtojmĂ«, kemi serverĂ« tĂ« pĂ«rjetshĂ«m, tĂ« cilĂ«t me siguri nuk janĂ« tĂ« nĂ«nshtruar ndaj kohĂ«s đ
Burimi: habr.com
