# mod/mtn.py
import cfg
import inc.infos as infos
import inc.mpc as mpc
import mod.commun as commun
# variables externes utilisées dans ce module
# fichierVERSION
# DIR_JK
# variables externes utilisées dans ce module
# DIR_JK
# MACHINE_DEV_1
# MACHINE_DEV_2
def bak_backup():
""" sauvegarde complète en local dans /opt/jk2019.bak """
# on incrémente automatiquement la version
# 791, mardi 25 février 2020, 11 heure 12
mpc.ferme_ton_clapet()
cmd = "head -1 /opt/jk2019/tout/VERSION.txt | cut -f1 -d','"
nouvelleVersion = int(mpc.sub_proc(cmd)) + 1
cmd = "echo {}, $(date '+%A %e %B %Y, %_H heure %M') > /tmp/jk2019_version_B_nouvelle".format(nouvelleVersion)
mpc.sub_proc(cmd)
cmd = "cp /opt/jk2019/tout/VERSION.txt /tmp/jk2019_version_A_actu.txt"
mpc.sub_proc(cmd)
cmd = "cat /tmp/jk2019_version_B_nouvelle /tmp/jk2019_version_A_actu.txt > /opt/jk2019/tout/VERSION.txt"
mpc.sub_proc(cmd)
cmd = "cp /tmp/jk2019_version_B_nouvelle /tmp/derVersion.txt"
mpc.sub_proc(cmd)
# cmd = "rm /tmp/jk2019_version_B_nouvelle /tmp/jk2019_version_A_actu.txt"
# mpc.sub_proc(cmd)
# créer le dossier de sauvegarde, /opt/jk2019.bak/<date_du_jour>
src = cfg.DIR_JK
from time import localtime, strftime
# date_fichier = strftime("%Y%m%d_%H%M%S", localtime())
date_Ymd = strftime("%Y%m%d", localtime())
dst_horo = cfg.DIR_JK + ".bak/" + date_Ymd
mpc.sub_proc("sudo mkdir -p {0}; sudo chmod -R 777 {0}".format(dst_horo))
# sauvegarde fichiers annexes
bak_DEV = "{}/misc/sauvegardes_DEV".format(src)
mpc.sub_proc("sudo rm -rf {} 2>/dev/null".format(bak_DEV))
mpc.sub_proc("sudo mkdir -p {}".format(bak_DEV))
tmpBAK = "/tmp/bak_jk2019_"
mpc.sub_proc("tree /m > {}tree_m.txt".format(tmpBAK))
mpc.sub_proc("du -hsc /m > {}du_m.txt".format(tmpBAK))
mpc.sub_proc("tree {} > {}tree_opt_jk2019.txt".format(src, tmpBAK))
mpc.sub_proc("du -hsc {} > {}du_opt_jk2019.txt".format(src, tmpBAK))
mpc.sub_proc("sudo mv {}*txt {}".format(tmpBAK, bak_DEV))
# TODO en cours : bak_restore.sh, ligne 65
mpc.sub_proc("sudo cp /etc/mpd.conf {}".format(bak_DEV))
mpc.sub_proc("sudo cp /home/pi/.profile {}/_.profile".format(bak_DEV))
mpc.sub_proc("sudo chmod -R 777 {}".format(bak_DEV))
date_Ymd_HM = strftime("%Y%m%d_%Hh%M", localtime())
hostname_1 = mpc.sub_proc("hostname")
bak_file = dst_horo + "/" + date_Ymd_HM + "_sur_" + hostname_1 + ".tgz"
infos.m_g("suppression des __pycache__ dans {}".format(src))
mpc.sub_proc("find " + src + " -type d -name \"__pycache__\" -exec rm -rf {} \;")
# compression des fichiers
cmd = "tar zcvf {} {} >/dev/null 2>&1".format(bak_file, src)
infos.m_g(cmd)
mpc.sub_proc(cmd)
bak_local = src + ".bak"
mpc.sub_proc("sudo mkdir -p {0} > /dev/null; sudo chmod -R 777 {0}".format(bak_local))
mpc.sub_proc("cp {} {}/jk2019.tgz".format(bak_file, dst_horo))
mpc.sub_proc("mv /tmp/derVersion.txt {}".format(dst_horo))
masque = "sauvegarde locale terminée, uploader {}/jk2019.tgz " + \
"vers ftp://.../jj/jk2019 pour màj avec 4 puis 88"
infos.m_g (masque.format(dst_horo))
masque = "mettre à jour jk2019.tgz et derVersion.txt dans http://gangand.net/jj/jk2019"
infos.m_g (masque.format(dst_horo))
masque = "la restauration est possible avec 4 puis 99"
infos.m_g (masque.format(dst_horo))
masque = "4 = module maintenance, 88 = restauration"
infos.m_g (masque.format(dst_horo))
msg = "sauvegarde locale terminée"
infos.pdrNew(msg)
def bak_restor():
""" vérifie quelques paramètres avant la restauration """
mpc.ferme_ton_clapet()
# vérifier le hostname
hostname_1 = mpc.sub_proc("hostname")
# if hostname_1 in [ cfg.MACHINE_DEV_1, cfg.MACHINE_DEV_2 ]:
if hostname_1 == cfg.MACHINE_DEV_1:
infos.pdrNew("On est sur " + hostname_1 + ", la machine maître de développement")
infos.pdrNew("Taper 1199 puis Entrée pour restorer")
# infos.pdrNew("Pas de restauration mais ...")
continuer = input("Taper 1199 puis Entrée pour restorer")
if continuer == "1199":
infos.pdrNew("Restauration demandée en cours")
bak_restor_GO()
else:
infos.pdrNew("Restauration abandonnée")
elif hostname_1 == cfg.MACHINE_DEV_2:
infos.pdrNew("On est sur " + hostname_1 + ", la machine secondaire développement")
infos.pdrNew("Restauration possible en forçant avec 1199 puis entrée")
continuer = input("Taper 1199 puis Entrée pour forcer la mise à jour")
if continuer == "1199":
bak_restor_GO()
else:
infos.m_g("Restauration abandonnée")
else:
infos.m_g("On est sur " + hostname_1 + ", restauration possible")
def bak_restor_GO(): # restaurer /opt/jk2109 partout sauf sur machine_de_DEV
# entrée : variable MACHINE_DEV_1, MACHINE_DEV_2
# nettoyer dossier temporaire de téléchargement
dest = "/tmp/decomp_jk2019"
mpc.sub_proc("rm -rf " + dest + " 2>/dev/null")
mpc.sub_proc("mkdir " + dest)
# rappel :
# ONLINE_BACKUP_dir=http://gangand.net/jj/jk2019
# ONLINE_BACKUP_file=jk2019.tgz
url_online_backup = cfg.ONLINE_BACKUP_dir + "/" + cfg.ONLINE_BACKUP_file
infos.m_g("Téléchargement de la dernière màj (sauvegarde)")
infos.m_g("cd " + dest + "; wget " + url_online_backup)
mpc.sub_proc("cd " + dest + "; wget " + url_online_backup)
if commun.file_exists(dest + "/" + cfg.ONLINE_BACKUP_file) == False:
msg = "Problème de téléchargement du fichier de sauvegarde"
infos.pdrNew(msg)
else:
infos.m_g("bak_restor_GO(), pas DUMMY")
infos.m_g("cd " + dest + "; tar zxf " + cfg.ONLINE_BACKUP_file)
mpc.sub_proc("cd " + dest + "; tar zxf " + cfg.ONLINE_BACKUP_file)
infos.m_g("cd " + dest + "; rm " + cfg.ONLINE_BACKUP_file)
mpc.sub_proc("cd " + dest + "; rm " + cfg.ONLINE_BACKUP_file)
mpc.stop()
infos.m_g("sudo rm -rf " + cfg.DIR_JK)
mpc.sub_proc("sudo rm -rf " + cfg.DIR_JK)
infos.m_g("cd " + dest + "/opt/; sudo mv jk2019 /opt")
mpc.sub_proc("cd " + dest + "/opt/; sudo mv jk2019 /opt")
infos.m_g("sudo chmod -R 777 " + cfg.DIR_JK)
mpc.sub_proc("sudo chmod -R 777 " + cfg.DIR_JK)
cmd = "rm -rf " + cfg.DIRE_FILE_ATTENTE
infos.m_g(cmd)
mpc.sub_proc(cmd) # sinon message au reboot 1199 ...
infos.m_g("sudo shutdown -r now")
mpc.sub_proc("sudo shutdown -r now")
def memo_stop_module():
""" quitter module (touche 0) : mémoriser où on est """
pass
def menu_voc11():
""" menu spécial aba """
commun.menu_vocal("mtn_special11", "maintenance")
def reprendre():
""" lancer le module maintenance """
infos.ini_set("py_current_module", "mtn")
msg = "module maintenance"
mpc.stop()
mpc.ferme_ton_clapet()
espace_libre = ("df /m | tail -1 | awk '{print $4}'")
espace_total = ("df /m | tail -1 | awk '{print $2}'")
libre = mpc.sub_proc(espace_libre)
total = mpc.sub_proc(espace_total)
msg += ", espace libre sur /m, " + str(int(int(libre)/1024)) + " méga octets"
msg += ", espace total , " + str(int(int(total)/1024)) + " méga octets"
infos.pdrNew(msg)
def version_current():
""" version xavbox en cours
"""
with open(cfg.fichierVersion) as fileVersion:
version_actu = fileVersion.readlines()[0].strip()
return version_actu
def version_update():
""" version mise à jour en ligne disponible
"""
# rappel
# ONLINE_BACKUP_dir = "http://gangand.net/jj/jk2019"
# http://gangand.net/jj/jk2019/derVersion.txt
# contenu type :
# 833, mercredi 10 juin 2020, 11 heure 17
dest = "/tmp/version_update"
mpc.sub_proc("rm -rf " + dest + " 2>/dev/null")
mpc.sub_proc("mkdir " + dest)
cmd = "cd " + dest + "; wget " + cfg.ONLINE_BACKUP_dir + "/derVersion.txt"
mpc.sub_proc(cmd)
with open(dest + "/derVersion.txt") as fileVersion:
version_maj_ligne = fileVersion.readlines()[0].strip()
return version_maj_ligne.split(",")[0]
if __name__ == "__main__":
print("Bienvenue dans le module mtn (maintenance)")