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
。