#!/usr/bin/perl

$version = "13";

# sert à l'automatisation des updates du côté serveur
if ($#ARGV == 0) {
	if ($ARGV[0] eq "v") {
		print "$version";
		exit;
	}
}



$id=`whoami`;
chomp $id;
if ($id ne "root") {
	print "Il faut être 'root' pour pouvoir installer la configuration standard\n";
	exit;
}



# vérifier que wget est installé
#	wget est un programme qui permet de télécharger des fichiers,
#	avec les protocoles http et ftp,
#	en ligne de commande
# sinon terminer le script avec un message d'erreur

$nom_programme = "wget";
# trouver l'exécutable
$chemin_executable = `which $nom_programme 2>/dev/null`;
# supprimer la sortie erreur (2) 
# (en la redirigeant vers le fichier "trou noir" /dev/null)
# car elle n'est pas redirigée par la syntaxe ``
# et serait affichée pendant l'exécution de ce script
# ce qui serait désagréable
# voir script sortie_erreur2
chomp $chemin_executable;
# vérifier qu'il existe
if ($chemin_executable eq "") {
	print "\n$nom_programme n'est pas un exécutable dans un des répertoires du \$PATH\n\n";
	print "\nSTADARDISATION NON EFFECTUEE !\n\n";
	exit;
}



$serveur_local30 = "192.168.30.130";
$serveur_internet = "epfc.nooware.net";


$serveur_local30_accessible = `ping -c 1 $serveur_local30 > /dev/null && echo -n true`;
# on exécute un ping, limité à une requète, et dont on supprime l'affichage
# si cette commande ping s'exécute sans erreur (&&) on affiche 'true'
if ($serveur_local30_accessible eq "true") {
# si le serveur du local 30 est accessible
	$serveur = $serveur_local30;

	$hdnb = shift;
	# pour installation initiale dans le local 30 : paramètre = numéro du disque dur
	chomp $hdnb;

	$nom_du_script = $0;
	$nom_du_script =~ s/\.\///;
	if ($nom_du_script eq "csv.init") {
# cette partie du script (jusqu'à la ligne  111) ne sert qu'en cas d'utilisation 'manuelle' du script
# ce qui ne se fait normalement que juste après une nouvelle installation d'une distribution
# et téléchargement manuel du fichier 'csv.init'
	# si le script a été exécuté sous le nom 'csv.init'
	# (au lieu de 'csv' normalement)
	# c'est une installation initiale
	# et il faut donner le numéro du disque
	# si on donne '0', on déclenche un installation locale (partielle)(complète) 
	# (avec un (pseudo) numéro de disque attribué par le serveur du local 30,
	# s'il est accessible) 
	# sinon le numéro de disque doit être compris entre 100 et 200
		if ($hdnb !~ /^\d+$/) {
			print "$hdnb n'est pas un nombre ";
			print "\n";
			print "l'argument doit être 0 ou un nombre de 100 à 200";
			print "\n";

			exit;
		}
		
		if ($hdnb == 0) {
			print "Si vous voulez utiler votre ordinateur au local 30, ";
			print "\n";
			print "il faut donner votre nom de famille en minuscules, ";
			print "\n";
			print "(sans espaces ni ponctuations) :";
			$name = <STDIN>;
			chomp $name;
			if ($name eq "") {
				$name = "NONE";
			}
			system("echo -n $name > /etc/.name");
			$option = "l";
			# option locale
			
		} else {
			
			if ($hdnb > 200) {
				print "$hdnb est supérieur à 200";
			print "\n";
				print "l'argument doit être un nombre de 100 à 200";
			print "\n";
				exit;
			}
			
			if ($hdnb < 100) {
				print "$hdnb est inférieur à 100";
			print "\n";
				print "l'argument doit être un nombre de 100 à 200";
			print "\n";
				exit;
			}
		
			$option = "c";
			# option complète
		}
		system("echo -n $hdnb > /etc/hd.nb");
# fin du cas d'utilisation 'manuelle' du script
	} else {
	# cas normal d'utilisation du script
	# lorsqu'il est installé dans /usr/local/bin
	# la plupart du temps en mode 'automatique' à partir du fichier /etc/rc.local
		$hdnb = `/bin/cat /etc/hd.nb`;
		if ($hdnb eq "") {
			$option = "l";
			# option locale
		} else {
			$option = "c";
			# option complète
		}
	}

} else {
	$serveur_internet_accessible = `ping -c 1 $serveur_internet > /dev/null && echo -n true`;
	if ($serveur_internet_accessible eq "true") {
	# si le serveur internet est accessible
		$serveur = "$serveur_internet";
		$option = "i";
		# toujours partielle
	} else {
		print "\nPas de serveur accessible !\n\n";
		print "\nSTADARDISATION NON EFFECTUEE !\n\n";
		exit;
	
	}
}
# 
# if ( "$option" ne "i") {
# 	$ifexad = "/usr/tmp/.exa";
# 	$ifexa = "$ifexad/exa~";
# 	if ( ! -d "$ifexad" ) {
# 		system("/bin/mkdir $ifexad");
# 		# créer si n'existe pas
# 		system("/bin/chmod 777 $ifexad");
# 		# le rendre accessible à tous
# 	} elsif ( -f "$ifexa" ) {
# 		system("/bin/rm $ifexa");
# 		# supprimer la version installée
# 	}
# 	system("/usr/bin/wget --directory-prefix=$ifexad http://$serveur/exa~");
# 	# télécharger la version du serveur
# 	system("/bin/chmod 666 $ifexa");
# 	# la rendre modifiable par tous
# }

if ($param eq "-") {
	exit;
}

$installed_version = `/bin/cat /etc/cs.version`;
# version de cs actuellement installée
system("/bin/cp /etc/cs.version /etc/cs.version.atboot");
# la sauvegarder dans le fichier '/etc/cs.version.atboot'

if ( -f "/etc/cs.version.server" ) {
	system("/bin/rm -f /etc/cs.version.server");
}
# télécharger le fichier et le mettre dans le répertoire /etc
system("/usr/bin/wget --directory-prefix=/etc http://$serveur/cs.version.server");

$server_version = `/bin/cat /etc/cs.version.server`;
# version de cs actuellement sur le serveur

if ( "$server_version" eq "") {
	print "\ncsv\n";
	print "\nVersion serveur de cs pas accessible !\n\n";
	print "\nSTADARDISATION NON EFFECTUEE !\n\n";
	exit;
}


if ( "$installed_version" ne "$server_version") {
# si les versions de cs ne sont pas identiques
	if ( -f "/usr/local/bin/cs" ) {
		system("/bin/rm -f /usr/local/bin/cs");
		# supprimer la version installée
	}
	system("/usr/bin/wget --directory-prefix=/usr/local/bin http://$serveur/cs");
	# télécharger la version du serveur
	system("/bin/chmod +x /usr/local/bin/cs");
	# la rendre exécutable
	print "\ncsv : cs $option\n";

	system("/usr/local/bin/cs $option");
	# exécuter cs, avec l'option $option

	if ($hdnb !~ /^0/) {
	# si c'est un disque tiroir dans le local 30
		system("/usr/local/bin/net.sh");
		# réinitialiser la configuration réseau
	}

}

if (($hdnb eq "0") and ($serveur_local30_accessible eq "true")) {
# si c'est un portable 'non recongiguré'
# et que le serveur du local 30 est accessible
	system("/usr/local/bin/atl");
	# exécuter atl (en étant que 'root')
	# pour attribuer un (pseudo) numéro de disque
  
}

