Archiv pro rubriku: Nezařazené

Tři měsíce se Zen To Done, Zen a hotovo!

Tři měsíce se Zen To Done.

Zen_Habits-logo

Na začátku podnikání jsem se rozhodl změnit přístup k osobnímu managementu, již dříve v minulosti (cca 4 roky zpět) jsem se pokoušel o GTD (Getting Things Done), metoda zajímavá, vše jsem měl zpracované do kontextů, tříděné a zprvu to vypadalo jako, že jsem produktivní, problém podle měl byl s efektivitou GTD, točil jsem se v bludném kruhu, ono totiž efektivita není o tom udělat vše, ale udělat jen to podstatné, co je důležité. GTD mě nutilo udělat vše, mít prázdný inbox, ale už mě nenutilo udělat nebo rozlišit to podstatné.

Kniha ZEN A HOTOVO, zcela jednoduchý systém osobní produktivity , http://www.melvil.cz/kniha-zen-a-hotovo/ , vše podstatné je uvnitř, prečteno pohodlně za víkend.

Vše by mělo být vymyšleno tak jednoduše, jak je to jen možné - ale ne jednodušeji. Albert Einstein

Co se mi líbí na ZTD (osobní pohled)

  • minimalismu (miluji minimalismu)
  • minimální verze ZTD, nemusíte osvojovat veškeré návyky
  • neosvojujete návyky najednout, ale postupně, u GTD to na mě padlo celé najednou (teď začneš každý den dělat tohle, tohle, tohle a tamto)
  • věci mají svoji důležitost (zasadní podle mě a pro mě)
  • nejdůležitější úkol(y) dne a týdne, překvapivě funkční věc
  • nutí člověka zjednodušovat, zjednodušení je klíčem k efektivitě
  • mluvením nic neuděláš
  • ZTD je o práci nikoliv o celém systému jako GTD
  • kniha je malá, hubená, minimalistická
"Věci, na kterých záleží nejvíce, by něměly být vydány na milost těm, na kterých nezáleží vůbec." Goethe

Předchozí text popisuje velmi zlehka osobní zkušenosti s praktikováním a spíše první pocity ze ZTD, nechytejte mě za slova, znova je to osobní. Cítím se lépe, mám pocit, že to podstatné zvládám, věci se posouvají dopředu, ano jsou věci co nestíhám, ale nic kritického se kvůli tomu neděje (zatím). Na ZTD není potřeba nic, stačí zápisník (používám obyčejný, ale vyhlédnul jsem si notes Moleskine) a výhodou je po ruce telefon s přístupem k emailu a kalendáři (Google Apps), nic více a k tomu minimalistické návyky.

Logovat → Sort → Plánování → Výkon → Odpočinek.

ZTD není podle mě to týmu, je to o osobní produktivitě a vlastním zvládání času (života), toto je osobní názor a pocit.

Přemýšlím, že napíši aplikaci pro Android s orientací na ZTD, mám trochu představu jak by to mělo vypadat, hodil by se parťák.

A poslední věc, žádný systém nepovede k dlouhodobému úspěchu a štěstí pokud neděláte co Vás baví a nevěnujete tomuto 100%.

Máte zájem o zapůjčení knihy ? Ozvěte se. To je vše!

Děkuji za pozornost. František Havel. MOJEservery.cz

zen-to-done-ZTD-2

zen-to-done-ZTD-3

Proč používat příkazový řádek(CLI)

Proč používat příkazový řádek ?

Pozn.: Volně přeloženo a převzato ze serveru packetlife.net, je to přesné, děkujeme.

Jedním z důvodu proč profesionálové používají příkazový řádek (CLI, command line) je stručnost, efektivita, přesnost a popisnost, geekové miluji stručnost a efektivnost, navíc lenost je matkou pokroku.

Posuďte sami, máte nového junior kolegu a posíláte mu postup emailem pro konfiguraci NAT na pobočkovém routeru (Cisco), který email by jste psali raději?

GUI


Přihlaš se do SDM (Cisco Router and Security Device Manager, GUI managent, budeš si ho muset stáhnout prvně z routeru), jdi do konfigurační záložky, klikni na NAT, poté “Advanced NAT”, klikni na next, vyber rozhraní FastEthernet0 z rozbalovacího seznamu a klikni na next, přikládám obrázek.

cisco-sdm_step1

Dalším krokem v seznamu obou rozhraní vyber Vlan1 s ip adresou 192.168.1.0/24 a klikni na next, , přikládám obrázek.

cisco-sdm_step2

Poslední krokem je přidání statického NAT pravidla pro VPN server, klikni na “Add’ tlačítko a vyplň tyto hodnoty, přikládám obrázek.

cisco-sdm_step3

Potvrď kliknutím OK, a poté klikni na “Next”, zkontroluj v okne NAT pravidlo. Klikni na “Finish” v poslední kroku, vyskočí okno s hláškou ve smyslu “configuration saved”, poté klikni na OK a zavři SDM, hotovo.

CLI


Přihlaš se na router pomoci ssh nebo telnet a vlož tuto konfiguraci.

configure terminal
interface FastEthernet0
 ip nat outside
!
interface Vlan1
 ip nat inside
!
ip nat inside source static udp 192.168.1.204 1194 interface FastEthernet0 1194
ip nat inside source list 1 interface FastEthernet0 overload
!
access-list 1 permit 192.168.1.0 0.0.0.255
exit
copy run start

Hotovo!


Máte vybráno? ;-).

Nesrážíme zde podstatu a smysl GUI nástrojů, jen až potkáte “profesionála”, který se bude štítit, bát a odmítat textové rozhraní, CLI a příkazový řádek, buďte opatrní!

František Havel, MOJEservery.cz

Linux: Nové DNS servery pro síť TaNET

Pro našeho zákazníka společnost TaNET West s.r.o. provozující rozsáhlou počítačovou síť a lokálního internetového poskytovatele jsem vytvořili dvojici nových DNS serverů pro jeho klienty.

DNS (Domain Name System) je hierarchický systém doménových jmen, který je realizován servery DNS a protokolem stejného jména. Jeho hlavním úkolem jsou vzájemné převody doménových jmen a IP adres uzlů sítě, laicky řečeno je to služba pro převod doménového jména (např. www.mojeservery.cz) na IP adresu (46.167.204.50) se kterou pracují počítače, ale pro lidi je obtížně zapamatovatelná.

Z předchozího textu vyplývá důležitost DNS serverů jako jedné z klíčových komponent celého internetu, proto je vhodné provozovat ve větších sítích vlastní DNS a nespoléhat se na cizí služby (pro poskytovatele internetu je v to podstatě nutnost).

Dvojice nových rekurzivních DNS serverů TaNET:
  • 1x fyzický server
  • 1x virtuální server
  • operační systém Linux Debian 8 Stable 64bit
  • DNS server bind9
  • optimalizovaná konfigurace
  • podpora DNSSEC
  • cache
  • ACL (allow-query, allow-recursion, allow-transfer)
  • response-rate-limiting
  • možnost blokování konkrétních domén nebo celých stromů
  • reverzní záznamy (master-slave AXFR transfer)
  • fail2ban, firewall
  • NTP synchronizace času
  • SNMP pro monitoring stavu stroje
  • SMTP exim4 (relayhost, pouze notifikace)
  • WWW rozhraní pro snadnou editaci reverzních zón

Děkujeme za možnost realizace, bylo to fajn, přejeme vysoký uptime a hodně úspěšných resolvů (překladů).

František Havel

Linux: Firewall Iptables v příkladech

Zcela bez komentáře, linux firewall iptables v pár jednoduchých příkladech.

firewall status
# iptables -L -n -v
# iptables -n -L -v --line-numbers
# iptables -L INPUT -n -v
# iptables -L OUTPUT -n -v --line-numbers
Smazání všech pravidel (-F), chainu(-X), výchozí politika chainu(-P)
# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEP

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
Insert a delete pravidel
# iptables -L INPUT -n --line-numbers
# iptables -I INPUT 10 -s 192.168.0.0/16 -j DROP
# iptables -L INPUT -n --line-numbers
# iptables -D INPUT 10
# iptables -D INPUT -s 192.168.0.0/16 -j DROP
Zahodit veškerý příchozí trafik i předávaní mezi rozhraním (forward), povolit pouze odchozí (ze stroje)
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Zahození privátních rozsahů na rozhraní do internetu (eth0)
# iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
# iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
# iptables -A INPUT -i eth0 -s 192.16.0.0/16 -j DROP
# iptables -A INPUT -i eth0 -s 224.0.0.0/4 -j DROP
# iptables -A INPUT -i eth0 -s 240.0.0.0/5 -j DROP
# iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP
  • 10.0.0.0/8 -j  (A
  • 172.16.0.0/12  (B)
  • 192.168.0.0/16 (C)
  • 224.0.0.0/4 (MULTICAST D)
  • 240.0.0.0/5 (E)
  • 127.0.0.0/8 (LOOPBACK)
Blokovaní příchozí, odchozí adresy, rozsahu, portu
# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP
# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
# iptables -A OUTPUT -d 1.2.3.4 -j DROP
# iptables -A OUTPUT -d 192.168.1.0/24 -j DROP
# iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP
Logování, burst a drop
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Zahození podle MAC
# iptables -A INPUT -m mac --mac-source d4:3d:7e:27:79:fc -j DROP
Blokování/povolení ICMP echo request/reply (ping)
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Otevření skupiny(rozsahu) portů
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT
Manipulace s rozsahem adres
# iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT
Povolení služeb
## ssh tcp port 22 ##
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
## CUPS (tisk pouze z LAN) ##
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
## NTP ##
iptables -A INPUT -m state --state NEW -p udp --dport 123 -j ACCEPT
## SMTP ##
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
# DNS ##
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
## http/https (Apache) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
## POP3 ##
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
## IMAP ##
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
## Samba (pouze z LAN) ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
## PROXY (pouze z LAN) ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
## mysql ##
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
Omezení počtu paralelních spojení (SSH 3 spojení z jedné IP adresy, HTTP 80 spojení z adres resp. seskupenou pod /24 IPv4 masku hosta)
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

 

František Havel

OPENWRT: Realizace levné VPN sítě TP-LINK WR1043ND, Nexx WT3020F

Ukázkové nasazení alternativního firmware OpenWrt v routerech TP-LINK a Nexx s cílem realizace levné firemní VPN (Virtuální privátní sítě) infrastuktury (propojení poboček s centrálou).

Za málo peněz hodně muziky, když potřebujete ze svého routeru vymáčknout něco navíc zkuste alternativní firmware OpenWrt a možná budete překvapeni.

Proč jsme použili OpenWrt? Narazili jsme na potřeby našeho nového klienta, malá firmička s centrální office (zde leží server a data, nějaky přechod do cloudu zatím nehrozí) a tři mikro-pobočky (pro představu mikro = 1-2 lidi = 1-2 stolní PC, 1 tiskárna, připojení přes místní wifi, bez veřejné statické IP, potřeba se připojit specializovaných programem na server do centrály).

Ilustrace dokresluje topologii budoucí VPN sítě.

blog-penwrt-vpn

Situace vcelku jasná, další požadavek byl velmi levně :-(. (nedáte si na wifi linku za 400Kč/měsíčně CISCO VPN za “majlant”, navíc jsme dostali informaci, že jednu z poboček už dvakrát vykradli, to je svět, že).

S OpenWrt a OpenVPN s tím lze něco dělat, železo “zdarma” a placená bude práce, tedy konfigurace, jelikož VPN routery se navíc mají na pobočky pouze zaslat pošlou poštou s připravenou konfigurací a vzdáleně dokonfigurovat.

TP-LINK WR1043ND – centrála ~ cena 1000Kč starší model

  • Atheros AR9132@400MHz
  • 32MB RAM
  • 8MB FLASH
  • 4x LAN, 1x WAN

Otestována rychlost OpenVPN, s AES se lze dostat na ~ 8Mbit, při použití “horšího” šifrování (3DES) lze dostat ~ 12Mbit při cca 40% zátěži CPU. (v přípádě problému dle dohody lze tento prvek vyměnit za rychlejší, ale vzhledem k rychlostem přípojek poboček zatím asi netřeba).

blog-openwrt-1   blog-openwrt-4  blog-openwrt-6 blog-openwrt-7 blog-openwrt-8  blog-openwrt-10

Jako OS použit zmiňovaný OpenWRT, poslední stable verze Barrier Braker, konfigurace služby OpenVPN, routing a firewall.

Nexx WT3020F – pobočky, malý zázrak za 15$

  • model WT3020F
  • MIPS MT7620n, 580MHz
  • 64MB RAM
  • 8MB FLASH
  • 2 x Ethernet 100 Mbps
  • 1x WIFI 2.4 GHz 802.11n
  • 1x USB host (podpora pro 3G GSM moduly)
  • 1x Serial

nexx.wt3020a.top nexx.wt3020a.bottom nexx.wt3020a.top.board

WT3020 je opravdu takový malý zázrak, hned jsme objednali i kousky na sklad, pro případ potřeby, nainstalováno OpenWrt, vytvořen OpenVPN tunel v režimu klienta, na LAN portu připraven DHCP server, dopředu před celou akcí rozmyšlen adresní plán pro rozsahy jednotlivých poboček a centrály.

Lokální přístup k internetu není směrován do VPN tunelu, směruje se aktuálně pouze rozsah pro server a do budoucna je plánováno osazení VoIP telefonů na pobočky a připojení do centrály opět stejným VPN tunelem s možností implementace QoS pro VoIP provoz.

A to je vše, zde je pěkně vidět, že i za málo peněz lze udělat hodně muziky a postavit VPN pobočkou síť nemusí nutně stát velké peníze a drahý hardware, vše záleží na možnostech a potřebách klienta, z toho je potřeba zvolit vhodné rešení.

VPN pro všechny! Máte dotazy k technologii VPN či OpenWrt, chcete pomoci s nasazením podobného řešení pro mále pobočky, pokladny, krámky (realizujeme VPN i přes GSM síť) nebo se jen chcete poradit, napište na kontaky.

Díky za Váš čas. František Havel

Linux: Debian Hyper-v Live(online) Backup (VSS, KVP démon)

Testováno Debian Wheezy/Jessie, podpora pro online backup (live machine backup) do System Center (Data Protection).

http://docs.homelinux.org/downloads/hv_kvp_daemon-master.zip ||

https://github.com/v10networks/hv_kvp_daemon

# apt-get install unzip gcc automake make
# cd /usr/src
# wget http://docs.homelinux.org/downloads/hv_kvp_daemon-master.zip
# unzip hv_kvp_daemon-master.zip
# cd hv_kvp_daemon-master
./bootstrap.sh
./configure
# make
# make install
# cp init/deb/hv_* /etc/init.d/
# update-rc.d -f hv_kvp_daemon defaults
# update-rc.d -f hv_vss_daemon defaults
# /etc/init.d/hv_kvp_daemon start
# /etc/init.d/hv_vss_daemon start

# dmesg | grep hv_utils
hv_utils: VSS daemon registered
hv_utils: KVP: user-mode registering done.

# ps afx | grep hv_
/usr/sbin/hv_vss_daemon
/usr/sbin/hv_kvp_daemon
debian-hyperv-live-backup-datacenter
Data protection manager (system center)

Pokud se VM bude tvářit stále pouze jako offline backup, označne hosta a dejte refresh, online nabídka by se měla zobrazit.

František Havel

Linux: sTrace debug

Jedna z často zmiňovaných předností unix systémů je rozsáhla sada nástroju pro diagnostiku, debug, za to velký, ale opravdu velký dík.

Jedním z těchto nástrojů je také strace. Strace monitoruje systémová volání a signály pomocí speciálního syscallu ptrace, který slouží pro trasování bežícího kódu programu, ptrace je rozsahlá a velmi silná záležitost, dokaže se napojit na proces, krokovat ho, zasahovat do jeho paměti, odchýtávat signály apod, je také výužíváno oblíbeným GNU debugerem gdb.

(Pozn.: ptrace na první pohled vypadá jako pěkná bezpečnostní díra díky možnosti kontroly na jiným procesem, typicky je proto toto volání umožněho pouze potomkům procesu nebo speciálně pro Linux řízení pomocí capabilities SYS_PTRACE, toto ovšem neplatí pro roota)

Pokud netušíte co nebo k čemu jsou systémová volání a signály netrapte se, dejte si pořádný pohár jahodové zmrzliny se šlehačkou a hoďte to za hlavu nebo se můžete podívat např. do knihy Jádro systému Linux od Lukáše Jelínka.

Systémová volání (system call, syscall) představuji v informatice mechanismu komunikace programu s jádrem operačního systému, program po dobu svého životního cyklu buď volá funkce systému nebo si něco počítá.

Příkladem takového volání je např. sys_open pro otevření souboru nebo sys_read resp. sys_write pro čtení resp. zápis do deskriptoru (rozuměj souboru).

Syscallů je značné množství, přesto je snaha udržet jejich počet na rozumném počtu, překotný vývoj a implementace byl pro např. Linux ve verzích 1.x, 2.x, ze své povahy jde o relativně stabilní část jádra.

http://man7.org/linux/man-pages/man2/syscalls.2.html

Velmi pěkný článek o syscall na IBM Developer.
https://www.ibm.com/developerworks/linux/library/l-system-calls/
Signály představují jeden z nástroju meziprocesové komunikace, obecně se celá tato oblast označuje jako IPC(Inter-Process Communication), jde o formu výměny jednoduchých zpráv, pokud je procesu zaslán signál, operační systém přeruší jeho výkonávání (pozn. nechytáme se za slovo, k přeřušení může dojít pouze během NE-atomické operace) a zavolá se obsluha (handler, rutina) signálu, pokud vše "dobře" dopadne systém vrátí zpět řízení a původní proces běží dál.


Strace prakticky malá ukázka, zkusme si představit malý program bez dostupnosti zdrojového kódu, říkejme mu pwd (ano pwd součastí coreutils, ale to není podstatné), pustíme na něj strace.

root@havel-machine:/tmp/strace# strace pwd
execve("/bin/pwd", ["pwd"], [/* 23 vars */]) = 0
brk(0)                                  = 0xb3d000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2b2b01e000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
...
...
...
getcwd("/tmp/strace", 4096)             = 12
fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 11), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2b2b01d000
write(1, "/tmp/strace\n", 12/tmp/strace
)           = 12
close(1)                                = 0
munmap(0x7f2b2b01d000, 4096)            = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Výstup jsem zkrátil, ale v jednoduchosti, na levé straně vidíme použitá systémová volání na pravé pak jejich návratové hodnoty (číslo za =), co vidíme na první řádce sámotné spuštění programu pwd (za nás to udělal shell) pomocí syscall execve, následuje volání brk bez parametrů vrací aktuální hodnotu datového segmentu a pak tanečky kolem oprávnění, LD_PRELOAD a dynamického linkeru, až téměr na konci je zavoláno systémové volání getpwd vracející jako návratovou hodnotu aktuální pracovní adresář (ano, na to je také syscall), následuje vypsání této hodnoty na terminál pomocí opět systémového volání write (povšimněte si hodnoty 1 u volání write, jako první argument této funkce je tzv. číslo deskriptoru kam se bude zapisovat, hodnotu 1 reprezentuje v unix světe tzv. stdout [standartní výstup], 0 = stdin [standartní vstup], 2 = [standartní chybový výstup], takže vlastně výpis dat na terminál není nic jiného než zápis do soubor, skvělé že).

Pěkné co to umí dál? Mohou se občas hodit jen statistické údaje.

root@havel-machine:/tmp/strace# strace -c pwd
/tmp/strace
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 24.36    0.000104          12         9           mmap
 14.75    0.000063          21         3         3 access
 11.48    0.000049          12         4           mprotect
 11.24    0.000048          16         3           open
  9.13    0.000039          20         2           munmap
  8.43    0.000036           7         5           close
  6.56    0.000028           7         4           fstat
  5.15    0.000022          22         1           write
  2.34    0.000010           3         3           brk
  2.34    0.000010          10         1           execve
  1.87    0.000008           8         1           read
  1.41    0.000006           6         1           getcwd
  0.94    0.000004           4         1           arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000427                    38         3 total

Další užitečnost, filtrování pouze specifických volání nebo skupin (skupiny určíte -e trace=skupiny, např. -e trace=file,network,process, viz man strace)

root@havel-machine:/tmp/strace# strace -e open,write pwd
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
write(1, "/tmp/strace\n", 12/tmp/strace
) = 12
+++ exited with 0 +++

Napojení se na běžící proces je jedna z dalších užitečných vlastností, v praxi lze narazit na situaci, kdy program buď nedělá co má (čéka na něco) nebo naopak něco dělá a dělá to tak rychle jak dokáže (typicky vytěžuje jedno celé jádro systému), chceme většinou zjistit co se děje.

root@havel-machine:/tmp/strace# strace -c -p 3117
Process 3117 attached
Process 3117 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
 47.67 0.000143 2 80 78 recvmsg
 47.00 0.000141 4 40 poll
 3.00 0.000009 5 2 writev
 2.33 0.000007 7 1 restart_syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.000300 123 78 total

Parametrem (-p PID) jsme se připojili k běžícímu procesu, v tomto případě komunikátor pro IM, zajímá nás pouze statistika, vídíme, že proces neustále “polluje” deskriptor (v tomto případě síťový soket, ale opět je chování velmi podobné souboru) a přijímá zprávy ze socketu přes volání recvmsg, opět je možné si detailně zobrazit volání a přidat např. timestamp (-t), čítač instrukcí (-i) nebo filtrovat pomocí (-e) kategorie volání.

Toto chování s napojením na běžící proces je velmi užitečné, v případě zaseknutí procesu např. při otevírání souboru uvidíme jeho snadu o přístup, lze si tedy udělat představu co program očekává a případně mu trochu pomoci.

!!! Pozor !!!
 
Používání strace sebou nese značný výkonový overhead (penalizaci v podobě rychlosti vykonávání trasovaného programu), pro představu v ukázce použitý nástroj pwd se při trasování zpomalil ~ 10x, úplným extrémem trasování nástroje dd při dd if=/dev/zero of=/dev/null došlo k jeho zpolení více než 200x., intenzivní I/O operace jsou penalizovány razantně, dejte na to pozor.

Blížíme se k samotnému závěru, jak bylo v úvodu řečeno, unix (linux) disponuje značným množstvím diagnostických nástroju, je důležité používat spravným nástroj na správnou část jádra, následující obrázek pěkně ilustruje co a kde by mohlo Vám pomoci.

Viditelnost strace je především pro systémová volání.

linux_observability_tools

Zazvonil zvonec a debugu je konec, a tahle funguje strace, díky tomu, že porozumíte jaká systémová volání používá proces jste schopní odhadnout jak a proč se chová.

Až budete zase na něco v terminálu zdlouhavě čekat vzpomeňte si na strace, mimochodem teď už Vás asi nepřekvapí, že volání sleep je také samozdřejme syscall.

Pro fajnšmekry ukázka co se dá realitovat s ptrace volání, program retty od Petra Baudiše, aneb jak se dostat v terminálu programu (mutt) když jsem zapomělo pustit screen, slušný hack, nicméně asi již nefunkční, ale i tak respekt.

Abych nezapoměl man strace je jako vždy dobrý pomocník.

Děkuji za Váš čas. František Havel

KICKSTARTER: Podpořte C.H.I.P. počítač za 9$ !

Čeká nás další zemětřesení na poli jednodeskových počítačů? Dost možná ano, představuji Vám CHIP.

C.H.I.P. počítač za 9$, open hardware, Debian.

  • 1Ghz R8 ARM processor
  • 512MB RAM
  • 4GB eMMC
  • WIFI 802.11 b/g/n , Bluetooth 4.0
Podpořte projekt C.H.I.P. na crowdfuningové platformě KICKSTARTER.

chip-computer

chip-computer-hardwarechip-computer-hardware-wifi

Co je to Kickstarter?

Kickstarter je internetová platforma pro crowdfundingové financování projektů, která podporuje kreativní projekty z oblasti filmu, her, hudby, umění či technologické inovace.

Základním předpokladem je, že lidé nemohou zakládat projekty kvůli finančnímu zisku, ale pouze proto, aby je spustili, poté už mohou z projektu získávat profit. Tato služba je založena na přímém financování ostatními lidmi, kteří svým přispěním rozhodují, zda daný projekt uspěje, či nikoli.

CHIP je kompletně opensource projekt, včetně myšlenek open hardware, ideální srdce pro Vaše projekty, z nízkou spotřebou, širokou paletou aplikací a vysokým edukačním potenciálem.

chip-computer-app

chip-computer-battery chip-computer-opensource

Podpořte projekt C.H.I.P., potřebujeme Vás!

František Havel