2020/02/04(火) [n年前の日記]
#1 [cg_tools][ubuntu] Ubuntu上でxpaintをビルドしてみたけれど
Ubuntu Linux 18.04 LTS 上で、公式バイナリの xpaint を使うと、選択範囲をドラッグしただけで落ちてしまうわけだけど。
Ubuntu 18.04 にインストールされる xpaint は、バージョンが 2.9.1.4-3.2。SourceForge に置いてあるソースは、最新版が 2.10.2。
_XPaint download | SourceForge.net
最新版なら、落ちるバグが修正されてたりしないか。試しにビルドしてみることにした。
環境は、Windows10 x64 1909 + VMware Workstation 15 Player 15.5.0 build-14665864 + Ubuntu Linux 18.04 LTS x64。
結論を先に書いておくけれど、sudo apt source xpaint で、パッケージのソースを入手して、パッチを当ててビルドするほうがいいです。以下は単なる作業記録と実験結果。
Ubuntu 18.04 にインストールされる xpaint は、バージョンが 2.9.1.4-3.2。SourceForge に置いてあるソースは、最新版が 2.10.2。
_XPaint download | SourceForge.net
最新版なら、落ちるバグが修正されてたりしないか。試しにビルドしてみることにした。
環境は、Windows10 x64 1909 + VMware Workstation 15 Player 15.5.0 build-14665864 + Ubuntu Linux 18.04 LTS x64。
結論を先に書いておくけれど、sudo apt source xpaint で、パッケージのソースを入手して、パッチを当ててビルドするほうがいいです。以下は単なる作業記録と実験結果。
◎ ビルド手順。 :
xpaint-2.10.2.tar.bz2 をDLして、tar xf xpaint-2.10.2.tar.bz2 で解凍。
中に INSTALL というファイルがあって、ビルドに必要なパッケージや、ビルド手順が書いてあった。
必要なパッケージが入っているか確認。
Ubuntu公式リポジトリ内で、libopenjpeg と libgf が見つからないのがちょっと気になったけど、それ以外は既にインストールされていたか、追加でインストールできた。
他にも、libtool-bin、libxaw3dxft-dev が必要になった気がする。
この状態で、configure、make。
xpaint と打ったら起動してくれた。
中に INSTALL というファイルがあって、ビルドに必要なパッケージや、ビルド手順が書いてあった。
必要なパッケージが入っているか確認。
Obviously, you need an ANSI C compiler - only gcc is supported - and you need the following libraries to be installed, together with their associated development packages :
X11 libraries (libX11, libXext, libXt, libXmu, libSM, libICE, libXp)
libXpm
libz
libpng
libtiff
libjpeg
libopenjpeg
libpgf (optional)
Most Unix/Linux distributions should provide this (except possibly the optional libpgf, which is not required to build xpaint, but is of course needed to load PGF images).
Ubuntu公式リポジトリ内で、libopenjpeg と libgf が見つからないのがちょっと気になったけど、それ以外は既にインストールされていたか、追加でインストールできた。
sudo apt install libxmu-dev libxpm-dev
他にも、libtool-bin、libxaw3dxft-dev が必要になった気がする。
sudo apt install libtool-bin libxaw3dxft-dev
この状態で、configure、make。
cd xpaint-2.10.2 ./configure make sudo make install
$ which xpaint /usr/local/bin/xpaint/usr/local/bin/ 以下にインストールされたらしい。
xpaint と打ったら起動してくれた。
◎ やっぱり落ちる。 :
起動はしたものの、選択範囲をドラッグしたら落ちた。最新版もバグ入りなのだな。
xpaint 2.10.2 は 2017/11/13 に公開されてるようだけど、2018年の時点でも件のバグが報告されてるようで…。
_XPaint / Bugs / #19 Stack smash error on selection drag.
xpaint 2.10.2 は 2017/11/13 に公開されてるようだけど、2018年の時点でも件のバグが報告されてるようで…。
_XPaint / Bugs / #19 Stack smash error on selection drag.
◎ パッチがあった。 :
以下でパッチが紹介されてた。PaintRegion.c を修正するらしい。
_Bug #1691906 “*** stack smashing detected ***: xpaint terminated...” : Bugs : xpaint package : Ubuntu
value という変数を boolean で用意したのに、int として扱っていたのだな…。C言語って怖い。
試しに修正を加えて、make、sudo make install をしたら、選択範囲をドラッグしても落ちなくなった。
_Bug #1691906 “*** stack smashing detected ***: xpaint terminated...” : Bugs : xpaint package : Ubuntu
value という変数を boolean で用意したのに、int として扱っていたのだな…。C言語って怖い。
試しに修正を加えて、make、sudo make install をしたら、選択範囲をドラッグしても落ちなくなった。
◎ 別の操作で落ちた。 :
選択範囲ドラッグで落ちなくなって喜んだものの、別の操作で落ちることに気づいた。File → Open Image を選んだら、ファイル選択ダイアログが一瞬表示された直後に「Segmentation fault (コアダンプ)」と言って落ちる。うーん。
ロードで落ちるということは、もしかして…。Save もダメだった。同じように、ファイル選択ダイアログが一瞬表示された直後に落ちてしまう。
openjpeg 関係のソレが無かったからダメなのだろうか。何にせよ、画像保存すらできないのでは、使えない。アンインストールするしかない…。
ロードで落ちるということは、もしかして…。Save もダメだった。同じように、ファイル選択ダイアログが一瞬表示された直後に落ちてしまう。
openjpeg 関係のソレが無かったからダメなのだろうか。何にせよ、画像保存すらできないのでは、使えない。アンインストールするしかない…。
sudo make uninstall
◎ パッケージのソースからビルド。 :
修正すべき箇所は少ないのだから、Ubuntu/Debianのパッケージソースを入手して、ソースを修正してビルドするのはどうだろう。試してみる。
参考ページ。
_第152回 パッケージをビルドしてみる:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
この手のビルドに必要なツールをインストール。
ソースを入手。
xpaint のビルドに必要なパッケージをインストール。
xpaint-2.9.1.4/PaintRegion.c を修正。boolena value; を int value; に変更。
ビルドしてみる。
通らない…。
色々インストールした Ubuntu だからダメなのだろうか。素の Ubuntu なら違う結果になるのかな。どうなんだろう。
参考ページ。
_第152回 パッケージをビルドしてみる:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
この手のビルドに必要なツールをインストール。
sudo apt-get install build-essential devscripts
ソースを入手。
apt source xpaint
$ ls -al 合計 1036 drwxrwxr-x 3 username username 4096 2月 4 08:36 ./ drwxrwxr-x 6 username username 4096 2月 4 08:28 ../ drwxrwxr-x 12 username username 4096 2月 4 08:36 xpaint-2.9.1.4/ -rw-r--r-- 1 username username 13528 10月 3 2016 xpaint_2.9.1.4-3.2.debian.tar.xz -rw-r--r-- 1 username username 2158 10月 3 2016 xpaint_2.9.1.4-3.2.dsc -rw-r--r-- 1 username username 1025885 10月 16 2010 xpaint_2.9.1.4.orig.tar.bz2入手できたっぽい。
xpaint のビルドに必要なパッケージをインストール。
sudo apt build-dep xpaint
xpaint-2.9.1.4/PaintRegion.c を修正。boolena value; を int value; に変更。
ビルドしてみる。
cd xpaint-2.9.1.4 dpkg-buildpackage -r -uc -b
通らない…。
... rm -f librw.a ar clq librw.a rwTable.o readWriteBMP.o readWriteICO.o readScriptC.o readWriteXBM.o readWritePNM.o readWriteXWD.o readWritePS.o readWriteLXP.o readGIF.o writeGIF.o readWriteXPM.o writeTIFF.o readTIFF.o readJPEG.o writeJPEG.o readWritePNG.o libpnmrw.o ranlib librw.a make[2]: ディレクトリ '/home/username/packages/xpaint_orig/xpaint-2.9.1.4/rw' から出ます making always in ./xaw3dxft... make[2]: ディレクトリ '/home/username/packages/xpaint_orig/xpaint-2.9.1.4/xaw3dxft' に入ります make[2]: ディレクトリ '/home/username/packages/xpaint_orig/xpaint-2.9.1.4/xaw3dxft' から出ます ./substads -single xpaint.man.in xpaint.man XPAINT_VERSION 2.9.1 rm -f xpaint gcc -o xpaint -g -O2 -fno-strict-aliasing chroma.o color.o colorEdit.o dialog.o fatBitsEdit.o fileBrowser.o fontSelect.o grab.o graphic.o hash.o help.o image.o imageComp.o iprocess.o magnifier.o main.o menu.o misc.o operation.o palette.o pattern.o print.o protocol.o readRC.o screenshot.o text.o texture.o typeConvert.o arcOp.o freehandOp.o boxOp.o brushOp.o circleOp.o fillOp.o fontOp.o lineOp.o pencilOp.o polygonOp.o splineOp.o selectOp.o sprayOp.o dynPenOp.o Colormap.o Paint.o PaintEvent.o PaintRegion.o PaintUndo.o -Lrw -lrw -ldl -rdynamic -L/usr/lib -lXpm -lX11 -lm -lXmu -lXext -lXft -ltiff -ljpeg -lpng -lz -lXaw3dxft -lXt -lfontconfig -L. -L./xaw3dxft main.o: 関数 `main' 内: /home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:737: `SetXftEncoding' に対する定義されていない参照です /home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:739: `SetXftDefaultFontName' に対する定義されていない参照です /home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:740: `SetMenuSpacing' に対する定義されていない参照です /home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:741: `SetXftInsensitiveTwist' に対する定義されていない参照です /home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:742: `SetXawHilitColor' に対する定義されていない参照です magnifier.o: 関数 `DrawString' 内: /home/username/packages/xpaint_orig/xpaint-2.9.1.4/magnifier.c:438: `XftDefaultFont' に対する定義されていない参照です fontOp.o: 関数 `key' 内: /home/username/packages/xpaint_orig/xpaint-2.9.1.4/fontOp.c:552: `XftEncoding' に対する定義されていない参照です collect2: error: ld returned 1 exit status Makefile:1241: recipe for target 'xpaint' failed make[1]: *** [xpaint] Error 1 make[1]: ディレクトリ '/home/username/packages/xpaint_orig/xpaint-2.9.1.4' から出ます dh_auto_build: make -j1 returned exit code 2 debian/rules:11: recipe for target 'binary' failed make: *** [binary] Error 2 dpkg-buildpackage: error: fakeroot debian/rules binary subprocess returned exit status 2
色々インストールした Ubuntu だからダメなのだろうか。素の Ubuntu なら違う結果になるのかな。どうなんだろう。
◎ 別途Ubuntuをインストールし直して試した。 :
VMware Player上で、別途、Ubuntu Linux 18.04 LTS x64 をインストールし直して、パッケージソースを入手してビルドできるか試してみた。
そちらだと、すんなりビルドが通ってしまった…。
以下の3つのファイルができたっぽい。
dpkgでインストール。
xpaint を起動してみた。選択範囲をドラッグしても落ちないし、ファイル選択ダイアログも開く。
ただ、キャンバスを画像保存しようとした際、ファイル選択ダイアログが開くけど、ファイル名を入力できない…。というか、ファイル名が表示されない…。
そちらだと、すんなりビルドが通ってしまった…。
以下の3つのファイルができたっぽい。
- libxaw3dxft6_2.9.1.4-3.2_amd64.deb
- xpaint-dev_2.9.1.4-3.2_amd64.deb
- xpaint_2.9.1.4-3.2_amd64.deb
dpkgでインストール。
sudo dpkg -i libxaw3dxft6_2.9.1.4-3.2_amd64.deb sudo dpkg -i xpaint-dev_2.9.1.4-3.2_amd64.deb sudo dpkg -i xpaint_2.9.1.4-3.2_amd64.deb
xpaint を起動してみた。選択範囲をドラッグしても落ちないし、ファイル選択ダイアログも開く。
ただ、キャンバスを画像保存しようとした際、ファイル選択ダイアログが開くけど、ファイル名を入力できない…。というか、ファイル名が表示されない…。
◎ 元々の仮想HDDイメージで試した。 :
元々の仮想HDDイメージを使って、ビルドできるか試した。OSインストール直後の Ubuntu ならすんなりビルドできたことを考えると、おそらく、xft関連パッケージで余計なものを入れてしまっているのではないかと…。
sudo aptitude search xft で列挙されたパッケージの中から、libxaw3dxft* や libxft* をアンインストールして、必要になるはずのパッケージを再度インストール。
この状態で試したら、ビルドが通った。やはり余計なものを入れてしまっていたらしい。
更に、こちらの版では、画像保存時もファイル名が表示されている…。もしかして、xfonts云々で必要なフォントがある、みたいなことかな…。以前、tgif をインストールした時も、そこでハマったし…。
_【電脳】Ubuntu 14.04 LTS で Tgif のフォントのエラーを解決して使う方法 | t-nissieの日記 | スラド
sudo aptitude search xft で列挙されたパッケージの中から、libxaw3dxft* や libxft* をアンインストールして、必要になるはずのパッケージを再度インストール。
sudo apt install autoconf automake autopoint autotools-dev bison debhelper \ dh-autoreconf dh-strip-nondeterminism flex libbison-dev libexpat1-dev \ libfile-stripnondeterminism-perl libfontconfig1-dev libfreetype6-dev \ libice-dev libjbig-dev libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev \ liblzma-dev libpng-dev libpthread-stubs0-dev libsigsegv2 libsm-dev \ libtiff-dev libtiff5-dev libtiffxx5 libtool libx11-dev libxau-dev \ libxaw7-dev libxcb1-dev libxdmcp-dev libxext-dev libxft-dev \ libxmu-dev libxmu-headers libxpm-dev libxrender-dev libxt-dev \ m4 pkg-config po-debconf x11proto-core-dev x11proto-dev \ x11proto-xext-dev xorg-sgml-doctools xtrans-dev xutils-dev zlib1g-dev
この状態で試したら、ビルドが通った。やはり余計なものを入れてしまっていたらしい。
更に、こちらの版では、画像保存時もファイル名が表示されている…。もしかして、xfonts云々で必要なフォントがある、みたいなことかな…。以前、tgif をインストールした時も、そこでハマったし…。
_【電脳】Ubuntu 14.04 LTS で Tgif のフォントのエラーを解決して使う方法 | t-nissieの日記 | スラド
◎ aptでアップデートされてしまう。 :
この状態で sudo apt update をすると、xpaint がアップグレード可能なパッケージとしてリストアップされて、sudo apt upgrade をすると、公式のバグ入り版 xpaint バイナリが上書きインストールされてしまう。ダメじゃん。
「このパッケージはアップデートから除外してくれ」てな指定ができたら解決するのかな。たぶん方法はあるんだろうけど。
ググってみたら、簡単だった。sudo apt-mark hold xpaint、sudo apt-mark hold xpaint-dev でいいらしい。
_UbuntuやDebianで特定のパッケージを更新されないよう「ホールド」する方法 | LFI
しかし、xpaint って、そこまでして使わないといけないソフトだろうか…?
まあ、パッチを当てれば選択範囲ドラッグで落ちる不具合は直るし、*.deb も作れると分かったので、これで良しとする。
「このパッケージはアップデートから除外してくれ」てな指定ができたら解決するのかな。たぶん方法はあるんだろうけど。
ググってみたら、簡単だった。sudo apt-mark hold xpaint、sudo apt-mark hold xpaint-dev でいいらしい。
_UbuntuやDebianで特定のパッケージを更新されないよう「ホールド」する方法 | LFI
しかし、xpaint って、そこまでして使わないといけないソフトだろうか…?
まあ、パッチを当てれば選択範囲ドラッグで落ちる不具合は直るし、*.deb も作れると分かったので、これで良しとする。
[ ツッコむ ]
#2 [anime] 「映像研には手を出すな!」4話を視聴
録画していたソレを視聴。
見ていて途中で泣きそうになってしまった…。「えっ。どこに泣く要素があったんだ」と言われそうだけど。個人的にはあったんです。色々と。 *1
たぶん、このアニメは万人には刺さらない。誰もがそういう経験をしてきたわけではないから。だけど、一部の人にはめっちゃ刺さるアニメになりそうだなと…。
見ていて途中で泣きそうになってしまった…。「えっ。どこに泣く要素があったんだ」と言われそうだけど。個人的にはあったんです。色々と。 *1
たぶん、このアニメは万人には刺さらない。誰もがそういう経験をしてきたわけではないから。だけど、一部の人にはめっちゃ刺さるアニメになりそうだなと…。
*1: コンビニで食料を調達して作業場に戻ってきた頃に朝日が差し込むソレとか。苦労して作ったソレが馬鹿馬鹿しいやり取りで発表中止になりそうで怒りに任せて叫び出したものの叫んでるうちになんで自分あんなに苦労してコレ作ってたんだとどんどん悲しくなってきて今にもポロポロと泣きそうになってくるあの気持ちとか。終わった後に本題そっちのけでアレはこうしたかったコレはこうしたかった次回はこうしたいああしたいとついつい考え始めて言い出しちゃうソレとか。なんかもう、各場面で、「ああ…分かる…」と思えてくるあたりがなんというか。
[ ツッコむ ]
以上、1 日分です。