Como posso obter uma lista de todos os repositórios e PPAs da linha de comando em um script de instalação?


217

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.liste /etc/apt/sources.list.d, mas estou procurando uma maneira de gerar um script que execute todos os apt-add-repositorycomandos em um novo sistema (que classifica a obtenção de todas as chaves).

Alguma ideia?

Respostas:


106

Você pode mostrar tudo com:

grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*

13
Que tal egrep -v '^#|^ *$' /etc/apt/sources.list /etc/apt/sources.list.d/*remover linhas comentadas e linhas em branco?

3
você poderia explicar o uso de ^after grepin grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*?

4
@ vasa1 O sinal de intercalação ^ e o sinal de dólar $ são metacaracteres que correspondem respectivamente à sequência vazia no início e no final de uma linha.
Wojox

4
Eu uso grep ^ [^ #] ... - é auto-esconde todas as fontes comentaram-out
Ross Aiken

13
Se você não está indo para filtrar qualquer coisa fora, não seria mais simples apenas corrercat /etc/apt/sources.list /etc/apt/sources.list.d/*
jbo5112

99

Obrigado pelas indicações. Com um pouco de limpeza, recebi um script que lista os PPAs, mas não qualquer outro repositório:

#! /bin/sh 
# listppa Script to get all the PPA installed on a system ready to share for reininstall
for APT in `find /etc/apt/ -name \*.list`; do
    grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
        USER=`echo $ENTRY | cut -d/ -f4`
        PPA=`echo $ENTRY | cut -d/ -f5`
        echo sudo apt-add-repository ppa:$USER/$PPA
    done
done

Quando você liga listppa > installppa.shpara 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:

#! /bin/sh
# Script to get all the PPA installed on a system
for APT in `find /etc/apt/ -name \*.list`; do
    grep -Po "(?<=^deb\s).*?(?=#|$)" $APT | while read ENTRY ; do
        HOST=`echo $ENTRY | cut -d/ -f3`
        USER=`echo $ENTRY | cut -d/ -f4`
        PPA=`echo $ENTRY | cut -d/ -f5`
        #echo sudo apt-add-repository ppa:$USER/$PPA
        if [ "ppa.launchpad.net" = "$HOST" ]; then
            echo sudo apt-add-repository ppa:$USER/$PPA
        else
            echo sudo apt-add-repository \'${ENTRY}\'
        fi
    done
done

Isso deve fazer o truque. Eu precisava de uma pergunta sobre o superusuário para descobrir o regex correto.


1
No seu grep -oexemplo, 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 na debentrada.
precisa saber é o seguinte

2
Observe que os nomes PPA pode conter pontos, então eu acho que você quer mudar sua expressão regular parahttp://ppa.launchpad.net/[a-z0-9-]\+/[a-z0-9.-]\+
Kynan

Não, você deseja alterar a regex para em [[: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.
precisa saber é o seguinte

Suponho que você inclua uma debpalavra no início de cada linha do repositório, se não for fornecida na ppa:$USER/$PPAforma.
26416 jarno

@stwissel alguma razão em particular que você usou find e grep? Você pode facilmente fazer um globo que o shell analisa e passá-lo para grep. grep -Po "(?<=^deb\s).*?(?=#|$)" /etc/apt/{sources.list,sources.list.d/*.list} | while read ENTRY ; do echo $ENTRY; doneObserve 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 adiante uniqse não desejar várias entradas para a mesma fonte (por exemplo, se você tiver o Google Chrome Stable / Beta / Dev instalado).
dragon788

23

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:

grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d/

De todos os arquivos processados, isso imprimirá todas as linhas iniciadas por deb. Isso exclui linhas comentadas e deb-srclinhas para ativar repositórios de código-fonte.

Ele realmente pesquisa apenas todos os *.listarquivos que serão analisados apt, mas, por exemplo, nenhum *.list.savearquivo 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.liste `/etc/apt/sources.list.d/*), você também pode usa isto:

grep -r --include '*.list' '^deb ' /etc/apt/sources.list*

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:

/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily main restricted
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates main restricted
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily universe
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates universe
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily multiverse
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates multiverse
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-backports main restricted universe multiverse
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security main restricted
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security universe
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security multiverse
/etc/apt/sources.list:deb http://archive.canonical.com/ubuntu wily partner
/etc/apt/sources.list.d/maarten-fonville-ubuntu-ppa-wily.list:deb http://ppa.launchpad.net/maarten-fonville/ppa/ubuntu wily main
/etc/apt/sources.list.d/webupd8team-ubuntu-tor-browser-wily.list:deb http://ppa.launchpad.net/webupd8team/tor-browser/ubuntu wily main
/etc/apt/sources.list.d/fossfreedom-ubuntu-indicator-sysmonitor-wily.list:deb http://ppa.launchpad.net/fossfreedom/indicator-sysmonitor/ubuntu wily main
/etc/apt/sources.list.d/getdeb.list:deb http://archive.getdeb.net/ubuntu wily-getdeb apps

Se você deseja uma saída mais bonita, vamos ver sed:

grep -r --include '*.list' '^deb ' /etc/apt/ | sed -re 's/^\/etc\/apt\/sources\.list((\.d\/)?|(:)?)//' -e 's/(.*\.list):/\[\1\] /' -e 's/deb http:\/\/ppa.launchpad.net\/(.*?)\/ubuntu .*/ppa:\1/'

E vamos ver isso:

deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily main restricted
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates main restricted
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily universe
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates universe
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily multiverse
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates multiverse
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-backports main restricted universe multiverse
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security main restricted
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security universe
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security multiverse
deb http://archive.canonical.com/ubuntu wily partner
[maarten-fonville-ubuntu-ppa-wily.list] ppa:maarten-fonville/ppa
[webupd8team-ubuntu-tor-browser-wily.list] ppa:webupd8team/tor-browser
[fossfreedom-ubuntu-indicator-sysmonitor-wily.list] ppa:fossfreedom/indicator-sysmonitor
[getdeb.list] deb http://archive.getdeb.net/ubuntu wily-getdeb apps

1
Seguindo a resposta aceita, parece que o OP queria que os CAE fossem exibidos no ppa:<user>/<project>formulário.
muru 4/03/16

A pergunta realmente pede para gerar um script que instala / habilita todos os repositórios. Mas o título da pergunta é apenas sobre listá-las. Além disso, a segunda resposta mais pontuada apenas as lista, mas lista demais.
Byte Commander

Legal, mas eu já tinha votado. : D
muru 04/03

Você pode usar a opção -h no grep para deixar de fora os nomes dos arquivos.
jarno 9/04

11

Execute o seguinte comando:

apt-cache policy | grep http | awk '{print $2 $3}' | sort -u

Fonte


Em biônico, isso imprime linhas como ' mirrors.nic.funet.fi/ubuntubionic-security/main '
jarno

1
Nota: apt-cache policysó mostrará os repositórios após a execução apt-get update. Se você acabou de adicionar um repo add-apt-repository, ele não aparecerá apt-cache policyaté você executarapt-get update
wisbucky 10/04

Por @wisbucky: sudo apt update > /dev/null 2>&1 && sudo apt-cache policy | grep http | awk '{print $2 $3}' | sort -ufunciona bem. gist.github.com/bmatthewshea/229da822f1f02157bff192a2e4a8ffd1
bshea

4

Eu uso este comando para listar todas as fontes de software configuradas (repositórios), incluindo as atualmente desativadas :

cat /etc/apt/sources.list; for X in /etc/apt/sources.list.d/*; do echo; echo; echo "** $X:"; echo; cat $X; done

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/*.listobter apenas fontes de software ativadas no momento.


Obrigado pelo feedback. cat lista os arquivos como estão, então eu precisaria editá-lo manualmente para gerar um script (conforme declarado na pergunta). O desafio dos repositórios: se você acabou de copiar os arquivos do / etc / apt, não obtém as chaves do repositório. É por isso que eu quero um script que os recupera para nós
stwissel

2

Então, fazendo algumas escavações, nós temos AptPkg::Class.

Então, usando perlpodemos fazer algo simples como este ..

perl -MAptPkg::Cache -MData::Dumper -E'say Dumper [AptPkg::Cache->new->files()]' | less

Isso nos fornece uma lista de todos os AptPkg::Class::PkgFilepacotes. Você provavelmente poderia gerar os apt-add-repositorycomandos com isso.


2

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:

#------------------------------------------------------------------------------#
#                            OFFICIAL UBUNTU REPOS                             #
#------------------------------------------------------------------------------#


###### Ubuntu Main Repos
deb http://us.archive.ubuntu.com/ubuntu/ yakkety main restricted universe multiverse 

###### Ubuntu Update Repos
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-security main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-updates main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-proposed main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-backports main restricted universe multiverse 

###### Ubuntu Partner Repo
deb http://archive.canonical.com/ubuntu yakkety partner

#------------------------------------------------------------------------------#
#                           UNOFFICIAL UBUNTU REPOS                            #
#------------------------------------------------------------------------------#


###### 3rd Party Binary Repos

#### Flacon PPA - http://kde-apps.org/content/show.php?content=113388
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F2A61FE5
deb http://ppa.launchpad.net/flacon/ppa/ubuntu yakkety main

#### Gimp PPA - https://launchpad.net/~otto-kesselgulasch/+archive/gimp
## Run this command: sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 614C4B38
deb http://ppa.launchpad.net/otto-kesselgulasch/gimp/ubuntu yakkety main

#### Google Chrome Browser - http://www.google.com/linuxrepositories/
## Run this command: wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -
deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main

#### Google Earth - http://www.google.com/linuxrepositories/
## Run this command: wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -
deb [arch=amd64] http://dl.google.com/linux/earth/deb/ stable main

#### Highly Explosive PPA - https://launchpad.net/~dhor/+archive/myway
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93330B78
deb http://ppa.launchpad.net/dhor/myway/ubuntu yakkety main

#### JDownloader PPA - https://launchpad.net/~jd-team
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A68F637
deb http://ppa.launchpad.net/jd-team/jdownloader/ubuntu yakkety main

#### Lazarus - http://www.lazarus.freepascal.org/
## Run this command:  gpg --keyserver hkp://pgp.mit.edu:11371 --recv-keys 6A11800F  && gpg --export --armor 0F7992B0  | sudo apt-key add -
deb http://www.hu.freepascal.org/lazarus/ lazarus-stable universe

#### LibreOffice PPA - http://www.documentfoundation.org/download/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1378B444
deb http://ppa.launchpad.net/libreoffice/ppa/ubuntu yakkety main

#### MEGA Sync Client - https://mega.co.nz/
deb http://mega.nz/linux/MEGAsync/xUbuntu_16.10/ ./

#### MKVToolnix - http://www.bunkus.org/videotools/mkvtoolnix/
## Run this command: wget -q http://www.bunkus.org/gpg-pub-moritzbunkus.txt -O- | sudo apt-key add -
deb http://www.bunkus.org/ubuntu/yakkety/ ./

#### Mozilla Daily Build Team PPA - http://edge.launchpad.net/~ubuntu-mozilla-daily/+archive/ppa
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  247510BE
deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu yakkety main

#### muCommander - http://www.mucommander.com/
## Run this command: sudo wget -O - http://apt.mucommander.com/apt.key | sudo apt-key add - 
deb http://apt.mucommander.com stable main non-free contrib  

#### Opera - http://www.opera.com/
## Run this command: sudo wget -O - http://deb.opera.com/archive.key | sudo apt-key add -
deb http://deb.opera.com/opera/ stable non-free

#### Oracle Java (JDK) Installer PPA - http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
deb http://ppa.launchpad.net/webupd8team/java/ubuntu yakkety main

#### PlayDeb - http://www.playdeb.net/
## Run this command: wget -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
deb http://archive.getdeb.net/ubuntu yakkety-getdeb games

#### SABnzbd PPA - http://sabnzbd.org/
## Run this command:  sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4BB9F05F
deb http://ppa.launchpad.net/jcfp/ppa/ubuntu yakkety main

#### SimpleScreenRecorder PPA - http://www.maartenbaert.be/simplescreenrecorder/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 283EC8CD
deb http://ppa.launchpad.net/maarten-baert/simplescreenrecorder/ubuntu yakkety main

#### Steam for Linux - http://store.steampowered.com/about/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F24AEA9FB05498B7
deb [arch=i386] http://repo.steampowered.com/steam/ precise steam

#### Syncthing - https://syncthing.net/
## Run this command: curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
deb http://apt.syncthing.net/ syncthing release

#### Tor: anonymity online - https://www.torproject.org
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 886DDD89
deb http://deb.torproject.org/torproject.org yakkety main

#### Unsettings PPA - http://www.florian-diesch.de/software/unsettings/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0FEB6DD9
deb http://ppa.launchpad.net/diesch/testing/ubuntu yakkety main

#### VirtualBox - http://www.virtualbox.org
## Run this command: wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox_2016.asc -O- | sudo apt-key add -
deb http://download.virtualbox.org/virtualbox/debian yakkety contrib

#### Webmin - http://www.webmin.com
## Run this command: wget http://www.webmin.com/jcameron-key.asc -O- | sudo apt-key add -
deb http://download.webmin.com/download/repository sarge contrib

#### WebUpd8 PPA - http://www.webupd8.org/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4C9D234C
deb http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu yakkety main

#### Xorg Edgers PPA - https://launchpad.net/~xorg-edgers
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8844C542  
deb http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu yakkety main
here is a generated list without source files and no samsung printer ppa
#### Yuuguu - http://yuuguu.com
deb http://update.yuuguu.com/repositories/apt hardy multiverse

2

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-onlypara mostrar apenas os PPAs. Os PPAs são automaticamente transformados em ppa:USER/REPOformato.

As partes relevantes são as 5 linhas list_sourcese as list_ppafunções, o resto é apenas um padrão para envolvê-lo em um prático script de shell.

list-apt-repositories:

#!/bin/sh

usage () {
  cat >&2 <<USAGE
$0 [--ppa-only]

Options:
  --ppa-only            only list PPAs
USAGE
  exit $1
}

list_sources () {
  grep -E '^deb\s' /etc/apt/sources.list /etc/apt/sources.list.d/*.list |\
    cut -f2- -d: |\
    cut -f2 -d' ' |\
    sed -re 's#http://ppa\.launchpad\.net/([^/]+)/([^/]+)(.*?)$#ppa:\1/\2#g'
}

list_ppa () {
  list_sources | grep '^ppa:'
}

generate=list_sources

while test -n "$1"
do
  case "$1" in
    -h|--help) usage 1;;
    --ppa-only) generate=list_ppa;;
    *)
      printf -- "Unknown argument '$1'\n" >&2
      usage 2
    ;;
  esac
  shift
done

$generate

E para criar um script de instalação, entre em outro script " make-apt-repository-install-script". O script gerado suporta o argumento -y/ --yespara uso não interativo (consulte add-apt-repository(1)).

make-apt-repository-install-script:

#!/bin/sh

if test -n "$1"
then
  cat >&2 <<USAGE
Usage: $0 < PATH_TO_LIST_OF_REPOS
       list-apt-repositories [--ppa-only] | $0

No options recognized.

Reads list of repositories from stdin and generates a script to install them
using \`add-apt-repository(1)\`. The script is printed to stdout.

The generated script supports an optional
\`-y\` or \`--yes\` argument which causes the \`add-apt-repository\` commands
to be run with the \`--yes\` flag.
USAGE
  exit 1
fi

cat <<INSTALL_SCRIPT
#!/bin/sh
y=
case "\$1" in
  -y|--yes) y=\$1;;
  '') y=;;
  *)
    printf '%s\n' "Unknown option '\$1'" "Usage: \$0 [{-y|--yes}]" >&2
    exit 1
  ;;
esac
INSTALL_SCRIPT

xargs -d'\n' printf "add-apt-repository \$y '%s'\n"

Novamente, a parte importante é o xargscomando na última linha, o resto é clichê.


1

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.

#! / bin / bash
# Meu ~ / bin / mk_repositories_restore_script
mkdir -p ~ / bin 
x = ~ / bin / restore_repositories
eco \ # \! / bin / bash> $ x
chmod u + x $ x
(
 para APT em $ (encontre / etc / apt / -name \ *. list)
    sed -n -e '/ ^ deb / {
     /ppa\.launchpad/s/\(.*\/\/[^\/)*.\)\([^ \ t] * \) \ (. * $ \) / sudo apt-add-repository ppa : \ 2 / p;
     /ppa\.launchpad/!s / \ (deb [\ t] * \) \ (. * $ \) / sudo apt-add-repository \ 2 / p;
    } '$ APT
 feito
) classificar | uniq tee -a ~ / bin / restore_repositories

0

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).

    #!/bin/bash
    # My ~/bin/mk_repositories_restore_script
    mkdir -p ~/bin
    x=~/bin/restore_repositories
    echo \#\!/bin/bash > $x
    chmod u+x $x
    (
    for APT in $( find /etc/apt/ -name \*.list )
    do sed -n -e '/^deb /{
          /ppa\.launchpad/s/\(.*\/\/[^\/]*.\)\([^ \t]*\)\(.*\/ubuntu.*$\)/ppa:\2/p;                                                                                                                                                                                       
        }' $APT
    done
    ) | sort | uniq | tee -a ~/bin/restore_repositories

0
sed -r -e '/^deb /!d' -e 's/^([^#]*).*/\1/' -e 's/deb http:\/\/ppa.launchpad.net\/(.+)\/ubuntu .*/ppa:\1/' -e "s/.*/sudo add-apt-repository '&'/" /etc/apt/sources.list /etc/apt/sources.list.d/*

Isso não gera comandos para ativar possíveis repositórios de origem (deb-src).


-1

Instalar ppa-purge

apt install ppa-purge

Em seguida, obtenha a lista ppa pela conclusão da guia ...

ppa-purge -o(pressione a Tabtecla duas vezes)


2
Isso é meio atrasado. Como você sugere que o OP colete a saída de conclusão do shell para armazenamento ou processamento? Além disso, ppa-purgenão possui -osinalizador de acordo com sua página de manual . -1
David Foerster
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.