Adrenalin\’s Blog

Decembrie 11, 2010

Cum de tinut minte ordinea parametrilor pentru comanda ln (link) ?

Filed under: Unix — Adrenalin @ 23:26

So, de fiecare data uiti ordinea parametrilor pentru aceasta super comanda ? Good news, nu esti singurul. Pe reddit recent a aparut o tema si lumea si-a partajat tehnicile de memorare.

  • Asocierea cu ordinea parametrilor din comanda cp
    cp existing new
    ln -s existing new
  • Asocierea cu boobsurile, probabil preferi reale de cit nereale, asa deci pe primul loc pui cele reale.
    ln -s real fake

Asa deci, cu aceste 2 idei n-ar mai trebui sa gresesti niciodata ordinea parametrilor. Traiasca constiinta colectiva de pe internet si reddit.

Anunțuri

Cum de executat mai multe comenzi concomitent

Filed under: Unix — Adrenalin @ 22:51

Sa zicem ca aveti multe arhive (tar.gz), si doriti sa le dezarhivati dar cite vreo 4 concomitent.
Deci recuperam lista de fisiere (sa zicem cu ls) si apoi ii zicem lu xargs sa ea cite un fisier (-n 1) si sa execute 4 comenzi tar -xzf concomitent (-P 4).
In final avem asta:
ls | xargs -n 1 -P 4 tar -xzf

Dar paralelizarea asta va fi cea mai efectiva cind locul lent (bottleneck) va fi procesorul si cind veti avea mai multe procesoare. Deoarece „by default” tar si alte comenzi utilizeaza un singur procesor. Dar daca sunt pornite mai multe concomitent, vor utiliza mai multe procesoare.

Apropo, cind aveti de comprimat un singur fisier mare (in asa caz xargs -P e inutil deoarece doar o singura comanda poate fi pornita), este pbzip2 care poate utiliza mai multe procesoare.

Alt fel, e cam idiot sa ai 8 procesoare virtuale (coreuri sau whatever), si sa utilizezi numai 1, isn’t it ?
In 2011 hai sa paralelizam.

Martie 3, 2010

Despre MySQL, ce mi-aș zice dacă m-aș întoarce în timp vreo 5 ani în urmă

Filed under: experience, mysql, Unix — Adrenalin @ 15:19

Dînd cu nasu în același perete de multe ori, îți dai seama că dacă de la început făceai alt fel, îți ușurai cu mult viața.
Dar norocul vostru că ați dat de blogul meu, și cu mic succes veți avea mai mult timp pentru băut bere și nopțile vor fi dormite la călduț !

Așa deci:

  • Evitați triggerele, da ele sună bine în teorie, dar nici nu vă imaginați cît e de simplu de pierdut unul. Exemplu cînd faceți rename la un tabel, sau cînd recreați același tablou cu partiții, de fiecare dată trebuie să fiți atenți ca triggerele să fie și ele. Și dacă îl uitați, atunci va trebui de resincronizat totul. Plus la replicare, triggerele pot complica logica.
    Mult mai simplu de realizat triggerele la nivel de aplicație, plus că ele vor intra în funcție îndată ce faceți update la aplicație.
  • Evitați tabelele federate, iarăși sună bine în teorie cînd începeți să aveți mai mult de 1 bază de date, dar tabelele federate îs extrem de proaste și lente. Dacă serverul de la distanță cade, toate cererile spre tabelele federate vor bloca db-ul pînă la momentul cînd tot site-ul se va opri. Iar dacă faceți inserturi în tabele federate (nu dă domnul), foarte repede veți găsi incoerențe.
    Dacă vă trebuiește acces la datele de la distanță, utilizați replicarea datelor (nu uitați să monitorizați replicarea).
    De asemenea în mod normal, dacă de exemplu doriți să modificați date, trimiteți cererea de modificare la master, astfel și slave-ul vostru va avea datele.
  • Utilizați innodb, pentru tabele din care se face permanent read și write, asta trebuie să folosiți, uitați de myisam. Alocați mai mult ram la buffere și totul va zbura.
    În tinerețe utilizam myisam, și a trebuit niște timp pînă se îmi dau seama că e frînat, la modificări, myisam face table lock, astfel cererile concurente merg ca găina printr-o hudiță, pînă nu trece într-o direcție în direcția opusă nimeni nu se duce În innodb, citiți despre cheile primare clusterizate.
  • Replicarea master – master, iarăși sună bine în teorie, dar cel mai probabil simpla replicare master slave va fi suficientă. De asemenea învățați-vă aplicația să trimită update-urile la master și select-urile la slave.
  • Urmați principiul KISS, dacă se complică cel mai probabil nu faceți corect, cu cît e mai complicat, cu atît mai multe greble, cu cît mai multe greble, cu atît mai mare probabilitatea să dați în vreo una. Poate chiar în unele cazuri ceva va lucra puțin mai greu, dar dacă asta e simplu și intuitiv, atunci e calea corectă.
  • Nu utilizați versiuni beta în prod chiar dacă pare că are mega facilități. Softul complex cu reviziuni majore ieșit mai puțin de un an în urmă cel mai probabil încă e cu buguri și nu a fost bine testat. Defapt mie îmi place să utilizez cel mai recent soft și chiar să raportez bugurile (am raportate pentru mysql5.1), dar trebui de avut infrastructura bine pusă la punct pentru ați permite jocurile, alt fel jocul se transformă într-un coșmar ;)

Iată dacă știam din start despre aceste chestii, probabil mi-ar fi salvat tone de timp și energie.
Cînd mi-am început aventura cu bazele de date, aveam un singur server care avea totul pe el, și așa cum site-ul era în creștere permanentă, bani de server mai puternic nu era (la moment și cela care era îmi părea scump), pasiunea și dorința era enormă, de aceea tot ce-mi trăsnea prin cap încercam, prioritatea era viteza cu orice preț.

La moment dacă aș începe de la 0 posibil în genere aș încerca ceva care necesită mai puțin maintenance în cazurile cînd are loc căderi de electricitate (posibil chiar și ceva nosql ca Cassandra care singur scalează și e redundantă în caz de cade vreun node), probabil înafară de viteză asta ar fi unul din primii factori de decizie. Softurile care le pui și nu mai cer atenție, sau ft mică, autorilor lor trebuie de pus monumente, dar bazele de date îs extrem de fragile dacă compar cu alte genuri de softuri..
Nici nu vă imaginați de cîte ori am avut tabele corupte, replicare care trebuie reinițializată pe slave-uri.

Aceste au fost niște sfaturi generale care mai greu veți găsi în primele pagini de cărți,docuri,bloguri de mysql, învățați pe greșelile mele :)

Martie 1, 2010

Bip la telefon din linie de comandă

Filed under: Unix, voip — Adrenalin @ 13:35

Prima zi de primăvara, dispoziție bună am decis să fac niște share.

Sa zicem ca avem nevoie să putem suna la un telefon prin linia de comandă, se poate chiar de făcut play la un fisier audio (poate chiar creat dinamic cu un sintetizator de voce) cînd se ridică telefonul, dar p/u necesitățile mele și cîteva sunete îmi sunt suficiente ca să-mi atragă atenția ;) Apropo este posibilitate să trimiteți SMS-uri din linie de comandă prin HTTP&curl (dacă cineva e interesat, pot povesti, e mai ieftin de cît să cumpărați monitorizare si alerte sms).
Asta ne-ar permite să facem alerte automatizate cînd ceva serios se întîmplă. Plus beepurile nu cheltuie banii.

De ce avem nevoie:

  • Voip client linie de comandă, PJSUA (care intră în componeța pachetului PJSip)
  • Cont la vre-un VOIP provider cu SIP, dacă aveți vre-un cont la vre-o unu deja, cautați la ei pe site undeva setările SIP, exemplu voipdiscount, setări. Dacă veți dori să sunați pe fix, evident că va trebui să puneți ceva pe cont.

Instalarea PJSUA

Așa deci să începe cu instalarea PJSUA, dacă nu aveți în sistemul de pachete, pjsip nu are multe dependențe deaceea se instalează ușor. [ref]

wget http://www.pjsip.org/release/1.0.1/pjproject-1.0.1.tar.bz2
bzip2 -d pjproject-1.0.1.tar.bz2
tar xvf pjproject-1.0.1.tar
cd pjproject-1.0.1
./configure
make dep
make
sudo make install
sudo cp ./pjsip-apps/bin/pjsua-i686-pc-linux-gnu /usr/local/bin/pjsua

Configurarea PJSUA

Creați undeva un fișierul de configurare, exemplu în /etc/sip.cfg [man pjsua] și puneți asta în el:

--id sip:utilizator_voip_discount@sip.voipdiscount.com
--registrar sip:sip.voipdiscount.com
--realm *
--username utilizator_voip_discount
--password parola_voip_discount

Acum ca să sunăm pe cineva pe fix:
/usr/local/bin/pjsua --app-log-level=3 --config-file /etc/sip.cfg --null-audio --max-calls 1 sip:+373...@sip.voipdiscount.com

Automatizare prin utilizarea expect

Acum de exemplu ca să punem receptorul peste 12 secunde, de menționat că pînă se conectează trece ceva timp, deaceea in 12 secunde se include si timpul de conectare la sip server, vom avea nevoie de expect, scriptul de mai jos se execută ca și un script bash, puneți-l în bip.sh de exemplu:

#!/usr/bin/expect --
set timeout 15
set addr [lindex $argv 0]
spawn /usr/local/bin/pjsua --app-log-level=3 --config-file /etc/sip.cfg --null-audio --max-calls 1 sip:+373...@sip.voipdiscount.com
sleep 12
send "h\n"
expect {
"DISCONNCTD" {
exit
}
timeout {
send "h\n"
exit
}
eof {
exit
}
}

pjsua e un client interactiv in linie de comanda, h semnifică punerea receptorului. În mod normal timeout-ul de la expect trebuie sa trimită la timeout-ut asta, dar din motive neclare nu prea merge, deaceea fac cu sleep și apoi send care merge.
Apropo expect e un tools genial p/u automatizare.

Îl făcem executabil
chmod +x bip.sh
Executăm cu nr-ul la care dorim să făcem bip
./bip.sh +373…@sip.voipdiscount.com

Acum nu vă rămîne să apelați bip.sh din careva alt script cînd se întîmplă ceva.

Idee de ameliorare a scriptului de mai sus. Se poate de afișat mai multe detalii la conectare (scotind app-log-level), expect are o functie care se cheama expect, astfel el poate astepta pentru anumit cuvint chee pentru a continua, astfel inainte de sleep putem astepta anumit mesaj de conectare.

Mai multe exemple cu pjsua p/u play la audio și combinat cu nagios găsiți aici.

Acum veți afla primul dacă s-a întîmplat ceva, chiar și la 2 de noapte ;o)

Octombrie 19, 2008

(bash) Cum de redenumit fișiere în masă ?

Filed under: Unix — Etichete:, , , , — Adrenalin @ 1:54

Acum am avut o sarcină foarte simplă, sa înlocuiesc spațiile din denumirea fișierelor cu „underscore”=>”_”, fișiere îs cîteva sute(si mai pot aparea), așa că să mă arunc să le redenumesc manual, ar fi destul de arhaic din partea mea (caci luna trecuta am căpătat brîul care bate spre închis..mi s-a predat niște bash LA LECȚII, vă imaginați, noua institutie ruleaza!?!?;D), si așa cum acuma am bash din cygwin (haha, imi amintesc cind l-am instalat vreo 4-5 ani in urma si nu intelegeam ce sa fac cu el) instalat, după cîteva testuri, iata ce a ieșit:

ls | while read N; do
newN=$(echo $N | sed "s/ /_/g")
mv "$N" "$newN"
done;

Puternic lucru.. ;o)

Apropo, sub cygwin disk-urile is accesibile la /cygdrive/litera-disk-ului/, exemplu /cygdrive/d/.

Noiembrie 28, 2007

Cintec „popular” francez Linux vs Windows..

Filed under: Microsoft, Music, Unix — Adrenalin @ 20:16

Am gasit aici http://ploum.frimouvy.org/?85-firespoons-tu-le-feras-toi-meme cintec cit de cit ascultabil, viata cotidiana, Win VS Li ;o)

http://ploum.frimouvy.org/music/firespoons-tuleferastoimeme.ogg

Tu le feras toi même („C’est toi que je t’aime”, Les Inconnus)

Moi je geeke toute la journée
Mais toi tu préfères XP
Et à chaque plantage tu râles
Tu me dis que tout va mal
T’es complètement infecté
Ton système est bousillé
Mais ne compte plus sur moi
Pour réinstaller chaque mois
Depuis que je suis sous Linux
Je n’ai plus un seul virus
Faudra te démerder
Avec tes programmes craqués

Refrain
Je sais pas comment te dire
Que je ne peux plus le souffrir
On ne compte plus les maux
Qui accablent ton micro
Tu le feras toi-même
Et ce sera tout
Tu le feras toi-même
Et ce sera tout

Je t’avais pourtant bien dit
D’utiliser Mozilla
Tu m’as répondu oui-oui
Mais en fait t’écoutais pas
Et puis tu m’as demandé
MS Office piraté
Et donc puisqu’il le faut
Je t’installerai OOo
Je t’apprendrai même en plus
À utiliser Linux
Et à te débarasser
De tous tes programmes craqués

Refrain

J’ai mon PC qu’à planté
Il me met fatal erreur
Je dois tout l’temps rebooter
J’veux changer de wallpapeure
Tu t’y connais en ordi ?
Il faut tout réinstaller
Je veux photoshop aussi
Mon texte est pas aligné
Il faut faire la mise à jour
Linux c’est trop compliqué
Windows c’est vraiment facile
Erreur 80-10.000

Refrain

Nu rau, numai ca ciufaku ţipă nu chiar la tema %)

–Edit–
So far, am mai gasit un cintec, acesta e mai melancolic, dar cam aceeasi tema.. %)

http://ploum.frimouvy.org/music/ploum_ce_pauvre_ordi.ogg

Ce pauvre ordi („Le plat pays”, Jacques Brel)

Avec les popups sur l’explorateur
Et Explorer comme navigateur
Et Explorer pour les publicités
Et qui n’ont plus que moi pour les afficher
Avec infiniment de patchs à venir
Avec les standards, écoutez-le souffrir
Ce pauvre ordi qui est le mien

Avec des DLLs pour tout ralentir
Et de sombre bugs juste pour le plaisir
Où la logique n’est plus de ce monde
Avec les licenses issues de Redmond
Et des antivirus pour se rassurer
Avec l’upgrade qui est piraté
Ce pauvre ordi qui est le mien

Avec tout le temps kazaa qui noie mon CPU
Avec tout le temps kazaa pour tout télécharger
Avec depuis kazaa rien ne fonctionne plus
Avec depuis kazaa je me fais espionner
Avec que des programmes qu’il faut acheter
Avec que des programmes qui sont crackés
Ce pauvre ordi qui est le mien

Avec un pingouin comme nouveau logo
Avec un joli Gnu il serait bien plus beau
Quand les grands virus nous feront rigoler
Quand tous les spammers seront oubliés
Quand l’écran sera au rire, quand il sera libéré,
Quand il sera sous Linux, vous l’écouterez booter
Ce pauvre ordi qui est le mien

Nu rau, plus happy end %)

Mai 19, 2007

(answer) Why my redirect_port redirect doesn’t work, not working ? Natd freebsd ipfw

Filed under: Unix — Adrenalin @ 23:28

Asta a fost saptamana cind o trebuit sa devin cul admin4eg si normal ca am calcat in toti skinii din zona %) Dupa traditie nimic din prima nu s-a primit.. ;o) Azi am mai stat vreo 5 ore la ceva care acum imi pare destul de evident ;]
cat ~/.bash_history | grep „sh /etc/rc.firewall” | wc -l
47
%) 47 de reloaduri la reguli..

Answer to the question:
After the packet was sucked into the divert, with smth. like

ipfw add divert natd all from any to any in $eif

You must allow redirection to the target, local ip, with

ipfw add allow tcp from any to _your_local_address_here _port_ keep-state

For redirect_port tcp 192.168.0.2:80 8080 we will have

ipfw add allow tcp from any to 192.168.0.2 80 keep-state

And yes, ipfw add allow tcp from any to me 8080 keep-state will not do anything useful because the packet seem to be accepted by natd (divert natd all from any.. my first quote) what allow the incoming 8080 connections, you need just to allow connection to the target local address..

Hope this will help.

Thanks to the jya who have helped mmx with exactly the same problem as at me %) here and here

Mai 18, 2007

(answer) Why my ipfw udp allow rule doesn’t work ? (freebsd ipfw natd dns udp 53 dosen’t work)

Filed under: Unix — Adrenalin @ 14:34

Your udp packets always lost on some rule and you don’t know where ?

You think what the rule below will allow to pass all packets including UDP packets ?

ipfw add allow ip from any to any out setup keep-state

Or maybe this rule (wich I found in one of the freebsd handbook page) will allow your dns client to contact the dns server ?

$cmd 020 $skip tcp from any to any 53 out via $pif setup keep-state

Nope, simple clients dns querys goes through udp, so you need to allow udp packets too.

$cmd 020 $skip udp from any to any 53 out via $pif setup keep-state

But again, this will not work, because of the setup flag which will allow to pass ONLY TCP packets, read bellow full explanation from ipfw man about the flag.

setup Matches TCP packets that have the SYN bit set but no ACK bit.
This is the short form of „tcpflags syn,!ack”.

Do not repeat my mistake, remember 4ever, with setup flag no single udp packet will ever pass, today I lost almost 5 hours because of this %)

Another nice trick to save your ass from going every day to the datacenter (poor datacenter guys ;o) after your firewall rule have locked your ssh 22 port.
When you start experiments, add a new crontab entry what will execute a bash script each hour, the bash script will load every hour the stable firewall rules:
0 * * * * /home/you/reload_rcfirewall.sh

Your /home/you/reload_rcfirewall.sh will contain smth. like
#!/usr/local/bin/bash
nohup sh /etc/rc.firewall &

And do not forget to put the +x flag to your script. During your tests, /etc/rc.firewall must remain intact, of course ;p

Februarie 14, 2007

Frustrarea Linux-ului

Filed under: Unix — Adrenalin @ 20:18

Ok.. Cred ca a venit timpul cind toti trecem pe linux..

Am anumite frustrari, mai intrebi oamenii pe chaturi, am gasesc raspunsuri prin man-uri..

  • In Firefox cind apas dublu click pe un cuvint (ex. bbb din aaa.bbb.ccc), se selecteaza toata linia, iar mie imi trebuie doar bbb.
    Trebuie de adaugat o valoare noua de tip boolean in about:config layout.word_select.stop_at_punctuation cu valoarea true.
  • Search in fisiere find . | xargs grep „ceva”
  • In gnome disable la effectul de la minimize la fereastra, pornim gconf-editor si facem enable la /apps/metacity/general/reduced_resources
  • Diferite comenzi ft utile sub linux http://www.seomoz.org/blog/web-developers-command-line-tricks (link din blogul lui Freejerk %)

    Am mai gasit un post interesant intr-un blog de al nostru, a lui exit3219 Bash tricks, etc. , nu uitati sa treceti prin sectiunea About.

    [b]Update:[/b]
    Inca bash tricks-uri http://unixjunkie.blogspot.com/2006/01/two-cool-bash-tricks.html

    August 24, 2006

    Comanda back la cd (unix)

    Filed under: Unix — Adrenalin @ 16:24

    Azi tot umblind incolo incoace prin copaci, mi s-a parut cul daca comanda cd ar putea sa mearga inapoi %)

    Adica daca suntem in /blabla/blabla scriem cd /aeae/aeae, apoi scriem „cd –” vom nimeri inapoi in /blabla/blabla !

    Deasemenea bash-ul are 3 comenzi care seamana cu un bookmark pentru directorii, dirs pushd si popd.

    Cu „pushd .” salvam locatia curenta.
    Cu popd ne intaorcem la acea locatie, si se sterge din lista.
    Cu dirs vedem lista de directorii salvate.

    Older Posts »

    Blog la WordPress.com.