mardi 13 mars 2012

maven : appeler des tâches ants de zip et YUICompressor

Voici, un exemple de script maven permettant d'executer des taches ANT de post-build. L'exemple suivant permet d'effectuer des zips (par exemple pour livrer des scripts bash ou autres) et minise des fichiers JS, et remplace des tokens par un timestamps afin d'éviter des problèmes de caches des navigateurs: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<!-- ============== -->
<!-- Identification -->
<!-- ============== -->
<groupId>net.enwoo</groupId>
<artifactId>bandeau_extension</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>uneAppli</name>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<dependencies>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-jsch</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>jsch</groupId>
<artifactId>jsch</artifactId>
<version>0.1.25</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>bandeau_extension</id>
<phase>package</phase>
<configuration>
<tasks>
<ant antfile="${basedir}/build.xml">
<target name="deploy" />
</ant>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

taches ANT de zip


<?xml version="1.0"?>

<project default="deploy" basedir=".">
<property name="zipDir" location="${basedir}\zip" />
<property name="user" value="monUser" />
<property name="password" value="*******" />

<!-- =================================
target: deploy
================================= -->
<target name="deploy" depends="zip" description="copie sur la bastion les zip">
<echo>debut transfert</echo>
<echo>${user}:${password}@uneMachineServeur:/home/${user}</echo>
<scp todir="${user}@uneMachineServeur:/home/${user}/MEP" failonerror="true" verbose="true" trust="true" password="${password}">
<fileset dir="${zipDir}">
<include name="**/*.zip" />
<include name="**/*.sh" />
</fileset>
</scp>
<echo>fin transfert</echo>
</target>


<!-- - - - - - - - - - - - - - - - - -
target: zip
- - - - - - - - - - - - - - - - - -->
<target name="zip" depends="clean,compressor, gestionVersion, zipWEB, zipMiddle">
<echo>fin packaging</echo>
</target>

<!-- - - - - - - - - - - - - - - - - -
target: clean
- - - - - - - - - - - - - - - - - -->
<target name="clean">
<echo>nettoyage [${zipDir}]</echo>
<delete includeemptydirs="true">
<fileset dir="${zipDir}" includes="**/*.zip" />
</delete>

<delete verbose="true">
<fileset dir="${basedir}/src/main/webapp/js/csr">
<include name="Services*.js" />
</fileset>
</delete>


<delete verbose="true">
<fileset dir="${basedir}/tmp">
<include name="**/*.js" />
</fileset>
</delete>
<echo>fin nettoyage [${zipDir}]</echo>
</target>


<!-- - - - - - - - - - - - - - - - - -
target: zipWEB
- - - - - - - - - - - - - - - - - -->
<target name="zipWEB">
<echo>creation du zip pour le web</echo>
<zip destfile="${zipDir}/WEBS.zip" basedir="${basedir}/src/main/webapp" />
<echo>fin creation du zip pour le web</echo>
</target>

<!-- - - - - - - - - - - - - - - - - -
target: zipMiddle
- - - - - - - - - - - - - - - - - -->
<target name="zipMiddle">
<echo>creation du zip pour les patchs sous forme de classes</echo>
<zip destfile="${zipDir}/middlePatch.zip" basedir="${basedir}/middle/classes" />
<echo>fin creation du zip pour les patchs sous forme de classes</echo>
</target>

<!-- - - - - - - - - - - - - - - - - -
target: compressor
- - - - - - - - - - - - - - - - - -->
<target name="compressor">
<ant antfile="compressor.xml" target="doCompress" />
</target>


<!-- - - - - - - - - - - - - - - - - -
target: gestionVersion
- - - - - - - - - - - - - - - - - -->
<target name="gestionVersion">
<tstamp>
<format property="buildDate" pattern="yyyyMMdd_HHmmss_SS" />
</tstamp>

<copy tofile="${basedir}/src/main/webapp/wacd/defaults/csr/Bandeau_CSR.html" file="${basedir}/src/main/webapp/wacd/defaults/csr/Bandeau_CSR_template.html" overwrite="true" verbose="true"/>
<replace file="${basedir}/src/main/webapp/wacd/defaults/csr/Bandeau_CSR.html" value="${buildDate}" summary="true">
<replacetoken>@version_build@</replacetoken>
</replace>

<copy tofile="${basedir}/src/main/webapp/js/csr/Services.js" file="${basedir}/tmp/min/Services.js" verbose="true"/>
<move tofile="${basedir}/src/main/webapp/js/csr/Services_${buildDate}.js" file="${basedir}/src/main/webapp/js/csr/Services.js" verbose="true"/>
</target>
</project>

taches de minimisation du JS par YUICompressor


<?xml version="1.0"?>

<project default="doCompress" basedir=".">
<property name="jsDir" location="${basedir}/src/main/webapp/js/csr" />
<property name="tmpDir" location="${basedir}/tmp" />
<property name="concatDir" location="${tmpDir}/concat" />
<property name="minDir" location="${tmpDir}/min" />
<!-- =================================
target: compression
================================= -->
<target name="doCompress" depends="doConcat" description="Compresse le js concatene">
<echo>Compression</echo>
<taskdef name="yuicompress" classname="com.yahoo.platform.yui.compressor.YUICompressTask">
<classpath>
<pathelement path="${basedir}/lib/YUIAnt.jar" />
<pathelement path="${basedir}/lib/yuicompressor-2.4.7.jar" />
<pathelement path="${basedir}/lib/rhino-1.6R7.jar" />
</classpath>
</taskdef>
<delete includeemptydirs="true">
<fileset dir="${minDir}" includes="Services.js"/>
</delete>
<yuicompress warn="false" munge="yes" preserveallsemicolons="true" outputfolder="${minDir}" >
<fileset dir="${concatDir}" >
<include name="**/Services.js" />
</fileset>
</yuicompress>
<echo>fin compression</echo>
</target>

<!-- =================================
target: concatenation
================================= -->
<target name="doConcat" description="Concatene les js">
<echo>Concatenation</echo>
<delete includeemptydirs="true">
<fileset dir="${concatDir}" includes="Services.js"/>
</delete>
<concat destfile="${concatDir}/Services.js" force="no">
<filelist dir="${jsDir}" files="Services.js,myload.js"/>
</concat>
<echo>Fin concatenation</echo>
</target>
</project>

vendredi 3 février 2012

Unix / Linux : faire une liste simple de répertoire

Parfois, lorsque l'on dispose de nombreuses instances de programme, et qu'on souhaite automatiser des choses, sur des arborescence similaire , mais légèrement différentes (comme des nombreuses install tomcat)

il est utile de faire une boucle en shell. Un moyen simple, et la commande "ls" couplé a "cut" pour récupérer la partie variable de l'instance.

Par exemple, j'ai 3 instances tomcats :

/Metier/tomcat1/conf/server.xml
/Metier/tomcat2/conf/server.xml
/Metier/tomcat3/conf/server.xml
/Metier/UnAutreTomcat1/conf/server.xml
/Metier/ UnSecondTomcat1 /conf/server.xml

Je veux récupérer tous les fichiers server.xml de mes instances tomcat (et pas les 2 dernières), pour les gérer en conf.

Ce qui nous donne :

TOMCATS=`ls /MIDDLE/tomcat* | grep SSL-cnav2 | cut -d'/' -f 1`

for unTomcat in $TOMCATS ; do
  mkdir -p $DEST/$ unTomcat   
  cp -v /MIDDLE/cnav/$ unTomcat /tomcat1/conf/* $DEST/$unTomcat
done





Unix / Linux : trouver facilement un binaire/fichier

Dans des scripts bash, il est regulièrement nécessaire de spécifier des chemins. Une technique simple, peut être d'utiliser la commande "locate", et si elle ne trouve rien, on peut tenter une chemin par défaut. Voici, des exemples simples qui utilise les options -e pour "exist" et -r pour chercher la regex.

Pour trouver java :
bash3.02:$/usr/bin/locate -e -r "bin/java$"

Pour trouver mysqldump, et préciser un chemin par défaut dans le cas contraire :
...
# Check presence MySQL MysqlDump=`/usr/bin/locate -e -r "mysqldump$"` 
if [ $? -ne 0 ]; then 
   echo 1 "mysqldump command not found" 
else 
   Mysql="/usr/local/mysql/bin/mysql" 
fi

lundi 23 janvier 2012

Unix / Linux : shell lecture de configuration

Voici une technique simple pour créer des scripts de déploiements sur plusieurs machines : # ecrasement cp $APP_REPO/MIDDLE/APPDocumentServlet.xml /MIDDLE/monAppli/$APP_SERVICE_NAME/tomcat1/conf cp $APP_REPO/MIDDLE/classpath.txt /MIDDLE/monAppli/$APP_SERVICE_NAME/tomcat1/conf cp $APP_REPO/MIDDLE/jvm.properties /MIDDLE/monAppli/$APP_SERVICE_NAME/tomcat1/conf cp $APP_REPO/MIDDLE/web.xml /MIDDLE/monAppli/$APP_SERVICE_NAME/tomcat1/conf # maj APPDocumentServlet.xml cd /MIDDLE/monAppli/$APP_SERVICE_NAME/tomcat1/conf sed -i -e "s/\$APP_SLS_APP_NAME/$APP_SLS_APP_NAME/g" APPDocumentServlet.xml sed -i -e "s@\$APP_SLS_BDD@$APP_SLS_BDD@g" APPDocumentServlet.xml # maj classpath sed -i -e "s/\$APP_SERVICE_NAME/$APP_SERVICE_NAME/g" classpath.txt # maj jvm.properties sed -i -e "s/\$APP_SERVICE_NAME/$APP_SERVICE_NAME/g" jvm.properties # RELANCE service start_service $APP_SERVICE_NAME rm /SVI/monAppli/$APP_SERVICE_NAME/conf/dog.txt

mercredi 21 décembre 2011

unix / linux : ajouter des users qui se connecte par ssh

Pour gérer simplement les users, la notion de groupe est essentielle. Avec openssh , il est simple de créer et d'ajouter des users pouvant se connecter par ssh.
Tout d'abord ajoutons l'option "AllowGroup" dans le fichier /etc/ssh/sshd_config ... AllowGroup sshlogin ... Puis, redémarrer le process : /etc/init.d/ssh restart
Pour cela, il faut créer un groupe "sshlogin" :

addgroup ssh login Puis on crer des users:
adduser toto On ajoute les users existants au groupe :
adduser toto sshlogin Les utilisateurs peuvent alors se connecter ... Des explications bien plus complètes sur ubuntu.fr

jeudi 3 novembre 2011

outils : astuces putty


Astuce 1 : Ne plus taper le votre user pour se connecter aux machines se connecter au bastion rajouter la ligne la ligne User www dans le fichier ~/.ssh/config on peut maintenant faire : ssh monserveur05 et plus ssh monUser@monserveur05 Astuce 2 : Utiliser le pavé numérique sous VI en utilisant Putty sous putty dans Terminal / Features cocher "Disable application keypad mode" Astuce 3 : Augmenter la taille du scroll de la fenêtre sous Putty sous putty dans Window mettre une nouvelle valeur dans le champs "Lines of scrollback" Attention à ne pas oublier de sauvegarder les options sous Putty!


mardi 13 septembre 2011

Web / http / https / IE : contenu mixte elements non securises

Si vous créer un site web, dotn le contenu est distribué en HTTPS. Ce dernier peut faire référence à des éléments non sécurisés tel que des image, ou le player Window Media Player ... De ce fait, sous IE, vous aurez à chaque ouverture de la page, une popup, vous demandant si vous souhaitez ou non afficher cette page qui contient des éléments non sécurisés (commençant par http ...) Voici un très bon lien traitant du sujet : Pour corrigez , cela :
  1. si cela est possible, vous pouvez passer ces ressources en https (ex : en
  2. si la ressource ne vous appartient pas ... alors il ne faut pas spécifier le protocole et mettre // (ex : en
  3. la dernière solution est de configurer IE pour qu'il accepte le contenu mixte (ds tools-security->custom level-> accept mixte content (je en suis plus sûr du libellé exact :-) )
Voici un exemple avec le player windows : A noter que les urls ont été modifiées pour être "relative" // en supprimant http ... ce qui supprime le warning sous IE remplacement de : http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer en //www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer Ce qui donne :

Chargement en cours...