pacman (Português)/Tips and tricks (Portuguê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
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,
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
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)$'
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-
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
.
-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
- 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.
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.
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
/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
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.
- 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.
/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 ...
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
- 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))
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.
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.
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
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.
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
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.
- 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.
- pacutils — Biblioteca auxiliar para programas baseados no libalpm.
- pkgfile — Ferramenta que descobre qual pacote é dono de um arquivo.
- pkgtop — Gerenciador de pacotes interativo e monitor de recursos projetado para o GNU/Linux.
- pkgtools — Coleção de scripts para pacotes do Arch Linux.
- Powerpill — Usa download paralelo e segmentado por meio do aria2 e do Reflector para tentar acelerar downloads para o pacman.
- repoctl — Ferramenta para ajudar a gerenciar repositórios locais.
- repose — Uma ferramenta para construção de repositório do Arch Linux.
- snap-pac — Faz o pacman usar automaticamente o snapper para criar snapshots pré/pós como o YaST do openSUSE.
- vrms-arch — Um Richard M. Stallman virtual para lhe dizer quis pacotes não livres estão instalados.
Gráficos
- Apper — Aplicativo Qt 5 e gerenciador de pacotes usando o PackageKit escrito em C++. Tem suporte a metadados de AppStream.
- Discover — Gerenciador de aplicativos do Qt 5 usando o PackageKit escrito em C++/QML. Tem suporte a metadados de AppStream, Flatpak e atualizações de firmware.
- GNOME PackageKit — Gerenciador de pacotes GTK 3 usando o PackageKit escrito em C.
- GNOME Software — Gerenciador de aplicativos GTK 3 usando PackageKit escrito em C. Tem suporte a metadados de AppStream, Flatpak e atualizações de firmware.
- pcurses — Wrapper TUI curses para o pacman escrito em C++.
- tkPacman — Wrapper Tk para o pacman escrito em Tcl.