Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
apt-cacher-ng-cron-apt [2020/02/09 18:43] – [Serveur de cache APT / cron-apt] cbiotapt-cacher-ng-cron-apt [2022/10/04 17:49] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 ====== Serveur de cache APT  / cron-apt ====== ====== Serveur de cache APT  / cron-apt ======
  
-<note important>Doc à suivre en attendant le paquet debian</note> 
  
-===== Installation et lancement du script =====+===== Téléchargement du script =====
  
 Télécharger la dernière version depuis le git (version stable et devel - de préférence prenez la stable) : Télécharger la dernière version depuis le git (version stable et devel - de préférence prenez la stable) :
-  * [[https://github.com/CyrilleBiot/scripts/blob/master/acn.py|]] +  * [[https://github.com/CyrilleBiot/acn-py | acn-py, git master]]
-  * [[https://github.com/CyrilleBiot/scripts|https://github.com/CyrilleBiot/scripts]] +
-Ce script nécessite d'être lancé avec les droits **root** (base debian) ou **sudo** (base ubuntu)+
  
-__**Récupérer le script**__ +puis installer le paquet debian.
-<code bash>[ragnarok@asgard-freeBSD:~] $ su - +
-Password: +
-root@asgard-freeBSD:~ #  +
-root@asgard-freeBSD:~ # wget https://raw.githubusercontent.com/CyrilleBiot/scripts/master/acn.py +
---2020-02-09 10:13:19--  https://raw.githubusercontent.com/CyrilleBiot/scripts/master/acn.py +
-Résolution de raw.githubusercontent.com (raw.githubusercontent.com)… 151.101.120.133 +
-Connexion à raw.githubusercontent.com (raw.githubusercontent.com)|151.101.120.133|:443… connecté. +
-requête HTTP transmise, en attente de la réponse… 200 OK +
-Taille : 13592 (13K) [text/plain] +
-Sauvegarde en : « acn.py »+
  
-acn.py              100%[===================>]  13,27K  --.-KB/s    ds 0,04s   +<code bash>$ sudo dpkg -i acn-py_VERSION.deb</code>
  
-2020-02-09 10:13:19 (344 KB/s) — « acn.py » sauvegardé [13592/13592]</code>+ou
  
-Lancer le script. +<code bash># dpkg -i acn-py_VERSION.deb</code> 
-<code bash>root@asgard-freeBSD:~ # python3.6 acn.py</code>+ 
 + 
 +===== Construire son paquet ===== 
 + 
 +Ceux qui préfèrent peuvent construire eux même leur paquet .deb , les sources debian étant disponibles 
 +Pour construire le paquet  
 +<code bash>$ git clone https://github.com/CyrilleBiot/acn-py.git 
 +Clonage dans 'acn-py'... 
 +remote: Enumerating objects: 58, done. 
 +remote: Counting objects: 100% (58/58), done. 
 +remote: Compressing objects: 100% (43/43), done. 
 +remote: Total 58 (delta 12), reused 50 (delta 6), pack-reused 0 
 +Dépaquetage des objets: 100% (58/58), 47.63 Kio | 541.00 Kio/s, fait. 
 +$ cd acn-py 
 +$ debuild -us -uc</code> 
 + 
 +Le paquet est alors disponible 
 +<code bash>$ ls 
 +acn-py_2.0.2+nmu5_all.deb          acn-py_2.0.2+nmu5.dsc     README.md 
 +acn-py_2.0.2+nmu5_amd64.build      acn-py_2.0.2+nmu5.tar.gz  source 
 +acn-py_2.0.2+nmu5_amd64.buildinfo  debian 
 +acn-py_2.0.2+nmu5_amd64.changes    LICENSE</code>
  
 ===== Utilités de ce script ===== ===== Utilités de ce script =====
  
 +{{ :apt-cacher-server.png?direct&400 |}}
 Script d'auto configuration d'un **serveur de cache pour APT, côté serveur et client**. Script d'auto configuration d'un **serveur de cache pour APT, côté serveur et client**.
 Installation d'un **cron-apt récupérant les mises  à jour la nuit** et **installant automatiquement les mises à jour de sécurité** des repo. présentes sur votre système. Installation d'un **cron-apt récupérant les mises  à jour la nuit** et **installant automatiquement les mises à jour de sécurité** des repo. présentes sur votre système.
Ligne 47: Ligne 55:
 Le principe est qu'une machine centrale héberge le mandataire pour un réseau local. Les clients règlent leur configuration d'APT pour télécharger sur cette machine. Apt-Cacher NG conserve une copie de toutes les données utiles transitant à travers lui et, quand une requête similaire est faite, la copie en cache des données est délivrée sans être téléchargée à nouveau.//  Le principe est qu'une machine centrale héberge le mandataire pour un réseau local. Les clients règlent leur configuration d'APT pour télécharger sur cette machine. Apt-Cacher NG conserve une copie de toutes les données utiles transitant à travers lui et, quand une requête similaire est faite, la copie en cache des données est délivrée sans être téléchargée à nouveau.// 
  
-{{ :apt-cacher-server.png?direct&400 |}}+
  
  
Ligne 57: Ligne 65:
     * apt-cacher-ng permet d'intégrer des images ISO (DVD) et des importations de cache apt     * apt-cacher-ng permet d'intégrer des images ISO (DVD) et des importations de cache apt
  
-===== Spéficités du script ===== +===== Les avantages de cron-apt ===== 
- +Ce script installe également **cron-apt** afin de récupérer automatiquement les mises à jour la nuit afin de limiter la bande passante en journée. Ces mises à jour sont à installer par l’administrateur.
-==== Configuration, côté serveur==== +
- +
-Installation des paquets :  +
- +
-  * apt-cacher-ng +
-  * cron-apt +
- +
- +
-Lisez les messages du terminal, ils contiennent des données importantes : +
- +
-<code bash>........ +
-Traitement des actions différées (« triggers ») pour man-db (2.9.0-2) ... +
-Traitement des actions différées (« triggers ») pour libc-bin (2.29-9) ... +
-============================================== +
-Le serveur de cache est dès lors opérationnel +
-Le port d'écoute est : 3142 +
-Page d'aministration : http://192.168.0.20:3142/acng-report.html +
-Notez bien l'ip de votre serveur, elle vous sera indispensable pour la configuration des clients. +
-L'IP du serveur est : 192.168.0.20  +
-Indispensable : cette IP doit être FIXE (réglage sur votre BOX ou serveur DHCP). +
-Cette machine est un serveur, mettre de ne l'arrêter. Les mises à jour s'effectuant la nuit. +
-....................... +
- +
-Dès lors, le système installera les mises à jour de sécurité, toutes les nuits  à 4 heures. +
-.......................</code> +
- +
-Voir config** cron-apt** plus bas. +
- +
- +
-==== Configuration, côté client ==== +
-__**Paquets installés**__ +
- +
-  * cron-apt +
-  * python-nmap +
- +
-Le script va scanner, depuis la reconnaissance de l'IP du PC, le réseau local à la recherche d'une machine dont le port spécifique à **Acn-cacher-ng** est ouvert (**port 3142** par défaut mais modifiable). +
- +
-__**Fichier crée**__ +
-Un fichier de proxy apt pointant sur l'IP du serveur est créé à cet endroit avec ce contenu +
- +
-<code bash>root@Fenrir:/etc/apt/apt.conf.d# cat /etc/apt/apt.conf.d/00aptproxyANC  +
-Acquire::http::Proxy "http://192.168.0.20:3142"; +
-</code> +
- +
-__Le scan du réseau peut avoir à 3 solutions :__ +
-  * Aucune machine n'est détecter. il faut revoir la configuration du serveur. +
-  *Une seule machine est détectée : elle est proposée par défaut. +
-  *Plusieurs machines sont détectée. Une Liste de choix est proposée.  +
- +
-A chaque niveau, des choix sont possibles (**modification des IP ou du port**) afin de mettre la jour la configuration en cas de modification des paramètres serveur. +
- +
-<code bash>root@Fenrir:/home/ragnarok/PycharmProjects/PRIMTUX-ACN# python3 acn-v2.py  +
-Vous utilisez un système Debian (su pour administration). +
-Type d'installation (client/serveur) : client +
-Installation de type client +
-Utiliser le port par défaut 3142 (recommandé) ?. [Oui / Non] Oui +
-Type d'installation (client/serveur) : client +
-Installation de type client +
-======================================== +
-Votre machine possède l'ip 192.168.0.20. +
-Le motif de scan sera donc : 192.168.0.0 +
----------------------------------------------------- +
-Host : 192.168.0.15 () +
-State : up +
----------------------------------------------------- +
-Host : 192.168.0.20 () +
-State : up +
----------------------------------------------------- +
-Host : 192.168.0.254 () +
-State : up +
-======================================== +
-Résultats du scan réseau : (True si port Apt-cache-server trouvé. +
-192.168.0.15 : Le port est fermé. Code d'erreur de retour; 111. Pas de serveur ACN +
-192.168.0.15  :  False .  Pas de port ACN ouvert +
-192.168.0.20 : Le port 3142 est ouvert. Possibilié de serveur ACN. +
-192.168.0.20  :  True .  Eventuel Serveur ACN. +
-192.168.0.254 : Le port est fermé. Code d'erreur de retour; 111. Pas de serveur ACN +
-192.168.0.254  :  False .  Pas de port ACN ouvert +
-Serveur ACN possible :  192.168.0.20 +
-Valider ce choix ? (Oui / Non)</code>  +
- +
-==== cron-apt, configuration ==== +
- +
-Le script automatise sa configuration, vous n'avez rien à faire. Voici ce qu'il modifie sur votre système/ +
- +
-**__Paquet installé__** +
-  * **cron-apt** +
- +
-**__Fichiers spécifiques créées__** +
-  * **/etc/apt/sources.list.d/security-primtuxACN.list**  +
- +
-Scanne des entrées du dossier contenant les repos de votre système. Récupère uniquement les entrées de "security" et crée un fichier spécifique qui sera appelé par **cron-apt**. +
- +
-Ce fichier commence par cette entête : +
-<code bash>root@Fenrir:/home/ragnarok/PycharmProjects/PRIMTUX-ACN# cat /etc/apt/sources.list.d/security-primtuxACN.list  +
-# Security Update. For Primtux Apt-cacher-ng. +
-deb http://security.debian.org/debian-security buster/updates main contrib non-free</code> +
-  * __**/etc/cron-apt/action.d/5-primtuxACN-security**__ +
- +
-Ce fichier contient les information de configuration pour utiliser avec cron-apt le fichier précédant.  +
- +
-<code bash># cat /etc/cron-apt/action.d/5-primtuxACN-security  +
-upgrade -y -o APT::Get::Show-Upgraded=true +
-OPTIONS="-o quiet=1 -o APT::Get::List-Cleanup=false -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security-primtuxACN.list -o Dir::Etc::SourceParts=\"/dev/null\"" +
-MAILTO="root" +
-MAILON="always"</code> +
- +
-Contrairement aux autres mises à jour qui ne sont que télécharger et dont l'installation dépend de l'administrateur de la machine, les mises à jour de sécurité sont installées dès leur téléchargement sans intervention humaine. Le risque est assez faible étant donné que ce ne sont que des patchs de sécurité, normalement stables et testés. +
- +
-==== Import de .deb dans acn-cacher-ng ==== +
-Faire pointer un navigateur sur le serveur avec le port d'écoute d'acn-server-ng. +
-Ce sera un url de ce type : http://192.168.0.20:3142/acng-report.html +
- +
-L'url correspondant à votre configuration est donné en retour d'installation serveur. +
- +
-{{ :capture_d_ecran_2020-02-09_01-15-06.png.jpg?direct&400 |}} +
- +
- +
- +
-===== Le script ===== +
-Ci dessus la version 2.0.0 +
- +
-Mais préfèrable de suivre la version du GIT : [[https://github.com/CyrilleBiot/scripts/|https://github.com/CyrilleBiot/scripts/]] +
-<code bash>#!/usr/bin/env python +
-# -*- coding: utf-8 -*- +
- +
-""" Script d'installation et de configuration du serveur de cache apt +
-    apt-cacher-ng soit en tant que serveur (ajout du paquet sur le système +
-    soit en tant que client (cration d'un fichier de proxy apt) +
-    Possibilité pour les clients de choisir le port d'écoute du serveur +
-    Installation de cron-apt avec configuration spécifique +
-    pour installation automatique des mises à jour de sécurité des repo +
-    présents sur le système +
-""" +
- +
-__author__ = "Cyrille BIOT" +
-__copyright__ = "Copyleft" +
-__credits__ = "Cyrille BIOT" +
-__license__ = "GPL" +
-__version__ = "2.0.0" +
-__date__ = "2020/02/05" +
-__maintainer__ = "Cyrille BIOT" +
-__email__ = "cyrille@cbiot.fr" +
-__status__ = "Devel" +
- +
-import os, re, sys, platform +
-import nmap, subprocess, socket +
- +
- +
- +
- +
-def baseDebian(): +
-    """ +
-    Fonction permettant de connaitre le Systeme d'exploitant faisant tourner le script +
-    Ou DEBIAN ou UBUNTU pour savoir si on utilise su ou sudo +
-    Retourne une variable de type string (admin) +
-    :return: admin soit 'debian' (root), soit 'ubuntu' (sudo) +
-    """ +
-    # Ubuntu ou DEBIAN +
-    if 'Debian' in platform.version(): +
-        # Si DEBIAN, verif si root lance le script +
-        print('Vous utilisez un système Debian (su pour administration).') +
-        if not os.geteuid() == 0: +
-            sys.exit("Seul le root peut lancer ce script. Nécessite privilèges administrateur.") +
-        distrib = 'debian' +
-    else: +
-        if not os.geteuid() == 0: +
-            print("Ce programme requiert un lancement via 'sudo'") +
-            sys.exit("Ce programme doit être lancé avec les droits administrateur.\nUtiliser sudo LeScript.py") +
-        print('Vous utilisez un système non Debian (sudo pour administration).') +
-        distrib = 'ubuntu' +
-    return distrib +
- +
-def installPackage(package, debianUbuntu): +
-    """ +
-    Fonction installant un package debian ou ubuntu +
-    :param package: le nom du paquet à installer +
-    :param debianUbuntu: soit 'debian' / soit 'ubuntu' +
-    :return: None +
-    """ +
-    retval = subprocess.call(['which', package]) +
-    if retval != 0: +
-        print("Le package {} n'est pas intallé. Installation...".format(package)) +
- +
-        # Paramètres de l'install +
-        cmdInstall = ['apt-get', 'install', package, '-y'] +
-        cmdUpdate = ['apt-get', 'update'] +
- +
-        # Adaptation système Ubuntu +
-        if debianUbuntu == 'ubuntu': +
-            cmdInstall.insert(0, 'sudo') +
-            cmdUpdate.insert(0, 'sudo') +
- +
-        # On installe le paquet +
-        subprocess.run(cmdInstall) +
-        #subprocess.run(cmdUpdate) +
-    else: +
-        print('Le package {} est déjà présent sur votre système.'.format(package)) +
- +
-    return None +
- +
-def installServeur(ip, port,distrib): +
-    """ +
-    Fonction installant le serveur de cache apt-cacher-ng +
-    :param ip: IP du Serveur +
-    :param port: interger port ACN +
-    :param distrib: Ubuntu ou Debian +
-    :return: None +
-    """ +
- +
-    # Installation du serveur +
-    installPackage('apt-cacher-ng',distrib) +
- +
-    # Affichage Informations +
-    print("===============================================") +
-    print("Le serveur de cache est dès lors opérationnel") +
-    print("Le port d'écoute est : {}".format(port)) +
-    print("Page d'aministration : http://{}:{}/acng-report.html".format(ip, port)) +
-    print("Notez bien l'ip de votre serveur, elle vous sera indispensable pour la configuration des clients.") +
-    print("L'IP du serveur est : {} ".format(ip)) +
-    print("Indispensable : cette IP doit être FIXE (réglage sur votre BOX ou serveur DHCP).") +
-    print("Cette machine est un serveur, mettre de ne l'arrêter. Les mises à jour s'effectuant la nuit.") +
- +
-    return None +
- +
- +
-def installClient(ipServeur,portACN): +
-    """ +
-    Fonction installant un fichier de configuration apt pour les postes clients +
-    Créer un fichier dans /etc/apt/apt.conf.d/ ayant pour nom 00aptproxyANC +
-    :param ipServeur:  ip du serveur ACN +
-    :param portACN: port d'écoute du serveur ACN +
-    :return: None +
-    """ +
- +
-    # COnfig IP serveur dans un fichier de proxy APT +
-    msgApt = 'Acquire::http::Proxy "http://' + ipServeur + ':' + str(portACN) + '";\n' +
-    print(msgApt) +
-    dirInstall = '/etc/apt/apt.conf.d/' +
-    fileName = '00aptproxyANC' +
-    fileLocInstall = dirInstall + fileName +
-    fichier = open(fileLocInstall, "w") +
-    fichier.write(msgApt) +
-    fichier.close() +
-    return None +
- +
- +
- +
-def portSelection(portACN): +
-    while True: +
-        try: +
-            portDefault = input("Utiliser le port par défaut 3142 (recommandé) ?. [Oui / Non]  ") +
-            if portDefault.lower() == 'oui': +
-                print('Port Serveur {}'.format(portACN)) +
-                break +
- +
-            elif portDefault.lower() == 'non': +
-                try: +
-                    portSelect = int(input("Saisir le port du serveur Apt-Cacher-Ng. Entre 0 et 65 535. : ")) +
-                    if -1 < portSelect < 65536: +
-                        print("Port sélectionné{}".format(portSelect)) +
-                        portACN = portSelect +
-                        break +
-                except ValueError: +
-                    print("Oops!  Réponse incorrecte, ce n'est pas un nombre compris dans la plage demandée.") +
-        except ValueError: +
-            print("Oops!  Réponse incorrecte... Réessayer...") +
- +
-    print("Installation client sur port {}.".format(portACN)) +
- +
-def ipRecuperation(): +
-    """ +
-    Fonction récupérant l'adresse IPv 4 de la machine +
-    :return: l'ip de la machine lançant ce script +
-    """ +
-    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +
-    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) +
-    s.connect(('<broadcast>', 0)) +
-    return s.getsockname()[0] +
- +
- +
-def ipTest(ip): +
-    """ +
-    Fonction testant la validité d'une adresse IPv4 +
-    :param ip: ip à tester +
-    :return: True si IP valide, False sinon +
-    """ +
-    reg = r"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" +
-    if re.match(reg, ip): +
-        return True +
-    else: +
-        return False +
- +
- +
-def clientServeur(): +
-    """ +
-    Fonction déterminant s'il s'agit d'une installation de type Serveur ou Client +
-    :return: Retourne une variable string soit client soit serveur +
-    """ +
-    while True: +
-        try: +
-            choixInstall = input("Type d'installation (client/serveur) : ") +
-            if choixInstall.lower() in ['client', 'serveur']: +
-                print('Installation de type {}'.format(choixInstall)) +
-                break +
-            else: +
-                print('Préciser : client OU serveur.') +
-                print('ATTENTION A LA CASSE. Pas de majuscule.') +
-        except ValueError: +
-            print("Oops!  Réponse incorrecte... Réessayer...") +
-    return choixInstall +
- +
-def portStatus(ip, port): +
-    """ +
-    Fonction de scanne d'un port d'une machine en fonction de son IP +
-    :param ip: IP de la machine à scanner +
-    :param port: port à scanner +
-    :return: Retourne True si port ouvert ou False si port fermé +
-    """ +
- +
-    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +
-    sock.settimeout(1)  # +
-    result = sock.connect_ex((ip, port)) +
-    if result == 0: +
-        message = str(ip) + ' : Le port ' + str(port) + ' est ouvert. Possibilié de serveur ACN.' +
-        print(message) +
-        return True +
-    else: +
-        message = str(ip) + ' : Le port est fermé. Code d\'erreur de retour; ' + str(result) +
-        message += '. Pas de serveur ACN' +
-        print(message) +
-        return False +
- +
-def chercherServeurACN(ip,port): +
-    """ +
-    Fonction recherchant +
-    :param ip: IP du client lançant le scan, permet de trouver un motif réseau +
-    :param port: port à scanner (port ACN) +
-    :return: retourne une liste contenant les IP possibles des machines ayant port spécifié ouvert +
-    """ +
-    ipModele = '' +
-    listeHosts = [] +
-    ipServeurACN = [] +
- +
- +
-    # Création d'un motif pour le scan reseau +
-    ipSplit = ip.split('.') +
-    for i in range (0,3): +
-        ipModele += ipSplit[i] + '.' +
-    ipModele += '0' +
- +
-    # debug +
-    print('=' * 40) +
-    print('Votre machine possède l\'ip {}.\r\nLe motif de scan sera donc : {}'. format(ip,ipModele)) +
- +
-    # Scan reseau à la recherche de clients +
-    nm = nmap.PortScanner() # instantiate nmap.PortScanner object +
-    nm.scan(hosts=ipModele+'/24', arguments='-n -sP') +
-    for host in nm.all_hosts(): +
-        print('----------------------------------------------------') +
-        print('Host : %s (%s)' % (host, nm[host].hostname())) +
-        print('State : %s' % nm[host].state()) +
-        # Creation d'un mappage reseau +
-        listeHosts.append(host) +
- +
-    # Sca, port ACN des clients +
-    print('=' * 40) +
-    print('Résultats du scan réseau : (True si port Apt-cache-server trouvé.') +
-    # Pour chacune des machines du réseau, on teste le port d'ACN (par defaut 3142 +
-    for i in listeHosts: +
-        testPort = portStatus(i, port) +
-        # Si réponse True, c'est le serveur +
-        if testPort == True: +
-            ipServeurACN.append(i) +
-            message = 'Eventuel Serveur ACN.' +
-        else: +
-            message = 'Pas de port ACN ouvert' +
-        print(i, ' : ', testPort, '. ', message) +
- +
-    return ipServeurACN +
- +
-def validerIpServeurACN(listIp): +
-    """ +
-    Fonction recupérant la liste des machines susceptibles d'être serveur ACN +
-    Teste de cette liste pour valider ces IP ou les infirmer +
-    :param listIp: liste contenant les IP des machines écoutant le port ACN +
-    :return: IP de la machine sélectionnée comme serveur ACN +
-    """ +
-    if len(listIp) == 0: +
-        sys.exit('Aucun serveur ACN de trouver. Merci de vérifier son installation.\r\n' +
-                 'Relancer ce script sur la machine serveur.\r\n' +
-                 'Et sélectionner "Installation Serveur"\r\n') +
-    elif len(listIp) == 1: +
-        print('Serveur ACN possible : ',listIp[0]) +
-        while True: +
-            try: +
-                ouiNon = input("Valider ce choix ? (Oui / Non) ") +
-                if ouiNon.lower() == 'oui': +
-                    print('IP du serveur : ', listIp[0] ) +
-                    ipServeur = listIp[0] +
-                    break +
-                elif ouiNon.lower() == 'non': +
-                    sys.exit('Revoir la configuration du serveur.\n' +
-                             'Et relancer ce script.\n' +
-                             'Aucune machine disponible dans le reseau actuellement ' +
-                             'avec ce port d\'ouvert') +
-            except ValueError: +
-                print("Oops!  Réponse incorrecte... Réessayer... [Oui / Non ]") +
-        # Valider l'ip unique +
-    else: +
-        print('Plusieurs machines pouvant être des serveurs ACN') +
-        print('Veuillez sélectionner une ip, merci :') +
-        for i in enumerate(listIp): +
-            print('Choix ', i[0] + 1, ' : ', i[1]) +
-        # Installation client +
-        while True: +
-            try: +
-                ipServeur = input("Saisir l'IP du Serveur :") +
-                if ipTest(ipServeur) is True and ipServeur in listIp: +
-                    break +
-            except ValueError: +
-                print("Oops!  Réponse incorrecte... Réessayer...") +
-    return ipServeur +
- +
- +
-def installCronApt(distrib): +
-    """ +
-    Fonction Recuperation des entrées des mises à jour de sécurité dans +
-     dans les divers sources.list possibles +
-     Et création d'un sources.list basé que sur ces entrées (security) +
-     Le fichier est propre à primtux. Donc si existe, on le régénère sinon on le crée +
-     Et envoi mail sur root +
-    :param distrib: Ubuntu ou Debian +
-    :return: None +
-    """ +
- +
-    mailRoot = 'root' +
-    aptSecurity = "find /etc/apt -type f -name '*.list' " \ +
-                  "| xargs cat " \ +
-                  "|  grep -v \"^#\" | grep security" +
- +
-    # Installation de cron-apt +
-    installPackage('cron-apt',distrib) +
- +
-    # Création sources.list spécial sécurité +
-    log = open('/etc/apt/sources.list.d/security-primtuxACN.list', 'w') +
-    log.write('# Security Update. For Primtux Apt-cacher-ng.\n') +
-    log.flush() +
-    c = subprocess.call(aptSecurity, stdout=log, stderr=log, shell=True) +
- +
-    # Configuration d'une action dans la conf de cron-apt +
-    # /etc/cron-apt/action.d/5-primtuxACN-security +
-    fichier = open('/etc/cron-apt/action.d/5-primtuxACN-security', "w") +
-    fichier.write("upgrade -y -o APT::Get::Show-Upgraded=true\n") +
-    fichier.write("OPTIONS=\"-o quiet=1 -o APT::Get::List-Cleanup=false -o " +
-                  "Dir::Etc::SourceList=/etc/apt/sources.list.d/security-primtuxACN.list " +
-                  "-o Dir::Etc::SourceParts=\\\"/dev/null\\\"\"\n") +
-    fichier.write("MAILTO=\"{}\"\n".format(mailRoot)) +
-    fichier.write("MAILON=\"always\"\n") +
-    fichier.close() +
- +
-    print("Dès lors, le système installera les mises à jour de sécurité, toutes les nuits  à 4 heures.") +
- +
-    return None +
- +
- +
- +
-def main(): +
-    """ +
-    Lancement du script +
-    :return: None +
-    """ +
-    # Défnition du port par defaut d'ACN +
-    portACN = 3142 +
-    # Recupere le type de distribution faisant tourner le script +
-    distrib  = baseDebian() +
- +
-    choixInstall = clientServeur() +
-    if choixInstall.lower() == 'serveur': +
-        ipServeur = ipRecuperation() +
-        installServeur(ipServeur, portACN, distrib) +
-    else: +
-        # Installation client +
-        portSelection(portACN) +
-        ip = ipRecuperation() +
-        ipServeur = chercherServeurACN(ip, portACN) +
-        ipServeur = validerIpServeurACN(ipServeur) +
-        installClient(ipServeur,portACN) +
- +
-    # Que ce sont pour l'un ou l'autre, install cron-apt auto securité +
-    installCronApt(distrib) +
-    return None +
- +
-""" +
- Boucle main() +
-""" +
-if __name__ == "__main__": +
-    # execute only if run as a script +
-    main() +
-</code> +
  
-===== Liens ===== +Par contre, les mises à jour de sécurité sont, elles, automatiquement installées.
-  *[[https://packages.debian.org/fr/sid/apt-cacher-ng|Le paquet sous DEBIAN SID]] +
-  *[[https://www.unix-ag.uni-kl.de/~bloch/acng/|Homepage Apt-cacher-ng]]+
  
 + --- //[[cyrille@cbiot.fr|cyrille]] 2020/02/12 21:25//
  • apt-cacher-ng-cron-apt.1581273819.txt.gz
  • Dernière modification : 2022/10/04 17:50
  • (modification externe)