Linux Redhat 5.5のtkdiffエラー

Linux Redhat 5.5のtkdiffエラー

rootとしてインストールしましたが、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これら2つのファイルの違いを確認してください。

$ 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プログラムをrootとして実行するときにユーザー(あなたの場合)として問題のあるファイルをgrepし、ファイルinit.tclシステムの対応する部分を一般ユーザーだけでなく一般ユーザーも使用できるようにすることです。ユーザーはルートを通過できますchmod

関連情報