`
myjcwy
  • 浏览: 110150 次
  • 性别: Icon_minigender_2
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

在centos6.5上部署node.js v6.4.0踩过的那些坑

阅读更多

背景说明:

有一个项目用到了Node.js,于是要在centos下部署node V6.4.0的运行环境。

 

简介:

Node.js平台是在后端运行JavaScript代码,所以,必须首先在本机安装Node环境。

npmNode.js的包管理工具(node package manager,用于管理Node.js代码引用的模块的下载,方便解决各个模块的依赖关系。

 

问题综述:

其实主要原因还是环境不满足,升级了一个,又依赖另一个,确实心累。最惨的是最后把libc.so.6升级到2.14版后(centos6.5自带是2.12),影响了本机的语言环境,svn更新时有中文无法更新。于是想删除了高版本的libc.so.6动态库还原老的来回退,结果一删除系统就无法运行任何命令了,马上通过网上搜索到的解决办法恢复,LD_PRELOAD=/lib64/libc-2.12.so ln -s /usr/local/glibc-2.14/lib/libc-2.14.so libc.so.6,系统又活过来了;可第二次不死心,心想是不是应用程序占用的原因导致,又删除了一遍,仍然不行,再次恢复后过了几秒,系统就崩溃了。还好是个测试系统,收拾过情绪,靠centos 光盘启动进入救援模式通过备份原libc.so.6还原了,再启动就一路正常。

 

下面凭记忆还原一下,我是怎么一步一步掉坑儿里的,以便以后回味,或者看到的同学可以绕过一些坑:

 因为npm安装模块时的依赖,需要python2.7gcc-c++4.8.0:

 

首先,python2.6升级到2.7

实施步骤:

1、下载nux release文件:

wget http://li.nux.ro/download/nux/dextop/el6/i386/nux-dextop-release-0-2.el6.nux.noarch.rpm

rpm -ivh nux-dextop-release-0-2.el6.nux.noarch.rpm

yum -y install python27

yum -y install python27-devel

2、升级python

Centos默认还是使用python2.6.*,需要用python2.7的文件覆盖python文件。

cd /usr/bin/

rm -rf python

cp python2.7 python

3、测试

在命令行里输入python --version,如果输出的结果显示的是这样就正确了:

[root@linuxidc script]# python --version

Python 2.7.3

4、由于yum没有兼容python2.7,需要vi /usr/bin/yum将 #!/usr/bin/python 修改为 #!/usr/bin/python2.6

 

 

 然后,npm install时需要gcc-c++-4.8.0以上,在centos6.5默认是gcc-c++-4.4.7。没办法,只能编译升级:

 

1.下载gcc最新的源码包 wget http://gcc.skazkaforyou.com/releases/gcc-4.9.1/gcc-4.9.1.tar.gz

2.解压缩 tar -xf gcc-4.9.1.tar.gz

3. cd gcc-4.9.1

4.运行download_prerequisites脚本, ./contrib/download_prerequisites ,这个脚本会自动下载所需要的依赖文件和库

5.建立输出目录,将所有的中间文件都放到该目录,

mkdir gcc_temp

cd gcc_temp

6. 运行 ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

7. make & make install

 

然而,gcc升级后,并没有结束,npm install发现引起的依赖关系是libstdc++版本不够高,

 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15'

libstdc++ 检查发现,GLIBCXX 最高只有 3.4.13

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

于是下载了一个 6.0.20 的,替换掉当前使用的 libstdc++

cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64/

ln -s -f /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6

检查一下新的 libstdc++GLIBCXX 最高到 3.4.20 

 

libstdc++.so.6的坑填完之后,就是最挫的地方了,linux的语言环境设置异常,报错:

# locale -a|more

locale: Cannot set LC_CTYPE to default locale: No such file or directory

locale: Cannot set LC_MESSAGES to default locale: No such file or directory

locale: Cannot set LC_COLLATE to default locale: No such file or director

试遍网上的改编码的方式,都不行,其实我也知道,肯定还是glibc版与glibc-common版本不一致造成,找遍度娘谷哥都没找到类似的解决方法,有一个网友跟我的出错一毛一样,但是他也没解决,他说更新了glibc-common仍然无效,此时我有点想回滚了;最悲剧的场面也是因此产生,删除了动态库libc.so.6,服务器直接就挂了,当时就傻了,应该另外找台机器来搞的,没想到依赖关系这么多,捅一堆篓子。

 

这里其实就是,libstdc++依赖/lib64/libc.so.6: version `GLIBC_2.14'的问题,报错如下:

node: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/libstdc++.so.6)

centos6.5libc.so.6默认版本是2.12,所以,又得升级。。。

于是安装glibc2.14,将glibc更新到glibc2.14

1)下载

glibc2.14下载地址:

http://ftp.gnu.org/gnu/glibc/

wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz

2)编译

tar -zxvf glibc-2.14.tar.gz

cd glibc-2.14

mkdir build

cd build

../configure --prefix=/usr/local/glibc-2.14

make -j4

make install

 

方法一:直接生效(建议)

编译.bash_profile下设置:

export LD_PRELOAD=/lib64/libc

export LD_PRELOAD=/usr/local/glibc-2.14/lib/libc-2.14.so

source .bash_profile

在网上查找时,博主是建议用这个,但是糟糕在我选了删除动态库重建链接

 

方法二:(效果不好,不建议用)

可以先删除软链接:删除/lib64/libc.so.6

cd /lib64

rm libc.so.6

此时libc.so.6被删除,无法执行其他命令,需要用一下命令进行恢复,并重新建立软链接:

export LD_PRELOAD=/lib64/libc

export LD_PRELOAD=/lib64/libc-2.12.so

恢复完成之后执行:

cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/libc-2.14.so

ln -s libc-2.14.so libc.so.6

此时,libc.so.6就升级完成。

 

其实我也就是想回滚libc.so.6包到2.12版本出的问题,过程如下:

cd /lib64

rm libc.so.6

结果系统命令就无法执行,就想先恢复系统,还是用2.14

LD_PRELOAD=/lib64/libc-2.12.so ln -s /usr/local/glibc-2.14/lib/libc-2.14.so libc.so.6

 

结果,恢复后几秒,系统就挂了,无法开机了。

 

 

下面是拯救过程:思路就是用系统安装镜像(因为我是虚拟机)把libc.so.6

还原成2.12

进入救援模式后,chroot /mnt/sysimage,结果报错libc.so.6 too short,总之是异常。

然后,我想直接mv 或者删除再拷贝旧版本的libc.so.6都操作失败。

最后想,要不看下当前的挂载情况,看到/mnt/sysimage挂载路径,于是进入

/mnt/sysimage/user/lib64/

删除libc.so.6,再ln -s /libc-2.12.so libc.so.6

 

之后,重启,至此,系统终于恢复。。。

 

 

总结:Centos6.5自带的gccpython版本都太低,编译升级后各种依赖关系真是让人头疼,而已容易把环境搞得很乱,给维护也带来很大难度,所以程序要求环境的版本比较高,该升centos 7就升吧。我最后也是这么干的,升到centos7后,安装一路顺利,高歌挺进,下一篇写一下整个安装过程。

 

因水平有限,如有疏漏,还请留言反馈,谢谢~

 

参考文档:

python2.6升级到2.7

http://www.linuxidc.com/Linux/2014-07/104555.htm

 

GCC4.7升级到4.9.1

https://www.cppfans.org/1719.html

 

libstdc++ 的问题

http://blog.41ms.com/post/54.html

 

libstdc++依赖/lib64/libc.so.6: version `GLIBC_2.14'的问题:

http://rocketeer.leanote.com/post/Glibc%E9%94%99%E8%AF%AF

 

分享到:
评论

相关推荐

    centos6.5-ntp安装包.rar

    总结来说,"centos6.5-ntp安装包.rar"提供了在CentOS 6.5上部署NTP服务的完整流程,包括安装、配置、启动、时间同步以及验证服务状态等关键步骤,以确保系统的时钟与全球标准时间保持一致。通过这些操作,可以有效...

    centos6.5双网卡绑定.doc

    CentOS 6.5 双网卡绑定是指在 CentOS 6.5 操作系统中将两块网卡绑定成一个逻辑网卡,从而提高网络带宽和可用性。这种方法可以提高服务器的网络性能和可靠性。 在 CentOS 6.5 中,使用 bonding 驱动程序来实现网卡...

    centos6.5 安装anaconda3.zip

    在CentOS 6.5上安装Anaconda3是一个涉及到系统兼容性、依赖管理、环境配置等多方面知识的过程。下面将详细阐述这个过程。 首先,Anaconda3的安装文件通常为.sh格式的shell脚本,因此在CentOS 6.5上,我们需要先下载...

    CentOS 6.5 安装说明.docx

    ### CentOS 6.5 安装说明 #### 创建虚拟机 在进行CentOS 6.5的安装之前,首先需要创建一个虚拟机环境。这里假设使用的是常见的虚拟化软件如VMware Workstation或者VirtualBox。 - **配置硬件资源**:在创建虚拟机...

    linux centos 6.5下安装nodejs

    ### Linux CentOS 6.5 下安装 ...通过以上步骤,你已经在 CentOS 6.5 上成功安装了 Node.js 并进行了基本配置。接下来就可以开始使用 Node.js 进行开发了。如果遇到任何问题,请参考 Node.js 官方文档或社区寻求帮助。

    cent6.5安装nodjs-v5.7.0及运行3个应用前端nodejs开发代码

    在本文中,我们将学习如何在CentOS 6.5上安装Node.js v5.7.0,并运行三个前端应用程序。 Node.js安装 Node.js是一个基于JavaScript的服务器端 runtime环境,可以帮助开发者快速构建高性能的网络应用程序。CentOS ...

    CentOS 6.5 配置IP地址.DNS的三种方法

    在 CentOS 6.5 系统中,配置 IP 地址和 DNS 是一个必不可少的步骤。这里我们将介绍三种配置 IP 地址和 DNS 的方法。 方法一:自动获取 IP 地址 在虚拟机中,我们可以使用桥接模式连接到物理机的网络里,物理机网络...

    centos6.5 libgcc-s.so.1 x86-64

    centos6.5不小心卸载了libgcc-4.4.7-23.el6.x86_64 libgcc_s.so.1: cannot open shared object file: No such file or directory 如果你的系统是64位(32位的则拷贝到相应的lib下): 将相同系统下的文件/lib64/...

    Centos6.5 镜像文件下载

    CentOS 6.5作为CentOS 6系列的一个稳定版本,在安全性、稳定性以及兼容性方面做了很多改进和完善,非常适合于企业服务器部署。 #### 二、CentOS 6.5镜像文件概述 CentOS 6.5提供多种类型的镜像文件供用户选择,...

    Lancger#opslinux#Centos6.5安装node_exporter1

    一、安装 二、启动脚本 三、设置开机启动

    【JavaScript源代码】CentOS 8.2服务器上安装最新版Node.js的方法.docx

    【JavaScript源代码】CentOS 8.2服务器上安装最新版Node.js的方法 Node.js是一个广泛使用的开源JavaScript运行时环境,允许开发者在服务器端执行JavaScript代码,而不局限于Web浏览器内部。这一特性使得Node.js成为...

    CentOS6.5安装QtCreator.png

    本资源介绍如何在CentOS6.5上,升级GCC,安装QT5.1.1(包含QtCreator),图文并茂,并且还有全程安装视频提供,还提供资源下载。

    Ansible部署Node.js,让你从简操作.pdf

    在 CentOS6.x 服务器上部署 Node.js 可以使用 Ansible playbook 来实现。下面是具体的实现步骤: 1. 添加额外的源:在准备应用服务器时,管理员经常首先添加额外的源,以便获得最新的软件包。在这个例子中,我们...

    centos6.5 oracle 卸载步骤.txt

    centos6.5 oracle 卸载步骤(干货)

    Ansible部署Node.js,让你从简操作.docx

    在这篇文章中,我们将使用 Ansible 部署 Node.js 到 CentOS 6.x 服务器上。我们将创建一个 playbook 文件,用于定义部署过程。这个 playbook 文件将包含多个任务,包括添加额外的源、安装 Node.js、启动 Node.js ...

    VMware-Workstation10安装+CentOS6.5安装图文教程.doc

    在本文中,我们将深入探讨如何使用VMware Workstation 10安装CentOS 6.5操作系统,这是一个流行的开源Linux发行版,广泛应用于服务器环境。VMware Workstation是一款强大的虚拟机软件,它允许用户在同一台物理机器上...

    centos6.5 freeswitch安装.docx

    本文档旨在指导用户在CentOS 6.5操作系统上安装Freeswitch,Freeswitch是一款开源的软交换机软件,提供了丰富的VoIP功能。该文档提供了详细的安装步骤和问题解决方案,旨在帮助用户快速安装和配置Freeswitch。 描述...

    centos6-6.5glibc.zip

    在那个时期,很多依赖于新版本GLIBC的软件可能无法在原版的CentOS 6.5上运行,因此这个更新的GLIBC包可能是为了兼容或提升系统的软件兼容性。 标签中的"el6"指的是Enterprise Linux 6,这是RHEL及其衍生版(如...

    VMware安装CentOS6.5教程1.pdf

    在本教程中,我们将深入探讨如何使用VMware安装CentOS6.5,这是一个适用于初学者的详细步骤指南。首先,了解Linux操作系统的基本概念是至关重要的。Linux是一个开源操作系统,其核心是Linux内核,而CentOS是基于...

    VMware创建安装CentOS6.5(配截图)

    "VMware创建安装CentOS6.5(配截图)" VMware 是一款功能强大且流行的虚拟机软件,用户可以在 VMware 中创建多个虚拟机,每个虚拟机都可以独立运行不同的操作系统。CentOS6.5 是一个基于 Linux 的开源操作系统,...

Global site tag (gtag.js) - Google Analytics