Instalar um pacote a partir de um repositório externo no Ubuntu consiste em três etapas:
- Adicionar a chave GPG do repositório ao sistema
- Adicionar o repositório externo ao sistema
- Instalar o pacote a partir deste repositório externo
Mas ultimamente, você notaria uma mensagem sobre 'apt-key is deprecated' quando você tenta instalar pacotes de repositórios de terceiros.
Tome a instalação do Spotify no Ubuntu, por exemplo. Quando ss adiciona a chave GPG ao sistema, ele reclama.
É um aviso, não um erro. Não interrompe o processo. A chave GPG é adicionada ao seu sistema e você pode continuar adicionando o repositório externo.
No entanto, ele criará mais avisos (novamente, não erros). No exemplo aqui, se continuar adicionando o repositório externo, ele mostra uma mensagem, como a mensagem "a chave está armazenada no chaveiro herdado trusted.ggp".
No entanto, ele não interrompe a instalação do pacote. No exemplo, é possível instalar o pacote spotify-client
depois.
Se não for um erro, você precisa se preocupar com isso? Provavelmente não. Não agora, pelo menos. No entanto, seria melhor entender as mudanças futuras que virão para esse mecanismo.
Entendendo a descontinuação do apt-key e o problema do trusted.gpg
Há duas partes nesta mensagem:
- apt-key ser preterido
- Gerenciar arquivos de chaveiro em trusted.gpg.d
Chegaremos aos dois pontos daqui a pouco.
Quando você adiciona as chaves (.gpg ou .asc) de um repositório, seu sistema confia nos pacotes (assinados com essa chave) provenientes do repositório. Se você não adicionar a chave de um repositório, seu sistema não permitirá a instalação de pacotes a partir dele.
Por um longo tempo, a ferramenta de linha de comando apt-key
tem sido usada para gerenciar as chaves do repositório para o Debian e outras distribuições usando o gerenciamento de pacotes apt. Você pode adicionar, listar, atualizar e remover as teclas com este comando.
Problema com a forma como o apt-key funciona
Ele funciona adicionando as chaves ao arquivo /etc/apt/trusted.gpg
. O gerenciador de pacotes apt confia nas chaves dentro deste arquivo.
Parece bom, certo? No entanto, descobriu-se que era um possível problema de segurança. Seu sistema confia completamente nessas chaves, não apenas para os pacotes aos quais você as adicionou.
Imagine que você adicionou chaves ao repositório A para obter o pacote AA e ao repositório B para obter o pacote BB. Seu sistema aceitará de bom grado o pacote BB assinado pela chave do repositório A. Ele não pode relacionar as chaves com seus respectivos pacotes.
Agora, é mais fácil falar do que fazer porque há outros fatores em jogo, como política e preferências adequadas, mas isso abre uma superfície de ataque.
Esta é a razão pela qual o apt-key
está sendo preterido. Essa é a primeira parte da mensagem de aviso.
Ubuntu quer que você separe as chaves GPG
Chegando à segunda parte da mensagem de advertência; "Gerenciar arquivos de chaveiro em trusted.gpg.d".
O Ubuntu não quer que você adicione todas as chaves de assinatura no único arquivo /etc/apt/trusted.gpg
. Ele sugere o uso de um arquivo separado que estão localizados no diretório /etc/apt/trusted.gpg.d
.
É o mesmo mecanismo que ele usa para a lista de fontes onde as fontes de repositório externo são listadas em seu próprio arquivo em /etc/apt/sources.list.d
em vez de manter tudo sob o arquivo /etc/apt/sources.list
. Isso torna o gerenciamento dos repositórios externos um pouco mais fácil.
Isso significa que, em vez de usar o apt-key
dessa maneira:
curl -sS https://download.spotify.com/debian/pubkey_5E3C45D7B312C643.gpg | sudo apt-key add -
Você deve usá-lo assim:
curl -sS https://download.spotify.com/debian/pubkey_5E3C45D7B312C643.gpg | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/spotify.gpg
Que é basicamente adicionar a chave ao seu arquivo dedicado no diretório /etc/apt/trusted.d
. Ubuntu não vai reclamar mais.
Embora isso não corrija a preocupação original de assinar os pacotes entre si. A maneira correta de corrigir é adicionar o local da chave ao arquivo de lista de códigos-fonte do repositório. Discutiremos os dois métodos na próxima seção.
Solução 1: Adicionando as chaves GPG ao sistema para manter o Ubuntu feliz (relativamente mais fácil, mas não da maneira adequada)
Infelizmente, não há uma maneira fácil de contornar isso. Você terá que usar a linha de comando e você deve descobrir os parâmetros corretos. Não há nenhuma coisa de "execute isso e está feito".
A ideia aqui é adicionar a chave GPG sob seu arquivo dedicado em /etc/apt/trusted.gpg.d
.
Há alguns cenários.
Você já adicionou a chave no arquivo /etc/apt/trusted.gpg
Nesse caso, liste as chaves com este comando:
sudo apt-key list
Deve haver uma maneira de identificar o repositório. Você deve ter seu nome ou nome de desenvolvedores.
No meu caso, estou lidando com o repositório Spotify:
Copie os últimos 8 caracteres da segunda linha em pub. No nosso caso, é B312 C643
. Você terá que remover o espaço entre os números e usá-lo assim:
sudo apt-key export B312C643 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/spotify.gpg
O arquivo de saída pode ser nomeado para qualquer coisa, mas é melhor usar um nome associado ao pacote ou repositório.
A parte gpg --dearmour
é importante porque o mecanismo espera que você tenha as chaves no formato binário.
Você ainda não adicionou as chaves externas
Bem, nesse caso, obtenha as chaves e adicione-as ao seu diretório trsuted.gpg.d.
Se ao menos fosse tão simples assim. As chaves podem estar em vários formatos de arquivo como .asc, .gpg etc. E então essas chaves podem ser blindadas.
Um arquivo GPG blindado é criptografado, mas mostra texto aleatório em vez de estar em formato binário. Uma chave GPG blindada começa com:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Mas sua chave GPG não deve ser 'blindada'. Deve estar em formato binário (se você tentar lê-lo, ele mostra rabiscos).
ay`�����?o;���Lh����҇�^j?�,4�@8�Xh�]�j�F��Q��W�ă|,%C�n��nG�t������b%/Ka����i���
É por isso que é importante usar sudo gpg --dearmour
ao manusear as chaves. Se as chaves adicionadas não estiverem no formato binário, você começará a ver esta mensagem na saída do comando apt update:
The key(s) in the keyring /etc/apt/trusted.gpg.d/spotify.gpg are ignored as the file has an unsupported filetype.
Você também pode usar o comando file para verificar se a chave está blindada ou não.
file repo-key.gpg
e se a saída for como 'PGP public key block', é um arquivo blindado e precisa ser convertido em binário.
$ file /etc/apt/trusted.gpg.d/spotify.gpg
/etc/apt/trusted.gpg.d/spotify.gpg: PGP public key block Public-Key (old)
Então, as etapas aqui envolvem:
- Baixar as chaves e verificando se é blindado ou não
- Se o arquivo é blindado, ele precisa ser desblindado em formato binário
- E então a chave desblindada é adicionada ao seu próprio arquivo no diretório
/etc/apt/trusted.gpg.d
Você pode combinar tudo em um único comando como este, dado que você sabe que é uma chave blindada.
curl -sS https://download.spotify.com/debian/pubkey_5E3C45D7B312C643.gpg | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/spotify.gpg
Como mencionado anteriormente, isso é relativamente mais fácil, mas não da maneira correta. Qual é a maneira correta? Vamos discutir isso.
Solução 2: Adicionando as chaves GPG ao sistema da maneira correta
Isso é semelhante ao que você viu na seção anterior, mas tem mais uma etapa de adicionar o local da chave ao arquivo de lista de códigos-fonte do repositório.
- Baixar as chaves e verificando se é blindado ou não
- Se o arquivo é blindado, ele precisa ser desblindado em formato binário
- E, em seguida, a chave desblindada é adicionada ao seu próprio arquivo no diretório
/usr/share/keyrings
- O local do arquivo de chave é adicionado ao arquivo de lista de fontes do repositório
No mesmo exemplo, vamos adicionar a chave do repositório Spotify no diretório /usr/share/keyrings
.
curl -sS https://download.spotify.com/debian/pubkey_5E3C45D7B312C643.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/spotify.gpg
Agora, vem a próxima parte. Normalmente, o conteúdo do arquivo de lista de fontes é assim:
deb URL_do_repositorio stable non-free
Você deve editá-lo e adicionar o local do arquivo de chave assim:
deb [signed-by=/usr/share/keyrings/key-file.gpg] URL_do_repositorio stable non-free
Dessa forma, você está vinculando o pacote a uma chave específica. Agora, essa chave não pode ser usada para baixar qualquer outro pacote. Chega de assinatura cruzada.
No exemplo do Spotify, modificamos o comando dessa maneira para que a lista de fontes também contenha as informações assinadas.
echo "deb [signed-by=/usr/share/keyrings/spotify.gpg] http://repository.spotify.com stable non-free" | sudo tee /etc/apt/sources.list.d/spotify.list
O que vem a seguir?
Como você pode ver, não há um mecanismo fácil de usar para substituir o comando apt-key
. Requer muito esforço manual e não deveria ser assim.
Uma vez que é a fase de transição, a mensagem 'apt-key is deprecated' é um aviso, mas as coisas podem ser mais rigorosas em versões futuras do Ubuntu.
Por enquanto, mesmo que você ignore esse aviso, poderá continuar usando o repositório externo.
Talvez o ônus recai sobre o provedor de repositório externo. Eles devem ser os únicos que fornecem a maneira correta de adicionar seu repositório.
O navegador Brave fornece as instruções corretas e modernas, mas muitos outros, como o Spotify, não fazem isso. A mudança deve vir do lado do desenvolvedor. O usuário não deve estar lidando com as mensagens de aviso e erro.
Não é um dos melhores artigos, pois tem muitos pontos em movimento e deixa muitas coisas para você descobrir. O artigo pode não esclarecer todas as coisas. Se for esse o caso, por favor, deixe suas perguntas e sugestões na seção de comentários e tentaremos explicá-lo ainda mais.