ruby27 gem-tool versionen und default

Wenn man nach Upgrade 2021Q1 für ruby27 gems installiert, erhält man eine deprecation warning vom gem tool. (Auch in den portbuilds erscheint diese warning.)

Hintergrund:

Bis ruby 1.x war das gem tool eine separat zu installierende Software, die natürlich selber kein gem ist (Henne-Ei), sondern sich als library nach site_ruby installiert. site_ruby gibt es für jede installierte ruby version, man kann also prinzipiell für jede eine eigene gem Software installieren. Der pkg installer sieht das aber nicht vor, sondern installiert diese, wie auch alle folgenden gems, nur in die aktuelle default ruby version.

Seit ruby 2.x ist das gem tool bereits im ruby package als basis-library enthalten, es bräuchte also eigentlich nicht mehr extra installiert zu werden. Jedoch wird auf FreeBSD das gem executable vom gem package geliefert, und auch weitere aus dem ports-tree zu installierende gems fordern dies als prereq. Ruby selbst wiederum bevorzugt eine in site_ruby installierte Library über die im Lieferumfang bereits enthaltene, auch wenn erstere älter ist.
Damit bekommen wir folgendes Verhalten: die gegenwärtige default ruby version verwendet das gem tool aus der separaten package, alle anderen installierten Versionen verwenden das jeweils im ruby selbst enthaltene gem tool.

Mit 2021Q1 ist nun ruby27 die default version geworden, und ruby27 enthält standardmäßig gem 3.1.4. Das gem package ist jedoch 3.0.8, und das ist deprecated für ruby27.

Keine Lösungen:

Das übliche Vorgehen ist, daß man mit gem update --system die gem tools aktualisiert. Das überschreibt aber die Installation in /usr/local, d.h. die checksums von pkg stimmen dann nicht mehr. (Außerdem wird ein bundler in die gems in /usr/local installiert.)

Versucht man stattdessen, den port devel/ruby-gems hochzupatchen, geht das nicht so einfach, weil der auch bundler mit installieren will, und das irgendwie in Fehler läuft. (Die bundler Abhängigkeit war auch in 3.0.8 schon vorhanden, ließ sich aber im Makefile mit einer env Option abschalten - das geht später nicht mehr.) Wieso es den bundler hier braucht, und wieso dagegen das standardmäßige ruby27 mit gem aber ohne bundler ankommt, bleibt erstmal unklar.

Lösung:

Den devel/ruby-gems port entfernen. Das würde erfordern, dass man alle ruby versionen dahingehend erweitert, dass sie ein gem executable installieren, und alle rubygem ports dahingehend, dass sie nicht mehr von ruby-gems abhängig sind. Die einfachere Variante ist, alle Dateien aus dem ruby-gems port entfernen bis auf das gem executable.