чистка distfiles
Так-тик 24 мая, 2008 - 15:55
Недавно накрылся винт. Переместил я свои distfiles на новый, но выжили не все файлы. Как вычистить из distfiles все файлы с битыми суммами?
»
- Для комментирования войдите или зарегистрируйтесь
eclean distfiles
eclean distfiles
А оно точно
А оно точно суммы учитывает? Что-то мне кажется, что оно только имена сырцов смотрит.
Сейчас посмотрю.
Посмотрел.
Суммы eclean абсолютно не учитывает, только имена файлов.
____________________________________________
Всё что не убивает меня, делает меня сильнее.
удаляй все...
удаляй все...
Я б удалил,
Я б удалил, только как-то трафик у меня не особо бесплатный.
____________________________________________
Всё что не убивает меня, делает меня сильнее.
вообще то
вообще то всегда учитывало =(
*кажется
Нет. Как
Нет.
Как проверял: Удалил 100% нормальный файл. Вместо него с таким же именем записал абсолютно левый файл.
Пустил eclean - он говорит - "все тип-топ". Вот подлец.
____________________________________________
Всё что не убивает меня, делает меня сильнее.
А стоит ли это
А стоит ли это делать?
Если вдруг возникнет необходимость в установке пакета, которому соответствует битый файл, portage проверит сумму, и при несовпадении - битый переименует, а вместо него закачает правильный.
А место-то
А место-то занимает! (-:Е
А если попробовать
emerge --pretend --fetchonly --deep world
? Или без--pretend
, но с отключённой сетью? И про--skipfirst
не забывать... Ну и вообще в этом направлении подумать (-:ЕПожалуйста, не описывайте своё железо в подписи
Тут вопрос даже
Тут вопрос даже не в месте, а в том что я яввляюсь активным пользователем дэльтапа. И в связи с данной ситууацией вместо экономии траффика вылазит его нецелесообразный расход, бо, как вы уже догадались, дэльтап суммы файлов тоже не проверяет.
____________________________________________
Всё что не убивает меня, делает меня сильнее.
.
в файлах /usr/portage/xxx-yyy/zzz/Manifest лежат, в частности, SHA256
команда sha256sum /usr/portage/distfiles/* считает SHA256.
я бы собрал
в 1й файл - результат её работы,
в 2й файл - tar всех манифестов,
потом sed над 2м файлом, чтобы файлы стали однотипны,
а потом тупо diff, а лучше - colordiff :-)
Над этим
Над этим вариантом я уже раздумывал, просто думал, что есть путь проще.
Похоже придется писать скрипт.
____________________________________________
Всё что не убивает меня, делает меня сильнее.
Я бы переместил
Я бы переместил содержимое distfiles в другую директорию и добавил бы её с префиксом local в /etc/portage/mirrors, после чего emerge -eDNF world
Совет
Совет негодится, так как после краха винта система переставлялась наново и соответственно все пакеты мира нормальные. Интересует проверка целостности пакетов, которые будут ставиться в будущем и которые будут обрабатываться дэльтапом.
____________________________________________
Всё что не убивает меня, делает меня сильнее.
Можно брать
Можно брать список файлов из distfiles, вытаскивать из них имя пакета соответствующего, и скармливать его на вход emerge --pretend (-:E
Пожалуйста, не описывайте своё железо в подписи
Жесть. Это и
Жесть. Это и будет смыслом всей моей оставшейся жизни. Главное раньше не скончаться.
____________________________________________
Всё что не убивает меня, делает меня сильнее.
Э-э-э...
Э-э-э... Небольшой сценарий (скорее даже строка) на bash?
Пожалуйста, не описывайте своё железо в подписи
А есть утилита,
А есть утилита, которая по названию файла сырцов определяет, какому пакету она принадлежит?
____________________________________________
Всё что не убивает меня, делает меня сильнее.
Думаю, что нет.
Если бы даже была, принцип её работы должен быть основан на переборе всего дерва портежей, но его невозможно перебрать всё, т.к. не все пакеты можно поставить. Но если внимательно приглядитесь к содержимому distfiles... Я бы сделал
1. сначала то, что написал выше. это уже большая часть правильных файлов
2. простой скрипт, удаляющий из mirror файлы, попавшие в distfiles
3. скрипт, перебирающий содержимое оставшегося mirrors - файлы *.tar.{bz2,gz}
это же тривиально, на примере одного файла:
basename zziplib-0.13.45.tar.bz2 .tar.bz2
выводится основная часть атома с версией (zziplib-0.13.45)
emerge -F --nodeps "=$(basename zziplib-0.13.45.tar.bz2 .tar.bz2)"
файл перемещается из mirrors в distfiles
Но есть пакеты с заглавными буквами. Вот и весь скрипт:
cd /usr/local/mymirror
for tarball in *.tar.bz2
do
src=$(basename $tarball .tar.bz2 | tr [[:upper:]] [[:lower:]])
emerge -F --nodeps "=$src"
done
И точно так же с *.tar.gz. Добавьте сразу код, удаляющий исходник из mirrors в случае успеха. Останется совсем немного файлов, типа times32.exe или *.patch, с которыми надо думать что делать. Примерно так...
UPD: emerge --nospinner -pqF "=$src" можно ещё глянуть. Это выведет список URI, который легко отпарсить одной командой. Тогда файлы просто перемещать не 1 на пакет, а все файлы, которые к нему относятся.
Но одну вещь мы всё равно учесть не можем. Если дерево портежей сильно обновилось, в нём может не оказаться ебилда конкретной версии. Ошибки придётся обрабатывать. Как вариант, добавить к тому выражению в цикле - | sed -r 's/\-[0-9\.]+$//' - это позволит убрать версию из атома.
Quote: А есть
Э-э-э... Тут я маху дал, мне что-то показалось, что у них есть своя схема именования, как в ArchLinux, к примеру. Сглупил (-%Е
Пожалуйста, не описывайте своё железо в подписи
есть
есть нормальный (более-менее)вариант - поставь себе http-replicator, и запусти repcasheman. оно переместить все пакеты которые содержатся в текущем дереве в /var/cahe/http-replicator и попросит удалить всё что в дистфайлах так как то что там осталось после его работы - мусор. но те пакеты что отсутствуют в дереве идут лесом
Народ, а не
Народ, а не проще ли все файлы-архивы прогнать через tar?
Можно даже пробовать распаковать (правда это потребует места... но для теста, я думаю можно выделить)
На битый файл будет ругань типа:
на целые соответственно ругани не будет.
Файлы не-архивы, думаю можно проверить и руками.
А если про ebuild
А если про ebuild вспомнить, кстати? ebuild **** digest как раз вроде ебилды проверяет, может, там чего-нибудь накопать можно?
Пожалуйста, не описывайте своё железо в подписи
эта команда
эта команда делает дайджест по тому файлу что есть на диске