马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
机房里新上架一台机器、或者客户现场只给了内网不给外网时,最尴尬的就是源码装 GCC 要一路 make 半小时。这种情况走离线包是最快的:提前在有网的机器上把 rpm 全打下来,拷到目标机一次装完。本文记录离线安装 GCC 与 GCC-C++ 的完整步骤,以及几个必须注意的参数。
一、离线包从哪来
离线安装包一般从同版本系的机器上用 yum 的下载功能把 rpm 拉到本地目录,例如:
mkdir -p /tmp/gcc-offline
yum install --downloadonly --downloaddir=/tmp/gcc-offline gcc gcc-c++
这样 /tmp/gcc-offline 里会出现一堆 .rpm 文件。用 U 盘或内网传输拷到目标机的同一个目录里即可。注意目标机与源机的系统大版本要一致(比如都是 CentOS 7),跨大版本拿 rpm 很容易装出依赖地狱。
二、解压(zip 包的情况)
如果拿到的是别人打包好的 zip 压缩包,先解压:
unzip GCC离线安装.zip
进入解压后的目录,确认里面有 gcc 和 gcc-c++ 两个子目录:
cd GCC离线安装/gcc
ls
三、安装全部 rpm
进到 rpm 所在目录后,一次性装上:
cd GCC离线安装/gcc
rpm -Uvh *.rpm --nodeps --force
这里逐条解释一下参数:
- -U 是升级安装,包已存在就顶掉旧版本,不存在就直接装,对离线场景比 -i 更省事。
- -v 输出过程,方便盯着有没有卡住。
- -h 用进度条显示,包多的时候能看出进度。
- --nodeps 跳过依赖关系检查,离线时几乎必带,因为依赖包很可能没打全。
- --force 强制覆盖,遇到文件冲突时不会直接中断。
只装单个包时用另一个形式:
rpm -i 文件名.rpm
四、验证装没装成功
gcc --version
g++ --version
rpm -qa | grep -E "^gcc|^gcc-c\+\+"
能打印出版本号、grep 能看到对应包,就说明这一轮落地完成。
五、--nodeps 带来的坑
这是离线安装最容易翻车的地方。跳过依赖检查意味着系统不会替你补上依赖包,装是装上了,运行时却可能报缺 so 文件。建议装完之后跑一遍业务相关的编译命令做真实验证,而不是只看 rpm 返回成功:
echo 'int main(){return 0;}' > /tmp/t.c
gcc /tmp/t.c -o /tmp/t && /tmp/t && echo ok
如果确实缺依赖,回到有网的机器上按缺失包名补下 rpm,再拷过去单独装。
六、更省事的做法:只补一个源
如果目标机能通内网 yum 源,其实不必走离线包,直接把源配成内网镜像,一条命令就能补齐:
yum -y install gcc gcc-c++
离线包真正的价值在于 environments 完全隔离的场景:客户机器不能连任何源、也不能拷大文件、且必须留痕审计。日常维护里,能用源就别走离线。
七、多版本共存时切换默认编译器
离线包里如果同时带了多个版本,装完默认是按包优先级决定的。要手动指定用哪个,可以用 alternatives 注册一下:
sudo alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100
sudo alternatives --config gcc
之后 gcc 指向的就是你选的那一个,升级其他包不会悄悄改回去。
八、离线包目录怎么带回去
拷贝时别只拷 rpm 文件本身,建议把 whole 目录一起打包,并记一份清单,方便审计和复盘:
cd /tmp/gcc-offline && tar czf ../gcc-offline.tgz *
rpm -qa | grep -E "^gcc|^gcc-c\+\+" > gcc-installed.txt
qidao123.com企服评测-应用市场 编辑提示
|