为什么二进制包不能通过 apt-get 或从源代码重新安装?

为什么二进制包不能通过 apt-get 或从源代码重新安装?

我正在尝试在我的 Debian wheezy 服务器上安装 Asterisk。为此,我首先做了简单的

sudo apt-get install asterisk

这工作得很完美。之后,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)。

所以我尝试使用以下方法从源代码安装它这个简单的指南。所有步骤都顺利,我可以再次启动并运行 asterisk。但是 CLI 再次拒绝启动另一个-bash: asterisk: command not found)。

有人知道我做错了什么吗?或者有人能给我指出正确的方向吗?欢迎提供所有提示!

答案1

shell 如何找到你的程序

当您foo在 shell 的命令行中输入内容时,它会查找foo由 shell 的环境变量定义的一组路径PATH(您可以通过运行来检查echo $PATH)。

所以我的猜测很简单:重新安装之前所拥有的星号包的二进制文件asterisk位于用户列出的位置$PATH,而之后安装的包将其安装在其他地方。

echo $PATH您可以通过在 shell 中关联以下输出来轻松检查这一点

$ dpkg -L asterisk | grep bin/asterisk

无论如何,您可以通过指定其完整路径名来运行二进制程序。

Shell 中的路径名解析缓存

另一种可能性(尽管可能性较小)是路径名解析缓存。交互式 shell bash(包括)只在列表中查找$PATH一次裸程序的名称,然后记住找到的完整位置。如果您随后从该位置删除该程序,shell 将无法再运行它,即使该程序的文件现在可以在 中列出的其他位置访问$PATH

您可以通过在 shellhash -r中运行来帮助它(请参见help hash您的bash提示)。

杂项

请注意,在一般情况下,当你这样做

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

即执行删除+安装循环,包的版本根据 APT 系统获取的档案,该系统已获悉已安装。也就是说,如果您已通过 直接安装了手动构建的版本dpkg -i ...,则当您稍后删除并安装同名软件包时,APT 将不会尝试查找和安装此相同版本。

如果你想让你手工构建的asterisk软件包可用于一般安装,你必须维护一个合适的本地 Debian 存储库(reprepro这是最简单的工具,另请参阅apt-ftparchive),让它为你的本地 APT 系统所知,并可能使该存储库中的软件包成为首选,使用APT 偏好

相关内容