#!/bin/sh
# /bin/instalar
# (C) 2005-2007 by Marcos Guglielmetti
# under GNU GPL v3 or later

# Este script funciona como un selector de instalador para musix
# entre el instalador de knoppix y kanotix
# y a la vez repara bugs que están originados en el siguiente hecho:
# el instalador de knoppix fue pensado para un debian unstable de hace
# unos años, mientras que estamos manejando un debian stable del 2007

# Por otro lado, el script crea archivos de debug en: /var/log/instalar-debug/
# dentro de la partición de destino.

	# ANSI COLORS
	CRE="
[K"
	NORMAL="[0;39m"
	# RED: Failure or error message
	RED="[1;31m"
	# GREEN: Success message
	GREEN="[1;32m"
	# BLUE: System messages
	BLUE="[1;34m"
	# MAGENTA: Found devices or drivers
	MAGENTA="[1;35m"
	# CYAN: Questions
	CYAN="[1;36m"
	# BOLD WHITE: Hint
	WHITE="[1;37m"

SATAHD="no"
lspci | grep SATA || lspci | grep "Serial ATA" && SATAHD="yes"

L=`echo $LANG | cut -b1-2`

#if grep "lang=es" /proc/cmdline  > /dev/null
if [ "$L" = "es" ]
then
ESPANOL="SI"
else
ESPANOL="NO"
fi

# Si tenemos discos SATA, recomendamos el de knoppix
recomendar=""
recomendaren=""
if [ "$SATAHD" = "yes" ]
then
recomendar="(recomendado)"
recomendaren="(recommended)"
fi


if [ "$ESPANOL" = "SI" ]
then

TXT="Elige entre:
1) Instalador de Knoppix $recomendar
2) Instalador de Kanotix (nuevo método)
-------------------------------------------

1) El instalador de Knoppix 
A favor: 
 * Está en castellano 
 
 * Posee además un actualizador de paquetes de software, es decir que
 te permite actualizar una vieja instalación de Musix. 

 * Brinda 3 tipos de instalación: knoppix, begginer y Debian. La
 primera instala el sistema y corre tal como desde el Live-CD, la
 segunda está más orientada al uso multiusuario y es bastante
 recomendable dado que el comportamiento es muy similar al del
 Live-CD, la tercera, Debian, suele lograr un reinicio más rápido del
 sistema, pero a veces se torna un poco complicada la detección de
 hardware, aunque ha mejorado mucho el proceso. En fin,
 cualquier método debería funcionar bien, y se recomienda
 experimentar con los 2 últimos. 

 

En contra: 
 * La tipografíaa, es decir la letra (font, fuente) con que muestra los
 textos, es confusa debido a un problema en el sistema de fuentes de
 Debian. Solamente se ve bien desde el escritorio KDE. Puedes
 iniciarlo desde KDE si inicias Musix con el argumento de booteo
 \"musix dma kdm\" o \"xorgmusix dma kdm\". 

 * No posee una forma sencilla de forzar la instalación ante la falla
 en la detección de las particiones cuando estas realmente existen. 

 
2) El instalador de Kanotix 
A favor: 

 * Todo se ve perfectamente bien 
 
 * Posee un modo que sirve para  restaurar una instalación mediante la
 reparación de GRUB 

 * Puedes forzar la instalación si crees que está todo bien y el
 instalador no detecta bien las particiones. Esto es muy útil cuando
 por ejemplo trabajando con discos SATA el sistema se niega a
 instalarse porque no detecta la partición SWAP o lo que fuere. Si se
 fuerza la instalación y todo el terreno estaba bien preparado, no
 tendrías problemas. 

En contra: 
 * Instala el sistema sólo al estilo Debian (algo que no está para nada
 mal, pero no posee otro estilo como el begginer o knoppix) 

 * Varias opciones no funcionan en Musix: por ejemplo, el actualizador
 de instalacón (Update...), la opción de puntos de montaje de otras
 particiones (solo funciona esta característica si se forza la
 instalación) 

 * No está en castellano, se encuentra en aleman e ingles."

else
# Texto en English
TXT="Choose:
  
1)  Knoppix's installer $recomendaren
2)  Kanotix's installer
-------------------------------------------

1) Knoppix installer

* It has a package-updater 
* Brings you 3 installation styles: knoppix, begginer and Debian
* Multiple language support

* The font is not pretty if you dont use the KDE desktop
* You can not force the installation in an easy way

 
2) Kanotix installer

* It looks fine, the text fonts are ok
* It can restore a damaged installation
* You can force the installation

* It has only a Debian style (not so bad!)
* The updater does not work on Musix
* The Partitioning options (Mountpoints of other partitions) only work if you Force the installation.
"


fi


export USAR_NLS=si
export TEXTDOMAIN=instalar
export TEXTDOMAINDIR="/etc/musix/locales"


#Contenido de config/encabezado :

. /etc/musix/funciones-i18n
[ -e /etc/musix/funciones ] && . /etc/musix/funciones

# Vemos si estamos en X o en consola
x=0
probar_X && x=1
if [ "$x" = "0" ]; then
echo "Estamos en entorno de consola de texto"
sleep 2s
knoppix-installer
exit
fi

# Si ya estï¿½ instalado, avisa y pregunta si quiere instalar nuevos programas con synaptic

	INSTALLED="no"
	[ -e /KNOPPIX/bin/ash ] || INSTALLED="yes"
	if [ "$INSTALLED" = "yes" ]
	then
	
	if [ "$ESPANOL" = "SI" ]
	then
	#puede ser -nearmouse o -center (o nada)
	pos="-nearmouse"
	_n "Musix ya esta instalado en el disco duro.
Quieres instalar nuevos programas?
	" | gmessage -title 'Musix GNU+Linux' -file - $pos -buttons $(_n "Si:0,No:2" ) -default $(_n "Si")
	if [ $? -eq 2 ]; then exit 2; fi
	
	else
	
	pos="-nearmouse"
	_n "Musix is already installed!
Do you want to install new applications?
	" | gmessage -title 'Musix GNU+Linux' -file - $pos -buttons $(_n "Yes:0,No:2" ) -default $(_n "Yes")
	if [ $? -eq 2 ]; then exit 2; fi
	
	fi


# inicia synaptic como root y sale
kdesu synaptic
exit

fi


# Nuevo en Musix 1.0/Stable r0
# Aquï¿½ vemos si estamos en inglï¿½s, el texto explicativo irï¿½ en inglï¿½s, caso contrario, espaï¿½ol




# Si elige el instalador de Knoppix, continua, sino carga knxinstaller
pos="-nearmouse"
_n "
$TXT

" | gmessage -title 'Installers' -file - $pos -buttons $( _n "Knoppix:1,Kanotix:2,Abortar:3,Ayuda:4" )

A="$?"

if [ "$A" = "3" ]; then exit 2; fi

if [ "$A" = "1" ] 
then 

if [ "$ESPANOL" = "SI" ]
then
echo $"${NORMAL}Este es el programa de instalacion de ${RED}Musix GNU+Linux${NORMAL}
Por favor, aguarde unos instantes... ${NORMAL} 
(no cierre esta ventana)"
else
echo $"${NORMAL} Please wait... dont close this window."
fi


knoppix-installer
	if [ "$?" = "1" ]
	then
	gmessage "Error... You can try with IGNORE_CHECK=1 knoppix-installer"
	konqueror /usr/local/lib/Ayuda/Ayuda026.html/www.musix.org.ar/wiki/index.php/Instalacion.html	
	exit
	fi

fi


if [ "$A" = "2" ] 
then 
knxinstaller
# Salimos... porque knxinstaller sale luego de que configura
# la instalaciï¿½n, y llama a xdialog, por lo cual 
# este script instalar comienza a hacer cambios
# TODO: sería bueno saber cómo resolver esto!!
# Porque hay que hacer cambios posteriores... quizá
# insertando esos parches en otros módulos del instalador...
# dado que knxinstaler usa en definitiva los módulos de knoppix-installer

exit
fi


if [ "$A" = "4" ] 
then 

if [ "$ESPANOL" = "SI" ]
then

konqueror /usr/local/lib/Ayuda/Ayuda026.html/www.musix.org.ar/wiki/index.php/Instalacion.html	
else

konqueror /usr/local/lib/Ayuda/Ayuda026.html/www.musix.org.ar/wiki/index.php/Hardware_Installation.html	

fi


exit
fi


# En caso de que knoppix-installer sea abortado antes de configurar...
# Si no existe este archivo de configuraciï¿½n, es porque no hemos ni siquiera
# configurado la instalaciï¿½n, por lo cual es mejor salir!
ls ~/.knofig || exit




# cambios posteriores
DESTINO=`cat ~/.knofig | grep HD_CHOICE= | cut -f2 -d"'" | cut -f3 -d"/"`

# NOTE: nuevo en Musix 1.0 R3
# si no existe /etc/musix-version en el destino, no 
# fue instalado, por lo cual salimos.
echo "montando /mnt/$DESTINO"
sleep 3s
mount /mnt/$DESTINO

ls /mnt/$DESTINO/etc/musix-version
if [ "$?" = "2" ]
then

if [ "$ESPANOL" = "SI" ]
then
echo "Musix no parece haber sido instalado en /mnt/$DESTINO
Saliendo...
"
else
echo "Musix does not seems to be installed on /mnt/$DESTINO
Quitting!
"
fi
read
exit

else
if [ "$ESPANOL" = "SI" ]
then
echo "Musix ha sido instalado en /dev/$DESTINO"
sleep 2s
else
echo "Musix installed on /dev/$DESTINO"
sleep 2s
fi
fi


# NOTE: Musix 1.0 R3, solucionando problemas con discos SATA
# con lspci | grep SATA || lspci | grep "Serial ATA" sabemos si existe una controladora SATA
# Notar que por suerte el menu.lst instalado sólo contiene
# información sobre Musix y en todo caso sobre Windows
# pero no sobre otro sistema operativo libre.
# NOTE: nuevo: he reformado /usr/sbin/update-grub para que
# cree bien el menu.lst (en caso de que no encuentre el dispositivo root),
# así que trabajaremos sólo
# con los fstab, pero dejaremos crear información de debug para todos
# incluso menu.lst, por las dudas

# NOTE: activando nuevamente para que funcione solamente con SATA

lspci | grep SATA || lspci | grep "Serial ATA"
if [ "$?" = "0" ]
then
if [ "$ESPANOL" = "SI" ]
then
echo "$RED Realizaremos
algunas modificaciones /etc/fstab y /boot/grub/menu.lst en la partición
donde Musix fue instalado. $NORMAL"
else
echo "$RED We will make some fixes to /etc/fstab and /boot/grub/menu.lst ...$NORMAL"
fi


# Primero: modificamos ### menu.lst ###

# Antes hago una copia de seguridad, NO sólo para debug
cp /mnt/$DESTINO/boot/grub/menu.lst /mnt/$DESTINO/boot/grub/menu.lst-orig

# Cambiando hda1 por la partición de destino real: $DESTINO
cat /mnt/$DESTINO/boot/grub/menu.lst | sed s/hda1/$DESTINO/g > /mnt/$DESTINO/boot/grub/menu.lst-temp
cp /mnt/$DESTINO/boot/grub/menu.lst-temp /mnt/$DESTINO/boot/grub/menu.lst
# Eso fue sencillo.

# Debemos cambiar (0,0) en las entradas de Musix, al número
# que corresponda a $DESTINO, para lo cual hay que hacer una tabla de equivalencias, 
# porque grub nomencla distinto que fstab



equiv_grub_letras="0:a
1:b
2:c
3:d
4:e
5:f
6:g
7:h
8:i
9:j"

# equiv_grub_num="0:1" no es necesario, porque simplemente hacemos un expr - 1 y listo.

# Transformando un sda2, por ejemplo, en 0,1, sería así:

primer_byte_fstab=`echo $DESTINO | cut -b 3` # esto da: a, b, etc
segundo_byte_fstab=`echo $DESTINO | cut -b 4` # esto da: 1, 2, etc
DESTINO_simple=`echo $DESTINO | cut -b 3-4` # esto da a2, por ejemplo.


# Ahora conseguimos la equivalencia entre la primer letra
# de la forma sda2 hacia el primer número que va en GRUB: NUM_GRUB
for linea in $(echo $equiv_grub_letras)
do
GREP_LETRA=`echo "$linea" | cut -f2 -d":"` # devuelve una letra en la tabla de equivalencias
NUM1_GRUB=`echo "$linea" | cut -f1 -d":"` # devuelve un numero en la tabla de equivalencias

echo $DESTINO_simple | grep $GREP_LETRA
if [ "$?" = "0" ]
then
echo "Para la letra $GREP_LETRA corresponde el número $NUM1_GRUB"
break # ojo que no sé si esto en algún caso puede hacer un exit !
# la idea es que solamente detenga el for.
fi

done

NUM2_GRUB=`expr $segundo_byte_fstab - 1` # ,1) o algo así.

# DEBUG:
echo "El segundo número de GRUB debe ser: $NUM2_GRUB"

echo "($NUM1_GRUB,$NUM2_GRUB)" # (0,1) por ejemplo.

WIN="no"
# Esto lo hace sólo si existe una entrada para Windows
cat /mnt/$DESTINO/boot/grub/menu.lst | grep Windows > /dev/null
if [ "$?" = "0" ]
then
WIN="yes"
# 8 dic 07, separando la entrada de sistemas Win, del resto, para evitar el cambio de sed

cat /mnt/$DESTINO/boot/grub/menu.lst | grep -A3 Windows > /mnt/$DESTINO/boot/grub/menu.lst-win

# daría algo así:
# title         Windows 95/98/NT/2000
# root          (hd0,0)
# makeactive
# chainloader   +1
#--
#title Windows 2K/XP/2003 (hda1)
#chainloader (hd0,0)+1

# A su vez, debemos saber dónde comienza la parte de win, para poder cortar por allí
lineawin=`cat /mnt/$DESTINO/boot/grub/menu.lst | grep -n Windows | cut -f1 -d":"`

# Entonces hacemos un head con eso, y quedaría el menu.lst sin
# la parte win, para luego poder ser sumada. Eso sí, al head hay
# que restarle uno, para que no duplique el título
lineawin=`expr $lineawin - 1`

# Ahora sí podemos dejar menu.lst sin la entrada de win
cat /mnt/$DESTINO/boot/grub/menu.lst | head -n $lineawin > cat /mnt/$DESTINO/boot/grub/menu.lst-sinwin

cp /mnt/$DESTINO/boot/grub/menu.lst-sinwin /mnt/$DESTINO/boot/grub/menu.lst

fi


# 22 nov 2007
## NOTE: activamos todo el parche para menu.lst, a pesar de que update-grub intenta hacer lo mismo, no logra cambiar el valor 0,0
# espero que esto lo logre
# RESULTADO: testeado: funciona correctamente

cat /mnt/$DESTINO/boot/grub/menu.lst | sed s/0,0/$NUM1_GRUB,$NUM2_GRUB/g > /mnt/$DESTINO/boot/grub/menu.lst-temp2
cp /mnt/$DESTINO/boot/grub/menu.lst-temp2 /mnt/$DESTINO/boot/grub/menu.lst

# nuevo:
echo "
#Emparchado con el valor $NUM1_GRUB,$NUM2_GRUB por el script /bin/instalar" >> /mnt/$DESTINO/boot/grub/menu.lst


# nuevo en Musix 1.0 R3 test3: sumando las entradas de windows
# Esto lo hace sólo si existe una entrada para Windows
if [ "$WIN" = "yes" ]
then
cat /mnt/$DESTINO/boot/grub/menu.lst-win >> /mnt/$DESTINO/boot/grub/menu.lst
echo "
#Agregada la entrada para sistemas Windows." >> /mnt/$DESTINO/boot/grub/menu.lst
fi



# Notar que creamos menu.lst-temp*, para tener una salida de debug y solicitarla
# a los usuarios que prueben esto.

# ### Resta FSTAB ###

# Hay una línea que la conforma mal, y que queda así: noauto,users,exec 0 0
# sin nada más.Entonces pienso que es bueno borrarla: | grep -v "noauto,users,exec 0 0" 
# Primer cambio en fstab:borramos esa línea.
cat /mnt/$DESTINO/etc/fstab | grep -v "noauto,users,exec 0 0" > /mnt/$DESTINO/etc/fstab-temp1
cp /mnt/$DESTINO/etc/fstab-temp1 /mnt/$DESTINO/etc/fstab

# Ahora nos queda copiar lo bueno que hay en el fstab del live-cd al fstab instalado
# un problema a resolver, es que en el fstab del live-cd, la partición de
# destino está aún configurada para montarse en /mnt, eso es fácil: grep -v

# Podemos obtener la lista correcta de particiones en el fstab del live cd con
# cat /etc/fstab | grep -A10 "Add"
# y eso simplemente lo volcamos con un >> en el fstab instalado, que justamente
# requiere de esas líneas, entonces:
cat /etc/fstab | grep -v "$DESTINO" | grep -A10 "Added by KNOPPIX" >> /mnt/$DESTINO/etc/fstab
# Eso debería haber resuelto todo! :)

# BIEN!, listo, por ahora, lo que resta es pedirle al usuario que nos envie
# los archivos para debug

mkdir /tmp/instalar-debug/
# Nuevo: creando backups de los logs para debug en partición de destino
mkdir /mnt/$DESTINO/var/log/instalar-debug/

cp /mnt/$DESTINO/boot/grub/menu.lst-orig /tmp/instalar-debug/
# backup
cp /mnt/$DESTINO/boot/grub/*.* /mnt/$DESTINO/var/log/instalar-debug/
cp /mnt/$DESTINO/boot/grub/* /mnt/$DESTINO/var/log/instalar-debug/

cp /mnt/$DESTINO/boot/grub/menu.lst /tmp/instalar-debug/menu.lst
cp /mnt/$DESTINO/boot/grub/menu.lst-temp2 /tmp/instalar-debug/menu.lst-temp2

cp /mnt/$DESTINO/etc/fstab /tmp/instalar-debug/fstab-instalado
cp /mnt/$DESTINO/etc/fstab /mnt/$DESTINO/var/log/instalar-debug/fstab-instalado

cp /mnt/$DESTINO/etc/fstab-temp1 /tmp/instalar-debug/fstab-temp1-instalado
cp /mnt/$DESTINO/etc/fstab-temp1 /mnt/$DESTINO/var/log/instalar-debug/fstab-temp1-instalado


cp /etc/fstab /tmp/instalar-debug/fstab-live
cp /etc/fstab /mnt/$DESTINO/var/log/instalar-debug/fstab-live


cp ~/.knofig /tmp/instalar-debug/knofig
cp ~/.knofig /mnt/$DESTINO/var/log/instalar-debug/knofig


# NOTE: quitando esta cuestión interactiva.. de última, todo queda en /var/log/instalar-debug/
#echo "Por favor, necesitamos debuguear (investigar, corregir) el proceso de instalación de Musix en discos SATA o en PCs con controladoras SATA, por lo cual te solicitamos que nos envíes estos archivos en /tmp/instalar-debug/
#Abriremos konqueror, y luego finalizaremos el proceso de instalación.
#Presiona [Enter] para continuar...
#"
#read

#konqueror /tmp/instalar-debug/ &

fi # lspci | grep SATA || lspci | grep "Serial ATA"


if [ "$ESPANOL" = "SI" ]
then
# modificando el motd (mensaje de consola, diario)
echo "Bienvenid@ a Musix GNU+Linux, si necesitas ayuda con un comando puedes escribir man nombre_del_comando" > /mnt/$DESTINO/etc/motd
else
echo "Welcome to Musix GNU+Linux. If you need help, type man" > /mnt/$DESTINO/etc/motd
fi

# Esto debe ocurrir ANTES de update-grub-total , porque tal script desmonta todo
# En teoría ya está hecho esto en el reformado /usr/sbin/update-grub
# NOTE: nuevo en Musix 1.0 R3: quitando todos los savedefault, dado que producen problemas al reiniciar luego de un corte de electricidad
cp /mnt/$DESTINO/boot/grub/menu.lst /mnt/$DESTINO/boot/grub/menu.lst-temp
cat /mnt/$DESTINO/boot/grub/menu.lst-temp | sed s/savedefault//g > /mnt/$DESTINO/boot/grub/menu.lst



# Este script sólo puede correr luego de que instalar solucionó
# el posible problema de instalación en discos sata.
# Nuevo en Musix 1.0: detecta otros sistemas instalados y los incorpora al menu.lst de la particiï¿½n destino:
update-grub-total 




# DESABILITANDO LA REPARACION INITRD porque pruebo Yaird!#

# borro los initrd para los kernels de Tapsa que quedaron mï¿½s hechos
# ACTUALIZADO para musix 0.40 con kernel 2.6.11
# corregido musix 049
#chroot /mnt/$DESTINO rm /boot/initrd.img-2.6.11
#chroot /mnt/$DESTINO rm /boot/initrd.img-2.6.15.2
#chroot /mnt/$DESTINO rm /boot/initrd.img-2.6.15.4

# ¿Para qué hacíamos esto? Quitarlo:
# Pruebo otro mï¿½todo por las dudas.
#echo "montando con mount /mnt/$DESTINO "
#mount /mnt/$DESTINO 


# Esto ya estaba deshabilitado en Musix 1.0
# corregido musix 049
#[ -f /mnt/$DESTINO/boot/initrd.img-2.6.11 ] && rm /mnt/$DESTINO/boot/initrd.img-2.6.11

#[ -f /mnt/$DESTINO/boot/initrd.img-2.6.15.2 ] && rm /mnt/$DESTINO/boot/initrd.img-2.6.15.2

#[ -f /mnt/$DESTINO/boot/initrd.img-2.6.15.4 ] && rm /mnt/$DESTINO/boot/initrd.img-2.6.15.4




if [ "$ESPANOL" = "SI" ]
then
echo $"${RED}Listo! Gracias por usar Musix GNU+Linux! ${NORMAL}"
echo $"${GREEN} 
Te recomendamos unirte a una lista de mail de usuarios
 GNU+Linux. Los usuarios formamos una 
comunidad alrededor del Software Libre, 
y lo usual es ayudarnos entre todos. 

Puedes visitar ${WHITE} www.musix.org.ar ${NORMAL}"
sleep 1s
echo $"${GREEN} 
Es probable que en tu ciudad exista un Grupo 
de Usuarios GNU+Linux, intenta buscando en Internet, 
por ejemplo, ${RED} LUG o GLUG nombre_de_tu_ciudad. ${BLUE}"
sleep 1s
echo $"${GREEN} 
En las listas de e-mail de Usuarios GNU+Linux 
se suelen resolver todos los problemas que presente
el manejo del sistema, se comienzan proyectos de 
software, se comparten experiencias, se aprende, etc. 

Puedes subscribirte a nuestra lista de mail en:
https://lists.ourproject.org/cgi-bin/mailman/listinfo/musix-usuarios

y/o chatear con nostros en el canal #musix en el IRC de freenode.

Esperamos que disfrutes el uso de Musix GNU+Linux!

${BLUE}"
sleep 1s
echo $"${WHITE} Que te diviertas, suerte! ${NORMAL}"
read

else # english

echo "$BLUE Ready! $NORMAL 
Once you reboot the machine, you will see
many options from the GRUB boot menu.

Join to the musix-users mailing list at:
https://lists.ourproject.org/cgi-bin/mailman/listinfo/musix-users

... and/or chat with us on the #musix channel at the freenode IRC.

Regards
"
fi
