#1012789 linuxcnc-uspace: Linux CNC will not start

Package:
linuxcnc-uspace
Source:
linuxcnc
Description:
motion controller for CNC machines and robots
Submitter:
Vector Hasting
Date:
2022-07-14 14:09:07 UTC
Severity:
grave
#1012789#5
Date:
2022-06-14 05:31:25 UTC
From:
To:
Dear Maintainer,

*** Reporter, please consider answering these questions, where appropriate ***

   * What led up to the situation? I installed the package from respository with sudo apt-get install
   * What exactly did you do (or not do) that was effective (or
     ineffective)? Tried to understand from the error message if there was a missing package, but could not find one.
   * What was the outcome of this action? It did not help
   * What outcome did you expect instead?

*** End of the template - remove these template lines ***

#1012789#10
Date:
2022-06-14 13:57:03 UTC
From:
To:
Thanks for tryting LinuxCNC on aarch64. I don't know of anyone presently
using such a configuration.

As far as the "undefined symbol" message:

Please check whether in "wish", it works to "package require Img" or
whether the same error occurs. If it's the same error then may point to a
general problem between libtk-img and libtiff.

As far as the "LIBGL: Error while gathering supported extension
(eglInitialize: EGL_BAD_DISPLAY), default to none" message:

Most UIs for LinuxCNC require working OpenGL. You can try a different UI
such as tklinuxcnc, it doesn't use OpenGL and probably also doesn't use
Img. However, it's much less friendly (IMO)

Jeff

#1012789#15
Date:
2022-06-14 14:30:24 UTC
From:
To:
This looks to be a dependency (hard coded?) on the version of libtiff
that shipped with Buster (4.1).

But it also seems to be in a package that LinuxCNC depends on, but
doesn't control?
https://sourceforge.net/projects/tkimg/files/tkimg/1.4/tkimg%201.4.13/
(From the file path being searched)

For me, the trail dries up there. I guess this is due to a Tcl/Tk dependency?

#1012789#20
Date:
2022-06-14 22:13:59 UTC
From:
To:
Thank you for looking at this!

(My purpose reporting here is the understanding that we're trying to debug
to get sid into stable Bookworm with LinuxCNC, and I also want LinuxCNC
working on my little SBC.)

This is potentially helpful, but doesn't immediately clear things up for
me...

Here's what I did after getting this email:

I found the following libtiff packages on my SBC:
libtiff-dev  4.4.0-2
libtiff5 4.4.0-2
libtiffxx5  4.4.0-2

When I search the debian repository, it lists these as unstable (I presume
because we're on sid).
But it also lists them as the most recent releases, not the releases from
Buster (4.2.0-1).

Trying to follow the threads further, I went after the error message you
pointed out and saw it's trying to get:   libtifftcl4.1.0.so

I searched the debian repository and nothing by the name of libtiffcl4
exists:

"You have searched for packages that names contain libtifftcl in all
suites, all sections, and all architectures.
Sorry, your search gave no results"

Interestingly, the Sourceforge branches for tkImg does not have a *branch*
for 1.4 (which appears to be what the line above is looking for)
https://sourceforge.net/p/tkimg/code/HEAD/tree/branches/

But there *is* a version 1.4.13 under tags:
https://sourceforge.net/p/tkimg/code/HEAD/tree/tags/1.4.13/

I downloaded that 1.4.13 source and used MS Code to search the downloaded
source and found a piece of code compat/libtiff/libtiff/libtiff.map that
has the string " LIBTIFF_4.0" in it.

I found 8 files that have _TIFFsetString in it.

But I don't understand the compiling setup well enough to see how those
files get compiled to create an object named libtifftcl4.1.0.so  (??)

(there is no string in the source for libtifftcl4)

I'm happy to try and dig further, but I'm also at a stop point.

Vector Hasting

#1012789#25
Date:
2022-06-14 22:29:22 UTC
From:
To:
I started wish from the Terminal.
It brings up a % prompt and launches a small grey window
Typed linuxcnc  (inside the terminal, at the % prompt)
The initial configuration selection window opens, I chose the "axis_mm"
configuration and clicked OK.
It thinks for a while, and then sends the same error message ending in
"undefined symbol: _TIFFsetString, version LIBTIFF_4.0"

Thanks again for your time.



Vector Hasting

#1012789#30
Date:
2022-06-14 22:34:01 UTC
From:
To:
I started wish from the Terminal.
It brings up a % prompt and launches a small grey window
Typed linuxcnc  (inside the terminal, at the % prompt)
The initial configuration selection window opens, I chose the "axis_mm"
configuration and clicked OK.
It thinks for a while, and then sends the same error message ending in
"undefined symbol: _TIFFsetString, version LIBTIFF_4.0"

Thanks again for your time.

Vector Hasting

#1012789#35
Date:
2022-06-15 00:33:31 UTC
From:
To:
Thank you Jeff for suggesting this is an OpenGL issue.

Indeed, I went looking and I cannot run glxgears on my system, so I think
it would be fair to say that OpenGL is a dependency beyond the 'package
dependencies,' and that without it I can't run the plain vanilla, prettier
interface of LinuxCNC.

It was particularly helpful for you to mention tklinuxcnc, because I had no
idea it was there.

I followed the instructions at
http://linuxcnc.org/docs/2.7/html/gui/tklinuxcnc.html

(one finds the ini files, as of this writing, located at
~/linuxcnc/configs/sim.axis, and modifies/copies one to have a line DISPLAY
= tklinuxcnc  )

Therefore, by using the tklinuxcnc interface, my problem is solve: I have a
working copy of LinuxCNC!

This is as Jeff said an unusual attempt to get a Single Board Computer to
run LinuxCNC, but it may become a more common problem for folks
onceLinuxCNC becomes available in Debian Bookworm.

Therefore, a more fulsome message would probably reduce support work
downstream, but I'm not sure how to implement that myself. I'm happy to be
pointed in the right direction, either on this board or off.

Thanks again for everyone's help.

#1012789#40
Date:
2022-06-17 11:43:10 UTC
From:
To:
The same error is triggered from within Tcl/Tk. LinuxCNC I do not think
to be to blame.

$ wish
% package require Img
couldn't load file
"/usr/lib/tcltk/x86_64-linux-gnu/Img1.4.13/libtifftcl4.1.0.so":
/usr/lib/tcltk/x86_64-linux-gnu/Img1.4.13/libtifftcl4.1
.0.so: undefined symbol: _TIFFsetString, version LIBTIFF_4.0^

#1012789#45
Date:
2022-06-17 14:29:37 UTC
From:
To:
The problem is with the tiff library. On
https://github.com/LinuxCNC/linuxcnc/pull/1700 it is explained how to
install an earlier version from snapshot.debian.org

To trigger the problem independently from linuxcnc, try

$ wish
% package require Img

#1012789#50
Date:
2022-06-24 05:30:10 UTC
From:
To:
Control: block =1 by 1012825
Control: affects 1012825 - linuxcnc
Control: affects 1012825 + linuxcnc-uspace

The issue is reported against the tiff library as bug #1012825, and also
upstream as <URL: https://gitlab.com/libtiff/libtiff/-/issues/437 >.

#1012789#57
Date:
2022-06-25 12:07:29 UTC
From:
To:
Control: tags 1012825 patch
Control: severity 1012825 normal
Control: unblock 1012789 by 1012825
 As noted by libtiff upstream as well, this function was internal of
tiff and its declaration was in a header file that was not installed
publicly. They could change that without prior notice.
If linuxcnc-uspace still wants to use it, then copy that function[1]
and its details to their source tree. They already done copying with
the _TIFFsetString() function declaration.
Then I can add a break for its older versions for tiff.

Regards,
Laszlo/GCS
[1] https://gitlab.com/libtiff/libtiff/-/blob/master/libtiff/tif_dir.c#L43

#1012789#66
Date:
2022-06-25 15:07:26 UTC
From:
To:
[László Böszörményi]

While it might sound sensible on the surface, the realities is that the
libraries binary interface (aka ABI) changed, removing a public symbol
from the library.  Such API change require a no major SONAME number to
avoid breaking programs using the library.

It is not linuxcnc-uspace that is using it.  It is the tcl/tk Img
library.  To test for yourself, try running 'wish' and give it the
'package require Img' command to load the Img library.  linuxcnc do the
equivalent loading, but using the python Tk library.

Removing the symbol without bumping the SONAME made it impossible for
programs using the symbol to keep the old working library version.  This
was the ratinale for my severity setting critical.  Given that the
symbol removal without bumping SONAME broken libtk-img and linuxcnc,
what is your argument for lowering the severity to normal?

#1012789#71
Date:
2022-06-26 12:18:27 UTC
From:
To:
Control: tags 1012825 -patch
Control: clone 1012789 -1
Control: reassign -1 libtk-img
Control: retitle -1 libtk-img: add _TIFFsetString to its internal tiff library
Control: tags -1 +patch
 You are right that removing public symbols from a library interface
is an ABI break and requires a SONAME change. Per coding standards
function names starting with underscore are part of the private API
and a) not to be used outside of the library, b) if used nevertheless,
it's accepted that the other code can break anytime.
 Yup, I was tricked by the bug reports. . In this case, the Python Tk
library must follow the internal change of tiff.
 First of all, critical is used for several issues like making the
system unbootable or causing huge data loss. That's not the case. Then
as noted above, projects using others internal structures and/or
functions must follow that when the latter changes.
What you proposed is to diverge from tiff upstream and adding back the
mentioned function, then forcing a SONAME change, doing a transition
with over two hundred code rebuilds on fourteen architectures. This
makes no sense.
As noted above, the Python Tk library copies an internal tiff function
and probably not just one but a whole set of those (just check its
compat/libtiff/libtiff source directory). It must accept to follow
tiff development and act on such changes. Especially that the
mentioned removed function is a one liner, being a wrapper for another
function. If libtk-img needs that function, right. Copy it to their
code like it copied others already.
See the attached patch, basically it's a one liner. Sergei just needs
to add it to the libtk-img package source.

Regards,
Laszlo/GCS

#1012789#80
Date:
2022-06-26 20:42:07 UTC
From:
To:
[László Böszörményi]

Which coding standards?  I believe the Debian policy require SONAME
changes when the ABI break.  Did I misunderstand?

I base my understanding on
<URL: https://www.debian.org/Bugs/Developer#severities >, which state
the following for critical:

  * critical - makes unrelated software on the system (or the whole
    system) break, or causes serious data loss, or introduces a security
    hole on systems where you install the package.

My observation is that the libtiff change 'made unreleated software on
the system break', making this a bug with severity 'critical'.

To me it is the only approach that make sense when the ABI is broken.

Note, I do not try to defend the libtk-img developers.  To me their
behaviour is beside the point, which is that the tiff ABI broke (a
public symbol was removed) and the SONAME as not bumped.

#1012789#87
Date:
2022-06-28 05:49:45 UTC
From:
To:
Upstream worked around this problem by dropping the use of libtk-img in
<URL: https://github.com/LinuxCNC/linuxcnc/commit/98a847899ee6bc59406bcee9fc79bac310e2bdd8 >.
Thus this will be fixed in the next upload from upstream master, or
Debian can fetch the patch.

#1012789#92
Date:
2022-07-14 14:06:18 UTC
From:
To: