gnuplot tab 補完を有効にする

私は,現在CentOS7を使用していますが,gnuplot で Tab 補完をする際の挙動が,CentOS6を使用していた頃のものと変わっており,不便だったのでソースファイルからビルドしてインストールを行った。

調べてみると,ライセンスの関係でreadlineのライブラリがデフォルトで利用できなくなっているのが原因であることが分かった。

実際に読み込まれるライブラリをCentOS6とCentOS7で見てみると(どちらもyumでインストールしたもの)

・CentOS6

$ which gnuplot
/usr/bin/gnuplot
$ ldd /usr/bin/gnuplot
        linux-gate.so.1 =>  (0x00f2e000)
        libreadline.so.6 => /lib/libreadline.so.6 (0x00122000)
        libncurses.so.5 => /lib/libncurses.so.5 (0x008e8000)  
        libz.so.1 => /lib/libz.so.1 (0x0010c000)              
        libgd.so.2 => /usr/lib/libgd.so.2 (0x0015e000)        
        libXpm.so.4 => /usr/lib/libXpm.so.4 (0x042be000)      
        libX11.so.6 => /usr/lib/libX11.so.6 (0x00346000)      
        libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x056f2000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x0066a000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x005cf000)
        libpng12.so.0 => /usr/lib/libpng12.so.0 (0x006a1000)
        libm.so.6 => /lib/libm.so.6 (0x00dd4000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x004e0000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00482000)
        libc.so.6 => /lib/libc.so.6 (0x00c16000)
        libtinfo.so.5 => /lib/libtinfo.so.5 (0x00a6c000)
        libdl.so.2 => /lib/libdl.so.2 (0x00dcd000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00322000)
        libexpat.so.1 => /lib/libexpat.so.1 (0x004b6000)
        /lib/ld-linux.so.2 (0x00bf0000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0x0031d000)

・CentOS7

$ which gnuplot
/usr/bin/gnuplot
$ ldd /usr/bin/gnuplot
        linux-vdso.so.1 =>  (0x00007fff3b96b000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fc31472e000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fc314503000)
        libedit.so.0 => /lib64/libedit.so.0 (0x00007fc3142c6000)
        libz.so.1 => /lib64/libz.so.1 (0x00007fc3140b0000)
        libgd.so.2 => /lib64/libgd.so.2 (0x00007fc313e68000)
        libXpm.so.4 => /lib64/libXpm.so.4 (0x00007fc313c56000)
        libX11.so.6 => /lib64/libX11.so.6 (0x00007fc313918000)
        libjpeg.so.62 => /lib64/libjpeg.so.62 (0x00007fc3136c2000)
        libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007fc313486000)
        libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007fc3131e0000)
        libpng15.so.15 => /lib64/libpng15.so.15 (0x00007fc312fb4000)
        liblua-5.1.so => /lib64/liblua-5.1.so (0x00007fc312d86000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fc312a84000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fc31287f000)
        libpangocairo-1.0.so.0 => /lib64/libpangocairo-1.0.so.0 (0x00007fc312672000)
        libpango-1.0.so.0 => /lib64/libpango-1.0.so.0 (0x00007fc312427000)
        libcairo.so.2 => /lib64/libcairo.so.2 (0x00007fc3120ff000)
        libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007fc311eaf000)
        libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007fc311b78000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc31186f000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc311659000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fc311297000)
        libxcb.so.1 => /lib64/libxcb.so.1 (0x00007fc311074000)
        libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fc310e4a000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc310c2e000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc314973000)
        libpangoft2-1.0.so.0 => /lib64/libpangoft2-1.0.so.0 (0x00007fc310a18000)
        libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007fc310814000)
        libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007fc310612000)
        libharfbuzz.so.0 => /lib64/libharfbuzz.so.0 (0x00007fc3103b8000)
        libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007fc31010b000)
        libEGL.so.1 => /lib64/libEGL.so.1 (0x00007fc30feea000)
        libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007fc30fce5000)
        libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007fc30fadb000)
        libXrender.so.1 => /lib64/libXrender.so.1 (0x00007fc30f8d1000)
        libXext.so.6 => /lib64/libXext.so.6 (0x00007fc30f6be000)
        libGL.so.1 => /lib64/libGL.so.1 (0x00007fc30f427000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fc30f21f000)
        libffi.so.6 => /lib64/libffi.so.6 (0x00007fc30f016000)
        libXau.so.6 => /lib64/libXau.so.6 (0x00007fc30ee12000)
        libgraphite2.so.3 => /lib64/libgraphite2.so.3 (0x00007fc30ebe4000)
        libX11-xcb.so.1 => /lib64/libX11-xcb.so.1 (0x00007fc30e9e2000)
        libxcb-dri2.so.0 => /lib64/libxcb-dri2.so.0 (0x00007fc30e7dd000)
        libxcb-xfixes.so.0 => /lib64/libxcb-xfixes.so.0 (0x00007fc30e5d4000)
        libxcb-shape.so.0 => /lib64/libxcb-shape.so.0 (0x00007fc30e3d0000)
        libgbm.so.1 => /lib64/libgbm.so.1 (0x00007fc30e1c4000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fc30df9e000)
        libdrm.so.2 => /lib64/libdrm.so.2 (0x00007fc30dd91000)
        libglapi.so.0 => /lib64/libglapi.so.0 (0x00007fc30db62000)
        libXdamage.so.1 => /lib64/libXdamage.so.1 (0x00007fc30d95f000)
        libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007fc30d759000)
        libxcb-glx.so.0 => /lib64/libxcb-glx.so.0 (0x00007fc30d53e000)
        libxcb-dri3.so.0 => /lib64/libxcb-dri3.so.0 (0x00007fc30d33b000)
        libxcb-present.so.0 => /lib64/libxcb-present.so.0 (0x00007fc30d138000)
        libxcb-randr.so.0 => /lib64/libxcb-randr.so.0 (0x00007fc30cf29000)
        libxcb-sync.so.1 => /lib64/libxcb-sync.so.1 (0x00007fc30cd22000)
        libxshmfence.so.1 => /lib64/libxshmfence.so.1 (0x00007fc30cb1f000)
        libXxf86vm.so.1 => /lib64/libXxf86vm.so.1 (0x00007fc30c918000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fc30c6b7000)
        liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fc30c491000)

このように,CentOS6では読み込まれていたreadlineがCentOS7では読み込まれていなかった。

それでは,readlineを使用できるようにソースからビルドしていく。環境はCentOS7だが,他の環境でもパッケージを読み替えればできると思う。

  1. gnuplotの削除とリポジトリからインストールできないようにする
    # yum remove gnuplot
    /etc/yum.conf に以下の記述を追記
    exclude=gnuplot*
    excludeが存在していれば後ろにスペースを開けてgnuplot*を書く。このように設定するとリポジトリからgnuplotがインストールされなくなる。
  2. readline-develのインストール
    これが入っていないと,このあとの作業をおこなっても意味がないので入れておく。
    # yum install readline-devel
  3. gnuplot のソースファイルをダウンロード & 展開
    以下のコマンドでgnuplotの最新版(現在[2016/07/31]はver.5.0.4)がダウンロードできる。

    # wget "https://sourceforge.net/projects/gnuplot/files/latest/download?source=files" -O gnuplot-latest.tar.gz
    # tar zxvf gnuplot-latest.tar.gz
  4. gnuplot のビルド と インストール
    展開されたディレクトリの中に移動して
    # cd gnuplot-5.0.4
    readlineを利用するように設定する。
    # ./configure --with-readline=gnu
    そして,コンパイルとインストールを行う。
    # make && make install

これでインストール完了
最後にlddの結果を載せておく

ldd /usr/local/bin/gnuplot 
        linux-vdso.so.1 =>  (0x00007fffdf3cd000)
        libreadline.so.6 => /lib64/libreadline.so.6 (0x00007f38519f2000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f38517ca000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f38515a0000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f385138a000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f3851185000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f3850e7d000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f3850b7b000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3850964000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f38505a2000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3851c56000)

無事readlineが読み込まれるようになった。最初の結果と比べるとライブラリの読み込み量がすごく減っているけど大丈夫だろうか?設定の問題だろうが…,また問題が出てきたら考えることにする。

———- 追記 ———-
使用していて,PNGやJPEGに出力が出来なかった。
使用できるようにするためにはgd-develがインストールされている必要があり
# yum install gd-devel
でインストールできる。
この状態で

# ./configure --with-readline=gnu --with-gd
# make && make install

として,インストールすればPNG,JPEG出力ができるようになる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください