[Devel-conf] apt, группы пакетов и пересчёт места на диске
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пн Окт 22 22:19:46 MSD 2007
On Thu, Oct 18, 2007 at 11:11:11AM +0400, Stanislav Ievlev wrote:
> Привет всем!
> (Я добавил в копию Лёшу Турбина, ибо ниже следует вопрос про apt)
Я вообще-то подписан на этот список со времён царя Гороха, когда voins
писал http-сервер на Си+плюс, а от меня ждали чародейства и волшебства
в роли пиэма. Надо было на перле его писать, для ИВК дело бы пошло
проще, а так всё равно всё десять раз уже пределали, но сингл писо коуд
сэвайвд.
Кстати я почему-то думал что первым делом нужно реализовать грамотный
разбор config-файлов (по BNF-синтаксису, а не по строковым регулярным
выражениям). Интересно, что к этому вопросу с тех пор не возвращались.
> Вообще возможны два пути:
> 1. Подготовить всё заранее (списки пакетов и их размеры, замкнутые при
> помощи apt) и потом пользоваться только rpm (естественно
> предварительно проводя операцию объединения выбранных списков и
> исключения из них basesystem)
>
> Собственно, это практически тоже самое что и установка базовой
> системы. Есть некоторый список (косвенно используется apt для
> замыкания его), и rpm "тупо" ставит пакеты по этому списку.
Смысл прегенерации? Повысить респонсивность гуя?
> 2. Попытаться использовать apt.
> apt-get использовать невозможно - ибо он слишком медленно считывает
> свои индексы. Остаются apt-shell и apt-pipe.
Ага. Это очень проклятая тема. Код apt-get и apt-shell/apt-pipe
сейчас рассинхронизирован. То есть там фактически зашито два разных
алгоритма разрешения зависимостей. Код в apt-get лучше разрешает
первичные виртуальные зависимости (указанные в командной строке).
Ограничивается ли эта рассинхронизация первичными виртуальными
зависимостями, я сходу сказать не могу. Но, строго говоря,
apt-shell/apt-pipe всерьез использовать нежелательно.
У меня есть свой фирменный хак, который позволяет использовать apt-get
без перечитывания хешей -- query-rebuild.git. Там написан скрипт на
lua, который ФОРАКЕТ apt! Штатно этот хак пока не работает, потому-что,
во первых, там есть патч к апту, а во-вторых, на время использования
этого хака нужно делать chmod -w /var/lib/rpm, потому что в противном
случае libapt-pkg НЕ ПЕРЕНОСИТ ФОРКА по части librpm/libdb4.
В общем рекомендовать этот хак я тоже не могу. Я делал его для
другого -- он обещает ГРОМАДНУЮ экономию для т.н. "полной пересборки
сизифа".
> Бакенд должен работать в интерактивным "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-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 не нужен ;)
>
> Что скажете?
Хм. Как ты это вообще себе представляешь? Я поставил галочку на
пакете. apt дал транзитивное замыкание зависимостей этого пакета.
Потом я снял галочку на пакете, что я имел в виду? А что если я две
галочки подряд поставил а потом в обратном порядке их снял? А в прямом?
То есть нужно хранить два списка пакетов. Первый список -- это куда
я поставил галочки. Второй список -- это то что выплюнул апт по
замыканию. Второй список каждый раз существует лишь вторично.
То есть второй список каждый раз "сбревается" аккурат под iff required
for selected packages.
Кажется в дебиане есть какое-то такое различие между selected
и installed. А может быть и нет.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel-conf/attachments/20071022/482f0e43/attachment-0002.bin>
Подробная информация о списке рассылки devel-conf