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?
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.
Vous pouvez tout montrer avec:
grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*
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 deb
name__. 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 apt
name__, 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 à sed
name__:
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
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.
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
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.
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.
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
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).
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