Comment puis-je obtenir une liste de tous les référentiels et PPA à partir de la ligne de commande dans un script d'installation?

190

Je sais comment lister tous les packages installés sur mon système. / p>

Mais comment puis-je obtenir une liste de tous les référentiels et des PPA dans un script que je peux exécuter sur un nouvel ordinateur pour répliquer la configuration du référentiel, y compris les clés?

Je sais que je peux regarder dans /etc/apt/sources.list et /etc/apt/sources.list.d , mais je cherche un moyen de générer un script qui exécute toutes les commandes apt-add-repository sur un nouveau système (qui effectue le tri). obtenir toutes les clés).

Des idées?

    
posée stwissel 10.06.2012 - 13:30
la source

12 réponses

93

Merci pour les pointeurs. Après un petit nettoyage, j'ai obtenu un script qui répertorie les PPA, mais pas n'importe quel autre référentiel:

#! /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

Lorsque vous l'appelez avec listppa > installppa.sh , vous obtenez un script que vous pouvez copier sur un nouvel ordinateur pour réinstaller tous les fichiers PPA.

Prochain arrêt: faites cela pour les autres référentiels:

#! /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

Cela devrait faire l'affaire. J'avais besoin d'un question sur le superutilisateur pour déterminer la regex correcte.

    
réponse donnée stwissel 10.06.2012 - 15:49
la source
84

Vous pouvez tout afficher avec:

grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*
    
réponse donnée wojox 10.06.2012 - 14:52
la source
15

Je suis surpris que le moyen le plus simple mais le plus efficace de réunir toutes les sources logicielles binaires activées avec le fichier dans lequel elles ont été spécifiées n'ait pas encore été publié:

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

De tous les fichiers traités, cela imprimera chaque ligne en commençant par deb . Cela exclut les lignes commentées ainsi que deb-src lignes pour activer les référentiels de code source.

Il ne recherche en réalité que tous les *.list fichiers qui seront analysés par apt , mais p. ex. aucun *.list.save fichiers utilisés pour la sauvegarde ou autres avec des noms illégaux.

Si vous voulez une sortie plus courte mais peut-être seulement dans 99,9% des cas, il est possible que le nombre de fichiers recherchés soit trop important (inclut tous les fichiers et répertoires /etc/apt/sources.list* , pas seulement /etc/apt/sources.list et '/etc/apt/sources.list .d / *), vous pouvez aussi utiliser ceci:

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

Sauf s'il y a des fichiers qui ne devraient pas être là, le résultat sera le même.

Voici un exemple de sortie sur ma machine:

/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

Si vous voulez une sortie plus jolie, transmettons-la à travers sed :

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

Et nous verrons ceci:

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
    
réponse donnée Byte Commander 04.03.2016 - 09:57
la source
6

Exécutez la commande suivante:

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

Source

    
réponse donnée Nik-Lz 12.06.2017 - 13:43
la source
4

J'utilise cette commande pour répertorier toutes les sources logicielles configurées (référentiels), y compris les sources actuellement désactivées :

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

Je l’utilise principalement pour le dépannage; ceci peut certainement être incorporé dans des scripts mais vous pouvez vouloir réduire /etc/apt/sources.list.d/* à /etc/apt/sources.list.d/*.list afin de ne récupérer que les sources logicielles actuellement activées.

    
réponse donnée Eliah Kagan 12.06.2012 - 10:57
la source
2
Le

lien vous donnera une liste de tous les PPA de votre version d'Ubuntu. Voici une liste générée sans fichiers source et sans imprimante 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
    
réponse donnée Richard W. Seitz 16.11.2016 - 07:28
la source
2

Voici mon script, " list-apt-repositories ", qui répertorie tous les référentiels dans " /etc/sources.list" et" /etc/sources.list.d/*.list ". Vous pouvez ajouter --ppa-only pour afficher uniquement les PPA. Les PPA sont automatiquement transformés en ppa:USER/REPO . format.

Les parties pertinentes sont les 5 lignes des fonctions list_sources et list_ppa , le reste n’est que du passe-partout pour l’envelopper dans un script shell très pratique.

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:/#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

Et pour créer un script d'installation, dirigez-le vers un autre script " make-apt-repository-install-script ". Le script généré prend en charge l'argument -y / --yes pour une utilisation non interactive (voir 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 "\" in
  -y|--yes) y=\;;
  '') y=;;
  *)
    printf '%s\n' "Unknown option '\'" "Usage: \
#!/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:/#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
[{-y|--yes}]" >&2 exit 1 ;; esac INSTALL_SCRIPT xargs -d'\n' printf "add-apt-repository \$y '%s'\n"

Encore une fois, la partie importante est la commande xargs sur la dernière ligne, le reste est passe-partout.

    
réponse donnée ejm 04.12.2017 - 08:40
la source
2

Donc, en fouillant, nous avons AptPkg::Class .

Donc, en utilisant perl , nous pouvons faire quelque chose de simple comme celui-ci.

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

Cela nous donne une liste de tous les paquets AptPkg::Class::PkgFile . Vous pourriez probablement générer les commandes apt-add-repository avec cela.

    
réponse donnée Evan Carroll 14.11.2016 - 20:48
la source
1

Pour l'ajouter, ajoutez les lignes ppa.launchpad.net en tant que ppa: $ USER / $ PPA. Ajoutez d'autres référentiels avec leur ligne complète à partir de fichiers * .list. Pas de dupes.

#!/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]*\)\(.*$\)/sudo apt-add-repository ppa:/p;
     /ppa\.launchpad/!s/\(deb[ \t]*\)\(.*$\)/sudo apt-add-repository /p;
    }' $APT
 done
) | sort | uniq | tee -a ~/bin/restore_repositories
    
réponse donnée BobDodds 12.04.2015 - 00:51
la source
0

Merci BobDodds!
Si quelqu'un est intéressé, j'ai un peu mis à jour votre code (j'espère que cela ne vous dérange pas) ..
Ce script ne tapera que les PPA ajoutés par l'utilisateur (/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:/p;                                                                                                                                                                                       
        }' $APT
    done
    ) | sort | uniq | tee -a ~/bin/restore_repositories
    
réponse donnée Martin Bortel 15.11.2015 - 01:16
la source
0
sed -r -e '/^deb /!d' -e 's/^([^#]*).*//' -e 's/deb http:\/\/ppa.launchpad.net\/(.+)\/ubuntu .*/ppa:/' -e "s/.*/sudo add-apt-repository '&'/" /etc/apt/sources.list /etc/apt/sources.list.d/*

Cela ne génère pas de commandes pour activer les référentiels sources possibles (deb-src) cependant.

    
réponse donnée jarno 26.11.2016 - 19:37
la source
-1

Installer ppa-purge

apt install ppa-purge

Ensuite, obtenez la liste ppa en complétant les onglets ...

ppa-purge -o (appuyez deux fois sur la touche Tab )

    
réponse donnée 24.08.2018 - 10:38
la source

Lire d'autres questions sur les étiquettes