バイナリパッケージがapt-getまたはソースからのビルドによって再インストールされないのはなぜですか?


1

Debian wheezyサーバーにアスタリスクをインストールしようとしています。このために私は最初に簡単なことをしました

sudo apt-get install asterisk

これは完璧に機能しました。その後、アスタリスクが実行され、次のコマンドを使用してCLIを入力できました。

asterisk -rvvv

いくつかの混乱の後、私はアスタリスクをダンプし、再び再インストールしました:

sudo apt-get remove --purge asterisk
sudo apt-get install asterisk

これは正常に再インストールされ、がsudo service asterisk status表示されますが[ ok ] Asterisk PBX is running.、もうCLIにアクセスできません(asterisk -rvvvと言います-bash: asterisk: command not found)。

それで、私はこの簡単なガイドを使用してソースからそれをインストールしようとしました。すべてのステップは順調に進み、アスタリスクを取得して再度実行できます。しかし、再び、CLIは別のものから開始することを拒否します-bash: asterisk: command not found)。

私がここで間違っていることを誰か知っていますか?または、誰かが私を正しい方向に向けることができますか?すべてのヒントを歓迎します!

回答:


2

シェルがプログラムを見つける方法

あなたが入力するとfoo、シェルのコマンドラインで、それが見えfooシェルので定義されたパスのセットにアップPATH(あなたが実行して調べることができ、環境変数echo $PATH)。

したがって、私の推測では単純です:再インストールする前に持っていたアスタリスクパッケージasteriskは、ユーザーのリストにある場所にバイナリが$PATHあり、パッケージは後でインストールされていました。

これecho $PATHは、シェルで次の出力と相関させることで簡単に確認できます。

$ dpkg -L asterisk | grep bin/asterisk

いずれの場合でも、完全なパス名を指定してバイナリプログラムを実行できます。

シェルでのパス名再キャッシュ

別の可能性は、可能性は低いですが、パス名解決のキャッシュです。bash含まれる対話型シェルは、リストからむき出しのプログラムの名前を$PATH一度だけ検索し、見つかった完全な場所を記憶します。その後、その場所からプログラムを削除すると、プログラムのファイルがにリストされている他の場所でアクセス可能になった場合でも、シェルはそれを実行できなくなります$PATH

シェルを実行hash -rすると、シェルを支援できます(プロンプトで確認help hashしてbashください)。

その他

一般的な場合、次のことに注意してください

apt-get remove --purge asterisk
apt-get install asterisk

つまり、削除とインストールのサイクルを実行し、利用可能なアーカイブに基づいてAPTシステムに認識されているパッケージのバージョンがインストールされます。つまり、を使用して手動でビルドしたバージョンを直接dpkg -i ...インストールした場合、後で同じ名前のパッケージを削除してインストールしても、APTはこの同じバージョンを見つけてインストールしようとしません。

手作りのasteriskパッケージを一般的なインストールに使用できるようにする場合は、適切なローカルDebianリポジトリを維持する必要があります(reprepro使用するのに最も簡単なツールであり、を参照apt-ftparchive)。それをローカルAPTシステムに知らせ、APTプリファレンスを使用して、リポジトリからパッケージを作成することをお勧めします


1
バイナリが実際/usr/binに私のPATHになかったことが判明しました。.bashrcに追加しただけで解決しました。インスピレーションと広範で素晴らしい答えをありがとう!あなたは私の一日を作りました!
kramer65 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.