pacman (Português)/Tips and tricks (Português)

From ArchWiki

Status de tradução: Esse artigo é uma tradução de Pacman/Tips and tricks. Data da última tradução: 2020-09-08. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Para métodos gerais para melhorar a flexibilidade das dicas fornecidas ou do pacman em si, veja Utilitários principais e Bash.

Manutenção

Nota: Em vez de usar comm (que requer entradas ordenadas com sort) na seção abaixo, você também pode usar grep -Fxf ou grep -Fxvf.

Veja também Manutenção do sistema.

Listando pacotes

Com versão

Você pode querer obter a lista de pacotes instalados com sua versão, o que é útil ao relatar erros ou discutir pacotes instalados.

  • Listar todos os pacotes instalados explicitamente: pacman -Qe.
  • Listar todos os pacotes no grupo de pacotes de nome grupo: pacman -Sg grupo
  • Listar todos os pacotes externos (geralmente baixados e instalados manualmente ou removidos do repositório): pacman -Qm.
  • Listar todos os pacotes nativos (instalados a partir de base(s) de dados de sincronização): pacman -Qn.
  • Listar todos os pacotes nativos (ou seja, presente na base de dados de sincronização) instalados explicitamente que não são dependências diretas ou opcional: pacman -Qent.
  • Listar pacotes por expressão regular: pacman -Qs regex.
  • Listar pacotes por expressão regular com formato de saída personalizada (precisa de expac): expac -s "%-30n %v" regex.

Com tamanho

Descobrir quais pacotes são maiores pode ser útil ao tentar liberar espaço em seu disco rígido. Existem duas opções aqui: obter o tamanho de pacotes individuais ou obter o tamanho dos pacotes e suas dependências.

Pacotes individuais

O comando a seguir listará todos os pacotes instalados e seus tamanhos individuais:

$ LC_ALL=C pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h
Pacotes e dependências

Para listar tamanhos com suas dependências,

  • Instale expac e execute expac -H M '%m\t%n' | sort -h.
  • Execute pacgraph com a opção -c.

Para listas o tamanho baixado de vários pacotes (deixe pacotes em branco para listar todos os pacotes):

$ expac -S -H M '%k\t%n' pacotes

Para listar pacotes instalados explicitamente que não estejam no metapacote base nem no grupo de pacotes base-devel com tamanho e descrição:

$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort | uniq)) | sort -n

Para listar os pacotes marcados para atualização com seu tamanho de download

$ expac -S -H M '%k\t%n' $(pacman -Qqu) | sort -sh

Por data

Para listar os últimos 20 pacotes instalados com expac, execute:

$ expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 20

ou com segundos desde o epoch (1970-01-01 UTC):

$ expac --timefmt=%s '%l\t%n' | sort -n | tail -n 20

Que não estejam em um grupo, repositório ou metapacote especificado

Nota: Para obter uma lista de pacotes instalados como dependências, mas não mais exigidos para qualquer pacote instalado, veja #Removendo pacotes não usados (órfãos).

Listar os pacotes instalados explicitamente que não estejam no metapacote base:

$ comm -23 <(pacman -Qqe | sort) <(expac -l '\n' '%E' base | sort)

Listar os pacotes instalados explicitamente que não estejam no metapacote base nem no grupo de pacotes base-devel:

$ comm -23 <(pacman -Qqe | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort -u)

Listar todos os pacotes instalados não necessários para outros pacotes, e que não estejam no metapacote base nem no grupo de pacotes base-devel:

$ comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort -u)

Mesmo que o acima, mas com descrições:

$ expac -H M '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort -u))

Listar todos os pacotes instalados que não estão no repositório especificado nome_repo

$ comm -23 <(pacman -Qq | sort) <(pacman -Sql nome_repo | sort)

Listar todos os pacotes instalados que estão no repositório nome_repo:

$ comm -12 <(pacman -Qq | sort) <(pacman -Sql nome_repo | sort)

Listar todos os pacotes na ISO do Arch Linux que não estão no metapacote base:

$ comm -23 <(curl https://gitlab.archlinux.org/archlinux/archiso/-/raw/master/configs/releng/packages.x86_64) <(expac -l '\n' '%E' base | sort)

Pacotes de desenvolvimento

Para listar todos os pacotes de desenvolvimento/instáveis, execute:

$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'

Navegando por pacotes

Para navegador por todos os pacotes instalados com uma visualização instantânea de cada pacote:

$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'

Isso usa fzf para apresentar uma visão de dois painéis listando todos os pacotes com informações de pacotes mostradas na direita.

Insira letras para filtrar a lista de pacotes; use teclas de setas (ou Ctrl-j/Ctrl-k) para navegar; pressione Enter para ver informações de pacote sob less.

Listando arquivos pertencentes a um pacote com tamanho

Este pode ser útil se você descobriu que um pacote específico usa uma enorme quantidade de espaço e você quer descobrir quais arquivos usam mais desse espaço.

$ pacman -Qlq pacote | grep -v '/$' | xargs -r du -h | sort -h

Identificar arquivos que pertençam a nenhum pacote

Se seu arquivo possui arquivos não pertencentes a qualquer pacote (um caso comum se você não usa o gerenciador de pacotes para instalar softwares), você pode querer descobrir quais são esses arquivos para limpá-los. O processo geral para fazer isso:

Um método é usar pacreport --unowned-files como usuário root do pacutils, o qual vai listar arquivos sem dono entre outros detalhes.

Outro é listar todos os arquivos de seu interesse e verificá-los com o pacman:

# find /etc /usr /opt /var | LC_ALL=C pacman -Qqo - 2>&1 > /dev/null | cut -d ' ' -f 5-
Dica: O script lostfiles realizar etapas similares, mas também inclui uma lista negra extensa para remover falso-positivos comuns da saída. aconfmgr (aconfmgr-gitAUR) permite rastrear arquivos órfãos usando um script de configuração.

Rastreando arquivos sem donos criados criados por pacotes

A maioria dos sistemas vão aos poucos coletando diversos arquivos fantasmas tal como arquivos de estado, logs, índices, etc. pelo curso de operação comum.

pacreport do pacutils pode ser usado para rastrear esses arquivos e suas associações via /etc/pacreport.conf (veja pacreport(1) § FILES).

Um exemplo pode se parecer com algo como isso (resumido):

/etc/pacreport.conf
[Options]
IgnoreUnowned = usr/share/applications/mimeinfo.cache

[PkgIgnoreUnowned]
alsa-utils = var/lib/alsa/asound.state
bluez = var/lib/bluetooth
ca-certificates = etc/ca-certificates/trust-source/*
dbus = var/lib/dbus/machine-id
glibc = etc/ld.so.cache
grub = boot/grub/*
linux = boot/initramfs-linux.img
pacman = var/lib/pacman/local
update-mime-database = usr/share/mime/magic

Então, ao usar pacreport --unowned-files como usuário root, todos os arquivos sem dono serão listados se o pacote associado não estiver mais instalado (ou se algum arquivo novo tiver sido criado).

Adicionalmente, aconfmgr (aconfmgr-gitAUR) permite rastrear arquivos modificados e órfãos usando um script de configuração.

Removendo pacotes não usados (órfãos)

Para remover recursivamente órfãos e seus arquivos de configuração:

# pacman -Qtdq | pacman -Rns -

Se nenhum órfão for encontrado, a saída será erro: argumento "-" especificado com entrada padrão vazia. É esperado que nenhum tenha sido passado para pacman -Rns.

Nota: Os argumentos -Qt listam somente verdadeiros órfãos. Para incluir pacotes que são opcionalmente exigidos por outro pacote, passe a opção -t duas vezes, ou seja, -Qtt.

Removendo tudo exceto os pacotes essenciais

Se for necessário remover todos os pacotes, exceto os essenciais, um método é definir o motivo da instalação dos não essenciais como dependência e remover todas as dependências desnecessárias.

Primeiro, para todos os pacotes instalados "como explicitamente", altere o motivo da instalação para "como dependência":

# pacman -D --asdeps $(pacman -Qqe)

Em seguida, altere o motivo da instalação para "como explicitamente" apenas os pacotes essenciais, aqueles que você não deseja remover, para evitar tê-los na mira:

# pacman -D --asexplicit base linux linux-firmware
Nota:
  • Pacotes adicionais podem ser acrescentados ao comando acima para evitar serem removidos. Consulte Guia de instalação#Instalar os pacotes essenciais para obter mais informações sobre outros pacotes que podem ser necessários para um sistema básico totalmente funcional.
  • Isso também selecionará o pacote do carregador de inicialização para remoção. O sistema ainda deve ser inicializável, mas os parâmetros de inicialização podem não ser alteráveis sem ele.

Por fim, siga as instruções em #Removendo pacotes não usados (órfãos) para remover todos os pacotes com motivo de instalação "como dependência".

Obtendo a lista de dependências de vários pacotes

As dependências são ordenadas alfabeticamente e as duplas são removidas.

Nota: Para só mostrar a árvore de pacotes instalados, use pacman -Qi.
$ LC_ALL=C pacman -Si pacotes | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u

Alternativamente, com expac:

$ expac -l '\n' %E -S pacotes | sort -u

Listando arquivos backup modificados

Se você quiser fazer backup dos arquivos de configuração do seu sistema, você pode copiar todos os arquivos em /etc/, mas normalmente você só estaria interessado nos arquivos que você alterou. Os arquivos backup modificados podem ser vistos com o seguinte comando:

# pacman -Qii | awk '/^MODIFIED/ {print $2}'

Executar esse comando com permissões de root vai garantir que os arquivos legíveis apenas pelo root (como o /etc/sudoers) sejam incluídos na saída.

Dica: Veja #Listando todos os arquivos alterados de pacotes para listar os arquivos alterados que o pacman conhece, e não apenas arquivos backup.

Fazer backup da base de dados do pacman

O seguinte comando pode ser usado para fazer backup da base de dados local do pacman:

$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local

Armazene o arquivo de base de dados backup do pacman em uma ou mais mídias offline, tal como um pendrive, disco rígido externo ou um CD-R.

A base de dados pode ser restaurada movendo o arquivo pacman_database.tar.bz2 para o diretório / e execução o comando a seguir:

# tar -xjvf pacman_database.tar.bz2
Nota: Se os arquivos de base de dados do pacman estiverem corrompidos e não houver um arquivo backup disponível, há alguma esperança de recompilar a base de dados do pacman. Consulte #Restaurar a base de dados local do pacman.
Dica: O pacote pakbak-gitAUR fornece um script e um serviço systemd para automatizar a tarefa. A configuração é possível em /etc/pakbak.conf.

Verificar changelogs facilmente

Quando os mantenedores atualizam os pacotes, os commits geralmente são comentados de forma útil. Os usuários podem verificá-los rapidamente a partir da linha de comando instalando pacologAUR. Este utilitário lista mensagens de commit recentes para pacotes dos repositórios oficiais ou do AUR, usando pacolog <pacote>.

Instalação e recuperação

Meios alternativos de obter e restaurar pacotes.

Instalando pacotes a partir de um CD/DVD ou pendrive

Para baixar pacotes ou grupos de pacotes:

# cd ~/Packages
# pacman -Syw base base-devel grub-bios xorg gimp --cachedir .
# repo-add ./custom.db.tar.gz ./*

Então, você pode gravar a pasta "Packages" para um CD/DVD ou transferi-la para um pendrive, HDD externo, etc.

Para instalar:

1. Monte a mídia:

# mkdir /mnt/repo
# mount /dev/sr0 /mnt/repo    #Para um CD/DVD.
# mount /dev/sdxY /mnt/repo   #Para um pendrive.

2. Edite pacman.conf e adicione esse repositório antes dos outros (ex.: extra, core, etc.). Isso é importante. Não apenas descomente aquele na parte de baixo. Essa forma garante que os arquivos do CD/DVD/pendrive tenham precedência sobre aqueles nos repositórios padrões:

/etc/pacman.conf
[custom]
SigLevel = PackageRequired
Server = file:///mnt/repo/Packages

3. Finalmente, sincronize a base de dados do pacman para habilitar o uso do novo repositório:

# pacman -Syu

Repositório local personalizado

Use o script repo-add, incluído no pacman, para gerar uma base de dados para um repositório pessoal. Use repo-add --help para obter mais detalhes sobre seu uso.

Uma base de dados de pacote é um arquivo tar, opcionalmente comprimida. Extensões válidas são .db ou .files seguido por uma extensão de arquivamento de .tar, .tar.gz, .tar.bz2, .tar.xz, .tar.zst ou.tar.Z. O arquivo não precisa existir, mas todos os diretórios pais devem existir.

Para adicionar um novo pacote à base de dados, ou para substituir a versão antiga de um pacote existente na base de dados, execute:

$ repo-add /caminho/para/repo.db.tar.gz /caminho/para/pacote-1.0-1-x86_64.pkg.tar.xz

A base de dados e os pacotes não precisam estar no diretório ao usar repo-add, mas tenha em mente que ao usar pacman com aquela base de dados, eles devem estar juntos. Armazenar todos os pacotes compilados para serem incluídos no repositório em um diretório também permite usar a expansão shell glob para adicionar ou atualizar vários pacotes ao mesmo tempo.

$ repo-add /caminho/para/repo.db.tar.gz /caminho/para/*.pkg.tar.xz
Atenção: repo-add adiciona as entradas na base de dados na mesma ordem que foi passada na linha de comando. Se várias versões do mesmo pacote estiverem envolvidas, deve-se ter cuidado para garantir que a versão correta seja adicionada por último. Em particular, observe que a ordem lexical usada pelo shell depende do locale e difere do pedido de vercmp(8) usado pelo pacman.

Se você deseja oferecer suporte a várias arquiteturas, deve-se tomar precauções para evitar erros. Cada arquitetura deve ter sua própria árvore de diretórios:

$ tree ~/repopersonalizado/ | sed "s/$(uname -m)/<arch>/g"
/home/archie/repopersonalizado/
└── <arch>
    ├── repopersonalizado.db -> repopersonalizado.db.tar.xz
    ├── repopersonalizado.db.tar.xz
    ├── repopersonalizado.files -> repopersonalizado.files.tar.xz
    ├── repopersonalizado.files.tar.xz
    └── site-pessoal-git-b99cce0-1-<arch>.pkg.tar.xz

1 directory, 5 files

O executável repo-add verifica se o pacote é apropriado. Se esse não for o caso, você encontrará mensagens de erro semelhantes a esta:

==> ERRO: '/home/archie/repopersonalizado/<arch>/foo-<arch>.pkg.tar.xz' não tem uma extensão válida para arquivo de base de dados.

repo-remove é usado para remover pacotes da base de dados de pacotes, exceto que somente nomes de pacotes são especificados na linha de comando.

$ repo-remove /caminho/para/repo.db.tar.gz pkgname

Uma vez que a base de dados local do repositório tenha sido criado, adicione o repositório a pacman.conf para cada sistema que seja para usar o repositório. Um exemplo de um repositório personalizado está em pacman.conf. O nome do repositório é o nome do arquivo da base de dados com a extensão do arquivo omitida. No caso do exemplo acima, o nome do repositório simplesmente seria repo. Consulte a localização do repositório usando um URL file://, ou via FTP usando o diretório ftp://localhost/caminho/para/diretório.

Se quiser, adicione um repositório personalizado à lista de repositórios de usuário não oficiais, de forma que a comunidade possa se beneficiar dele.

Cache do pacman compartilhado na rede

Se você tiver várias máquinas com Arch na sua rede local, você pode compartilhar pacotes para que você possa diminuir significativamente os tempos de download. Tenha em mente que você não deve compartilhar entre arquiteturas diferentes (isto é, i686 e x86_64) ou você terá problemas.

Cache de somente leitura

Se você está procurando uma solução rápida, você pode simplesmente executar um servidor web autônomo, como o darkhttpd, que outros computadores possam usar como um primeiro espelho:

# ln /var/lib/pacman/sync/*.db /var/cache/pacman/pkg
$ sudo -u http darkhttpd /var/cache/pacman/pkg --no-server-id

Você também poderia executar darkhttpd como um serviço systemd por conveniência. Basta adicionar esse servidor no topo de seu /etc/pacman.d/mirrorlist em máquinas clientes com Server = http://meuespelho:8080. Certifique-se de manter seu espelho atualizado.

Se você já está executando um servidor web para alguma outra finalidade, você pode querer reutilizá-lo como seu servidor de repo local em vez de darkhttpd. Por exemplo, se você já serve um site com nginx, você pode adicionar um bloco de servidor nginx na porta 8080:

/etc/nginx/nginx.conf
server {
     listen 8080;
     root /var/cache/pacman/pkg;
     server_name meurepoarch.localdomain;
     try_files $uri $uri/;
}

Lembre-se de reiniciar o nginx após fazer essa alteração.

Seja qual for o servidor web que você usa, lembre-se de abrir a porta 8080 para o tráfego local (e provavelmente você quer negar qualquer coisa que não seja local), então adicione uma regra como a seguinte para iptables:

/etc/iptables/iptables.rules
-A TCP -s 192.168.0.0/16 -p tcp -m tcp --dport 8080 -j ACCEPT

Lembre-se de reiniciar o iptables após fazer essa alteração.

Cache somente leitura distribuído

Existem ferramentas específicas do Arch para descobrir automaticamente outros computadores em sua rede oferecendo um cache de pacote. Tente pacredir, pacserve, pkgdistcacheAUR ou paclanAUR. O pkgdistcache usa Avahi em vez de UDP simples, que pode funcionar melhor em determinadas redes domésticas que roteiam em vez de ponte entre WiFi e Ethernet.

Historicamente, havia PkgD e multipkg, mas eles não são mais mantidos.

Cache de leitura-escrita

Para compartilhar pacotes entre vários computadores, simplesmente compartilhe /var/cache/pacman/ usando qualquer protocolo de montagem em rede. Esta seção mostra como usar SSHFS para compartilhar um cache de pacotes mais os diretórios de biblioteca relacionados entre vários computadores na mesma rede local. Tenha em mente que um cache compartilhado em rede pode ser lento dependendo da escolha do sistema de arquivos, entre outros fatores.

Primeiro, instale qualquer sistema de arquivos que tenha suporte a rede: sshfs, curlftpfs, samba ou nfs-utils.

Dica:
  • Para usar sshfs, considere ler Using SSH Keys.
  • Por padrão, smbfs não fornece nomes de arquivos que contenham dois pontos, o que resulta no cliente baixar o pacote problemática novamente. Para evitar isso, use a opção de montagem mapchars no cliente.

Então, para compartilhar os pacotes, monte /var/cache/pacman/pkg do servidor em /var/cache/pacman/pkg para toda máquina cliente.

Atenção: Não torne /var/cache/pacman/pkg ou qualquer um de seus antecessores (ex., /var) um link simbólico. Pacman espera que esses sejam diretórios. Quando o pacman reinstala ou atualiza a si próprio, ele vai remover os links simbólicos e vai criar diretórios vazios no lugar. Porém, durante a transação, o pacman depende de alguns pacotes estarem lá, resultando em quebrar o processo de atualização. Veja FS#50298 para mais detalhes.

Duas vias com rsync

Outra abordagem em um ambiente local é rsync. Escolha um servidor para armazenamento em cache e ative o Rsync#As a daemon. Nos clientes, sincronize em duas vias com este compartilhamento via protocolo rsync. Os nomes dos arquivos que contêm dois pontos não são um problema para o protocolo rsync.

Um exemplo de rascunho para um cliente, usando uname -m dentro de nome de compartilhamento garante uma sincronização dependente da arquitetura:

 # rsync rsync://servidor/share_$(uname -m)/ /var/cache/pacman/pkg/ ...
 # pacman ...
 # paccache ...
 # rsync /var/cache/pacman/pkg/ rsync://servidor/share_$(uname -m)/  ...

Cache dinâmico de proxy reverso usando nginx

nginx pode ser usado para intermediar solicitações de pacotes para espelhos oficiais de upstream e armazenar em cache os resultados para o disco local. Todas as solicitações subsequentes para esse pacote serão atendidas diretamente do cache local, minimizando a quantidade de tráfego de internet necessária para atualizar um grande número de computadores.

Neste exemplo, o servidor de cache será executado em http://cache.domain.example:8080/ e armazenará os pacotes em /srv/http/pacman-cache/.

Instale o nginx no computador que vai hospedar o cache. Crie o diretório para o cache e ajuste as permissões de forma que o nginx possa escrever os arquivos para ele:

# mkdir /srv/http/pacman-cache
# chown http:http /srv/http/pacman-cache

Use a configuração de cache nginx do pacman como ponto de partida para /etc/nginx/nginx.conf. Verifique se a diretiva resolver funciona de acordo com suas necessidades. Nos blocos de servidores upstream, configure as diretivas proxy_pass com endereços de espelhos oficiais, veja exemplos no arquivo de configuração sobre o formato esperado. Quando estiver satisfeito com o arquivo de configuração, inicie e habilite o nginx.

Para usar o cache, cada computador Arch Linux (incluindo o que está hospedando o cache) deve ter a seguinte linha no topo do arquivo mirrorlist:

/etc/pacman.d/mirrorlist
Server = http://cache.domain.example:8080/$repo/os/$arch
...
Nota: Você precisará criar um método para limpar pacotes antigos, pois o diretório do cache continuará a crescer ao longo do tempo. paccache (que é fornecido por pacman-contrib) pode ser usado para automatizar isso usando os critérios de retenção de sua escolha. Por exemplo, find /srv/http/pacman-cache/ -type d -exec paccache -v -r -k 2 -c {} \; manterá as últimas 2 versões de pacotes no seu diretório de cache.

Servidor cache de proxy Pacoloco

Pacoloco é um servidor de cache proxy fácil de usar para repositórios pacman. Pode ser instalado como pacoloco-gitAUR. Abra o arquivo de configuração e adicione espelhos pacman:

/etc/pacoloco.yaml
port: 9129
repos:
  minhacopia:
    urls:
      - http://mirror.lty.me/archlinux
      - http://mirrors.kernel.org/archlinux

Reinicie pacoloco.service e o repositório proxy estará disponível em http://<meuservidor>:9129/repo/minhacopia.

Flexo proxy cache server

Flexo é outro servidor de cache proxy para repositórios pacman. O Flexo está disponível no AUR: flexo-gitAUR. Uma vez instalado, inicie o serviço flexo.service com systemd.

O Flexo é executado na porta 7878 por padrão. Digite Server=http://meuservidor:7878/$repo/os/$arch na parte superior do seu /etc/pacman.d/mirrorlist para que o pacman baixe pacotes via Flexo.

Sincronizar cache de pacotes do pacman usando programas de sincronização

Use Syncthing ou Resilio Sync para sincronizar as pastas de cache do pacman (ou seja, /var/cache/pacman/pkg).

Prevenção de purgas de cache indesejadas

Por padrão, pacman -Sc remove tarballs de pacotes do cache que correspondem a pacotes que não estão instalados na máquina em que o comando foi emitido. Porque o pacman não pode prever quais pacotes estão instalados em todas as máquinas que compartilham o cache, ele acabará excluindo arquivos que não deveriam ser excluídos.

Para limpar o cache de forma que apenas tarballs desatualizados seja excluídos, adicione essa entrada na seção [options] do /etc/pacman.conf:

CleanMethod = KeepCurrent

Recriar um pacote do sistema de arquivos

Para recriar um pacote do sistema de arquivos, use fakepkgAUR. Os arquivos do sistema são aceitos como estão, portanto, quaisquer modificações estarão presentes no pacote montado. Distribuir o pacote recriado é, portanto, desencorajado; veja ABS e Arch Linux Archive (Português) para obter alternativas.

Lista de pacotes instalados

Manter uma lista de todos os pacotes instalados explicitamente pode ser útil para, por exemplo, servidor de backup de um sistema ou acelerar a instalação em um novo sistema:

$ pacman -Qqe > pkglist.txt
Nota:
  • Com a opção -t, os pacotes já necessários para outros pacotes explicitamente instalados não são mencionados. Se estiver reinstalando a partir desta lista, eles serão instalados, mas apenas como dependências.
  • Com uma opção -n, pacotes externos (p. ex., do AUR) são omitidos da lista.
  • Use comm -13 <(pacman -Qqdt | sort) <(pacman -Qqdtt | sort) > optdeplist.txt para também criar uma lista das dependências opcionais instaladas que pode ser reinstalada com --asdeps.
  • Use pacman -Qqem > foreignpkglist.txt para criar a lista de AUR e outros pacotes externos que foram explicitamente instalados.

Para manter uma lista atualizada de pacotes explicitamente instalados (p. ex., em combinação com um /etc/ versionado), você pode configurar um hook. Exemplo:

[Trigger]
Operation = Install
Operation = Remove
Type = Package
Target = *

[Action]
When = PostTransaction
Exec = /bin/sh -c '/usr/bin/pacman -Qqe > /etc/pkglist.txt'

Instalar pacotes de uma lista

Para instalar pacotes de uma lista salva anteriormente de pacotes, sem reinstalar pacotes já instalados que já estão atualizados, execute:

# pacman -S --needed - < pkglist.txt

No entanto, é provável que pacotes externos, como os do AUR ou instalados localmente, estejam presentes na lista. Para filtrar da lista os pacotes externos, a linha de comandos anterior pode ser enriquecida da seguinte forma:

 # pacman -S --needed $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt))

Eventualmente, para garantir que os pacotes instalados do seu sistema correspondam à lista e remova todos os pacotes que não são mencionados nela:

# pacman -Rsu $(comm -23 <(pacman -Qq | sort) <(sort pkglist.txt))
Dica: Essas tarefas podem ser automatizadas. Veja bacpacAUR, packupAUR, pacmanityAUR e pugAUR para exemplos.

Listando todos os arquivos alterados de pacotes

Se você suspeitar de corrompimento de arquivos (por exemplo, por falha de software/hardware), mas não tem certeza se os arquivos foram corrompidos, você pode querer comparar com as somas de hash nos pacotes. Isso pode ser feito com pacutils:

# paccheck --md5sum --quiet

Para recuperação da base de dados, veja #Restaurar a base de dados local do pacman. Os arquivos mtree também pode ser extraído como .MTREE a partir dos respectivos arquivos de pacote.

Nota: Isso não deve ser usado assim quando se suspeita de mudanças maliciosas! Neste caso, são recomendadas precauções de segurança, como o uso de uma mídia Live e uma fonte independente para as somas de hash.

Reinstalando todos pacotes

Para reinstalar todos os pacotes nativos, use:

# pacman -Qqn | pacman -S -

Pacotes externos (do AUR) devem ser reinstalados separadamente; você pode listá-los com pacman -Qqm.

Pacman preserva o motivo de instalação por padrão.

Restaurar a base de dados local do pacman

Veja Pacman/Restaurar base de dados local.

Recuperando um pendrive a partir de uma instalação existente

Se você possui o Arch instalado em um pendrive e conseguir arruiná-lo (por exemplo, removê-lo enquanto ainda está sendo gravado), é possível reinstalar todos os pacotes e, com esperança, recuperá-lo e trabalhar novamente (presumindo que o pendrive esteja montado em /novoarch)

# pacman -S $(pacman -Qq --dbpath /novoarch/var/lib/pacman) --root /novoarch --dbpath /novoarch/var/lib/pacman

Vendo um único arquivo dentro de um arquivo .pkg

Por exemplo, se você deseja ver o conteúdo de /etc/systemd/logind.conf fornecido no pacote systemd:

$ bsdtar -xOf /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz etc/systemd/logind.conf

Ou você pode usar vim para navegar no pacote:

$ vim /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz

Localizar aplicativos que usam bibliotecas de pacotes mais antigos

Mesmo se você instalou um pacote, os programas existentes de longa duração (como daemons e servidores) continuam usando código de bibliotecas de pacotes antigos. E é uma má ideia deixar esses programas em execução se a biblioteca antiga contiver um erro de segurança.

Aqui está uma maneira de encontrar todos os programas que usam código de pacotes antigo:

# lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u

Ele imprimirá o nome do programa em execução e a biblioteca antiga que foi removida ou substituída por conteúdo mais novo.

Instalando apenas conteúdo nos idiomas necessários

Muitos pacotes tentam instalar documentação e traduções em vários idiomas. Alguns programas são projetados para remover esses arquivos desnecessários, como localepurgeAUR, que é executado após a instalação de um pacote para excluir os arquivos de localidade desnecessários. Uma abordagem mais direta é fornecida através da diretiva NoExtract em pacman.conf, que impede que esses arquivos sejam instalados.

Atenção: Alguns usuários notaram que remover localidades resultou em consequências não planejadas, mesmo no Xorg.

O exemplo abaixo instala arquivos em inglês (EUA) ou nenhum:

/etc/pacman.conf
NoExtract = usr/share/help/* !usr/share/help/C*
NoExtract = usr/share/gtk-doc/html/*
NoExtract = usr/share/locale/* usr/share/X11/locale/* usr/share/i18n/* opt/google/chrome/locales/* !usr/share/X11/locale/C/*
NoExtract = !*locale*/en*/* !usr/share/*locale*/locale.*
NoExtract = !usr/share/*locales/en_?? !usr/share/*locales/i18n* !usr/share/*locales/iso*
NoExtract = usr/share/i18n/charmaps/* !usr/share/i18n/charmaps/UTF-8.gz
NoExtract = !usr/share/*locales/trans*
NoExtract = usr/share/qt4/translations/*
NoExtract = usr/share/man/* !usr/share/man/man*
NoExtract = usr/share/vim/vim*/lang/*
NoExtract = usr/lib/libreoffice/help/en-US/*
NoExtract = usr/share/kbd/locale/*
NoExtract = usr/share/*/locales/*.pak opt/*/locales/*.pak usr/lib/*/locales/*.pak !*/en-US.pak # Regras para aplicativos Electron
NoExtract = opt/onlyoffice/desktopeditors/dictionaries/* !opt/onlyoffice/desktopeditors/dictionaries/en_US/*
NoExtract = usr/share/ibus/dicts/emoji-*.dict !usr/share/ibus/dicts/emoji-en.dict

Desempenho

Velocidades de download

Nota: Se suas velocidades de download foram reduzidas a uma lesma, certifique-se de usar um dos muitos espelhos e não o ftp.archlinux.org, cuja velocidade é limitada desde março de 2007.

Ao baixar pacotes, o pacman usa os espelhos na ordem em que estão no /etc/pacman.d/mirrorlist. O espelho que está no topo da lista por padrão, no entanto, pode não ser o mais rápido para você. Para selecionar um espelho mais rápido, veja Espelhos.

A velocidade do pacman ao baixar pacotes também pode ser melhorada usando um aplicativo diferente para baixar pacotes, em vez baixador de arquivos embutido do pacman.

Em todos os casos, certifique-se de ter o pacman mais recente antes de fazer quaisquer modificações.

# pacman -Syu

Powerpill

Powerpill é um wrapper do pacman que faz uso de download paralelo e segmentado para tentar acelerar os downloads para o pacman.

wget

Esse também é muito útil se você precisar de configurações de proxy mais poderosas que as capacidades incorporadas no pacman.

Para usar o wget, primeiro instale o pacote wget e, após, modifique o /etc/pacman.conf descomentando a seguinte linha na seção [options]:

XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u

Em vez de descomentar os parâmetros de wget no /etc/pacman.conf, você também pode modificar o arquivo de configuração do wget diretamente (o arquivo de todo o sistema é /etc/wgetrc, enquanto arquivos por usuário são $HOME/.wgetrc).

aria2

O aria2 é um utilitário de download leve com suporte a downloads resumíveis e segmentados via HTTP/HTTPS e FTP. O aria2 permite conexões múltiplas e simultâneas de HTTP/HTTPS e FTP para um espelho do Arch, o que deve resultar em um aumento na velocidade de download para a obtenção de arquivos e pacotes.

Nota: O uso do aria2c no XferCommand do pacman não vai resultar em downloads paralelos de múltiplos pacotes. O pacman chama o XferCommand com um único pacote por vez e aguarda por ele concluir antes de chamar o próximo. Para baixar múltiplos pacotes em paralelo, veja Powerpill.

Instale o aria2 e, após, edite o /etc/pacman.conf adicionando a seguinte linha à seção [options]:

XferCommand = /usr/bin/aria2c --allow-overwrite=true --continue=true --file-allocation=none --log-level=error --max-tries=2 --max-connection-per-server=2 --max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --summary-interval=60 --timeout=5 --dir=/ --out %o %u
Dica: Essa configuração alternativa para usar o pacman com aria2 tenta simplificar a configuração e adiciona mais opções de configuração.

Veja aria2c(1) § OPTIONS para opções do aria2c usadas.

  • -d, --dir: O diretório para armazenar o arquivos baixados, conforme especificado pelo pacman.
  • -o, --out: Os nomes de arquivo dos arquivos baixados.
  • %o: A variável que representa os nomes de arquivos locais, conforme especificado pelo pacman.
  • %u: A variável que representa a URL de download, conforme especificado pelo pacman.

Outros aplicativos

Existem outros aplicativos de download que você pode usar com pacman. Aqui estão, e as configurações associadas de XferCommand:

  • snarf: XferCommand = /usr/bin/snarf -N %u
  • lftp: XferCommand = /usr/bin/lftp -c pget %u
  • axel: XferCommand = /usr/bin/axel -n 2 -v -a -o %o %u
  • hget: XferCommand = /usr/bin/hget %u -n 2 -skip-tls false (por favor, leia a documentação na página de projeto no Github para mais informações)

Utilitários

  • Lostfiles — Script que identifica arquivos que não pertencem a nenhum pacote.
https://github.com/graysky2/lostfiles || lostfiles
  • Pacmatic — Wrapper do pacman para verificar o Arch News antes de atualizar, evitar atualizações parciais e avisar sobre alterações de arquivo de configuração.
http://kmkeen.com/pacmatic || pacmatic
  • pacutils — Biblioteca auxiliar para programas baseados no libalpm.
https://github.com/andrewgregory/pacutils || pacutils
  • pkgfile — Ferramenta que descobre qual pacote é dono de um arquivo.
https://github.com/falconindy/pkgfile || pkgfile
  • pkgtop — Gerenciador de pacotes interativo e monitor de recursos projetado para o GNU/Linux.
https://github.com/orhun/pkgtop || pkgtop-gitAUR
  • pkgtools — Coleção de scripts para pacotes do Arch Linux.
https://github.com/Daenyth/pkgtools || pkgtoolsAUR
  • Powerpill — Usa download paralelo e segmentado por meio do aria2 e do Reflector para tentar acelerar downloads para o pacman.
https://xyne.dev/projects/powerpill/ || powerpillAUR
  • repoctl — Ferramenta para ajudar a gerenciar repositórios locais.
https://github.com/cassava/repoctl || repoctlAUR
  • repose — Uma ferramenta para construção de repositório do Arch Linux.
https://github.com/vodik/repose || repose
  • snap-pac — Faz o pacman usar automaticamente o snapper para criar snapshots pré/pós como o YaST do openSUSE.
https://github.com/wesbarnett/snap-pac || snap-pac
  • vrms-arch — Um Richard M. Stallman virtual para lhe dizer quis pacotes não livres estão instalados.
https://github.com/orospakr/vrms-arch || vrms-archAUR

Gráficos

Atenção: PackageKit abre permissões do sistema por padrão e, do contrário, não é recomendado para uso geral. Veja FS#50459 e FS#57943.
  • Apper — Aplicativo Qt 5 e gerenciador de pacotes usando o PackageKit escrito em C++. Tem suporte a metadados de AppStream.
https://userbase.kde.org/Apper || apper
https://userbase.kde.org/Discover || discover
  • GNOME PackageKit — Gerenciador de pacotes GTK 3 usando o PackageKit escrito em C.
https://freedesktop.org/software/PackageKit/ || gnome-packagekit
https://wiki.gnome.org/Apps/Software || gnome-software
  • pcurses — Wrapper TUI curses para o pacman escrito em C++.
https://github.com/schuay/pcurses || pcursesAUR
  • tkPacman — Wrapper Tk para o pacman escrito em Tcl.
https://sourceforge.net/projects/tkpacman || tkpacmanAUR