루트로 설치 했는데 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
.