mercredi 1 décembre 2010

Installer sqlplus de la version XE (client et serveur)

Oracle propose une distribution libre de sa base avec XE(expresse edition).
Téléchargez oracle-xe-client-10.2.0.1-1.0

Puis installez :
rpm -i oracle-xe-client-10.2.0.1-1.0.rpm


Comme il fallait s'y attendre, ORACLE ne faitrien pour nous simplifier la tâche. Car à ce point, rien n'est fait :
Il faut d'abord créer le répertoire de configuration :
mkdirhier /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/network/admin/


Puis
La variable définir la variable TNS_ADMIN pour qu'elle pointe sur le répertoire de configuration :


export TNS_ADMIN=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/network/admin/
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export ORACLE_SID=ARCHIVER
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
PATH=$ORACLE_HOME/bin:$PATH



Le fichier tnsnames.ora contient les informations suivantes


MYSID =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 66.65.66.66)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ARCHIVER)
)
)

On s'y connecte ensuite par la ligne de commande :


sqlplus MYUSER/MYPWD@MYSID

lundi 29 novembre 2010

Faire du port forwarding à l'aide de SSH


En ligne de commande
 
Avec cette ligne de commande, la connexion sur le port local 10999 est équivalent à une connection sur le port 10389 de la machine distante. Cela permet de contourner les firewall. 

 
ssh -L 10999:targetmachine:10389 factory@targetmachine
 
 
Par putty
On peut faire la même chose par putty. 

Dans les fichier de conf
Pour faire du port forwarding, éditer le fichier .ssh/config et lui donne le contenu suivant
(Ici le port 80 de la machine est forwardée sur la machine 55.6.110.96 sur le port 1521)

Host 127.0.0.1
        LocalForward 80 55.6.110.96:1521
        GatewayPorts yes

Pour que la connexion fonctionne, il est nécessaire que le programme ssh soit actif (C'est à dire qu'il soit démarré et figure dans les process de la machine locale). Il est également possible de procéder à l'opération inverse en se servant de la commande RemotePort

To set a specific user to connect a remot host
Host myhost
        User myuser
        ForwardX11 yes    

Externaliser la configuration de ses webapp

Dans les webapps utilisant spring il est possible d'externaliser sa configuration à l'aide de variables d'environnement pour log4j :

<bean id="log4jConfigurer"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass">
<value>org.springframework.util.Log4jConfigurer</value>
</property>
<property name="targetMethod">
<value>initLogging</value>
</property>
<property name="arguments">
<list>
<value>${MYREP_CONF}/log4j.xml</value>
<!-- or you could use an absolute path: <value>file:D:\\etc\\myapp\\log4j.properties</value> -->
</list>
</property>
</bean>

jeudi 25 novembre 2010

Port forwarding à l'aide de iptable

Ip/Port rewriting


Ces commandes se passent en root

Ip table permet de forwarder des ports d'une machine vers une autre.

Les instructions sont à renouveler à chaque démarrage de la machine




#Réécriture du port d'un paquet
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 1521 -j DNAT --to 55.6.110.96:1521

iptables -A INPUT -p tcp -m state --state NEW --dport 1521 -i eth0 -j ACCEPT
#Sécurité par défaut autorise l'accès à la chaine forward
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/ip_forward

# Pour intercepter les paquets à destination d'une ip différente de celle de l'interface

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE



Pour lister les chaines principales



iptable -L



Pour lister toutes les de nat (ip/port rewriting)



iptables -L -t nat



Pour supprimer les règles



iptables -F -t nat

jeudi 4 novembre 2010

Utiliser apache en frontal et forwarder les ports sur un Jetty

Je veux mettre en place un apache frontal lequel délègue sa requête à un serveur archiva ouvert sur le port 8081. Seul le port 80 est ouvert sur le réseau. Je ne souhaite pas de connecteur complexe, car il ne s'agit pas d'une question de performance.
Pour ce faire, j'ai utilisé le mod_proxy de apache et les virtualHost.

<IfModule mod_proxy.c>
ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

<VirtualHost archiva:80>
ServerAdmin webmaster@dummy-host.example.com
ProxyPass / http://archiva:8081/
ProxyPassReverse / http://archiva:8081/
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>




mardi 28 septembre 2010

Créer un partage Webdav sur Ubuntu 10.4

Installer WebSAV sur apache2


Ajouter les lignes suivantes dans le fichier /etc/apache2/sites-available/default

<Directory "/var/www/webdav/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Alias /webdav /var/www/webdav/
<Location /webdav>
DAV On
AuthType Basic
AuthName "webdav"
AuthUserFile /var/www/.passwd.dav
Require valid-user
DavMinTimeout 600
<LimitExcept GET PUT HEAD OPTIONS POST>
Require valid-user
</LimitExcept>
</Location>


Gérer les droits


Puis nous allons créer les mots de passe.
htpasswd -c /var/www/.passwd.dav myuser
chown root:www-data /var/www/.passwd.dav
chmod 640 /var/www/.passwd.dav
chmod -R 0777 /var/www/webdav
chown www-data:www-data /var/www/webdav
/etc/init.d/apache2 restart

jeudi 10 juin 2010

Intégration continue avec Hudson et Maven

Environnement


Avant de donner la recette pour la mise en oeuvre de hudson, nous
allons donner quelques définitions. En effet, certains termes
utilisé dans ce document ont un sens variable suivant le
contexte.

Précisons d'abord les rôles des différents
environnements :

  • Environnement d'Intégration : sert à
    valider manuellement que le le comportement du produit est
    identique sur les environnements de développement et sur la
    plateforme cible. L'environnement d'intégration doit être
    un clone des plateformes de production.

  • Environnement Intégration continue : sert à
    valider automatiquement que le le comportement du produit est
    identique sur les environnements de développement et sur la
    plateforme cible. L'environnement d'intégration doit être
    un clone des plateformes de production.

  • Environnement de Validation :
    sert à vérifier
    que le produit est conforme aux spécifications.


Jeu de test :
Ensemble de données nécessaires au passage d'un test

Test unitaire : Théoriquement
il s'agit d'un test vérifiant une exigence, mais dans ce
document, nous l'utiliserons dans son acception consacrée
test
Junit
.

Bénéfices de l'intégration
continue


Dans les configurations de développement JAVA« standard »,
le codage s'effectue sur Windows et l'intégration s'effectue
sur LINUX/UNIX, il est donc fréquent d'avoir des surprises au
moment de passer sur l'environnement cible, les environnements
d'intégration permettent anticiper les problèmes
techniques.
L'intégrateur identifie les dysfonctionnements et les
corrige. Malheureusement, dans la plupart des configurations projet,
personne n'étant affecté exclusivement à
l'intégration et les soucis d'intégration tendent à
être reléguées aux dernières tâches.

Au delà de l'effet de mode, le principal bienfait de
l'intégration continue sera d'améliorer la visibilité
de ces problématiques.
L’intégration continue valide automatiquement le
produit sur la plateforme cible.


  • Permet de détecter au plus tôt les problèmes
    de dépendance aux environnements : File System, Encoding,
    Case-sensitive, performances etc.
  • Permet de lisser le stress dans l'équipe (plus de
    pression dans les phases précoces, moins au moment de la
    livraison)

  • Il donne une aperçu de la qualité du produit au
    chef de projet et donne confiance au moment de la livraison
    .

Impacts structurants de l'intégration
continue


Contraintes de codage


L'ensemble des projets sur le référentiel de source
doit être compilable à tout moment.

Pour l'intégration continue, le développeur est
contraint d'écrire des tests unitaires.

Test unitaires

Dans un monde systématique, chaque exigence devrait être
vérifiée par un test unitaire, inversement, chaque test
unitaire devrait se mettre en relation avec une seule exigence.
Cependant, dans le monde réel, un test unitaire pourra être
associé à plusieurs exigences, une exigence pourra
n'être pas couverte... etc. In fine le développeur
arbitrera (mais avec un minimum d'expérience, cela se passe
bien. )
A chaque TU est associé un jeu de tests, mais aucune
hypothèse de données préalable ne peut être
faite. Que l'on parte d'une base totalement vidangée ou pleine
de donnée, le résultat du test unitaire doit être
le même. D'autre part, le séquence des TU ne doit pas
non plus conditionner le résultat.

Ressources



  • L’intégration
    requiert un serveur dédié pour hudson
  • Il faut une base de données
    par utilisateur

    (Elle peux se situer sur la machine de
    développement ou sur un serveur mutualisé)

Contrainte de conception



  • Il faut utiliser maven pour
    l'assemblage
  • Les test unitaires doivent être
    écrit avec Junit

Au quotidien



  • Il faut vraiment s’impliquer
    dans la supervision des builds et être vigilant tout au long
    du développement du produit : codage, intégration,
    validation
  • L'équipe doit s'organiser
    dans ce but, c'est-à-dire qu'il faut un responsable
    Intégration Continue (le même que le responsable GCONF)


Mise en oeuvre




  • Installer un serveur hudson
  • Planifier les tâches à des horaires où la
    machine n'est pas trop chargée

De The French Hack

De The French Hack

De The French Hack