Criar pacotes .deb apartir de script
Publicado por Raimundo Alves Portela (última atualização em 17/07/2011)
[ Hits: 6.571 ]
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
Script para limpar os caches do proxy (squid)
Acompanhamento de log squid com hora real
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)