ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Aleksei Nikiforov <darktemplar@altlinux.org>
To: devel@lists.altlinux.org
Subject: Re: [devel] [#210919] EPERM (try 4) apt.git=0.5.15lorg2-alt59 synaptic.git=0.58-alt17 ...
Date: Fri, 3 Aug 2018 11:28:05 +0300
Message-ID: <0ebf178d-83fe-6eec-4efb-6c2492f9e015@altlinux.org> (raw)
In-Reply-To: <201808030954.06904.asy@altlinux.org>

03.08.2018 08:54, Sergey Afonin пишет:
> On Thursday 02 August 2018, Anton Farygin wrote:
> 
>> Но самое клёвое в этом apt - это apt-get autoremove
>> работает для всех зависимостей, которые были установлены после
>> обновления apt'а.
>   
> А по какому принципу выбирается, кого remove ?
> 

Все пакеты делятся на autoinstalled и manually installed. Если пакет не 
помечен явно, он считается manually installed. Т.е. установленные до 
перехода на новую версию apt пакеты автоматически удаляться не должны.

При установке пакетов через apt, все пакеты, которые устанавливаются для 
удовлетворения зависимостей других пакетов, и при этом явно не указаны 
для установки, помечаются как autoinstalled. Например, при установке 
пакета A, также требуется установить пакеты B и C, при этом пакеты B и C 
будут помечены autoinstalled. Если же запросить установку пакетов A и B, 
то только пакет C будет помечен autoinstalled.

Также метку auto/manually installed можно смотреть или изменять через 
новую утилиту apt-mark.

При dist-upgrade, если один пакет заменяет другой, то если хоть один из 
них уже был помечен manually installed, то заменяющий пакет также будет 
помечен manually installed. Данное поведение можно изменить через конфиг.

При вызове autoremove алгоритм следующий:
1) собирается полный список установленных пакетов, информация о них, и 
их метки auto/manually installed в том числе.
2) Создаётся второй список пакетов, куда из первого списка добавляются 
все пакеты, которые помечены manually installed, а также рекурсивно 
добавляются все пакеты, которые являются их зависимостями.
Если же какую-то зависимость могут удовлетворить несколько пакетов 
(virtual provides), и несколько таких пакетов установлено в системе, то 
временно такая неразрешённая зависимость складывается в отдельный третий 
список.
Если у какого-то пакета при этом остались неудовлетворённые зависимости, 
кроме пока-что отложенных виртуальных, то autoremove завершается с ошибкой.
3) После этого делается несколько проходов по списку неразрешённых 
virtual provides, пока он не опустеет или не обнаружится неразрешимых 
зависимостей. Делается это для выбора того, какой из нескольких пакетов, 
предоставляющих virtual provide, останется в системе. Для каждой 
зависимости получается список установленных пакетов, которые могут 
предоставить её, и из этого списка убираются пакеты, у которых в системе 
установлены не все зависимости.
Если хотя бы один из пакетов этого списка уже попал в список из пункта 
2, то остальные пакеты не проверяются: уже есть кандидат для 
удовлетворения данной виртуальной зависимости, который останется в системе.
Если пакетов для удовлетворения виртуальной зависимости не останется 
после удаления из списка пакетов с недостающими зависимостями, то 
autoremove завершается с ошибкой.
Если остался только 1 пакет, то соответственно выбирается он.
Если пакетов в списке осталось 2 или более, то проверяются версии 
пакетов, и выбирается более старшая версия. Если есть несколько пакетов 
с самой старшей версией, то выбирается первый из таких пакетов. Эту 
логику можно и далее улучшить или снабдить настройками в случае 
необходимости.
4) После всех этих действий, если autoremove не завершился с ошибкой, 
есть 2 списка пакетов - список всех установленных пакетов и список всех 
отобранных пакетов, которые нужно оставить. autoremove проходится по 
первому списку, и если пакета нет во втором списке, помечает пакет для 
удаления. После этого autoremove запрашивает подтверждение пользователя 
для удаления всех помеченных пакетов.

С уважением,
Алексей Никифоров


      parent reply	other threads:[~2018-08-03  8:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-02  9:26 ` Aleksei Nikiforov
2018-08-02 10:14   ` Anton Farygin
2018-08-03  5:54     ` Sergey Afonin
2018-08-03  6:42       ` Anton Farygin
2018-08-03  6:43       ` Sergey V Turchin
2018-08-03  8:28       ` Aleksei Nikiforov [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0ebf178d-83fe-6eec-4efb-6c2492f9e015@altlinux.org \
    --to=darktemplar@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git