Raid 3ware Rebuild

 Trucs et astuces techniques  Commentaires fermés sur Raid 3ware Rebuild
Déc 082010
 

Dans tw_cli , commencer par retirer le disque defaillant avec
/cx/px remove
Remplacer le disque (ou pas) puis rescanner le disque avec
/cx rescan
enfin lancer le rebuild avec
/cx/ux start rebuild disk=n
avec n le numero du port px où est connecté de disque (La doc n’est absolument pas claire à ce sujet)

VirtualBox – Gestion de l’usb

 Trucs et astuces techniques  Commentaires fermés sur VirtualBox – Gestion de l’usb
Déc 052010
 

Pour que la gestion de l’usb fonctionne correctement il faut disposer de la version « fermée » de VirtualBox
Il est nécessaire de rebooter (enfin non mais c plus simple) après l’installation du paquet VirtualBox pour que UDEV prenne en compte les modification de règles d’accès des peripheriques usb (accès rw au groupe vboxusers)

Il faut évidemment aussi que l’utilisateur des VM appartienne à ce groupe.
# adduser $username vboxusers

Apache mod_proxy sous debian

 Trucs et astuces techniques  Commentaires fermés sur Apache mod_proxy sous debian
Juin 202010
 

La configuration par défaut du mod_proxy de Apache sous Debian implique les réglages suivants

<IfModule mod_proxy.c>
#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.

ProxyRequests Off          <<<<<<<< Très bien 	:smile: 
<Proxy *>
   AddDefaultCharset off
   Order deny,allow
   Deny from all               <<<<<<< RAAAAHHHHHH ! 	:mad: 
   #Allow from .example.com
</Proxy>

# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block

ProxyVia On
</IfModule>

Ce genre de sécurités à la con me sortent par les yeux parce qu’elles impliques que si vous activez (à priori volontairement) une option, cette option sera par defaut inutilisable. Et vous chercherez vainement ce que vous avez bien pu faire de travers alors que ce n’est pas de votre faute.

Changer le reglage par defaut de debian est une mauvaise piste. => gare à la prochaine mise à jour.

un vhost qui veut faire du proxy doit donc au moins avoir pour directives :

<VirtualHost :80>
  ServerName fqdn.server.com
  proxyPass localpath  http://targeturl/
  proxyVia off
  <proxy >
    Order Deny,Allow
    Deny from all
    Allow from all
  </proxy></strong>
</VirtualHost>

Netstat et ses options sympa

 Trucs et astuces techniques  Commentaires fermés sur Netstat et ses options sympa
Fév 092010
 

Pour avoir des statistiques réseau sous linux, vous connaissez certainement netstat

Certaines combinaisons d’options sont plus faciles à retenir avec des moyens mnemotechniques
Parmis les options intéressantes :

netstat -lapute

ou encore

netstat -pantalon

Ce sont évidemment des options composées, pour plus d’infos RTFM.

Monitoring CPU temps réel

 Trucs et astuces techniques  Commentaires fermés sur Monitoring CPU temps réel
Fév 082010
 

voici un petit bout de code C qui mesure l’activité CPU d’une machine et envoie les statistiques à une machine de monitoring

#include <stdio.h>
#include <time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>
#define BUFSIZE 1024


enum { CURRENT , OLD , DIFF , PERCENT , TABSIZE };
enum { USR, NICE, SYSTEM , IDLE , IOWAIT , IRQ , SOFTIRQ , TOTAL , NBCOLS };
enum { ERROR, OK };

unsigned long long int table[NBCOLS][TABSIZE];

void setcolor(int f, int b) { printf("%c[0;%d;%dm",27,30+f,40+b); }
void setfcolor(int f) { printf("%c[%d;%dm", 27, f/8, 30+(f%8) ); }
void setbcolor(int b) { printf("%c[%d;%dm", 27, b/8, 40+(b%8) ); }
void setdefault(void) { printf("%c[m",27); }
char thishostname[BUFSIZE];



int s;
struct sockaddr_in srvAddr;
struct hostent *h;

void recuphostname(void)
{	FILE * f;
	f=fopen("/etc/hostname" ,"r");
	fgets(thishostname , BUFSIZE-1 , f);
	if ( thishostname[strlen(thishostname)-1] == '\n') thishostname[strlen(thishostname)-1] ='\0';
	fclose(f);
}

int recup(void)
{   FILE * f;
    char cpuline[BUFSIZE];
    unsigned int i;
    
    f=fopen("/proc/stat" ,"r");
    if (!f) return ERROR;    
    fgets(cpuline , BUFSIZE-1 , f);
    fclose(f);

    for ( i=0 ; cpuline[i] != ' ' && i<BUFSIZE ; i++ ); i++; 
    sscanf(cpuline+i, "%llu", &( table[USR][CURRENT] )        );
    for ( i++ ; cpuline[i] != ' ' && i<BUFSIZE ; i++ ); i++; 
    sscanf(cpuline+i, "%llu", &( table[NICE][CURRENT] )       );
    for ( i++ ; cpuline[i] != ' ' && i<BUFSIZE ; i++ ); i++; 
    sscanf(cpuline+i, "%llu", &( table[SYSTEM][CURRENT] )     );
    for ( i++ ; cpuline[i] != ' ' && i<BUFSIZE ; i++ ); i++; 
    sscanf(cpuline+i, "%llu", &( table[IDLE][CURRENT] )       );
    for ( i++ ; cpuline[i] != ' ' && i<BUFSIZE ; i++ ); i++; 
    sscanf(cpuline+i, "%llu", &( table[IOWAIT][CURRENT] )     );
    for ( i++ ; cpuline[i] != ' ' && i<BUFSIZE ; i++ ); i++; 
    sscanf(cpuline+i, "%llu", &( table[IRQ][CURRENT] )        );
    for ( i++ ; cpuline[i] != ' ' && i<BUFSIZE ; i++ ); i++; 
    sscanf(cpuline+i, "%llu", &( table[SOFTIRQ][CURRENT] )    );
    return OK;
}


void affiche(void)
{   printf("USR=%03lu ",     table[USR][PERCENT]);
    printf("NICE=%03lu ",    table[NICE][PERCENT]);
    printf("SYSTEM=%03lu ",  table[SYSTEM][PERCENT]);
    printf("IDLE=%03lu ",    table[IDLE][PERCENT]);
    printf("IOWAIT=%03lu ",  table[IOWAIT][PERCENT]);
    printf("IRQ=%03lu ",     table[IRQ][PERCENT]);
    printf("SOFTIRQ=%03lu\n", table[SOFTIRQ][PERCENT]);
}

void affiche2(void)
{   int i;
    int cpt=0;

    printf("[");   
    //setfcolor(0);
    setfcolor(2);
    for ( i=0 ; i < table[USR][PERCENT] ; i++ ) { putc('U',stdout); cpt++; }
    setfcolor(1);
    for ( i=0 ; i < table[SYSTEM][PERCENT] ; i++ ) { putc('S',stdout); cpt++; }
    setfcolor(4);
    for ( i=0 ; i < table[IOWAIT][PERCENT] ; i++ ) { putc('W',stdout); cpt++; }
    setfcolor(6);
    for ( i=0 ; i < table[IRQ][PERCENT]+table[SOFTIRQ][PERCENT] ; i++ ) { putc('I',stdout); cpt++; }
    setdefault();
    for ( i=cpt ; i < 100 ; i++ ) putc(' ',stdout);
    printf("] CHARGE CPU : %4lu%% \n", 100 - table[IDLE][PERCENT] );

   
}

void affichenet(void)
{   char outbuffer[2000];

    sprintf(outbuffer , "%s|",thishostname);
    sprintf(outbuffer+strlen(outbuffer) , "%lu|",     table[USR][PERCENT]);
    sprintf(outbuffer+strlen(outbuffer) , "%lu|",    table[NICE][PERCENT]);
    sprintf(outbuffer+strlen(outbuffer) , "%lu|",  table[SYSTEM][PERCENT]);
    sprintf(outbuffer+strlen(outbuffer) , "%lu|",    table[IDLE][PERCENT]);
    sprintf(outbuffer+strlen(outbuffer) , "%lu|",  table[IOWAIT][PERCENT]);
    sprintf(outbuffer+strlen(outbuffer) , "%lu|",     table[IRQ][PERCENT]);
    sprintf(outbuffer+strlen(outbuffer) , "%lu\n", table[SOFTIRQ][PERCENT]);

    printf("%s", outbuffer);

    sendto(s, outbuffer, strlen(outbuffer)+1, 0, (struct sockaddr *) &srvAddr, sizeof(srvAddr));

}

void submain(void)
{       
    unsigned int i=0;
   
    
    if ( ! recup() ) return;
    
    for ( i=USR ; i<TOTAL ; i++)
    {       if (table[i][CURRENT]<table[i][OLD]) return;
    }

    table[TOTAL][CURRENT] = 0;
    for ( i=USR ; i<TOTAL ; i++ ) 
        table[TOTAL][CURRENT] += table[i][CURRENT];           /*genere le total       */
    for ( i=USR ; i<=TOTAL ; i++) 
        table[i][DIFF] = table[i][CURRENT] - table[i][OLD];   /*genere différences */

    if ( table[TOTAL][DIFF] == 0 ) return;
    for ( i=USR ; i<=TOTAL ; i++) 
        table[i][PERCENT] = ( table[i][DIFF] * 100 ) / table[TOTAL][DIFF];    /*calcul pourcentages */

    //affiche2();
    affichenet();
    
    for ( i=USR ; i<=TOTAL ; i++ ) 
        table[i][OLD]=table[i][CURRENT];     /*archive les anciennes valeur pour la prochaine mesure */
    
}


int main(void)
{       
    unsigned int i=0;
    unsigned int j=0;
    struct timespec ts;
    ts.tv_sec=0;
    ts.tv_nsec=100000000;
   
     
    for ( i=USR ; i<=TOTAL ; i++) for (j=CURRENT ; j<NBCOLS ; j++ ) table[i][j]=0;
    
    recuphostname();

    srvAddr.sin_family = AF_INET;
    srvAddr.sin_port = htons(31857);
    srvAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    

    s=socket(AF_INET,SOCK_DGRAM,0);
    if ( s<0 ) return 1;

    while (1)
    {   nanosleep(&ts, NULL);
        submain();
    }
     return 0;
}

Disques virtuels avec LVM pour machines XEN

 Trucs et astuces techniques  Commentaires fermés sur Disques virtuels avec LVM pour machines XEN
Fév 082010
 

Lors de la création de machines virtuelles XEN, (on parle de machines paravirtualisées et non émulées) On peut utiliser des volumes logiques pour créer les disques virtuels de cette machine. Il faut absolument éviter d’utiliser LVM à l’intérieur du domU car la couche lvm de dom0 reconnaitra les PV du domU comme un nouveau VG de dom0.

Le systeme *peut* fonctionner comme ça mais il y a quand même de gros risques de confusion ou cafouillages en particulier si on tente de manipuler les volumes en question à partir de dom0.

donc : une manipe à éviter.

Programmation openGL sous Debian (Lenny)

 Trucs et astuces techniques  Commentaires fermés sur Programmation openGL sous Debian (Lenny)
Fév 012010
 

Les paquets nécessaires pour compiler une application opengl minimale sont :

apt-get install --assume-yes libxi-dev libxi6
apt-get install --assume-yes libxmu6 libxmu-dev
apt-get install --assume-yes freeglut3-dev freeglut3 libglut3 libglut3-dev glutg3 glutg3-dev
apt-get install --assume-yes libgl1-mesa-dev libglib2.0-dev libglu1-mesa-dev libglut3 libglut3-dev

Tracer une série de points avec GnuPlot

 Trucs et astuces techniques  Commentaires fermés sur Tracer une série de points avec GnuPlot
Jan 292010
 

Pour tracer une série de valeurs avec gnuplot, la commande suivante est bien sympa.

( echo "set term x11" ; echo "plot \"-\" with lines;" ; cat data.txt ) | gnuplot -persist

au lieu de cat data.txt, ont peut mettre une commande qui génere les data à tracer.

Rsync en specifiant une clé RSA

 Trucs et astuces techniques  Commentaires fermés sur Rsync en specifiant une clé RSA
Jan 202010
 

L’astuce est de specifier la commande ssh que rsync doit utiliser pour se connecter et de donner les bonnes options à ssh

exemple

rsync -av -e "ssh 
-o UserKnownHostsFile=/dev/null 
-o StrictHostKeyChecking=no 
-o PasswordAuthentication=no 
-i $RSAKEYFILE" 
--delete-before 
$LOCALPATH 
user@$BACKUPSRV:$REMOTEBACKUPPATH

(Supprimer les retour de ligne pour utiliser)