web-dev-qa-db-fra.com

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?

Je sais comment lister tous les paquets installé sur mon système.

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

Je sais que je peux consulter /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 trie obtenir toutes les clés).

Des idées?

208
stwissel

Merci pour les pointeurs. Avec 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 dépôts:

#! /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'une question sur le superutilisateur pour trouver la regex correcte.

96
stwissel

Vous pouvez tout montrer avec:

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

Je suis surpris que le moyen le plus simple mais le plus efficace de réunir toutes les sources de logiciels 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 debname__. Cela exclut les lignes commentées ainsi que les lignes deb-src pour activer les référentiels de code source.

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


Si vous voulez une sortie plus courte mais peut-être seulement dans 99,9% des cas, avec une recherche excessive de fichiers (inclut tous les fichiers et répertoires /etc/apt/sources.list* et pas seulement /etc/apt/sources.list et `/etc/apt/sources.list.d/*), pourrait aussi utiliser ceci:

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

À moins qu'il y ait 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 à sedname__:

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/'

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
19
Byte Commander

Exécutez la commande suivante:

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

Source

8
Nikos

J'utilise cette commande pour répertorier toutes les sources logicielles configurées (référentiels), y compris celles 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 voudrez peut-être réduire /etc/apt/sources.list.d/* à /etc/apt/sources.list.d/*.list afin que vous n'obteniez que les sources de logiciels actuellement activées.

4
Eliah Kagan

https://repogen.simplylinux.ch/ 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
2
Richard W. Seitz

Donc, en creusant un peu, 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 packages AptPkg::Class::PkgFile. Vous pourriez probablement générer les commandes apt-add-repository avec cela.

2
Evan Carroll

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 au format ppa:USER/REPO.

Les parties pertinentes sont les 5 lignes des fonctions list_sources et list_ppa, le reste n’est qu’un passe-partout pour l’envelopper dans un script Shell 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:\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

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 "\$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"

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

2
ejm

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 lignes de dupe.

 #!/bin/bash 
 # Mon ~/bin/mk_repositories_restore_script 
 mkdir -p ~/bin 
 x = ~/bin/restore_repositories 
 echo\# \!/bin/bash> $ x 
 chmod u + x $ x 
 (
 pour APT dans $ (trouver/etc/apt/-name\*. list) 
 do -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 
 terminé 
 ) | trier | uniq | tee -a ~/bin/restore_repositories 
1
BobDodds
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/*

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

0
jarno

Merci BobDodds!
Si cela vous intéresse, 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:\2/p;                                                                                                                                                                                       
        }' $APT
    done
    ) | sort | uniq | tee -a ~/bin/restore_repositories
0
Martin Bortel