Ang mas simple nga buluhaton, mas kanunay ako masayop

Ang mas simple nga buluhaton, mas kanunay ako masayop

Kining gamay nga buluhaton mitungha usa ka Biyernes sa hapon ug kinahanglan nga mokuha ug 2-3 ka minuto nga oras. Sa kinatibuk-an, sama sa kanunay.

Gihangyo ako sa usa ka kauban sa pag-ayo sa script sa iyang server. Gibuhat nako kini, gihatag kini kaniya ug wala tuyoa nga nahulog: "Ang oras 5 minuto paspas." Himoa nga ang server ang magdumala sa pag-synchronize mismo. Tunga sa oras, usa ka oras ang milabay, ug siya mihubo gihapon ug hilom nga nanghimaraot.

“Buang! — Naghunahuna ko, nga mobalhin sa console sa server — okay, mopahuway ko sa pipila ka minuto.

Tan-awon nato ntp, rdate, sdwdate wala ma-install orasyncd disabled ug dili modagan.

# timedatectl
      Local time: Sun 2019-08-25 20:44:39 +03
  Universal time: Sun 2019-08-25 17:44:39 UTC
        RTC time: Sun 2019-08-25 17:39:52
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Dinhi akong mamatikdan dayon nga husto ang oras sa hardware: mas dali ang pag-navigate.

Dinhi nagsugod ang serye sa mga kasaypanan.

Ang unang sayop. Salig sa kaugalingon

Click-clock...

# systemctl enable systemd-timesyncd.service && systemctl start systemd-timesyncd.service && ntpdate 0.ru.pool.ntp.org && timedatectl set-ntp on && timedatectl
25 Aug 21:00:10 ntpdate[28114]: adjust time server 195.210.189.106 offset -249.015251 sec
      Local time: Sun 2019-08-25 21:00:10 +03
  Universal time: Sun 2019-08-25 18:00:10 UTC
        RTC time: Sun 2019-08-25 18:00:10
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

Maayo ang tanan, ang oras gi-synchronize, ang oras sa sistema nahiuyon sa hardware. “Dad-a,” miingon ko ug mibalik sa akong negosyo.

“Kuhaa unsa? - ang kauban nasuko. “Parehas nga oras!”

Kon mas masulbad nimo ang kasagarang mga problema, mas mokidlap ang imong panghuna-huna ug dili na nimo hunahunaon nga ang ika-gatus o ika-libo nga sitwasyon magkalahi, apan dili karong panahona.

# timedatectl
      Local time: Sun 2019-08-25 21:09:15 +03
  Universal time: Sun 2019-08-25 18:09:15 UTC
        RTC time: Sun 2019-08-25 18:05:04
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Ang oras sa sistema sayup na usab.

Atong sulayan pag-usab:

# ntpdate 0.ru.pool.ntp.org && timedatectl && sleep 1 && timedatectl
25 Aug 21:07:37 ntpdate[30350]: step time server 89.175.20.7 offset -249.220828 sec
      Local time: Sun 2019-08-25 21:07:37 +03
  Universal time: Sun 2019-08-25 18:07:37 UTC
        RTC time: Sun 2019-08-25 18:07:37
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
      Local time: Sun 2019-08-25 21:11:46 +03
  Universal time: Sun 2019-08-25 18:11:46 UTC
        RTC time: Sun 2019-08-25 18:07:37
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Buhaton nato kini nga lahi:

# date -s "2019-08-25 21:10:30" && date && sleep 1 && timedatectl
Sun Aug 25 21:10:30 +03 2019
Sun Aug 25 21:10:30 +03 2019
      Local time: Sun 2019-08-25 21:14:36 +03
  Universal time: Sun 2019-08-25 18:14:36 UTC
        RTC time: Sun 2019-08-25 18:10:30
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Ug ingon niini:

# hwclock --hctosys && timedatectl && sleep 1 && timedatectl
      Local time: Sun 2019-08-25 21:11:31 +03
  Universal time: Sun 2019-08-25 18:11:31 UTC
        RTC time: Sun 2019-08-25 18:11:31
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
      Local time: Sun 2019-08-25 21:15:36 +03
  Universal time: Sun 2019-08-25 18:15:36 UTC
        RTC time: Sun 2019-08-25 18:11:32
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Ang oras gitakda alang sa usa ka split segundo, ug diha-diha dayon nagsugod sa "pagdali" pag-usab.

Sa parehas nga oras, sa mga troso, sa panahon sa ingon nga pagbag-o sa manwal, makita ra ang mga taho sa sistema nga ang oras nausab, sa tinuud, sa husto / sayup nga direksyon ug usahay Pag-sync pag-usab gikan sa systemd-timesyncd.

Aug 25 21:18:51 wisi systemd[1]: Time has been changed
Aug 25 21:18:51 wisi systemd-timesyncd[29258]: System time changed. Resyncing.
Aug 25 21:18:51 wisi systemd[1187]: Time has been changed
Aug 25 21:18:51 wisi systemd[1]: Time has been changed
Aug 25 21:18:51 wisi systemd[1187]: Time has been changed

dinhi

# ps afx | grep "[1]187"
 1187 ?        Ss     0:02 /lib/systemd/systemd --user

Niini nga punto, kinahanglan na nga pangitaon ang hinungdan, apan sa 18 ka tuig nga pagdumala, ang utok nagtigum sa mga estadistika sa mga "panahon" nga mga sayup ug, tungod sa batasan, gibasol pag-usab ang pag-synchronize.
Ato kining i-off sa hingpit.

# timedatectl set-ntp off && systemctl stop systemd-timesyncd.service
# hwclock --hctosys && timedatectl && sleep 1 && timedatectl
      Local time: Sun 2019-08-25 21:25:40 +03
  Universal time: Sun 2019-08-25 18:25:40 UTC
        RTC time: Sun 2019-08-25 18:25:40
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
      Local time: Sun 2019-08-25 21:29:31 +03
  Universal time: Sun 2019-08-25 18:29:31 UTC
        RTC time: Sun 2019-08-25 18:25:41
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

ug sa mga troso

Aug 25 21:25:40 wisi systemd[1]: Time has been changed
Aug 25 21:25:40 wisi systemd[1187]: Time has been changed
Aug 25 21:29:30 wisi systemd[1]: Time has been changed
Aug 25 21:29:30 wisi systemd[1187]: Time has been changed

Pag-sync pag-usab nawala ug kung dili ang mga troso limpyo.

Pagsusi sa mga konklusyon tcpdump sa port 123 sa tanan nga mga interface. Walay mga hangyo, apan ang panahon nagdagan pa.

Duha ka sayop. Pagdali

Adunay usa ka oras nga nahabilin hangtod sa katapusan sa semana sa trabaho, ug dili ko gusto nga mobiya alang sa katapusan sa semana nga adunay usa ka gamay nga wala masulbad nga problema (ayaw pagtagad sa oras sa code, ang artikulo gisulat sa sunod nga mga adlaw ).
Ug dinhi pag-usab, imbes nga pangitaon ang hinungdan, nagsugod ako sa pagsulay sa paghimo og katin-awan alang sa resulta. Miingon ko nga "imbento" tungod kay bisan unsa pa ka lohikal ang katin-awan sa resulta, kini usa ka sayup nga pamaagi sa pagsulbad sa problema.

Kini nga server usa ka streaming server ug nag-convert sa DVB-S2 stream ngadto sa IP. Ang stream sa DVB-S adunay mga timestamp, mao nga ang mga tigdawat, multiplexer, scrambler ug telebisyon kanunay nga naggamit niini aron i-synchronize ang orasan sa sistema. Ang mga drayber sa board sa DVB-S gitukod sa kernel, mao nga ang labing paspas nga paagi aron masiguro nga ang sapa sa DVB-S2 gikuha mao ang pagdiskonekta sa mga kable nga gikan sa "mga plato". Maayo na lang, ang server anaa sa luyo sa bungbong, mao nga mahimo kini.

Siyempre, kung ang mga troso adunay kung unsa ang kinahanglan didto, dili kini mahitabo, apan labaw pa niana, pag-usab, sa katapusan sa artikulo.

Aw, tungod kay gitangtang na namo ang tanang satellite signal, tangtangon usab namo ang mga terrestrial - sa samang higayon among gibira ang tanang network cables. Ang server naputol gikan sa gawas nga kalibutan ug nagtrabaho sa hingpit nga awtonomiya, apan ang sistema sa orasan nagdali.

Nahuman na ang semana sa trabaho, ug ang isyu sa petsa/oras mismo dili kritikal, mao nga makauli ka lang, apan ania ako nakahimo og bag-ong sayop.

Sayop sa tulo. Mga magtatambag

Dili gayud! Ayaw pagpangutana sa mga forum ug sa kinatibuk-ang espesyalista (a la stackoverflow) nga mga site kung ang tubag niini nanginahanglan labaw pa sa pagtuon sa una nga panid sa Google ug pagbasa sa usa ka panid sa tawo.

Ipabalik ka nila sa Google, basaha ang parehas nga tawo ug gipatin-aw sa kadaghanan ang mga lagda sa forum/site, apan dili ka hatagan og tubag.

Ania ang pipila ka tumong nga mga hinungdan:

  • walay usa gawas kanimo ang makahibalo usab sa problema;
  • walay makapahigayon og mga pagsulay ubos sa samang kondisyon sama sa imoha

ug suhetibo:

  • mahimo nga dili nimo ihatag ang tanan nga mga input alang sa pagsulbad sa problema, tungod kay nakahimo ka na sa "husto" nga direksyon ug gipresentar ang esensya sa isyu nga nagpunting niini;
  • ang foreman (moderator, old-timer, admin) sakto lagi, kung sayop ang foreman... aw kabalo ka...

Kung, sa pagtubag sa mga komento, nagpabilin ka sulod sa mga limitasyon sa gi-censor nga bokabularyo, nan ikaw adunay kusog nga mga ugat.

desisyon

Dili kinahanglan nga bahinon ang mga buluhaton sa yano ug komplikado.

Mohunong kami sa pagsalig sa among kasinatian, estadistika, mga magtatambag ug magsugod nga dili "ipasabut" ang katapusan nga sangputanan, apan kanunay nga mangita alang sa hinungdan.

Tungod kay adunay nagtakda sa oras, ang katugbang nga tawag sa sistema kinahanglan mahitabo.

Sama sa dokumentasyon sa software ang labing kaayo nga mga dokumento mao ang mga gigikanan, mao usab sa pagdumala sa sistema ang labing kaayo nga katabang mao ang pag-audit, sa among kaso gi-audit.

Usa ka higayon sa pagduhaduhaNakaagi ako sa mana, apan dili hingpit nga sigurado nga ang oras sa Linux mahimo ra itakda clock_settime и settimeofday, mao nga alang sa unang pagsulay gipili nako ang tanan nga "angay" nga mga tawag:

# man syscalls | col | grep -F '(2)' | grep -vE '(:|;)' | grep -E '(time|date|clock)' | sed "s/(2).*//" | xargs -I SYSCALL echo "-S SYSCALL " | xargs echo
-S adjtimex -S clock_adjtime -S clock_getres -S clock_gettime -S clock_nanosleep -S clock_settime -S futimesat -S getitimer -S gettimeofday -S mq_timedreceive -S mq_timedsend -S rt_sigtimedwait -S s390_runtime_instr -S setitimer -S settimeofday -S stime -S time -S timer_create -S timer_delete -S timer_getoverrun -S timer_gettime -S timer_settime -S timerfd_create -S timerfd_gettime -S timerfd_settime -S times -S utime -S utimensat -S utimes

ug paglabay s390_runtime_instr, stime, timerfd_create, nga auditctl wala makaila niini, sa sinugdan naglunsad og audit sa porma:

auditctl -a exit,always -S adjtimex -S clock_adjtime -S clock_getres -S clock_nanosleep -S clock_settime -S futimesat -S getitimer -S gettimeofday -S mq_timedreceive -S mq_timedsend -S rt_sigtimedwait -S semtimedop -S setitimer -S settimeofday -S time -S timer_create -S timer_delete -S timer_getoverrun -S timer_gettime -S timer_settime -S timerfd_gettime -S timerfd_settime -S times -S utime -S utimensat -S utimes

Pagkahuman sa pagsiguro nga wala’y ubang mga troso sa mga lokasyon sa log nga ako interesado syscalls Gawas niining duha, gigamit ra nako sila.

Pagpadagan sa usa ka pag-audit sa tawag sa sistema clock_settime и settimeofday ug sulayi nga usbon ang petsa:

# auditctl -a exit,always -S clock_settime -S settimeofday && date -s "2019-08-22 12:10:00" && sleep 5 && auditctl -D

Gidugang ang lima ka segundo nga paglangan aron ang atong "parasito" garantiya nga matul-id ang oras.

Atong tan-awon ang report:

# aureport -s -i

Syscall Report
=======================================
# date time syscall pid comm auid event
=======================================
Warning - freq is non-zero and incremental flushing not selected.
1. 08/22/2019 12:10:00 settimeofday 3088 chkcache_proces root 479630
2. 08/26/2019 09:37:06 clock_settime 1538 date root 479629

Dinhi atong makita ang atong petsa ug wala namo mailhi chkcache_processes. Nahuman kini sa report sa ibabaw tungod kay gisunod-sunod sa aureport ang output pinaagi sa petsa kung nag-convert gikan sa binary, ug ang panghitabo nahitabo sa oras nga among gitakda petsa -s "2019-08-22 12:10:00".
Kinsay nanganak niya?

# ausearch -sc settimeofday --comm "chkcache_proces"
----
time->Thu Aug 22 12:10:00 2019
type=PROCTITLE msg=audit(1566465000.000:479630): proctitle="/usr/local/bin/oscam"
type=SYSCALL msg=audit(1566465000.000:479630): arch=c000003e syscall=164 success=yes exit=0 a0=7fde0dfc6e60 a1=0 a2=136cf a3=713ba56 items=0 ppid=3081 pid=3088 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts20 ses=68149 comm="chkcache_proces" exe="/usr/local/bin/oscam" key=(null)

/usr/local/bin/oscam - nakit-an ang among parasito. Bisan pa sa iyang "malisyoso" nga kinaiya, imposible nga balibaran ang conditional access system, apan gusto ko nga mahibal-an oscam, WTF?

Ang tubag dali nga makit-an sa source codes:

#if defined(CLOCKFIX)
if (tv.tv_sec > lasttime.tv_sec || (tv.tv_sec == lasttime.tv_sec && tv.tv_usec >= lasttime.tv_usec)) // check for time issues!
{
  lasttime = tv; // register this valid time
}
  else
{
  tv = lasttime;
  settimeofday(&tv, NULL); // set time back to last known valid time
  //fprintf(stderr, "*** WARNING: BAD TIME AFFECTING WHOLE OSCAM ECM HANDLING, SYSTEMTIME SET TO LAST KNOWN VALID TIME **** n");
}

Nindot tan-awon diri nagkomento linya pasidaan...

Source: www.habr.com

Idugang sa usa ka comment