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. А может быть и нет.
pgp2eTFOJ7IOI.pgp
Description: PGP signature
_______________________________________________ devel-conf mailing list [email protected] https://lists.altlinux.org/mailman/listinfo/devel-conf
