Forum Programmation.python Script de configuration de miroir des dépots

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
0
6
mar.
2016

Bonjour,

J'ai monté un serveur miroir à plusieurs reprises, permettant de faire des mises à jour rapides lors d'install party.
Cela nécessite la configuration d'un serveur DHCP, des connexions réseau, d'un point d'accès wifi, de la liste des dépôts à copier, des virtualhosts Apache, des redirections DNS, etc…
J'ai documenté tout ça pour le refaire facilement, mais j'aimerai avoir un outil pour automatiser la configuration du miroir. À ma connaissance ça n'existe pas, alors je réfléchis à le faire moi même en python.

Je suis un grand débutant en python, alors je vous soumet ici mes idées, pour avoir votre avis sur la question.

L'interface principale serait accessible depuis un terminal, il faudra que j'essaie d'utiliser ncurses, pour proposer des menus déroulants avec des options à cocher (choix des dépots, interfaces, etc…).

À partir des choix de l'utilisateur, l'interface générerait un fichier de configuration, à partir duquel un programme pourrait générer les fichiers de configuration de tous les programmes nécessaires. Je commencerai à programmer par là.

Il faudra aussi maintenir une liste des dépots, je pense faire cela sous forme de base(s) sqlite. Pour Linux Mint par exemple, la base sqlite pourrait ressembler à:

Table: distributions
Distribution         | Version         | Section \requis| depot                         | architecture | commentaires 
Linux Mint 17.3 Rosa | rosa            | main     \   1 | packages.linuxmint.com        | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | rosa            | upstream  \  1 | packages.linuxmint.com        | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | rosa            | import     | 1 | packages.linuxmint.com        | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | rosa            | main       | 1 | extra.linuxmint.com           | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty          | main       | 1 | archive.ubuntu.com/ubuntu     | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty          | restricted | 0 | archive.ubuntu.com/ubuntu     | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty          | universe   | 1 | archive.ubuntu.com/ubuntu     | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty-updates  | main       | 1 | archive.ubuntu.com/ubuntu     | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty-updates  | restricted | 1 | archive.ubuntu.com/ubuntu     | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty-updates  | universe   | 1 | archive.ubuntu.com/ubuntu     | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty-security | main       | 1 | security.ubuntu.com           | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty-security | restricted | 0 | security.ubuntu.com           | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty-security | universe   | 1 | security.ubuntu.com           | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty-security | multiverse | 1 | security.ubuntu.com           | deb-i386 deb-amd64 | 
Linux Mint 17.3 Rosa | trusty          | partner    | 1 | archive.canonical.com/ubuntu/ | deb-i386 deb-amd64 | 

L'intérêt de l'automatisation serait aussi la possibilité de gérer tous les miroirs locaux des distributions (dépôts fr, de…), car à la main c'est infaisable. Il faudrait donc aussi gérer une table "miroirs".

Voilà à peu près où j'en suis dans la réalisation (pas très loin…)

  • # J'avance

    Posté par  (site web personnel) . Évalué à 1.

    Dans mon code j'ai un petit problème. Je demande à l'utilisateur d'entrer des nombre, mais si celui-ci met une autre valeur je reçois un message d'erreur. Je pensais qu'en cas d'erreur, le bloc except qui serait exécuté.

    Il y a trop de choses dans mon bloc try?..
    ```

    distri=[]
    message='Vous avez choisi:\n'
    while 1:
      choix=input('Choisissez une ou plusieurs distribution(s): ') or 'aucun'
      try:
        choix_lst=choix.split(' ')
        for num in choix_lst :
          print(num)
          distri.append(listedistri[int(num)-1])
          message+=listedistri[int(num)-1] + '\n'
        print(message)
        break
      except:
        print('La réponse saisie est incorrecte, veuillez indiquer uniquement des nombres compris\
    \nentre 1 et ' + str(i-1)) + 'et séparés par un espace.'
    '''
    

    Un LUG en Lorraine : https://enunclic-cappel.fr

    • [^] # Re: J'avance

      Posté par  . Évalué à 1.

      c'est ton print qui vas pas

      print('La réponse saisie est incorrecte, veuillez indiquer uniquement des nombres compris\
      \nentre 1 et %i et séparés par un espace.' % len(listedistri))

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.