[devel] I: Ruby packages 1.7.3-alt7 (IMPORTANT)

Alexander Bokovoy =?iso-8859-1?q?a=2Ebokovoy_=CE=C1_sam-solutions=2Enet?=
Ср Ноя 20 18:59:35 MSK 2002


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.



Подробная информация о списке рассылки Devel