Функции понижения версии пакетов есть ещё и в synaptic. Пользуюсь, когда стою перед фактом что что-то не устанавливается.
Я предлагаю вариант поиска потенциальных конфликтов на внешне благополучной системе. Этот способ : dpkg --get-selections | awk '{if ($2=="install") print $1}' > install.list aptitude reinstall `cat /root/install.list`
позволяет легко и быстро найти пакеты которых уже нет в репозиториях.
Хотя не факт что они вызовут в дальнейшем (при обновлении) конфликт. Но весьма вероятно что они уже вызывают конфликты другого рода - из-за несовпадения версий (было, из-за разных версий библиотек, в параметрах системы не отображались настройки принтеров, приходилось ставить через веб морду).
Неплохо если бы была утилитина позволяющая автоматизировать процесс. А вручную - довольно рутинная работа.
Функции понижения версии пакетов есть ещё и в synaptic. Пользуюсь, когда стою перед фактом что что-то не устанавливается.
Я предлагаю вариант поиска потенциальных конфликтов на внешне благополучной системе.Этот способ : dpkg --get-selections | awk '{if ($2=="install") print $1}' > install.list aptitude reinstall `cat /root/install.list`
позволяет легко и быстро найти пакеты которых уже нет в репозиториях.
Мне кажется этот список можно найти в Менеджере пакетов Synaptic (или Muon), если на боковой панеле выбрать вкладку "Состояние", а затем смотреть в группе "Установленные (локально или устаревшие)". Аналогично, можно также найти и в aptitude, если запустить без параметров.
В ответ на такую команду аптитюд всё равно пукнет, слишком много пакетов. Если уж переустанавливать всё, то aptitude reinstall должен получать имена пакетов по одному в цикле, а файл должен содержать версии пакетов. Я генерирую файл с именами-версиями так: alias aptfixver="sudo aptitude search ~i -F '%p' | while read STRING; do VER=\"\$(sudo apt-cache policy \$STRING)\"; LOCAL=\"\$(echo \"\$VER\" | grep '\*\*\*' -A1 | grep /var/lib/dpkg/status | wc -l)\"; if (( \"\$LOCAL\" != 1 )); then continue; fi; CHECK=\"\$(echo \"\$VER\" | grep http -B1 | head -n 1 | grep -v '\*\*\*')\"; if [ -n \"\$CHECK\" ] && (( \$(echo \"\$CHECK\" | wc -l) == 1 )); then NEW_VER=\$(echo \"\$CHECK\" | sed 's/^ \+\(.*\) \+[0-9]\+\$/\1/'); echo \"\$STRING=\$NEW_VER\" >> packages-versions.txt; fi; done;"
Кроме этого пользуюсь такими алиасами: alias aptitude="sudo aptitude -fV" alias apti="aptitude --no-gui" alias aptupd="apti update" alias aptfull="apti full-upgrade" alias aptupdfull="aptupd; aptfull" alias aptinst="apti install" alias aptfix="aptinst -f" alias aptreinst="apti reinstall" alias aptrem="apti remove" alias aptremfull="apti purge" alias aptshow="apti show" alias aptshowfiles="dpkg -L" alias aptshowver="sudo apt-cache policy" alias aptclean="apti clean" alias aptsearch="apti search" alias aptsearchfile="dpkg -S"
Пару слов, что он делает, если это не совсем очевидно:
1. Ищем все установленные пакеты
2. Если установленная версия пакета доступна в репе, пропускаем пакет
3. Если установленная версия не доступна в репе, но есть другая, доступная - запоминаем доступную версию
4. Генерируем файл packages-versions.txt в котором каждая строчка ПАКЕТ=ДОСТУПНАЯ_ВЕРСИЯ
5. Второй командой требуем установить версии пакетов из файла
Следующие две команды $ sudo aptitude purge `apt-show-versions | grep 'No available version' | sed 's/ .*//'` $ sudo aptitude purge `deborphan`
1. Ищем пакеты которые недоступны в репе и удаляем
2. Ищем пакеты (библиотеки) которые установлены автоматически и не используются - удаляем. Эту команду можно повторять снова и снова до полного удовлетворения
$ sudo aptitude purge `apt-show-versions | grep 'No available version' | sed 's/ .*//' | grep -v deadbeef\\\|subsonic\\\|teamviewer7`
И как я уже писал, перед тем как применить, можно почитать что аптитюд спрашивает и подкорректировать действия (например если написать +deadbeef он удален не будет)
С учетом замечания Xenomorph, возможно нужно доработать - создать файлик со списком "замороженных" пакетов и при создании packages-versions.txt исключать их из перечня кандидатов на удаление.
Скорее, не по теме, но не могу разобраться, что значит "виртуальный пакет"
Программа не устанавливается в 12.10: torrentstream-player-data : Зависит: libupnp3 (>= 1.4.3) который является виртуальным пакетом. Зависит: libx264-116 который является виртуальным пакетом. или libx264-120 который является виртуальным пакетом.
Виртуальный пакет предоставляет на выбор несколько различных программ/библиотек различных версий.
К примеру: aptitude show djvu-viewer No current or candidate version found for djvu-viewer Package: djvu-viewer State: not a real package Provided by: atril, djview3, djview4, evince, evince-gtk, okular-extra-backends, zathura-djvu
Посмотреть список виртуальных пакетов можно aptitude search "~v"
Судя по тому, что даже в моём дебиане версии пакетов намного выше, виртуальными эти пакеты названы потому, что в зависимостях они указаны, а в списке пакетов они не существуют, из этого следует вывод, что нужно искать более новую версию torrentstream.
"aptitude не может разрулить зависимости и предлагает снести пол системы"- чуток не понял, удаляються пакеты/програмы которые связаны с неугодным нам пакетом, вызывающим конфликт, устанавливаем нажный нам пакет, потом доустанавливаем то что пришлось удалить и теперь основной вопрос- но ведь тогда потянеться тот пакет который нужный этим приложениям и вызывал конфликт, как быть? и проканает ли вообще??
Тема создана два года назад. Сколько воды утекло с тех пор? Правильно. А как известно, даже в одну воду нельзя войти дважды.
Чтобы понять и проканает ли вообще?? нужно пробовать самому, а потом отписаться для всех. Или сидеть у воды и ждать невесть чего.
Бывают ситуации когда нельзя снести пол системы и заново поставить. Вот сейчас сижу с машинкой вокруг которой в радиусе 200 км ни одной души.
Предлагает снести всё, вплоть до поддержки сети. Соглашусь - потеряю, придётся по морозу и снежным заносам гнать бригаду.
Придётся проверять по пакетику.
В общем, опыт нужен, чтобы понять что-же это за ситуация. Возникает в основном если пользоваться сторонними репозиториями. А раз в основных к сожалению не всё есть, то иногда нужно и в бубен постучать.
Комментарии (20)
sudo apt-get install -f
sudo apt-get dist-upgrade -f
Лишний пакет != проблемный пакет. Как поиск мусора ваш метод годится, принято.
Я тоже сталкивался с описанной ситуацией, выяснял какой пакет вызывает конфликт и понижал его версию через muon
Функции понижения версии пакетов есть ещё и в synaptic. Пользуюсь, когда стою перед фактом что что-то не устанавливается.
Я предлагаю вариант поиска потенциальных конфликтов на внешне благополучной системе. Этот способ :
dpkg --get-selections | awk '{if ($2=="install") print $1}' > install.list
aptitude reinstall `cat /root/install.list`
позволяет легко и быстро найти пакеты которых уже нет в репозиториях.
Хотя не факт что они вызовут в дальнейшем (при обновлении) конфликт. Но весьма вероятно что они уже вызывают конфликты другого рода - из-за несовпадения версий (было, из-за разных версий библиотек, в параметрах системы не отображались настройки принтеров, приходилось ставить через веб морду).
Неплохо если бы была утилитина позволяющая автоматизировать процесс. А вручную - довольно рутинная работа.
Мне кажется этот список можно найти в Менеджере пакетов Synaptic (или Muon), если на боковой панеле выбрать вкладку "Состояние", а затем смотреть в группе "Установленные (локально или устаревшие)". Аналогично, можно также найти и в aptitude, если запустить без параметров.
В ответ на такую команду аптитюд всё равно пукнет, слишком много пакетов. Если уж переустанавливать всё, то aptitude reinstall должен получать имена пакетов по одному в цикле, а файл должен содержать версии пакетов. Я генерирую файл с именами-версиями так:
alias aptfixver="sudo aptitude search ~i -F '%p' | while read STRING; do VER=\"\$(sudo apt-cache policy \$STRING)\"; LOCAL=\"\$(echo \"\$VER\" | grep '\*\*\*' -A1 | grep /var/lib/dpkg/status | wc -l)\"; if (( \"\$LOCAL\" != 1 )); then continue; fi; CHECK=\"\$(echo \"\$VER\" | grep http -B1 | head -n 1 | grep -v '\*\*\*')\"; if [ -n \"\$CHECK\" ] && (( \$(echo \"\$CHECK\" | wc -l) == 1 )); then NEW_VER=\$(echo \"\$CHECK\" | sed 's/^ \+\(.*\) \+[0-9]\+\$/\1/'); echo \"\$STRING=\$NEW_VER\" >> packages-versions.txt; fi; done;"
Кроме этого пользуюсь такими алиасами:
alias aptitude="sudo aptitude -fV"
alias apti="aptitude --no-gui"
alias aptupd="apti update"
alias aptfull="apti full-upgrade"
alias aptupdfull="aptupd; aptfull"
alias aptinst="apti install"
alias aptfix="aptinst -f"
alias aptreinst="apti reinstall"
alias aptrem="apti remove"
alias aptremfull="apti purge"
alias aptshow="apti show"
alias aptshowfiles="dpkg -L"
alias aptshowver="sudo apt-cache policy"
alias aptclean="apti clean"
alias aptsearch="apti search"
alias aptsearchfile="dpkg -S"
А я пользуюсь связкой из своего скрипта и пары программ. Перед тем как применить изменения аптитюд спрашивает.
$ sudo aptitude search ~i -F '%p' | while read STRING; do VER="$(sudo apt-cache policy $STRING)"; LOCAL="$(echo "$VER" | grep '\*\*\*' -A1 | grep /var/lib/dpkg/status | wc -l)"; if (( "$LOCAL" != 1 )); then continue; fi; CHECK="$(echo "$VER" | grep '\*\*\*' -A2 | wc -l)"; if (( $CHECK == 3 )); then NEW_VER=$(echo "$VER" | head -n 7 | tail -n 1 | sed 's/^ \+\(.*\) \+[0-9]\+$/\1/'); echo "$STRING=$NEW_VER" >> 1.txt; fi; done;
$ sudo aptitude install `cat 1.txt`
$ sudo aptitude purge `apt-show-versions | grep 'No available version' | sed 's/ .*//' | grep -v teamviewer7 | grep -v subsonic | grep -v qucs | grep -v deadbeef`
$ sudo aptitude purge `deborphan`
Последнюю команду иногда приходится повторять, тоже наверно стоит сделать обвязку
Обновил первый скрипт, тут новая версия, если что пишите на мыло.
$ sudo aptitude search ~i -F '%p' | while read STRING; do VER="$(sudo apt-cache policy $STRING)"; LOCAL="$(echo "$VER" | grep '\*\*\*' -A1 | grep /var/lib/dpkg/status | wc -l)"; if (( "$LOCAL" != 1 )); then continue; fi; CHECK="$(echo "$VER" | grep http -B1 | head -n 1 | grep -v '\*\*\*')"; if [ -n "$CHECK" ] && (( $(echo "$CHECK" | wc -l) == 1 )); then NEW_VER=$(echo "$CHECK" | sed 's/^ \+\(.*\) \+[0-9]\+$/\1/'); echo "$STRING=$NEW_VER" >> packages-versions.txt; fi; done;
$ sudo aptitude install `cat packages-versions.txt`
Пару слов, что он делает, если это не совсем очевидно:
1. Ищем все установленные пакеты
2. Если установленная версия пакета доступна в репе, пропускаем пакет
3. Если установленная версия не доступна в репе, но есть другая, доступная - запоминаем доступную версию
4. Генерируем файл packages-versions.txt в котором каждая строчка ПАКЕТ=ДОСТУПНАЯ_ВЕРСИЯ
5. Второй командой требуем установить версии пакетов из файла
Следующие две команды
$ sudo aptitude purge `apt-show-versions | grep 'No available version' | sed 's/ .*//'`
$ sudo aptitude purge `deborphan`
1. Ищем пакеты которые недоступны в репе и удаляем
2. Ищем пакеты (библиотеки) которые установлены автоматически и не используются - удаляем. Эту команду можно повторять снова и снова до полного удовлетворения
Имхо, пакеты, которые недоступны в репозиториях удалять не стоит просто так.
У меня некоторые пакеты установлены не из репозиториев, например, драйвера для принтера или SOFA Statistics Open For All.
Исключения легко дописать в грип, например так:
$ sudo aptitude purge `apt-show-versions | grep 'No available version' | sed 's/ .*//' | grep -v deadbeef\\\|subsonic\\\|teamviewer7`
И как я уже писал, перед тем как применить, можно почитать что аптитюд спрашивает и подкорректировать действия (например если написать +deadbeef он удален не будет)
С учетом замечания Xenomorph, возможно нужно доработать - создать файлик со списком "замороженных" пакетов и при создании packages-versions.txt исключать их из перечня кандидатов на удаление.
Может быть допишу скрипт, если будет время, идея хорошая. Но лучше придумать, как бы так сделать, чтоб не нужен был этот файлик
Скорее, не по теме, но не могу разобраться, что значит "виртуальный пакет"
Программа не устанавливается в 12.10:
torrentstream-player-data : Зависит: libupnp3 (>= 1.4.3) который является виртуальным пакетом.
Зависит: libx264-116 который является виртуальным пакетом. или
libx264-120 который является виртуальным пакетом.
Виртуальный пакет предоставляет на выбор несколько различных программ/библиотек различных версий.
К примеру:
aptitude show djvu-viewer
No current or candidate version found for djvu-viewer
Package: djvu-viewer
State: not a real package
Provided by: atril, djview3, djview4, evince, evince-gtk, okular-extra-backends, zathura-djvu
Посмотреть список виртуальных пакетов можно aptitude search "~v"
Судя по тому, что даже в моём дебиане версии пакетов намного выше, виртуальными эти пакеты названы потому, что в зависимостях они указаны, а в списке пакетов они не существуют, из этого следует вывод, что нужно искать более новую версию torrentstream.
"aptitude не может разрулить зависимости и предлагает снести пол системы"- чуток не понял, удаляються пакеты/програмы которые связаны с неугодным нам пакетом, вызывающим конфликт, устанавливаем нажный нам пакет, потом доустанавливаем то что пришлось удалить и теперь основной вопрос- но ведь тогда потянеться тот пакет который нужный этим приложениям и вызывал конфликт, как быть? и проканает ли вообще??
Тема создана два года назад. Сколько воды утекло с тех пор? Правильно. А как известно, даже в одну воду нельзя войти дважды.
Чтобы понять нужно пробовать самому, а потом отписаться для всех. Или сидеть у воды и ждать невесть чего.
хорошо, но я имел ввиду что решение немного противоречивое, и больше напоминает легендарные танцы с бубном нежели альтернативу, но хорошо я вас понял)
Бывают ситуации когда нельзя снести пол системы и заново поставить. Вот сейчас сижу с машинкой вокруг которой в радиусе 200 км ни одной души.
Предлагает снести всё, вплоть до поддержки сети. Соглашусь - потеряю, придётся по морозу и снежным заносам гнать бригаду.
Придётся проверять по пакетику.
В общем, опыт нужен, чтобы понять что-же это за ситуация. Возникает в основном если пользоваться сторонними репозиториями. А раз в основных к сожалению не всё есть, то иногда нужно и в бубен постучать.
Отправить комментарий