Ir ao conteúdo
  • Cadastre-se

Editar / alterar as dependências de um pacote .deb


Sampayu

Posts recomendados

Recentemente aconteceu de eu tentar instalar o pacote google-chrome-stable e não conseguir porque, de acordo com o que consta no pacote .deb, o pacote precisa de três bibliotecas e essas bibliotecas não podem ser instaladas em meu sistema.

O problema é que isso é um bug do pacote .deb: as bibliotecas que ele diz que eu tenho que ter não têm que ser instaladas em meu sistema não, mas elas também não devem fazer parte dos pré-requisitos (dependências) do pacote .deb, pois as bibliotecas das quais o pacote necessita são outras três, não as que ele menciona. O erro, portanto, está nos nomes das bibliotecas das quais o pacote diz necessitar.

Como um dia esse bug pode acontecer com (e afetar) você, fique sabendo que pode ter conserto: se você souber quais são os nomes corretos dos arquivos/dependências que você tem que ter no seu sistema, e se tais dependências estiverem instaladas no seu sistema (ou você souber como instalá-las), então tudo o que você precisa fazer, depois de estar com as dependências corretas instaladas em seu sistema, é editar o arquivo de controle de dependências que se encontra dentro do pacote .deb problemático.

Mas como fazer para editar o arquivo de controle de dependências? Simples: siga o roteiro abaixo.
 

  • Abra um editor de texto bem básico, como por exemplo o GEdit, o Mousepad ou o Leafpad, e cole este código dentro da janela dele:
    #!/bin/bashif [[ -z "$1" ]]; thenecho "Syntax: $0 debfile"exit 1fiDEBFILE="$1"TMPDIR=`mktemp -d /tmp/deb.XXXXXXXXXX` || exit 1OUTPUT=`basename "$DEBFILE" .deb`.editado.debif [[ -e "$OUTPUT" ]]; thenecho "$OUTPUT existe."rm -r "$TMPDIR"exit 1fidpkg-deb -x "$DEBFILE" "$TMPDIR"dpkg-deb --control "$DEBFILE" "$TMPDIR"/DEBIANif [[ ! -e "$TMPDIR"/DEBIAN/control ]]; thenecho DEBIAN/control non ecsiste! =Prm -r "$TMPDIR"exit 1fiCONTROL="$TMPDIR"/DEBIAN/controlMOD=`stat -c "%y" "$CONTROL"`gedit "$CONTROL"if [[ "$MOD" == `stat -c "%y" "$CONTROL"` ]]; thenecho Inalterado.elseecho Construindo novo pacote deb...dpkg -b "$TMPDIR" "$OUTPUT"firm -r "$TMPDIR"
  • A palavra gedit que aparece no código do script pode ser modificada. Aquela linha de comando será usada para fazer o aplicativo GEdit abrir para edição o arquivo de controle de versões/dependências que se encontra dentro do pacote .deb.

    Se você não possui o GEdit instalado em seu sistema, instale-o executando este comando, no terminal:
    sudo apt-get install gedit
    Alternativamente, você pode substituir a palavra gedit pelo nome do seu editor de textos padrão ou preferido. Exemplo: se você possui o Mousepad instalado no seu sistema (é o que eu uso, por exemplo), coloque a palavra mousepad no lugar da palavra gedit. Neste caso, o código do script ficará assim:
    mousepad "$CONTROL"
    Se o seu editor for o Leafpad, então o código do script ficará assim:
    leafpad "$CONTROL"
    Quer saber se você tem o GEdit instalado? Abra o terminal e execute este comando:
    gedit &
    Se o GEdit estiver instalado, uma janela dele surgirá na sua frente.

    O mesmo método funciona também com o Mousepad e com o Leafpad:

    mousepad &
    leafpad &
  • Agora salve o arquivo onde você quiser e com o nome que você quiser. Ah: e não é preciso adicionar extensão nenhuma ao arquivo.

    Só para eu ter uma referência neste tutorial, vou supor que você salvou o arquivo com o nome edd (a palavra vem de editor de dependências) e que esse arquivo foi gravado dentro de ~/Downloads

    Nota: o símbolo ~ é um atalho que sempre aponta para a pasta pessoal do usuário que está logado no sistema. Se, por exemplo, a sua pasta pessoal for /home/fulano, então ~ é a mesma coisa que /home/fulano. Supondo que dentro da sua pasta pessoal exista uma pasta Downloads, o caminho ~/Downloads significa que você salvou o arquivo edd dentro da pasta Downloads que existe dentro da sua pasta pessoal.

    Outro exemplo: se a sua conta é cicrano e o seu sistema GNU/Linux cria as contas dos usuários dentro da pasta /home, então ~ é a mesma coisa que /home/cicrano e ~/Downloads é a mesma coisa que /home/cicrano/Downloads, entendeu? ;)
  • Agora que você criou o arquivo edd e o salvou dentro de ~/Downloads, é necessário tornar o arquivo executável, para que o seu sistema compreenda que ele é um script.

    Vamos lá. Abra o terminal do shell e execute este comando, para tornar o seu arquivo executável:
    sudo chmod +x ~/Downloads/edd
    ...lembrando que se você não salvou o arquivo com o nome edd e/ou não o gravou dentro de ~/Downloads, então você precisa colocar os valores corretos no comando acima e em todos os outros comandos que eu vier a apresentar neste tutorial contendo referências ao edd e/ou ao caminho ~/Downloads. Fique esperto/a!
  • Agora que o script é executável, faça download do pacote .deb que você deseja corrigir.

    Apenas para eu ter uma referência neste tutorial, vou supor que você está querendo corrigir o bug que aconteceu no pacote do Google Chrome. Mas lembre-se: o script serve para corrigir qualquer pacote .deb que internamente possua um arquivo de controle de dependências.

    Bem, supondo que você esteja querendo corrigir o bug do pacote do Google Chrome (que é para sistemas de 32 bits), você certamente acessou o website oficial do Google Chrome e fez download do pacote google-chrome-stable_current_i386.deb. Eu vou assumir que você salvou esse pacote .deb dentro de ~/Downloads, ok?
  • Bem, continuando: se você havia tentado instalar esse pacote e acabou quebrando a instalação dele (o aplicativo não funciona mais), execute os comandos abaixo para desinstalar o aplicativo e limpar o repositório do APT. Mas lembre-se de executar todos os comandos na exata sequência em que aparecem, de cima para baixo e dentro de uma única janela do terminal:
    sudo apt-get remove google-chrome-stable
    sudo apt-get clean
    sudo apt-get autoremove
    Notas: se após a execução do autoremove o sistema perguntar se você deseja desinstalar alguma coisa, confirme. E, claro: se o pacote que você está manipulando não é o do Google Chrome, então substitua aquele google-chrome-stable pelo nome correto do pacote.

    Não sabe qual é o nome correto do pacote .deb? Neste caso, recomendo instalar o aplicativo Synaptic. Ele facilita bastante a pesquisa de nomes de pacotes .deb no seu repositório. Este é o comando para instalar o Synaptic:
    sudo apt-get install synaptic
    Depois basta executar o Synaptic a partir do menu do seu GNU/Linux. Caso não encontre o Synaptic pelo menu da interface gráfica, abra uma nova janela do terminal e execute este comando:
    sudo synaptic
  • Agora que o seu repositório local de pacotes está limpo (você já fechou o Synaptic e a janela do terminal), você precisa executar o seu script. Abra uma nova janela do terminal e execute estes comandos:
    cd ~/Downloads
    ./edd ./google-chrome-stable_current_i386.deb
    Novamente: estou supondo que você salvou o script com o nome edd, dentro de ~/Downloads, e que você fez download do pacote google-chrome-stable_current_i386.deb também para dentro de ~/Downloads, portanto, neste exemplo fictício, tanto o script quanto o pacote .deb estão dentro de ~/Downloads
  • O script vai extrair o conteúdo do pacote .deb e usar o seu editor de textos (aquele que você definiu no item 2) para carregar na sua frente uma janela contendo o código do arquivo de controle de dependências. Esse arquivo de controle nada mais é que um arquivo texto, portanto ele pode ser editado e salvo.

    Tudo o que você precisa fazer é corrigir os nomes e/ou as versões dos arquivos que são mencionados dentro do arquivo de controle, clicar no botão "Salvar" e então fechar a janela do editor de textos. Moleza, né? :lol:
  • Assim que a janela do editor de textos for fechada, o script vai retomar a execução dele e começar a construir um novo pacote .deb, só que usando o arquivo de controle que foi modificado por você.

    O novo pacote será criado dentro do mesmo local em que o script foi executado. O nome desse novo pacote terminará com .editado.deb, para que você consiga distinguir o pacote original e o que foi editado por você.
  • Vamos supor que o novo pacote se chame google-chrome-stable_current_i386.editado.deb e que ele foi criado dentro de ~/Downloads. Neste caso, volte ao terminal e execute os seguintes comandos, para instalá-lo:
    cd ~/Downloads
    sudo dpkg -i google-chrome-stable_current_i386.editado.deb
  • Pronto! O novo pacote .deb foi criado e instalado! :-BEER

    Notas:
    i) No caso do Google Chrome, pode acontecer de ele não executar porque a sandbox dele não foi corretamente configurada. Se isso ocorrer com você, execute estes comandos, no terminal:
    sudo chown root /opt/google/chrome/chrome-sandbox
    sudo chmod 4755 /opt/google/chrome/chrome-sandbox
    Após executar esses dois comandos, tente novamente executar o Google Chrome, porque agora vai funcionar.

    ii) Se você usar este tutorial com outro pacote .deb e ocorrer algum problema com a execução do aplicativo instalado a partir de um pacote editado, experimente desinstalar o pacote com estes comandos:
    sudo dpkg -r nome_do_pacote
    sudo apt-get clean
    apt-get purge
    apt-get autoremove
    Em seguida, delete o pacote editado (final .editado.deb) e substitua os comandos do item 7 por estes:
    cd ~/Downloads
    sudo ./edd ./nome_do_pacote.editado.deb
    O uso do sudo fará o script ser executado com perfil de superusuário, o que pode (ou não...) resolver alguns problemas de reconstrução do pacote.

    Se o novo pacote continuar dando problema, pode ser que você tenha feito alguma edição indevida no arquivo de controle de dependências, ou ainda que o pacote não possa ser corrigido apenas com uma modificação nas dependências dele. Neste caso, o problema pode ser mais complexo e por isto não será possível sanar o problema somente com o script deste tutorial. Neste caso, que tal colocar o seu gorrinho geek, desvendar o mistério e criar o seu próprio tutorial? :joia:

É isso. :bandeira:

PS: o código-fonte do script deste tutorial foi obtido aqui e adaptado.

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
  • Membro VIP

Legal! Parabéns por dar os créditos ao autor original e por compartilhar conosco! :)

 

Gostaria de deixar uma dica caso precise somente forçar a instalação do pacote deb, sem modificar as dependências que é com a opção --force-depends do dpkg. Outras opções do gênero podem ser vistas com --force-help.

 

Abraço!

Link para o comentário
Compartilhar em outros sites

Legal! Parabéns por dar os créditos ao autor original e por compartilhar conosco! :)

 

Gostaria de deixar uma dica caso precise somente forçar a instalação do pacote deb, sem modificar as dependências que é com a opção --force-depends do dpkg. Outras opções do gênero podem ser vistas com --force-help.

 

Abraço!

 

Obrigado, Fernando, pelo elogio.  :)

 

E valeu pela dica. Realmente, se a pessoa já dispuser das dependências corretas instaladas no sistema (apenas o arquivo de controle de dependências do pacote estiver errado), usar o dpkg com a opção --force-depends é uma solução bem prática.  ^_^

Link para o comentário
Compartilhar em outros sites

  • 5 anos depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...