Eu sei como listar todos os pacotes instalados no meu sistema.
Mas como eu poderia obter uma lista de todos os repositórios e PPAs em um script que eu possa executar em uma nova máquina para replicar a configuração do repositório, incluindo as chaves?
Eu sei que posso investigar /etc/apt/sources.list
e /etc/apt/sources.list.d
, mas estou procurando uma maneira de gerar um script que execute todos os apt-add-repository
comandos em um novo sistema (que classifica a obtenção de todas as chaves).
Alguma ideia?
command-line
scripts
ppa
repository
add-apt-repository
Stwissel
fonte
fonte
egrep -v '^#|^ *$' /etc/apt/sources.list /etc/apt/sources.list.d/*
remover linhas comentadas e linhas em branco?^
aftergrep
ingrep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*
?cat /etc/apt/sources.list /etc/apt/sources.list.d/*
Obrigado pelas indicações. Com um pouco de limpeza, recebi um script que lista os PPAs, mas não qualquer outro repositório:
Quando você liga
listppa > installppa.sh
para obter um script, pode copiar em uma nova máquina para reinstalar todo o PPA.Próxima parada: faça isso para os outros repositórios:
Isso deve fazer o truque. Eu precisava de uma pergunta sobre o superusuário para descobrir o regex correto.
fonte
grep -o
exemplo, o\`
in[a-z0-9\-]
não está fazendo o que você espera. Na verdade, corresponde a uma barra invertida literal . Você não precisa escapar do-
quando está no início ou no final da[]
lista; na verdade, você não pode escapar disso! .. Nesse caso, o\`
(provavelmente) não causará um problema, porque você (espero) não encontrará uma barra invertida nadeb
entrada.http://ppa.launchpad.net/[a-z0-9-]\+/[a-z0-9.-]\+
[[:graph:]]
vez de,[a-z...blah.anything]
porque isso corresponderá a qualquer caractere alfanumérico + de pontuação - é a consistência dos nomes dos PPA.deb
palavra no início de cada linha do repositório, se não for fornecida nappa:$USER/$PPA
forma.grep -Po "(?<=^deb\s).*?(?=#|$)" /etc/apt/{sources.list,sources.list.d/*.list} | while read ENTRY ; do echo $ENTRY; done
Observe que, conforme escrito, isso mostra o nome do arquivo de cada entrada; portanto, você precisa fazer um corte desde o início do resultado até o primeiro dois pontos, mas isso não é muito difícil com o corte. Você também pode passar adianteuniq
se não desejar várias entradas para a mesma fonte (por exemplo, se você tiver o Google Chrome Stable / Beta / Dev instalado).Estou surpreso que a maneira mais simples, porém mais eficaz, de reunir todas as fontes de software binário ativadas e o arquivo em que foram especificadas ainda não foi publicada:
De todos os arquivos processados, isso imprimirá todas as linhas iniciadas por
deb
. Isso exclui linhas comentadas edeb-src
linhas para ativar repositórios de código-fonte.Ele realmente pesquisa apenas todos os
*.list
arquivos que serão analisadosapt
, mas, por exemplo, nenhum*.list.save
arquivo usado para backup ou outros com nomes ilegais.Se você deseja uma saída correta mais curta, mas possivelmente apenas em 99,9% de todos os casos, que pode procurar muitos arquivos (inclui todos os
/etc/apt/sources.list*
arquivos e diretórios, não apenas/etc/apt/sources.list
e `/etc/apt/sources.list.d/*), você também pode usa isto:A menos que haja arquivos que não deveriam estar lá, a saída será a mesma.
Um exemplo de saída na minha máquina seria o seguinte:
Se você deseja uma saída mais bonita, vamos ver
sed
:E vamos ver isso:
fonte
ppa:<user>/<project>
formulário.Execute o seguinte comando:
Fonte
fonte
apt-cache policy
só mostrará os repositórios após a execuçãoapt-get update
. Se você acabou de adicionar um repoadd-apt-repository
, ele não apareceráapt-cache policy
até você executarapt-get update
sudo apt update > /dev/null 2>&1 && sudo apt-cache policy | grep http | awk '{print $2 $3}' | sort -u
funciona bem. gist.github.com/bmatthewshea/229da822f1f02157bff192a2e4a8ffd1Eu uso este comando para listar todas as fontes de software configuradas (repositórios), incluindo as atualmente desativadas :
Eu uso isso principalmente para solucionar problemas; isso certamente pode ser incorporado aos scripts, mas você pode restringir
/etc/apt/sources.list.d/*
para/etc/apt/sources.list.d/*.list
obter apenas fontes de software ativadas no momento.fonte
Então, fazendo algumas escavações, nós temos
AptPkg::Class
.Então, usando
perl
podemos fazer algo simples como este ..Isso nos fornece uma lista de todos os
AptPkg::Class::PkgFile
pacotes. Você provavelmente poderia gerar osapt-add-repository
comandos com isso.fonte
https://repogen.simplylinux.ch/ fornece uma lista de todos os PPAs para sua versão do Ubuntu. Aqui está uma lista gerada sem arquivos de origem e sem impressora Samsung ppa:
fonte
Aqui está o meu script "
list-apt-repositories
", que lista todos os repositórios em "/etc/sources.list"
e"/etc/sources.list.d/*.list
". Você pode adicionar--ppa-only
para mostrar apenas os PPAs. Os PPAs são automaticamente transformados emppa:USER/REPO
formato.As partes relevantes são as 5 linhas
list_sources
e aslist_ppa
funções, o resto é apenas um padrão para envolvê-lo em um prático script de shell.list-apt-repositories
:E para criar um script de instalação, entre em outro script "
make-apt-repository-install-script
". O script gerado suporta o argumento-y
/--yes
para uso não interativo (consulteadd-apt-repository(1)
).make-apt-repository-install-script
:Novamente, a parte importante é o
xargs
comando na última linha, o resto é clichê.fonte
Para adicionar linhas ppa.launchpad.net como ppa: $ USER / $ PPA. Adicione outros repositórios com sua linha completa a partir de arquivos * .list. Sem linhas tolas.
fonte
Obrigado BobDodds!
Se alguém estiver interessado, atualizei um pouco o seu código (espero que você não se importe).
Este script digitará apenas PPAs adicionados pelo usuário (/etc/apt/sources.list.d).
fonte
Isso não gera comandos para ativar possíveis repositórios de origem (deb-src).
fonte
Instalar
ppa-purge
Em seguida, obtenha a lista ppa pela conclusão da guia ...
ppa-purge -o
(pressione a Tabtecla duas vezes)fonte
ppa-purge
não possui-o
sinalizador de acordo com sua página de manual . -1