Linux Redhat 5.5의 tkdiff 오류

Linux Redhat 5.5의 tkdiff 오류

루트로 설치 했는데 tkdiff해당 사용자에서는 제대로 작동하지만 로컬 사용자로 전환하면 오류가 발생합니다.

응용 프로그램 초기화 실패: 다음 디렉터리에 사용 가능한 init.tcl이 없습니다:
/usr/local/lib/tcl8.0 /pune/tools/synopsys/vera/2009.12-6/vera_vD-2009.12-6_linux/lib/tcl8 .0 / pune/tools/synopsys/vera/2009.12-6/tcl8.0/library /pune/tools/synopsys/vera/2009.12-6/vera_vD-2009.12-6_linux/library

이는 Tcl이 올바르게 설치되지 않았음을 의미할 수 있습니다.

시작 스크립트 오류:
"package require Tk 8.0"(파일 "./tkdiff" 라인 32) 실행 시 패키지 Tk 8.0을 찾을 수 없습니다.

어떻게 해결할 수 있나요?

답변1

TCL/Tk 설치는 어디서 이루어지나요? Synopsys, 특히 Vera 소프트웨어와 함께 번들로 제공되는 것 같습니다. 정말로 tkdiff와 함께 TCL/Tk 버전을 사용하시겠습니까?

제 생각에는 이것이 $PATH문제입니다. tkdiff사용하기 위해 만들어진 올바른 설치를 선택하는 대신 Synopsys에서 제공하는 설치를 사용하고 있습니다.

tkdiff 패키지

저는 CentOS 5.8을 사용하고 있으며 tkdiff.

$ yum search tkdiff
Loaded plugins: fastestmirror
========================================================= Matched: tkdiff ==========================================================
tkcvs.noarch : Graphical interface to the CVS and Subversion

tkdiff다음 명령을 사용하면 실행 파일이 실제로 이 패키지의 일부인지 확인할 수 있습니다 .

$ repoquery -l tkcvs |  grep tkdiff
/usr/bin/tkdiff

이 패키지는 다음과 같은 다른 패키지에 종속됩니다.

$ yum deplist tkcvs
Loaded plugins: fastestmirror
Finding dependencies: 
package: tkcvs.noarch 8.2.2-1.el5.rf
  dependency: /usr/bin/env
   provider: coreutils.x86_64 5.97-34.el5_8.1
  dependency: /bin/sh
   provider: bash.x86_64 3.2-32.el5
   provider: bash.x86_64 3.2-32.el5_9.1
  dependency: tcl
   provider: tcl.x86_64 8.4.13-6.el5
   provider: tcl.i386 8.4.13-6.el5
  dependency: tk
   provider: tk.x86_64 8.4.13-5.el5_1.1
   provider: tk.i386 8.4.13-5.el5_1.1

확인하다

$PATH시스템에서 Synopsys 소프트웨어를 일시적으로 제거한 다음 Synopsys를 참조하지 않고 부팅을 시도하여 tkdiff내 가설을 테스트 할 수 있습니다.

다음 경로 중 하나도 포함하지 않고 $PATH 변수를 설정하기만 하면 됩니다.

  • /usr/local/lib/tcl8.0
  • /pune/tools/synopsys/vera/2009.12-6/vera_vD-2009.12-6_linux/lib/tcl8.0
  • /pune/tools/synopsys/vera/2009.12-6/tcl8.0/library
  • /pune/tools/synopsys/vera/2009.12-6/vera_vD-2009.12-6_linux/library

$TCL또한 변수 나 $TCL*유형 변수가 이러한 디렉터리를 참조하지 않는지 확인하세요 .

userA에는 유효하지만 userB에는 유효하지 않습니다. 디버깅하는 방법은 무엇입니까?

userA에서는 작동하지만 userB에서는 작동하지 않는 상황이 발생한 경우 환경 구성 문제일 가능성이 높습니다. 이를 디버깅하려면 다음을 수행합니다.

[userA]$ env > userA_env.txt
[userB]$ env > userB_env.txt

그런 다음 diff이 두 파일의 차이점을 확인하세요.

$ diff -y userA_env.txt userB_env.txt | less
rvm_gemsets_path=/home/saml/.rvm/gemsets                        rvm_gemsets_path=/home/saml/.rvm/gemsets
MANPATH=/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:   MANPATH=/home/saml/apps/perl5/perlbrew/perls/perl-5.14.0/man:
ORBIT_SOCKETDIR=/tmp/orbit-saml                                 ORBIT_SOCKETDIR=/tmp/orbit-saml
rvm_scripts_path=/home/saml/.rvm/scripts                        rvm_scripts_path=/home/saml/.rvm/scripts
PERLBREW_VERSION=0.59                                           PERLBREW_VERSION=0.59
HOSTNAME=grinchy                                                HOSTNAME=grinchy
rvm_bin_path=/home/saml/.rvm/bin                                rvm_bin_path=/home/saml/.rvm/bin
IMSETTINGS_INTEGRATE_DESKTOP=yes                                IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/tmp/keyring-Xewu2I/gpg:0:1                      GPG_AGENT_INFO=/tmp/keyring-Xewu2I/gpg:0:1
PERLBREW_PERL=perl-5.14.0                                       PERLBREW_PERL=perl-5.14.0
...

왼쪽 항목은 사용자 A의 항목이고 오른쪽 항목은 사용자 B의 항목입니다.

답변2

이런 종류의 문제를 해결하는 일반적인 지름길은 strace프로그램을 루트로 실행할 때 사용자(귀하의 경우)로서 문제가 있는 파일을 grep init.tcl하고 파일 시스템의 해당 부분을 일반 사용자뿐만 아니라 일반 사용자도 사용할 수 있도록 만드는 것입니다. 사용자는 루트를 통과할 수 있습니다 chmod.

관련 정보