Criar pacotes .deb
![](https://4.bp.blogspot.com/_MIcVbeQE0Lo/S164sPKTGGI/AAAAAAAAADQ/zFTCBC6In-Q/s320/80px-Application-x-deb.svg.png)
Abra um terminal, navegue até o diretório onde está o diretório do seu script e digite:
$ debfacil diretorio_do_seu_script
Funcionalidades:
- Cria um pacote .deb;
- Possibilita criar um atalho no menu do Gnome;
#!/bin/bash
# Aplicativo: debfacil
# Criado em: 15/06/2011
# Descrição: Automatiza a construção do pacote .deb
# Autor: Raimundo Portela <rai3mb@gmail.com>
# -----------------------------------------------------------------------------
# Descrição detalhada do funcionamento:
# Para usar o programa basta chamálo na linha de comando seguido do nome do
# do diretório a ser um pacote .deb
# sintaxe de uso: debfacil diretorio_do_script_candidato_a_pacote
# -----------------------------------------------------------------------------
# Histórico de Mudanças: -> Disponível no arquivo CHANGELOG
#
# Licença (copyrght): GPL.
#
# verifica se foi informado o parametro
[ -z "$1" ] && echo 'Você deve informar o diretório do pacote' && exit
# verifica se o parametro informado é um diretório
! [ $? -eq 1 ] && echo "$1:não é um diretório" && exit
PACOTE="$1"
func_banner(){
clear
echo "================================================= ======"
echo "Bem vim do ao gerador de pacotes .deb debfacil v.1.0"
echo "-------------------------------------------------------"
echo
}
func_banner
# Cria a estrutura de diretório do pacote
mv "$PACOTE" "$PACOTE"_temp 2> /dev/null
mkdir -p "$PACOTE/opt/$PACOTE" 2> /dev/null
if [ "$?" -eq 1 ]; then
echo "Não foi possível definir a estrutura $PACOTE"/opt/"$PACOTE"
exit
fi
mv "$PACOTE"_temp "$PACOTE/opt" 2> /dev/null
mv "$PACOTE/opt/$PACOTE"_temp/* "$PACOTE/opt/$PACOTE" 2> /dev/null
rm -rf "$PACOTE/opt/$PACOTE"_temp
#usado para não perder a referência do diretório inicial
FONTE=$(pwd)
cd "$FONTE/$PACOTE/opt/$PACOTE"
# pega o PACOTE da versão direto do arquivo CHANGELOG
# ou seja, obriga o programador a registrar as versões no CHANGELOG
# caso não exista o arquivo, criamos um.
! [ -f CHANGELOG ] && touch CHANGELOG
func_Especifica_Versao() {
clear
func_banner
echo "----CONFIGURANDO O ARQUIVO CHANGELOG----"
echo
echo "Defina qual a versão do seu programa [$PACOTE], usando números: (0.1)"
read VERSAO
[ -z "$VERSAO" ] && VERSAO="0.1"
echo "Quem Desenvolveu esta versão: ($(whoami))"
read NOME
[ -z "$NOME" ] && NOME=$(whoami)
echo "Desenvolvido em que data: ($(date +%d%m%Y))"
read DATA
[ -z "$DATA" ] && DATA=$(date +%d%m%Y)
echo "Uma rápida descrição sobre essa versão deste pacote"
read DESCRICAO
echo "# Versão-$VERSAO" > CHANGELOG
echo "Desenvolvido por:$NOME" >> CHANGELOG
echo "Desenvolvido em:$DATA" >> CHANGELOG
echo "Descrição:$DESCRICAO" >> CHANGELOG
}
! egrep '^# Versão-' CHANGELOG > /dev/null && func_Especifica_Versao
echo "Identificado o arquivo [CHANGELOG]"
VERSAO=$(egrep '^# Versão-*' CHANGELOG | tail -1 | cut -d'-' -f 2)
echo "Identificado a versão de [$PACOTE], como: [$VERSAO]"
sleep 2
func_Especifica_Control() {
cd "$FONTE/$PACOTE"
# criando o arquivo control
rm DEBIAN/control 2> /dev/null
touch DEBIAN/control
#tamanho do diretório em Kb
DELIMIT=$(echo "$PACOTE" | cut --bytes=1-1)
cd opt
TAMANHO=$(du "$PACOTE" | tail -1 | cut -d"$DELIMIT" -f 1)
cd ..
# coleta parametros para o arquivo control
echo "Package:$PACOTE" > DEBIAN/control
echo "Version:$VERSAO" >> DEBIAN/control
echo "Architecture:all" >> DEBIAN/control
echo "Installed-Size:$TAMANHO" >> DEBIAN/control
NOME=$(egrep '^Desenvolvido por' opt/"$PACOTE"/CHANGELOG | tail -1 | cut -d':' -f 2)
echo "Maintainer: $NOME" >> DEBIAN/control
echo "Section:gnome" >> DEBIAN/control
echo "Priority
ptional" >> DEBIAN/control
echo "Description: . $DESCRICAO" >> DEBIAN/control
}
#volta para a raiz do pacote
cd "$FONTE/$PACOTE"
mkdir DEBIAN 2> /dev/null
! egrep '^Package:.*' DEBIAN/control 2> /dev/null && func_Especifica_Control
func_START()
{
func_banner
#volta para a pasta raiz do pacote
cd "$FONTE/$PACOTE/opt/$PACOTE"
echo "Quais desses arquivos inicia a execução do seu programa(pacote):"
echo
ls -1
echo
echo "Escreva o nome completo dele:"
read START
#verifica se o arquivo existe
! [ -f "$START" ] && \
echo "Arquivo [$START] não existe no diretório do PACOTE [$PACOTE]" \
&& sleep 2 && func_START
# se o arquivo não for executável, torna-o
! [ -x "$START" ] && chmod +x "$START"
}
func_START
# criar menu
echo
echo "Deseja criar atalho no menu do Gnome para o pacote [$PACOTE] (S/n):"
read RESP
[ -z "$RESP" ] || [ "$RESP" = "S" ] && RESP="s"
func_Cria_Menu() {
func_banner
if [ "$RESP" = "s" ]; then
mkdir -p "$FONTE/$PACOTE/usr/share/menu" 2> /dev/null
cd "$FONTE/$PACOTE/usr/share/menu"
echo "----CONTRUINDO O ATALHO DE MENU (GNOME)----"
echo
echo "Escolha a categoria da sua Aplicação:"
echo
echo "1 - AudioVideo : Áudio/Vídeo"
echo "2 - Development : Desenvolvimento"
echo "3 - Education : Educacional"
echo "4 - Game : Jogo"
echo "5 - Graphics : Gráficos";
echo "6 - Network : Rede/Internet";
echo "7 - Office : Escritório";
echo "8 - System : Ferramenta de Sisema";
echo "9 - Utility : Utilitários (padrão)";
echo "10 - Settings : Configurações do Sistema [Sistema -> Preferências]"
echo
echo "Escolha o número (9):"
read MENU
[ -z "$MENU" ] && MENU="9"
case "$MENU" in
1) SUBMENU="AudioVideo" ;;
2) SUBMENU="Development" ;;
3) SUBMENU="Education" ;;
4) SUBMENU="Game" ;;
5) SUBMENU="Graphics" ;;
6) SUBMENU="Network" ;;
7) SUBMENU="Office" ;;
10) SUBMENU="Settings" ;;
8) SUBMENU="System" ;;
9) SUBMENU="Utility" ;;
*) echo "Opção [$MENU] inválida!" && sleep 2
func_Cria_Menu
;;
esac
echo "package=$PACOTE:\\" > "$PACOTE"
echo "needs='X11'\\" >> "$PACOTE"
echo "section='Applications/$SUBMENU/'\\" >> "$PACOTE"
echo "title='$PACOTE'\\" >> "$PACOTE"
echo "command='/opt/$PACOTE/$START'\\" >> "$PACOTE"
echo "icon=''" >> "$PACOTE"
mkdir -p "$FONTE/$PACOTE/usr/share/applications" 2> /dev/null
cd "$FONTE/$PACOTE/usr/share/applications"
echo "[Desktop Entry]" > "$PACOTE.desktop"
echo "Name=$PACOTE" >> "$PACOTE.desktop"
echo "Escreva um comentário para aparecer sobre a entrada no menu"
read COMENTARIO
[ -z "$COMENTARIO" ] && COMENTARIO="$PACOTE"
echo "Comment=$COMENTARIO" >> "$PACOTE.desktop"
echo "Exec=/opt/$PACOTE/$START" >> "$PACOTE.desktop"
echo "Icon=$PACOTE" >> "$PACOTE.desktop"
echo "Terminal=true" >> "$PACOTE.desktop"
echo "Type=Application" >> "$PACOTE.desktop"
echo "StartupNotify=true" >> "$PACOTE.desktop"
echo "Categories=GNOME;GTK;$SUBMENU;" >> "$PACOTE.desktop"
echo "X-GNOME-Gettext-Domain=$PACOTE" >> "$PACOTE.desktop"
echo "Name[en_US]=$PACOTE" >> "$PACOTE.desktop"
echo "Name[pt_BR]=$PACOTE" >> "$PACOTE.desktop"
#ajustando o ícone
cd "$FONTE/$PACOTE"
cp -r "/opt/debfacil/usr" .
cd "$FONTE/$PACOTE/usr/share/pixmaps"
mv debfacil.svg "$PACOTE.svg"
fi
}
func_Cria_Menu
mkdir -p "$FONTE/$PACOTE/usr/bin" 2> /dev/null
cd "$FONTE/$PACOTE/usr/bin"
echo "#!/bin/bash" > "$PACOTE"
echo "/opt/$PACOTE/$START" >> "$PACOTE"
chmod +x "$PACOTE"
cd "$FONTE"
# cria o pacote deb
func_banner
NOVONOME=$(sudo dpkg -b "$PACOTE" .)
NOVONOME=$(echo $NOVONOME | cut -d'/' -f 2 | cut -d"'" -f 1)
echo "O pacote $NOVONOME foi criado com sucesso"
echo
echo "Já deseja fazer a instalação dele? (s/N):"
read RESP
[ -z "$RESP" ] || [ "$RESP" = "N" ] && RESP="n"
if ! [ "$RESP" = "n" ]; then
if [ "$USER" = "root" ]; then
dpkg -i "$NOVONOME"
else
sudo dpkg -i "$NOVONOME"
fi
else
echo
echo "Se quiser instalar, use o comando:"
echo "dpkg -i $NOVONOME"
fi
echo
#.EOF
# Aplicativo: debfacil
# Criado em: 15/06/2011
# Descrição: Automatiza a construção do pacote .deb
# Autor: Raimundo Portela <rai3mb@gmail.com>
# -----------------------------------------------------------------------------
# Descrição detalhada do funcionamento:
# Para usar o programa basta chamálo na linha de comando seguido do nome do
# do diretório a ser um pacote .deb
# sintaxe de uso: debfacil diretorio_do_script_candidato_a_pacote
# -----------------------------------------------------------------------------
# Histórico de Mudanças: -> Disponível no arquivo CHANGELOG
#
# Licença (copyrght): GPL.
#
# verifica se foi informado o parametro
[ -z "$1" ] && echo 'Você deve informar o diretório do pacote' && exit
# verifica se o parametro informado é um diretório
! [ $? -eq 1 ] && echo "$1:não é um diretório" && exit
PACOTE="$1"
func_banner(){
clear
echo "================================================= ======"
echo "Bem vim do ao gerador de pacotes .deb debfacil v.1.0"
echo "-------------------------------------------------------"
echo
}
func_banner
# Cria a estrutura de diretório do pacote
mv "$PACOTE" "$PACOTE"_temp 2> /dev/null
mkdir -p "$PACOTE/opt/$PACOTE" 2> /dev/null
if [ "$?" -eq 1 ]; then
echo "Não foi possível definir a estrutura $PACOTE"/opt/"$PACOTE"
exit
fi
mv "$PACOTE"_temp "$PACOTE/opt" 2> /dev/null
mv "$PACOTE/opt/$PACOTE"_temp/* "$PACOTE/opt/$PACOTE" 2> /dev/null
rm -rf "$PACOTE/opt/$PACOTE"_temp
#usado para não perder a referência do diretório inicial
FONTE=$(pwd)
cd "$FONTE/$PACOTE/opt/$PACOTE"
# pega o PACOTE da versão direto do arquivo CHANGELOG
# ou seja, obriga o programador a registrar as versões no CHANGELOG
# caso não exista o arquivo, criamos um.
! [ -f CHANGELOG ] && touch CHANGELOG
func_Especifica_Versao() {
clear
func_banner
echo "----CONFIGURANDO O ARQUIVO CHANGELOG----"
echo
echo "Defina qual a versão do seu programa [$PACOTE], usando números: (0.1)"
read VERSAO
[ -z "$VERSAO" ] && VERSAO="0.1"
echo "Quem Desenvolveu esta versão: ($(whoami))"
read NOME
[ -z "$NOME" ] && NOME=$(whoami)
echo "Desenvolvido em que data: ($(date +%d%m%Y))"
read DATA
[ -z "$DATA" ] && DATA=$(date +%d%m%Y)
echo "Uma rápida descrição sobre essa versão deste pacote"
read DESCRICAO
echo "# Versão-$VERSAO" > CHANGELOG
echo "Desenvolvido por:$NOME" >> CHANGELOG
echo "Desenvolvido em:$DATA" >> CHANGELOG
echo "Descrição:$DESCRICAO" >> CHANGELOG
}
! egrep '^# Versão-' CHANGELOG > /dev/null && func_Especifica_Versao
echo "Identificado o arquivo [CHANGELOG]"
VERSAO=$(egrep '^# Versão-*' CHANGELOG | tail -1 | cut -d'-' -f 2)
echo "Identificado a versão de [$PACOTE], como: [$VERSAO]"
sleep 2
func_Especifica_Control() {
cd "$FONTE/$PACOTE"
# criando o arquivo control
rm DEBIAN/control 2> /dev/null
touch DEBIAN/control
#tamanho do diretório em Kb
DELIMIT=$(echo "$PACOTE" | cut --bytes=1-1)
cd opt
TAMANHO=$(du "$PACOTE" | tail -1 | cut -d"$DELIMIT" -f 1)
cd ..
# coleta parametros para o arquivo control
echo "Package:$PACOTE" > DEBIAN/control
echo "Version:$VERSAO" >> DEBIAN/control
echo "Architecture:all" >> DEBIAN/control
echo "Installed-Size:$TAMANHO" >> DEBIAN/control
NOME=$(egrep '^Desenvolvido por' opt/"$PACOTE"/CHANGELOG | tail -1 | cut -d':' -f 2)
echo "Maintainer: $NOME" >> DEBIAN/control
echo "Section:gnome" >> DEBIAN/control
echo "Priority
![Surpreso](https://forum.guiadohacker.com.br/images/smilies/redface.png)
echo "Description: . $DESCRICAO" >> DEBIAN/control
}
#volta para a raiz do pacote
cd "$FONTE/$PACOTE"
mkdir DEBIAN 2> /dev/null
! egrep '^Package:.*' DEBIAN/control 2> /dev/null && func_Especifica_Control
func_START()
{
func_banner
#volta para a pasta raiz do pacote
cd "$FONTE/$PACOTE/opt/$PACOTE"
echo "Quais desses arquivos inicia a execução do seu programa(pacote):"
echo
ls -1
echo
echo "Escreva o nome completo dele:"
read START
#verifica se o arquivo existe
! [ -f "$START" ] && \
echo "Arquivo [$START] não existe no diretório do PACOTE [$PACOTE]" \
&& sleep 2 && func_START
# se o arquivo não for executável, torna-o
! [ -x "$START" ] && chmod +x "$START"
}
func_START
# criar menu
echo
echo "Deseja criar atalho no menu do Gnome para o pacote [$PACOTE] (S/n):"
read RESP
[ -z "$RESP" ] || [ "$RESP" = "S" ] && RESP="s"
func_Cria_Menu() {
func_banner
if [ "$RESP" = "s" ]; then
mkdir -p "$FONTE/$PACOTE/usr/share/menu" 2> /dev/null
cd "$FONTE/$PACOTE/usr/share/menu"
echo "----CONTRUINDO O ATALHO DE MENU (GNOME)----"
echo
echo "Escolha a categoria da sua Aplicação:"
echo
echo "1 - AudioVideo : Áudio/Vídeo"
echo "2 - Development : Desenvolvimento"
echo "3 - Education : Educacional"
echo "4 - Game : Jogo"
echo "5 - Graphics : Gráficos";
echo "6 - Network : Rede/Internet";
echo "7 - Office : Escritório";
echo "8 - System : Ferramenta de Sisema";
echo "9 - Utility : Utilitários (padrão)";
echo "10 - Settings : Configurações do Sistema [Sistema -> Preferências]"
echo
echo "Escolha o número (9):"
read MENU
[ -z "$MENU" ] && MENU="9"
case "$MENU" in
1) SUBMENU="AudioVideo" ;;
2) SUBMENU="Development" ;;
3) SUBMENU="Education" ;;
4) SUBMENU="Game" ;;
5) SUBMENU="Graphics" ;;
6) SUBMENU="Network" ;;
7) SUBMENU="Office" ;;
10) SUBMENU="Settings" ;;
8) SUBMENU="System" ;;
9) SUBMENU="Utility" ;;
*) echo "Opção [$MENU] inválida!" && sleep 2
func_Cria_Menu
;;
esac
echo "package=$PACOTE:\\" > "$PACOTE"
echo "needs='X11'\\" >> "$PACOTE"
echo "section='Applications/$SUBMENU/'\\" >> "$PACOTE"
echo "title='$PACOTE'\\" >> "$PACOTE"
echo "command='/opt/$PACOTE/$START'\\" >> "$PACOTE"
echo "icon=''" >> "$PACOTE"
mkdir -p "$FONTE/$PACOTE/usr/share/applications" 2> /dev/null
cd "$FONTE/$PACOTE/usr/share/applications"
echo "[Desktop Entry]" > "$PACOTE.desktop"
echo "Name=$PACOTE" >> "$PACOTE.desktop"
echo "Escreva um comentário para aparecer sobre a entrada no menu"
read COMENTARIO
[ -z "$COMENTARIO" ] && COMENTARIO="$PACOTE"
echo "Comment=$COMENTARIO" >> "$PACOTE.desktop"
echo "Exec=/opt/$PACOTE/$START" >> "$PACOTE.desktop"
echo "Icon=$PACOTE" >> "$PACOTE.desktop"
echo "Terminal=true" >> "$PACOTE.desktop"
echo "Type=Application" >> "$PACOTE.desktop"
echo "StartupNotify=true" >> "$PACOTE.desktop"
echo "Categories=GNOME;GTK;$SUBMENU;" >> "$PACOTE.desktop"
echo "X-GNOME-Gettext-Domain=$PACOTE" >> "$PACOTE.desktop"
echo "Name[en_US]=$PACOTE" >> "$PACOTE.desktop"
echo "Name[pt_BR]=$PACOTE" >> "$PACOTE.desktop"
#ajustando o ícone
cd "$FONTE/$PACOTE"
cp -r "/opt/debfacil/usr" .
cd "$FONTE/$PACOTE/usr/share/pixmaps"
mv debfacil.svg "$PACOTE.svg"
fi
}
func_Cria_Menu
mkdir -p "$FONTE/$PACOTE/usr/bin" 2> /dev/null
cd "$FONTE/$PACOTE/usr/bin"
echo "#!/bin/bash" > "$PACOTE"
echo "/opt/$PACOTE/$START" >> "$PACOTE"
chmod +x "$PACOTE"
cd "$FONTE"
# cria o pacote deb
func_banner
NOVONOME=$(sudo dpkg -b "$PACOTE" .)
NOVONOME=$(echo $NOVONOME | cut -d'/' -f 2 | cut -d"'" -f 1)
echo "O pacote $NOVONOME foi criado com sucesso"
echo
echo "Já deseja fazer a instalação dele? (s/N):"
read RESP
[ -z "$RESP" ] || [ "$RESP" = "N" ] && RESP="n"
if ! [ "$RESP" = "n" ]; then
if [ "$USER" = "root" ]; then
dpkg -i "$NOVONOME"
else
sudo dpkg -i "$NOVONOME"
fi
else
echo
echo "Se quiser instalar, use o comando:"
echo "dpkg -i $NOVONOME"
fi
echo
#.EOF