Назад | Перейти на главную страницу

Как я могу автоматически устанавливать модули Perl из портов FreeBSD?

Мне нужно автоматизировать установку множества модулей Perl. Большинство из них присутствует в портах. Но некоторые модули находятся в связках, например www/p5-HTML-Tree Prvides HTML::Element, HTML::TreeBuilder, и т.д.

В идеале это должна быть утилита командной строки с синтаксисом, например:

install_from_ports CGI CGI::FormBuilder HTML::TreeBuilder ...

Есть ли у вас какие-либо предложения?

Вот слегка проверенное решение:

#!/bin/sh

# Build a regex to match all the .pm files
_regex=""
for arg in $*; do
    arg=`echo ${arg} | sed -e 's|::|/|g'`
    if [ "X${regex}X" != "XX" ]; then
        regex="${regex}|"
    fi
    regex="${regex}(${arg})"
done
regex="%%SITE_PERL%%/(${regex}).pm"

# Find the .pm files and derive the port names from them, then install using portinstall.
find /usr/ports -type f -name pkg-plist -path '*/p5-*' -exec egrep -l $regex {} + | sort -u | sed -e 's|/usr/ports/||' -e 's|/pkg-plist||' | xargs portinstall

Теперь это не будет обнаруживать модули, установленные портами, у которых нет pkg-plist, но их очень мало. В моей системе только 58 из 4188 портов p5- * не имеют файлов pkg-plist.