Ha d’accord, je comprends mieux.

Si ça peut vous aider le Unix Synology (DSM) est basé sur une
BusyBox. C’est effectivement un Unix à minima mais il est quand
même utilisable et peut être complété avec des dépôts spécifiques
managés avec des dépôts, un peu comme APT. C’est OpenWrt un OS
embarqué également présent sur certains pare-feux…

Nous utilisons ici des NAS Synology pour sauvegarder nos serveurs,
d’autres pour sauvegarder les postes Windows avec leur logiciel
« Active Backup for Business » et fournir aux Mac sous Mac OS X
un service « Time Machine ». Mis à part la sauvegarde Windows
qui est spécifique, tous les autres systèmes de sauvegarde sont
basés sur RSync (RSnapShot pour les Linux et TimeMachine pour
Mac OS X).

Le principe pour avoir à peu près les mains libres avec les
Synology est la suivante :
        • Activer les accès SSH
        • Créer un vrai compte « root » et y placer cos clés SSH
        • Installer le support OPKG via Entware-NG
          (https://entware.net)
        • Installer les commandes Unix dont on a besoin avec OPKG
Vous avez une très bonne documentation pour savoir comment
installer Entware-NG sur l’URL 
https://github.com/Entware/Entware-ng/wiki/Install-on-Synology-NAS.
Vous aurez besoin de savoir quelle architecture processeur est
sur votre Synology, allez sur 
https://www.synology.com/en-global/knowledgebase/DSM/tutorial/Compatibility_Peripherals/What_kind_of_CPU_does_my_NAS_have
Il existe également une petite documentation en français. Elle
est moins complète mais utilise des mécanismes qui prennent moins
l’interface DSM de travers :
        
https://www.skyminds.net/nas-synology-installer-entware-ipkg-applications/

Cela n’interfère pas avec le système DSM en place. Tout est installé
sur l’un de vos volumes NAS, par défaut « /volume1/@entware-ng » qui
contiendra le script d’installation et un répertoire
« /volume1/@entware-ng/opt » qui contient toutes les commandes Unix
spécifiques. Le principe suivant est de remonter
« /volume1/@entware-ng/opt » sur « /opt » par un montage BIND. Le
tout est de s’assurer que ces montages sont bien faits même en cas
de mise-à-jour complète de DSM.

Personnellement, j’ai préféré créé une tâche lancée au boot et gérée
par l’interface Synology (« Panneau de configuration / Système /
Planificateur de tâches »). Vous Créez une « Tache déclenchée » avec
un « Script défini par l’utilisateur ». Cette tâche cron devra être
exécutée avec les droits de « root ». Pour les paramètres de tâche,
voici ce que j’ai mis dans la fenêtre « Script défini par
l’utilisateur ces 3 lignes :
  [ -d /mtd ] || mkdir /mtd
  [ -d /volume1/@MTD/local ] && mount -o bind /volume1/@MTD/local /mtd
  [ -x /mtd/sbin/AjoutsOPKG-MTD.sh ] && /mtd/sbin/AjoutsOPKG-MTD.sh || echo 
"[ERREUR] le script /mtd/sbin/AjoutsOPKG-MTD.sh n'existe pas !"

Comme vous l’aurez compris, j’ai créé un répertoire personnel sur
« /volume1/@MTD/local » qui contient tout le set standard Unix (etc,
bin, sbin, …) et tous les ajouts dont j’ai besoin. Voici le contenu
du script « AjoutsOPKG-MTD.sh » (c’est Kdo) :
————————————————————————————————————
#!/bin/bash

# Programme     : AjoutsOPKG-MTD.sh
#
# Auteur        : Pierre Malard - (c)2018 MTD
# Date          : 090/03/2018 07:13
# version       : 1.0.0
Version="1.0.0"
Contact="admin_ajoutsopkg-...@teledetection.fr"

# Description :
# =============
# Ajouts des paramètres OPKG/Entware et MTD lors des MAJ systèmes
# Voir le cron lancé dans l'interface de gestion

# JJ/MM/AAAA - (v.v.v - Qui)
#       Quoi

#-- Commandes utilisées ------------------------------
#-----------------------------------------------------

#-- PATH spécifique ----------------------------------
#-----------------------------------------------------

#-- Répertoires et fichiers recquis ------------------
#-----------------------------------------------------

#-- Variables ----------------------------------------
Verbeux=
ModeTest=
CodeRet=0
#-----------------------------------------------------

#-- Fonctions ----------------------------------------
Echo() {
        if [ ${Verbeux} ] ; then echo "==> $@"; fi
}

Usage() {
        echo "Utilisation :"                                                    
                >&2
        echo "$(basename $0) [-hV] | [-vt]"                                     
                >&2
        echo ""                                                                 
                >&2
        echo " Liste des options :"                                             
                >&2
        echo "   -h, --help, --aide________ Cette aide"                         
                >&2
        echo "   -V, --version_____________ Affiche la version du script"       
                >&2
        echo "   -v, --verbeux, --verbose__ Mode verbeux"                       
                >&2
        echo "   -t, --test________________ Affiche les commandes sans les 
exécuter"            >&2
        echo ""                                                                 
                >&2
}
#-----------------------------------------------------


#-----------------------------------------------------
##########
# main() #
##########
export LANG='fr_FR.UTF-8'; export LC_ALL='en_US.UTF-8'
# On utilise la commande "echo" de BASH
shopt -s xpg_echo
if [ $(id -u) -ne 0 ] ; then
        echo "VOUS DEVEZ AVOIR LES DROIT DE root"
        echo "Tentative par SUDO (donnez eventuellement votre mot de passe) ..."
        sudo $0 "$@"
        exit 0
fi

progname="$(basename "$0")"

#-- Traitement de la ligne de commande ---------------
# Pré-positionnement des variables optionnelles
# Test de présence de la commande "getopt"
CmdGetOpt="$(which getopt)"
if [ "$#" -gt 0 ] ; then
        SHORTOPTS="hVvt"
        LONGOPTS="help,version,verbeux,verbose,test"
        ${CmdGetOpt} --test     > /dev/null 2>&1
        if [ $? -eq 4 ] ; then          # Version getopt avec longopts.
                OPTS=$(${CmdGetOpt} -o $SHORTOPTS --long $LONGOPTS -n 
"${progname}" -- "$@")
        else
                case $1 in
                        --help)
                                Usage;                                  exit 0 
;;
                        --version)
                                echo "$(basename "$0") version ${Version} - 
Contact : ${Contact}"
                                exit 0                                  ;;
                esac
                OPTS=$(${CmdGetOpt} $SHORTOPTS "$@")
        fi

        eval set -- "$OPTS"

        while [ $# -gt 0 ]; do
                case "$1" in
                        -h|--help)
                                Usage; exit 0                                   
        ;;
                        -V|--version)
                                echo "${progname} version ${Version} - Contact 
: ${Contact}"
                                exit 0                                          
        ;;
                        -v|--verbeux|--verbose)
                                Verbeux=1; shift                                
        ;;
                        -t|--test)      ModeTest=1; shift                       
        ;;
                        --)             shift; break                            
        ;;
                        *) echo "Internal error!" 1>&2 ; exit 1                 
        ;;
                esac
        done
fi

#
#-- Traitement ---------------------------------------
if [ ${ModeTest} ] ; then       DEBUG="Echo "; Verbeux=1
else                            DEBUG=""
fi
Echo "DEBUG = ${DEBUG}"

# On test si /opt est monté
Echo "Test si /opt est monté…"
if ! eval "mount | grep -q ' on /opt '" ; then
        # Il n'y a rien on monte et on exécute le script
        Echo " - Création de /opt…"
        [ -d /opt ] || mkdir /opt
        Echo " - Montage de /opt…"
        if [ -d /volume1/@entware-ng/opt ] ; then
                Echo "  o Montage de /volume1/@entware-ng/opt…"
                mount -o bind /volume1/@entware-ng/opt /opt
                Echo "  o Lancement de /opt/etc/init.d/rc.unslung…"
                /opt/etc/init.d/rc.unslung start
        else
                echo "ERREUR ! Entware-NG n'est pas présent…"
                exit 1
        fi
else
        Echo "  C'est déjà là."
fi

# On test si /mtd est mmonté
Echo "Test si /mtd est monté…"
if ! eval "mount | grep -q ' on /mtd '" ; then
        # Il n'est pas, on monte
        Echo " - Création de /mtd…"
        [ -d /mtd ] || mkdir /mtd
        Echo " - Montage de /mtd…"
        if [ -d /volume1/@MTD/local ] ; then
                Echo "  o Montage de /volume1/@MTD/local…"
                mount -o bind /volume1/@MTD/local /mtd
        else
                echo "ERREUR ! Le paquet MTD n'est pas présent…"
                exit 1
        fi
fi

# Reconfiguration de /etc/profile
Echo "Reconfiguration de /etc/profile…"
if [ -f /mtd/etc/profile-EntWare.ajout ] ; then
        Echo " - Test si l'ajout est présent…"
        if [ -z "$(grep '^# Ajouts MTD' /etc/profile)" ] ; then
                Echo "  o NON, on ajoute et exécute…"
                cat /mtd/etc/profile-EntWare.ajout >> /etc/profile
                . /etc/profile
        else
                Echo "  o OUI, on passe…"
        fi
else
        echo "[ERREUR] le fichier /mtd/etc/profile-EntWare.ajout n'existe pas"
        exit 2
fi

# Reconfiguration de /etc/bash.bashrc
Echo "Reconfiguration de /etc/bash.bashrc…"
if [ -f /mtd/etc/bash.bashrc-MTD.ajout ] ; then
        Echo " - Test si l'ajout est présent…"
        if [ -z "$(grep '^# Ajouts MTD' /etc/bash.bashrc)" ] ; then
                Echo "  o NON, on ajoute et exécute…"
                cat /mtd/etc/bash.bashrc-MTD.ajout      >> /etc/bash.bashrc
                . /etc/bash.bashrc
        else
                Echo "  o OUI, on passe…"
        fi
else
        echo "[ERREUR] le fichier /mtd/etc/bash.bashrc-MTD.ajout n'existe pas"
        exit 2
fi

Echo "Sortie"
exit 0
————————————————————————————————————

Voici ce que peut contenir « profile-EntWare.ajout »
————————————————————————————————————
# Ajouts MTD
# NE PAS SUPRIMER CES 2 LIGNES

#===================================================#
# Ajouts EntWare-ng
#===================================================#
if [ -r /opt/etc/profile ] ; then source /opt/etc/profile; fi

#===================================================#
# Ajouts PLM
#===================================================#
if [ -r /etc/bash.bashrc ] ; then source /etc/bash.bashrc ; fi
————————————————————————————————————

Voici ce que peut contenir « bash.bashrc-MTD.ajout »
————————————————————————————————————
# Ajouts MTD
# NE PAS SUPRIMER CES 2 LIGNES

[ -r "/mtd/etc/bashrc_MTD" ] && . "/mtd/etc/bashrc_MTD"
————————————————————————————————————

Le fichier « bashrc_MTD » contient les alias et valeurs spécifiques
qu’on veut voir présentes.

Une fois cela installé, vous avez accès à pas mal de dépôts (rsync
plus moderne, Bash plus moderne, cron, rsnapshot, screen, mutt, …)
que vous listez et installez via la commande « opkg ».

Chez nous, nous avons cela depuis des années et les sauvegardes de
*nix sont basées sur « RSnapShot » pour garantir des sauvegardes
incrémentales. Les postes utilisateurs Linux qui le souhaitent
peuvent également sauvegarder leur OS et données via « RSnapShot »
dans la limite d’un quota pré-défini. Idem pour les Mac avec
TimeMachine et les Windows avec « Active Backup dir Business »
qui est fourni par Synology.

C’était le cadeau du 1er mai ;-)


> Le 1 mai 2020 à 13:39, Samy Mezani <samy.mez...@wanadoo.fr> a écrit :
> 
> Bonjour,
> 
> Le 01/05/2020 à 11:53, Pierre Malard a écrit :
>> Pourquoi s’emm… à essayer de faire un rsync d’un FS Unix depuis un
>> poste Unix sur un FS certainement Unix (Ext, XFS, …) qui est certainement
>> également un poste tournant sous Unix en effectuant un montage CIFS ????
> 
> Cette remarque est tout à fait justifiée et je me suis même demandé comment 
> j'en étais arrivé là ! ;-)
> 
> En fait, il s'agit d'une sauvegarde sur un NAS Synology dont le partage CIFS 
> est activé de longue date pour des postes Windows. Donc pour éviter de créer 
> d'autres partages, j'ai utilisé l'existant. Ce n'est pas parfait, mais je ne 
> voulais pas au départ activer SSH sur ce NAS, car je maîtrisais peu le 
> système Linux sur ce matériel (pas de /home, gestion des paquets différente, 
> etc.)
> 
> Mais maintenant que j'ai activé SSH avec succès, effectivement ça peut tout 
> changer. Ça date de hier soir seulement, mais à voir si j'ai le temps de 
> revoir mes scripts.
> 
> Et sinon, j'ai toujours mes processus rsync D et Z... Ce qui n'a pas empêché 
> ma sauvegarde automatique aujourd'hui.
> 
> Merci en tous cas
> 
> Samy
> 

--
Pierre Malard

   « Il faut créer en même temps les élites et les débouchés, le syndica-
    lisme et les usines. Faire l'un sans l'autre, c'est travailler pour le
    malheur du peuple. »
                                        Romain Gary - "Les racines du ciel"
   |\      _,,,---,,_
   /,`.-'`'    -.  ;-;;,_
  |,4-  ) )-,_. ,\ (  `'-'
 '---''(_/--'  `-'\_)   πr

perl -e '$_=q#: 3|\ 5_,3-3,2_: 3/,`.'"'"'`'"'"' 5-.  ;-;;,_:  |,A-  ) )-,_. ,\ 
(  `'"'"'-'"'"': '"'"'-3'"'"'2(_/--'"'"'  `-'"'"'\_): 
24πr::#;y#:#\n#;s#(\D)(\d+)#$1x$2#ge;print'
- --> Ce message n’engage que son auteur <--

Attachment: signature.asc
Description: Message signed with OpenPGP

Répondre à