Remplacer DropBox par une alternative libre: Owncloud

owcloud Owncloud

    VS 

J'utilise beaucoup le service de Canonical nommé DropBox.

Selon Wikipedia:

Ce service d’informatique en nuage est accessible via n'importe quel navigateur Web, mais aussi en utilisant un client multi-système d'exploitation : sous Linux pour x86 et x86_64, Macintosh, MS Windows, iOS ainsi que sur Android, sur BlackBerry et sur webOS. Ce client permet d'utiliser Dropbox de manière transparente, les fichiers localisés sur le répertoire sauvegardé du disque dur de l'ordinateur étant copiés sur le serveur Dropbox après chaque enregistrement.

Par ailleurs, DropBox :

  • permet la synchronisation des fichiers stockés sur différents ordinateurs
  • fonctionne de manière transparente (les sauvegardes et synchronisations sont automatiques)
  • le site web permet d'accéder à une copie des fichiers, mais également à leurs versions successives et à une copie des fichiers détruits.

La version gratuite permet de stocker jusqu'à 2 Go de données, extensibles à 10 Go grâce au parrainage (2 Go + 8 Go à raison de 250 Mo par parrainage) ou même 16 Go, si l'on justifie le fait que l'on est étudiant grâce à une adresse en .edu (le parrainage double les 250 Mo pour le parrain, donc 500 Mo par parrainage), le filleul reçoit lui aussi 250 Mo, et des versions payantes permettent de stocker 50 ou 100 Go2.

Pour stocker les fichiers, Dropbox utilise le service d'hébergement S3 d'Amazon.


Je l'utilise principalement pour partager des fichiers en public notemment dans des forums de discussion ou plus simplement pour les images de mes articles.

Les raisons qui me poussent à changer:

  • Je ne maitrise pas ou sont stocker les données ( à priori sous S3 de Amazon) sur Dropbox
  • Je suis limité à 2Go en version gratuite
  • Je n'ai pas du tout besoin d'une synchro permanente entre local/cloud comme Dropbox
  • Dropbox necessite un client installé sur tous os
  • J'aime utiliser des protocoles standards ( webdav sous owcloud)
J'ai donc décidé de mettre en place la solution Owncloud sur une de mes macine virtuelles Web.

O
De plus la dernière version de owncloud comporte pas mal de nouveautés:
  • Possibilité de partage public ou privé.
  • Lecteur audio intégré.
  • Visualisation des images directement dans l’interface.
  • Calendrier.
  • Gestionnaire de contacts.
  • Gestionnaire de marque-pages.
 

Plateforme matérielle.

  • DomU Xen 3.2
  • 2 vcpus
  • 512 Mo Ram
  • 16 Go HDD


Plateforme logicielle.


  • Dom0 OpenSuse 11.3
  • DomU Ubuntu 10.04 LTS Paravirtualisé

Pour commencer j'ai installer les différents paquets requis à l'installation de Owncloud.

sudo aptitude install apache2 php5-curl php5-sqlite libapache2-mod-php5 git
git-core

On se place ensuite à la racine de votre vhosts: et on telecharge owncloud avec git;


cd /var/www/
git
clone git://gitorious.org/owncloud/owncloud.git
Cloning into owncloud...
remote: Counting objects: 14281, done.
remote: Compressing objects: 100% (5899/5899), done.
remote: Total 14281 (delta 9221), reused 12004 (delta 7695)
Receiving objects: 100% (14281/14281), 5.07 MiB | 155 KiB/s, done.
Resolving deltas: 100% (9221/9221), done.

Cela va crée le repertoire owncloud et vous pourrez l'installation en graphique directement sur http://votreserveur

Pour ma part j'ai fait un enregistrement DNS : cloud.info16.fr

http://cloud.info16.fr

Voilà a quoi ressemble l'interface web de owncloud:







Je m'interesse surtout à l'option Fichier qui est le plus important.

Par contre une chose me gène énormément:
Quand je poste des fichiers sur owncloud (en web ou webdav) et que je veux les partager en public
cela n'est pas pratique, car je dois allez sur l'interface web pour connaitre le lien publique...

de plus les lien publics sous owncloud ne sont pas facilement deductible puisqu'ils utilisent une suite de nombre aléatoires...
C'est mieux pour la sécurité mais moins pratique à l'usage:



Pour résoudre ce problème j'ai utilisé simplement un simple lien symbolique à la racine du site web qui pointe vers mon dossier public de owncloud:


mkdir /var/www/publicshare
chown -R www-run:www-run /var/www/publicshare
ln -s /var/www/owncloud/data/bartounet/files/public/ publicshare

# ls -a /var/www/publicshare
. 2011-10-21_104403.png 2011-10-21_104600.png owncloudcreatlectres.PNG owncloudweb1.png SC20111020-225238.jpeg speedof.png
.. 2011-10-21_104424.png 2011-10-21_104641.png owncloudlect.PNG owncloudweb2.png SC20111020-225254.jpeg webdavlinux1.png
1317833759650.jpg 2011-10-21_104448.png adamburo.jpeg owncloud-logo.png owncloudweb3.png SC20111020-225304.jpeg webdavlinux2.png
18eme-mois-036_595.jpg 2011-10-21_104511.png Dropboxlogo.png owncloudpubliclink.png owncloudwebdavfiles.PNG SC20111020-225328.jpeg

Notre lien publicshare contient bien mes fichiers publics.

Pour encore faciliter la chose je crée un enregistrement DNS: share.info16.fr

Et je crée un vhost sous apache qui va directement pointer sur le dossier public.

<VirtualHost 127.0.0.1:8080>
DocumentRoot /var/www/publicshare
ServerName share.info16.fr
CustomLog /var/log/apache2/access.log combined
ErrorLog /var/log/apache2/error.log
</VirtualHost>
Ne pas oublier d'activer les options +Indexes et followsymlinks sur ce vhosts !!!

On obtient donc un share web très simple avec les noms des fichiers
beaucoup plus simple pour coller les liens publics sur le web:







Dejà à partir de là notre cloud est installé et on peut downloader, uploader, partager des fichiers directement depuis l'interface web.
C'est sympa mais mon but est de pouvoir le faire directement depuis mes diférents systèmes... ( Gnu/Linux, Windows XP/7, Android ...)

C'est la qu'intervient webdav.


Montage de son cloud avec Webdav sur les différents OS:



Sous Gnu/Linux Ubuntu:

Comme d'habitude, sous Linux, le montage de différents système de fichiers est un jeu d'enfant, il respecte très bien les standards.

apt-get install davfs2
mkdir /home/antony/shareinfo16
mount -t davfs http://cloud.info16.fr/files/webdav.php /home/antony/shareinfo16

Après avoir rentré vos identifiants voilà votre montage effectué :)  ( bien sur vous pouvez passer par le fstab pour monter ca en automatique)





A partir de là on peut comme en local copier et récupérer les fichiers que l'on veut.


Sous Windows XP:

Sous Windows XP c'est possible mais un peu plus embétant...
Créer un lecteur réseau










Sous Windows 7:

Sous Windows 7 il faut modifier une clé de registre lié à l'authentification webdav

La doc de owncloud est claire à ce sujet.
  1. in the Registry, change HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel from 1 to 2. Then restart Webclient service (Mouse right click -> Restart)
Après l'avantage sous Windows 7 c'est que le partage webdav est monté comme un lecteur réseau:








j'ai donc la solution pour les OS que j'utilise au quotidien.

Il manque MacOSX mais je l'utilise que très rarement, et le montage webdav est aussi en standard comme sous Gnu/Linux.
Cela ne devrait donc pas poser de problème.


Sous Android:

Pour aller plus loin j'ai voulu aussi tester sous Android.
Après plusieurs test le client owncloud android n'est pas mure, et je n'ai pas réussi à le faire fonctionner.

Le plus pratique que j'ai trouvé est: WebdavDroid Lite

il permet le download/upload addes simplement est même la synchro pour ceux que cela interesse.








Voilà pour ma part comment j'ai remplacé Dropbox par une alternative OpenSource, stocké sur mes propres serveurs.
Il reste pas mal de chose perfectibles, mais cela me satisfait
Reste à mettre en place le ssl.

Installation d'un NAS maison

nasmaison Ou comment remplacer un NAS Qnap par un NAS maison?

Etant un gros consommateur d'espace disque (backup, image système, musiques, vidéos, distribution Linux etc...) mais tout en étant soucieux d'économie d'énergie, je me suis rapidement tourné vers des solution NAS du marché.

N'ayant besoin que de disques, je m'étais tourné à l'époque, vers le Qnap TS219 Turbo


Texte remplaçant l'image

Je dois dire franchement qu'au niveau fonctionnalité et économie d'énergie il n'y à rien à redire, il est relativement silencieux, et possiède une pléthore de fonctionnalités.

Je l'ai gardé environ 6 mois, sur pas mal de point j'en était satisfait, mais j'ai dut me rendre à l'évidence,  il n'a rien dans le ventre...
En effet la config matérielle du Qnap est la suivante.

• Processeur : Marvell 1,2 GHz (monocore)
• Mémoire Flash : 16 Mo
• Mémoire vive : 512 Mo DDRII RAM
• Refroidissement : ventilateur
• Capacité maximale : 4 To (2 x 2 To)
• Connecteur réseau : Ethernet Gigabit
• 3 ports USB 2.0
• 2 ports eSATA
• Disques durs internes requis : 2 disques SATA II ou I, format 3,5" ou 2,5"
• Gestion du RAID 0, RAID 1 (jusqu'à 2x1 To) et JBOD

Je ne vais pas vous montrer les benchs, mais le cpu n'était pas à la hauteur...

Que se soit pour le transfert de fichiers (cifs, nfs) ou il plafonne maximum à 50Mo/s

Je suis un grand amateur de newsgroups, très bien le Qnap avait un module Sabnzbd intégré... mais quel enervement quand on doit attendre plus de 4h
qu'un fichier soit disponible... car les réparation par2 et l'extraction rar sont bridé par le CPU de la machine...
Ce n'est pas compliqué, le Qnap m'était plus de temps à faire les par2 qu'a téléchargé le fichier...

J'étais séduit par la taille, les fonctionnalités du Qnap, mais les performances m'ont obligé à franchir : me fabriquer un NAS maison:

Pour cela j'ai commancé par choisir mes composants:

Plateforme matérielle:
Je cherchais un bon compromis entre puissance, consommation, et surtout le prix !!!
Et là tous les benchs sont unanimes, le meilleur rapport perfmormance/prix est le CPU Intel Pentium G620

  • CPU Intel Pentium G620 ( dual Core Sandy Bridge 2.6Ghz)
  • Carte Mère : MSI H61I-E35 (Révision B3)
  • RAM: Crucial Ballistix Sport DDR3 2 x 4 Go PC12800
  • Alim: Be Quiet SFX Power - 300W
  • Boitier: Fractal Design Core 1000
  • HDD 2.5'' 80Go WD 5400tpm ( OS)
  • HDD: 3.5'' 2 x 1 To Western Dgital RE2 SATA2 ( déjà en ma possession) DATA
Ma recherche était simple, un config pas chere, relativement performante, économe en energie, discrète.
C'est pourquoi j'ai cherché des composants mini ITX
Même si je savais que je n'aurais la taille du Qnap, je voulais un boitier assez petit et pas cher, mais me permettant d'évoluer si je
souhaitais rajouter des disques.

L'avantage de cette config était aussi la vidéo intégréé ( même si a terme il est branché sans écran)

Prix de la config 250€ !!!
J'étais moi meme étonné de pouvoir faire une machine avec un aussi bon rapport qualité prix


Assemblage:

Une fois les pièces reçue rapidement comme d'habitude avec materiel.net, je me suis mis à assembler la bête.
Le boitier est en effet beaucoup plus gros que le Qnap mais reste soble et discret et surtout assez évolutif.
Voilà ce que donne l'assemblage:

De face à coté du qnap


Les entrailles:



Mes deux disques 3.5'' sont fixés sur le coté
Le Disque Système 2.5'' est fiixé a plat sur le bas du boitier avec des silent blocks.
J'ai ajouté aussi une équerre ESATA pour brancher des disques externes.

Par contre j'ai eut un petit soucis...
Le boitier etait en effet un mini ITX et mon alim aussi...
Mais l'emplacement alim du boitier était en fait standard....
L'alim était donc trop petite... et ne tenait que par une Vis...



Cela n'est pas esthétique et surtout pas terible pour la tenue de l'alim et la ventilation du boitier...

Je ne suis pourtant pas très bricoleur, mais qu'a cela ne tienne j'ai voulut limiter les dégats...
Me voilà parti a découper une plaque pour fixer l'alim...

Un petit gabari en papier, une plaque de tole, un Dremel et on tente...



Voilà au final ce que ça donne... bon c'est pas joli mais c'est solide :)



Voilà!! la partie hard est terminé.




Plateforme logicielle:


Cette partie à demandé pas mal de recherche, pas mal de choix s'offraient à moi,
Creer un NAS avec une distri Gnu/Linux classique et me fader les paramétrage à la main ( très modulaire mais pas très pratique)
Utiliser des distri NAS existantes, ( Freenas, OpenFiler ...)

Mes prérequis étaient simples:
  1. Les performances ( autant que puisse délivrer mes disques et le port gigabit)
  2. Les fonctionnalités de bases dont j'ai besoin (CIFS, NFS)
  3. Sabnzbd installable et fonctionnel !!!

Je me suis au départ orienté vers Freenas,  qui parait  le plus avancé sur les distri  NAS, mais j'ai vite déchanté pour plusieurs raisons:
  • Basé sur du FreeBSD ( lon de moi l'idée de dénigrer ce système, mais je n'avait pas l'envie de me replonger dans un système que je maitrise peu)
  • Mauvaises performances en partage fichiers ( je plafonnait à 50Mo/s en lecture ecriture sur des partages CIFS...) ( comme le Qnap) sans pour autant saturer la matos
  • Je n'ai pas réussi à installer Sabnzbd ( du fait probablement de ma méconnaissance de FreeBSD)
J'ai donc décidé de me tourner sur OpenFiler
  • Basée sur du bon vieux linux ( quoique sur une distri que je ne connais pas... à base de gestionnaire de paquet conary)
  • Performances Excellentes ( je sature le port giga en transfert Cifs et NFS) 112Mo/s
  • Sabnzbd installé et testé !!
Je suis donc parti sur uns installation de OpenFiler Version 2.99 X86

Installation classique d''un distri Gnu/Linux qui ressemble étrangement à du RedHat

Pas de soucis particulier j'ai opté pour créer un disque système de 16G et un swap de 2Go ( le tout sur le disque dédié de 2,5'')
J'aime utiliser des partitions  de faibles tailles cela me permet de faire une image de sauvegarde rapidement avec dd et lzop.

Une fois OpenFiler installé, on arrive sur l'interface Web assez simpliste:



Je me suis dit alors, c'est bon on va tout faire en interface Web...
Mais non... le moins qu''on puisse dire c'est que l'interface n'est pas totalement mure...

Pourtant ce que je voulais faire était simple un volume par disque et un partage par volume.
Pas de raid ou de jbod...

Pourtant, a chaque tentative, ce creer mon physical volume à partir du disque, il ne m'utilisait pas l'espace disque entierement...
Cela est surement dut au partition GPT qu'il crée de base...

J'ai donc fait donc fait ma config disque en ligne de commande.

En gros:
  • Creation des partitions et surtout changer l'id de la partition en 8e pour que openfiler la reconnaisse comme physical volume
  • Creation des physical volume : pvcreate /dev/sb1; pvcreate /dev/sdc1
  • Création des volume group : lvcreate -L931,5G -nvg0 /dev/sdb1; lvcreate -L931.5G -nvg1 /dev/sdc1
Grace à cela openfiler daigne enfin voir les physical volume avec toute la place d'allouée...

On crée ensuite cette fois grace à l'interface web les Volume Logique ( si vous connaisser LVM2 il se base dessus)



J'ai choisi de creer 2 Logical volume /dev/vg0/lv0 et /dev/vg1/lv1
Tout deux formaté en XFS pour profiter de la defrag en ligne ultra rapide. et bien sur des performance de XFS

Une fois les LV créées j'ai créer mes shares (cifs et nfs) par l'interface Web:



J'ai donc à présent mes 2 shares NAS et NASLV1 accessibles aussi bien en cifs qu'en NFS

Ne pas oublier d'ailleurs d'activer les services correspondants:




Mes shares sont accessibles et performants, accessible en lecture et écriture à la vitesse des disques soit environ 110Mo/s
Cela change du Qnap qui saturait au moindre transfert...

Voici la mesure temps réèl du débit lors d'un transfert NFS entre le NAS maison et mon pc client sous Linux Mint



On voit un transfert à 100Mo/s , c'est pas mal ! ca change du qnap :)


Sabnzbd:


Cela à été assez fastidieux car ne connaissant pas du tout la distri j'ai un peu tatonné.
Mais au final l'install est opérationnelle

conary update glibc

conary update gcc

conary update gcc-c++

conary update glibc:runtime

conary update glibc:devellib

conary update glibc:devel

conary update glibc:locale

conary update glibc:lib

conary update python:devel

conary update zlib:devel

conary update ncurses:devel

conary update automake

conary update autoconf

conary update pkgconfig

conary update unzip

conary update openssl

conary update python

conary update zip

conary update rar

conary update unrar

conary update pyOpenSSL


wget http://downloads.sourceforge.net/projec ... 0.4.tar.gz
tar zxvf par*
cp par2 /sbin
cp lib* /sbin


wget http://downloads.sourceforge.net/projec ... 0.1.tar.gz
tar zxvf Che*
python setup.py build
python setup.py install

wget http://www.golug.it/pub/yenc/yenc-0.3.tar.gz
tar zxvf yenc*
python setup.py build
python setup.py install

Au final Sabnzbd est opérationnel :)



J'aussi fait un script pour lancer sabnzbd au démarrage de la machine.

Afin d'économiser de l'énergie, j'ai aussi fait une tache Cron qui éteint le système la nuit à 1h30
Et le bios se charge de le redemarrer le matin à 8h00.

J'ai donc au final mis en place un NAS maison qui me satisfait, j'obtient de très bonne performance autant en transfert qu'en verification de par2

Au niveau éconimie d'energie, en branchant la machine sur un wattmetre, j'obtient en idle une conso de 40W exactement la même chose que le Qnap.
Par contre en pleine charge le système monte aux alentours de 55w alors que le qnap était plutot  à 45W.
Cela dit les performances et l'évolutivité sont sans communes mesure.

Installation de NginX en reverse proxy

nginx Installation de NginX en reverse proxy




Plateforme matérielle:
Dedibox QC
  • Serveur Dell® PowerEdge R210
  • CPU: 1x Intel® Xeon® X3450 4x 2.66GH
  • RAM: 8 Go DDR3 ECC
  • HDD: 2 x 1 To SATA2 Raid 0 / Raid 1 HARD
  • LAN: 1 Gbit/sec
Juqu'a maintenant j'utilisait la fonction NAT de Xen pour tout mes domU

Plateforme logicielle:
  • Dom0 Opensuse 11.3 X86_64 Xen 4
Plateforme Virtuelle:

  • DomU Xen Ubuntu 10.04 X86_64 Paravirtualisé
  • 2 vcpus 
  • 512 Mo de Ram

Mon DomU Xen me servant pour mon serveur Web est depuis un moment composé seulement dun serveur apache qui distribuait mes différents sites ( blogs, galerie photos, perso etc..).
J'ai 10 virtualhosts qui ont très peu d'activité. Cela me suffit amplement pour l'affluence de mon site.

Dans un soucis de tester et pour améliorer un peu les performances, j'ai décidé de tester NginX.

L'idéal est bien sur de migrer tout le site sur Nginx mais ca demande pas mal de boulot.

J'ai donc décidé de tester NginX en reverse proxy.

C'est donc lui qui va distribuer les pages et faire le tampon/cache entre les clients et Apache.

Le cache est très interessant pour les pages statiques, ce qui m'arrange car j'ai migré mon blog recemment sur PluXml.

Installation de NginX:

#apt-get install nginx


Configuration de /etc/nginx/nginx.conf

user www-data;
worker_processes 2;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
server_names_hash_bucket_size 64;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_comp_level 5;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_types text/plain text/html text/css image/x-icon application/x-javascript;
gzip_vary on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Le paramétrage est simple 2 processus capable d'accepter 1024 connexions chacun
On peut affiner les réglages en fonction de sa conf
Moi je suis parti du principe de mettre autant de process que de Vcpus présents dans mon DomU


configuration de /etc/nginx/conf.d/proxy.conf

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k;


Configuration de /etc/nginx/sites-enabled/

server {

        listen   80;

        server_name  info16.fr;
        access_log /var/log/bloginfo16.access.log;
       error_log /var/log/bloginfo16.nginx_error.log debug;
        location / {           
proxy_pass http://127.0.0.1:8080/;
        }

        error_page  404 /404.html;

        # redirect server error
pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
    
root   /var/www/nginx-default;

        }

La config est assez claire, on lui dit que pour le domaine info16.fr pointer vers 127.0.0.1:8080/


Par conséquent le serveur apache ne doit plus écouter sur 80 mais bien sur le port 8080:

Penser à modifier le /etc/apache2/ports.conf avec

Listen 8080

Ainsi que vos Vhosts vous devez remplacer le port 80 par 8080.
pour ma part j'ai aussi remplacé mes 192.168.1.1 ( ip locale de mon domU Xen) par 127.0.0.1 dans tous les vhosts.

Redemarrer apache2 et NginX et tester:


Voici les résultats obtenus grâce au site Loadimpact.com ; un site qui permet de simuller des clients en parallèle sur le site.
La version gratuite peut monter à 50 clients simultanés; C'est peu mais ca donne une idée...

  • Apache seul:



  • NginX en reverse proxy en frontal d'Apache


Le résultat parle de lui même de 1 à 50 clients simultanés la config Apache de base le serveur renvoie la page entre 900ms et 1600ms

Avec NginX cela reste stable et la réponse est renvoyé en environ 475ms ( pres de 2 fois plus vite et 4 fois avec 50 clients)

sources: korben Nicolargo

Automatiser des commandes FTP par script.

ftputil Automatiser des commandes FTP par script.


La lecture ce matin de l'excellent blog de Nicolargo sur le montage de son espace FTP en local: http://blog.nicolargo.com/2011/08/mounter-son-espace-de-sauvegarde-ftp-en-local-sous-debian.html?utm_source=twitterfeed&utm_medium=twitter
 m'a donné l'idée de bloger ce post.

Je backup toutes les nuits mes différents DomU Xen de ma DediboxQC (une dizaine de VM), un des processus de ma backup est bien sur l'externalisation
J'externalise sur l'espace FTP Online de 200Go

Toutes les nuits je transfert environ: 40Go de données sur mon espace FTP.


La méthode de Nicolargo est séduisante, car elle permet de gérer son espace FTP comme un repertoire local et donc utiliser les commandes unix de base ( cp, mv etc...)

Pour ma part j'ai préféré scripter les commandes FTP avec de me faire une commande FTP "a tout faire"

Le script
 
voici mon script simple et très perfectible:

#!/bin/bash
#ftputil
###FTPUTIL##Antony Martineau 2010
################################
ftpserver="dedibackup-vit.online.net"
login="sd-25168"
password="*****"
###############################

for i in $*; do
if [ "$i" = "--put" ]; then
putparam=$(echo $* | gawk -F'--put' '{print $2}' | cut -d" " -f2)
param=$(echo $param | sed -r 's/(^| )--put( |$)/\1/g' | sed -r 's:(^| )'$scriptbefore'( |$):\1:g' | sed 's/[ \t]*$//')
echo -e "user $login $password\\nls\\nput $putparam\nquit" | ftp -n $ftpserver

elif [ "$i" = "--get" ]; then
getparam=$(echo $* | gawk -F'--get' '{print $2}' | cut -d" " -f2)
param=$(echo $param | sed -r 's/(^| )--get( |$)/\1/g' | sed 's/[ \t]*$//')
echo -e "user $login $password\\nls\\nget $getparam\nquit" | ftp -n $ftpserver
elif [ "$i" = "--ls" ]; then
lsparam=$(echo $* | gawk -F'--ls' '{print $2}' | cut -d" " -f2)
param=$(echo $param | sed -r 's/(^| )--ls( |$)/\1/g' | sed 's/[ \t]*$//')
echo -e "user $login $password\\nls\nquit" | ftp -n $ftpserver
elif [ "$i" = "--del" ]; then
delparam=$(echo $* | gawk -F'--del' '{print $2}' | cut -d" " -f2)
param=$(echo $param | sed -r 's/(^| )--del( |$)/\1/g' | sed 's/[ \t]*$//')
echo -e "user $login $password\\ndel $delparam\nquit" | ftp -n $ftpserver
fi
done


Comme on peut le voir le script est simple:
Il me permet simplement d'appeler la commande ftputil avec ses arguments

ftputil --ls pour lister
ftputil --put pour uploader
ftputil --get pour downloader
ftputil --del pour supprimer

Ainsi dans mes scripts de backups je n'ai plus qu'a appeler ma commande pour transferer mes fichiers..
ftputil --put la_backup_de_mon_domu.lzo


Pourquoi
 
Je connaissai déjà curlftpfs et ses avantages, mais j'ai préféré ma méthode car elle est plus performante à mon gout.

il suffit de faire un test de transfert pour s'en convaincre:

  • Avec curlftpfs
xen-dedi:/stock # mount | grep curlftpfs

curlftpfs#ftp://sd-25168:******@dedibackup-vit.online.net/ on /backup
type fuse (rw,nosuid,nodev)

Mon ftp est bien monté sur mon /backup je test un transfert d'un iso ubuntu sur le montage

xen-dedi:/stock # cp /stock/ubuntu-10.04.2-server-amd64.iso /backup/ubuntu-10.04.2-server-amd64.iso


Je monitore en même temps le débit réseau sur mon interface eth0

Real time statistics for eth0 (refreshed every 1 sec)



Link encap:Ethernet  HWaddr B8:AC:6F:97:A3:A2 

inet addr:88.190.14.87  Bcast:88.190.14.255 
Mask:255.255.255.0

inet6 addr: fe80::baac:6fff:fe97:a3a2/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:9806331 errors:0 dropped:0 overruns:0 frame:0

TX packets:53750134 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:1503239144 (1433.6MiB)  TX bytes:78790434959 (75140.4MiB)

Interrupt:16 Memory:da000000-da012800



RX packets per second:  18645.00pkt/s

RX average packet size: 70.14bytes/pkt

RX throughput:         
10.46Mb/s (1.24MiB/s)



TX packets per second:  35514.00pkt/s

TX average packet size: 1462.33bytes/pkt

TX throughput:         415.46Mb/s (49.52MiB/s)
  on obtient une moyenne de 49Mo/s ce qui est tout de même très acceptable.


  • Avec les commandes FTP basiques
/stock/ftputil --put ubuntu-10.04.2-server-amd64.iso


Je monitore en même temps le débit réseau sur mon interface eth0ce qui est tout de même très acceptable

Real time statistics for eth0 (refreshed every 1 sec)



Link encap:Ethernet  HWaddr B8:AC:6F:97:A3:A2 

inet addr:88.190.14.87  Bcast:88.190.14.255 
Mask:255.255.255.0

inet6 addr: fe80::baac:6fff:fe97:a3a2/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:10707550 errors:0 dropped:0 overruns:0 frame:0

TX packets:55902209 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:1566805384 (1494.2MiB)  TX bytes:82030865865 (78230.7MiB)

Interrupt:16 Memory:da000000-da012800



RX packets per second:  3459.00pkt/s

RX average packet size: 70.18bytes/pkt

RX throughput:         
1.94Mb/s (237.0KiB/s)



TX packets per second:  6928.00pkt/s

TX average packet size: 1509.71bytes/pkt

TX throughput:         83.67Mb/s (9.97MiB/s)

on obtient une moyenne de 84Mo/s.

Installation et configuration du Push Mail entre Zimbra OSE via Z-push

ZPUSH-articles Installation  et configuration du Push Mail entre Zimbra OSE via Z-push


Je travaille depuis un moment sur Zimbra.
J'ai remplacé il y à peu mon serveur d'entreprise Lotus Domino par Zimbra NE

Dans sa version NE, Zimbra possède un outil de synchro mobile intégré et très performant donc pas de problème.

Par contre j'utilise aussi la version Zimbra OSE pour mes potes et des associations. C'est pour cela qu'il était pour moi interessant de fournir à mes utilisateurs
une solution de Push-mail performante et gratuite.

C'est pour cela que je me suis penché sur Z-push
Z-Push est une solution Open-Source de Zarafa qui permet de faire du push mail depuis des terminaux mobiles.
Mais aussi la synchro des contacts et des calendriers !
 Z-Push utilise le protocole Microsoft ActiveSync qui est supporté sur un grand nombre de terminaux mobiles (Iphone, Android, Windows Mobile, Maemo, Symbian...)


J'ai effectué mon install sur un DomU Xen routed à base d'un template Ubuntu 10.04 64 bits paravirtualisé






Installation des prérequis:

Installation de apache2, php5 et php-curl openssl
Activation de ssl dans apache a2enmod ssl

Installation de Z-push

Téléchargement de Z-push téléchargé sur http://prdownload.berlios.de/z-push/z-push-1.5.1.tar.gz
Téléchargement du backend Zimbra sur http://sourceforge.net/projects/zimbrabackend/files/Release48/zimbra48.tgz/download

J'ai placé z-push à la racine de mon espace web /var/www

#tar xvfz z-push-1.5.1.tar.gz -C /var/www


J'ai extrait le backend Zimbra zimbra.php dans /var/www/z-push/backend/

#tar xvfz zimbra48.tgz -C /var/www/z-push/backend

Modifications des droits
#chown -R www-data:www-data /var/www/z-push
#chmod 755 /var/www/z-push/state
#chown www-data:www-data /var/www/z-push/state


configuration de Z-push et Apache:

Mon serveur est un DomU Xen dédié nommé push.info16.fr
Il sera accessible en http et https
Penser à activer l'écoute sur les 2 ports 80 et 443 dans /etc/apache/ports.conf

  •           Virtualhost en http ( non ssl): etc/apache2/sites-enabled/default
                 
<VirtualHost *:80>
ServerName push.info16.fr
DocumentRoot /var/www/z-push/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/z-push/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/ssl_access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
Alias /Microsoft-Server-ActiveSync /var/www/z-push/index.php
php_flag short_open_tag on
php_flag magic_quotes_runtime off
php_flag register_globals off
php_flag magic_quotes_gpc off
</VirtualHost>





  •           Virtualhost en https ( ssl) : /etc/apache2/sites-enabled/ssl

<VirtualHost *:443>
ServerName push.info16.fr
DocumentRoot /var/www/z-push/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/z-push/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/ssl_access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
Alias /Microsoft-Server-ActiveSync /var/www/z-push/index.php
php_flag short_open_tag on
php_flag magic_quotes_runtime off
php_flag register_globals off
php_flag magic_quotes_gpc off

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl/push.crt
SSLCertificateKeyFile /etc/apache2/ssl/push.key
SSLProxyCACertificateFile /etc/apache2/ssl/push.crt

<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

</VirtualHost>

Creation des certificats 2048 bits
#cd /etc/apache2/ssl

#openssl genrsa -out push.key 2048
#openssl req -new -key push.key -out push.csr
#openssl x509 -req -days 365 -in push.csr -signkey push.key -out push.crt



Pensez bien sur à activer les vhosts:
#a2ensite default; a2ensite ssl

Modification de /var/www/z-push/config.php
<?php
/***********************************************
* File : config.php
* Project : Z-Push
* Descr : Main configuration file
*
* Created : 01.10.2007
*
* Copyright 2007 - 2010 Zarafa Deutschland GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation with the following additional
* term according to sec. 7:
*
* According to sec. 7 of the GNU Affero General Public License, version 3,
* the terms of the AGPL are supplemented with the following terms:
*
* "Zarafa" is a registered trademark of Zarafa B.V.
* "Z-Push" is a registered trademark of Zarafa Deutschland GmbH
* The licensing of the Program under the AGPL does not imply a trademark license.
* Therefore any rights, title and interest in our trademarks remain entirely with us.
*
* However, if you propagate an unmodified version of the Program you are
* allowed to use the term "Z-Push" to indicate that you distribute the Program.
* Furthermore you may use our trademarks where it is necessary to indicate
* the intended purpose of a product or service provided you use it in accordance
* with honest practices in industrial or commercial matters.
* If you want to propagate modified versions of the Program under the name "Z-Push",
* you may only do so if you have a written permission by Zarafa Deutschland GmbH
* (to acquire a permission please contact Zarafa at trademark@zarafa.com).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Consult LICENSE file for details
************************************************/
// Defines the default time zone
if (function_exists("date_default_timezone_set")){
date_default_timezone_set("Europe/Paris");
}

// Defines the base path on the server, terminated by a slash
define('BASE_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . "/");

// Define the include paths
ini_set('include_path',
BASE_PATH. "include/" . PATH_SEPARATOR .
BASE_PATH. PATH_SEPARATOR .
ini_get('include_path') . PATH_SEPARATOR .
"/usr/share/php/" . PATH_SEPARATOR .
"/usr/share/php5/" . PATH_SEPARATOR .
"/usr/share/pear/");

define('STATE_DIR', BASE_PATH.'/state');

// Try to set unlimited timeout
define('SCRIPT_TIMEOUT', 0);

//Max size of attachments to display inline. Default is 1MB
define('MAX_EMBEDDED_SIZE', 1048576);

// Device Provisioning
define('PROVISIONING', false);

// This option allows the 'loose enforcement' of the provisioning policies for older
// devices which don't support provisioning (like WM 5 and HTC Android Mail) - dw2412 contribution
// false (default) - Enforce provisioning for all devices
// true - allow older devices, but enforce policies on devices which support it
define('LOOSE_PROVISIONING', false);

// Default conflict preference
// Some devices allow to set if the server or PIM (mobile)
// should win in case of a synchronization conflict
// SYNC_CONFLICT_OVERWRITE_SERVER - Server is overwritten, PIM wins
// SYNC_CONFLICT_OVERWRITE_PIM - PIM is overwritten, Server wins (default)
define('SYNC_CONFLICT_DEFAULT', SYNC_CONFLICT_OVERWRITE_PIM);

// The data providers that we are using (see configuration below)
$BACKEND_PROVIDER = "BackendZimbra";

// ************************
// BackendICS settings
// ************************

// Defines the server to which we want to connect
define('MAPI_SERVER', 'file:///var/run/zarafa');

define('ZIMBRA_URL','https://webmail.info16.fr');
define('ZIMBRA_USER_DIR','zimbra');
define('ZIMBRA_SYNC_CONTACT_PICTURES', true);
define('ZIMBRA_VIRTUAL_CONTACTS',true);
define('ZIMBRA_VIRTUAL_APPOINTMENTS',true);
define('ZIMBRA_VIRTUAL_TASKS',true);
define('ZIMBRA_IGNORE_EMAILED_CONTACTS',true);
define('ZIMBRA_HTML',false);
define('IMAP_DEFAULTFROM', '');
define('IMAP_SENTFOLDER', '');



// ************************
// BackendIMAP settings
// ************************

// Defines the server to which we want to connect
// recommended to use local servers only
define('IMAP_SERVER', 'localhost');
// connecting to default port (143)
define('IMAP_PORT', 143);
// best cross-platform compatibility (see http://php.net/imap_open for options)
define('IMAP_OPTIONS', '/notls/norsh');
// overwrite the "from" header if it isn't set when sending emails
// options: 'username' - the username will be set (usefull if your login is equal to your emailaddress)
// 'domain' - the value of the "domain" field is used
// '@mydomain.com' - the username is used and the given string will be appended
define('IMAP_DEFAULTFROM', '');
// copy outgoing mail to this folder. If not set z-push will try the default folders
define('IMAP_SENTFOLDER', '');
// forward messages inline (default off - as attachment)
define('IMAP_INLINE_FORWARD', false);
// use imap_mail() to send emails (default) - off uses mail()
define('IMAP_USE_IMAPMAIL', true);


// ************************
// BackendMaildir settings
// ************************
define('MAILDIR_BASE', '/tmp');
define('MAILDIR_SUBDIR', 'Maildir');

// **********************
// BackendVCDir settings
// **********************
define('VCARDDIR_DIR', '/home/%u/.kde/share/apps/kabc/stdvcf');

// Alternative backend to perform SEARCH requests (GAL search)
// if an empty value is used, the default search functionality of the main backend is used
// use 'SearchLDAP' to search in a LDAP directory (see backend/searchldap/config.php)
define('SEARCH_PROVIDER', '');

?>

Il ne reste plus qu'a paramétrer un mobile compatible activesync for Exchange à notre serveur Z-push.

  • username = adresse_mail
  • password= votre_mot_de_passe
  • domaine= adresse_mail
  • serveur= push.info16.fr


page 1 sur 9 suivante »