Criar pacotes .deb apartir de script
Publicado por Raimundo Alves Portela (última atualização em 17/07/2011)
[ Hits: 6.914 ]
Homepage: http://portelanet.com
Olá pessoal, desenvolvi para minhas atividades um programa em shell-script para automatizar a criação dos pacotes .deb, fiz uma adaptação nele para poder torná-lo o mais genérico possível, na intenção de disponibilizar para a comunidade, e eis que posto-o aqui.
Exemplo de uso:
Abra um terminal, navegue até o diretório onde está o diretório do seu script e digite:
$ debfacil diretorio_do_seu_script
Prontinho, se você tiver colocado seu script dentro do diretório informado, ele automaticamente irá criar a estrutura de um pacote .deb e vai lhe fazer algumas perguntas para defini-lo.
Funcionalidades:
- Cria um pacote .deb;
- Possibilita criar um atalho no menu do Gnome;
Espero que gostem, assim como eu :-)
#!/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:optional" >> 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
Manutenção básica em partições Windows
Agenda de Contatos - Shell Script + MYSQL
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - RESUMO DE MSGS COM VIRUS
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático
Formas seguras de instalar Debian Sid (13)
Malware encontrado em extensões do Firefox. (0)
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









