Bon, voilà, c'est terminé (enfin je crois...) 😃
[center]Script pour mettre à jour la liste des mises à jour automatiques en ajoutant le ppa[/center]
Installation:
0- Depuis le 3/10/2014: ce script est dispo dans un ppa (12.04 / 14.04 / 14.10):
sudo apt-add-repository ppa:yoggic/maj-auto
sudo apt-get update
sudo apt-get install apt-add-repository-auto
Ou méthode manuelle:
1- créer un dossier maj-auto dans /usr/share/
sudo mkdir /usr/share/maj-auto
2- créer le fichier avec gedit (pour moi c'est kate, mais ça peut-être leafpad ou un autre éditeur)
gksudo gedit /usr/share/maj-auto/add-apt-repository-auto.py
3- coller ces lignes de code, puis enregistrer.
#!/usr/bin/python
# -*- coding: utf-8 -*-
#########################################################################################
####### apt-add-repository-auto.py v 1.0 ############
####### permet de mettre à jour /etc/apt/apt.conf.d/50unattended-upgrade ############
####### à l'ajout d'un ppa ############
#########################################################################################
import sys
import platform
import subprocess
import shutil
import os
import time
#subprocess.call("clear", shell=True) # permet d'effacer le terminal (pour les tests)
# aide
usage = """Usage: apt-add-repository-auto <sourceline>
apt-add-repository-auto est un script pour ajouter les ppa
dans la liste des entrées, et pour ajouter le ppa aux mises
à jour automatiques.
<sourceline> - Un répertoire du ppa à ajouter.
Exemple:
apt-add-repository-auto ppa:user/repository
Options:
-h, --help afficher cette aide et sortir
-r, --remove retirer le dépôt du répertoire sources.list.d et de la liste maj_auto
-y, --yes Répondre « oui » à toutes les requêtes"""
# recherche du code distribution
distrib=platform.dist()
code_name = distrib[2]
# recherche du home
user = os.getenv("SUDO_USER")
try:
home = "/home/" + user
except:
print "Ce programme doit s'exécuter avec 'sudo'"
exit()
# extraction de(s) argument(s)
arguments = sys.argv
nbr_arg = len(sys.argv)-1
if nbr_arg == 0:
print usage
exit()
if nbr_arg >= 1:
arg1 = sys.argv[1]
if "ppa:" in arg1 and "/" in arg1:
if "-r" in arg1 or "-y" in arg1 or "--yes" in arg1 or "--remove" in arg1:
print "Vérifiez votre syntaxe."
print "'apt-add-repository-auto -h' pour afficher l'aide"
exit()
ppa_ini = arg1
elif arg1 == "--help" or arg1 == "-h":
print usage
exit()
elif arg1 == "--yes" or arg1 == "-y":
silent = 1
elif arg1 == "--remove" or arg1 == "-r":
remove = 1
else:
print "Vérifiez votre syntaxe."
print "'apt-add-repository-auto -h' pour afficher l'aide"
exit()
if nbr_arg >= 2:
arg2 = sys.argv[2]
if "ppa:" in arg2 and "/" in arg2:
ppa_ini = arg2
elif arg2 == "--yes" or arg2 == "-y":
silent = 1
elif arg2 == "--remove" or arg2 == "-r":
remove = 1
if nbr_arg == 3:
arg3 = sys.argv[3]
if arg3 == "--remove" or arg3 == "-r":
remove = 1
elif "ppa:" in arg3:
ppa_ini = arg3
elif arg3 == "--yes" or arg3 == "-y":
silent = 1
else:
remove = 0
silent = 0
if nbr_arg > 3:
print "Vérifiez votre syntaxe."
print "'apt-add-repository-auto -h' pour afficher l'aide"
exit()
try:
ppa_ini
except:
print "Aucun PPA renseigné."
print "'apt-add-repository-auto -h' pour afficher l'aide"
exit()
try:
remove
except:
remove = 0
try:
silent
except:
silent = 0
# vérification root
if os.getuid() == 0:
pass
else:
print("Erreur : doit être exécuté en tant que super-utilisateur (root)")
exit()
# main
a = 0
b = 0
ver = 0
if remove == 0:
print "Ajout du ppa " + ppa_ini + " dans la liste des mises à jour automatique et dans la liste des ppa."
# construction du nouveau fichier 50unattended-upgrade.temp
lookup = '};'
unat = open("/tmp/50unattended-upgrades.temp", "w")
unat.close()
unat = open("/tmp/50unattended-upgrades.temp", "a")
with open("/etc/apt/apt.conf.d/50unattended-upgrades", "r") as fichier_ppa:
for num, line in enumerate(fichier_ppa, 1):
a = a+1
if lookup in line:
break
else:
unat.write(line)
ppa = ppa_ini.replace("/", "-")
ppa = ppa[4:]
ajout = '"LP-PPA-' + ppa + ':' + code_name + '";'
unat.write(ajout)
unat.write("\n")
#lookup2 = '//Acquire::http::Dl-Limit "70";'
with open("/etc/apt/apt.conf.d/50unattended-upgrades", "r") as fichier_ppa:
for num, line2 in enumerate(fichier_ppa, a):
b = b+1
if b>a-1:
unat.write(line2)
unat.close()
print "Ajout du ppa dans la liste de mises à jour automatique terminé."
time.sleep(1)
# copie de 50unattended-upgrade.temp vers /etc/apt/apt.conf.d
shutil.copy2("/tmp/50unattended-upgrades.temp", "/etc/apt/apt.conf.d/50unattended-upgrades")
shutil.copy2("/tmp/50unattended-upgrades.temp", home + "/.savunattended/last.bak")
os.remove("/tmp/50unattended-upgrades.temp")
# ajout du ppa dans list.d
cmd = "apt-add-repository " + ppa_ini
if silent == 1:
cmd = "apt-add-repository --yes " + ppa_ini
subprocess.call(cmd, shell=True)
elif remove == 1:
print "Suppression de " + ppa_ini + " de la liste des mises à jour automatique et de la liste des ppa."
lookup = ppa_ini[4:]
lookup = lookup.replace("/", "-")
lookup = lookup.replace("-ppa","")
unat = open("/tmp/50unattended-upgrades.temp", "w")
unat.close()
unat = open("/tmp/50unattended-upgrades.temp", "a")
with open("/etc/apt/apt.conf.d/50unattended-upgrades", "r") as fichier_ppa:
for num, line in enumerate(fichier_ppa, 1):
a = a+1
if lookup in line:
ver = 1
pass
else:
unat.write(line)
unat.close()
# copie de 50unattended-upgrade.temp vers /etc/apt/apt.conf.d
if ver == 1:
shutil.copy2("/tmp/50unattended-upgrades.temp", "/etc/apt/apt.conf.d/50unattended-upgrades")
shutil.copy2("/tmp/50unattended-upgrades.temp", home + "/.savunattended/last.bak")
os.remove("/tmp/50unattended-upgrades.temp")
print "Le ppa a été enlevé de la liste des mises à jour automatique."
else:
print "Aucun ppa de ce nom n'a été trouvé dans la liste des mises à jour automatiques."
time.sleep(1)
# suppression du ppa de list.d
cmd = "apt-add-repository --remove " + ppa_ini
if silent == 1:
cmd = "apt-add-repository --remove --yes " + ppa_ini
subprocess.call(cmd, shell=True)
4- Fermer gedit
5- rendre le script exécutable:
sudo chmod +x /usr/share/maj-auto/add-apt-repository-auto.py
6- créer les liens symboliques (les deux existent, je l'ai découvert)
sudo ln -s /usr/share/maj-auto/add-apt-repository-auto.py /usr/bin/add-apt-repository-auto
sudo ln -s /usr/share/maj-auto/add-apt-repository-auto.py /usr/bin/apt-add-repository-auto
Usage:
apt-add-repository-auto --help
Et ensuite c'est bon, la liste des maj auto est mise à jour automatiquement si on met -auto à la commande habituelle (sans espace).
sudo apt-add-repository-auto ppa:exemple
Pour enlever un ppa:
sudo apt-add-repository-auto --remove ppa:exemple
On peut utiliser la commande sans -auto pour un ajout normal: la liste des maj_auto ne sera pas actualisée.
sudo apt-add-repository ppa:exemple
Voilà! 🙂
ps: c'est la version 0.1, ça peut-être un peu instable (cascadeurs seulement). J'ai essayé 3 ou 4 ppa, ça a l'air de fonctionner.
En attendant le paquet, ou le ppa maj_auto.