Ubuntu 20.04にqtbindings

Post date: 2020/04/28 23:44:00

【問題】

Ubuntu 20.04では、Qt4がサポートされない。Ubuntu 20.04 その1 - Qt 4とQt 4依存アプリを削除する ... - kledgeb

libqt5core5aと、libqtcore4がconflictする。Bug#950614: libqt5core5a conflicts with libqtcore4

【やったこと】

そこで、https://www.ubuntuupdates.org/ から必要なqt4のdebをダウンロードして、依存パッケージをインストールしながらdpkg -iした。Chefのrecipeの関係部分を参考資料にする。

ldd /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/lib/2.5/qtruby4.so

.6.5/lib/2.5/qtruby4.so

linux-vdso.so.1 (0x00007fffb69ab000)

libQtCore.so.4 => /lib/x86_64-linux-gnu/libQtCore.so.4 (0x00007efda7e3e000)

libQtGui.so.4 => /lib/x86_64-linux-gnu/libQtGui.so.4 (0x00007efda72b4000)

libQtDBus.so.4 => /lib/x86_64-linux-gnu/libQtDBus.so.4 (0x00007efda721f000)

libruby.so.2.5 => /opt/chef/embedded/lib/libruby.so.2.5 (0x00007efda6cf5000)

libqtruby4shared.so.2 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/ruby/qtruby/src/libqtruby4shared.so.2 (0x00007efda6c47000)

libsmokeqtxml.so.3 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/smoke/qtxml/libsmokeqtxml.so.3 (0x00007efda6b8f000)

libsmokeqtopengl.so.3 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/smoke/qtopengl/libsmokeqtopengl.so.3 (0x00007efda6a8e000)

libsmokeqtsql.so.3 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/smoke/qtsql/libsmokeqtsql.so.3 (0x00007efda69b2000)

libsmokeqtnetwork.so.3 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/smoke/qtnetwork/libsmokeqtnetwork.so.3 (0x00007efda6866000)

libsmokeqtdbus.so.3 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/smoke/qtdbus/libsmokeqtdbus.so.3 (0x00007efda67ba000)

libsmokeqtsvg.so.3 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/smoke/qtsvg/libsmokeqtsvg.so.3 (0x00007efda66ef000)

libsmokeqtgui.so.3 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/smoke/qtgui/libsmokeqtgui.so.3 (0x00007efda5b6e000)

libsmokeqtcore.so.3 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/smoke/qtcore/libsmokeqtcore.so.3 (0x00007efda57c1000)

libsmokebase.so.3 => /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/qtbindings-4.8.6.5/ext/build/smoke/smokebase/libsmokebase.so.3 (0x00007efda57b8000)

libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007efda55d7000)

libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007efda55bc000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efda53ca000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efda53a7000)

libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007efda538b000)

libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007efda5383000)

libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007efda525a000)

librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007efda524f000)

libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007efda5100000)

/lib64/ld-linux-x86-64.so.2 (0x00007efda819e000)

libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007efda50b9000)

libaudio.so.2 => /lib/x86_64-linux-gnu/libaudio.so.2 (0x00007efda509e000)

libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007efda5064000)

libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007efda4fa5000)

libgobject-2.0.so.0 => /lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007efda4f45000)

libSM.so.6 => /lib/x86_64-linux-gnu/libSM.so.6 (0x00007efda4f3a000)

libICE.so.6 => /lib/x86_64-linux-gnu/libICE.so.6 (0x00007efda4f1c000)

libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007efda4f0a000)

libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007efda4cfe000)

libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007efda4ce9000)

libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007efda4bac000)

libQtXml.so.4 => /lib/x86_64-linux-gnu/libQtXml.so.4 (0x00007efda4b5b000)

libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007efda4b0a000)

libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007efda4acd000)

libQtNetwork.so.4 => /lib/x86_64-linux-gnu/libQtNetwork.so.4 (0x00007efda4965000)

libQtOpenGL.so.4 => /lib/x86_64-linux-gnu/libQtOpenGL.so.4 (0x00007efda4852000)

libQtSql.so.4 => /lib/x86_64-linux-gnu/libQtSql.so.4 (0x00007efda480a000)

libQtSvg.so.4 => /lib/x86_64-linux-gnu/libQtSvg.so.4 (0x00007efda47a9000)

libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007efda4736000)

libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007efda4708000)

libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007efda46ff000)

libXt.so.6 => /lib/x86_64-linux-gnu/libXt.so.6 (0x00007efda4496000)

libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007efda448e000)

libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007efda4482000)

libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007efda4468000)

libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007efda443e000)

libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007efda4391000)

libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007efda4307000)

libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007efda42ff000)

liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007efda42d8000)

liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007efda42b7000)

libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007efda4199000)

libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007efda40df000)

libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007efda40ab000)

libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007efda4088000)

注意: libqt5core5aをあとでインストールした場合

# apt install libqt5core5a

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following additional packages will be installed:

libdouble-conversion3 libpcre2-16-0 qttranslations5-l10n

The following packages will be REMOVED:

libqt4-dbus libqt4-declarative libqt4-designer libqt4-dev libqt4-dev-bin libqt4-help

libqt4-network libqt4-opengl libqt4-opengl-dev libqt4-qt3support libqt4-script

libqt4-scripttools libqt4-sql libqt4-sql-mysql libqt4-sql-sqlite libqt4-svg libqt4-test

libqt4-xml libqt4-xmlpatterns libqtcore4 libqtdbus4 libqtgui4 qdbus qt4-dev-tools

qt4-linguist-tools qt4-qtconfig

The following NEW packages will be installed:

libdouble-conversion3 libpcre2-16-0 libqt5core5a qttranslations5-l10n

0 upgraded, 4 newly installed, 26 to remove and 1 not upgraded.

Need to get 3710 kB of archives.

After this operation, 72.0 MB disk space will be freed.

Do you want to continue? [Y/n]

Yで続けると、/lib/x86_64-linux-gnu/libQtCore.so.4など、qt4のライブラリがすべて削除されてします。

【Qt5をインストールしたあとでも、qtbindingsを使えるようにするには】

削除されるライブラリを一箇所(例えば/tmp/qt4lib にコピーし)、

export LD_LIBRARY_PATH=/tmp/qt4lib すればよい。

Chefのrecipe(参考)

...

case node[:platform]

when 'ubuntu', 'debian', 'linuxmint'

packages = ['wget', 'cmake', 'libx11-dev', 'libxml2-dev', 'libxslt-dev', 'zlib1g-dev', 'software-properties-common', 'apt-transport-https']

if node[:platform_version] < '20.04'

packages.concat ['libqt4-dev', 'libqt4-opengl']

else # qt4 is no longer supported after ubuntu 20.04

packages.concat ['libx11-6', 'libxt6', 'libdbus-1-3', 'libpng16-16', 'libxtst6', 'libsqlite3-0', 'libglib2.0-0', 'libsqlite3-0', 'qtchooser']

packages.concat ['fontconfig', 'libfontconfig1', 'libfreetype6', 'libice6', 'libjpeg8', 'libsm6', 'libtiff5', 'libxi6', 'libxrender1', 'libcups2']

packages.concat ['libaudio2', 'libmng2']

end

when 'centos', 'redhat'

packages = ['wget', 'cmake', 'libX11-devel', 'mesa-libGL-devel', 'mesa-libGLU-devel', 'libxml2-devel', 'libxslt-devel', 'qt4', 'qt4-devel', 'which']

end


# puts "*** node[:platform] = #{node[:platform]}"


packages.each{|pkg|

package pkg do

action :install

end

}


if node[:platform_version] >= '20.04'

deb_files1 = %w[

qtcore4-l10n_4.8.7+dfsg-7ubuntu3_all.deb

libqt4-xml_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-network_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-script_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-sql_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-xmlpatterns_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-declarative_4.8.7+dfsg-7ubuntu3_amd64.deb

libqtcore4_4.8.7+dfsg-7ubuntu3_amd64.deb

libqtdbus4_4.8.7+dfsg-7ubuntu3_amd64.deb

libqtgui4_4.8.7+dfsg-7ubuntu3_amd64.deb

qdbus_4.8.7+dfsg-7ubuntu3_amd64.deb

]

deb_files2 = %w[

libqt4-dbus_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-designer_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-dev-bin_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-dev_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-help_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-opengl_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-opengl-dev_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-qt3support_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-scripttools_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-sql-mysql_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-sql-sqlite_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-svg_4.8.7+dfsg-7ubuntu3_amd64.deb

libqt4-test_4.8.7+dfsg-7ubuntu3_amd64.deb

qt4-dev-tools_4.8.7+dfsg-7ubuntu3_amd64.deb

qt4-linguist-tools_4.8.7+dfsg-7ubuntu3_amd64.deb

qt4-qmake_4.8.7+dfsg-7ubuntu3_amd64.deb

qt4-qtconfig_4.8.7+dfsg-7ubuntu3_amd64.deb

]


(deb_files1 + deb_files2).each{|deb|

execute "wget #{File.join 'http://security.ubuntu.com/ubuntu/pool/universe/q/qt4-x11', deb}" do

cwd '/tmp'

command = "wget #{File.join 'http://security.ubuntu.com/ubuntu/pool/universe/q/qt4-x11', deb}"

not_if { ::File.exists?(File.join '/tmp', deb) }

end

}

execute "dpkg -i deb_files1" do

cwd '/tmp'

command "dpkg -i #{deb_files1.join ' '}"

end


pkgs = %w[

fontconfig fontconfig-config fonts-dejavu-core libaudio2 libdrm-amdgpu1 libdrm-common

libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libegl-dev libegl-mesa0 libegl1

libelf1 libfontconfig1 libfreetype6 libgbm1 libgl-dev libgl1 libgl1-mesa-dev

libgl1-mesa-dri libglapi-mesa libgles-dev libgles1 libgles2 libglu1-mesa libglu1-mesa-dev

libglvnd-dev libglvnd0 libglx-dev libglx-mesa0 libglx0 libice6 libjbig0 libjpeg-turbo8

libjpeg8 liblcms2-2 libllvm9 libmng2 libmysqlclient21 libopengl-dev libopengl0

libpciaccess0 libpng16-16 libpthread-stubs0-dev libsensors-config libsensors5 libsm6

libtiff5 libvulkan1 libwayland-client0 libwayland-server0 libwebp6 libx11-dev libx11-xcb1

libxau-dev libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0

libxcb-sync1 libxcb-xfixes0 libxcb1-dev libxdamage1 libxdmcp-dev libxfixes3 libxi6

libxrender1 libxshmfence1 libxt6 libxtst6 libxxf86vm1 mesa-vulkan-drivers mysql-common

qtchooser x11-common x11proto-core-dev x11proto-dev xorg-sgml-doctools xtrans-dev

]

pkgs.each{|pkg|

package pkg do

action :install

end

}

execute "dpkg -i deb_files2" do

cwd '/tmp'

command "dpkg -i #{deb_files2.join ' '}"

end

end


...


このあとqtbindingsをインストール



Ubuntu 18.04にQt4をソースからインストールするための覚書

上記のように、Ubuntu 20.04にすでにQt5がインストールされている場合、qt4およびqtbindingsをインストールすることはできない。

そこで、昔やっていたようにQt4をソースからインストールすることを試みたが、まず以下のエラー:

Basic XLib functionality test failed!

You might need to modify the include and library search paths by editing

QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /usr/local/src/qt-everywhere-opensource-src-4.8.7/mkspecs/linux-g++.

これは、prerequisitesを守ってないからで、以下で解決:

apt install libfontconfig1-dev libfreetype6-dev libx11-dev libxcursor-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxrandr-dev libxrender-dev

しかし、これだけでは不十分でmakeの途中でエラーになる。

Installation of Qt 4.8.7 in Ubuntu 18.04.1 LTS によれば、gcc、g++のバージョンを下げ、いろいろやらなくてはならない。