node18、chrom、puppeteer安装
<h1>安装nvm</h1>
<ol>
<li>
<p>首先,如果你还没有安装 NVM,你需要先安装它。你可以使用 curl 或 wget 来下载和运行 NVM 的安装脚本。以下是使用 curl 的命令:</p>
<p><code>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash</code></p>
<p>这个命令会下载并运行 NVM 的安装脚本。脚本会自动将 NVM 的源代码克隆到 <code>~/.nvm</code> 目录,并将必要的环境变量添加到你的 shell 配置文件(如 <code>~/.bash_profile</code>、<code>~/.zshrc</code>、<code>~/.profile</code> 或 <code>~/.bashrc</code>)。</p>
</li>
<li>
<p>完成安装后,你需要关闭并重新打开你的终端,或者运行以下命令来更新你的 shell 配置:</p>
<p><code>source ~/.bash_profile</code></p>
</li>
</ol>
<h1>kill掉yum之后的操作</h1>
<pre><code>rm -f /var/lib/rpm/__db*
rpm --rebuilddb
</code></pre>
<h1>安装chromium</h1>
<pre><code> yum install chromium -y</code></pre>
<h1>安装node18 (安装完node18之后必须要重启crond)</h1>
<p>CentOS 7环境下安装 Nvm,在执行<code>nvm use 18.17.0</code>后执行<code>node -v</code>爆出如下错误</p>
<pre><code>node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)</code></pre>
<p>其实这本质上并不是 Nvm 的问题,而是CentOS低版本系统的 GLIBC 版本过低,我们再查看 ldd 版本</p>
<pre><code># ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.</code></pre>
<p>我们发现系统中 GLIBC 版本仅为 17,而报错中显示我们缺失,25,27,28。而 GLIBC是向下兼容的,安装高版本的同时会安装低版本,所以我们只需要安装 GLIBC_2.28 即可</p>
<p>> 注意:如果有条件的话可以直接升级系统 CentOS 8,可以有效解决问题</p>
<h2>解决方案</h2>
<h3>更新 glibc</h3>
<pre><code>cd
wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar xf glibc-2.28.tar.gz
cd glibc-2.28/ &amp;&amp; mkdir build &amp;&amp; cd build</code></pre>
<h3>升级 gcc、make</h3>
<pre><code># 升级GCC(默认为4 升级为8)
yum install -y centos-release-scl
yum install -y devtoolset-8-gcc*
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
# 升级 make(默认为3 升级为4)
wget http://ftp.gnu.org/gnu/make/make-4.3.tar.gz
tar -xzvf make-4.3.tar.gz &amp;&amp; cd make-4.3/
./configure --prefix=/usr/local/make
make &amp;&amp; make install
cd /usr/bin/ &amp;&amp; mv make make.bak
ln -sv /usr/local/make/bin/make /usr/bin/make
# 查看make版本是否是4.3
make -v</code></pre>
<h3>升级 libstdc++</h3>
<p>我看到有些知友说这部分是没有意义的,有的甚至给系统搞崩,怎么说呢,我毕竟也不是专门做 linux 的(有了解的知友可以讲下原理),对这个也不是很了解,不过我自己当时是做了这部分 libstdc++ 升级,大家可以选择先给这个章节跳过,看是否可以解决问题,不能的话再折返会该章节(2024.03.26 更新)</p>
<pre><code>yum whatprovides libstdc++.so.6
yum update -y libstdc++.x86_64
sudo wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
unzip libstdc.so_.6.0.26.zip
cp libstdc++.so.6.0.26 /lib64/
cd /lib64
# 把原来的命令做备份
cp libstdc++.so.6 libstdc++.so.6.bak
rm -f libstdc++.so.6
# 重新链接
ln -s libstdc++.so.6.0.26 libstdc++.so.6</code></pre>
<h3>编译安装</h3>
<pre><code>cd ~/glibc-2.28/build
# 配置环境
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
# 安装
make
make install</code></pre>
<h3>查看版本</h3>
<h3>lld</h3>
<pre><code>(base) [root@VM-4-3-centos build]# ldd --version
ldd (GNU libc) 2.28
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.</code></pre>
<h3>node</h3>
<pre><code>(base) [root@VM-4-3-centos build]# node -v
v18.17.0
ln -s /data/node18/node-v18.19.1-linux-x64/bin/node /usr/local/bin/
ln -s /data/node18/node-v18.19.1-linux-x64/bin/node /usr/bin/
ln -s /data/node18/node-v18.19.1-linux-x64/bin/npm /usr/local/bin/
ln -s /data/node18/node-v18.19.1-linux-x64/bin/npm /usr/bin/</code></pre>