
[color=#000000]
#!/bin/bash
#==============================================================================
# FILE: createdeb.sh
#
# USAGE: createdeb.sh -d <dir> |-v|-h|-t|-e|-p|-E
#
# DESCRIPTION: Un script para crear paquetes Debian
#
# DATE: 2014-02-22
# REQUERIMENTS: bash
# BUGS: Muestra mensajes de error al cargar el archivo de
# configuración (no hay que darle mayor importancia)
# NOTES: ---
# AUTHOR: Abel Sendon - <[email protected]>
# COMPANY: ---
# VERSION: 1.140223
# CREATED: 2014.02.20 - 10:16:40
# REVISION: 2014.02.23 - 07:42:56
# LICENSE: GPL
#==============================================================================
VERSION="1.140223"
CONFIG=$HOME/.config/createdeb
source $CONFIG
ROOTD=$HOME/$NAME
PREINST=$ROOTD/DEBIAN/preinst
POSTINST=$ROOTD/DEBIAN/postinst
POSTRM=$ROOTD/DEBIAN/postrm
CONTROL_FILE=$ROOTD/DEBIAN/control
DESKTOP_SHORTCUT=$ROOTD/usr/share/applications/$EXE.desktop
#=== FUNCTION ===============================================================
# NAME: uso
# DESCRIPTION: Ayuda en consola.
#==============================================================================
function uso()
{
echo " Uso: $(basename $0) <switch>"
echo " Donde switch puede ser:"
echo " -d <directorio a importar>"
echo " -p Prepara la base del paquete (directorios, archivos, etc)"
echo " para luego ser modificada."
echo " -E Edita el archivo de control y reconstruye el paquete"
echo " (ideal si se ha usado la opción -p)."
echo " -S Edita los scripts preinst, postinst y postrm para luego"
echo " reconstruir el paquete (se editan de a uno)."
echo " -e Edita el archivo de configuración y sale."
echo " -r Reestablece el archivo de configuración y sale."
echo " -h Muestra esta ayuda."
echo " -v Muestra la versión y sale."
echo
echo " El directorio a importar debe tener un arbol de archivos/directorios"
echo " válido para que el paquete sea instalado correctamente."
echo " El archivo de control es utilizado por dpkg para construir el"
echo " paquete."
echo " Para más detalles ver: man dpkg-deb y deb-control."
echo " Las opciones -E -e y -S simplifican la tarea de buscar los archivos"
echo " a editar."
echo " Además, si se encuentra en el direcotrio HOME alguna imagen llamada"
echo " logo, img, icon (o con el nombre del programa a empaquetar) con la"
echo " extensión png, ésta será utilizada para crear los íconos."
}
#=== FUNCTION ===============================================================
# NAME: version
# DESCRIPTION: ---
#==============================================================================
function version()
{
echo " createdeb.sh $VERSION"
echo " 2014(C) Abel Sendon <[email protected]>"
echo " Este script es software libre, createdeb.sh"
echo " viene sin NINGUN TIPO DE GARANTÍA, ver"
echo " la licencia GPL para mas detalles."
}
#=== FUNCTION ===============================================================
# NAME: imgresizer
# DESCRIPTION: Redimensiona la imagen recibida desde la funcion makeicons para
# luego ser colocada en los directorios correspondientes.
#==============================================================================
function imgresizer()
{
DEST="$ROOTD/usr/share"
convert $HOME/$1 -geometry 256x256 $DEST/icons/gnome/256x256/apps/$NAME.png
convert $HOME/$1 -geometry 128x128 $DEST/icons/gnome/128x128/apps/$NAME.png
convert $HOME/$1 -geometry 64x64 $DEST/icons/gnome/64x64/apps/$NAME.png
convert $HOME/$1 -geometry 48x48 $DEST/icons/gnome/48x48/apps/$NAME.png
convert $HOME/$1 -geometry 32x32 $DEST/icons/gnome/32x32/apps/$NAME.png
convert $HOME/$1 -geometry 256x256 $DEST/icons/oxygen/256x256/apps/$NAME.png
convert $HOME/$1 -geometry 128x128 $DEST/icons/oxygen/128x128/apps/$NAME.png
convert $HOME/$1 -geometry 64x64 $DEST/icons/oxygen/64x64/apps/$NAME.png
convert $HOME/$1 -geometry 48x48 $DEST/icons/oxygen/48x48/apps/$NAME.png
convert $HOME/$1 -geometry 32x32 $DEST/icons/oxygen/32x32/apps/$NAME.png
convert $HOME/$1 -geometry 64x64 $DEST/pixmaps/$NAME.png
}
#=== FUNCTION ===============================================================
# NAME: makeicons
# DESCRIPTION: Crea los iconos para la aplicación, tiene que haber una imagen
# en el directorio HOME del usuario, la imagen debe tener uno de
# estos nombres para que el script la encuentre y procese:
# logo.png, img.png, icon.png o NombreDelPrograma.png
#==============================================================================
function makeicons()
{
if [ -x $(which convert) ]
then
echo "Ejecutable convert encontrado, ahora a buscar una imagen..."
else
echo "Convert no encontrado, saliendo :("
fi
# A buscar imagenes...
if [ -a $HOME/$NAME.png ]
then
echo "Imagen $HOME/$NAME.png encontrada, procesando..."
imgresizer $NAME.png
echo "Listo."
elif [ -a $HOME/logo.png ]
then
echo "Imagen $HOME/logo.png encontrada, procesando..."
imgresizer "logo.png"
echo "Listo."
elif [ -a $HOME/img.png ]
then
echo "Imagen $HOME/img.png encontrada, procesando..."
imgresizer "img.png"
echo "Listo."
elif [ -a $HOME/icon.png ]
then
echo "Imagen $HOME/icon.png encontrada, procesando..."
imgresizer "icon.png"
echo "Listo."
else
echo "No se encontró una imagen a procesar"
fi
}
#=== FUNCTION ===============================================================
# NAME: maketree
# DESCRIPTION: Crea un arbol de directorios listo para ser usado.
#==============================================================================
function maketree()
{
mkdir -vp $ROOTD/DEBIAN
mkdir -vp $ROOTD/etc/$NAME
mkdir -vp $ROOTD/usr/share/{doc/$NAME,applications,icons,pixmaps,$NAME}
mkdir -vp $ROOTD/usr/share/icons/gnome/{256x256,128x128,64x64,48x48,32x32}/apps
mkdir -vp $ROOTD/usr/share/icons/oxygen/{256x256,128x128,64x64,48x48,32x32}/apps
mkdir -vp $ROOTD/usr/{bin,lib/$NAME}
}
#=== FUNCTION ===============================================================
# NAME: makecontrolfile
# DESCRIPTION: Crea el archivo de control utilizado por dpkg
#==============================================================================
function makecontrolfile()
{
mkdir -p $ROOTD/DEBIAN # Si no existe se crea ahora
if [[ -n $COMMENT_EN ]]
then
COMMENT="$COMMENT_EN"
elif [[ -n $COMMENT_ES ]]
then
COMMENT="$COMMENT_ES"
else
COMMENT="Ninguna"
fi
echo "Package: $NAME" > $CONTROL_FILE
echo "Section: $CATEGORY" >> $CONTROL_FILE
echo "Maintainer: $AUTHOR" >> $CONTROL_FILE
echo "Architecture: all" >> $CONTROL_FILE
echo "Version: $VER" >> $CONTROL_FILE
echo "Depends: bash" >> $CONTROL_FILE
echo "Provides: " >> $CONTROL_FILE
echo "Conflicts: " >> $CONTROL_FILE
echo "Description: $COMMENT" >> $CONTROL_FILE
echo " $DESCRIPTION" >> $CONTROL_FILE
}
#=== FUNCTION ===============================================================
# NAME: makedesktopfile
# DESCRIPTION: Crea el acceso directo para el programa.
#==============================================================================
function makedesktopfile()
{
mkdir -vp $ROOTD/usr/share/applications
echo "[Desktop Entry]" > $DESKTOP_SHORTCUT
echo "Encoding=UTF-8" >> $DESKTOP_SHORTCUT
echo "Name=$NAME" >> $DESKTOP_SHORTCUT
echo "Name[es]=$NAME" >> $DESKTOP_SHORTCUT
echo "GenericName=$GNAME_EN" >> $DESKTOP_SHORTCUT
echo "GenericName[es]=$GNAME_ES" >> $DESKTOP_SHORTCUT
echo "Comment=$COMMENT_EN" >> $DESKTOP_SHORTCUT
echo "Comment[es]=$COMMENT_ES" >> $DESKTOP_SHORTCUT
echo "Type=Application" >> $DESKTOP_SHORTCUT
echo "Exec=$EXE" >> $DESKTOP_SHORTCUT
echo "Icon=$NAME" >> $DESKTOP_SHORTCUT
echo "Terminal=$TTERM" >> $DESKTOP_SHORTCUT
echo "Categories=$CATEGORY" >> $DESKTOP_SHORTCUT
}
#=== FUNCTION ===============================================================
# NAME: makescripts
# DESCRIPTION: Crea los scripts preinst, postinst y postrm listos para
# ser editados.
#==============================================================================
function makescripts()
{
mkdir -p $ROOTD/DEBIAN # Si no existe se crea ahora
echo "#!/bin/sh" > $PREINST
echo "# Script preinst autogenerado" >> $PREINST
echo " " >> $PREINST
echo "exit 0" >> $PREINST
echo "#!/bin/sh" > $POSTINST
echo "# Script postinst autogenerado" >> $POSTINST
echo " " >> $POSTINST
echo "update-menus" >> $POSTINST
echo " " >> $POSTINST
echo "exit 0" >> $POSTINST
echo "#!/bin/sh" > $POSTRM
echo "# Script postrm autogenerado" >> $POSTRM
echo " " >> $POSTRM
echo "if [[ $1 == "purge" ]]; then " >> $POSTRM
echo " # rm -rf dir" >> $POSTRM
echo " echo " >> $POSTRM
echo "fi" >> $POSTRM
echo " " >> $POSTRM
echo "exit 0" >> $POSTRM
chmod 0775 $PREINST
chmod 0775 $POSTINST
chmod 0775 $POSTRM
}
#=== FUNCTION ===============================================================
# NAME: makeconfig
# DESCRIPTION: Crea el archivo de configuración del script.
#==============================================================================
function makeconfig()
{
echo "# La variable EDITOR establece que programa se usará para" > $CONFIG
echo "# editar los archivos y scripts, predeterminado: vim," >> $CONFIG
echo "# otros pueden ser kate/kwrite (KDE), gedit (GNOME)," >> $CONFIG
echo "# leafpad(LXDE, XFCE), nano o x/emacs." >> $CONFIG
echo "EDITOR=vim" >> $CONFIG
echo " " >> $CONFIG
echo "# Las siguientes variables brindan información" >> $CONFIG
echo "# relacionada con el software a empaquetar, si bien se" >> $CONFIG
echo "# pueden editar los archivos de control (man deb-control" >> $CONFIG
echo "# para más detalles) y de acceso directo (desktop-entry)" >> $CONFIG
echo "# puede ser tedioso tener que editarlos cada vez que se" >> $CONFIG
echo "# genere un nuevo paquete .deb -ya que no siempre queda" >> $CONFIG
echo "# en el primer intento- " >> $CONFIG
echo "# Algunas están tanto en inglés como en español, pero" >> $CONFIG
echo "# pueden añadirse otros idiomas editando los archivos" >> $CONFIG
echo "# generados." >> $CONFIG
echo " " >> $CONFIG
echo "# Nombre del software a empaquetar(debería cambiarse), si" >> $CONFIG
echo "# se encuentra una imagen PNG con este nombre en HOME" >> $CONFIG
echo "# será procesada para crear íconos. También se crearán" >> $CONFIG
echo "# los subdirectorios en /usr por ej. con este mismo nombre" >> $CONFIG
echo "# como así también el directorio de trabajo entre otros" >> $CONFIG
echo "# componentes, para asegurar un corecto funcionamiento" >> $CONFIG
echo "# no debe haber espacios como separador de palabras." >> $CONFIG
echo "NAME=NombreAplicacion" >> $CONFIG
echo " " >> $CONFIG
echo "# Establece la sección donde aparecerá la aplicación." >> $CONFIG
echo "# Algunas secciones comunes son:" >> $CONFIG
echo "# Development, Engineering, Electronics, Graphics, Game" >> $CONFIG
echo "# System, TerminalEmulator, Utility, TextEditor, Office" >> $CONFIG
echo "# ArcadeGame, AudioVideo, Network, Education y Science." >> $CONFIG
echo "# Predeterminada: Utility " >> $CONFIG
echo "CATEGORY="Utility"" >> $CONFIG
echo " " >> $CONFIG
echo "# Nombre y email del autor, el email debe ir entre < y >" >> $CONFIG
echo "AUTHOR="autor <[email protected]>"" >> $CONFIG
echo " " >> $CONFIG
echo "# Breve comentario de lo que hace el programa, dejar" >> $CONFIG
echo "# vacío el idioma que no se utilizará." >> $CONFIG
echo "COMMENT_EN=""" >> $CONFIG
echo "COMMENT_ES="Breve comentario a editar" " >> $CONFIG
echo " " >> $CONFIG
echo "# Nombre genérico, aqui se especifica el tipo de" >> $CONFIG
echo "# software, por ej. para Dia se ha colocado" >> $CONFIG
echo "# "Diagram editor"." >> $CONFIG
echo "GNAME_EN="Generic name"" >> $CONFIG
echo "GNAME_ES="Nombre genérico"" >> $CONFIG
echo " " >> $CONFIG
echo "# Nombre del ejecutable" >> $CONFIG
echo "EXE=""" >> $CONFIG
echo " " >> $CONFIG
echo "# Establece si se ejecuta o no en una terminal" >> $CONFIG
echo "TTERM=false " >> $CONFIG
echo " " >> $CONFIG
echo "# Versión del programa" >> $CONFIG
echo "VER="1.0"" >> $CONFIG
echo " " >> $CONFIG
echo "# Descripción del programa (en una sola linea)" >> $CONFIG
echo "DESCRIPTION="Descripción detallada aquí"" >> $CONFIG
echo " " >> $CONFIG
}
#=== FUNCTION ===============================================================
# NAME: admconfig
# DESCRIPTION: Permite editar el archivo de configuración del script (en caso
# de no existir lo crea).
#==============================================================================
function admconfig()
{
if [ $1 == "L" ]
then
if [ -a $CONFIG ]
then
source $CONFIG
else
makeconfig
echo "Configuración re/creada, vuelva a ejecutar el script."
exit 3
fi
elif [ $1 == "E" ]
then
$EDITOR $CONFIG
elif [ $1 == "R" ]
then
rm -f $CONFIG
makeconfig
echo "Archivo de configuración reestablecido."
else
echo "FATAL: Esta funcion no recibe argumentos validos."
exit 255
fi
}
#==============================================================================
# Parte final del proceso...
#==============================================================================
admconfig L
case $1 in
-E) if [ -a $CONTROL_FILE ]
then
clear
$EDITOR $CONTROL_FILE
echo "Edición de archivo terminada."
else
echo " El archivo de control aún no existe"
echo " pruebe con las opciones -d o p y vuelva a intentar."
exit -1
fi
;;
-S) if [ -a $PREINST ] # Es suficiente probar con uno de los scripts
then
clear
$EDITOR $PREINST
$EDITOR $POSTINST
$EDITOR $POSTRM
echo "Edición de scripts terminada."
else
echo " Los scripts aún no existen, pruebe con"
echo " las opciones -d o p y vuelva a intentar."
exit -1
fi
;;
-d) if [ -z $2 ]
then
echo "Se debe especificar un directorio para importar."
exit 2
else
mkdir -vp $ROOTD/DEBIAN
echo "Importando contenido y arbol de directorios..."
sleep 1
cp -av $2/* $ROOTD
fi
maketree
makescripts
makecontrolfile
makedesktopfile
makeicons
;;
-h) uso
exit 0
;;
-v) version
exit 0
;;
-e) admconfig E
exit 0
;;
-r) admconfig R
exit 0
;;
-p) echo "Preparando..."
sleep 1
maketree
makescripts
makecontrolfile
makedesktopfile
makeicons
;;
*) echo "Debe especificar una opción."
echo "escriba $(basename $0) -h para obtener ayuda."
exit 1
esac
echo "Construyendo paquete deb..."
dpkg-deb -b $ROOTD $NAME"_$VER.deb" &&
echo "Info del paquete creado:" ; dpkg --info $NAME"_$VER.deb"
exit 0
-----------------------------------------------------------------------
Retroshoot:
http://sourceforge.net/projects/retroshoot/files/?source=directory
Post del juego(para el curioso):
http://www.taringa.net/posts/juegos/17412518/Hice-un-jueguito-de-Herni-y-te-lo-muestro.html
[/color]