yum本身不支持全局修改软件包安装路径,所有RPM包始终安装至标准路径(如/usr、/etc、/var),这是由RPM数据库和系统依赖机制硬编码决定的;--installroot仅用于chroot构建环境,对日常yum install无效;真正可行的路径定制方式包括源码编译时用--prefix指定、pip install --target/--prefix控制Python包位置、以及通过服务配置文件迁移工作目录。

yum 本身不支持全局修改软件包安装路径,它始终将 RPM 包解压到标准位置(如 /usr、/etc、/var 等),这是 RPM 数据库和系统依赖机制决定的。你无法通过改 yum.conf 的 installroot 来重定向已安装的 RPM 包——那个配置只影响 chroot 构建环境,对日常 yum install 无效。
真正可控、且被广泛使用的路径定制方式,分三类:源码编译安装、Python pip 安装、以及服务级工作目录迁移。下面按实际场景说明。
源码编译时用 --prefix 指定安装根目录
这是最常见也最可靠的自定义路径方式,适用于从 tar.gz 解压后执行 ./configure 的软件(如 nginx、redis、ffmpeg)。
-
./configure --prefix=/data/app/nginx是关键参数,它决定bin/、conf/、logs/等子目录的上级路径 - 必须在
make && make install前设置,中途修改需重新make clean - 安装后记得把
/data/app/nginx/bin加入$PATH,否则命令找不到 - 注意:有些软件(如 Python 自身)的
--prefix会影响后续pip默认行为,需额外处理
pip install --target 或 --prefix 控制 Python 包位置
CentOS 7 默认的 pip(尤其 py2.7 或 py3.6+)不读取 ~/.pip/pip.conf 的 target,必须显式传参;否则一律落到 /usr/lib/python2.7/site-packages/ 或用户级 ~/.local/lib/。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 装到指定目录:
pip install --target /data/pylib/requests requests - 或指定 prefix(更接近系统级安装):
pip install --prefix /data/pyenv/ numpy,此时会写入/data/pyenv/lib/python3.x/site-packages/ - 用前要确保
PYTHONPATH包含目标路径,例如:export PYTHONPATH=/data/pylib:$PYTHONPATH - 注意:
--target不处理依赖自动递归,--prefix可能因权限失败,建议加--user配合chown目标目录
服务程序(如 Jenkins)靠配置文件改工作目录
这类软件不靠安装路径,而靠启动时读取的配置项决定数据落盘位置,yum install 只负责二进制和 systemd 单元文件。
- Jenkins 修改
/etc/sysconfig/jenkins中的JENKINS_HOME="/data/jenkins",再cp -a /var/lib/jenkins/ /data/并修正属主:chown -R jenkins:jenkins /data/jenkins - PostgreSQL 修改
/var/lib/pgsql/data路径,需先停服务、initdb -D /data/pgdata、更新postgresql.conf的data_directory - 关键点:不能只改路径,还要同步迁移已有数据 + 修正权限 + 重启服务,漏一步就起不来
yum install 的下载缓存和 RPM 数据库存放位置可调,但安装路径不可动
有人误以为改 yum.conf 就能改变安装位置,其实只能调以下两个位置:
-
cachedir=/data/yum-cache:控制.rpm下载包缓存位置,不影响安装结果 -
rpmdbpath=/data/rpmdb:RPM 数据库路径(默认/var/lib/rpm),改了要重建数据库:rpm --rebuilddb --dbpath /data/rpmdb - 强行改
installroot不会改变yum install httpd把文件放到/usr/sbin/httpd的行为——那是 RPM spec 文件硬编码的
/ 分区空间。这时候优先考虑:把大体积服务(Jenkins、Maven repo、日志目录)迁出,而不是试图让 yum 违背设计原则。硬改系统级路径容易引发依赖断裂、SELinux 上下文错乱、升级失败等连锁问题。

















