Как найти вручную установленные пакеты?

Я установил плоскость Ubuntu 10.10 на моем компьютере и установил некоторое программное обеспечение через Кв. - добираются. На прошлой неделе я сумел повредить все и только что запустился с нуля, и я должен переустановить свое программное обеспечение. Там некоторый путь состоит в том, чтобы создать список со всеми пакетами, которые я установил вручную?

Так, чтобы это дало бы мне список как texlive, ... и нет texlive, texlive-dep1, textlive-dep2, ... и все стандартные пакеты удалены?

Если я мог бы так или иначе выяснить, какие программы из регулярной установки я удалил, который был бы потрясающим также!


Обновление 23.05.2015: Я теперь использую Ansible в качестве управления конфигурацией в моих системах. Там я указываю пакеты для установки. Это служит цели, устанавливая все программы в новой системе, еще лучше. Таким образом, этим вопросом могла бы быть запись в некоторое легкое управление конфигурацией.

48
задан 23 May 2015 в 16:09

15 ответов

Исходя из этого, я предполагаю, что ваша старая установка все еще будет загружаться!

Чтобы реплицировать один набор пакетов на другую машину:

В системе A запустите:

[ 110]

Переместите файл my-selections в систему B.

В системе B выполните:

dpkg --set-selections < my-selections

, а затем:

sudo apt-get dselect-upgrade

Важное примечание: если вы установили пакеты из нестандартных репозиториев и / или PPA, также необходимо скопировать /etc/apt/sources.list и содержимое /etc/apt/sources.list.d/ из системы A в систему B перед запуском обновления.

Вы также можете использовать dpkg, чтобы увидеть, что вы удалили (примечание: это также будет включать пакеты, которые вы вручную установили и удалили):

dpkg --get-selections | grep deinstall

Вы может увидеть ваши результаты в терминале или, конечно, перенаправить в файл.

0
ответ дан 23 May 2015 в 16:09

Если Ваши способные журналы находятся в/var/log/apt, что-то вроде этого должно работать:

gunzip -c /var/log/apt/history.log.*.gz | grep "apt-get install"

Или если Вы хотите избавиться от части повторяющегося спама в выводе:

gunzip -c /var/log/apt/history.log.*.gz | grep "apt-get install" \
  | cut -f4- -d" " | sort | uniq
10
ответ дан 23 May 2015 в 16:09

Этот поток от superuser.com дает такое решение:

aptitude search '?installed ?not(?automatic)'
0
ответ дан 23 May 2015 в 16:09

Я наконец получил это сейчас:

outfile="$(mktemp)"
pattern='(\[INSTALLIEREN\]|\[INSTALL\])'

if [[ -f "/var/log/aptitude.1.gz" ]]
then
        gunzip -c /var/log/aptitude.*.gz | grep -E "$pattern" | awk '{ print $2; }' > "$outfile"
fi

if [[ -f "/var/log/aptitude" ]]
then
        grep -E "$pattern" "/var/log/aptitude" | awk '{ print $2; }' >> "$outfile"
fi

sort "$outfile"
rm "$outfile"
0
ответ дан 23 May 2015 в 16:09

Вы можете использовать apt-mark , но я рекомендую debfoster :

sudo apt-get install debfoster
sudo debfoster

Это проверит все установленные пакеты и выяснит, какие из них хранят другие установили:

texlive-full is keeping the following 161 packages installed:
  cm-super cm-super-minimal context doc-base dvipng feynmf
  fonts-gfs-artemisia fonts-gfs-baskerville fonts-gfs-bodoni-classic
  ...
Keep texlive-full? [Ynpsiuqx?], [H]elp:

Когда вы отвечаете «y» на каждый вопрос (просто нажмите Enter для быстрого перемещения), debfoster соберет список пакетов и построчно запишет их в файл. По умолчанию это в /var/lib/debfoster/keepers. Это выглядит так:

gnome-do
texlive-full
...

Я настраиваю debfoster через /etc/debfoster.conf, чтобы поместить этот список в /etc/debfoster-keepers, и отслеживаю файл с помощью etckeeper , чтобы хранить историю и резервные копии. Ответ здесь показывает, как установить список пакетов из текстового файла, разделенного символом новой строки:

sudo apt-mark manual $(cat debfoster-keepers)

Обратите внимание на ограничение: у очищенных пакетов перед символом «-» их. Поэтому вы хотите удалить эти строки перед вызовом apt-mark.

Несмотря на то, что на сайте debfoster написано, что debfoster устарел в пользу aptitude, я предпочитаю быструю и простую настройку debfoster. Он помещает вас в середину вашей базы данных пакетов и позволяет вам очистить вещи, делая пакеты auto и manual более очевидными.

Введите «h» в приглашении debfoster, чтобы объяснить ваши варианты. Тип "?" чтобы увидеть описание пакета. с практическими рекомендациями может быть полезным.

0
ответ дан 23 May 2015 в 16:09

Я могу вытащить все, открыв файлы журналов в / var / log / apt /

Затем я захожу и вручную отфильтрую пакеты установки apt-get. Может быть, есть способ сделать это программно, но я не знаю об этом.

0
ответ дан 23 May 2015 в 16:09

Я не нашел подходящего для меня, поэтому написал сценарий. Путем анализа содержимого /var/log/apt/history.log* и / var / log / aptitude, а затем сортировки по дате и времени, в результате получается два списка: один устанавливается вручную, другой устанавливается, но удаляется. Скрипт с проверкой «apt list». небольшое отклонение, потому что при использовании dpkg установлен и изменен источник PPA.

Я положил сюда, https://github.com/eexpress/eexp-bin/blob/master/self-installed-pkg.pl .

Если кому-то нужно протестировать его, возможно, потребуется изменить какой-то код, поскольку мои файлы журналов смешаны на китайском и английском языках (особенно в формате даты-времени RFC2822), мне нужно разобраться с этим. enter image description here

0
ответ дан 23 May 2015 в 16:09

Для тех, кто предпочитает использовать инструменты apt- *, есть утилита apt-mark, которая позволяет запрашивать и изменять ручное / автоматическое состояние.

apt-mark showmanual

Вы также можете указать шаблон для пакетов, которые вас интересуют:

apt-mark showmanual qemu\*
0
ответ дан 23 May 2015 в 16:09
cd /var/log/apt
cat  history.log | grep Commandline

Таким образом, вы видите список команд, выполненных в прошлом.

Удалите код grep, если вам нужна дополнительная информация:

less history.log

, если журнал сжат (т. Е. Заканчивается gz)

gunzip <filename>

, чтобы снова сжать его, когда Готово вы можете сделать:

gzip <filename>
0
ответ дан 23 May 2015 в 16:09

Используйте файл манифеста распространения в качестве набора базовых пакетов. Сортируйте результаты, установленные вручную, по группам пакетов по архитектуре и разделам, чтобы было легче сосредоточиться на группах пакетов (возможно, вам не нужны некоторые разделы).

https://gist.github.com/darrenleeweber/8cc570ff402f19af7fa4

#!/bin/bash

manifest_url='http://releases.ubuntu.com/releases/trusty/ubuntu-14.04.3-desktop-amd64.manifest'
manifest_file=$(echo $manifest_url | sed -e 's#.*/##g')
if [ ! -e $manifest_file ]; then
    wget -q $manifest_url
fi
cat $manifest_file | cut -f1 | sort -u > default_installed.txt

aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currently_installed.txt

comm -23 currently_installed.txt default_installed.txt > manually_installed.txt

# sort the 'mannually_installed.txt' packages by architecture and section
mkdir -p package_files
while read p; do
    apt-cache show $p > info.txt
    arch=$(grep -m1 'Architecture: ' info.txt | sed -e 's/Architecture: //')
    section=$(grep -m1 'Section: ' info.txt | sed -e 's/Section: //' -e 's/\//_/g')
    file="${arch}_${section}_packages.txt"
    echo $p >> "package_files/$file"
done <manually_installed.txt

rm info.txt
0
ответ дан 23 May 2015 в 16:09

Я не видел, что любые решения здесь работали на меня, я установил довольно много deb пакетов с dpkg и несколькими объектов, которые я особенно искал, отсутствовали.

Довольно длинный один лайнер, но удобный для копии и вставки был бы:

export DPKG_INITIAL=$(mktemp) DPKG_INSTALLED=$(mktemp) DPKG_CUSTOM=$(mktemp) DPKG_DEPS=$(mktemp) zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > $DPKG_INITIAL ; awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > $DPKG_INSTALLED ; comm -23 installed initial > $DPKG_CUSTOM ; function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; } ; echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > $DPKG_DEPS ; comm -23 custom deps > my-packages ; rm $DPKG_INITIAL $DPKG_INSTALLED $DPKG_CUSTOM $DPKG_DEPS

Вышеупомянутая команда сохраняет список пакетов в файл в Вашем текущем рабочем названном каталоге my-packages.

Объяснение

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

zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > initial

Сопровождаемый длинным списком объектов, установленных в целом.

awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > installed

Я затем сравнил эти два файла initial и installed перечислять только объекты, уникальные для установленного.

comm -23 installed initial > custom

Оттуда я хотел отфильтровать зависимости, это - то, где этот метод может пропустить некоторые желаемые пакеты, он не знает о зависимостях, которые также явно установлены.

Я записал быструю функцию удара для сокращения, это ступает в обработку этих объектов.

function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; }

После этого я передал каждую строку из своего файла custom в эту функцию с xargs.

echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > deps

После того как у меня был длинный список каждой возможной зависимости, (не уверенный в каждом возможном операторе), я еще раз получил строки, которые были уникальны для единственного файла.

comm -23 custom deps > manual

И мой законченный список пакетов находится теперь в названном файле manual доступный для меня для рассмотрения.

1
ответ дан 23 May 2015 в 16:09
comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Предоставляет все установленные вручную пакеты (не системные пакеты, не зависимости). Для примеров это показывает build-essential, но не gcc.

0
ответ дан 23 May 2015 в 16:09
#! /bin/sh
DEFAULT=`tempfile`
CURRENT=`tempfile`
cat /var/log/installer/initial-status.gz | gzip -d | grep '^Package:' | awk '{ print $2}' | sort -u > $DEFAULT
aptitude search '~i !~M' -F '%p' | sort -u | tr -d ' ' | awk '{ print $1}' > $CURRENT
comm -23 $CURRENT $DEFAULT
rm $DEFAULT
rm $CURRENT
0
ответ дан 23 May 2015 в 16:09

Я думаю, что вы хотите использовать /var/log/apt/history.log и его друзей, чтобы дать внесенные изменения:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt(?:-get)? install (?!.*--reinstall)\K.*'

(Модифицировано из источника )

Предоставит вам все пакеты, которые были установлены в командной строке, используя вариант apt-get install.

Он получает сжатые файлы в старых history.log файлах, добавляет их с текущим history.log и проходит через grep, извлекает строки с помощью apt [-get] install [и / или переустановить] и показывает оставшуюся часть строки (-o флаг), который соответствует именам пакетов.

Для этого понадобится немного моддинга (например, с sed), если вы хотите, чтобы имена пакетов находились в отдельных строках; упражнение для читателя!

Стоит отметить, что менеджер синаптических пакетов (gksu synaptic или kdesudo synaptic) в разделе «статус» имеет список «установленных (вручную)». Если вы отметите весь список для удаления [не применяйте его !!], вы сможете сохранить помеченные изменения и таким образом получить список пакетов. Предостережение: это заблокировано для меня synaptic (предположительно вычисление удалений зависимостей).

0
ответ дан 23 May 2015 в 16:09

Кто-то связался с https://unix.stackexchange.com/questions/3595/ubuntu-list-explicitly-installed-packages/3624#3624 , у которого действительно есть хорошее решение, но это не не работает правильно, так как выход из aptitude изменился. Вот обновленная версия, основанная на сравнении установленных в настоящее время пакетов по сравнению с 12.04 LTS. Вам нужно установить aptitude, это единственное требование.

aptitude search '~i !~M' -F '%p' | sort -u | tr -d ' ' > currentlyinstalled && wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f 1 | sort -u > defaultinstalled && comm -23 currentlyinstalled defaultinstalled

Чтобы разбить вышеупомянутую команду на части, этот бит выводит один пакет на строку из всего, что установлено в системе

aptitude search '~i !~M' -F '%p' | sort -u | tr -d ' ' > currentlyinstalled

И это загружает список пакетов по умолчанию & amp; обрезает избыточную информацию.

wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f 1 | sort -u > defaultinstalled

и comm сравнивают два файла и выводят пакеты, которых нет в списке по умолчанию.

comm -23 currentlyinstalled defaultinstalled
0
ответ дан 23 May 2015 в 16:09

Другие вопросы по тегам:

Похожие вопросы: