FreeBSD - メンテナンス・トラブルシュート - ruby - ruby32 → ruby33


クラウディア 


1. 概要
2. バージョンの変更
3. アップグレード
4. 再インストール
5. Redmine の対応

1. 概要

 現在、2025年5月11日です。  実機では、「FreeBSD 14.2 RELEASE」を運用しています。  現時点で、「ruby 3.2.8」を使用しております。  バージョンを忘れましたが、「xxd」のバージョンをアップしようとするときに、「ruby 3.3」をインストールしようとしていましたので、この際、「ruby 3.2」を「ruby 3.3」へアップグレードしようと思います。

2. バージョンの変更

 以下、「root」ユーザ権限で。

vi /etc/make.conf

DEFAULT_VERSIONS+=ruby=3.2
 の行を下記へ変更します。  元の行がなければ、まんま、新規追加です。

DEFAULT_VERSIONS+=ruby=3.3

$ portupgrade -f ruby32 -o lang/ruby33
[Reading data from pkg(8) ... - 698 packages found - done]

$ pkg set -o lang/ruby32:lang/ruby33
Change origin from lang/ruby32 to lang/ruby33 for ruby-3.2.8,1? [y/N]:
 最後の行は、y Enter を入力します。

3. アップグレード


cd /usr/ports/lang/ruby33
make config
 いままでの経験で、「DOCS」「RDOCS」のオプションは、はずします。

 アップグレード。
 ここは、依存関係なし、強制アップグレードにします。


portupgrade -f ruby
 これが、「ruby 31」→「ruby 32」のときと同様、途中でこけました。  「make」が通って、インストールの箇所ですな。

https://www.ruby-lang.org/en/
===>  Cleaning for ruby-3.3.8,1
--->  Cleaning out obsolete shared libraries
/usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgtools.rb:487:in '__system': Command failed [exit code 127]: /usr/local/sbin/pkgdb -aFOQ (CommandFailedError)
        from /usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgtools.rb:510:in '__sudo'
        from /usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgtools.rb:516:in 'xsudo'
        from /usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgdb.rb:1062:in 'autofix!'
        from /usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgdb.rb:1058:in 'autofix'
        from /usr/local/sbin/portupgrade:519:in 'block (2 levels) in main'
        from /usr/local/sbin/portupgrade:855:in 'block in main'
        from /usr/local/lib/ruby/3.2/optparse.rb:1153:in 'initialize'
        from /usr/local/sbin/portupgrade:238:in 'new'
        from /usr/local/sbin/portupgrade:238:in 'main'
        from /usr/local/sbin/portupgrade:2380:in '<main>'
 仕方ないです。

cd /usr/ports/lang/ruby33
make
make reinstall
 これで、「ruby」は、アップグレードできました。

4. 再インストール

 本体は、アップグレードできましたが、依存するモジュールで、再インストールが必要です。  ってことで、依存の前の方からインストールやアップグレードを行っていきます。  「ruby-gems」の更新。

pkg delete ruby32-gems
 (しまった、前回もやっちまった、いったん「redmine」は退避しておくべきだった・・・)  で、いったん「ruby31-gems」を削除して再インストール。

cd /usr/ports/devel/ruby-gems
make clean
make
make reinstall
 同じ要領で、「ruby-bdb」

pkg delete ruby32-bdb

cd /usr/ports/databases/ruby-bdb
make clean
make
make reinstall
 「portupgrade」を再インストール。

cd /usr/ports/ports-mgmt/portupgrade
make clean
make
make reinstall
 これで、「portupgrade」が動作するようになりました。

5. Redmine の対応

 安心していたら、1台のマシンでは「apache」がこけておりました。

service apache24 configtest
 すると、こんなエラーに。

Performing sanity check on apache24 configuration:
httpd: Syntax error on line 541 of /usr/local/etc/apache24/httpd.conf: Syntax error on line 6 of /usr/local/etc/apache24/Includes/redmine.conf: Cannot load /usr/local/lib/ruby/gems/3.2.g/gems/passenger/buildout/apache2/mod_passenger.so into server: Cannot open "/usr/local/lib/ruby/gems/3.2.g/gems/passenger/buildout/apache2/mod_passenger.so"
 このマシンでは、「Redmine」をインストールしているので、「rubygem-passenger」を再インストールする必要があったのでした。  さらに「rubygem-passenger」は、「rubygem-etc」を必要としているらしいので・・・。

cd /usr/ports/devel/rubygem-etc
make clean
make
make reinstall

cd /usr/ports/www/rubygem-passenger
make clean
make
make reinstall
 それから、「Redmine」のサイト定義を編集します。

vi /usr/local/etc/apache24/Includes/ファイル名.conf
 下記のように記述している箇所がありますので。「3.2」を「3.3」へ「ruby32」を「ruby33」へと置換します。

LoadModule passenger_module /usr/local/lib/ruby/gems/3.2/gems/passenger/buildout/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/3.2/gems/passenger
PassengerRuby /usr/local/bin/ruby33
 これで、「apache」を再起動したら、正常に動作するようになりました。  ただし、これでは、解決しない。  今更ではありますが。

/usr/local/www/redmine
 を別の名前で退避しておいて。

/usr/ports/www/redmine51
 を再インストールします。  今回は。

/usr/ports/www/redmine60
 が、存在しておりましたので、こちらをインストールします。  退避しておいた「redmine」の。

config/database.yml
 の行を下記へ変更します。

# Default setup is given for MySQL 5.7.7 or later.
# Examples for PostgreSQL, SQLite3 and SQL Server can be found at the end.
# Line indentation must be 2 spaces (no tabs).

production:
  adapter: postgresql
  database: database
  host: localhost
  username: username
  password: "password"
  # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
  encoding: utf8
 この後、最終的には、「www」に所有権を渡すデータをすべて、作業者の所有権にして。  「redmine」のディレクトリへ移動して。  「tcsh」で書きますが。  データベース作成。

setenv RAILS_ENV production
bundle exec rake db:migrate
 デフォルトデータ登録。

setenv RAILS_ENV production
setenv REDMINE_LANG ja
bundle exec rake redmine:load_default_data
 すると、「redmine」のデータが残ったまま、アクセスできるように復活しました。

ハイスピードプラン
マイニングベース
健康サポート特集