pacman (Português)

Status de tradução:
Esse artigo é uma tradução de
Pacman
. Data da última tradução: 2024-04-02. Você pode ajudar a sincronizar a tradução, se houver
alterações
na versão em inglês.
Artigos relacionados
Criando pacotes
Fazendo downgrade de pacotes
pacman/Assinatura de pacote
pacman/Pacnew e Pacsave
pacman/Restaurar base de dados local
pacman/Roseta
pacman/Dicas e truques
FAQ (Português)#Gerenciamento de pacote
Manutenção do sistema
Sistema de compilação do Arch
Repositórios oficiais
Arch User Repository
O
gerenciador de pacote
pacman
é uma das grandes vantagens do Arch Linux. Combina um simples pacote no formato binário, com um fácil uso de
sistema de compilação
. A meta do pacman é tornar o mais fácil possível gerenciar pacotes, sejam eles dos
repositórios oficiais
ou das próprias compilações do usuário.
O pacman mantém o sistema atualizado, listas de pacotes de sincronização com o servidor mestre. Este modelo servidor/cliente também permite o usuário baixar/instalar pacotes com um simples comando, completo com todas as dependências requeridas.
O pacman é escrito na linguagem de programação
C
e usa o formato
tar
do
bsdtar(1)
para empacotamento.
Dica
O pacote
pacman
contém ferramentas tal como
makepkg
e
vercmp(8)
. Outras ferramentas úteis como o
pactree
e
checkupdates
estão localizados em
pacman-contrib
(
anteriormente
parte do
pacman
). Execute
pacman -Ql pacman pacman-contrib | grep -E 'bin/.+'
para ver a lista completa.
Uso
O que se segue é apenas uma pequena amostra das operações que o
pacman
pode executar. Para ler mais exemplos, consulte
pacman(8)
.
Dica
Para usuários que utilizaram outras distribuições linux antes, ver o artigo
pacman/Roseta
será útil.
Instalando pacotes
Um pacote é um arquivo contendo:
todos os arquivos (compilados) de um aplicativo
metadados sobre o aplicativo, tal como o nome do aplicativo, versão, dependências etc.
arquivos e instruções de instalação para o
pacman
(opcionalmente) arquivos extras para facilitar sua vida, tal como script para iniciar/parar
O
pacman
, gerenciador de pacotes do Arch, pode instalar, atualizar e remover esses pacotes. O uso de pacotes em vez de compilar e instalar programas você mesmo possui vários benefícios:
facilmente atualizável:
pacman
vai atualizar pacotes existentes assim que atualizações estiverem disponíveis
verificações de dependência:
pacman
lida com dependências para você, você só precisa especificar o programa e o
pacman
o instala junto com todos os outros programas de que precisa
remoção de limpeza:
pacman
tem uma lista de todos os arquivos em um pacote; dessa forma, nenhum arquivo é deixado para trás por equívoco quando você decide remover um pacote.
Nota
Alguns pacotes muitas vezes têm
dependências opcionais
de pacotes que fornecem funcionalidades adicionais para o aplicativo, apesar de não serem estritamente necessárias para executá-lo. Ao instalar um pacote, o
pacman
irá listar as dependências opcionais do pacote, porém elas não serão encontradas no arquivo
pacman.log
. Utilize o comando
#Consultando base de dados de pacotes
para visualizar as dependências opcionais de um pacote.
Ao instalar um pacote que requer apenas uma dependência (opcional) de algum outro pacote (isto é, necessário por você), é recomendado usar a opção
--asdeps
. Para detalhes, veja a seção
#Motivo de instalação
.
Atenção
Ao instalar pacotes no Arch, evite atualizar a lista de pacotes sem
atualizar o sistema
(por exemplo, quando um
pacote não é encontrado
nos repositórios oficiais). Na prática,
não
execute o comando
pacman -Sy
nome_pacote
, pois isso poderia levar para problemas de dependências. Veja
Manutenção do sistema#Sem suporte a atualizações parciais
e
BBS#89328
.
Instalando pacotes específicos
Para instalar um único pacote ou lista de pacotes, incluindo dependências, execute o seguinte comando:
# pacman -S
nome_pacote1
nome_pacote2
...
Para instalar uma lista de pacotes com expressão regular (veja
esse tópico do fórum
):
# pacman -S $(pacman -Ssq
regexp_pacote
)
Às vezes, há várias versões de um pacote nos diferentes repositórios, por exemplo
extra
e
testing
. Para instalar a versão do repositório
extra
neste exemplo, o repositório deve ser definido na frente do nome do pacote:
# pacman -S extra/
nome_pacote
Para instalar um número de pacotes que compartilham padrões em sua nomenclatura, pode-se usar expansão com chaves:
# pacman -S plasma-{desktop,mediacenter,nm}
Isso pode ser expandido para quaisquer níveis sejam necessários:
# pacman -S plasma-{workspace{,-wallpapers},pa}
Pacotes virtuais
Um pacote virtual é um pacote especial que não existe por si só, mas é
fornecido
por um ou mais outros pacotes. Os pacotes virtuais permitem que outros pacotes não nomeiem um pacote específico como uma dependência, no caso de haver vários candidatos. Os pacotes virtuais não podem ser instalados por seus nomes, em vez disso, eles são instalados no seu sistema quando você instalou um pacote
fornecendo
o pacote virtual.
Dica
Quando houver vários candidatos, a lista de opções apresentada será classificada primeiro por
repositórios
na ordem em que aparecem em
pacman.conf
, depois em ordem alfabética quando houver vários resultados do mesmo repositório.
Instalando grupos de pacotes
Alguns pacotes pertencem a um
grupo de pacotes
que podem ser instalados simultaneamente. Por exemplo, o comando:
# pacman -S gnome
solicitará que você selecione os pacotes do grupo
gnome
que você deseja instalar.
Às vezes, um grupo de pacote conterá uma grande quantidade de pacotes, e pode haver só alguns que você quer ou não instalar. Em vez de digitar todos os números, exceto aqueles que você não quer, pode ser mais conveniente selecionar ou excluir pacotes ou intervalos de pacotes com a seguinte sintaxe:
Digite uma seleção (padrão=todos): 1-10 15
que vai selecionar pacotes 1 até 10 e 15 para a instalação, ou:
Digite uma seleção (padrão=todos):: ^5-8 ^2
vai selecionar todos os pacotes, exceto 5 até 8 e 2 para a instalação.
Para ver quais pacotes pertencem ao grupo gnome, execute:
$ pacman -Sg gnome
Também visite
https://archlinux.org/groups/
para saber quais os grupos de pacotes disponíveis.
Nota
Se um pacote na lista já está instalado no sistema, ele será reinstalado mesmo se já estiver atualizado. Este comportamento pode ser substituído com a opção
--needed
.
Removendo pacotes
Para remover um único pacote, deixando todas as suas dependências instaladas:
# pacman -R
nome_pacote
Para remover um pacote e suas dependências que não são exigidas por qualquer outro pacote instalado:
# pacman -Rs
nome_pacote
Atenção
Ao remover um grupo, como
gnome
, isso ignora o motivo da instalação dos pacotes no grupo porque age como se cada pacote no grupo estivesse listado separadamente. A razão de instalação das dependências ainda é respeitada.
Às vezes, o comando acima pode se recusar a executar ao remover um grupo que contém pacotes necessários. Nesse caso, tente:
# pacman -Rsu
nome_pacote
Para remover um pacote, suas dependências e todos os pacotes que dependem deste pacote:
Atenção
Esta operação é recursiva, e deve ser usada com cuidado, pois pode remover muitos pacotes potencialmente necessários.
# pacman -Rsc
nome_pacote
Para remover um pacote, o qual é exigido por outro pacote, sem remover o pacote dependente:
Atenção
A operação a seguir pode quebrar um sistema e deve ser evitada. Veja
Manutenção do sistema#Evite certos comandos do pacman
.
# pacman -Rdd
nome_pacote
O pacman salva arquivos de configuração importantes ao remover certos aplicativos e os nomeia com a extensão
.pacsave
. Para prevenir a criação desses arquivos de backup use a opção
-n
:
# pacman -Rn
nome_pacote
Nota
O pacman não removerá as configurações que o próprio aplicativo cria (por exemplo, "dotfiles" do diretório home).
Atualizando pacotes
Atenção
Os usuários devem seguir as orientações em
Manutenção do sistema#Atualizando o sistema
para atualizar os seus sistemas regularmente e nao executar o seguinte comando as cegas.
Arch suporta apenas atualizações completa de sistema. Veja
Manutenção do sistema#Sem suporte a atualizações parciais
e
#Instalando pacotes
para mais detalhes.
O pacman pode atualizar todos os pacotes no sistema com apenas um comando. Isso pode demorar um pouco dependendo de como anda a atualização do sistema. Este comando pode sincronizar as bases de dados do repositório
e
atualizar os pacotes do sistema (excluindo pacotes "locais" que não estão nos repositórios configurados):
# pacman -Syu
Consultando base de dados de pacotes
O pacman consulta a base de dados do pacote local com a opção
-Q
, a base de dados de sincronização com a opção
-S
e a base de dados de arquivos com a opção
-F
. Veja
pacman -Q --help
,
pacman -S --help
e
pacman -F --help
para as respectivas subopções de cada opção.
O pacman pode pesquisar por pacotes na base de dados, pesquisando nomes e descrições dos pacotes:
$ pacman -Ss
string1
string2
...
Algumas vezes, ERE (Extended Regular Expressions) incorporadas no
-s
podem causar muitos dos resultados indesejados, então têm que ser limitadas a corresponder ao nome de pacote apenas; não a descrição nem qualquer outro campo:
$ pacman -Ss '^vim-'
Para procurar os pacotes já instalados:
$ pacman -Qs
string1
string2
...
Para procurar nomes de pacotes em pacotes remotos:
$ pacman -F
string1
string2
...
Para exibir informações detalhadas sobre um determinado pacote:
$ pacman -Si
nome_pacote
Para os pacotes instalados localmente:
$ pacman -Qi
nome_pacote
Inserindo duas opções
-i
também exibirá a lista de arquivos de backup e seus estados de alterações:
$ pacman -Qii
nome_pacote
Para obter uma lista dos arquivos instalados por um pacote:
$ pacman -Ql
nome_pacote
Para obter uma lista dos arquivos instalados por um pacote remoto:
$ pacman -Fl
nome_pacote
Para verificar a presença dos arquivos instalados por um pacote:
$ pacman -Qk
nome_pacote
Passando a opção
k
duas vezes, irá ser realizado uma verificação mais aprofundada.
Pode-se também consultar a base de dados para saber qual pacote um arquivo no arquivo do sistema pertence:
$ pacman -Qo
/caminho/para/nome_de_arquivo
Para consultar o banco de dados para saber de qual pacote remoto um arquivo pertence:
$ pacman -F
/caminho/para/nome_de_arquivo
Para listar todos os pacotes que não são exigidos como dependências (órfãos):
$ pacman -Qdt
Para listar todos os pacotes explicitamente instalados e que não são necessários como dependências:
$ pacman -Qet
Veja
pacman/Dicas e truques
para mais exemplos.
Pactree
Nota
pactree(8)
não é mais parte do pacote
pacman
. Agora ele pode ser encontrado no
pacman-contrib
.
Para visualizar a árvore de dependência de um pacote:
$ pactree
nome_pacote
Para ver uma área dependente de um pacote, passe a opção reversa
-r
ao
pactree
, ou use
whoneeds
de
pkgtools
AUR
[
link quebrado
: package not found]
.
Estrutura da base de dados
As bases de dados do
pacman
estão normalmente localizadas em
/var/lib/pacman/sync
. Para cada repositório especificado em
/etc/pacman.conf
haverá um arquivo de base de dados correspondente localizado lá. Os arquivos das bases de dados são arquivos tar "gzipados" contendo um diretório para cada pacote, por exemplo, para o pacote
which
:
$ tree which-2.21-5
which-2.21-5
|-- desc
O arquivo
desc
contém metadados como a descrição do pacote, dependências, tamanho do arquivo e o hash do MD5.
Limpando o cache de pacotes
O pacman armazena seus pacotes baixados em
/var/cache/pacman/pkg/
e não remove as versões antigas ou desinstaladas automaticamente. Isso tem algumas vantagens:
Isso permite fazer
downgrade
de um pacote sem a necessidade de obter a versão anterior por outros meios, tal como o
Arch Linux Archive
.
Um pacote que tenha sido desinstalado pode ser facilmente reinstalado diretamente do diretório de cache, não exigindo um novo download do repositório.
Portanto, é necessário limpar deliberadamente esse diretório periodicamente para evitar que essa pasta cresça indefinidamente em tamanho.
O script
paccache(8)
, fornecido no pacote
pacman-contrib
, exclui todas as versões em cache de pacotes instalados e desinstalados, excepto para os três mais recentes, por padrão:
# paccache -r
Habilite
e
inicie
paccache.timer
para descartar pacotes não usados semanalmente.
Dica
Você pode criar um
hook
para executar isso automaticamente após cada transação do
pacman
.
Instale
paccache-hook
AUR
e veja
outros exemplos
.
Você também pode definir quantas versões mais recentes você deseja manter. Para reter apenas a uma versão anterior, use:
# paccache -rk1
Adicione a opção
-u
/
--uninstalled
para limitar a ação do
paccache
a pacotes desinstalados. Por exemplo, para remover todas as versões em cache de pacotes desinstalados, use o seguinte:
# paccache -ruk0
Veja
paccache -h
para mais opções.
O pacman também tem algumas opções embutidas para limpar o cache e os arquivos de base de dados restantes dos repositórios que não estão mais listados no arquivo de configuração
/etc/pacman.conf
. No entanto, o
pacman
não oferece a possibilidade de manter um número de versões anteriores e, portanto, é mais agressivo do que as opções padrão do
paccache
.
Para remover todos os pacotes em cache que não estão instalados atualmente e as bases de dados de sincronização não utilizadas, execute:
# pacman -Sc
Para remover todos os arquivos do cache, use a opção de limpeza duas vezes, sendo essa a abordagem mais agressiva e que vai deixar nada no diretório de cache:
# pacman -Scc
Atenção
Deve-se evitar apagar do cache todas as versões anteriores dos pacotes instalados e todos os pacotes desinstalados, a menos que se necessita desesperadamente liberar algum espaço em disco. Isso impedirá o downgrade ou a reinstalação de pacotes sem baixá-los novamente.
pkgcacheclean
AUR
e
pacleaner
AUR
são duas alternativas para limpar o cache.
Comandos adicionais
Faça o download de um pacote sem instalá-lo:
# pacman -Sw
nome_pacote
Instale um pacote "local" que não seja de um repositório remoto (ex., o pacote é do
AUR
):
# pacman -U
/caminho/para/pacote/nome_pacote-versão.pkg.tar.zst
Para manter uma cópia do pacote local no cache do
pacman
, use:
# pacman -U file:///
caminho/para/pacote/nome_pacote-versão.pkg.tar.zst
Instale um pacote "remoto" (não de um repositório indicado nos arquivos de configuração do pacman):
# pacman -U
http://www.exemplo.com/repo/exemplo.pkg.tar.zst
Simulação
O pacman sempre lista os pacotes a serem instalados ou removidos e pede permissão antes de executar qualquer ação.
Para obter uma lista em formato processável e evitar as ações de
-S
,
-U
e
-R
, você pode usar
-p
, encurtamento para
--print
.
--print-format
pode ser adicionado para formatar essa lista em várias formas.
--print-format %n
vai retornar uma lista sem versões de pacotes.
Motivo de instalação
A base de dados do
pacman
organiza os pacotes instalados em dois grupos de acordo com o motivo de instalação:
instalados explicitamente
: pacotes foram passados literalmente para um comando genérico
pacman
-S
ou
-U
;
dependências
: pacotes que, apesar de nunca (em geral) terem sido passados para um comando de instalação do
pacman
, foram instalados
implicitamente
porque eles foram
exigidos
por pacotes instalados explicitamente.
Ao instalar um pacote, é possível forçar o motivo da instalação da
dependência
com:
# pacman -S --asdeps
nome_pacote
O comando normalmente é usado porque pacotes instalados explicitamente podem oferecer
pacotes opcionais
, geralmente para recursos não essenciais os quais o usuário pode optar utilizar.
Dica
A instalação de dependências opcionais com
--asdeps
vai garantir que, se você
remover pacotes órfãos
, o
pacman
também removerá pacotes opcionais definidos desta forma.
Ao
re
instalar um pacote, o motivo dessa instalação atual é preservado por padrão.
A lista de pacotes instalados explicitamente pode ser vista com
pacman -Qe
, enquanto a lista de dependências instaladas pode ser vista com
pacman -Qd
.
Para alterar o motivo da instalação de um pacote já instalado, execute:
# pacman -D -asdeps
nome_pacote
Use
--asexplicit
para a operação oposta.
Nota
O uso das opções
--asdeps
e
--asexplicit
na atualização, como com
pacman -Syu
nome_pacote
--asdeps
, não é recomendado. Isso alteraria o motivo da instalação não apenas do pacote que está sendo instalado, mas também dos pacotes que estão sendo atualizados.
Pesquisar por um pacote que contenha um arquivo específico
Sincronize a base de dados de arquivos:
# pacman -Fy
Pesquise por um pacote contendo um arquivo, p.ex.:
$ pacman -F pacman
core/pacman 5.2.1-1 (base base-devel) [installed]
    usr/bin/pacman
    usr/share/bash-completion/completions/pacman
extra/xscreensaver 5.43-1
    usr/lib/xscreensaver/pacman
Dica
Você pode
iniciar/habilitar
o
pacman-filesdb-refresh.timer
(fornecido junto com o pacote
pacman-contrib
) para atualizar a base de dados do pacman semanalmente.
Para funcionalidade avançada, instale o
pkgfile
, que usa uma base de dados separada com todos os arquivos e seus pacotes associados.
O que acontece durante a instalação/atualização/remoção de pacote
Quando bem-sucedido, o fluxo de trabalho da transação segue cinco etapas de alto nível somados aos hooks de pré-/pós-transação:
Inicializa a transação se não houver uma trava de base de dados
Escolhe quais pacotes serão adicionados ou removidos na transação
Prepara a transação, com base nos sinalizados, executando verificações de sincronização nas bases de dados de sincronização, pacotes e suas dependências
Execução da transação:
Quando aplicável, baixa pacotes (
_alpm_sync_load
)
Se um hook pré-existente de
PreTransaction
do
pacman
se aplicar, ele será executado.
Pacotes são removidos por sere alvos de substituição, conflitantes ou por serem alvos explícitos de remoção
Se esses são pacotes para serem adicionados, cada pacote é tratado
Se o pacote tem um script de instalação, sua função
pre_install
é executada (ou
pre_upgrade
ou
pre_remove
no caso de um pacote atualizado ou removido).
O pacman exclui todos os foram marcados como arquivos de configuração no pacote são mantidos (veja
/Pacnew e Pacsave
).
O pacman descompacta o pacote e despeja seus arquivos no sistema de arquivos (no caso de um pacote instalado ou atualizado). Os arquivos que sobrescreveriam os arquivos de configuração mantidos, e manualmente modificados (veja a etapa anterior), são armazenados com um novo nome (.pacnew).
Se o pacote tem um script de instalação, sua função
post_install
é executada (ou
post_upgrade
ou
post_remove
no caso de um pacote atualizado ou removido).
Se os hooks de
PostTransaction
do
pacman
que existem no fim da transação se aplicarem, eles são executados.
Libera a transação e o recurso de transação (isto é, trava da base de dados)
Configuração
As configurações do
pacman
estão localizados em
/etc/pacman.conf
: este é o local onde o usuário configura o programa para funcionar da forma desejada. Informações detalhadas sobre o arquivo de configuração pode ser encontrada em
pacman.conf(5)
.
Opções gerais
Opções gerais estão na seção
[options]
. Leia
pacman.conf(5)
ou olhe no
pacman.conf
padrão para obter informações sobre o que pode ser feito aqui.
Comparando versões antes de atualizar
Para ver versões antigas e novas dos pacotes disponíveis, descomente a linha "VerbosePkgLists" em
/etc/pacman.conf
. A saída de
pacman -Syu
será algo como:
Pacote (6)            Versão antiga  Versão nova    Alteração   Tamanho de download

extra/libmariadbclient  10.1.9-4     10.1.10-1      0.03 MiB       4.35 MiB
extra/libpng            1.6.19-1     1.6.20-1       0.00 MiB       0.23 MiB
extra/mariadb           10.1.9-4     10.1.10-1      0.26 MiB      13.80 MiB
Habilitando downloads em paralelo
O pacman 6.0 introduziu a opção de baixar pacotes em paralelo.
ParallelDownloads
em
[options]
precisa ser definido com um inteiro positivo em
/etc/pacman.conf
para usar este recurso (por exemplo,
5
). Caso contrário, os pacotes serão baixados sequencialmente se esta opção não estiver definida.
Pular pacotes para não serem atualizados
Atenção
Tenha cuidado ao pular pacotes, já que não há suporte a
atualizações parciais
.
Para pular a atualização de um pacote específico quando estiver
atualizando
o sistema, faça:
IgnorePkg=linux
Para vários pacotes use uma lista separada por espaço, ou use adicionais linhas
IgnorePkg
. Além disso, padrões de
glob
podem ser usados. Se você deseja pular pacotes apenas uma vez, você também pode usar a opção
--ignore
na linha de comando - dessa vez com uma lista separada por vírgula.
Ainda será possível atualizar pacotes ignorados usando
pacman -S
: neste caso,
pacman
lhe lembrará de que os pacotes têm incluídos em uma declaração de
IgnorePkg
.
Pular um grupos de pacotes para não serem atualizados
Atenção
Tenha cuidado ao pular grupos de pacotes, já que não há suporte a
atualizações parciais
.
Tal como acontece com os pacotes, pular um grupo de pacote inteiro também é possível:
IgnoreGroup=gnome
Pular arquivos para não serem atualizados
Todos os arquivos listados com uma diretiva
NoUpgrade
nunca serão tocados durante uma instalação/atualização de pacote, e os novos arquivos serão instalados com uma extensão
.pacnew
.
NoUpgrade=
caminho/para/arquivo
Vários arquivos podem ser especificados desta forma:
NoUpgrade=
caminho/para/arquivo1 caminho/para/arquivo2
Nota
O caminho se refere aos arquivos no arquivo do pacote. Portanto, não inclua a barra inicial.
Pular arquivos para não serem instalados no sistema
Para pular sempre a instalação de lista de diretórios sob
NoExtract
. Por exemplo, para evitar a instalação de units de
systemd
use:
NoExtract=usr/lib/systemd/system/*
Regras posteriores sobrescrevem as anteriores e podem negar uma regra adicionando antes
!
.
Dica
O pacman emite mensagens de avisos sobre locales faltando ao atualizar um pacote para os quais os locales foram limpados com
localepurge
ou
bleachbit
. Comentando a opção
CheckSpace
em
pacman.conf
suprime aviso, mas considera que a funcionalidade de verificação de espaço será desabilitada para todos os pacotes.
Manter vários arquivos de configuração
Se você tiver vários arquivos de configuração (ex.: configuração principal e configuração com repositório
testing
habilitado) e você gostaria de compartilhar opções entre configurações, você pode usar a opção
Include
declarada nos arquivos de configuração, ex.:
Include =
/caminho/para/configurações/comuns
sendo que arquivo
/caminho/para/configurações/comuns
contém as mesmas opções para ambas configurações.
Hooks
O pacman pode executar hooks de pré- e pós-transação do diretório
/usr/share/libalpm/hooks/
; mais diretórios podem ser especificados com a opção
HookDir
no
pacman.conf
, que tem como padrão
/etc/pacman.d/hooks
. Nomes de arquivo hook devem ser sufixados com
.hook
. Hooks do pacman não são interativos.
Hooks do pacman são usados, por exemplo, em combinação com
systemd-sysusers
e
systemd-tmpfiles
para criar automaticamente arquivos e usuários de sistema durante a instalação dos pacotes. Por exemplo,
tomcat8
AUR
especifica que ele deseja um usuário de sistema chamado
tomcat8
e certos diretórios pertencentes a este usuário. Os hooks do
pacman
systemd-sysusers.hook
e
systemd-tmpfiles.hook
chamam
systemd-sysusers
e
systemd-tmpfiles
quando o
pacman
determina que
tomcat8
AUR
contém arquivos especificando usuários e arquivos tmp.
Para mais informações sobre hooks do alpm, veja
alpm-hooks(5)
.
Repositórios e espelhos
Além da seção especial
[options]
, cada outra
[section]
no
pacman.conf
define um repositório de pacote a ser usado. Um
repositório
é uma coleção
lógica
de pacotes, que são armazenados
fisicamente
em um ou mais servidores: por esse motivo, cada servidor é chamado de um
espelho
para o repositório.
Repositórios são distinguidos entre
oficial
e
não oficiais
. A ordem de repositórios no arquivo de configuração importa; repositórios listados primeiro terão precedências sobre os listados posteriormente quando pacotes nos dois repositórios tiverem nomes idênticos, independentemente do número da versão. Para usar um repositório após adicioná-lo, você precisará
atualizar
todo o sistema primeiro.
Cada seção de repositório permite definir a lista de seus espelhos diretamente ou em um arquivo externo por meio da diretiva
Include
. Por exemplo, os espelhos para os repositórios oficiais são incluídos no
/etc/pacman.d/mirrorlist
. Veja o artigo
Espelhos
para configuração de espelho.
Diretório de cache de pacotes
O pacman armazena arquivos de pacotes baixados em cache, em um diretório indicado por
CacheDir
na seção
[options]
de
pacman.conf
(o padrão é
/var/cache/pacman/pkg/
se não estiver definido).
O diretório de cache pode crescer com o tempo, mesmo mantendo apenas as versões mais recentes dos pacotes instalados.
Se você quiser mover esse diretório para um local mais conveniente, siga um destes procedimentos:
Defina a opção
CacheDir
em
pacman.conf
para o novo diretório. Lembre-se de manter a barra à direita.
Esta é a solução recomendada
.
Monte uma partição dedicada ou, por exemplo,
subvolume de Btrfs
em
/var/cache/pacman/pkg/
.
Faça uma montagem de "bind" um diretório selecionado em
/var/cache/pacman/pkg/
.
Atenção
Não faça um link simbólico
do diretório
/var/cache/pacman/pkg/
para algum outro local. Isso
vai
fazer com que o pacman se comporte mal, especialmente quando o pacman tenta se atualizar.
Segurança de pacote
O
pacman
oferece suporte a assinaturas de pacotes, que adiciona uma camada extra de segurança para os pacotes. A configuração padrão,
SigLevel = Required DatabaseOptional
, habilita verificação de assinatura para todos os pacotes em um nível global. Isso pode ser sobrescrito por linhas
SigLevel
para cada repositório. Para mais detalhes sobre assinatura de pacote e verificação de assinatura, dê uma olhada em
pacman-key
.
Solução de problemas
Erro "falha em submeter a transação (arquivos conflitantes)"
Se você vir o erro:
[1]
erro: não foi possível preparar transação
erro: falha ao submeter transação (arquivos conflitantes)
pacote
:
/caminho/para/arquivo
existe no sistema de arquivos
Ocorreram erros e, portanto, nenhum pacote foi atualizado.
Isso aconteceu porque o
pacman
detectou um conflito de arquivo e, por design, não vai sobrescrever arquivos para você. Este é por design, e não uma falha.
O problema geralmente é trivial de resolver (apesar de que para ter certeza, você deve tentar descobrir como esses arquivos foram parar lá em primeiro lugar). Uma maneira segura é primeiro verificar se outro pacote possui o arquivo (
pacman -Qo
/caminho/para/arquivo
). Se o arquivo for de propriedade de outro pacote,
preencha um relatório de erro
. Se o arquivo não for de outro pacote, renomeie o arquivo que "existe no sistema de arquivos" e execute novamente o comando de atualização. Se tudo correr bem, o arquivo pode então ser removido.
Se você instalou um programa manualmente sem usar o
pacman
, (p.ex., por meio de
make install
), você tem que remover/instalar esse programa com seus arquivos. Veja também
Pacman/Dicas e truques#Identificar arquivos que pertençam a nenhum pacote
.
Todo pacote instalado fornece um arquivo
/var/lib/pacman/local/
$pacote-$versão
/files
que contém metadados sobre esse pacote. Se o arquivo ficar corrompido, vazio ou desaparecer, ele resulta em erros de
existe no sistema de arquivos
ao tentar atualizar o pacote. Tal erro geralmente está relacionado a um pacote. Em vez de renomear manualmente e posteriormente remover todos os arquivos que pertencem ao pacote em questão, você pode tentar executar explicitamente
pacman -S --overwrite
glob
pacote
para forçar o
pacman
a sobrescrever arquivos que correspondem a
glob
.
Atenção
Via de regra, evite usar a opção
--overwrite
. Veja
Manutenção do sistema#Evite certos comandos do pacman
.
Erro "falha em submeter a transação (pacote inválido ou corrompido)"
Procure por arquivos
.part
(pacotes baixados parcialmente) em
/var/cache/pacman/pkg/
e remove-os (muitas vezes causado pelo uso da opção
XferCommand
em
pacman.conf
).
# find /var/cache/pacman/pkg/ -iname "*.part" -delete
O mesmo erro também aparece se o
archlinux-keyring
estiver desatualizado, impedindo o
pacman
de verificar assinaturas. Veja
Pacman/Assinatura de pacote#Atualize o sistema regularmente
para a correção e como evitar isso no futuro.
Erro "falha ao iniciar a transação (não foi possível travar a base de dados)"
Quando o
pacman
vai alterar a base de dados de pacotes, por exemplo instalar um pacote, ele cria um arquivo de trava em
/var/lib/pacman/db.lck
. Isso evita que uma outra instância do
pacman
tente alterar a base de dados de pacotes ao mesmo tempo.
Se o
pacman
for interrompido enquanto altera a base de dados, esse arquivo de trava obsoleto pode permanecer. Se você tem certeza que nenhuma outra instância do
pacman
está em execução, então exclua o arquivo de trava:
# rm /var/lib/pacman/db.lck
Dica
Você pode executar
fuser /var/lib/pacman/db.lck
como root para verificar se há algum processo que ainda está usando-o.
Pacotes não podem ser obtidos na instalação
Esse erro se manifesta como
não encontrado na base de dados de sincronização
,
alvo não encontrado
ou
falha ao obter o arquivo
.
Primeiramente, assegure-se de que o pacote realmente existe. Se você tem certeza que o pacote existe, sua lista de pacote pode estar desatualizada. Tente execute
pacman -Syu
para forçar uma atualização de todas as listas de pacote e atualize. Também certifique-se que os
espelhos
selecionados estejam atualizados e
repositórios
são configurados corretamente.
Pode ser também que aquele repositório contendo o pacote não está habilidade no seu sistema. Por exemplo, o pacote pode estar no repositório
multilib
, mas o
multilib
não está habilitado em seu
pacman.conf
.
Veja também
FAQ (Português)#Por que há uma única versão de cada biblioteca compartilhada nos repositórios oficiais?
.
Pacman trava durante uma atualização
No caso do
pacman
travar com um erro de "escrita da base de dados" enquanto remove pacotes, e a reinstalação ou atualização de pacotes falha a partir daí, faça o seguinte:
Inicialize usando a mídia de instalação do Arch. De preferência, use uma mídia recente de forma que a versão do
pacman
seja igual ou mais nova do que a do sistema.
Monte o sistema de arquivos raiz do sistema (ex.:
mount /dev/sdaX /mnt
) como root e verifique se a montagem tem espaço suficiente com
df -h
Monte os sistemas de arquivos proc, sysfs e dev também:
mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
Se o sistema usa locais padrão de base de dados e diretórios, você pode agora atualizar a base de dados do
pacman
do sistema e atualizá-lo via
pacman --sysroot /mnt -Syu
como root.
Alternativamente, se você não consegue atualizar, confira
Pacman/Dicas e truques#Reinstalando todos pacotes
.
Após a atualização, uma forma de verificar se pacotes não atualizados, mas ainda quebrados:
find /mnt/usr/lib -size 0
Seguido pela reinstalação de qualquer pacote ainda quebrado via
pacman --sysroot /mnt -S
pacote
.
pacman: comando não encontrado
Se
/var/cache/pacman/pkg
for um link simbólico,
pacman
tentará criar um diretório e, assim, remover este link simbólico durante a atualização automática. Isso fará com que a atualização falhe. Como resultado,
/usr/bin/pacman
e outros conteúdos do pacote
pacman
estarão ausentes.
Nunca crie um link simbólico para
/var/cache/pacman/pkg
porque ele é controlado pelo
pacman
. Use a opção
CacheDir
ou uma montagem "bind"; veja
#Diretório de cache de pacotes
.
Se você já esbarrou neste problema e quebrou seu sistema, você pode extrair manualmente o conteúdo de
/usr
do pacote para restaurar o
pacman
e reinstalá-lo corretamente; veja
FS#73306
e o
tópico do fórum relacionado
para detalhes.
Reinstalação manual do pacman
Usando pacman-static
pacman-static
AUR
é uma versão compilada estaticamente de
pacman
, então ele poderá ser executado mesmo quando as bibliotecas do sistema não estiverem funcionando. Isso também pode ser útil quando uma
atualização parcial
foi executada e o
pacman
não pode mais ser executado.
O comentário fixado e o PKGBUILD fornecem uma maneira de baixar diretamente o binário, que pode ser usado para reinstalar o
pacman
ou para atualizar todo o sistema em caso de atualizações parciais.
Usando um pacman externo
Se mesmo
pacman-static
não funcionar, é possível recuperar usando um
pacman
externo. Um dos métodos mais fáceis de fazer isso é usar o
archiso
e simplesmente usar
--sysroot
ou
--root
para especificar o ponto de montagem. Veja
Chroot (Português)#Usando chroot
para saber como montar os sistemas de arquivos necessários exigidos por
--sysroot
.
Extraindo manualmente
Atenção
É extremamente fácil quebrar seu sistema ainda mais, usando essa abordagem. Use isso apenas como um último recurso se o método do
#Pacman trava durante uma atualização
não for uma opção.
Mesmo se o
pacman
estiver terrivelmente quebrado, você pode corrigi-lo manualmente baixando os últimos pacotes e extraindo-os para os locais corretos. Os passos difíceis a se executar são:
Determinar dependências do
pacman
para instalar
Baixar cada pacote de um
espelho
de sua escolha
Extrair cada pacote para a raiz
Reinstalar esses pacotes com
pacman -S --overwrite
para atualizar a base de dados de pacote
Fazer uma atualização completa do sistema
Se você tem um sistema do Arch saudável disponível, você pode ver a lista completa de dependências com:
$ pacman -Q $(pactree -u pacman)
Mas você pode precisar atualizar algumas delas, dependendo do seu problema. Um exemplo de extração de um pacote é
# tar -xvpwf
pacote.tar.zst
-C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO
Note que o uso da opção
w
para modo interativo. Executar não interativamente é muito arriscado já que você pode acabar sobrescrevendo um arquivo importante. Também tenha cuidado ao extrair pacotes na ordem correta (i.e. dependências primeiro).
Essa publicação no fórum
contém um exemplo deste processo no qual apenas duas dependências do
pacman
estava quebradas.
Erro "Unable to find root device" após a reinicialização
Muito provavelmente o
initramfs
acabou corrompido durante uma atualização do
kernel
(uso indevido da opção
--overwrite
do
pacman
pode ser uma causa). Há duas opções; primeiro, tente a entrada
Fallback
.
Dica
No caso de você ter removido o
Fallback
, você pode sempre pressionar a tecla
Tab
quando o gerenciador de boot aparecer (para Syslinux) ou
e
(para GRUB), renomear
initramfs-linux-fallback.img
e pressione
Enter
ou
b
(dependendo do seu
gerenciador de boot
) para inicializar com os novos parâmetros.
Quando o sistema iniciar, execute este comando (para o Kernel
linux
padrão) através do console ou de um terminal para reconstruir a imagem initramfs:
# mkinitcpio -p linux
Se isso não funcionar, de uma versão atual do Arch (CD/DVD ou pendrive USB),
monte
as partições
root
e
boot
em
/mnt
e
/mnt/boot
, respectivamente. Então, faça um
chroot
usando o
arch-chroot
:
# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux
Nota
Se você não tem uma versão atual ou se tem apenas alguma outra distribuição Linux "live", você pode fazer
chroot
usando o jeito antigo. Obviamente, terá que digitar mais do que simplesmente executar o script
arch-chroot
.
Se
pacman
falhar com
não foi possível resolver máquina
, por favor
verifique sua conexão com a Internet
.
Se você não conseguir entrar no ambiente do arch-chroot ou chroot, mas precisa reinstalar os pacotes, você pode usar o comando
pacman --sysroot /mnt -Syu foo bar
para usar o
pacman
em sua partição raiz.
A reinstalação do kernel (o pacote
linux
) vai gerar automaticamente a imagem com
mkinitcpio -p linux
. Não precisa fazer separadamente.
Após, recomenda-se que você execute
exit
,
umount /mnt/{boot,}
e
reboot
.
Erro 'aviso: locale atual é inválida; usando locale padrão "C"'
Como a própria mensagem de erro diz, sua locale está configurada incorretamente. Consulte
Locale
.
pacman não respeita as configurações de proxy
Certifique-se que as variáveis de ambiente relevantes (
$http_proxy
,
$ftp_proxy
etc.) estão configuradas. Se você usa o
pacman
com
sudo
, você precisa configurar o sudo para
passar essas variáveis ​​de ambiente para o pacman
. Além disso, certifique-se que a configuração de
dirmngr
tenha
honor-http-proxy
no
/etc/pacman.d/gnupg/dirmngr.conf
para honrar o proxy ao atualizar as chaves.
Como faço para reinstalar todos os pacotes, mantendo informações sobre se algo foi explicitamente instalado ou como uma dependência?
Para reinstalar todos os pacotes nativos:
pacman -Qnq | pacman -S -
ou
pacman -S $(pacman -Qnq)
(a opção
-S
preserva a razão de instalação por padrão).
Então você terá que reinstalar todos os pacotes externos, que podem ser listados com
pacman -Qmq
.
Erro "cannot open shared object file"
Parece que uma transição anterior do
pacman
removeu ou corrompeu as bibliotecas compartilhadas necessárias para o
pacman
em si.
Para recuperar dessa situação, você precisa desempacotar manualmente as bibliotecas necessárias para seu sistema. Primeiro descubra qual pacote contém a biblioteca em falta e, então, localize-o no cache do
pacman
(
/var/cache/pacman/pkg/
). Desempacote a biblioteca compartilhada necessária no sistema de arquivos. Isso vai permitir executar o
pacman
.
Agora, você precisa
reinstalar
o pacote quebrado. Note que você precisa usar a opção
--overwrite
, pois você acabou de desempacotar arquivos de sistema e o
pacman
não tem conhecimento deles. O pacman vai substituir corretamente nosso arquivo de biblioteca compartilhada com o do pacote.
É isso. Atualize o resto do sistema.
Congelamento de downloads de pacote
Houve alguns relatos a cerca de problemas de rede que impedem o
pacman
de atualizar/sincronizar repositórios.
[2]
[3]
Ao instalar o Arch Linux nativamente, essas questões foram resolvidas substituindo o gerenciador de download de arquivos padrão do
pacman
com um alternativo (veja
Melhorar desempenho do pacman
para mais detalhes). Ao instalar o Arch Linux como um SO hospedeiro no
Virtualbox
, essa questão também foi resolvido usando
Host interface
em vez de
NAT
nas propriedades da máquina.
Falha ao obter arquivo 'core.db' do espelho
Se você receber essa mensagem de erro com os
espelhos
(
mirrors
) corretos, tente configurar um
servidor de nomes
diferente.
erro: 'pacote-local.pkg.tar': permissão negada
Se você deseja instalar um pacote em uma montagem sshfs usando
pacman -U
e receber esse erro, mova o pacote para um diretório local e tente instalar novamente.
erro: não foi possível determinar o ponto de montagem do cachedir: /var/cache/pacman/pkg
Ao executar, por exemplo,
pacman -Syu
dentro de um ambiente chroot, um erro é encontrado:
erro: não foi possível determinar o ponto de montagem do cachedir: /var/cache/pacman/pkg
erro: falha ao efetuar a transação (não há espaço livre suficiente em disco)
Isso é frequentemente causado pelo diretório chroot não ser um ponto de montagem quando o chroot é inserido. Veja a nota em
Instalar a partir de um Linux existente#Selecionando um espelho e baixando ferramentas básicas
para uma solução, e
arch-chroot(8)
para uma explicação e um exemplo do uso de montagem de ligação para tornar o diretório chroot um ponto de montagem.
erro: Erro no GPGME: No data
Se você não está conseguindo atualizar pacotes e recebe este erro, tente
rm -r /var/lib/pacman/sync/
antes de tentar atualizar.
Se removendo os arquivos de sincronização não ajudar, verifique se os arquivos de sincronização são
gzip compressed data
usando
file /var/lib/pacman/sync/*
antes de tentar atualizar. Um roteador ou proxy pode corromper os downloads.
Se os arquivos de sincronização são do tipo correto, pode haver um problema com o servidor espelho. Procure o(s) servidor(es) espelho em uso com
pacman-conf -r core
e
pacman-conf -r extra
. Cole a primeira url retornada em um navegador e verifique se a lista de arquivos é retornada. No caso do espelho retornar um erro, comente ele em
/etc/pacman.d/mirrorlist
.
Veja também
Página inicial do pacman
libalpm(3)
pacman(8)
pacman.conf(5)
repo-add(8)