El rebost del Mau

November 20, 2009

openssl: unes senzilles notes

Filed under: GNU/Linux — Tags: , , , , , , , , — mau @ 2:21 pm

Alguns exemples que més he utilitzat i no vull se m’obliden

  • Generar una clau privada
openssl genrsa -out clau_privada.pem 2048
 
  • Generar una clau pública associada a la nostra privada
openssl rsa -in clau_privada.pem  -pubout -outform PEM -out clau_publica.pem
 
  • Signar un fitxer
openssl dgst -c -sign clau_privada.pem -out signatura_del_fitxer.sig fitxer.txt
 
  • Verificar si la signatura signatura_del_fitxer.sig es correspon amb el del fitxer fitxer.txt i el joc de claus pública/privada que estem utilitzant.
openssl dgst -c -verify clau_publica.pem  -signature signatura_del_fitxer.sig fitxer.txt
 
  • Convertir una clau RSA publica de PEM a DER
openssl rsa -inform PEM -in test-public-key.pem -outform DER -out test-public-key.der -pubin
 
  • Convertir un certificat X509 de PEM a DER
openssl x509 -in test-x509-cert.pem -inform PEM -out test-x509-cert.der -outform DER
 
  • Imprimir un certificat X509
openssl x509 -text -in test-public-cert.pem
 
  • Extreure clau privada d’un certificat en format pfx que ha més es troba protegit per clau. Utilitze -nodes per a que la clau privada no estiga xifrada amb la clau (no tindrà cap clau)
openssl pkcs12 -in certifict.pfx -nocerts -out clauPrivada.pem -nodes
 
  • Signar amb l’agorisme sha1 un fitxer
openssl dgst -c -sha1  -sign clauPrivada.pem  -out signatura_del_fitxer.txt.sig fitxer.txt
 

October 14, 2009

SAI APC 2200 i GNU/Linux

Filed under: GNU/Linux — Tags: , , , , , , — mau @ 12:50 pm

OBJECTIUS

Configurar el sai APC 2200 que alimenta 3 servidors GNU/Linux per a que ens arriben alertes de l’estat del SAI i es gestionen apagades controlades.
La idea és que tots 3 servidors puguen consultar l’estat del SAI i front una fallada d’energia s’actue. Les acutacions bàsicament serà:

  • Avisar per e-mail dels events
  • Si arriba fi de la càrrega de bateria, apagar de manera seqüencial i controlada els servidors

Només un dels servidors, el principal es troba directament connectat (per USB) al sai, este serà el servidor principal que informarà a la resta dels servidors de l’estat del SAI.
Tots 3 servidors estan connectats per ethernet mitjançant el mateix switch que també s’alimenta del SAI.

DADES DEL SAI

SAI APC model SUA2200I

REQUISISTS

SAI APC 2200
3 servidors a monitorar connecats al SAI
Switchs(s) que interconnecta per xarxa tots 3 servidors també al SAI

CONFIGURACIÓ

PROGRAMARI A INSTAL·LAR

Cal instal·lar el paquet apcupsd (www.apcupsd.com) a tots 3 servidors (principal i secundaris)

#aptitude install apcupsd

CONFIGURACIÓ SERVIDOR PRINCIPAL

vi /etc/apcupsd/apcupsd.conf

Només cal canviar els paràmetres següents

UPSNAME APC-WWW
UPSCABLE usb
UPSTYPE usb
#Al ser usb no cal indicar device
#DEVICE
UPSCLASS standalone
UPSMODE disable
#Al ser un client, posar estos valors alts per a que
#s'apague abans que el principal
#Cal posar valors baixos per a que el servidor siga
#l'últim en apagar-se (els altres servidors els
#han de tenir superiors)
BATTERYLEVEL 5
MINUTES 3
TIMEOUT 0
#Per no permetre logins quan queden pocs segons per fer shutdown
NOLOGON percent

FIREWALL SERVIDOR PRINCIPAL

Cal obrir el firewall del servidor per a que li puguen entrar paquets pel port 3551. Només cal obrir-lo per a eixos altres servidors.

CONFIGURAR CLIENTS (o SERVIDORS SECUNDARIS)

vi /etc/apcupsd/apcupsd.conf
## apcupsd.conf v1.1 ##
UPSNAME APC-WWW
UPSCABLE ether
UPSTYPE net
#Indicar la ip del servidor de SAI
#Suposem que la ip del servidor principal es 192.168.10.10
DEVICE 192.168.10.10:3551
UPSCLASS standalone
UPSMODE disable
#Al ser un client, posar estos valors alts per a que
#s'apague abans que el principal
BATTERYLEVEL 20
MINUTES 8
TIMEOUT 0
NOLOGON percent

Finalment a tots 3 servidors cal indicar que el servei ja es troba configurat.

editar /etc/default/apcupsd i posar:

APCACCESS=/sbin/apcaccess
ISCONFIGURED=yes

ALGUNS CANVIS A LA INSTAL·LACIÓ PER DEFECTE

A més de la configuració anteriorment comentada, cal fer-hi també estos canvis:
La majoria d’scripts associats als events avisaran per e-mail de l’event.
A /etc/apcupsd/ hi ha scripts que es criden quan ocorre un event (els scripts cal
que tinguen el mateix nom de l’event). Bàsicament el que fan és avisar per e-mail.
Per a que funcione a la nostra xarxa can substitir a cada script el valor
SYSADMIN=root
per
SYSADMIN=root@`hostname`

Cree l’script /etc/apcupsd/doshutdown per a que informe al personal de quan s’ha dut a terme el shutdown.

#!/bin/sh
#
# This shell script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the UPS
# goes on batteries.
# We send an email message to root to notify him.
#
SYSADMIN=root@`hostname`
APCUPSD_MAIL="mail"

HOSTNAME=`hostname`
MSG="$HOSTNAME Power Failure timeout. shutting down now at `date '+%H:%M:%S %D'` !!!"
#
(
   echo "Subject: $MSG"
   echo " "
   echo "$MSG"
   echo " "
   /sbin/apcaccess status
) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN
exit 0

COM FUNCIONA

L’equip principal es connecta al SAI per USB i la resta consulten al principal l’estat del SAI per xarxa
Quan ocorre un event, l’equip principal ho detecta per l’USB (la resta seran informats per la xarxa) i executa l’script associat,
és per això que bàsicament a /etc/cpcupsd/ cal crear un script per event a controlar,
de manera que el sistema quan detecta un event crida a eixe script.

CONSULTAR ESTAT DEL SAI

En tot moment es pot veure l’estat del SAI executant:

apcaccess

CONSULTAR L’HISTÒRIC DELS EVENTS AL SERVIDOR PRINCIPAL

tail -f /var/log/apcupsd.events

Referències

http://www.apcupsd.com/manual/manual.html

October 13, 2009

Administrar objectes de l’Active Directory des de GNU/Linux

Filed under: Uncategorized — Tags: , , , — mau @ 12:13 pm

Objectius

Poder gestionar des d’un sistema GNU/Linux alguns objectes de l’Active Directory

Requisits

  1. Tenir el sistema GNU/Linux integrat en el domini. A la web de samba explica com fer-ho. També es pot fer utilitzant el likewise-open
    1. Si només s’utilitza samba cal fer ús de l’ordre net
    2. Si s’utilitza likewise cal fer ús de l’ordre lwinet que equival a l’anterior (net)

Exemples

NOTA: Estos exemples s’han fet utilitzant likewise, per això l’ordre utilitzada és lwinet, si només es fa ús de samba, cal canviar l’ordre lwinet a net

Exemple 1: Mostrar els grups de tipus “builtin” del terminal PC21-01.cafenet.pv. La consulta es fa utilitzant l’usuari local “Administrador”, però també es pot fer utilitzant un usuari de domini

lwinet rpc group LIST  builtin  -U PC21-01\\Administrador -S PC21-01.cafenet.pv
 

Exemple 2: Mostrar els usuaris membres del grup local “Administradores” del terminal PC21-01.cafenet.pv

lwinet rpc group MEMBERS "Administradores" -U PC21-01\\Administrador -S PC21-01.cafenet.pv
 

Exemple 3: Afegeix l’usuari “CAFENET\potolin” al grup local “Administradores” del terminal PC21-01.cafenet.pv

lwinet rpc group ADDMEM  "Administradores" "CAFENET\potolin" -U PC21-01\\Administrador -S PC21-01.cafenet.pv
 

Exemple 4: Eliminar un membre del grup “Administradores”

lwinet rpc group DELMEM  "Administradores" "CAFENET\potolin" -U PC21-01\\Administrador -S PC21-01.cafenet.pv
 

Exemple 5: També es poden utilitzar usuaris del domini per fer-ne les consultes. Per afegir l’usuari potolin al grup “Usuarios de escritorio remoto” fent ús de les crendencials de l’usuari “usudom”. Se suposa que l’usuari CAFENET\\usudom té privilegis per modificar objectes al domini.

lwinet rpc group ADDMEM "Usuarios de escritorio remoto" "CAFENET\potolin" -U CAFENET\\usudom -S PC21-01.cafenet.pv
 

strong>Exemple 6: També es poden utilitzar usuaris del domini per fer-ne les consultes. Per consultar els membres del grup de domini “Alumnes CMFPA” fent ús de les crendencials de l’usuari “usudom”. Se suposa que:

  • L’usuari CAFENET\\usudom té privilegis per modificar/consultar objectes al domini.
  • El servidor saquet.cafenet.pv és un controlador de domini del domini “CAFENET”
lwinet rpc group MEMBERS ‘Alumnes CMFPA’ -S saquet.cafenet.pv  -W CAFENET -U usudom
 

Referències

samba HOWTO

July 1, 2009

ascii a unicode

Filed under: GNU/Linux, Uncategorized — Tags: , , , , — mau @ 1:27 pm

Objectius

Obtenir l’ascii-7 de qualsevol caracter.

Com es fa

Existeix una utilitat molt bona per anar mostrant eixos caracters: uni2ascii
Esta utilitat va mostrant les equivalències ASCCI-7 dels caracters teclejats

Si no la tenim instal·lada, cal instal·lar-la:

aptitude install uni2ascii
 

Ara ja la podem utilitzar, simplement cal obrir un terminal i executar ‘uni2ascii’, la utilitat es queda esperant a que es pitje alguna tecla per mostrar-ne la seua equivalència en ASCII-7, tal i com es veu al següent exemple.

$ uni2ascii -a U
ç
\u00E7
à
\u00E0
Ó
\u00D3
ó
\u00F3
 

Ús pràctic

De vegades, a alguns llenguatges de programació, per exemple, javascript, només s’admenten caracters amb ascii de 7bits, amb la qual cosa cal fer-ne la conversió d’accents, c trencades, etc.
Personalment ho he utilitzat molt als missatges mostrats amb “alert()” en javascript.
Exemple, per mostrar amb javscript el missatge “Açò funciona” cal posar:

alert("A\u00E7\u00F2 funciona");
 

Requisits

Cal tenir el sistema en UTF-8, cosa que es pot comprovar amb l’ordre

locale
 

Terminal ssh se m’ha blocat. Com el recupere

Filed under: GNU/Linux — Tags: , , , , , , , , , — mau @ 12:15 pm

De vegades, algunes combinacions de tecles pitjades sobre un terminal provoquen que es quede blocat.
De vegades es bloca en pitjar “ctrl+S”, per recuperar-lo cal pitjar “ctrl+Q”

  • Ctrl+S atura el fluxe (XOFF)
  • Ctrl+Q recupera el fluxe (XON)

Per veure altres seqüències acceptades pel terminal, cal executar:

stty -a
 

June 26, 2009

Utilitzar unitat de backups de cinta DAT72

Filed under: GNU/Linux — Tags: , , , , , , , — mau @ 4:15 pm

Buscar i extraure un fitxer d’una cinta

A més de posar la cinta, cal fer:

mt -f /dev/nst0 rewind
mt -f /dev/nst0 status
tar ztvf /dev/nst0 > /tmp/llista.txt
 

Després simplement cal llistar el fitxer que ens mostrarà una cosa semblant a:

drwxr-xr-x root/root          0 2006-01-03 09:26 20060103/sistema/
-rw-r–r– root/root          0 2006-01-03 09:25 20060103/sistema/sbin.err
-rw-r–r– root/root         42 2006-01-03 09:26 20060103/sistema/var.md5
-rw-r–r– root/root    2326433 2006-01-03 09:24 20060103/sistema/bin.tgz
-rw-r–r– root/root          0 2006-01-03 09:24 20060103/sistema/lib.err
-rw-r–r– root/root    6259568 2006-01-03 09:24 20060103/sistema/boot.tgz
-rw-r–r– root/root          0 2006-01-03 09:25 20060103/sistema/usr.err
-rw-r–r– root/root     242299 2006-01-03 09:25 20060103/sistema/root.lst
-rw-r–r– root/root          0 2006-01-03 09:24 20060103/sistema/etc.err
-rw-r–r– root/root  157211915 2006-01-03 09:26 20060103/sistema/var.tgz
-rw-r–r– root/root         42 2006-01-03 09:26 20060103/sistema/usr.md5
-rw-r–r– root/root       2596 2006-01-03 09:25 20060103/sistema/sbin.lst
-rw-r–r– root/root          0 2006-01-03 09:25 20060103/sistema/opt.err
-rw-r–r– root/root         42 2006-01-03 09:24 20060103/sistema/dev.md5
-rw-r–r– root/root         42 2006-01-03 09:24 20060103/sistema/bin.md5
-rw-r–r– root/root         43 2006-01-03 09:25 20060103/sistema/root.md5
-rw-r–r– root/root    4941540 2006-01-03 09:24 20060103/sistema/etc.tgz
–More(3%)
 

Ens interessa extreue ‘etc.tgz’ :

mkdir /root/dump
cd /root/dump
mt -f /dev/nst0 rewind
mt -f /dev/nst0 status
tar zxvf /dev/nst0 20060103/sistema/etc.tgz
 

i, finalment, cal extraure la cinta i deixar-la al seu magatzem.

mt -f /dev/nst0 eject

Observacions

Treballar amb cintes és extremadament lent :-( , però prou segur :-)

Instal·lar una impressora-scanner Brother DCP 7010 a ubuntu 9.04

Filed under: GNU/Linux — Tags: , , , , , , , , , , — mau @ 4:01 pm

Objectius

Instal·lar brother DCP 7010 Lasser connectada per USB.
Fer-la funcionar com impressora i scanner.

Funcionament com impressora

1.- Instal·lar el paquet de brother per a lasser ===

aptitude install brother-cups-wrapper-laser
 

2.- Afegir la impressora al cups, per exemple des de la web http://localhost:631/admin

3.- Punxar sobre “Add Printer” i anar emplenant els valors.
Quan dóna l’opció d’especificar un ppd concret, posar-hi ‘/usr/share/ppd/Brother/DCP7010.ppd’

4.- A imprimir que ja funciona

Funcionament com scanner amb xsane

1.- Baixar-se i instal·lar el deb “brscan*”  des de
http://solutions.brother.com/linux/en_us/download_scn.html

sudo dpkg -i brscan2-0.2.4-0.amd64.deb
 

2. Identificar el fabricant:model de l’scanner

# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 04f9:0182 Brother Industries, Ltd Composite Device
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
 

També ho puc veure amb:

sudo sane-find-scanner

# sane-find-scanner will now attempt to detect your scanner. If the
# result is different from what you expected, first make sure your
# scanner is powered up and properly connected to your computer.

# No SCSI scanners found. If you expected something different, make sure that
# you have loaded a kernel SCSI driver for your SCSI adapter.

found USB scanner (vendor=0×04f9, product=0×0182) at libusb:002:003
# Your USB scanner was (probably) detected. It may or may not be supported by
# SANE. Try scanimage -L and read the backend’s manpage.

  1. Not checking for parallel port scanners.

  1. Most Scanners connected to the parallel port or other proprietary ports
  2. can’t be detected by this program.

 

3.- Cree un grup per poder gestionar privilegis d’ús sobre el dispositiu scanner.

addgroup scanner; usermod -a -G scanner login
 

4.- Configure udev per a que cree el dispositiu amb els privilegis i propietaris desitjats.
4.1.- cree el fitxer

vi  /lib/udev/rules.d/45-libsane.rules
 

i pose només estes dues línies:

# Brother DCP-115C
SYSFS{idVendor}=="04f9", SYSFS{idProduct}=="0182", MODE="664", GROUP="scanner"
 

Referències

https://bugs.launchpad.net/ubuntu/+source/sane-backends/+bug/217571  bugs.launchpad.net

June 20, 2009

Utilitats per treballar amb pdf i altres fitxers.

Filed under: GNU/Linux — Tags: , — mau @ 6:12 pm

Ací deixe els paquets que cal instal·lar per tenir unes molt bones utilitats per treballar amb fitxers pd, ps, etc.

aptitude install pdfjam imagemagick poppler-utils
 

Per obntenir-ne més informació simplement:

aptitude show poppler-utils
aptitude show pdfjam
aptitude show imagemagick
 

May 11, 2009

Connectar amb Oracle des de php5

Filed under: GNU/Linux — Tags: , , , , , — mau @ 1:15 pm

Objectius

Connectar amb oracle des de php.
Bàsicament consisteix en instal·lar ociclient i enllaçar-lo amb php.

Requeriments

Se suposa existeix apache2 + php5 + pear ja instal·lats i configurats al servidor destinació.

Com fer-ho

Instal·lar paquets prevists a la instal·lació d’ociclient

  • Instal·lar mòduls i llibreries PHP5 així com paquets per desenvolupar.
 # apt-get install php5-common php5 php5-dev libapache2-mod-php5 php5-cli
  # apt-get install build-essential php-pear
  # apt-get install libaio1

Configurar, compilar i instal·lar ociclient (llibreries d’oracle)

  • Crear directori /usr/local/oracle
mkdir /usr/local/oracle
cd /usr/local/oracle
  • Baixar ociclient al directori creat i descomprimir-ho. Concretament cal baixar basic i sdk, (les meues versions són basic-11.1.0.70-linux-x86_64.zip sdk-11.1.0.7.0-linux-x86_64.zip)
unzip \*zip
  • Crear enllaç al directori i, dins d’este, a determinades llibreries.
 # ln -s instantclient_11_1 instantclient
  # cd instantclient
  # ln -s libclntsh.so.11.1 libclntsh.so
  # ln -s libocci.so.11.1 libocci.so

Instal·lar mòdul oci8 de pear (pecl)

# mkdir src;cd src
# pecl download oci8
# tar zxvf oci8-1.3.5.tgz
# cd oci8-1.3.5
# phpize
# export ORACLE_HOME=/usr/local/oracle/instantclient
# ./configure –with-oci8=share,instantclient,/usr/local/oracle/instantclient
# make
# make install

Habilitar a php l’extensió oci8

Cal editar els fitxers:

 * /etc/php5/apache2/php.ini
 * /etc/php5/cli/php.ini
 extension=oci8.so

Enregistrar i enllaçar la llibreria instal·lada

# echo /usr/local/oracle/instantclient >> /etc/ld.so.conf
# ldconfig

Reiniciar apache

apache2ctl restart

Provar la instal·lació

  • Entrar al directori des d’on apache serveix contingut i crear el fitxer prova.php amb el següent contingut:
<?php
phpinfo();
?>
 
  • Buscar la cadena “oci8″ a la pàgina mostrada

Exemple script php

Problema

 * M'han facilitat una connexió a una DDBB d'oracle per accedir a unes vistes concretes, de les quals, per una aplicació local que estic fent, necessite només la columna 'NCARNET'.
 * L'aplicació està feta amb php i atacarà a un servidor mysql local, les dades de la DDBB només les necessite per verificar si un carnet està donat d'alta i a quin col·lectiu pertany.

Solució

 * Faig un script php anomenat oraImport.php que connecte amb Oracle i importe al Mysql aquelles dades que m'interessen.
 * Vull que es sincronitze totes les nits, ho pose doncs al cron
5 7 * * * root /usr/bin/php5 -f /var/scripts/oraImport.php >/var/log/oraImport.log 2>&1
 

script oraImport.php

/****************************************************************************
*** Script d'importacio de dades des d'ORACLE
*** Connecta a Oracle i importa dades d'unes vistes
*** Les vistes comencen totes per V_ i són:
***  V_CLIENTS
***  V_SOCIS
***  V_SIMPATITZANTS
***  V_VISITANTS
***  V_TEMPORAL
*****************************************************************************/

//****************************************************************************
// ********************** PARAMETRES CONNEXIONS ******************************
//****************************************************************************

 //Parametres d'oracle (Origen)
 $ORAusername = "usuariOracle";
 $ORApassword = "clau_usuariOracle";
 $ORAdbName = '
  (DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS =
          (PROTOCOL = TCP)
          (Host = murta.cafenet.pv)
          (Port = 1521)
        )
    )
    (CONNECT_DATA =
       (SID = CONTROL)
    )
  )
';

 //Parametrs de mysql (Destinacio)
 $MYSQLhostname = "localhost";
 $MYSQLusername = "formiga";
 $MYSQLpassword = "clau_de_la_formiga";
 $MYSQLdbName = "DB_CONTROL";

 define ('SEPARADOR',"\n**********************************************************************\n");

//****************************************************************************
//************************** CONNEXIONS **************************************
//****************************************************************************

  //Conecte amb Oracle
  $oraConn = oci_connect($ORAusername, $ORApassword, $ORAdbName, "UTF8");

  if (!$oraConn) {
    $e = oci_error();
    die ($e['message']);
  }

 //Connecte amb MYSQL
 $mysqli = new mysqli($MYSQLhostname, $MYSQLusername, $MYSQLpassword,$MYSQLdbName);
 if (mysqli_connect_errno()) {
    printf("No puc connectar amb mysql: %s\n", mysqli_connect_error());
    exit();
 }

 /* set autocommit to on */
 $mysqli->autocommit(TRUE);

 $mysqli->set_charset(’utf8′); 

//****************************************************************************
//************************** SQL *********************************************
//****************************************************************************

echo "Actualizant DBCONTROL (mysql) …\n";

//Definist a un array totes les SQL implicades
//en la importació.
//El nom de les claus de l’array el faig igual
//a la vista associada llevant-li el prefix "V_"
$MYSQLquery = array(
    ‘CLIENTS’ => ‘INSERT LOW_PRIORITY INTO CLIENTS (NCARNET)
VALUES (?) ON DUPLICATE KEY UPDATE NCARNET=VALUES(NCARNET)’,
    ‘SOCIS’ => ‘INSERT LOW_PRIORITY INTO SOCIS (NCARNET)
VALUES (?) ON DUPLICATE KEY UPDATE NCARNET=VALUES(NCARNET)’,
    ‘SIMPATITZANTS’ => ‘INSERT LOW_PRIORITY INTO SIMPATITZANTS (NCARNET)
VALUES (?) ON DUPLICATE KEY UPDATE NCARNET=VALUES(NCARNET)’,
    ‘VISITANTS’ => ‘INSERT LOW_PRIORITY INTO VISITANTS (NCARNET)
VALUES (?) ON DUPLICATE KEY UPDATE NCARNET=VALUES(NCARNET)’,
    ‘TEMPORAL’ => ‘INSERT LOW_PRIORITY INTO TEMPORAL (NCARNET)
VALUES (?) ON DUPLICATE KEY UPDATE NCARNET=VALUES(NCARNET)’
);

//Per enregistrar el temps que triga cada sql
$temps = array(
    ‘CLIENTS’ => array( ‘inici’ => 0,
                        ‘fi’ => 0),
    ‘SOCIS’ => array( ‘inici’ => 0,
                        ‘fi’ => 0),
    ‘SIMPATITZANTS’ => array( ‘inici’ => 0,
                        ‘fi’ => 0),
    ‘VISITANTS’ => array( ‘inici’ => 0,
                        ‘fi’ => 0),
    ‘TEMPORAL’ => array( ‘inici’ => 0,
                        ‘fi’ => 0)
);

$tempsGlobal = time();
//Comença la importacio
//Per a cada sql, importe des d’oracle
foreach ($MYSQLquery as $id => $sql) {
    //Esborre les dades
    $sqlDelete="DELETE FROM ".$id;
    echo SEPARADOR;
    echo $sqlDelete." … \n";
    $mysqli->query($sqlDelete);

    //Prepare SQL per inserir dades a MYSQL
    echo ‘Important ‘. $id .’ ==> ‘. $sql." des de \n";
    $myStmt = $mysqli->prepare($sql);

    //El camp nCarnet és un varchar varchar–> ’s’
    $myStmt->bind_param(’s’, $param1);

    //Prepare sql per llegir dades SQL
    $ORAquery = ’select distinct NCARNET from V_’.$id;
    echo $ORAquery." … \n";

    //Temps inici
    $temps[$id]['inici'] = time();

    $stid = oci_parse($oraConn, $ORAquery);
    if (!$stid) {
        $e = oci_error($oraConn);
        die($e['message']);
    }

    $r = oci_execute($stid, OCI_DEFAULT);
    if (!$r) {
        $e = oci_error($stid);
        die($e['message']);
    }

    echo oci_num_rows($stid) . " registres a importar \n";

    //Recorrec totes les dades rebudes d’ORACLE i vaig posant-les al MYSQL
    $total = 0;
    $nErrors = 0;
    while($camp = oci_fetch_array($stid, OCI_RETURN_NULLS)){
        $param1 = $camp[0];
        //$myStmt->bind_param(’s’, $s1);
        if (!$myStmt->execute()){
            echo "Error: $param1";
            $nErrors++;
        }
        $total++;
    }//while

    //Allibere recursos
    $myStmt->close();
    oci_free_statement($stid);

    //Mostre estadistiques
    echo "Registres: ". $total."\n";
    echo "Errors: ". $nErrors."\n";
    $temps[$id]['fi'] = time();
    echo "Temps: ".($temps[$id]['fi'] - $temps[$id]['inici'])." s.\n";
} //foreach $MYSQLQuery

//Tanque connexio amb ddbb
oci_close($oraConn);
$mysqli->close(); 

echo "Temps Total: ". (time() - $tempsGlobal)." s.\n";

?>

Refències

http://orfeogpl.info/wiki/index.php/Ubuntu_Oci8_Php5

April 2, 2009

‘or’ al grep. Cercar vàries cadenes amb el grep.

Filed under: GNU/Linux — Tags: , , , — mau @ 12:58 pm

Com sempre se m’oblida, m’ho apunte

grep "cadena1\|cadena2\..."  fitxer
 

Si, efectivament el cap em va malament, és tan simple com escapar la “|” (que fa d’or) amb la “\”.
Per exemple vull veure on apareix la cadena mysql o postgresql a un fitxer php caldria escriure:

grep "mysql\|postresql" fitxer.php
 

Si vull buscar-ho per dins de subdirectoris, per exemple en /var/www/htdocs , doncs una solució seria:

find /var/www/htdocs -type f -iname "*php" -exec grep -Hi "mysql\|postgresql" {} \;
 
Newer Posts »

Powered by WordPress