我有时会遇到未提供.deb
或.rpm
仅作为可执行文件提供的软件。
例如视觉工作室代码,网络风暴或者坎巴拉太空计划。
对于这个问题,我将以Visual Studio Code作为参考点。
该软件以压缩包形式提供。
解压缩时,我留下一个名为 的文件夹,VSCode-linux-x64
其中包含名为 的可执行文件Code
。
我可以双击Code
或用我的终端指向它/home/user/Downloads/VSCode-linux-x64/Code
来执行它。
但是,我想知道是否有正确的方法来安装此应用程序。
我想要实现的是:
- 我可以放置以这种方式提供的所有应用程序/软件(可执行文件)的一个地方
- 终端支持(这意味着例如:我可以
vscode
从终端中的任何文件夹写入,它将自动执行 Visual Studio Code。
附加信息:
- 桌面环境:侏儒3
- 操作系统:德班
编辑:
我决定给@kba 答案,因为他的方法更适合我的备份解决方案,除此之外。让脚本执行二进制文件使您可以添加参数。
但公平地说,@John WH Smith 的方法与@kba 的方法一样好。
答案1
要通过名称调用程序,shell 会搜索$PATH
环境变量中的目录。在 Debian 中,您的用户的默认值$PATH
应包括/home/YOUR-USER-NAME/bin
(即~/bin
)。
首先确保该目录~/bin
存在,如果不存在则创建它:
mkdir -p ~/bin
您可以将二进制文件符号链接到该目录,以使其可供 shell 使用:
mkdir -p ~/bin
ln -s /home/user/Downloads/VSCode-linux-x64/Code ~/bin/vscode
vscode
这将允许您在命令行或命令启动器上运行。
注意:您还可以将二进制文件复制到$PATH
目录,但如果它们依赖于相对路径,则可能会导致问题。
不过,一般来说,最好使用操作系统(apt-get、deb 包)或软件项目的构建工具提供的方式正确安装软件。这将确保正确设置相关路径(如启动脚本、手册页、配置等)。
更新:也反映出托马斯·迪基的评论和法希姆·米萨的回答我通常对带有顶级二进制文件的 tarball 形式的软件执行以下操作:
将其放在一个合理的位置(按照标准合规性的顺序/opt
,/usr/local
或主目录中的文件夹(例如),并在某个位置(例如或)~/build
创建可执行脚本包装器,该包装器更改为该位置并执行二进制文件:$PATH
/usr/local/bin
~/bin
#/bin/sh
cd "$HOME/build/directory"
exec ./top-level-binary "$@"
由于这模拟了对该目录的更改并手动执行二进制文件,因此可以更轻松地调试诸如不存在的相对路径之类的问题。
答案2
根据TLDP,/opt
可能是此类软件的好地方。我自己用它来存储一些与打印机相关的工具,以及Skype的“动态”版本(正如kba所说,“终端支持”可以通过PATH
相应地设置变量来实现)。
更一般地说,我倾向于/opt
“安装”打包为可执行文件的专有软件,但这可能只是我的情况。此外,我倾向于避免使用这种软件,因为我通常不确定一旦运行它会做什么。
我选择的另一个原因/opt
是因为它通常适用于第三方独立代码,这些代码不依赖于其/opt/'package'
目录之外的任何文件(以及其他opt
目录,例如/etc/opt
)。
在任何情况下,其他包文件都不能存在于 /opt、/var/opt 和 /etc/opt 层次结构之外,除了那些必须驻留在文件系统树中特定位置才能正常运行的包文件。 [...] 一般来说,支持系统上的包所需的所有数据都必须存在于 /opt/'package' 中,包括要复制到 /etc/opt/'package' 和 /var/opt/' 中的文件package' 以及 /opt 中的保留目录。
发布源代码的优点之一是人们可以配置编译过程,根据系统的具体情况提供自定义库/标头路径。当开发人员决定将代码作为可执行文件发布时,这种优势就会消失。恕我直言,此时,开发人员不再被允许假设他/她的程序的依赖项将可用(这就是为什么所有内容都应该与可执行文件一起打包)。
要在此处安装的任何软件包都必须在单独的 /opt/'package' 或 /opt/'provider' 目录树中找到其静态文件(即额外的字体、剪贴画、数据库文件)(类似于 Windows 安装的方式)新软件到其自己的目录树 C:\Windows\Progam Files\"程序名称"),其中“package”是描述软件包的名称,“provider”是提供商的 LANANA 注册名称。
有关更多信息,我还建议阅读其他 U&L 问题/opt
,它处理和之间的差异/usr/local
。我个人会避免/usr/local
这种情况,特别是如果我不是那个建成我正在安装的程序。
答案3
从二进制 zip 存档或 tarball 创建分发二进制包是完全可能的,而且实际上非常容易,如 Visual Studio Code 示例中所示。
deb
是的,像s 和s 这样的Linux 发行版二进制包rpm
通常是从源代码生成的,但并非必须如此。通常(尽管并非总是)可以安排一些东西,以便生成的分发二进制包将东西安装在“正确”的位置以符合分发策略。
在随机专有 tarball 的情况下,如果有一种方法可以正确安装软件,例如 makefile 中的安装目标,那么它可以与分发包装机器一起使用。否则,这可能涉及“手动”将文件映射到“正确”的位置,这可能需要大量工作。虽然创建这样的包可能看起来很奇怪,但它仍然具有包管理的主要好处之一,即全新安装和卸载。当然,这样的软件包永远不会被任何名副其实的 Linux 发行版所接受,但这不是你的问题。
答案4
ln -s </path/to/executable> /usr/local/bin/<program-name>
应该做这项工作。本地软件的标准位置是/opt
,因此我建议在使用上面的命令安装之前将软件文件夹/文件移动到那里。