Answers:
二进制软件包的编译是假设它们将安装到中的特定位置/
。这并不总是容易改变的,并且需要额外的QA努力(首先这很困难!)来确定特定二进制文件是否可重定位。
在某种程度上,您可以使用fakechroot之类的内容以非root用户身份在子目录中创建整个系统,但这是乏味且脆弱的。
使用源代码包会更好。 Gentoo Prefix和Rootless GoboLinux都是软件包管理器,它们可以安装在非/
位置,并且非root
用户可以使用。
/
这听起来像是一项要求,也许在30年前就可以了,但现在还没有。例如,该env
程序不是要解决此类问题吗?如果不是这样,很容易想到一种配置任何二进制文件以在特定位置查找其他二进制文件的方案。
/etc
或(根据我的知识)/usr/lib/<packagename>/
或没有环境变量/usr/libexec/<packagename>/
。/usr/share
可以通过本世纪某个时候发布的XDG变量进行更改,并且不一定在较早的程序中采用。
有一个软件包管理器项目-Nix-一个有趣的基础思想(“ 功能性 ” pkg管理器),它还支持按用户操作:
多用户支持
从版本0.11开始,Nix具有多用户支持。这意味着非特权用户可以安全地安装软件。每个用户可以具有不同的配置文件,即Nix存储区中出现在用户PATH中的一组软件包。如果用户安装了另一个用户先前已安装的软件包,则不会再次构建或下载该软件包。同时,一个用户不可能将特洛伊木马注入到可能被另一用户使用的程序包中。
我要补充的注意事项: Nix
应该可以在您选择的类Unix系统中使用(例如Linux发行版)。
还可以通过Nix软件包管理器( Nixpkgs)安装相关的大量软件包,这些软件包是为许多平台构建的:
- 32位和64位x86上的GNU / Linux(i686-linux和x86_64-linux)
- Mac OS X(i686-darwin和x86_64-darwin)
- FreeBSD(i686-freebsd和x86_64-freebsd)
- OpenBSD(i686-openbsd)
- Windows / Cygwin(i686-cygwin),
和相关的发行版-NixOS:
NixOS是基于Nix的Linux发行版。它不仅使用Nix进行软件包管理,还使用它来管理系统配置(例如,在/ etc中构建配置文件)。这意味着,除其他事项外,可以轻松地将系统的整个配置回滚到较早的状态。另外,用户可以安装没有root特权的软件。阅读更多…
以及相关的“连续”构建系统Hydra。
nix
和之间的区别是什么guix
。既然现在我真的nix
在工作中使用,我想知道是否可以考虑将其guix
作为所需工具的另一种实现。我可以在某处阅读差异摘要吗?也许,您甚至可以在这里用这样的总结写一个答案,宣布另一个替代解决方案?
首先,这是由于依赖性。用户可能未安装某些软件包-如PolicyKit。因此,这将给打包者贡献额外的负担,他们需要提供空闲时间,并且通常安装程序就像键入sudo
(单用户工作站)或烦扰管理员一样容易。
$ HOME中有安装选项
./configure --prefix=$HOME/sandbox --enable-cool-feature && make all install
(或类似jhbuild的变体)。另一个型号截然不同的是0install。它基于这样的想法:您实际上并没有安装软件包,而只是从全局名称空间运行它们,该名称空间会下载,必要时进行编译并缓存要使用的软件。
我的经验确实仅限于yum,但我不明白为什么我无法将回购文件放入〜/ etc / yum.repos.d并让yum将所有内容都安装到家庭帐户中。
主流的Linux软件包管理器将世界视为sysadmin,它将机器视为单个实体。这使您可以获得诸如“系统X适用于哪些未解决的勘误表”和“系统X与系统Y有何不同”之类的问题的答案。这还允许yum具有可用的“历史记录”,具有rpmdb版本以及执行“ yum --security update”等操作。
有一些软件包管理器,例如“零安装”,它们试图像用户那样查看世界……即。什么应用程序做我有机会获得。
您可能会认为后者是更好的模型,但是IMNSHO的原因是您没有听说过零安装,但听说过yum。
有一个新成员即将到来:“ JuNest(被监禁的用户NEST)-基于Arch Linux的发行版,可在任何Linux发行版上运行而无需root访问。” @https ://github.com/fsquillace/junest 优点是它没有引入新的软件包格式,因此在非常容易安装(最少:约320M)之后,便有了完整的Arch Linux存储库(超过13000个)包ATM)就在您的指尖。
具体来说installpkg
,Slackware使用的工具可以。从手册页:
--root /otherroot
Install using a location other than / (the default) as the root of the
filesystem to install on. In the example given, use /otherroot instead.
Setting the ROOT environment variable does the same thing.
但是,我不知道能做到这一点的任何更好的前端(例如slapt-get
,据我所知,不能做到这一点)。从理论上讲,你应该能够别名installpkg
来installpkg --root ~/Apps
-不过,我认为最前端需要root运行,这违背了点。
它基本上是macOS的brew分支,并且已经预编译了二进制文件以供使用...
特别适用于处理较旧的gcc版本。
如果您真的想手动安装,则有用的指南是 http://www.linuxfromscratch.org/
Yum需要写入数据库,该数据库由root拥有。因此,您不能以普通用户的身份使用它。
您可以尝试在所选目录内解压缩rpm文件(rpm2cpio package.rpm | cpio -idmv)。
但是,当您执行程序时,必须注意修改LD_LIBRARY_PATH以便加载从属库。同样,这将不会处理任何依赖项。
例:
# mkdir new_root
# cd new_root
# wget ftp://mirror.switch.ch/pool/4/mirror/centos/6.7/os/x86_64/Packages/vim-enhanced-7.4.629-5.el6.x86_64.rpm
# rpm2cpio vim-enhanced-7.4.629-5.el6.x86_64.rpm | cpio -idmv
# ./usr/bin/vim -version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jul 24 2015 02:23:23)
上面没有任何依赖的库,否则您将不得不使用类似的东西:
export LD_LIBRARY_PATH=./usr/lib ./usr/bin/program
/bin
),或者可以假定它安装在--prefix指定的地方。尽管后者可能会被那些项目解决,但是前者需要在源代码上打补丁。