[Devel-conf] apt, группы пакетов и пересчёт места на диске
Stanislav Ievlev
=?iso-8859-1?q?stanislav=2Eievlev_=CE=C1_gmail=2Ecom?=
Чт Окт 18 11:11:11 MSD 2007
Привет всем!
(Я добавил в копию Лёшу Турбина, ибо ниже следует вопрос про apt)
Довольно часто от пользователей поступало пожелание:
выбирая группы пакетов в инсталляторе, видеть в режиме on-line сколько
места на диске потребуется.
Фишка полезная, однако для её реализации придётся приложить
определённое количество усилий. Есть несколько путей, давайте сообща
поймём какой лучше.
Вообще возможны два пути:
1. Подготовить всё заранее (списки пакетов и их размеры, замкнутые при
помощи apt) и потом пользоваться только rpm (естественно
предварительно проводя операцию объединения выбранных списков и
исключения из них basesystem)
Собственно, это практически тоже самое что и установка базовой
системы. Есть некоторый список (косвенно используется apt для
замыкания его), и rpm "тупо" ставит пакеты по этому списку.
2. Попытаться использовать apt.
apt-get использовать невозможно - ибо он слишком медленно считывает
свои индексы. Остаются apt-shell и apt-pipe.
Бакенд должен работать в интерактивным "apt-shell", постоянно висящем
в фоне. apt-shell не шибко готов к такому развороту событий, а потому
тоже отпадает.
Остался старый добрый apt-pipe. За ним нужен глаз да глаз, надо не
забывать про необходимость вычитывание errors (apt-pipe использует
единый канал для stdout и stderr). И главное надо хорошенько потом его
грохнуть под конец работы, желательно подкрепить это грохание
завершающим kill ;)
Как теперь можно пробовать работать.
Выбрали группы пакетов - apt-pipe сказали install - узнали сколько
нужно места на диске.
Убрали группу пакетов ... и вот тут очередной "ой". Одно дело убрать
одну группу, второе дело - фактически откатить "транзакцию". Есть
только один способ - сбросить всё на начало и поставить все оставшиеся
выделенными группы. А операции reset в apt-shell/apt-pipe нет.
В alterator-packages применялся фокус "давайте грохнем apt-pipe".
Сразу понятно что по скорости apt-pipe сразу становится сопоставим с
apt-get.
Есть в apt-shell операция keep. Можно было бы сделать фокус, когда
скормить keep всю пачку выделенных пакетов, но:
1. Передать все пакеты целиком невозможно ибо у apt-pipe ограниченна
длина сообщения, при передаче "пачками" скорость "обнуления"
сопоставима с 'убиванием' и запуском apt-pipe заново.
2. Не очень понятно на самом деле как keep влияет на алгоритм apt.
Ведь keep - это аналог hold, но не сброс состояния на исходное.
Отсюда мораль. Надо разбираться с keep и реализовать в
apt-shell/apt-pipe новую операцию reset, и желательно делать это
правильным образом.
Или не париться и мириться с тем что при щелчке по очередному
checkbox'у вылетает надпись со словами "пожалуйста подождите, сейчас я
всё сделаю.... ", но тогда и apt-pipe не нужен ;)
Что скажете?
--
Станислав Иевлев.
Подробная информация о списке рассылки devel-conf