URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 54624
[ Назад ]

Исходное сообщение
"Поддержание актуального архива distfiles"

Отправлено Beda , 20-Мрт-05 05:04 
Потребовалось создать FTP, с архивом distfiles - но немогу понять, как правильно это делать...
На ум пришло несколько решений, но времени уйдет жутко много, если их все тестировать - может кто подсказать, в каком направлении двигатся?

1. 'make checksum' - в каждой директории

это решение самое медленное - я столкнулся с невозможностью автоматизировать процес, т.к. некоторые ports запускают диалоги (как samba) или выдается предупреждение, что требуется заход на сайт (как xmill)

2. 'make fetch' или 'make fetch-recursive'

самое неудачное решение (лично для меня) - медлено... т.к. пробует для выкачивания весь списк доступных ftp

Скачать например папку distfiles с ftp.freebsd.org - недостаточно (там к сожалению не все), хочется реализовать такой проект - обновляемся по cvsup ports, дальше обновляем distfiles, файлы архивов которые устарели или убраны из ports переместить в архив (кстати, тут забавный момент с портами, которые отмечены как "marked as broken" - что с ними делать?)


Содержание

Сообщения в этом обсуждении
"Поддержание актуального архива distfiles"
Отправлено AMDmi3 , 21-Мрт-05 01:09 
То есть нужно все-все дистфайлы выкачать?
Вообще, можно cd /usr/ports && make fetch (или cd /usr/ports/CATEGORY && make fetch) - скачается все или вся категория.

Тебе, видимо, нужно большего, поэтому пиши свой скрипт, который строит базу данных по /usr/ports/*/*/distinfo, и, после cvsup, проверяет, какие файлы присутствуют в старой базе данных и при этом отсутствуют в новой - их следует переместить в архив. Заодно для всего проверяет MD5. Так как cvsup пишет, какие файлы изменились, можно сэкономить время и пропускать не изменившиеся порты. Своим скриптом также можно качать несколько дистфайлов одновременно, чтобы канал не простаивал. Можно пойти дальше, и вообще отказать от make fetch, ftp искать перебором всех (или части) ссылок из ports/Mk/bsd.sites.mk, можно также воспользоваться ftpsearch.ru или чем-то подобным.


"Поддержание актуального архива distfiles"
Отправлено Beda , 21-Мрт-05 02:42 
>То есть нужно все-все дистфайлы выкачать?

да, хотелось бы... идея состоит в том, чтобы обновив по cvsup /usr/ports -  оставить в distfiles файлы только для текущего состояния... а предыдущие версии и все остальное, перенести в архив или на болванки.

>Тебе, видимо, нужно большего, поэтому пиши свой скрипт, который строит базу данных
>по /usr/ports/*/*/distinfo, и, после cvsup, проверяет, какие файлы присутствуют в старой

...тут я столкнулся с такой проблемой, некоторые порты не имеют distinfo, но имеют Makefile - что делать с такой ситуацией?

>базе данных и при этом отсутствуют в новой - их следует
>переместить в архив. Заодно для всего проверяет MD5.

...тут столкнулся с отсутствием MD5... точнее с отсутсвием хеша, в файле distinfo попадаются записи: MD5 (platon.tar.gz) = IGNORE
это значит что? что архив, даже если и изменился внутри - не изменил название?

>Можно пойти дальше, и вообще отказать от make fetch,
>ftp искать перебором всех (или части) ссылок из ports/Mk/bsd.sites.mk

...но даже в этом случае, будут недоступны архивы, лежащие на сайтах и требующие подтверждения с лицензией...
что можно придумать для этой проблемы?

А вообще-то странная ситуация... что во фре нет уже готового решения для создания такого хранилища архивов.
Например для создания зеркала официального веб-сайта есть настройки и решения, а для distfiles - нет... скорее всего из-за различия в политике лицензирования, но раз внесли в официальное дерево портов - то можно и облегчить доступ к архивам... и поддержания актуального состояния.


"Поддержание актуального архива distfiles"
Отправлено AMDmi3 , 21-Мрт-05 22:03 
>>То есть нужно все-все дистфайлы выкачать?
>
>да, хотелось бы... идея состоит в том, чтобы обновив по cvsup /usr/ports
>-  оставить в distfiles файлы только для текущего состояния... а
>предыдущие версии и все остальное, перенести в архив или на болванки.
А нахрен тебе вообще старые версии? Еще и на болванки писать... В помойку их!

>>Тебе, видимо, нужно большего, поэтому пиши свой скрипт, который строит базу данных
>>по /usr/ports/*/*/distinfo, и, после cvsup, проверяет, какие файлы присутствуют в старой
>...тут я столкнулся с такой проблемой, некоторые порты не имеют distinfo, но
>имеют Makefile - что делать с такой ситуацией?
Забить на них, так как это либо порты, которые ничего не делают, кроме того, что зависят от других портов (как x11/xorg), либо порты, являющиеся ссылками на другие порты с определением некоторых опций (как net/tethereal для net/ethereal). Если делать make fetch для всего, нужные дистфайлы в любом случае скачаются.

>>базе данных и при этом отсутствуют в новой - их следует
>>переместить в архив. Заодно для всего проверяет MD5.
>...тут столкнулся с отсутствием MD5... точнее с отсутсвием хеша, в файле distinfo
>попадаются записи: MD5 (platon.tar.gz) = IGNORE
>это значит что? что архив, даже если и изменился внутри - не
>изменил название?
Либо перекачивать их каждый раз и MD5 считать, либо один раз скачать и успокоиться, либо вообще не качать - на выбор.

>>Можно пойти дальше, и вообще отказать от make fetch,
>>ftp искать перебором всех (или части) ссылок из ports/Mk/bsd.sites.mk
>...но даже в этом случае, будут недоступны архивы, лежащие на сайтах и
>требующие подтверждения с лицензией...
>что можно придумать для этой проблемы?
ftpsearch.ru, например, такие файлы обычно находит (я находил, например, для net/socks5; хотя в distinfo не указан размер, пришлось сначала посмотреть каких размеров бывает файл с именем socks5-v1.0r11.tar.gz, потом скачать по экземпляру каждого размера и, наконец, найти нужный по MD5). Иначе никак. Разве что руками.

> А вообще-то странная ситуация... что во фре нет уже готового решения
>для создания такого хранилища архивов.
> Например для создания зеркала официального веб-сайта есть настройки и решения, а
>для distfiles - нет... скорее всего из-за различия в политике лицензирования,
>но раз внесли в официальное дерево портов - то можно и
>облегчить доступ к архивам... и поддержания актуального состояния.
Самое грамотное и умное решение - не заниматься фигней и просто поддерживать актуальную копию ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/. В упор не могу представить, чего тебе там не хватает. Ну, кроме портов с кривыми лицензиями, о них я написал выше. Я более чем уверен, что архив старья тебе не нужен совершенно, а ту горстку портов, которые не скачаются автоматом, можно будет стянуть и руками, если понадобятся.


"Поддержание актуального архива distfiles"
Отправлено butcher , 21-Мрт-05 09:40 
Советую посмотреть пакет утилит sysutils/portupgrade
С ней в составе идёт утилита portsclean, поможет удалить лишние distfiles'ы.

>2. 'make fetch' или 'make fetch-recursive'
>
>самое неудачное решение (лично для меня) - медлено... т.к. пробует для выкачивания
>весь списк доступных ftp
Ну почему же.. Вначале идёт проверка, есть ли требуемый дистриб на локальном диске, а затем уже идёт скачиваение (если необходимо).

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


"Поддержание актуального архива distfiles"
Отправлено Beda , 21-Мрт-05 10:48 
>Советую посмотреть пакет утилит sysutils/portupgrade
>С ней в составе идёт утилита portsclean, поможет удалить лишние distfiles'ы.

как я понял - portsclean удаляет "лишние"... исходя из того, какие порты установлены у меня :) а мне нужны все порты.


"Поддержание актуального архива distfiles"
Отправлено butcher , 21-Мрт-05 11:10 
>>Советую посмотреть пакет утилит sysutils/portupgrade
>>С ней в составе идёт утилита portsclean, поможет удалить лишние distfiles'ы.
>
>как я понял - portsclean удаляет "лишние"... исходя из того, какие порты
>установлены у меня :) а мне нужны все порты.

Нет, он следит за тем, какие дистфайлы устарели и не используются ниодним портом. Я у себя переодически запускаю portsclean -D, чтобы удалить старые.


"Поддержание актуального архива distfiles"
Отправлено newser , 21-Мрт-05 11:38 
>>>Советую посмотреть пакет утилит sysutils/portupgrade
>>>С ней в составе идёт утилита portsclean, поможет удалить лишние distfiles'ы.
>>
>>как я понял - portsclean удаляет "лишние"... исходя из того, какие порты
>>установлены у меня :) а мне нужны все порты.
>
>Нет, он следит за тем, какие дистфайлы устарели и не используются ниодним
>портом. Я у себя переодически запускаю portsclean -D, чтобы удалить старые.
>

Непосредственно в портах есть скрипт ($PORTSDIR/Tools/scripts/distclean.sh), выполняющий те же самые задачи.


"Поддержание актуального архива distfiles"
Отправлено butcher , 21-Мрт-05 11:46 
>Непосредственно в портах есть скрипт ($PORTSDIR/Tools/scripts/distclean.sh), выполняющий те же самые задачи.

Я в курсе, просто пользуюсь portupgrade, да и набрать
# portsclean -D
для меня проще, чем полный путь к этому скрипту ;))


"Поддержание актуального архива distfiles"
Отправлено newser , 21-Мрт-05 12:44 
>>Непосредственно в портах есть скрипт ($PORTSDIR/Tools/scripts/distclean.sh), выполняющий те же самые задачи.
>
>Я в курсе, просто пользуюсь portupgrade, да и набрать
># portsclean -D
>для меня проще, чем полный путь к этому скрипту ;))

alias в помощь! :)


"Поддержание актуального архива distfiles"
Отправлено Beda , 21-Мрт-05 13:12 
>>как я понял - portsclean удаляет "лишние"... исходя из того, какие порты
>>установлены у меня :) а мне нужны все порты.
>
>Нет, он следит за тем, какие дистфайлы устарели и не используются ниодним
>портом. Я у себя переодически запускаю portsclean -D, чтобы удалить старые.
>

...хм, я правильно понял? что 'portsclean -D' все равно, установлен порт у меня на машине, или нет ??

будет интересно узнать, а есть опция переноса, а не удаления архива? или как вариант - каким либо способом пометить архив (например изменить дату или владельца... и т.д.)?

и к сожалению - это только часть решения проблемы... более актуально - получение архивов в автоматическом режиме, особенно тех, что требуют регистрации на сайтах разработчиков.


"Поддержание актуального архива distfiles"
Отправлено butcher , 21-Мрт-05 13:17 
>...хм, я правильно понял? что 'portsclean -D' все равно, установлен порт у
>меня на машине, или нет ??
Да.

>будет интересно узнать, а есть опция переноса, а не удаления архива? или
>как вариант - каким либо способом пометить архив (например изменить дату
>или владельца... и т.д.)?

Установите наконец пакет portupgrade и почитайте мануалы
Пример, запускаем:
# portsclean -Dn
Получаем список файлов, который нужно удалить. Пишется скрипт, который перенесёт старый файлы в другой каталог, две минуты на это нужно..

>и к сожалению - это только часть решения проблемы... более актуально -
>получение архивов в автоматическом режиме, особенно тех, что требуют регистрации на
>сайтах разработчиков.

Всё автоматизировать точно не получится.


"Поддержание актуального архива distfiles"
Отправлено Beda , 21-Мрт-05 13:41 
>Установите наконец пакет portupgrade и почитайте мануалы

Ок, сегодня посмотрю... до просветления :)

>Всё автоматизировать точно не получится.

жаль...

что будет более правильно при написании своего скрипта - обход дерева портов через поиск distinfo или Makefile? или генерировать INDEX - и использовать его?