假设我以用户身份通过ssh访问某些Ubuntu服务器,并且为了方便起见,我需要安装一些非系统工具(mc,rtorrent,mcedit)。我不想打扰这些小程序的管理员。
有没有一种方法可以安装它们(使它们运行)而不使用类似的东西sudo apt-get install
?
假设我以用户身份通过ssh访问某些Ubuntu服务器,并且为了方便起见,我需要安装一些非系统工具(mc,rtorrent,mcedit)。我不想打扰这些小程序的管理员。
有没有一种方法可以安装它们(使它们运行)而不使用类似的东西sudo apt-get install
?
Answers:
编译并安装到~/bin
(并编辑.bashrc
以设置PATH
为包括它)。库可以类似地编译并安装到~/lib
(LD_LIBRARY_PATH
指向它),开发标头可以安装在eg中~/includes
。
根据您要安装的程序的具体细节以及它们所依赖的库,您可以下载.deb文件,并使用' dpkg-deb -x
'将其提取到主目录下。然后,您将有很多“有趣”设置的PATH
,LD_LIBRARY_PATH
以及其他variables
。您要安装的程序或应用程序越复杂,您将获得的乐趣越多:)
当然,您将无法以setuid
这种方式安装二进制文件-它们将被安装,但是(由于您无权将它们root或设置为setuid
二进制),它们将只是您拥有的普通二进制文件。
同样地,预计要运行的某个守护程序和系统服务UID
或有更改uid,或希望文件是在能力/etc
相当~/etc
等不太可能,如果在所有,运行良好。
大多数系统管理员会考虑mc
,并mcedit
是“大多是无害的”,无害的程序。
但是,很少有人会考虑安装Torrent客户端是无害的,尤其是如果他们必须支付带宽费用或最终要承担法律责任时。对于最终用户在未经许可的情况下安装此类软件,大多数系统管理员可能不会完全满意。他们可能会说“确定,继续前进,将自己踢倒”,或者他们可能不会...但是您应该询问任何可能对机器所有者/管理员造成问题的问题。
LD_LIBRARY_PATH
是个恶作剧。这在这里也适用吗,还是我误解了?
dpkg-deb -x
到本地目录)。像魅力一样工作。我不必做任何LD_LIBRARY_PATH
改动。即使必须这样做,我也将在同一命令行中执行此操作,以免影响全局设置(例如$ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher
)。
您需要从源代码编译它们。应该只是一个问题
apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install
二进制文件将位于中~/myapps/bin
。因此,添加export PATH="$HOME/myapps/bin:$PATH"
到您的.bashrc
文件并使用重新加载.bashrc
文件source ~/.bashrc
。当然,这假定gcc已安装在系统上。
我遇到了同样的问题,假设您有一台具有相同操作系统和体系结构的linux服务器,这就是我如何快速修复它。
在您控制的系统上安装软件
找到可执行的示例which python
并将其复制到~/
使用以下命令复制库:
ldd "$(which python)" | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
将可执行文件和库转移到您仅具有本地特权的其他系统,然后运行以下命令:
mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib
这将创建一个文件夹~/lib
来存储库,将其添加到您的路径,并告诉LD在此处查看库,因此只需在其中添加可执行文件和库,现在就可以像在其他地方一样运行它了
这可能很hacky,但是它非常可移植,快速,而且我还没有找到无法以这种方式运行的功能,当然,该软件无法尝试执行需要root用户访问权限的操作,例如绑定到较低的端口比1024等