Archives d’un auteur
Bonding et Vlan sous proxmox
Il est très facile sur Proxmox d’avoir une configuration réseau robuste, performante et sécurisé avec du channel bonding pour l’agrégation de lien et des VLAN.
Exemple de configuration à 2 liens (eth0, eth1) et 3 VLAN, fichier /etc/network/interfaces :
# physic devices
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
# bonding
auto bond0
iface bond0 inet manual
slaves eth0 eth1
bond_miimon 100
bond_mode 802.3ad
# This is classic IEEE 802.3ad Dynamic link aggregation.
# This requires 802.3ad support in the switch and driver support for retrieving the speed and duplex of each slave.
# standard bridge
auto vmbr0
iface vmbr0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.254
bridge_ports bond0
bridge_stp off
bridge_fd 0
# vlan and bridge configuration from bond0
auto vlan10
iface vlan10 inet manual
vlan_raw_device bond0
auto vmbr10
iface vmbr10 inet manual
bridge_ports vlan10
bridge_stp off
bridge_fd 0
auto vlan20
iface vlan20 inet manual
vlan_raw_device bond0
auto vmbr20
iface vmbr20 inet manual
bridge_ports vlan20
bridge_stp off
bridge_fd 0
auto vlan30
iface vlan30 inet manual
vlan_raw_device bond0
auto vmbr30
iface vmbr30 inet manual
bridge_ports vlan30
bridge_stp off
bridge_fd 0
Ensuite, il est possible de voir et sélectionner le bridge qui nous intéresse pour la VM.
Automatisation de déploiement Android
J’ai longtemps cherché pour le travail à configurer des téléphones Android de façon automatique. Il n’y a pas d’outils de déploiement professionnel ou je n’en ai pas trouvé.
Des produits payant comme Afaria de Sybase existe, mais eux même sont soumis à l’immense diversité d’Android.
Le scripting python apporte souvent des solutions. Sur Android, il existe SL4A (Scripting Layer for Android) qui permet en effet de coder rapidement de petites choses. Mais rien pour contrôler d’autres applications ou paramètres du système. On peut rapidement s’amuser avec la webcam pour scanner des codes barres, appeler des webservices, etc…
J’ai cherché à regarder du côté de la ligne de commande avec adb (Android Debug Bridge) qui permet d’installer des applications, de les lancer ou encore d’avoir un shell (plus que limité si on a pas rooté son téléphone).
J’ai aussi essayé le développement d’application pour simuler des touches ou des cliques. De rare code source sont disponible mais non fonctionnel. Les fonctions ou librairies ayant disparu des versions plus récente du SDK. On peut avec des Intent ouvrir des Activity mais bon rien de nouveau à adb.
On est dans un environnement comme chrooté, et on ne peut ouvrir la base Sqlite d’une autre application.
En continuant dans la piste du dévelopement, j’ai trouvé Robotium qui permet enfin d’avoir des résulats intéressant avec la grosse limite qu’on ne peut l’utiliser que sur ses propres applications. On peut aussi automatiser d’autres applications en changeant les certificats de l’APK et en les remplaçant par les siens. J’ai pu ainsi avoir une version de K9Mail qui me permettait une auto-configuration de compte mail IMAP directement lié à notre gestion de parc. Le principe est simple, récupération du numéro de série du téléphone, récupération de l’utilisateur, récupération des paramètres du compte mail de l’utilisteur et remplissage des valeurs avec la simulation de clique (un peu comme avec AutoIt sous windows)
Après avoir fini le travail, j’ai trouvé MonkeyRunner qui permet en python de simuler des cliques et la frappe clavier, le lancement d’Activity directement depuis le PC lié au téléphone (le python étant en fait éxécuté en Jython avec les outils google). Plus besoin de modifier des applications (qui n’est pas toujours possible surtout avec les ROM de certains constructeurs/opérateurs) mais on a pas la même souplesse. On ne peut pas attendre une boite de dialogue, ou alors en faisant une copie d’écran et de l’analyse d’image…
Bref, on peut faire des choses pour automatiser mais c’est loin d’être une solution d’entreprise pour gérer le déploiement d’un parc de téléphone.
Récupération de certains fichiers dans une archive tar
Souvent on oublie comment faire en ligne de commande pour lister le contenu ou récupérer un seul fichier d’une archive tar.
Pour rappel :
Lister le contenu du fichier mon_archive.tgz :
tar -t mon_archive.tgz
Décompresser un fichier se trouvant dans mon /:
tar -xvzf mon_archive.tgz chemin_du_fichier/fichier
Attention à bien mettre le chemin complet comme vous l’avez vu en listant le contenu.
Dans le cas d’un fichier à l’intérieur de répertoires, la décompression va créer tous les répertoires dans le répertoire courant.
Installer Oracle Instant Client sur Debian 64bits pour Mono
J’ai eu récemment la problématique de devoir configurer un serveur debian 64 bits pour faire du mono et plus particulièrement des accès à des bases Oracle.
Après l’installation de mono, on peut trouver un rapide tuto chez mono.
La partie OCI devait bien se passer mais pas en 64 bits …
Pas possible d’utiliser les paquets DEB fournit par Oracle, il faut passer par les paquets RPM et les convertir en .deb.
Vous pouvez télécharger chez Oracle, l’instant client : http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html (nécessite une identification pas de wget donc …)
Puis choisir de télécharger le paquet : oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm (vous pouvez aussi prendre le sqlplus, si besoin)
Il faut convertir le paquet RPM avec alien :
# alien oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-basic_11.2.0.3.0-2_amd64.deb generated
Faire un dpkg pour l’installer
# dpkg -i oracle-instantclient11.2-basic_11.2.0.3.0-2_amd64.deb
(Reading database ... 36766 files and directories currently installed.)
Unpacking oracle-instantclient11.2-basic (from oracle-instantclient11.2-basic_11.2.0.3.0-2_amd64.deb) ...
Setting up oracle-instantclient11.2-basic (11.2.0.3.0-2) ...
Les librairies vont s’installer dans /usr/lib/oracle/11.2/client64/lib :
Attention de faire les liens à la main pour libclntsh.so -> libclntsh.so.11.1 et libocci.so -> libocci.so.11.1
cd /usr/lib/oracle/11.2/client64/lib
ln -s libclntsh.so.11.1 libclntsh.so
ln -s libocci.so.11.1 libocci.so
Penser à faire un fichier /etc/ld.so.conf.d/oracle.conf, suivit d’un ldconfig :
echo "/usr/lib/oracle/11.2/client64/lib" > /etc/ld.so.conf.d/oracle.conf
ldconfig
Modifier ou ajouter des variables d’environnement (dans votre .zshrc, .bash_profile ou autres en modifiant si nécessaire, je pense surtout au NLS_LANG):
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib
export MONO_PATH=${ORACLE_HOME}/lib
export NLS_LANG=french_france.WE8ISO8859P15
Faire/importer votre fichier tnsnames.ora que vous mettrez dans /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora.
Tester avec un petit code en mono :
Fichier test.cs :
using System;
using System.Data;
using System.Data.OracleClient;
public class Test
{
public static void Main (string[] args)
{
string connectionString =
"Data Source=MYORACLEDB;" +
"User ID=MYLOGIN;" +
"Password=MYPASS;";
OracleConnection dbcon = null;
dbcon = new OracleConnection (connectionString);
dbcon.Open ();
OracleCommand dbcmd = dbcon.CreateCommand ();
string sql = "select TO_CHAR(sysdate,'DD/MM/YYYY') as c from dual";
dbcmd.CommandText = sql;
OracleDataReader reader = dbcmd.ExecuteReader ();
while (reader.Read ()) {
string c = (string) reader["c"];
Console.WriteLine ("Date: {0}", c);
}
// clean up
reader.Close ();
reader = null;
dbcmd.CommandText = sql;
dbcmd.ExecuteNonQuery ();
dbcmd.Dispose ();
dbcmd = null;
dbcon.Close ();
dbcon = null;
}
}
En modifiant bien sûr, MYORACLEDB, MYLOGIN et MYPASS par vos valeurs.
On compile et on exécute pour tester :
# gmcs test.cs /r:System.Data.dll /r:System.Data.OracleClient.dll
# mono test.exe
Date: 17/11/2011
Agréger des documents Word en python
Voici 2 petits scripts pour facilement agréger des documents Word d’un répertoire (ne fonctionne que sous windows…)
Pour ce faire, il faut d’abord avoir la liste des documents et les ordonner.
Pour éviter d’avoir à faire une interface graphique on va générer une liste en texte que l’on modifiera avant de lancer le traitement.
Script 1 (nommé _make_list.py par exemple ) :
import os
path = os.getcwd()
l = os.listdir(path)
f = open("%s/_todo.txt" % path, 'w')
print "Create _todo.txt"
for i in l:
if i.find(".docx") > 0:
print "\t%s" % i
f.write("%s\n" % i)
f.close()
Il génère le fichier _todo.txt connenant la liste des fichiers docx. Vous pouvez le modifier et l’ordonner comme vous le souhaitez.
Script 2 (nommé _agreg.py) :
import win32com.client
import os
path = os.getcwd()
l = os.listdir(path)
f = open("%s/_todo.txt" % path, 'r')
t = f.readlines()
f.close()
word = win32com.client.Dispatch("Word.Application") # Create new Word Object
doc = word.Documents.Add()
word.Visible = True
doc.Range(0,0).Select()
sel = word.Selection
for i in t:
file = path + "\\" + i.replace('\n', '')
print "Open file :", file
sel.InsertFile(file)
sel.Collapse(0)
sel.InsertBreak()
sel.Collapse(0)
Si vous avez Python installé mais aussi pywin32 (disponible sur http://sourceforge.net/projects/pywin32/files/pywin32/)
Vous verrez Word s’ouvrir et ajouter les documents un à un.
Automatiser un dump OpenERP distant en HTTP
On peut effectuer une sauvegarde depuis l’interface web, on peut donc automatiser cette fonction avec CURL.
On obtient la commande ci-dessous :
curl -s "http://ADRESSE_DU_SERVEUR/openerp/database/do_backup" -d "dbname=NOM_DE_LA_BASE&password=SUPERADMIN" -e "http://ADRESSE_DU_SERVEUR/openerp/database/backup" -o openerp.dump
Avec comme paramètre à changer selon votre configuration :
- ADRESSE_DU_SERVEUR
- NOM_DE_LA_BASE
- mot de passe SUPERADMIN
Forward de port avec Xinetd
Il est souvent utile de forwarder un port d’un serveur à un autre comme pour une migration de service et que les caches DNS ne sont pas maîtrisable.
La configuration est très simple, il suffit de créer un fichier contenant le port à binder et le service de destination comme ci-dessous :
service [nom_du_service]
{
type = UNLISTED
flags = REUSE
socket_type = stream
wait = no
user = root
redirect = [ADDRESSE_IP] [PORT]
port = [PORT]
}
Il reste plus qu’à recharger la configuration : /etc/init.d/xinetd restart
Installation Oracle VM 3.0.1 en PXE
Les fichiers de boot pour une installation en PXE ont changé de place.
Il faut désormais les chercher dans le répertoire isolinux et non images/pxeboot.
Récupérer pour votre répertoire (/tftpboot/oravm301) par exemple les fichiers suivant :
initrd.img
mboot.c32
vmlinuz
xen.gz
Votre menu pxelinux.cfg/default devrait ressembler à :
LABEL oravm301
menu label ^Oracle VM Installeur 3.0.1 sans KS
kernel oravm301/mboot.c32
append oravm301/xen.gz --- oravm301/vmlinuz --- oravm301/initrd.img
Sécuriser en SSL un protocole qui ne le gère pas ? Stunnel est la solution
Comment gagner du temps à rajouter la sécurisation SSL/TLS d’un protocole sans avoir à modifier le code source ?
La solution est stunnel
Pour une debian, il suffit d’installer stunnel, puis d’éditer le fichier /etc/default/stunnel4
Puis de mettre le flag ENABLED=1
Il faut créer un certificat SSL (par ex) :
openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem
Puis on commente et on rajoute le protocole qu’on veut protéger du fichier /etc/stunnel/stunnel.conf (exemple) :
;[https]
;accept = 443
;connect = 80
;TIMEOUTclose = 0
[mosquitto]
accept = 8883
connect = 1883
On lance stunnel :
/etc/init.d/stunnel4 start
Et c’est fait.
Lister les interfaces réseaux en SNMP
Souvent on veut paramétrer mrtg et on se demande quel index utiliser pour les interfaces.
Cette commande permet d’obtenir la liste pour ensuite configurer son mrtg.cfg :
snmpwalk -v2c -c public IP_SNMP 4 .1.3.6.1.2.1.2.2.1.2
avec IP_SNMP l’adresse IP de votre équipement (routeur, ordinateur, etc…)