Commit 3b54e54c authored by jocelyn's avatar jocelyn

cible auto_install pour setup.py = install automatique

git-svn-id: file:///mnt/marvin-var/svn/magneto/trunk@90 f61d8a82-367e-4513-8f0b-2a88b49b8d76
parent d37700bf
......@@ -183,7 +183,8 @@ class TvCard(SQLObject):
#TODO: vrai scan (ici: valeurs bidons).
return (503250, 2000, 3000)
@classmethod
def get_a_free(cls, start_date, duration):
"""Renvoie une carte disponible pour une date et durée donnée"""
......
......@@ -6,6 +6,8 @@ import sys
import shutil
import pexpect
import telnetlib
import re
import random
from setuptools import setup, find_packages, Command
import psycopg
......@@ -13,6 +15,20 @@ import psycopg
def draw_line():
print "-" * 78
#TODO: créer utilisateur unix
### Quelques constantes ###
EXAMPLE_CONF="./doc/conf.py.example"
EXAMPLE_LIGHTY_MODULE="./doc/httpd-conf-examples/lighttpd/20-magneto-cgi.conf"
UTILS = [i for i in os.listdir('utils') if i.endswith(".py")]
INPLACE_UTILS_PATH ="/usr/bin"
INPLACE_CONF="/etc/magneto/conf.py"
INPLACE_SHARE_PATH="/usr/share/magneto"
LIGHTY_MODULES="/etc/lighttpd/conf-available"
###
class MagnetoCommand(Command):
user_options = []
......@@ -27,7 +43,7 @@ class MagnetoCommand(Command):
pass
class ChekcBinaryDeps(MagnetoCommand):
description = "Vérifie les dépendances binaires (comme vlc)"
description = "Vérifie les dépendances binaires."
def run(self):
draw_line()
......@@ -38,51 +54,86 @@ class ChekcBinaryDeps(MagnetoCommand):
if os.path.exists('/usr/bin/vlc'):
# and 'VLC 0.9' in os.popen('vlc --version').read():
print 'OK'
else: print "!! VLC non trouvé"
else: print "FAILED\n!! VLC non trouvé"
print "cron: ",
if os.path.exists('/usr/bin/crontab'): print 'OK'
else: print "!! Cron est requis"
else: print "FAILED\n!! Cron est requis"
print "sudo: ",
if os.path.exists('/usr/bin/sudo'): print 'OK'
else: print "!! sudo est requis"
else: print "FAILED\n!! sudo est requis"
print "PostgreSQL: ",
try:
telnetlib.Telnet('localhost','postgresql')
print "OK"
except: print "!! Postgresql n'est pas installé ou n'écoute pas sur le réseau"
except: print "FAILED\n!! Postgresql n'est pas installé ou n'écoute pas sur le réseau"
draw_line()
return 1
class SetupLighty(MagnetoCommand):
description = "Configure lighttpd pour magneto"
def run(self):
LIGHTY_MODULES='/etc/lighttpd/conf-available'
EXAMPLE_CONF='./doc/httpd-conf-examples/lighttpd/20-magneto-cgi.conf'
if os.path.exists(LIGHTY_MODULES):
print "Installation du module de conf 20-magneto-cgi.conf"
shutil.copy(EXAMPLE_CONF, LIGHTY_MODULES)
shutil.copy(EXAMPLE_LIGHTY_MODULE, LIGHTY_MODULES)
os.system("lighty-enable-mod magneto-cgi")
os.system("/etc/init.d/lighttpd restart")
else:
print "ATTENTION: pas d'installation de lighttpd détectée"
class UnInstall(MagnetoCommand):
description = "Désinstalle magneto (le fichier de conf reste, les données aussi)"
def rm(self, a_file, force=False):
if force:
opt = "-rf"
else:
opt = ""
print "Removing %s" % a_file
os.system("rm %s %s" % (opt, a_file))
def run(self):
draw_line()
print "Suppression de magneto"
draw_line()
print "Suppression de la configuration lighttpd"
self.rm(os.path.join(LIGHTY_MODULES, os.path.basename(EXAMPLE_LIGHTY_MODULE)))
os.system("lighty-disable-mod magneto-cgi")
os.system("/etc/init.d/lighttpd restart")
draw_line()
print "Suppression des binaires"
for util in UTILS:
self.rm(os.path.join(INPLACE_UTILS_PATH, util))
draw_line()
print "Suppression des bibliothèque python"
self.rm("/usr/lib/python*/site-packages/magneto*", True)
draw_line()
print "Suppression des données statiques"
self.rm(INPLACE_SHARE_PATH, True)
draw_line()
print "Terminé"
class InstallConf(MagnetoCommand):
description = "Installe le fichier de configuration de magneto dans /etc/magneto/conf.py"
def run(self):
conf_dir = '/etc/magneto'
conf_file = 'conf.py'
conf_path = conf_dir + '/' + conf_file
conf_dir = os.path.dirname(INPLACE_CONF)
if not os.path.exists(conf_dir):
os.mkdir(conf_dir)
shutil.copy('./doc/conf.py.example', conf_path)
print "%s installé" % conf_path
shutil.copy(EXAMPLE_CONF, INPLACE_CONF)
print "%s installé" % INPLACE_CONF
class MakeDirs(MagnetoCommand):
description = "Crée les répertoires nécessaires au fonctionnement de magneto (ex: répertoire des vidéos)."
......@@ -188,6 +239,7 @@ class BuildDb(MagnetoCommand):
print "Les tables ont été créées."
root_dir = 'share'
data_files = []
for dirpath, dirnames, filenames in os.walk(root_dir):
......@@ -196,14 +248,65 @@ for dirpath, dirnames, filenames in os.walk(root_dir):
else:
data_files.append((dirpath, [os.path.join(dirpath, f) for f in filenames]))
all_utils = ['utils/'+i for i in os.listdir('utils') if i.endswith(".py")]
class SetUpCards(MagnetoCommand):
description = "Détecte les cartes et les chaines"
def run(self):
from magneto.core import models
print "Détection des cartes"
draw_line()
for card in models.TvCard.discover_cards():
print "Carte détectée : %s" % card
draw_line()
print "Détection des chaînes"
draw_line()
for channel in models.TvChannel.scan_available():
print "Chaîne ajoutée : %s" % channel
class AutoInstall(MagnetoCommand):
description = "Installe magneto via un assistant"
def replace_in_conf(self,key,val,conf):
reg = re.compile('#?\s*%s=\w*$' % key)
return reg.sub('%s="%s"'% (key,val),conf)
def run(self):
check_bin = os.popen("./setup.py check_binary_deps").read()
print check_bin
if "FAILED" in check_bin:
return -1
if os.system("./setup.py install") != 0:
pass#return -1
if os.system("./setup.py install_data") != 0:
return -1
if os.system("./setup.py install_conf") != 0:
return -1
draw_line()
conf = open(INPLACE_CONF).read()
print "Sur quel Vhost souhaitez-vous utiliser magneto ?"
vhost = raw_input("HOSTNAME=")
conf = self.replace_in_conf('HOSTNAME', vhost, conf)
conf = self.replace_in_conf('DB_PASSWD', random.randint(0,3000000), conf)
open(INPLACE_CONF, 'w').write(conf)
draw_line()
if os.system("./setup.py make_dirs") != 0:
return -1
if os.system("./setup.py setup_lighty") != 0:
return -1
if os.system("./setup.py build_db") != 0:
return -1
if os.system("./setup.py setup_tv") != 0:
return -1
#############################
### Méta-données
############################
setup(
name = "magneto",
version = "0.1",
packages = find_packages(),
scripts = all_utils,
scripts = ['utils/'+i for i in UTILS],
install_requires = ['sqlobject>=0.3', 'jinja'],
data_files = data_files,
......@@ -221,6 +324,9 @@ setup(
"setup_lighty": SetupLighty,
"make_dirs": MakeDirs,
"build_db": BuildDb,
"check_binary_deps": ChekcBinaryDeps
"remove": UnInstall,
"check_binary_deps": ChekcBinaryDeps,
"setup_tv": SetUpCards,
"auto_install": AutoInstall
}
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment