arm开发板升级glibc的方法

arm开发板升级glibc的方法,第1张

ld和libc库必须同时升级,否则这两者不匹配会引起各种执行程序报错

一、先把新版本的 ld-2.xx.so、libc-2.xx.so 一起放入 /lib 目录,并注意赋予执行权限

二、删掉指向旧版本的软链接 rm ld-linux-aarch64.so.1 libc.so.6

三、这时所有的命令都是不能用的。同时恢复ld-linux、libc的软链接指向新版本

LD_PRELOAD="/lib/libc-2.26.so /lib/ld-2.26.so" /bin/ln -s /lib/ld-2.26.so /lib/ld-linux-aarch64.so.1

LD_PRELOAD="/lib/libc-2.26.so /lib/ld-2.26.so" /bin/ln -s /lib/libc-2.26.so /lib/libc.so.6

这时候,虽然大部分busybox命令都可以执行了,但是像dropbear、dmesg这些部分功能还是不正常的,因为还有 libnss_dns、libnss_file、libpthread、libresolv、libdl、libanl、libcrypt、libm、libnsl、librt、libutil 这些库需要跟libc库同步升级

一、启动namenode服务后,web页面依然无法访问

1、启动namenode服务,

指令:start-all.sh

'''

[root@hadoop1 hadoop-3.2.1]# start-all.sh

Starting namenodes on [hadoop1]

Starting datanodes

Starting secondary namenodes [hadoop1]

Starting resourcemanager

Starting nodemanagers

ERROR: Refusing to run as root: roo account is not found. Aborting.

'''

2、查看namenode服务是否启动,

'''

[root@hadoop1 hadoop-3.2.1]# jps

8130 Jps

7494 ResourceManager

6871 NameNode

7244 SecondaryNameNode

'''

3、查看后台监听端口

'''

[root@hadoop1 hadoop-3.2.1]# netstat -nltp |grep 6871

tcp        0      0 192.168.43.250:9000        0.0.0.0:*                  LISTEN      6871/java         

tcp        0      0 0.0.0.0:9870                0.0.0.0:*                  LISTEN      6871/java   

'''

4、查看web是否可以访问,发现web页面无法访问

5、检查防火墙设置,可以看到hadoop1服务器已经禁用了除本机外的其他多有服务访问,

[root@hadoop1 hadoop-3.2.1]# service iptables status

表格:filter

Chain INPUT (policy ACCEPT)

num  target    prot opt source              destination       

1    ACCEPT    all  --  0.0.0.0/0            0.0.0.0/0          state RELATED,ESTABLISHED

2    ACCEPT    icmp --  0.0.0.0/0            0.0.0.0/0         

3    ACCEPT    all  --  0.0.0.0/0            0.0.0.0/0         

4    ACCEPT    tcp  --  0.0.0.0/0            0.0.0.0/0          state NEW tcp dpt:22

5    REJECT    all  --  0.0.0.0/0            0.0.0.0/0          reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)

num  target    prot opt source              destination       

1    REJECT    all  --  0.0.0.0/0            0.0.0.0/0          reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)

num  target    prot opt source              destination       

6、关闭防火墙,并把防火墙设置为开启不启动

centos6:

    关闭防火墙:service iptables stop

    设置开启不启动防火墙:chkconfig iptables off

centos7:

    关闭防火墙:systemctl stop firewalld.service

     设置开启不启动防火墙:systemctl disable firewalld.service

7、检查web已经可以正常显示

8、如果上面的操作依然无法访问的话,需要查看一下主机的hosts文件 是否有配置域名映射

二、开启datanode指令时出现waring

[root@hadoop1 hadoop-3.2.1]# hadoop-daemon.sh start datanode

WARNING: Use of this script to start HDFS daemons is deprecated.

WARNING: Attempting to execute replacement "hdfs --daemon start" instead.

主要是2.7版本的hadoop已经把hadoop命令改为hdfs命令了,所以尝试使用

指令:hdfs --daemon start datanode

'''

[root@hadoop2 hadoop-3.2.1]# hdfs --daemon start datanode

[root@hadoop2 hadoop-3.2.1]# jps

4064 Jps

4033 DataNode

2922 ResourceManager

'''

三、使用root配置的hadoop并启动会出现报错

错误:

        Starting namenodes on [master]

ERROR: Attempting to operate on hdfs namenode as root

ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.

Starting datanodes

ERROR: Attempting to operate on hdfs datanode as root

ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.

        Starting secondary namenodes [slave1]

        ERROR: Attempting to operate on hdfs secondarynamenode as root

        ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

原因分析:由于root没有start-dfs.sh和 stop-dfs.sh脚本的执行权限,在这两个脚本的开头加上如下参数,给root赋予执行权限即可:

HDFS_DATANODE_USER=root

HADOOP_SECURE_DN_USER=hdfs /* 后续版本这边需要修改为 HDFS_DATANODE_SECURE_USER=hdfs

HDFS_NAMENODE_USER=root

HDFS_SECONDARYNAMENODE_USER=root

start-yarn.sh,stop-yarn.sh顶部也需添加以下

YARN_RESOURCEMANAGER_USER=root

HADOOP_SECURE_DN_USER=yarn  /* 后续版本这边需要修改为 HDFS_DATANODE_SECURE_USER=hdfs

YARN_NODEMANAGER_USER=root

4、hdfs运行指令时出现warn警告提示:

2019-11-13 00:07:58,517 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

该警告信息主要是由于是依赖库的问题

我们对静态库查看下依赖:看下依赖是否都正常:

通过指令 ldd libhadoop.so.1.0.0

'''

./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)

        linux-vdso.so.1 =>  (0x00007fff369ff000)

        libdl.so.2 =>/lib64/libdl.so.2 (0x00007f3caa7ea000)

        libc.so.6 =>/lib64/libc.so.6 (0x00007f3caa455000)

        /lib64/ld-linux-x86-64.so.2 (0x00007f3caac1b000)

'''

可以看到是glibc 版本的问题:

我们再确认下:

GLIBC_2.14找不到,现在检查系统的glibc库,  ldd --version  即可检查。

输入命令:

'''

ldd --version

ldd (GNU libc) 2.12

Copyright (C) 2010 Free Software Foundation, Inc.

This is free softwaresee the source for copying conditions.  There is NO

warrantynot even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Written by Roland McGrath and Ulrich Drepper.

'''

还可以直接确认下glibc 目前支持的版本:

通过如下查询方法

'''

strings /lib64/libc.so.6|grep GLIBC

GLIBC_2.2.5

GLIBC_2.2.6

GLIBC_2.3

GLIBC_2.3.2

GLIBC_2.3.3

GLIBC_2.3.4

GLIBC_2.4

GLIBC_2.5

GLIBC_2.6

GLIBC_2.7

GLIBC_2.8

GLIBC_2.9

GLIBC_2.10

GLIBC_2.11

GLIBC_2.12

GLIBC_PRIVATE

'''

可以看到目前只支持到 2.12 

解决办法有两个

1、升级 glibc 库

2、屏蔽hadoop提示这个告警

直接在log4j日志中去除告警信息。在$HADOOP_HOME/etc/hadoop/log4j.properties文件中添加

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

小编提供了如下的四种方法,但是,小编建议大家不要自己更新 glibc 。因为他是系统基础库。他如果出现函数接口变化(版本升级很容易出现这个问题),那么你的整个系统就不能用了。另外,当前最新版本是2.11,比你要安装的要新的多,更新glibc后有可能导致系统崩溃 因为Linux 的依赖关系就是为了防止这种情况而设计的。所以最好还是找相关人士来解决这个问题。

简介

glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。

方法一:

步骤如下:

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

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

tar -xvf glibc-2.15.tar.gz

tar -xvf glibc-ports-2.15.tar.gz

mv glibc-ports-2.15 glibc-2.15/ports

mkdir glibc-build-2.15

cd glibc-build-2.15

../glibc-2.15/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

make &make install

make是成功后,build目录下编译出了一个新的libc.so.6 (/glibc-build-2.15/libc.so.6, 我们会发现这实际上也是一个软连接,真实的lib文件时libc.so

cd glibc-build-2.15

ll libc.so.6

查看库文件,可以看到2.12的旧库文件还在,多了2.15版本的库文件,而且软链接文件全部指向了2.15版本

ll /lib64/libc*

此时,查看glibc支持的版本

strings libc.so | grep GLIBC

注:以上图片上传到红联Linux系统教程频道中。

方法二:

编译安装glibc

1.下载glibc

wget http://ftp.gnu.org/gnu/glibc/glibc-2.3.2.tar.gz2.下载glibc-linuxthreads

wget http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.2.tar.gz3.解压

tar -zxvf glibc-2.3.2.tar.gz

cd glibc-2.3.2

tar -zxvf ../glibc-linuxthreads-2.3.2.tar.gz

cd ..

./glibc-2.3.2/configure --prefix=/usr --disable-profile --enable-add-ons --libexecdir=/usr/lib --with-headers=/usr/include

make

make install注意点:

1、要将glibc-linuxthreads解压到glibc目录下。

2、不能在glibc当前目录下运行configure

方法三:

1、linux更新包,首选用yum来进行更新(前提是你的linux能上外网),命令如下:

yum install glibc* ----------虽然是安装命令,但是查到已安装后,会自动更新到yum源的最新版本。

2、也可以使用下载的rpm包手工更新的方法,下载最新的glic包然后上传到linux系统安装即可

方法四:

如果是CentOS的话就好啦,直接用命令:yum install glibc 就ok啦!其他的没办法,只能下载或哪里有光盘DVD!


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/143544.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-19
下一篇2023-03-19

发表评论

登录后才能评论

评论列表(0条)

    保存