cookbook: extreient fitxers d’un .rpm
Reading time: 6 – 9 minutesConeixer la llista de fitxers al interior d’un paquet .rpm:
rpm2cpio fitxer.rpm | cpio -t
Extreure un o més fitxers del .rpm:
rpm2cpio fitxer.rpm | cpio -ivd [fitxer_a_extreure]
Coneixer la llista de fitxers al interior d’un paquet .rpm:
rpm2cpio fitxer.rpm | cpio -t
Extreure un o més fitxers del .rpm:
rpm2cpio fitxer.rpm | cpio -ivd [fitxer_a_extreure]
Sovint faig molts scripts de sistema usant python com a llenguatge de programació, doncs bé, sobretot quan aquests scripts s’han de llençar usant el ‘crontab’ va molt bé tenir un bon ‘log’ per saber com van les coses. Així doncs, la setmana passada vaig decidir posar-me a fons amb el tema ‘logging’ de python i ara la forma de fer ‘logs’ que uso per defecte en els meus scripts és:
Snippet de codi python que poso als scripts:
import logging,logging.config
# logging
logging.config.fileConfig('script_logging.ini')
#logger = logging.getLogger('errorpantalla')
logger = logging.getLogger('errorfitxer')
logger.setLevel(logging.INFO)
Després d’importar la llibreria de ‘logging’ es recuperar el fitxer de configuració on estan definits els paràmetres de ‘logging’. Un cop carregat, descomento una o les dues línies que hi ha a continuació en funció de si vull logs per pantalla o només contra un fitxer. La última línia només indica fins a quin nivell de depuració he de fer mostrar logs.
El fitxer de configuració:
[loggers]
keys=root,errorpantalla,errorfitxer
[handlers]
keys=fitxer,pantalla
[formatters]
keys=form01
[logger_root]
level=DEBUG propagate=1 channel= parent= qualname=(root) handlers=
[logger_errorpantalla]
level=DEBUG propagate=1 channel=errorpantalla parent=(root) qualname=errorpantalla handlers=pantalla
[logger_errorfitxer]
level=DEBUG propagate=1 channel=errorfitxer parent=(root) qualname=errorfitxer handlers=fitxer
[handler_fitxer]
class=handlers.RotatingFileHandler level=DEBUG formatter=form01 filename=paht_to_log_file/log_file mode=a maxsize=0 backcount=1 args=(‘paht_to_log_file/log_file’, ‘a’, 0, 1)
[handler_pantalla]
class=StreamHandler level=DEBUG formatter=form01 stream=sys.stderr args=(sys.stderr,)
[formatter_form01]
format=%(asctime)s %(levelname)s %(message)s datefmt=
A més vaig trobar un petit script, que carrega una GUI per generar les configuracions dels fitxers de configuració dels ‘logs’, realment útil i simple d’usar:
Aquesta GUI l’he trobada al paquet: logging-0.4.9.6.tar.gz concretament al directori ‘tests’. Si no voleu buscar tant també podeu descarregar-lo directament: logconf.py.
Fins aquest matí cada vegada que necessitava crear-me certificats auto-signats (self-signed certificates) usava llarguíssimes llistes d’opcions amb l’openssl, però avui he descobert (digueu-me lent) que si descarregues el paquet d’OpenSSL i el desempaquetes dins del codi font hi ha un directori que es diu: easy-rsa.
Com es pot observar el nom ja dona moltes pistes, doncs bé, dintre d’aquest hi trobem encara un altre directori anomenat 2.0. Aquí dintre, hi ha un munt d’scripts que ens simplificaran moltíssim la vida a l’hora de crear certificats, com sempre en faig un resum en forma de cookbook.
export KEY_COUNTRY="yourContry"
export KEY_PROVINCE="yourProvince"
export KEY_CITY="yourCity"
export KEY_ORG="myOwnOrg"
export KEY_EMAIL="user@domain.tld"
./clean-all
source ./vars
./pkitool --initca
# ./pkitool --server
# penseu que a vegades el common_name ha de ser el url_host del servidor, per exemple, en servidors https
./pkitool --server nom_servidor
# ./pkitool
./pkitool nom_client
# ./pkitool --pkcs12
./pkitool --pkcs12 nom_client
./pkitool --build-dh
NOTA: en cas de volgueu protegir les claus privades amb una clau simètrica per evitar que siguin usades per tercers persones podeu fer-ho afegint el paràmetre ‘–pass‘ a les comandes anteriors.
Les claus generades les podeu trobar al directori ‘easy-rsa/2.0/keys‘.
Pels que no tingueu massa per la mà el tema dels certificats posaré quatre notes sobre els fitxers creats:
Senzill, oi? diria que ja no teniu excusa per gestionar-vos vosaltres mateixos les claus SSL. Si ús calen d’altres funcions al directori esmentat hi ha molts altres scripts i el propi ‘pkitool‘, té força altres opcions molt interessants i igual de simples d’usar.
Pels que ús soni de res el PKCS12 la wikipedia és un bon lloc per coneixer de que va, una definició xapussera de què conté un PKCS12 seria:
Això permet poder configurar ràpidament clients que han d’usar certificats ja que només tenim un fitxer que posar a la configuració.
A continuació enganxo un petit cookbook que explica com canviar o treure la clau simètrica que protegeix la clau privada del certificat client:
#extreiem private key d'un p12
openssl pkcs12 -in client.p12 -nocerts -out client_private_key.pem
#extreiem client certificate d'una p12
openssl pkcs12 -in client.p12 -clcerts -nokeys -out client_cert.pem
#extreiem CA d'una p12
openssl pkcs12 -in client.p12 -cacerts -nokeys -out ca_cert.pem
#treiem password d'una clau
openssl rsa -in client_private_key.pem -out client_private_key.nopass.pem
#canvi pass d'una clau
openssl rsa -in client_private_key.pem -des3 -out client_private_key.novaclau.pem
#creem una p12 a partir dels seus fitxers arrel
openssl pkcs12 -export -out client.nou.p12 -in client_cert.pem -inkey client_private_key.novaclau.pem -certfile ca_cert.pem -name "nova clau" -out client.nou.p12
El sistema operatiu de treball o sistema operatiu de l’equip host que uso habitualment com ja sabeu és un Linux, concretament una Gentoo. Doncs bé, al instal·lar un WinXP com a sistema guest en una màquina virtual d’VMWare malgrat molts dels dispositius USB del meu portàtil es reconeixen directament. Per exemple, la webcam, lector d’empremta digital o modem 3G intern. Això no passa al connectar algún dels dos smartphones que tinc el HTC Kaiser o l’Artemis el VMWare em donava l’error: VMWare Workstation was unable to claim the device (No such file or directory).
<div class="imatge" style="text-align: center;"></div>
Després de molt buscar per forums i d’altres similars vaig trobar un simple hack que em soluciona el problema (perdoneu però no recordo l’enllaç perquè era un comentari d’un forum). El motiu exacte de perquè això passa no l’acabo de tenir clar però l’enginy funciona. De forma que l’activesync o el pocket controller pro reconeixen perfectament el telèfon i em permeten controlar-lo i sincronitzar-lo des del WinXP virtual. Que per altre banda, tal com vaig comentar en l’article sobre com arrancar el WinXP de l’altre partició mentre estem en Linux em permet no haver de mantenir dos instal·lacions de WinXP en parl·lel sinó que la versió virtual i la que corre sobre el host son la mateixa.
Bé doncs, anem al gra el que heu de fer és localitzar on teniu connectat el vostre dispositiu. Fent un lsusb podeu veure algo semblant a:
# lsusb
...
Bus 005 Device 004: ID 0bb4:0b0b High Tech Computer Corp.
...
Ara ja sabem que es troba en el Bus 5 però encara no sabem en quin port ni a quina PCI esta connectat aquest bus. Desocbrim ID de la PCI on és el Busc 5:
# find /sys/devices/ -name "usb5"
/sys/devices/pci0000:00/0000:00:1d.0/usb5
Ja sabem la PCI i bus USB on és connectat el dispositiu, ara només cal saber en quin port usa. Per fer això el que farem és buscar el idProduct i l’idVendor del HTC Kaiser, això ho obtenim del lsusb són els números en hexadecimal separats per uns dos punts. Així doncs, el meu idProduct: 0b0b i el idVendor: 0bb4. Amb aquestes dades el que faig és posar-nos en el directori del bus que hem localitzat i llenço una búsqueda sobre els fitxers que contenen aquestes dades per localitzar en quin port del bus tenim connectat el dispositiu:
# cd /sys/devices/pci0000:00/0000:00:1d.0/usb5
# grep -ri 0b0b $(find . -name "idProduct")
./5-1/idProduct:0b0b
# grep -ri 0bb4 $(find . -name "idVendor")
./5-1/idVendor:0bb4
Com podem veure en els dos casos els fitxers que contenen aquesta informació són al directori 5-1, o sigui, que tenim connectat el nostre telèfon a /sys/devices/pci0000:00/0000:00:1d.0/usb5/5-1/. Directori on hi trobarem el fitxer bConfigurationValue que és completament buit. Doncs bé, l’únic que hem de fer és posar-hi un 1, per exemple així:
# echo 1 > /sys/devices/pci0000:00/0000:00:1d.0/usb5/5-1/bConfigurationValue
Després ens assegurem que tenim associat el dispositiu a la màquina virtual i veurem que el missatge d’error desapareix i el WinXP detecta el nou hardware connectat.
<div class="imatge" style="text-align: center;"></div>
Finalment aquí tenim l’enllaç funcionant:
<div class="imatge" style="text-align: center;"></div>
Reading time: < 1 minute
Notes per un lamer com jo per saber fer un upgrade de la versió d’ubuntu dapper a la edgy que és l’última. Però és que necessito la nota perquè mai recordo com es fa:
També aprofito per referenciar un FAQ d’ubuntu que té molt bona pinta i que té resoltes coses tan interessants com obrir PDF dins del firefox en linux. Cosa que jo estava convençut que no es podia fer, digueu-me incult.
Reading time: 2 – 2 minutes
Porto dos dies enganxat al Zend Studio programant en PHP5, concretament amb el framework anomenat symfony. Doncs bé no tinc cap ganes de posar-me a escriure un article tècnic sobre aquests dos aplicatius i menys a entrar en detall en la potencia d’ambdues eines juntes. Però si que volia deixar constància que això no té res que veure amb la programació de PHP que feia fa uns anys amb el PHP3. Això si que és un plaer, classes, object factories, ADO amb Abstract Factory Design, debugger, SOAP… i un llarg etcetera que no s’acaba mai.
Realment si quan heu de programar us agrada tenir eines com deu mana al vostre abast, jo diria que aquest és el duo perfecte. Si a més podeu tenir un servidor amb apache2 i el Zend Studio Server instal·lat, un control de versions amb subversion, una gestió de tasques amb taskspro i un sistema de tiqueting i roadmap amb trac jo diria que ja no es pot demanar gran cosa més.
L’últim comentari al tema abans de plegar per avui, la curva d’aprenentage del symfony és força llarga, a més interioritzar el model MVC i la implmentació basada en mojavi que en fa symfony costa lo seu. Però després passes a una nova dimenció, m’ha costat arribari però ara em declaro un enamorat del symfony.
Reading time: 2 – 2 minutes
Petit cookbook de com hem d’importar un projecte que estiguem programant amb el framework symfony. Primer creem el directori del repositori on volem pujar el projecte, anem al directori del projecte. Borrem els directoris log i cache del qual no ens interessa mantenir un control de versions. I després importem el projecte.
svn mkdir -m "NOTA: Creem directori on hi posarem projecte" http://exemple.com/svn/repos/projecte/dev cd directori_projecte_symfony rm -rf log rm -rf cache svn import -m "NOTA: importem primera versio del projecte" . http://exemple.com/svn/repos/projecte/dev
Ara movem el directori actual del projecte i en creem un de nou, que ja tindrà control de versions. Fem un checkout (co) de la versió que em importat abans i defenim que els directoris log i cache no s’importaràn mai quan fem un commit (ci). Després creem els directoris en qüestió i els assignem un propietari igual al del procés d’apache perquè aquest el pugui escriure-hi mentre esta execucutant el nostre projecte symfony.
mv directori_projecte_symfony directori_projecte_symfony.bak mkdir directori_projecte_symfony_amb_svn cd directori_projecte_symfony_amb_svn svn co http://exemple.com/svn/repos/projecte/dev . svn propedit svn:ignore . log cache mkdir log mkdir cache chown apache:apache log chown apache:apache cache
Reading time: 1 – 2 minutes
Aquest segur q no ús la espereu, però en un dia com avui ja no tinc ganes d pensar més en informàtica, més aviat tinc ganes de: UN BATUT ENERGÈTIC!!! hi hi hi! doncs si nois, aquest és un link cap a la ‘Cuina per Solters‘ el programa de TV3 q ensenya a cuinar als negats com jo… no no! no sóc un adicte del programa ni tan sols el veig quasi mai per no dir q només l’he vist un cop, però el cop q el vaig veure feien un programa q parlava d com fer un batut per dies com el d’avui: q entre el canvi d temps i l’esgotament psico-fisic no tens ganes d fotre res després d’una bona dutxa com la meva… ara és l’hora d mirar aquest càpitol del programa i currar-se un batut q no ús deixarà indiferents.
Si voleu la recepta en PDF cliqueu aquí.