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のライブラリがすべて削除されてします。
削除されるライブラリを一箇所(例えば/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 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++のバージョンを下げ、いろいろやらなくてはならない。