Ubuntu 系统下在无 root 情况下安装软件
进组后成功拥有组里服务器的使用权限,但为了安全考虑,研一新生不会有root权限。
为了能够畅快使用自己需要的软件,这段时间也是捉摸了一些不使用sudo
就能安装软件的方法,并写在博客中记录一下。
顺便提一下,因为无法使用root权限,因此安装后的程序也无法使用root,需要SUID提权至root的的程序也无法正常运行。
单一可执行进程
不少轻量级软件都会将软件本体编译在一个二进制可执行文件中,例如分布式文件系统juicefs、云存储软件rclone等。这类软件甚至在官网上都会写明“仅有一个二进制文件”。
用户仅需将软件解压缩到自己喜欢的地方,并配置好PATH
路径即可。
我常用的放置这类二进制文件的路径是$HOME/bin
,即自己的用户根目录。为了能够在bash中直接使用,只需要在~/.bashrc
中增加以下内容:
1 |
|
虽然没找到切实的证据,但似乎确实有版本的 Ubuntu/shell 会自动将该目录增加到~/.profile
文件中,在 login shells 的状态下可以直接使用$HOME/bin
中的命令,而无需在.bashrc
中二次设置。
1 |
|
请注意,虽然有很多博客都会强调,在设置PATH
路径时应在前面加上export
,以便“导出”该变量,使之可以让子进程使用。但我的.profile
中确实没有在PATH
之前加上export
,因此我在.bashrc
中延续了这一传统。
值得注意的时,即使未在.bashrc
中设置export PATH
,最终的bash环境中,PATH
变量也是导出状态。
1 |
|
deb包直接解压缩
对于轻量软件而言,可以使用dpkg -x <.deb文件路径> <解压路径>
将deb包中的内容解压到指定目录中即可使用。部分软件安装过程中需要在安装前或安装后执行一定的脚本,这部分我也没学会,建议各位自行摸索XD
deb包解压后的文件目录结构遵循FHS(Filesystem Hierarchy Standard,文件系统层次结构标准),因此我选择在用户根目录下创建属于属于自己的usr目录,并将deb包的解压目录指定为此。
值得注意的是,不同软件包会有不同的依赖关系,在正式使用前需要补足依赖,否则可能导致未知的错误。
源码编译安装
一般不推荐自己编译源码,因为需要安装一系列的开发库文件,或者说是lib-dev文件。
如果一定要自己编译软件包,那我建议选择在package.ubuntu.com
或者使用apt source
下载全部三个文件,以curl
为例
1 |
|
这里只简述了以上文件的含义,有关编译或Debian开发的具体内容可参见Debian开发者手册
这里感谢所有开源贡献者的努力,使得Debian和其他开源项目具有完善且实用的文档
完成以上三个文件的下载并将三个文件放置于同一目录下后,执行dpkg-source -x curl_7.68.0-1ubuntu2.23.dsc
命令,便可在同级目录下生成curl源码。
随后,进入生成的源码目录,这里是curl-7.68.0
,并执行./configure --prefix=<安装目录,例如$HOME/usr/>
命令,即可生成编译和安装所需的Makefile文件。
执行make
编译,编译成功后执行make install
进行安装即可。
通常情况下,在完成./configure
这一后会显示缺少一些库文件,这时候就需要打开package.ubuntu.com
,在源码包页面查找构建时需要的依赖库有哪些,并挨个补足了,例如源码包: curl (7.68.0-1ubuntu2.23) [security]。补足后在执行./configure
命令时,需要按照./configure --help
中的指引传入库文件目录,或在环境变量PKG_CONFIG_PATH
中指定路径。
结语:还是有root权限方便。