Как я могу получить список всех репозиториев и PPA из командной строки в сценарий установки?

Я знаю, как перечислите все пакеты установлен в моей системе.

Но как я мог бы получить список всех репозиториев и PPA в сценарий, который я могу запустить на новой машине, чтобы воспроизвести настройки репозитория, включая ключи?

Я знаю, что могу заглянуть в /etc/apt/sources.list и /etc/apt/sources.list.d, но я ищу способ генерировать сценарий, который выполняет все apt-add-repository команды в новой системе (которая сортирует получение всех ключей).

Есть какие-нибудь идеи?

Вы можете показать все с помощью:

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

Спасибо за советы. После небольшой очистки я получил скрипт, который перечисляет PPA, но не какой-либо другой репозиторий:

#! /bin/sh # listppa Script to get all the PPA installed on a system ready to share for reininstallfor 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    donedone

Когда вы вызываете его с помощью listppa > installppa.sh вы получаете скрипт, который можете скопировать на новую машину, чтобы переустановить все PPA.

Следующая остановка: сделайте это для других репозиториев:

#! /bin/sh# Script to get all the PPA installed on a systemfor 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    donedone

Это должно сработать. Мне нужно было вопрос о суперпользователе чтобы определить правильное регулярное выражение.

Я удивлен, что самый простой, но наиболее эффективный способ получить все включенные двоичные источники программного обеспечения вместе с файлом, в котором они указаны, еще не опубликован:

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

Из всех обработанных файлов будет выведена каждая строка, начинающаяся с deb. Это исключает закомментированные строки, а также deb-src строки для включения репозиториев исходного кода.

Он действительно ищет только все *.list файлы, которые будут проанализированы с помощью apt, но , например , нет *.list.save файлы, используемые для резервного копирования, или другие файлы с незаконными именами.


Если вы хотите более короткий, но, возможно, только в 99,9% всех случаев правильный вывод, который может привести к поиску слишком большого количества файлов (включает все /etc/apt/sources.list* файлы и каталоги, не только /etc/apt/sources.list и `/etc / apt /sources.list.d /*), вы также могли бы использовать это:

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

Если нет файлов, которых там быть не должно, результат будет таким же.


Примером вывода на моей машине может быть следующее:

/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

Если вы хотите более красивый результат, давайте пропустим его через 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/'

И мы увидим это:

deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily main restricteddeb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates main restricteddeb http://ftp-stud.hs-esslingen.de/ubuntu/ wily universedeb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates universedeb http://ftp-stud.hs-esslingen.de/ubuntu/ wily multiversedeb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates multiversedeb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-backports main restricted universe multiversedeb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security main restricteddeb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security universedeb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security multiversedeb 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

Выполните следующую команду:

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

Источник

Я использую эту команду для перечисления всех настроенных источников программного обеспечения (репозиториев), в том числе в настоящее время отключенные:

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

Я использую это в первую очередь для устранения неполадок; это, безусловно, может быть включено в сценарии, но вы можете захотеть сузить /etc/apt/sources.list.d/* к /etc/apt/sources.list.d/*.list таким образом, вы получаете только включенные в данный момент источники программного обеспечения.

Вот мой сценарий, "list-apt-repositories", в котором перечислены все репозитории в "/etc/sources.list" и "/etc/sources.list.d/*.list". Вы можете добавить --ppa-only показывать только PPA. PPA автоматически преобразуются в ppa:USER/REPO формат.

Соответствующими частями являются 5 строк в list_sources и list_ppa функции, остальное - просто шаблон, чтобы обернуть его в удобный сценарий оболочки.

list-apt-repositories:

#!/bin/shusage () {  cat >&2 <<USAGE$0 [--ppa-only]Options:  --ppa-only            only list PPAsUSAGE  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_sourceswhile 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  shiftdone$generate

И чтобы создать сценарий установки, перейдите в другой сценарий "make-apt-repository-install-script". Сгенерированный скрипт поддерживает -y/--yes аргумент в пользу неинтерактивного использования (см. add-apt-repository(1)).

make-apt-repository-install-script:

#!/bin/shif test -n "$1"then  cat >&2 <<USAGEUsage: $0 < PATH_TO_LIST_OF_REPOS       list-apt-repositories [--ppa-only] | $0No options recognized.Reads list of repositories from stdin and generates a script to install themusing \`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\` commandsto be run with the \`--yes\` flag.USAGE  exit 1ficat <<INSTALL_SCRIPT#!/bin/shy=case "\$1" in  -y|--yes) y=\$1;;  '') y=;;  *)    printf '%s\n' "Unknown option '\$1'" "Usage: \$0 [{-y|--yes}]" >&2    exit 1  ;;esacINSTALL_SCRIPTxargs -d'\n' printf "add-apt-repository \$y '%s'\n"

Опять же, важной частью является xargs команда в последней строке, остальное - шаблонно.

Итак, покопавшись немного, мы имеем AptPkg::Class.

Таким образом, используя perl мы можем сделать что-то простое вроде этого..

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

Это дает нам список всех AptPkg::Class::PkgFile пакеты. Вероятно, вы могли бы сгенерировать apt-add-repository команды с этим.

С помощью add-apt-repository от software-properties-common, это так же просто, как:

add-apt-repository --list

Выходной сигнал может быть легко передан обратно в add-apt-repository команда для воссоздания исходных текстов.

Однако в нем перечислены только deb источники. Если вы заинтересованы также в ppas, тогда другие ответы на этот вопрос будут более полезными.

Доступность

Похоже, что --list опция была доступна только с версии 0.99.0+ software-properties-common, который доступен по умолчанию, начиная с Ubuntu 20.10 (Groovy). Таким образом, вам нужно будет либо обновить свою версию программного обеспечения, либо обновить свой дистрибутив по крайней мере до 20.10.

https://repogen.simplylinux.ch/ выдаст вам список всех PPA для вашей версии Ubuntu. Вот сгенерированный список без исходных файлов и без принтера samsung ppa:

#------------------------------------------------------------------------------##                            OFFICIAL UBUNTU REPOS                             ##------------------------------------------------------------------------------####### Ubuntu Main Reposdeb http://us.archive.ubuntu.com/ubuntu/ yakkety main restricted universe multiverse ###### Ubuntu Update Reposdeb 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 Repodeb 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 F2A61FE5deb 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 614C4B38deb 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 93330B78deb 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 6A68F637deb 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 1378B444deb 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  247510BEdeb 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 EEA14886deb 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 4BB9F05Fdeb 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 283EC8CDdeb 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 F24AEA9FB05498B7deb [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 886DDD89deb 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 0FEB6DD9deb 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 4C9D234Cdeb 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 mainhere is a generated list without source files and no samsung printer ppa#### Yuuguu - http://yuuguu.comdeb http://update.yuuguu.com/repositories/apt hardy multiverse

Вот однострочный:

find /etc/apt/sources.list* -type f -iname "*.list" -exec grep -viE '(^#|^$)' {} \; -print | column -txdeb                                 http://archive.ubuntu.com/ubuntu    bionic            main        restricteddeb                                 http://archive.ubuntu.com/ubuntu    bionic-updates    main        restricteddeb                                 http://archive.ubuntu.com/ubuntu    bionic            universedeb                                 http://archive.ubuntu.com/ubuntu    bionic-updates    universedeb                                 http://archive.ubuntu.com/ubuntu    bionic            multiversedeb                                 http://archive.ubuntu.com/ubuntu    bionic-updates    multiversedeb                                 http://archive.ubuntu.com/ubuntu    bionic-backports  main        restricted  universe  multiversedeb                                 http://security.ubuntu.com/ubuntu   bionic-security   main        restricteddeb                                 http://security.ubuntu.com/ubuntu   bionic-security   universedeb                                 http://security.ubuntu.com/ubuntu   bionic-security   multiverse/etc/apt/sources.listdeb                                 https://nginx.org/packages/ubuntu/  bionic            nginxdeb-src                             https://nginx.org/packages/ubuntu/  bionic            nginx/etc/apt/sources.list.d/nginx.list