OpenPLC EditorをArch Linux上で動かす
2024-01-20追記
Python2の導入がダルくてつらいよ~と思って書いたこの記事ですが、どうやら別ブランチかどこかでPython3への移行が進められていたらしく、現在のmasterブランチはPython3.8に対応したものになっています。
ということで、 yay -S openplc-editor-git
で終わりです。以下の記事は記録として残しておきますが、たぶん何の意味もないです。
僕の学科では現在、論理回路という授業が行われており、これは名前の通り回路について学ぶ授業です。この授業においては、論理回路のシミュレーションとしてOpenPLC Editorを用いています。
ところで、冬休みに入る直前ごろにOpenPLC Editorについて調べた時、エディタのダウンロードページが見当たりませんでした。Gitlabも更新が止まっていて厳しいなあと思っていたのですが、冬休みが明けるころに見たら何やらモダンなWebサイトがヒットしました。
[OGP image not found]Autonomy – Open-source PLC Softwarehttps://autonomylogic.com/
どうもGitHubのほうにリポジトリがあって、そちらで開発が行われているようです。しかも12月末にコミットが発生していました。
これは導入するしかない!と思って入れようとしたところ、かなり難航してしまったので、ここにまとめておきます。
検証した環境
Arch Linux x86_64、カーネルは6.6.9-zen-1-1-zenです。
必要なパッケージのインストール
まずはパッケージをインストールしましょう。なお、依存関係であるにもかかわらず、ここに書いていないものがあるかもしれません。
$ sudo pacman -S llvm clang pyenv --needed
Python環境の構築
まずはPython2を導入します(つらい)。pyenvを使用します1。
$ pyenv install 2.7.18
$ pyenv shell 2.7.18
そして、依存関係の一部をpipで入れます。
$ pip2 install future zeroconf==0.19.1 numpy==1.16.5 matplotlib==2.0.2 lxml==4.6.2 pyro sslpsk pyserial jinja2
ld.so.confの設定
このままだと、後述するwxPython3のビルド中に libpython2.7.so.1.0
が見つからないという怒られが発生するので、以下のようにして認識させておきます。
$ echo "/home/${USER}/.pyenv/versions/2.7.18/lib" | sudo tee /etc/ld.so.conf.d/python2.conf
$ sudo ldconfig
ldconfig -p | grep python2
などで、libpython2.7.so.1.0
がldconfigによって認識されていることを確認してください。
wxPython3の導入
OpenPLC EditorはwxPython3に依存しています。これは古いバージョンであり、pipで導入できません。
ということでAURから python2-wxpython3
をインストール……したかったのですが、手元の環境だとエラーが出てしまいました。
というわけで、PKGBUILDを以下のページから拾ってきて、改変しましょう。
これらの箇所を修正します。
build()
の最初に以下を追記(USER
はユーザー名に置き換えてください)
export LD_LIBRARY_PATH=/home/USER/.pyenv/versions/2.7.18/lib
export CC=clang
export CXX=clang++
build()
において、CFLAGS
に-std=${_C_std}
を渡しているところを削除package()
で${pkgdir}/usr/bin/*
に対してforしている行を削除
最終的に以下のようになると思います。
# 前半略
build() {
# added:
export LD_LIBRARY_PATH=/usr/local/lib:/home/watasuke/.pyenv/versions/2.7.18/lib
export CC="clang"
export CXX="clang++"
# Old, non-maintained software. Use older C/C++ standard.
_C_std='gnu++14'
_CXX_std='gnu++14'
#In case a newer C standard is used, warnings are generated which should not be treated as errors.
_append_to_CFLAGS_after_configure=' -Wno-error -Wno-error=format-security -Wno-error=register -Wno-error=deprecated-declarations -Wno-error=alloc-size-larger-than= -Wno-error=write-strings -Wno-error=return-local-addr -Wno-error=attributes' # Or just use -Wno-error to catch all.
_append_to_CXXFLAGS_after_configure="${_append_to_CFLAGS_after_configure}"
# changed:
# CFLAGS+=" -std=${_C_std}"
CFLAGS+="-O0"
CXXFLAGS+="-std=${_CXX_std} -O0"
export CFLAGS
export CXXFLAGS
cd wxPython-src-${pkgver}
./configure "${_configure_opts[@]}" \
--prefix=/usr \
--libdir=/usr/lib \
--includedir=/usr/include \
--with-gtk=3 \
--with-opengl \
--enable-unicode \
--enable-graphics_ctx \
--disable-precomp-headers \
--with-regex=sys \
--with-libpng=sys \
--with-libxpm=sys \
--with-libjpeg=sys \
--with-libtiff=sys \
--with-wx-config=/opt/wxgtk-3.0/bin/wx-config-gtk3
echo "CONFIG DONE"
# changed:
# CFLAGS+=" ${_append_to_CFLAGS_after_configure} -std=${_C_std}"
CFLAGS+=" ${_append_to_CFLAGS_after_configure}"
CXXFLAGS+=" ${_append_to_CXXFLAGS_after_configure} -std=${_CXX_std} "
export CFLAGS
export CXXFLAGS
make
cd wxPython
python2 setup.py WX_CONFIG=/opt/wxgtk-3.0/bin/wx-config-gtk3 WXPORT=gtk3 UNICODE=1 build
}
package() {
cd "wxPython-src-${pkgver}/wxPython"
python2 setup.py WX_CONFIG=/opt/wxgtk-3.0/bin/wx-config-gtk3 WXPORT=gtk3 UNICODE=1 install --root="${pkgdir}" --optimize=1
install -d "${pkgdir}"/usr/include/wx-3.0/wx/wxPython
cp -r "${pkgdir}"/opt/wxgtk-3.0/include/wx-3.0/wx/wxPython/* "${pkgdir}"/usr/include/wx-3.0/wx/wxPython
rm -r "${pkgdir}"/opt
# deleted:
# for file in "${pkgdir}"/usr/bin/*; do mv "${file}" "${file}2"; done
install -Dm644 ../docs/licence.txt "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE
}
makepkg -si
してインストールしましょう。
OpenPLC Editorのビルド
以下のリポジトリをcloneしてディレクトリに入り、以下のようにコマンドを打っていけば良いです。基本的にリポジトリに含まれる install.sh
に沿っていますが、configureで CXXFLAGS
を指定しているという差異があります。
$ cd matiec
$ autoreconf -i
$ ./configure CXXFLAGS="-std=c++03"
$ make
$ cp ./iec2c ../editor/arduino/bin
$ cd ..
$ echo -e "#!/bin/bash\n\
cd \"$(pwd)\"\n\
if [ -d \"./new_editor\" ]\n\
then\n\
rm -Rf editor\n\
rm -Rf ./matiec/lib\n\
mv ./new_editor ./editor\n\
mv ./new_lib ./matiec/lib\n\
fi\n\
python2.7 ./editor/Beremiz.py" > openplc_editor.sh
$ chmod +x openplc_editor.sh
もしくは、このようなPKGBUILDを作ってmakepkg -siしても良いと思います。
#Maintainer: watasuke <[email protected]>
_pkgname=openplc-editor
pkgname="${_pkgname}-git"
pkgver=r439.7b11e38
pkgrel=1
pkgdesc="OpenPLC editor"
arch=("x86_64")
url="https://github.com/thiagoralves/OpenPLC_Editor"
source=("git+${url}.git")
license=("GPL3")
md5sums=("SKIP")
makedepends=("git")
pkgver() {
cd "${srcdir}/OpenPLC_Editor"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
build() {
cd "${srcdir}/OpenPLC_Editor"
cd matiec
autoreconf -i
./configure --prefix="${pkgdir}" CXXFLAGS="-std=c++03"
make
cp ./iec2c ../editor/arduino/bin
}
prepare() {
cd "${srcdir}/OpenPLC_Editor"
echo -e "#!/bin/bash\n\
cd \"/opt/OpenPLC_Editor\"\n\
if [ -d \"./new_editor\" ]\n\
then\n\
rm -Rf editor\n\
rm -Rf ./matiec/lib\n\
mv ./new_editor ./editor\n\
mv ./new_lib ./matiec/lib\n\
fi\n\
python2.7 ./editor/Beremiz.py" > openplc_editor.sh
chmod +x openplc_editor.sh
}
package() {
install -dm755 "$pkgdir/opt"
cp -r "${srcdir}/OpenPLC_Editor" "$pkgdir/opt/OpenPLC_Editor"
}
実行
先程作成した openplc_editor.sh
を実行すると、OpenPLC Editorが起動します。多分。PKGBUILDから入れた人は /opt/OpenPLC_Editor/openplc_editor.sh
です。
Waylandでも動きます(画像はHyprland)。うれしい!
おわりに
Arch LinuxでPython2とwxPython3を導入するのがここまでつらいとは思っていませんでした……。特にwxPython3のビルドは大変でした。OpenPLC Editorのリポジトリに含まれる.deb形式のパッケージをインストールしてみたりもしたのですが、うまく動きませんでした。
というわけで、いろいろ試行錯誤していたため、なにか書き忘れていることがあるような気がしてなりません。何かあったら教えてください。
まあ何はともあれ、起動できるようになってよかったです。OpenPLC Editorがインストールされている学校のパソコンを、授業がある度に借りる必要があったのですが、これのおかげで必要なくなりそうで嬉しいです。
ちなみに:PKGBUILDがいくつか出ていますが、これをAURに公開するつもりはあんまりないです。pyenvの環境設定という前提があるので……。Nix(OS)ならこういうの楽そうですよね。
Footnotes
-
Python2が使えたらなんでもいいとは思いますが、責任は取りません。ここではpyenvを使用したことを前提にして説明します ↩
Comments
Powered by Giscus