假设我以用户身份通过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等