在Snap容器中启动非标准库路径的Tcl/Tk程序(gitk/git-gui)
Snap容器中Gitk/Git-gui的Tcl/Tk库路径问题
问题背景
我开发的Git前端工具需要启动gitk和git-gui这两个Tcl/Tk程序,在常规Linux系统运行正常,但在Snap容器中出现异常。Snap容器的文件系统根路径带前缀,实际的Tcl/Tk库路径为:
/snap/multigit/x21/usr/share/tcltk/tcl8.6 /snap/multigit/x21/usr/share/tcltk/tk8.6
容器内测试过程
未调整环境变量时的错误
直接执行gitk,出现路径查找失败:
osboxes@osboxes:/snap/multigit/x21/usr/share/tcltk$ gitk application-specific initialization failed: Can't find a usable init.tcl in the following directories: /usr/share/tcltk/tcl8.6 /snap/multigit/x21/usr/lib/tcl8.6 /snap/multigit/x21/lib/tcl8.6 /snap/multigit/x21/usr/library /snap/multigit/x21/library /snap/multigit/x21/tcl8.6.12/library /snap/multigit/tcl8.6.12/library This probably means that Tcl wasn't installed properly. Error in startup script: can't find package Tk while executing "package require Tk" (file "/snap/multigit/x21/usr/bin/gitk" line 10)
尝试指定TCL_LIBRARY为公共目录
设置环境变量指向Tcl/Tk的公共父目录:
export TCL_LIBRARY="/snap/multigit/x21/usr/share/tcltk"
再次执行gitk仍报错:
osboxes@osboxes:/snap/multigit/x21/usr/share/tcltk$ gitk application-specific initialization failed: Can't find a usable init.tcl in the following directories: /snap/multigit/x21/usr/share/tcltk /snap/multigit/x21/usr/share/tcl8.6 /usr/share/tcltk/tcl8.6 /snap/multigit/x21/usr/lib/tcl8.6 /snap/multigit/x21/lib/tcl8.6 /snap/multigit/x21/usr/library /snap/multigit/x21/library /snap/multigit/x21/tcl8.6.12/library /snap/multigit/tcl8.6.12/library This probably means that Tcl wasn't installed properly. Error in startup script: can't find package Tk while executing "package require Tk" (file "/snap/multigit/x21/usr/bin/gitk" line 10)
指定TCL_LIBRARY为Tcl库目录
设置环境变量指向具体的Tcl库目录:
export TCL_LIBRARY="/snap/multigit/x21/usr/share/tcltk/tcl8.6"
此时gitk能启动,但提示缺少msgcat包:
osboxes@osboxes:/snap/multigit/x21/usr/share/tcltk$ gitk Error in startup script: can't find package msgcat while executing "package require msgcat" (file "/snap/multigit/x21/usr/bin/gitk" line 12279)
查找发现msgcat位于Tcl库的子目录中:
osboxes@osboxes:/snap/multigit/x21/usr/share/tcltk$ find . | grep msgcat ./tcl8.6/tcl8/msgcat-1.6.1.tm
尝试传递多路径到TCL_LIBRARY
尝试多种多路径写法(分号、冒号、逗号、空格分隔),均失败:
export TCL_LIBRARY="/snap/multigit/x21/usr/share/tcltk/tcl8.6;/snap/multigit/x21/usr/share/tcltk/tcl8.6/tcl8" export TCL_LIBRARY="/snap/multigit/x21/usr/share/tcltk/tcl8.6:/snap/multigit/x21/usr/share/tcltk/tcl8.6/tcl8" export TCL_LIBRARY="/snap/multigit/x21/usr/share/tcltk/tcl8.6,/snap/multigit/x21/usr/share/tcltk/tcl8.6/tcl8" export TCL_LIBRARY="/snap/multigit/x21/usr/share/tcltk/tcl8.6 /snap/multigit/x21/usr/share/tcltk/tcl8.6/tcl8"
所有写法均触发相同的初始化错误:
osboxes@osboxes:/snap/multigit/x21/usr/share/tcltk$ gitk application-specific initialization failed: Can't find a usable init.tcl in the following directories: {/snap/multigit/x21/usr/share/tcltk/tcl8.6 /snap/multigit/x21/usr/share/tcltk/tcl8.6/tcl8} {/snap/multigit/x21/usr/share/tcltk/tcl8.6 /snap/multigit/x21/usr/share/tcltk/tcl8.6/tcl8.6} /usr/share/tcltk/tcl8.6 /snap/multigit/x21/usr/lib/tcl8.6 /snap/multigit/x21/lib/tcl8.6 /snap/multigit/x21/usr/library /snap/multigit/x21/library /snap/multigit/x21/tcl8.6.12/library /snap/multigit/tcl8.6.12/library This probably means that Tcl wasn't installed properly. Error in startup script: can't find package Tk while executing "package require Tk" (file "/snap/multigit/x21/usr/bin/gitk" line 10)
求助问题
如何让Tcl通过TCL_LIBRARY递归查找库文件,或者如何向TCL_LIBRARY传递多个有效路径?
内容的提问来源于stack exchange,提问作者Philippe F
相关产品推荐
相关产品推荐

