Aller au contenu | Aller au menu | Aller à la recherche

Tom@mplius blog

Synchro du calendrier et des contacts

Voici un billet sur la synchronisation du calendrier et des contacts entre les systèmes suivants:

  • RoundCube
  • Thunderbird
  • Nokia N900

A la base de la synchronisation se trouve les protocoles CalDAV pour le calendrier et CardDAV pour les contacts.
La première choses est d'avoir une instance pour stocker les informations. Il existe plusieurs solutions. Les 2 que j'ai installer sont :

La liste des solutions se trouve ici

DAVical a l'avantage d'être dédié à cette fonction. mais il y le désavantage de fonctionner sur une base postgres. OwnCloud a l'avantage de tourner sur Mysql comme la plupart des applications PHP. Mais celui gére aussi les liens, la musique etc...
Personnellement j'ai opté pour DAVical. Mais je pense que Owncloud a l'avantage de géré plein de service (que j'ai autrement personnellement) et d'être bien plus simple à l'installation.

La synchronisation avec Roundcube se fait avec les plugins:

La synchronisation avec Mozilla Thunderbird se fait avec les plugins:

La synchronisation sur le Nokia N900 se fait avec l'application syncevolution. La version actuellement dans le repository testing est nécessaire. Mais, cela fonctionne super bien.

Avec cette solution, plus de problème pour gérer sont agenda et son carnet d'adresse. :-)

Xubuntu

Mon ubuntu sur mon T91MT est mort. Suite à une mise à jour, grub affichait le message "License invalide". J'ai pas cherché à réparer cette fois. L'OS installé suite à mon fameux rm * -fr à la racine en novembre 2010 était à mettre à niveau. Hors, j'accroche vraiment pas avec unity. gnome shell est tout aussi gourmand. Alors je me suis lancé dans Xubuntu. Car j'ai beau avoir cherché une distribution avec Enlightenment... bien, je n'ai rien trouvé de stable. Alors, je me lance sur l'interface XFCE.
L'installation sur le T91MT se passe sans encombre. Lors du premier boot, écran noir. un petit ctrl + alt + F1 pour obtenir une console. On se connect puis on tappe "sudo restart lightdm". L'interface Xfce apparé. On édite le fichier /etc/default/grub la variable GRUB_CMDLINE_LINUX_DEFAULT

GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty1 acpi_backlight=vendor acpi_osi=Linux"

un petit reboot. Et Hop tout fonctionne nickel. Les applications de base sont :

  • Firefox
  • Pidgin
  • Thunderbird

Tout ce qu'il me faut...

Source : wiki ubuntu

Gestionnaire de plugin pour RoundCube

La majeur partie des plugins pour roundcube son maintenue par le projet myroundcube. Mais le mainteneur du projet faute de temps cherche des volontaires pour prendre en charge et maintenir les plugins. Chaque nouveau mainteneur reprend le code et le géré dans son propre système de versionning.

Pour l'utilisateur, la gestion de la mise a jour des plugins devient complexe. Il faut vérifier la version de chaque plugin et vérifier la version sur le site du mainteneur. Et pour chaque plugin's a mettre a jour, il faut faire l’installation. Pour simplifier ce processus, et ne pas créer cette contrainte pour les utilisateurs, Le responsable du projet myroundcube a créé le plugin "plugin manager".

Ce plugin offre d'une part une interface pour activer ou désactiver les plugins sans avoir à passer par le fichier de configuration de Roundcube. Et d'une autre part une interface de mise à jour qui vérifie les version des plugins avec chaque dépôt pour généré un package avec l'ensemble des plugin que l'on veux mettre à jour.

Pour le moment il y a quelques bugs... Mais on peut imaginer dans un futur proche un déploiement automatique des plugins.

lsof et la récupération de fichier

Bientôt 2 mois sans un seul billet. Mais je vais avoir bientôt plus de temps.

Hier, je regardé une vidéo avec le player flash de firefox. Habituellement pour récupérer la video, j'allais dans le /tmp/. Mais la suite à une mise à jour ou je ne sais pas trop pourquoi, le fichier n'est plus dans /tmp/.

Pourtant, lors de la lecture, mon disque perdait bien de la place. La vidéo était donc bien stockée sur mon disque.

Après avoir découvert la commande "lsof". Cette commande montre la liste des descripteur de fichier ouvert.
J'ai donc découvert que le fichier était bien dans /tmp/ mais au status "deleted".

Voici un exemple de retour de la commande lsof

tomamplius     2120       tomamplius    4u      REG        9,2        2048    1204286 /tmp/XXXXX (deleted)

Dans ce cas, on peux récupère le fichier avec la commande suivante :

cp /proc/2120/fd/4 /tmp/video.flv


2120 étant le premier chiffre de la ligne et 4 le second.

Utile pour récupérer les vidéo sur Youtube? :-)

Unix Garden

J'ai pendant mon apprentissage de Linux et des systèmes Open Source acheté les magazines tel que Gnu/Linux Magazine et Linux Pratique. Après avoir mis du temps a m'en séparer, car les articles sont devenus obsolète ou complètement intégrés à mes connaissances, je suis quand même content que certains articles se retrouvent centralisés sur un site.

Sur ce site, vous trouverez des articles de Gnu/Linux Magazine, Linux Pratique, Linux Essentiel, MISC et Open Silicium.

pflogsumm : Analyseur de log pour postfix

Quand on a un SMTP, on a peur d'être piraté et de générer un envoi de spam massif. Pour vérifier cela, j'ai trouvé une petit application pour analyser les logs de postfix

/usr/sbin/pflogsumm /var/log/mail.log

J'ai ajouté cette commande dans mon crontab et je reçois directement dans ma boite mail le résultat de la commande.
Il est préférable de placer cette commande juste avant la rotation des log une fois par semaine.
Voici le début du résultat de la commande. Je ne peux pas anonymiser tout le contenu...

Grand Totals
------------
messages

   3065   received
   3084   delivered
      0   forwarded
      1   deferred  (1  deferrals)
      0   bounced
     50   rejected (1%)
      0   reject warnings
      0   held
      0   discarded (0%)

  78150k  bytes received
  82619k  bytes delivered
    677   senders
    364   sending hosts/domains
     41   recipients
     15   recipient hosts/domains


Per-Day Traffic Summary
-----------------------
    date          received  delivered   deferred    bounced     rejected
    --------------------------------------------------------------------
    Jan  1 2012       263        266          0          0          4 
    Jan  2 2012       507        513          0          0          3 
    Jan  3 2012       519        522          0          0          3 
    Jan  4 2012       508        510          0          0          3 
    Jan  5 2012       507        509          1          0         22 
    Jan  6 2012       490        492          0          0         14 
    Jan  7 2012       271        272          0          0          1 

Per-Hour Traffic Daily Average
------------------------------
    time          received  delivered   deferred    bounced     rejected
    --------------------------------------------------------------------
    0000-0100           9          9          0          0          0 
    0100-0200           7          7          0          0          0 
    0200-0300           5          5          0          0          0 
    0300-0400           3          3          0          0          1 
    0400-0500           3          3          0          0          0 
    0500-0600           6          7          0          0          1 
    0600-0700          18         19          0          0          1 
    0700-0800          18         18          0          0          1 
    0800-0900          25         25          0          0          0 
    0900-1000          29         29          0          0          0 
    1000-1100          34         34          0          0          0 
    1100-1200          27         27          0          0          0 
    1200-1300          32         32          0          0          0 
    1300-1400          25         25          0          0          0 
    1400-1500          24         24          0          0          0 
    1500-1600          22         22          0          0          0 
    1600-1700          26         25          0          0          0 
    1700-1800          24         24          0          0          0 
    1800-1900          26         27          0          0          0 
    1900-2000          22         22          0          0          0 
    2000-2100          18         18          0          0          0 
    2100-2200          14         14          0          0          1 
    2200-2300          14         14          0          0          0 
    2300-2400           8          8          0          0          1 

Host/Domain Summary: Message Delivery 
--------------------------------------
 sent cnt  bytes   defers   avg dly max dly host/domain
 -------- -------  -------  ------- ------- -----------
   2304    70284k       0     0.6 s   51.0 s  XXXXXXXX.fr
    345     3662k       0     2.5 s   11.0 s  XXXXXXXX.com
    139   229136        0     1.0 s    8.6 s  XXXXXXXX.fr
     88   149356        1     6.3 s    7.8 m  XXXXXXXX.fr
     71   116415        0     2.0 s   16.0 s  XXXXXXXX.com
     58     5260k       0     2.5 s   11.0 s  XXXXXXXX.fr
     40    66685        0     1.7 s    4.3 s  XXXXXXXX.fr
     18     2829k       0     1.2 s    4.2 s  XXXXXXXX
      8    13104        0     0.9 s    1.7 s  XXXXXX.net
      3     5172        0     5.4 s    5.4 s  XXXXXX.fr
      3     4939        0     0.7 s    0.9 s  XXXXXX.fr
      2     3560        0     5.1 s    9.6 s  XXXXXX.fr
      2     3471        0     3.2 s    3.7 s  XXXXXX.net
      2     2529        0     0.6 s    0.7 s  XXXXXX.fr
      1     1645        0     5.0 s    5.0 s  XXXXXX.com

<MonSite>.* sur apache

J'utilise plusieurs nom de domaine qui pointent vers mon serveur. Et depuis bien longtemps je cherche à pouvoir avoir accès à certain site quelque soit le nom de domaine.
Je veux dire par là que blog.domaineA.ltd, Blog.domaineB.ltd et Blog.domaineC.ltd pointent vers le même site.

Ma première solution a été de mettre pour N domaine N configuration de virtualhost

<VirtualHost *:80>
        DocumentRoot ...
        ServerName blog.domaineA.ltd
        ....
</VirtualHost>
<VirtualHost *:80>
        DocumentRoot ...
        ServerName blog.domaineB.ltd
        ....
</VirtualHost>
<VirtualHost *:80>
        DocumentRoot ...
        ServerName blog.domaineC.ltd
        ....
</VirtualHost>

Puis j'ai découvert ServerAlias, ce qui donne une nouvelle configuration plus simple :

<VirtualHost *:80>
        DocumentRoot ...
        ServerName blog.domaineA.ltd
        ServerAlias blog.domaineB.ltd
        ServerAlias blog.domaineC.ltd
        ....
</VirtualHost>

Mais faire cela pour chaque virtualhost pour chaque domaine demande beaucoup de maintenance à chaque modification. Mais j'ai finalement découvert que l'on pouvait utiliser les jokers. Cela donne une configuration multi-domaine sans trop de maintenance :)

<VirtualHost *:80>
        DocumentRoot ...
        ServerName blog.domaineA.ltd
        ServerAlias blog.*
        ....
</VirtualHost>

Bug du SMS de la St Sylvestre

Pour ce qui ce souvienne des problèmes rencontrés lors du premier de l'an de l'an passé (2010 - 2011) , avec des sms et mms envoyer à répétition, voici la conclusion dans cette article.

A la découvert d'Android

Je viens d'avoir un téléphone professionnel sous Android. N'ayant plus de N900, c'était le moyen de tester cet OS avant de faire le choix de mon futur téléphone. Mon impression personnelle : "Pourquoi mon dieu Android et plus développé que MAEMO".
Oui, MAEMO était simple. La gestion des processus des applications identique à un PC. Pas d'application que tu fermes, mais tu ne sais pas si elle est fermé. Impossible de faire des copier/coller d'un navigateur vers un mail. Car quand tu change de fenêtre, tu es obligé de ré-ouvrir l'application. La console absente et inexistante sans bidouille. Mon téléphone à un clavier physique, mais pas de raccourci pour le copier coller. Je m’arrête là car ce n'est surement pas les besoin de tout le monde. Mais quand tu ne peux même pas faire un réseau en Bluetooth improvisé entre un PC et ton tel alors qu'il fallait 2 minutes avec mon N900... Donc conclusion pour mon rachat de téléphone, je ne sais plus quoi faire. Je ne veux pas de IOS, de WindowsPhone et d'android. Il existe un smartphone sous Meego (N9) sans clavier physique et un sous Maemo (N900) mais qui lui commence à se faire vieux. Et bien je penche pour le N900 pour le moment. Mais je n’entrouvre pas de neuf.

Envoi de mail en VBS via Outlook

L'objectif de ce script est principalement de pouvoir envoyer une pièce jointe avec la log d'un traitement en fin de traitement.
Sachant que ce script utilise outlook et non un serveur SMTP, il doit être executé sur un poste client. J'ai donc ajouter la possibilité de planifier la date et l'heure d'envoi.

[MailSpecification.txt]

TO:Thomas@tomamplius.net
CC:Thomas@tomamplius.net
BCC:Thomas@tomamplius.net
SUBJECT:test d'envoi de mail
DATE:21/12/2011 11:47
ATTACHEMENT:\\serveur1\partage\log\traitement.log
BODY:Bonjour,

Ceci est un test

Au revoir

tomamplius

Voici un exemple de commande pour générer un mail depuis le fichier de spécification :

cscript /nologo sendmail.vbs MailSpecification.txt


[sendmail.vbs]

' ************************************************************************
' ** script name : sendMail.vbs
' **
' ** Description : Send mail from file
' **
' ** parameter needed : 
' **			STRING:  File with mail information
' **
' ************************************************************************
' -------------------- SUIVI DES MODIFICATIONS ---------------------------
' -- 27/12/2011 THL create script
' ---------------------------------------------------------------------
option explicit
 
Const olMailItem = 0
 
' ************************************************************************
' Validate type of string
' ************************************************************************
Private sub DoNothing(a)
End sub
 
' ************************************************************************
' Validate type of string
' ************************************************************************
Private function ValideType(Chaine,TypeValue)
	on error resume next
 
	ValideType = true
	if Ucase(TypeValue) = "INT" then 
		Call DoNothing(cint(Chaine))
	elseif Ucase(TypeValue) = "DATE" then 
		Call DoNothing(cdate(Chaine))
	elseif Ucase(TypeValue) = "FILE" then 
		Call CreateObject("Scripting.FileSystemObject").fileexists(Chaine)	
	elseif Ucase(TypeValue) = "FOLDER" then 
		Call CreateObject("Scripting.FileSystemObject").folderexists(Chaine)
	else 
		ValideType = false
	End if
	if not err.number = 0 then 
		ValideType = false
		Call err.clear()
	End if
End function 
 
' ************************************************************************
'
' ************************************************************************
private function GetMailStruture()
	Dim tmp
	set GetMailStruture = createobject("scripting.dictionary")
 
	for each tmp in array( _
		"FROM","TO","CC","BCC","SUBJECT","ATTACHEMENT","BODY","DATE")
 
		call GetMailStruture.add(tmp,createobject("scripting.dictionary"))
	next
end function
 
' ************************************************************************
' Read file to get information
' ************************************************************************
private function GetMail(Path)
	Dim tmp, line
 
	set GetMail = GetMailStruture()
	with createobject("scripting.filesystemobject").opentextfile(Path) 
		line = .readline()
		while not .atendofstream
			for each tmp in array( _
					"FROM","TO","CC","BCC","SUBJECT","ATTACHEMENT","DATE")
 
					if left(line,len(tmp)+1) = tmp + ":" then 
						call GetMail.item(tmp).add( _
							GetMail.item(tmp).count,mid(line,len(tmp)+2))
					end if
			next
			if left(line,5) = "BODY:" then 
				call GetMail.item("BODY").add(0,mid(line,6))
				while not .atendofstream
					line = .readline()
					GetMail.item("BODY")(0) = _
						GetMail.item("BODY")(0) + chr(13) + chr(10) + line
				wend
			else
				line = .readline()
			end if
		wend
	end with
end function
 
' ************************************************************************
' Dictionary to list of email
' ************************************************************************
private function DictToString(dict)
	dim tmp
 
	for each tmp in dict
		DictToString = DictToString & ";" & dict(tmp)
	next
	DictToString = mid(DictToString,2)
end function 
 
' ************************************************************************
' create and send mail
' ************************************************************************
Public Sub sendMail(mailInfo)
	dim tmp 
 
	with createobject("Outlook.application").CreateItem(olMailItem)
		.To = DictToString(mailInfo("TO"))
		.CC = DictToString(mailInfo("CC"))
		.BCC = DictToString(mailInfo("BCC"))
		.Subject = DictToString(mailInfo("SUBJECT"))
		for each tmp in mailInfo("ATTACHEMENT")
			.Attachments.Add(mailInfo("ATTACHEMENT")(tmp))
		next
		.Body = mailInfo("BODY")(0)
		Call .Display
		'Call .Send
	end with
End Sub
 
' ************************************************************************
' Control input data
' ************************************************************************
private sub ControlInfo(MailInfo)
	dim tmp, control
 
	'Valid parameter
	for each control in array( array("DATE","DATE"), array("ATTACHEMENT","FILE"))
		for each tmp in mailInfo(control(0))
			if not ValideType(mailInfo(control(0))(tmp),control(1)) then 
				call err.raise(-9999, _
					"An " + control(0) + " parameter is not a valid : " + _
					mailInfo(control(0))(tmp) )
			end if
		next
	next 
	'Unique parameter
	for each tmp in array( "SUBJECT", "DATE")
		if mailInfo(tmp).count > 1 then 
			call err.raise(-9999,"One " + tmp + " parameter is allow")
		end if 
	next 
	'Mandatory parameter
	for each tmp in array( "SUBJECT", "TO")
		if mailInfo(tmp).count = 0 then 
			call err.raise(-9999,"One "+tmp+" parameter is mandatory")
		end if 
	next 
End sub
 
' ************************************************************************
' Control input data
' ************************************************************************
private sub WaitToSend(dictDate)
	dim Sendtime, tmp
 
	Sendtime = now
	for each tmp in mailInfo("DATE")
			Sendtime = CDATE(DictToString(mailInfo("DATE")))
	next
	while Sendtime > now
		wscript.sleep(1000)
	wend 
End sub
 
' ************************************************************************
' Main
' ************************************************************************
Dim MailInfo
If not wscript.arguments.count = 1 then
	Call wscript.echo("Invalide number of parameters")
elseif not ValideType(wscript.arguments(0),"FILE") then 
	Call wscript.echo("Parameter is File")
else
	set MailInfo = GetMail(wscript.arguments(0))
	Call ControlInfo(MailInfo)
	Call WaitToSend(MailInfo("DATE"))
	Call sendMail(MailInfo)
	Call wscript.quit(0)
End if
Call wscript.quit(1)

- page 1 de 17