4 июня 2013 г.

Gems и другие пакетные менеджеры

Только недавно столкнулся и попробовал использовать rubygems. Ранее все устанавливал через portage. Но частенько стали попадаться статьи, в которых пишут нечто вроде следующего:

gem install git-up
gem install bundle

Это добро у меня вызывало, некоторое недоумение (что еще за левые пакетные менеджеры???) и я бежал искать аналоги в portage. Частенько этого не находилось даже в различных overlay'ях. И вот в один из таких моментов, решив сэкономить время на поиск ebuild'ов, я все-таки выполнил указанную команду. И получил необходимое приложение в ~/.gem/ruby/1.9.1/bin.

Но тут пользователи gentoo столкнуться с некоторым затруднением. Этот дистрибутив не очень дружелюбен для ruby. То, что установится, не будет доступно в PATH. В других используемых мной системах аналогичной проблемы замечено не было. В OS X и Windows (Cygwin) PATH сам без дополнительных движений обновляется.

На bugs.gentoo.org нашел следующее универсальное решение. Создаем в папке /etc/profile файл следующего содержания:

if [[ -L "/usr/bin/ruby" ]]; then
    RUBY=$(readlink /usr/bin/ruby 2> /dev/null)

    case "${RUBY}" in
        *18) VERSION="1.8" ;;
        *19) VERSION="1.9.1" ;;
          *) VERSION="${RUBY##*/}" ;;
    esac

    export PATH="${HOME}/.gem/ruby/${VERSION}/bin:${PATH}"
fi

После этого все будет доступно как надо.

Похоже использовать gem намного удобнее, чем стандартный пакетный менеджер. Тем более на своей локальной машине с фактически одним пользователем (root не считается). Конечно можно добавлять себе постоянно новые overlay и писать новые ebuild. Но как показала моя практика это занимает существенно больше времени. Да и кроме того написание однотипных ebuild не особо интересное занятие. Генератора нету случаем? Не знаю как дело обстоит в других дистрибутивах, но думаю как-то также.

Еще в последнее время натолкнулся на pip для python и npm для node.js. Идея общественных хранилищ для программ, написанных на определенном языке как никак популярна сейчас. И это реально удобно.

Комментариев нет: