plantuml / plantuml-server

PlantUML Online Server
https://plantuml.com/
GNU General Public License v3.0
1.6k stars 462 forks source link

java.lang.IllegalStateException: Cannot find color #000007 #270

Closed yung5133 closed 1 year ago

yung5133 commented 1 year ago

The latest version of the PlantUML-server is deployed on a server using docker-compose. However, in specific scenarios, an error occurs: "java.lang.IllegalStateException: Cannot find color #000007".

yung5133 commented 1 year ago

Just run code like this:

@startuml !include <C4/C4_Context> !include <C4/C4_Component> !include <C4/C4_Container>

Boundary(a, "Boundary A") { Boundary(b, "Boundary B") { Container(c, "Container C") } }

arnaudroques commented 1 year ago

Sorry about that...

Last version (7.1.0) of Graphviz is crashing with some input data (example)

This is connected to https://github.com/plantuml/plantuml-server/pull/268

We are going to investigate

Anonymodesu commented 1 year ago

Is there a version of GraphViz that we can fall back on?

fgreinacher commented 1 year ago

I tried with 8.0.2 - same thing happens within the container.

It works with the same GrahpViz version locally on my Mac, so this seems to be a dependency/system issue.

arnaudroques commented 1 year ago

I am wondering if expat-devel library is missing during graphviz compilation.

Could you run configure with option "./configure --with-expat=yes" before graphviz compilation. And check that libexpat is found when graphviz compile?

Thanks!

fgreinacher commented 1 year ago

I am wondering if expat-devel library is missing during graphviz compilation.

Could you run configure with option "./configure --with-expat=yes" before graphviz compilation. And check that libexpat is found when graphviz compile?

Thanks!

Great hint, that was the issue! The C4 diagram now renders properly:

image
fgreinacher commented 1 year ago

Sorry about that...

Last version (7.1.0) of Graphviz is crashing with some input data (example)

Adding expat-devel does not fix that issue. The server log only shows this:

java.io.IOException: Broken pipe
        at java.base/java.io.FileOutputStream.writeBytes(Native Method)
        at java.base/java.io.FileOutputStream.write(Unknown Source)
        at java.base/java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.base/java.io.BufferedOutputStream.flush(Unknown Source)
        at java.base/java.io.FilterOutputStream.close(Unknown Source)
        at net.sourceforge.plantuml.dot.ProcessRunner$MainThread.startThreads(ProcessRunner.java:187)
        at net.sourceforge.plantuml.dot.ProcessRunner$MainThread.runJob(ProcessRunner.java:125)
        at net.sourceforge.plantuml.api.TimeoutExecutor$MyThread.run(TimeoutExecutor.java:81)

Any ideas what could go wrong there @arnaudroques?

arnaudroques commented 1 year ago

Any ideas what could go wrong there @arnaudroques?

Yes: here, I think that Graphviz is really crashing :-(

Could you test other Graphviz version so see which one are crashing and which one are not? Maybe it has been fixed in version 8, or maybe it's working in version 6 or 5.

arnaudroques commented 1 year ago

On second thought, it might be related to graphviz configuration/build, because I made it work on a graphviz version 7.1.0.

[root@linux home]# ./configure
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether UID '0' is supported by ustar format... yes
checking whether GID '0' is supported by ustar format... yes
checking how to create a ustar tar archive... gnutar
checking whether make supports nested variables... (cached) yes
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for flex... flex
checking lex output file root... lex.yy
checking lex library... none needed
checking whether yytext is a pointer... no
checking for bison... bison -y
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking whether ln -s works... yes
checking how to print strings... printf
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking for groff... groff
checking for ps2pdf... no
checking for pstopdf... no
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for tclsh8.6... no
checking for tclsh8.5... no
checking for tclsh8.4... no
checking for tclsh8.3... no
checking for tclsh... no
checking for gcc option to accept ISO C99... -std=gnu99
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/bin/ld -m elf_x86_64
checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... no
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether g++ supports C++11 features with -std=c++11... yes
checking for gcc... gcc
checking whether we are using the GNU Objective C compiler... no
checking whether gcc accepts -g... no
checking dependency style of gcc... gcc3
checking for inline... inline
checking whether C compiler accepts -Wtrampolines... yes
checking whether C compiler accepts -Wlogical-op... yes
checking for pid_t... yes
checking for ssize_t... yes
checking for uid_t in sys/types.h... yes
checking for off64_t... no
checking for struct stat64... no
checking for ... no
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking search.h usability... yes
checking search.h presence... yes
checking for search.h... yes
checking stropts.h usability... no
checking stropts.h presence... no
checking for stropts.h... no
checking termios.h usability... yes
checking termios.h presence... yes
checking for termios.h... yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking for sys/types.h... (cached) yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking for sys/stat.h... (cached) yes
checking sys/mman.h usability... yes
checking sys/mman.h presence... yes
checking for sys/mman.h... yes
checking sys/ioctl.h usability... yes
checking sys/ioctl.h presence... yes
checking for sys/ioctl.h... yes
checking sys/inotify.h usability... yes
checking sys/inotify.h presence... yes
checking for sys/inotify.h... yes
checking for main in -lm... yes
checking for sincos... yes
checking for lrand48... yes
checking for drand48... yes
checking for srand48... yes
checking for setmode... no
checking for setenv... yes
checking for ftruncate... yes
checking for lseek64... yes
checking for stat64... yes
checking for select... yes
checking for dl_iterate_phdr... yes
checking for strcasestr... yes
checking what extension is used for runtime loadable modules... .so
checking what variable specifies run-time module search path... LD_LIBRARY_PATH
checking for the default library search path... /lib /usr/lib /usr/lib64/dyninst 
checking for library containing dlopen... -ldl
checking for dlerror... yes
checking for shl_load... no
checking for shl_load in -ldld... no
checking for dld_link in -ldld... no
checking for _ prefix in compiled symbols... no
checking whether deplibs are loaded by dlopen... yes
checking for argz.h... yes
checking for error_t... yes
checking for argz_add... yes
checking for argz_append... yes
checking for argz_count... yes
checking for argz_create_sep... yes
checking for argz_insert... yes
checking for argz_next... yes
checking for argz_stringify... yes
checking if argz actually works... yes
checking whether libtool supports -dlopen/-dlpreopen... yes
checking for ltdl.h... no
checking where to find libltdl headers... -I$(top_srcdir)/libltdl
checking where to find libltdl library... $(top_build_prefix)libltdl/libltdlc.la
checking for unistd.h... (cached) yes
checking for dl.h... no
checking for sys/dl.h... no
checking for dld.h... no
checking for mach-o/dyld.h... no
checking for dirent.h... yes
checking for closedir... yes
checking for opendir... yes
checking for readdir... yes
checking for strlcat... no
checking for strlcpy... no
checking for X... no
configure: WARNING: X11 not available.
checking for swig... swig
checking for mcs... no
checking for go... no
checking for guile-config2.2... no
checking for guile-config... no
checking for java... no
checking for lua... lua
checking for lua... (cached) lua
checking for Lua headers and libraries with pkg-config... 
checking for lua-config... no
checking for lua-config52... no
checking for lua-config5.2... no
checking for lua-config51... no
checking for lua-config5.1... no
checking for lua-config50... no
checking for lua-config5.0... no
checking for Lua headers and libraries... 
checking lua.h usability... no
checking lua.h presence... no
checking for lua.h... no
checking lualib.h usability... no
checking lualib.h presence... no
checking for lualib.h... no
checking for lua_call in -llua... no
checking for lua_call in -llua... (cached) no
checking for lua_call in -llua52... no
checking for lua_call in -llua5.2... no
checking for lua_call in -llua51... no
checking for lua_call in -llua5.1... no
checking for lua_call in -llua50... no
checking for lua_call in -llua5.0... no
checking for Lua compiling and linking... no
configure: WARNING:
*** Lua (>=5.0) headers and/or libraries could not be found in your system.
*** Try to install liblua, liblualib and liblua-dev with your software package manager.
*** Graphviz will be built without Lua support.
checking for ocaml... no
checking for perl... perl
checking EXTERN.h usability... no
checking EXTERN.h presence... no
checking for EXTERN.h... no
checking for php7.2... no
checking for php7-config... no
./configure: line 22818: php-config: command not found
./configure: line 22819: php-config: command not found
./configure: line 22821: php-config: command not found
./configure: line 22821: php-config: command not found
checking php.h usability... no
checking php.h presence... no
checking for php.h... no
checking for python3... no
checking for R... no
checking for RUBY... no
checking for RUBY... no
checking for ruby... no
checking tcl.h usability... no
checking tcl.h presence... no
checking for tcl.h... no
configure: WARNING: Unable to find header tcl.h. The Tcl packages will not be built
checking for connect... yes
checking for gethostbyname... yes
checking for expat-config... no
checking expat.h usability... yes
checking expat.h presence... yes
checking for expat.h... yes
checking for main in -lexpat... yes
checking IL/il.h usability... no
checking IL/il.h presence... no
checking for IL/il.h... no
configure: WARNING: Optional DevIL library not available - missing headers
checking for main in -lIL... no
configure: WARNING: Optional DevIL library not available
checking zlib.h usability... no
checking zlib.h presence... no
checking for zlib.h... no
configure: WARNING: Optional z library not available - no zlib.h
checking for WEBP... no
checking for POPPLER... no
checking for RSVG... no
checking for PANGOCAIRO... no
checking for FREETYPE2... no
configure: WARNING: pkg-config did not find a freetype2.pc.  Looking for freetype-config.
checking for freetype-config... no
configure: WARNING: freetype library not available
checking for FONTCONFIG... no
configure: WARNING: pkg-config did not find a fontconfig.pc.  Looking for fontconfig-config.
checking for fontconfig-config... no
configure: WARNING: fontconfig library not available
checking for GDK... no
checking for GDK_PIXBUF... no
checking for GTK... no
checking for GTKGL... no
checking for GTKGLEXT... no
checking for GTS... no
checking for ANN... no
checking for GLADE... no
checking for qmake6... no
checking for qmake-qt5... no
checking for qmake5... no
checking for qmake... no
checking for GDLIB... no
checking for gdlib-config... no
configure: WARNING: GD neither gdlib pkgconfig nor gdlib-config was found
checking gd.h usability... no
checking gd.h presence... no
checking for gd.h... no
configure: WARNING: Optional GD library not available - no gd.h
checking GL/glut.h usability... no
checking GL/glut.h presence... no
checking for GL/glut.h... no
configure: WARNING: Optional glut library not available - no GL/glut.h
configure: WARNING: SMYRNA requires GTK
configure: WARNING: SMYRNA requires GTKGLEXT
configure: WARNING: SMYRNA requires GLADE
configure: WARNING: SMYRNA requires GTS
configure: WARNING: SMYRNA requires GLUT
checking for main in -lcriterion... no
configure: WARNING: Criterion unit testing framework not installed
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating debian/changelog
config.status: creating doc/Makefile
config.status: creating doc/info/Makefile
config.status: creating doc/schema/Makefile
config.status: creating contrib/Makefile
config.status: creating contrib/prune/Makefile
config.status: creating contrib/diffimg/Makefile
config.status: creating graphs/Makefile
config.status: creating graphs/directed/Makefile
config.status: creating graphs/undirected/Makefile
config.status: creating lib/Makefile
config.status: creating lib/cdt/Makefile
config.status: creating lib/cdt/libcdt.pc
config.status: creating lib/cgraph/Makefile
config.status: creating lib/cgraph/libcgraph.pc
config.status: creating lib/rbtree/Makefile
config.status: creating lib/pathplan/Makefile
config.status: creating lib/pathplan/libpathplan.pc
config.status: creating lib/ast/Makefile
config.status: creating lib/sfio/Makefile
config.status: creating lib/sfio/Sfio_f/Makefile
config.status: creating lib/vmalloc/Makefile
config.status: creating lib/dotgen/Makefile
config.status: creating lib/neatogen/Makefile
config.status: creating lib/fdpgen/Makefile
config.status: creating lib/sparse/Makefile
config.status: creating lib/mingle/Makefile
config.status: creating lib/label/Makefile
config.status: creating lib/sfdpgen/Makefile
config.status: creating lib/sfdpgen/libsfdp.pc
config.status: creating lib/osage/Makefile
config.status: creating lib/edgepaint/Makefile
config.status: creating lib/edgepaint/liblab_gamut.pc
config.status: creating lib/gvpr/Makefile
config.status: creating lib/gvpr/libgvpr.pc
config.status: creating lib/circogen/Makefile
config.status: creating lib/twopigen/Makefile
config.status: creating lib/patchwork/Makefile
config.status: creating lib/pack/Makefile
config.status: creating lib/ortho/Makefile
config.status: creating lib/expr/Makefile
config.status: creating lib/expr/libexpr.pc
config.status: creating lib/common/Makefile
config.status: creating lib/ingraphs/Makefile
config.status: creating lib/vpsc/Makefile
config.status: creating lib/gvc/Makefile
config.status: creating lib/gvc/libgvc.pc
config.status: creating lib/xdot/Makefile
config.status: creating lib/xdot/libxdot.pc
config.status: creating lib/topfish/Makefile
config.status: creating lib/glcomp/Makefile
config.status: creating macosx/Info.plist
config.status: creating macosx/build/graphviz.pmdoc/01local.xml
config.status: creating macosx/build/graphviz.pmdoc/02graphviz.xml
config.status: creating windows/build/graphviz.wxs
config.status: creating windows/Properties/AssemblyInfo.cs
config.status: creating plugin/Makefile
config.status: creating plugin/core/Makefile
config.status: creating plugin/devil/Makefile
config.status: creating plugin/gd/Makefile
config.status: creating plugin/gdk/Makefile
config.status: creating plugin/gdiplus/Makefile
config.status: creating plugin/gs/Makefile
config.status: creating plugin/gtk/Makefile
config.status: creating plugin/lasi/Makefile
config.status: creating plugin/pango/Makefile
config.status: creating plugin/poppler/Makefile
config.status: creating plugin/quartz/Makefile
config.status: creating plugin/rsvg/Makefile
config.status: creating plugin/visio/Makefile
config.status: creating plugin/webp/Makefile
config.status: creating plugin/xlib/Makefile
config.status: creating plugin/dot_layout/Makefile
config.status: creating plugin/neato_layout/Makefile
config.status: creating cmd/Makefile
config.status: creating cmd/dot/Makefile
config.status: creating cmd/tools/Makefile
config.status: creating cmd/gvpr/Makefile
config.status: creating cmd/gvpr/lib/Makefile
config.status: creating cmd/smyrna/Makefile
config.status: creating cmd/gvmap/Makefile
config.status: creating cmd/mingle/Makefile
config.status: creating cmd/edgepaint/Makefile
config.status: creating cmd/gvedit/Makefile
config.status: creating cmd/gvedit/gvedit.pro
config.status: creating cmd/gvedit/ui/Makefile
config.status: creating cmd/gvedit/images/Makefile
config.status: creating tclpkg/Makefile
config.status: creating tclpkg/tclstubs/Makefile
config.status: creating tclpkg/tclhandle/Makefile
config.status: creating tclpkg/gdtclft/Makefile
config.status: creating tclpkg/gdtclft/demo/Makefile
config.status: creating tclpkg/tcldot/Makefile
config.status: creating tclpkg/tcldot/demo/Makefile
config.status: creating tclpkg/tclpathplan/Makefile
config.status: creating tclpkg/tclpathplan/demo/Makefile
config.status: creating tclpkg/tclpathplan/demo/pathplan_data/Makefile
config.status: creating tclpkg/gv/Makefile
config.status: creating tclpkg/gv/demo/Makefile
config.status: creating tclpkg/gv/META.gv
config.status: creating tests/graphs/Makefile
config.status: creating tests/linux.x86/Makefile
config.status: creating tests/Makefile
config.status: creating tests/unit_tests/Makefile
config.status: creating tests/unit_tests/lib/Makefile
config.status: creating tests/unit_tests/lib/common/Makefile
config.status: creating tests/regression_tests/Makefile
config.status: creating tests/regression_tests/shapes/Makefile
config.status: creating tests/regression_tests/shapes/reference/Makefile
config.status: creating tests/regression_tests/vuln/Makefile
config.status: creating tests/regression_tests/vuln/input/Makefile
config.status: creating tests/regression_tests/vuln/reference/Makefile
config.status: creating share/Makefile
config.status: creating share/examples/Makefile
config.status: creating share/gui/Makefile
config.status: creating redhat/graphviz.spec.fedora
config.status: creating redhat/graphviz.spec.rhel
config.status: creating Doxyfile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
=== configuring in libltdl (/home/graphviz-7.1.0/libltdl)
configure: running /bin/sh ./configure --disable-option-checking '--prefix=/usr/local'  '--enable-ltdl-convenience' --cache-file=/dev/null --srcdir=.
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking how to print strings... printf
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking for shl_load... no
checking for shl_load in -ldld... no
checking for dlopen... no
checking for dlopen in -ldl... yes
checking whether a program can dlopen itself... yes
checking whether a statically linked program can dlopen itself... yes
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking what extension is used for runtime loadable modules... .so
checking what variable specifies run-time module search path... LD_LIBRARY_PATH
checking for the default library search path... /lib /usr/lib /usr/lib64/dyninst 
checking for library containing dlopen... -ldl
checking for dlerror... yes
checking for shl_load... (cached) no
checking for shl_load in -ldld... (cached) no
checking for dld_link in -ldld... no
checking for _ prefix in compiled symbols... no
checking whether deplibs are loaded by dlopen... yes
checking for argz.h... yes
checking for error_t... yes
checking for argz_add... yes
checking for argz_append... yes
checking for argz_count... yes
checking for argz_create_sep... yes
checking for argz_insert... yes
checking for argz_next... yes
checking for argz_stringify... yes
checking if argz actually works... yes
checking whether libtool supports -dlopen/-dlpreopen... yes
checking for unistd.h... (cached) yes
checking for dl.h... no
checking for sys/dl.h... no
checking for dld.h... no
checking for mach-o/dyld.h... no
checking for dirent.h... yes
checking for closedir... yes
checking for opendir... yes
checking for readdir... yes
checking for strlcat... no
checking for strlcpy... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands

----------------------------------------------------------------

graphviz-7.1.0 will be compiled with the following:

options:
  cgraph:        Yes (always enabled)
  digcola:       Yes
  expat:         Yes
  fontconfig:    No (missing fontconfig-config)
  freetype:      No (missing freetype-config)
  glut:          No (missing GL/glut.h)
  ann:           No (no ann.pc or ANN.h found)
  gts:           No (gts library not available)
  ipsepcola:     Yes
  ltdl:          Yes
  ortho:         Yes
  sfdp:          Yes
  swig:          Yes ( 2.0.10 )
  shared:        Yes
  static:        No (disabled by default)
  qt:            No (qmake not found)
  x:             No (disabled or unavailable)

commands:
  dot:           Yes (always enabled)
  neato:         Yes (always enabled)
  fdp:           Yes (always enabled)
  circo:         Yes (always enabled)
  twopi:         Yes (always enabled)
  gvpr:          Yes (always enabled)
  gvmap:         Yes (always enabled)
  smyrna:        No (requires: gtk+ gtkglext glade gts glut)
  gvedit:        No (qmake not found)

plugin libraries:
  dot_layout:    Yes (always enabled)
  neato_layout:  Yes (always enabled)
  core:          Yes (always enabled)
  devil:         No (missing library)
  gd:            No (gd headers not found)
  gdiplus:       No (disabled by default - Windows only)
  gdk:           No (gdk library not available)
  gdk_pixbuf:    No (gdk_pixbuf library not available)
  ghostscript:   No (missing Xrender)
  gtk:           No (gtk library not available)
  lasi:          No (missing pangocairo support)
  pangocairo:    No (pangocairo library not available)
  poppler:       No (poppler library not available)
  quartz:        No (disabled by default - Mac only)
  rsvg:          No (rsvg library not available)
  visio:         Yes
  webp:          No (webp library not available)
  xlib:          No (disabled or unavailable)

language extensions:
  gv_sharp:      No (mcs not available)
  gv_d:          No (disabled by default - incomplete)
  gv_go:         No (GO compiler not available)
  gv_guile:      No (guile not available)
  gv_io:         No (disabled by default - no swig support yet)
  gv_java:       No (java not available)
  gv_javascript: No (disabled by default - incomplete)
  gv_lua:        No (lua compiling/linking failed)
  gv_ocaml:      No (ocaml not available)
  gv_perl:       No (missing header)
  gv_php:        No (missing header)
  gv_python3:    No (python3 is too old)
  gv_R:          No (R not available)
  gv_ruby:       No (ruby not available)
  gv_tcl:        No (tcl not available)

  tcldot:        No (tcl not available)
  tclpathplan:   No (tcl not available)
  gdtclft:       No (tcl not available)

Testing utilities:
  criterion:     No (Criterion unit testing framework not installed)

After the compilation:

[root@linux home]# more dot1.txt 
digraph unix {
nodesep=0.486111;
ranksep=0.833333;
remincross=true;
searchsize=500;
subgraph cluster6p0 {label="";subgraph cluster6 {style=solid;color="#000006";labeljust="c";label=<<TABLE BGCOLOR="#000007" FIXEDSIZE="TRUE" WIDTH="106" HEIGHT="25"><TR><TD></TD></TR></TABLE>>;
subgraph cluster6p1 {label="";
subgraph cluster10p0 {label="";subgraph cluster10 {style=solid;color="#00000A";labeljust="c";label=<<TABLE BGCOLOR="#00000B" FIXEDSIZE="TRUE" WIDTH="92" HEIGHT="25"><TR><TD></TD></TR></TABLE>>;
subgraph cluster10p1 {label="";
sh0014 [shape=rect,label="",width=1.541667,height=0.766927,color="#00000E"];

}}}

}}}

}

And it seems to work:

[root@linux home]# dot -V
dot - graphviz version 7.1.0 (20230121.1956)
[root@linux home]# 

[root@linux home]# dot -Tsvg dot1.txt 
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 7.1.0 (20230121.1956)
 -->
<!-- Title: unix Pages: 1 -->
<svg width="232pt" height="241pt"
 viewBox="0.00 0.00 232.00 241.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 237)">
<title>unix</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-237 228,-237 228,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster6p0</title>
<polygon fill="none" stroke="black" points="8,-8 8,-225 216,-225 216,-8 8,-8"/>
</g>
<g id="clust2" class="cluster">
<title>cluster6</title>
<polygon fill="none" stroke="#000006" points="16,-16 16,-217 208,-217 208,-16 16,-16"/>
<polygon fill="#000007" stroke="none" points="59,-188 59,-213 165,-213 165,-188 59,-188"/>
<polygon fill="none" stroke="#000006" points="62,-203.5 62,-209.5 68,-209.5 68,-203.5 62,-203.5"/>
<polygon fill="none" stroke="#000006" points="59,-188 59,-213 165,-213 165,-188 59,-188"/>
</g>
<g id="clust3" class="cluster">
<title>cluster6p1</title>
<polygon fill="none" stroke="#000006" points="24,-24 24,-176 200,-176 200,-24 24,-24"/>
</g>
<g id="clust4" class="cluster">
<title>cluster10p0</title>
<polygon fill="none" stroke="#000006" points="32,-32 32,-168 192,-168 192,-32 32,-32"/>
</g>
<g id="clust5" class="cluster">
<title>cluster10</title>
<polygon fill="none" stroke="#00000a" points="40,-40 40,-160 184,-160 184,-40 40,-40"/>
<polygon fill="#00000b" stroke="none" points="66,-131 66,-156 158,-156 158,-131 66,-131"/>
<polygon fill="none" stroke="#00000a" points="69,-146.5 69,-152.5 75,-152.5 75,-146.5 69,-146.5"/>
<polygon fill="none" stroke="#00000a" points="66,-131 66,-156 158,-156 158,-131 66,-131"/>
</g>
<g id="clust6" class="cluster">
<title>cluster10p1</title>
<polygon fill="none" stroke="#00000a" points="48,-48 48,-119 176,-119 176,-48 48,-48"/>
</g>
<!-- sh0014 -->
<g id="node1" class="node">
<title>sh0014</title>
<polygon fill="none" stroke="#00000e" points="167.5,-111 56.5,-111 56.5,-56 167.5,-56 167.5,-111"/>
</g>
</g>
</svg>

So I am confused :-)

fgreinacher commented 1 year ago

Same within the PlantUML container, the dot output looks slightly different:

--- old.html    2023-04-11 15:45:16
+++ new.html    2023-04-11 15:45:22
@@ -1,19 +1,19 @@
-jetty@b3152304b0b3:~$ dot -v -Tsvg dot.txt
-dot - graphviz version 2.43.0 (0)
-libdir = "/usr/lib/x86_64-linux-gnu/graphviz"
+jetty@d34d2aad4c6c:~$ dot -v -Tsvg dot.txt
+dot - graphviz version 8.0.2 (20230410.1723)
+libdir = "/usr/local/lib/graphviz"
 Activated plugin library: libgvplugin_core.so.6
 Using render: svg:core
 Using device: svg:svg:core
 Activated plugin library: libgvplugin_dot_layout.so.6
 Using layout: dot:dot_layout
 The plugin configuration file:
-       /usr/lib/x86_64-linux-gnu/graphviz/config6a
+       /usr/local/lib/graphviz/config6
                was successfully loaded.
-    render     :  cairo dot dot_json fig gd json json0 map mp pic pov ps svg tk visio vml vrml xdot xdot_json
+    render     :  dot dot_json fig json json0 map mp pic pov ps svg tk xdot xdot_json
     layout     :  circo dot fdp neato nop nop1 nop2 osage patchwork sfdp twopi
-    textlayout :  textlayout
-    device     :  canon cmap cmapx cmapx_np dot dot_json eps fig gd gd2 gif gv imap imap_np ismap jpe jpeg jpg json json0 mp pdf pic plain plain-ext png pov ps ps2 svg svgz tk vdx vml vmlz vrml wbmp webp x11 xdot xdot1.2 xdot1.4 xdot_json xlib
-    loadimage  :  (lib) eps gd gd2 gif jpe jpeg jpg png ps svg webp xbm
+    textlayout :
+    device     :  canon cmap cmapx cmapx_np dot dot_json eps fig gv imap imap_np ismap json json0 mp pic plain plain-ext pov ps ps2 svg tk xdot xdot1.2 xdot1.4 xdot_json
+    loadimage  :  (lib) eps gif jpe jpeg jpg png ps svg
 pack info:
   mode   undefined
   size   0
\ No newline at end of file
@@ -55,48 +55,48 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.43.0 (0)
+<!-- Generated by graphviz version 8.0.2 (20230410.1723)
  -->
 <!-- Title: unix Pages: 1 -->
-<svg width="230pt" height="241pt"
- viewBox="0.00 0.00 230.00 241.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="232pt" height="241pt"
+ viewBox="0.00 0.00 232.00 241.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 237)">
 <title>unix</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-237 226,-237 226,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-237 228,-237 228,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster6p0</title>
-<polygon fill="none" stroke="black" points="8,-8 8,-225 214,-225 214,-8 8,-8"/>
+<polygon fill="none" stroke="black" points="8,-8 8,-225 216,-225 216,-8 8,-8"/>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster6</title>
-<polygon fill="none" stroke="#000006" points="16,-16 16,-217 206,-217 206,-16 16,-16"/>
-<polygon fill="#000007" stroke="transparent" points="58,-188 58,-213 164,-213 164,-188 58,-188"/>
-<polygon fill="none" stroke="#000006" points="61,-203.5 61,-209.5 67,-209.5 67,-203.5 61,-203.5"/>
-<polygon fill="none" stroke="#000006" points="58,-188 58,-213 164,-213 164,-188 58,-188"/>
+<polygon fill="none" stroke="#000006" points="16,-16 16,-217 208,-217 208,-16 16,-16"/>
+<polygon fill="#000007" stroke="none" points="59,-188 59,-213 165,-213 165,-188 59,-188"/>
+<polygon fill="none" stroke="#000006" points="62,-204 62,-210 68,-210 68,-204 62,-204"/>
+<polygon fill="none" stroke="#000006" points="59,-188 59,-213 165,-213 165,-188 59,-188"/>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster6p1</title>
-<polygon fill="none" stroke="#000006" points="24,-24 24,-176 198,-176 198,-24 24,-24"/>
+<polygon fill="none" stroke="#000006" points="24,-24 24,-176 200,-176 200,-24 24,-24"/>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster10p0</title>
-<polygon fill="none" stroke="#000006" points="32,-32 32,-168 190,-168 190,-32 32,-32"/>
+<polygon fill="none" stroke="#000006" points="32,-32 32,-168 192,-168 192,-32 32,-32"/>
 </g>
 <g id="clust5" class="cluster">
 <title>cluster10</title>
-<polygon fill="none" stroke="#00000a" points="40,-40 40,-160 182,-160 182,-40 40,-40"/>
-<polygon fill="#00000b" stroke="transparent" points="65,-131 65,-156 157,-156 157,-131 65,-131"/>
-<polygon fill="none" stroke="#00000a" points="68,-146.5 68,-152.5 74,-152.5 74,-146.5 68,-146.5"/>
-<polygon fill="none" stroke="#00000a" points="65,-131 65,-156 157,-156 157,-131 65,-131"/>
+<polygon fill="none" stroke="#00000a" points="40,-40 40,-160 184,-160 184,-40 40,-40"/>
+<polygon fill="#00000b" stroke="none" points="66,-131 66,-156 158,-156 158,-131 66,-131"/>
+<polygon fill="none" stroke="#00000a" points="69,-147 69,-153 75,-153 75,-147 69,-147"/>
+<polygon fill="none" stroke="#00000a" points="66,-131 66,-156 158,-156 158,-131 66,-131"/>
 </g>
 <g id="clust6" class="cluster">
 <title>cluster10p1</title>
-<polygon fill="none" stroke="#00000a" points="48,-48 48,-119 174,-119 174,-48 48,-48"/>
+<polygon fill="none" stroke="#00000a" points="48,-48 48,-119 176,-119 176,-48 48,-48"/>
 </g>
 <!-- sh0014 -->
 <g id="node1" class="node">
 <title>sh0014</title>
-<polygon fill="none" stroke="#00000e" points="166.5,-111 55.5,-111 55.5,-56 166.5,-56 166.5,-111"/>
+<polygon fill="none" stroke="#00000e" points="167.5,-111 56.5,-111 56.5,-56 167.5,-56 167.5,-111"/>
 </g>
 </g>
 </svg>
fgreinacher commented 1 year ago

stroke="transparent" has changed to stroke="none", could that be relevant?

arnaudroques commented 1 year ago

stroke="transparent" has changed to stroke="none", could that be relevant?

No, both are fine.

However, it looks like it's working with version 8.0.2, right? What I mean, is that when Graphviz is crashing, it does not generate any SVG. So here it looks it does not crash. So is the example working?

I am more and more confused :-)

fgreinacher commented 1 year ago

Yes, dot can render this, also in 8.0.2. The problem only occurs when rendering through PlantUML server, e.g. http://localhost:8080/plantuml/uml/fP9HIyCm58NV-oj2V2qpcLkwqTx2vkfM60ngHL5ywDgmH6jRaXPrO__Tr3bmJ0VYXHouzznxu8DaSgMIIg2ca6zeOnLbnZMlW7Hw0qOfTIsL5C-xoU2YBJFXBx98LQarrAhXhgLvebAXvPf3dn3JDyjTQ9etkkQALGHjycJ9Sy3OFNBHHjVlEGTTvZ9pqp8l5U0pqXR3xkVTaza4d7vru7dnQ3mFq7XwkPWlelssWz5LU1TChiFx070StGGOtOQJU0QOcYWq2yBfB0RSxMFVYoFp9hvtlfEebJRKzty2eDy0ZcnAJW9ISe9mz2V2yU-4m-u_00t18Q4WXFRGWnP9nK7njBRtflqgire0xVHxb3775bokH6s-XyFOiElO1tG1VdGjQxlTxkK3

arnaudroques commented 1 year ago

Yes, dot can render this, also in 8.0.2. The problem only occurs when rendering through PlantUML server, e.g.

Ok, I think I have an idea. Could you check if this simple example is working?

And check if dot -Tpng dot1.txt is working in the container?

Probably both tests are failing.

This would probably mean that GD library is missing during Graphviz build.

fgreinacher commented 1 year ago

Yes, dot can render this, also in 8.0.2. The problem only occurs when rendering through PlantUML server, e.g.

Ok, I think I have an idea. Could you check if this simple example is working?

And check if dot -Tpng dot1.txt is working in the container?

Probably both tests are failing.

This would probably mean that GD library is missing during Graphviz build.

Yes, both are failing, the latter with Format: "png" not recognized. Use one of: canon cmap cmapx cmapx_np dot dot_json eps fig gv imap imap_np ismap json json0 mp pic plain plain-ext pov ps ps2 svg tk xdot xdot1.2 xdot1.4 xdot_json.

I'll check whether installing GD helps!

fgreinacher commented 1 year ago

I'll check whether installing GD helps!

@arnaudroques Looking good, changes are here: https://github.com/plantuml/plantuml-server/pull/272

camaeel commented 1 year ago

@arnaudroques is there any plan to release this fix? Current tomcat and tomcat-v1.2023.5 tags in docker hub are broken.

arnaudroques commented 1 year ago

@arnaudroques is there any plan to release this fix? Current tomcat and tomcat-v1.2023.5 tags in docker hub are broken.

Yes, sorry about that. We've just pushed a new version. Tell us if it is not working for you!

camaeel commented 1 year ago

@arnaudroques Great, thanx!

Anonymodesu commented 1 year ago

Thanks for rolling out the fix so quickly!

fgreinacher commented 1 year ago

@arnaudroques Could you also push a stable tag for this image? We usually don't pull latest 🙇