Fedora 31 に scilab をインストール
Scilab からバイナリ(scilab-6.0.2.bin.linux-x86_64.tar.gz)をダウンロード、展開して、“bin/scilab” を起動すると、次のような selinux 回りの警告がでる。動作はするが、なかなかうざい。
/usr/bin/chcon: '/usr/local/scilab-6.0.2/bin/scilab-bin' のコンテキストを `unconfined_u:object_r:execmem_exec_t:s0' に変更できません: 許可されていない操作です Error: Cannot chcon 'scilab-bin' /usr/bin/chcon: '/usr/local/scilab-6.0.2/bin/scilab-cli-bin' のコンテキストを `unconfined_u:object_r:execmem_exec_t:s0' に変更できません: 許可されていない操作です Error: Cannot chcon 'scilab-cli-bin'
Fedora 31 には scilab のパッケージが一応あるので、
sudo dnf install scilab
でインストールしようとすると、
エラー: 問題: conflicting requests - nothing provides jeuclid needed by scilab-6.0.2-2.fc31.x86_64 - nothing provides jrosetta needed by scilab-6.0.2-2.fc31.x86_64 (try to add '--skip-broken' to skip uninstallable packages)
が表示され、jeuclid と jrosetta が Fedora 31 のレポジトリにないために、インストールに失敗する。rpmfind.net で jeuclid と jrosetta を検索し、パッケージをダウンロードしてインストールする。足りないパッケージがあると表示されるので、その都度、入れていく。
sudo rpm -ivh jeuclid-3.1.3-23.fc26.noarch.rpm sudo rpm -ivh jrosetta-1.0.4-14.fc26.noarch.rpm
しかるのちに scilab をインストール。
sudo dnf install scilab
コンソールからscilabを起動すると、次のエラーメッセージがでる。
警告: Javaパッケージ '/usr/share/java/lucene/lucene-core.jar' が見つかりません。 警告: Javaパッケージ '/usr/share/java/lucene/lucene-core.jar' が見つかりません。 警告: Javaパッケージ '/usr/share/java/lucene/lucene-queryparser.jar' が見つかりません。 警告: Javaパッケージ '/usr/share/java/saxon/saxon.jar' が見つかりません。 警告: Javaパッケージ '/usr/share/java/ecj.jar' が見つかりません。 Javaライブラリのロードでいくつかの問題が発生しました。 これは、一貫性がない挙動をするかもしれません。 どうぞ SCI/etc/classpath.xml を確認してください。
足りないパッケージをさらに追加する。
dnf whatprovides /usr/share/java/lucene/lucene-core.jar
で必要なパッケージ名が “lucene-7.7.0-2.fc31.noarch” と分かる。
sudo dnf install lucene lucene-queryparser saxon
ecj.jar は'/usr/share/java/ecj/ecj.jar' にあるので、'/usr/share/scilab/etc/classpath.xml'の該当個所を書き換える。
--- classpath.xml.orig 2020-02-01 01:37:50.491042675 +0900 +++ classpath.xml 2020-02-01 01:38:15.476129522 +0900 @@ -147,7 +147,7 @@ The option is "disableUnderMode" and can <load on="copyAsHTMLinScinotes"/> </path> -<path value="/usr/share/java/ecj.jar" load="onUse"> +<path value="/usr/share/java/ecj/ecj.jar" load="onUse"> <load on="external_objects_java"/> </path>
これで scilab がGUIも含めて動作し、日本語表示もOK。
追記:java-1.8.0-openjdk{,-headless}-1.8.0.242.b08-0.fc31.x86_64 では “Main Scilabクラスにアクセスできませんでした。” とのメッセージが出て、scilab を起動できない。過去のバージョンは
dnf --showduplicates list java-1.8.0-openjdk
でわかる。次のコマンドでダウングレードする。
sudo dnf downgrade java-1.8.0-openjdk{,-headless}-1.8.0.222.b10-1.fc31
これらのパッケージをアップデートの対象から外すには、次のファイルに記述する。
- /etc/dnf/dnf.conf
[main] excludepkgs=java-1.8.0-openjdk*
この設定の下で、強制的にアップデートする場合は、次のコマンド
sudo dnf update --disableexcludes=all
なお、“ldd /usr/bin/scilab-bin” を実行すると、“lib{java,jvm,verify}.so” が not found となっている。これらは次のパスにある。いずれも、“java-1.8.0-openjdk-headless-1.8.0.222.b10-1.fc31” のファイルである。
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.fc31.x86_64/jre/lib/amd64/libjava.so /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.fc31.x86_64/jre/lib/amd64/server/libjvm.so /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.fc31.x86_64/jre/lib/amd64/libverify.so
“1.8.0.222.b10-1” → “1.8.0.242.b08-0” の変更では、“jre/bin/{clhsdb,hsdb}” が消えている。
JDK-8226870 removed clhsdb and hdsdb from the JRE bin directory, so we should do likewise. Add alternatives support for these two new SDK binaries.
JDK-8226870 を検索して見てみたが、あまり関係はなさそう。