From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 20 Nov 2002 17:59:35 +0200 From: Alexander Bokovoy To: devel@altlinux.ru, sisyphus@altlinux.ru, ruby@altlinux.ru Message-ID: <20021120155935.GG1370@sam-solutions.net> Mail-Followup-To: devel@altlinux.ru, sisyphus@altlinux.ru, ruby@altlinux.ru Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit Subject: [sisyphus] I: Ruby packages 1.7.3-alt7 (IMPORTANT) Sender: sisyphus-admin@altlinux.ru Errors-To: sisyphus-admin@altlinux.ru X-BeenThere: sisyphus@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: sisyphus@altlinux.ru List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: Greetings! В ALT Linux Sisyphus отправилась новая сборка пакетов Ruby. На сей раз с существенными изменениями в инфраструктуре, о которых ниже. Изменения: 1. Snapshot от 2002-11-18 с рядом серьезных исправлений (см. ChangeLog пакета ruby) 2. Структурные изменения путей поиска модулей теперь позволяют этой сборке Ruby считаться полностью соответствующей File Hierarchy Standard. Дело в том, что в обычном Ruby предполагается следующая структура каталогов для модулей: /usr/lib/ruby/{версия}/ -- зависящие от версии модули на Ruby /usr/lib/ruby/{версия}/{архитектура} -- бинарные модули для этой версии /usr/lib/ruby/site_ruby/{,версия} -- локальные модули (общие для всех версий и зависящие от конкретной версии) /usr/lib/ruby/site_ruby/{версия}/{архитектура} -- бинарные локальные модули для этой версии Такая схема нарушает FHS в двух вещах: 1. Все, независящее от архитектуры, должно быть расположено в /usr/share 2. Специфические для конкретной машины компоненты должны находится в /usr/local. Кроме того, эта схема не позволяет четко разделить локальные добавления от поставляемых тем или иным производителем дистрибутива решений. В результате получается мешанина файлов, осложняющая обновление пакетов. Новая сборка Ruby (1.7.3-alt7) исправляет эти недостатки следующим образом: 1. Все архитектурно-независимые компоненты Ruby размещаются теперь в /usr/share/ruby, все архитектурно-зависимые -- в /usr/lib/ruby 2. Все локальные добавления будут производится в /usr/local/{lib,share}/ruby 3. Все поставляемые в рамках дистрибутива модули будут размещаться в специфичных для производителя дистрибутива поддеревьях /usr/{lib,share}/ruby/vendor_ruby/, по аналогии с новым Perl 5.8 4. Порядок поиска в обозначенных директориях таков: /usr/local/lib/ruby/{версия}/{архитектура} /usr/local/share/ruby/{,версия} /usr/lib/ruby/vendor_ruby/{архитектура} /usr/share/ruby/vendor_ruby/{,версия} /usr/lib/ruby/{версия}/{архитектура} /usr/share/ruby/{,версия} Теперь любые собираемые локально модули Ruby автоматически попадают в /usr/local, если они используют при сборке подсистему mkmf (100% модулей с RAA). Автоматически появляется новая feature: независящая от изменений пакетов в дистрибутиве локальная установка модулей с помощью rpkg: модули не затрагивают системное дерево каталогов Ruby. 3. Для сборки модулей Ruby в RPM-пакеты теперь требуется установка пакета libruby-devel размером 32117 байт, в котором присутствуют специальные макросы RPM в /etc/rpm/macros.d/ruby, автоматически учитывающие возможность установки пакетов в дистрибутиво-зависимые каталоги (/usr/{lib,share}/ruby/vendor_ruby). Сделано это следующим образом: - изменен rbconfig.rb так, что он подменяет sitelibdir/sitearchdir на vendorlibdir/vendorarchdir соответственно при определении константы VENDOR_SPECIFIC в true _до_ require 'mkmf'/'rbconfig' - добавлен /usr/share/ruby/vendor_ruby/{версия}/vendor-specific.rb, содержащий установку этой константы в true Теперь, для того, чтобы модуль установился в дистрибутивно-зависимые каталоги достаточно запустить его конфигурацию с предзагруженным vendor-specific.rb: ruby -rvendor-specific extconf.rb или ruby -rvendor-specific setup.rb setup/install (для setup.rb от Minero Aoki) Это автоматически делается макросами из /etc/rpm/macros.d/ruby Если Ваш код использует значения Config::CONFIG["sitearchdir"] или Config::CONFIG["sitelibdir"] для определения положения своих специфических данных (как сделано в пакете ri) и Вы желаете собрать Ваше приложение в RPM-пакет, то имеет смысл где-то в головной программе до require 'rbconfig' сделать require 'vendor-specific'. Также следует при сборке в RPM обратить внимание на пакет ruby-stdlibs-core, который содержит в себе каталоги в /usr/{lib,share}/ruby. Типичный модуль, не использующий функционал из стандартного набора библиотек Ruby, находящихся в пакете ruby-stdlibs, должен при установке требовать только ruby-stdlibs-core (и, возможно, libruby, если это модуль на C/C++, но эта зависимость вытянется автоматически). В частности, зависимость на ruby-stdlibs-core должна выглядеть так: Requires: ruby-stdlibs-core >= 1.7.3-alt7 и для сборки: BuildRequires: libruby-devel >= 1.7.3-alt7 для того, чтобы все этапы (сборка и установка) были согласованы между собой. 4. Произведен переход от ruby-gnome для версии 1.x GNOME к ruby-gnome2 для GNOME2. Пакеты работоспособны, насколько работоспособны эти модули в CVS проекта Ruby-Gnome2 и, по крайней мере, могут полностью заменить Ruby-Gnome (который из ALT Linux Sisyphus можно теперь полностью убрать). 5. Все зависящие от Ruby пакеты в ALT Linux Sisyphus пересобраны с учетом вышеописанных изменений, так что большая просьба ответственным за них мейнтейнерам обратить внимание на новые версии и синхронизироваться с ними. Существование старых пакетов в новой схеме невозможно, поэтому и потребовалась такая "глобальная" пересборка. Также, прошу обязательно указывать в собираемых Вами пакетах правильные BuildRequires и не допускать их отсутствия. -- / Alexander Bokovoy --- It's not whether you win or lose, it's how you place the blame.