高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器RTMP推流服务器EasyDSS遇到easydss: [emerg] getpwnam(“nobody”) failed错误的排查方案
背景分析
今年,“5G+8K”高清视频等创新应用首次亮相。在广州、深圳两地的5G规模试验外场,广东移动在广州珠江边和深圳深南大道分别架设了360度高清摄像头,代表们在北京就能通过VR眼镜等设备看到家乡的景观,还能远程操控摄像头,实时调整视角、缩放画面,远处的画面放大之后也清晰可见。5G视频传输的应用成果迭出,设置掀起了一波“5G视频直播热”。为应对“5G+8k”技术的应用,青犀团队也不断创新,EasyDSS流媒体服务器率先在5K技术上实践。
EasyDSS流媒体服务器具有高效的视频管理功能,支持一站式的上传、转码、直播、回放、嵌入、分享功能,具有多屏播放、自由组合、接口丰富等特点。
EasyDSS遇到getpwnam(xxxxx)错误
在运行EasyDSS过程中,不少开发者会因为操作不当,或者缺少文件而导致服务器运行失败,也有开发者以及用户反映运行easydss for linux会遇到easydss: [emerg] getpwnam(“nobody”) failed错误,导致easydss无法运行。
分析问题
我们使用getpwnam这个函数来获取nobody账户的账户信息,并且我们默认任务这个nobody属于nobody用户组。
这里主要分为两种情况
1、在部分Linux发行版中默认无nobody用户组(如:ubuntu 14.04.1 LTS)。这里就需要添加nobody用户组,并且把nobody用户加入nobody用户组。
命令为:
groupadd nobody
usermod -a -G nobody nobody
查看用户命令为cat /etc/passwd,查看用户组为cat /etc/group
2、我们easydss for linux使用ubuntu 14.04 LTS编译,并且“试图”使用-static解决所有linux发行版的运行兼容问题,结果,这里就是此问题引起。
if you link your program statically to GNU libc and use name services (getpwnam() etc.), you end up linked dynamically against libc’s NSS (name service switch).
解决问题
运行easydss for linux时,如果遇到getpwnam错误,首先需要检查nobody用户和nobody组是否存在,如若不存在,我们就添加上去。较小众或者版本较低的linux发行版,可以及时与我们沟通排查。