Bonjour,
J'ai cru comprendre que Unison n'est plus maintenu. Du coup je ne sais pas quoi utiliser pour synchroniser mes deux ordinateurs.
J'ai essayé rsync mais ça ne compare pas avant de synchroniser, or moi je veux que le fichier le plus récent écrase le plus ancien et que la comparaison des fichiers se fasse automatiquement (comme le faisait Unison).
Merci pour toute réponse.
Nanou
Oui, j'ai regardé mais j'ai vite été découragée par ce qui ressemble à une usine à gaz...
Unison était tellement pratique !
Mais si je n'ai pas le choix j'utiliserai rsync.
Tu peux utiliser grsync
Je n'utilise que ca depuis des années. Il faut juste bien lire le man pour les options comme il est indiqué plus haut.
Avec rsync j'arrive à synchroniser des ordinateurs distants mais pas avec grsync.
Mais de toutes façons, même avec grsync je ne retrouve pas les fonctionnalités de comparaison qu'il y avait sur Unison.
je ne retrouve pas les fonctionnalités de comparaison qu'il y avait sur Unison.
Note que si tu précisais lesquelles, peut-être on pourrait aider.
[center]Bonjour,[/center]

j'avais programmé il y a des années (!) 2 scripts pour :
1. synchroniser une source distante avec une cible locale
2. synchroniser une source locale avec une cible distance
tous deux basés sur le très puissant rsync

les algos de chiffrement sont à adapter, les voici pour info

je précise en passant que je ne suis pas un pro de la programmation shell, mais ces deux scripts pourront probablement vous rendre service

synchronistation d'une source distante avec une cible locale
#!/usr/bin/env bash

# -------------------
# objet :  synchronisation réseau d'une source distante avec une cible locale
# -------------------

# ---------
# procédure générique de synchronisation d'une source distante avec une cible locale
# ---------
# $1  : rsync_user
# $2  : options_rsync
# $3  : ssh_user
# $4  : options_ssh
# $5  : ssh_cypher
# $6  : remote_host
# $7  : ssh_remote_port
# $8  : chemin_source_distant
# $9  : chemin_cible_local
# ---------
# $10 : timeout
# ---------
synchronisation_source_distante_avec_cible_locale_generique()
{
    if [[ ${UID} -eq 0 ]] ; then
	if [[ ${#} -ge 9 && ${#} -le 10 ]] ; then
	    # -------------------
	    # paramètres obligatoires
	    # ----------------------
	    declare -r local rsync_user="${1}"
	    declare -r local options_rsync="${2}"
	    declare -r local ssh_user="${3}"
	    declare -r local options_ssh="${4}"
	    declare -r local ssh_cipher="${5}"
	    declare -r local remote_host="${6}"
	    declare -ir local ssh_remote_port="${7}"
	    declare -r local chemin_source_distant="${8}"
	    declare -r local chemin_cible_local="${9}"
	    # -------------------
	    # paramètres par défaut
	    # -------------------
	    declare -i local timeout=15
	    # -------------------
	    # paramètres optionnels
	    # -------------------
	    if [[ ${#} -ge 10 ]] ; then
		timeout="${10}"
	    fi
	    # ----------------------
	    # routine principale
	    # ----------------------
	    nice -n 19 rsync ${options_rsync} --timeout=${timeout} --rsh="ssh ${options_ssh} ${ssh_cipher} -l ${ssh_user} -p ${ssh_remote_port}" "${rsync_user}@${remote_host}:${chemin_source_distant}" "${chemin_cible_local}" --exclude="- lost+found/" || { echo "synchronisation réseau impossible" >&2 ; return 1 ; }
	else
	    echo "nombre de paramètres (${#}) incorrect" >&2
	    return 1
	fi
    else
	echo -e '\n\t< il faut être root pour faire une synchronisation réseau de données via ssh >' >&2
	return 1
    fi	
}

# ---------
# procédure simplifiée de synchronisation d'une source distante avec une cible locale
# ---------
# $1 : chemin_source_distant
# $2 : chemin_cible_local
# $3 : remote_host
# ---------
# $4 : remote_port
# $5 : timeout
# ---------
synchronisation_source_distante_avec_cible_locale()
{
    if [[ ${#} -ge 3 && ${#} -le 5 ]] ; then
	# -------------------
	# paramètres standard
	# -------------------
	declare -r local rsync_user='root'
	declare -r local options_rsync='-Raz --acls --xattrs --numeric-ids --delete --stats --partial --progress --partial-dir=~/.rsync-partial'
	declare -r local ssh_user='root'
	declare -r local options_ssh='-CTx'
	declare -r local ssh_cipher='-c chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr -m hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512'
	# ----------------------
	# paramètres obligatoires
	# ----------------------
	declare -r local chemin_source_distant="${1}"
	declare -r local chemin_cible_local="${2}"
	declare -r local remote_host="${3}"
	# ---------------------
	# paramètres par défaut
	# ---------------------
	declare -i local ssh_remote_port=22
	declare -i local timeout=15
	# ---------------------
	# paramètres optionnels
	# ---------------------
	if [[ ${#} -ge 4 ]] ; then
	    ssh_remote_port="${4}"
	fi
	if [[ ${#} -ge 5 ]] ; then
	    timeout="${5}"
	fi
	# ------------------
	# routine principale
	# ------------------
	synchronisation_source_distante_avec_cible_locale_generique "${rsync_user}" "${options_rsync}" "${ssh_user}" "${options_ssh}" "${ssh_cipher}" "${remote_host}" "${ssh_remote_port}" "${chemin_source_distant}" "${chemin_cible_local}" "${timeout}"
    else
	echo "nombre de paramètres (${#}) incorrect" >&2
	return 1
    fi
}

# ---------
# routine principale
# ---------
synchronisation_source_distante_avec_cible_locale "${@}"
synchronistation d'une source locale avec une cible distante
#!/usr/bin/env bash

# -------------------
# objet :  synchronisation réseau d'une source locale avec une cible distante
# -------------------

# ---------
# procédure générique de synchronisation d'une source locale avec une cible distante
# ---------
# $1  : rsync_user
# $2  : options_rsync
# $3  : ssh_user
# $4  : options_ssh
# $5  : ssh_cypher
# $6  : remote_host
# $7  : ssh_remote_port
# $8  : chemin_source_local
# $9  : chemin_cible_distant
# ---------
# $10 : timeout
# ---------
synchronisation_source_locale_avec_cible_distante_generique()
{
    if [[ ${UID} -eq 0 ]] ; then
	if [[ ${#} -ge 9 && ${#} -le 10 ]] ; then
	    # -------------------
	    # paramètres obligatoires
	    # ----------------------
	    declare -r local rsync_user="${1}"
	    declare -r local options_rsync="${2}"
	    declare -r local ssh_user="${3}"
	    declare -r local options_ssh="${4}"
	    declare -r local ssh_cipher="${5}"
	    declare -r local remote_host="${6}"
	    declare -ir local ssh_remote_port="${7}"
	    declare -r local chemin_source_local="${8}"
	    declare -r local chemin_cible_distant="${9}"
	    # -------------------
	    # paramètres par défaut
	    # -------------------
	    declare -i local timeout=15
	    # -------------------
	    # paramètres optionnels
	    # -------------------
	    if [[ ${#} -ge 10 ]] ; then
		timeout="${10}"
	    fi
	    # ----------------------
	    # routine principale
	    # ----------------------
	    nice -n 19 rsync ${options_rsync} --timeout=${timeout} --rsh="ssh ${options_ssh} ${ssh_cipher} -l ${ssh_user} -p ${ssh_remote_port}" "${chemin_source_local}" "${rsync_user}@${remote_host}:${chemin_cible_distant}" --exclude="- lost+found/" || { echo "synchronisation réseau impossible" >&2 ; return 1 ; }
	else
	    echo "nombre de paramètres (${#}) incorrect" >&2
	    return 1
	fi
    else
	echo -e '\n\t< il faut être root pour faire une synchronisation réseau de données via ssh >' >&2
	return 1
    fi	
}

# ---------
# procédure simplifiée de synchronisation d'une source locale avec une cible distante
# ---------
# $1 : chemin_source_local
# $2 : chemin_cible_distant
# $3 : remote_host
# ---------
# $4 : remote_port
# $5 : timeout
# ---------
synchronisation_source_locale_avec_cible_distante()
{
    if [[ ${#} -ge 3 && ${#} -le 5 ]] ; then
	# -------------------
	# paramètres standard
	# -------------------
	declare -r local rsync_user='root'
	declare -r local options_rsync='-Raz --acls --xattrs --numeric-ids --delete --partial --partial-dir=~/.rsync-partial'
	declare -r local ssh_user='root'
	declare -r local options_ssh='-x -T -o Compression=no'
	declare -r local ssh_cipher='-c chacha20-poly1305@openssh.com'
	# ----------------------
	# paramètres obligatoires
	# ----------------------
	declare -r local chemin_source_local="${1}"
	declare -r local chemin_cible_distant="${2}"
	declare -r local remote_host="${3}"
	# ---------------------
	# paramètres par défaut
	# ---------------------
	declare -i local ssh_remote_port=22
	declare -i local timeout=15
	# ---------------------
	# paramètres optionnels
	# ---------------------
	if [[ ${#} -ge 4 ]] ; then
	    ssh_remote_port="${4}"
	fi
	if [[ ${#} -ge 5 ]] ; then
	    timeout="${5}"
	fi
	# ------------------
	# routine principale
	# ------------------
	synchronisation_source_locale_avec_cible_distante_generique "${rsync_user}" "${options_rsync}" "${ssh_user}" "${options_ssh}" "${ssh_cipher}" "${remote_host}" "${ssh_remote_port}" "${chemin_source_local}" "${chemin_cible_distant}" "${timeout}"
    else
	echo "nombre de paramètres (${#}) incorrect" >&2
	return 1
    fi
}

# ---------
# routine principale
# ---------
synchronisation_source_locale_avec_cible_distante "${@}"
pour chacune des deux machines, il faut créer une clef ssh pour l'utilisateur root sans mot de passe

les quelques lignes de description en en-tête de chaque script devrait vous suffire

bien sûr, à adapter à votre besoin (et à corriger le cas échéant)
pas mal mais l'obligation d'une synchro en root ne me plait pas trop ! En principe on interdit la connexion ssh à root
Merci à tous pour vos réponses.
Je n'ai pas réussi à faire marcher ni Unison ni Grsync.
Finalement je vais peut-être me résigner à utiliser rsync.
Et j'ai un autre problème plus embêtant que je vais mettre sur un autre post.

Nanou
Curieux:
Vérifies que les bin sont exécutables sinon un chmod +x le permet.
Un double clic sur :
~/Unison/unison-v2.52.1+ocaml-4.01.0+x86_64.linux/bin/unison-gtk2
???
nanou38 wrote: Je n'ai pas réussi à faire marcher ni Unison ni Grsync.
Il faut quand même s'appliquer pour ne pas réussir à faire fonctionner grsync, qui d'ailleurs n'est qu'une interface graphique de rsync.

Encore une fois, tan qu'in ne sait pas au juste quelles sont les commandes que tu entres, difficile de se faire une idée.
nouvo09 wrote:tan qu'in
Houlaaaa... Je prescrit un café. D'urgence.
😉
Nednet wrote:
nouvo09 wrote:tan qu'in
Houlaaaa... Je prescrit un café. D'urgence.
😉
Hé oui 37.2° le matin, ça a des conséquences
Voilà ce que j'ai comme message d'erreur quand je lance Grsync :
Permission denied, please try again.
Permission denied, please try again.
anne@192.168.1.20: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(228) [sender=3.2.4]
Code d'erreur retourné par rsync:255
Pourtant j'arrive à faire communiquer les deux ordinateurs avec ssh.
Non, je lance Grsync depuis le bureau en cliquant sur l'icône.
Normal donc qu'avec un simple utilisateur tu n'aies pas accès aux fichier pour lesquels il n'a pas les droits.
Mais si je lance rsync en mode utilisateur, ça marche alors que je n'ai pas plus de droits.
Et de toutes façons, je ne vois pas l'intérêt de Grsync si je ne peux pas le lancer en cliquant sur l'icône dans ma session.