Ubuntu, Fedora で GNU Octave(バージョン 11.3.0)のソースコードからのビルドとインストールとテスト実行

概要

Octave とは,MATLAB に互換の数値解析ソフトウェアである.このページでは,Octave のソースコードをダウンロードし,Ubuntu や Fedora 上でビルドしてインストールする手順を説明する.

ソースコードからビルドする主な理由は,Octave に OpenBLAS(最適化された BLAS 実装)や Intel oneAPI Math Kernel Library(インテル・マス・カーネル・ライブラリ)を組み込みたい場合,あるいは最新版をいち早く使いたい場合である.こうした場合に,このページの手順が参考になる.

* Octave をディストリビューションのパッケージ(apt や dnf)でインストールしたい(ソースコードからビルドしない)場合は,別の Web ページを見てほしい.

* liboctave の使い方については,別のページで説明している.liboctave を使うと,Octave の行列関係の機能を呼び出す C++ のプログラムを作ることができる.

* 関連 Web ページ: Octave の活用

目次

関連する外部ページ

サイト内の関連情報

Ubuntu で Octave のソースコードからのインストールを行うシェルスクリプト

一括で実行できるようにシェルスクリプトを用意した.1つ1つコマンドを入力したい(シェルスクリプトにしたくない)場合は,このページの下で説明している.このスクリプトでは,Octave バージョン 11.3.0 をソースコードからビルドしてインストールする.前提ソフトウェア(ビルドツールと外部ライブラリ)のインストールも行う.

* 前準備

Intel oneAPI Math Kernel Library を使う場合は,環境設定スクリプトを読み込んでおく(インストール先が /opt/intel/oneapi の場合の例).

source /opt/intel/oneapi/setvars.sh

* シェルスクリプト

#!/bin/bash

# ビルドツールと外部ライブラリのインストール
sudo apt-get -y update
sudo apt-get -y install build-essential gfortran make
sudo apt-get -y build-dep octave

# 参照 BLAS/LAPACK の代わりに OpenBLAS を使う場合は次を導入する
sudo apt-get -y install libopenblas-dev liblapack-dev

# Octave のソースコードのダウンロード
cd /tmp
if [ ! -f octave-11.3.0.tar.gz ]; then
    wget https://ftp.gnu.org/gnu/octave/octave-11.3.0.tar.gz
fi

rm -rf octave-11.3.0
tar -xvzof octave-11.3.0.tar.gz
cd octave-11.3.0

# configure(OpenBLAS を BLAS/LAPACK として使う)
./configure --prefix=/usr/local --with-blas=openblas --with-lapack=openblas

# ビルド,チェック,インストール
make -j4
make check
sudo make install

Ubuntu で,コマンドを手入力して,Octave のソースコードからのインストールを行う

前もって決めておく事項

1. 前提となるソフトウェアのインストール

Ubuntu の場合の操作手順例

  1. アップデート操作
    sudo apt-get -yV update
    sudo apt-get -yV upgrade
  2. Octave のビルドで用いるビルドツールと前提ソフトウェアのインストール

    Octave 公式ドキュメントでは,ビルド依存の大部分を apt-get build-dep octave でまとめて導入できると案内している(開発版パッケージ名は末尾が -dev のもの).

    # ビルドツール
    sudo apt-get -y install build-essential gfortran make bison flex autoconf automake libtool gperf
    
    # Octave のビルド依存をまとめて導入
    sudo apt-get -y build-dep octave
    
    # 外部ライブラリ(開発版パッケージ)を個別に導入する場合
    sudo apt-get -y install libopenblas-dev liblapack-dev
    sudo apt-get -y install libpcre2-dev libreadline-dev
    sudo apt-get -y install libfftw3-dev
    sudo apt-get -y install libgraphicsmagick++1-dev
    sudo apt-get -y install libcurl4-openssl-dev
    sudo apt-get -y install libhdf5-dev
    sudo apt-get -y install libqhull-r-dev
    sudo apt-get -y install libglpk-dev
    sudo apt-get -y install libgsl-dev
    sudo apt-get -y install libarpack2-dev
    sudo apt-get -y install libqrupdate-dev
    sudo apt-get -y install libsuitesparse-dev
    sudo apt-get -y install libsundials-dev
    sudo apt-get -y install libgl2ps-dev
    sudo apt-get -y install gnuplot

Fedora の場合の実行例

  1. パッケージの更新

    インストール前に更新可能な全パッケージを更新しておくとトラブルが減る.

    sudo dnf -y check-update
    sudo dnf -y update
  2. ビルドツールと必須ソフトウェアのインストール

    Octave 公式ドキュメントでは,Fedora や Red Hat 系で yum-builddep octavednf builddep octave)を使ってビルド依存をまとめて導入できると案内している.

    # ビルド依存をまとめて導入する(yum-utils / dnf-plugins-core が必要)
    sudo dnf -y install dnf-plugins-core
    sudo dnf -y builddep octave
    
    # 個別に導入する場合の例
    sudo dnf -y install gcc gcc-c++ gcc-gfortran make bison flex
    sudo dnf -y install openblas-devel lapack-devel
    sudo dnf -y install readline-devel pcre2-devel
    sudo dnf -y install fftw-devel gsl-devel
    sudo dnf -y install GraphicsMagick-c++-devel
    sudo dnf -y install libcurl-devel hdf5-devel
    sudo dnf -y install qhull-devel glpk-devel
    sudo dnf -y install arpack-devel qrupdate-devel
    sudo dnf -y install suitesparse-devel sundials-devel
    sudo dnf -y install gl2ps-devel gnuplot

2. Octave のソースコードのダウンロード

ここで行うことは,Octave のソースコードをダウンロードすることである.

  1. https://octave.org/download を開く
  2. ソースコード配布ページ https://ftp.gnu.org/gnu/octave/ を開く
  3. octave-11.3.0.tar.gz」をクリックしてダウンロードする
  4. ダウンロードしたファイルを /tmp に移す

    コマンドで取得する場合は次のようにする.

    cd /tmp
    wget https://ftp.gnu.org/gnu/octave/octave-11.3.0.tar.gz

3. Octave のビルドとインストールの手順

  1. ダウンロードした octave-11.3.0.tar.gz を展開する
    cd /tmp
    rm -rf octave-11.3.0
    tar -xvzof octave-11.3.0.tar.gz
  2. ソースコードのディレクトリへ移動する
    cd octave-11.3.0
  3. configure の実行

    configure は,システムの機能を調べて Makefile を生成する.BLAS/LAPACK は --with-blas--with-lapack で指定できる(指定しない場合は configure が自動で最適なものを探す).インストール先は --prefix で指定する(既定値は /usr/local).

    * OpenBLAS を使いたい場合

    • Octave 11.3.0
    • OpenBLAS(BLAS/LAPACK の最適化実装)
    • GNU コンパイラ

    コンソールで次の操作を行う.

    ./configure --prefix=/usr/local --with-blas=openblas --with-lapack=openblas

    * 参照実装の BLAS/LAPACK を使いたい場合

    システムに導入した参照実装の BLAS/LAPACK を使う場合は,次のようにする.

    ./configure --prefix=/usr/local --with-blas=blas --with-lapack=lapack

    * Intel oneAPI MKL を使いたい場合

    環境設定スクリプト(インストール先が /opt/intel/oneapi の場合は setvars.sh)を読み込んだうえで,MKL の BLAS/LAPACK を指定する.

    source /opt/intel/oneapi/setvars.sh
    ./configure --prefix=/usr/local --with-blas=mkl_rt --with-lapack=mkl_rt
  4. configure の結果の確認

    * エラーメッセージが出ていないことを確認する

  5. make の実行

    Octave のビルドには GNU Make が必要である(他の make では動作しない).並列ビルドする場合は -j オプションで並列数を指定する.

    make -j4

    * デバッグ用シンボルを付けずにビルドしてディスク使用量を減らしたい場合は次のようにする.

    make CFLAGS=-O CXXFLAGS=-O LDFLAGS= -j4
  6. make の結果の確認

    * エラーメッセージが出ていないことを確認する

  7. make check の実行
    make check
  8. make check の結果の確認

    * テストの失敗件数が想定内であることを確認する

  9. sudo make install の実行
    sudo make install
  10. make install の結果の確認

    * エラーメッセージが出ていないことを確認する.インストール後,octave コマンドで起動できることを確認する.

Octave パッケージのインストール

かつての Octave-Forge パッケージリポジトリは,現在はもう保守されていない.公式には,パッケージ一覧は https://packages.octave.org/ で提供されている.Octave の pkg コマンドを使って,このリポジトリからパッケージ名を指定してインストールできる.

  1. パッケージのインストール

    octave を起動し,pkg install でインストールする.公式リポジトリからインストールする場合は -forge オプションを付ける(例として image パッケージをインストールする).

    pkg install -forge image
  2. インストール済みパッケージの確認
    pkg list
  3. パッケージの読み込み

    インストールしたパッケージは,使う前に pkg load で読み込む.

    pkg load image
  4. パッケージの更新

    インストール済みパッケージを最新版に更新するには次のようにする.

    pkg update
  5. テスト実行

    ためしに,image パッケージを読み込み,Octave に付属のサンプル画像を読み込んで表示してみる.

    pkg load image
    img = imread("default.img");
    imshow(img);