Linux开发_CentOS7.4服务器安装NFS,ffmpeg、Qt环境
1. 环境介绍
环境介绍:采用的是华为云的ECS弹性云服务器–镜像安装的CentOS7.4 64位 -----是服务器版,非桌面版哦。
在CentOS7.4服务器版本的环境下搭建NFS服务器、安装ffmpeg、安装nginx服务器、部署Qt编译环境。
(1)配置NGINX为HTTP服务器,安装rtmp模块,完成rtmp视频推流,支持缓存视频到本地目录、支持转为HLS流,通过浏览器访问直播流。
(2)部署Qt编译环境,可以编译Qt代码,运行Qt程序。 因为是服务器,我这里部署Qt环境,运行Qt程序是属于控制台版本,不用Qt的GUI模块,只是用核心模块完成一些功能设计。
(3)安装、编译 ffmpeg : 支持源码编译安装ffmpeg、在线安装ffmpeg,通过ffmpeg可以完成音视频的一些开发。比如:视频转码、视频合并、视频剪切、视频特效处理。----这里用ffmpeg并不是做播放器,是在服务器上用,主要是处理视频文件。
(4)安装NFS服务器,主要是方便与本地Linux系统进行通信,编译代码,文件共享。
(5)部署开机自动启动程序:方便设置自己的程序为开机启动。
2. 部署NFS服务器
注意:在云服务器上搭建NFS服务器,需要在控制台开放端口,不然NFS的端口无法正常访问,会被拦截。
2.1 安装NFS
[root@ecs-c687-ecrs work]# yum install -y rpc-bind nfs-utils
Loaded plugins: fastestmirror
Determining fastest mirrors
base | 3.6 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/7): base/7/x86_64/group_gz | 153 kB 00:00:00
(2/7): epel/x86_64/group_gz | 97 kB 00:00:00
(3/7): epel/x86_64/updateinfo | 1.0 MB 00:00:00
(4/7): base/7/x86_64/primary_db | 6.1 MB 00:00:00
(5/7): epel/x86_64/primary_db | 7.0 MB 00:00:00
(6/7): extras/7/x86_64/primary_db | 250 kB 00:00:00
(7/7): updates/7/x86_64/primary_db | 17 MB 00:00:01
No package rpc-bind available.
Resolving Dependencies
--> Running transaction check
---> Package nfs-utils.x86_64 1:1.3.0-0.68.el7.2 will be installed
--> Processing Dependency: gssproxy >= 0.7.0-3 for package: 1:nfs-utils-1.3.0-0.68.el7.2.x86_64
--> Processing Dependency: rpcbind for package: 1:nfs-utils-1.3.0-0.68.el7.2.x86_64
--> Processing Dependency: quota for package: 1:nfs-utils-1.3.0-0.68.el7.2.x86_64
--> Processing Dependency: libnfsidmap for package: 1:nfs-utils-1.3.0-0.68.el7.2.x86_64
--> Processing Dependency: libevent for package: 1:nfs-utils-1.3.0-0.68.el7.2.x86_64
--> Processing Dependency: keyutils for package: 1:nfs-utils-1.3.0-0.68.el7.2.x86_64
--> Processing Dependency: libnfsidmap.so.0()(64bit) for package: 1:nfs-utils-1.3.0-0.68.el7.2.x86_64
--> Processing Dependency: libevent-2.0.so.5()(64bit) for package: 1:nfs-utils-1.3.0-0.68.el7.2.x86_64
--> Running transaction check
---> Package gssproxy.x86_64 0:0.7.0-30.el7_9 will be installed
--> Processing Dependency: libini_config >= 1.3.1-31 for package: gssproxy-0.7.0-30.el7_9.x86_64
--> Processing Dependency: libverto-module-base for package: gssproxy-0.7.0-30.el7_9.x86_64
--> Processing Dependency: libref_array.so.1(REF_ARRAY_0.1.1)(64bit) for package: gssproxy-0.7.0-30.el7_9.x86_64
--> Processing Dependency: libini_config.so.3(INI_CONFIG_1.2.0)(64bit) for package: gssproxy-0.7.0-30.el7_9.x86_64
--> Processing Dependency: libini_config.so.3(INI_CONFIG_1.1.0)(64bit) for package: gssproxy-0.7.0-30.el7_9.x86_64
--> Processing Dependency: libref_array.so.1()(64bit) for package: gssproxy-0.7.0-30.el7_9.x86_64
--> Processing Dependency: libini_config.so.3()(64bit) for package: gssproxy-0.7.0-30.el7_9.x86_64
--> Processing Dependency: libcollection.so.2()(64bit) for package: gssproxy-0.7.0-30.el7_9.x86_64
--> Processing Dependency: libbasicobjects.so.0()(64bit) for package: gssproxy-0.7.0-30.el7_9.x86_64
---> Package keyutils.x86_64 0:1.5.8-3.el7 will be installed
---> Package libevent.x86_64 0:2.0.21-4.el7 will be installed
---> Package libnfsidmap.x86_64 0:0.25-19.el7 will be installed
---> Package quota.x86_64 1:4.01-19.el7 will be installed
--> Processing Dependency: quota-nls = 1:4.01-19.el7 for package: 1:quota-4.01-19.el7.x86_64
--> Processing Dependency: tcp_wrappers for package: 1:quota-4.01-19.el7.x86_64
---> Package rpcbind.x86_64 0:0.2.0-49.el7 will be installed
--> Running transaction check
---> Package libbasicobjects.x86_64 0:0.1.1-32.el7 will be installed
---> Package libcollection.x86_64 0:0.7.0-32.el7 will be installed
---> Package libini_config.x86_64 0:1.3.1-32.el7 will be installed
--> Processing Dependency: libpath_utils.so.1(PATH_UTILS_0.2.1)(64bit) for package: libini_config-1.3.1-32.el7.x86_64
--> Processing Dependency: libpath_utils.so.1()(64bit) for package: libini_config-1.3.1-32.el7.x86_64
---> Package libref_array.x86_64 0:0.1.5-32.el7 will be installed
---> Package libverto-libevent.x86_64 0:0.2.5-4.el7 will be installed
---> Package quota-nls.noarch 1:4.01-19.el7 will be installed
---> Package tcp_wrappers.x86_64 0:7.6-77.el7 will be installed
--> Running transaction check
---> Package libpath_utils.x86_64 0:0.2.1-32.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================
Installing:
nfs-utils x86_64 1:1.3.0-0.68.el7.2 updates 413 k
Installing for dependencies:
gssproxy x86_64 0.7.0-30.el7_9 updates 111 k
keyutils x86_64 1.5.8-3.el7 base 54 k
libbasicobjects x86_64 0.1.1-32.el7 base 26 k
libcollection x86_64 0.7.0-32.el7 base 42 k
libevent x86_64 2.0.21-4.el7 base 214 k
libini_config x86_64 1.3.1-32.el7 base 64 k
libnfsidmap x86_64 0.25-19.el7 base 50 k
libpath_utils x86_64 0.2.1-32.el7 base 28 k
libref_array x86_64 0.1.5-32.el7 base 27 k
libverto-libevent x86_64 0.2.5-4.el7 base 8.9 k
quota x86_64 1:4.01-19.el7 base 179 k
quota-nls noarch 1:4.01-19.el7 base 90 k
rpcbind x86_64 0.2.0-49.el7 base 60 k
tcp_wrappers x86_64 7.6-77.el7 base 78 k
Transaction Summary
=============================================================================================================================================================
Install 1 Package (+14 Dependent packages)
Total download size: 1.4 M
Installed size: 4.1 M
Downloading packages:
(1/15): keyutils-1.5.8-3.el7.x86_64.rpm | 54 kB 00:00:00
(2/15): libcollection-0.7.0-32.el7.x86_64.rpm | 42 kB 00:00:00
(3/15): gssproxy-0.7.0-30.el7_9.x86_64.rpm | 111 kB 00:00:00
(4/15): libevent-2.0.21-4.el7.x86_64.rpm | 214 kB 00:00:00
(5/15): libbasicobjects-0.1.1-32.el7.x86_64.rpm | 26 kB 00:00:00
(6/15): libini_config-1.3.1-32.el7.x86_64.rpm | 64 kB 00:00:00
(7/15): libnfsidmap-0.25-19.el7.x86_64.rpm | 50 kB 00:00:00
(8/15): libpath_utils-0.2.1-32.el7.x86_64.rpm | 28 kB 00:00:00
(9/15): libref_array-0.1.5-32.el7.x86_64.rpm | 27 kB 00:00:00
(10/15): libverto-libevent-0.2.5-4.el7.x86_64.rpm | 8.9 kB 00:00:00
(11/15): quota-nls-4.01-19.el7.noarch.rpm | 90 kB 00:00:00
(12/15): quota-4.01-19.el7.x86_64.rpm | 179 kB 00:00:00
(13/15): tcp_wrappers-7.6-77.el7.x86_64.rpm | 78 kB 00:00:00
(14/15): rpcbind-0.2.0-49.el7.x86_64.rpm | 60 kB 00:00:00
(15/15): nfs-utils-1.3.0-0.68.el7.2.x86_64.rpm | 413 kB 00:00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 1.5 MB/s | 1.4 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Installing : rpcbind-0.2.0-49.el7.x86_64 1/15
Installing : libbasicobjects-0.1.1-32.el7.x86_64 2/15
Installing : libref_array-0.1.5-32.el7.x86_64 3/15
Installing : libcollection-0.7.0-32.el7.x86_64 4/15
Installing : libevent-2.0.21-4.el7.x86_64 5/15
Installing : libverto-libevent-0.2.5-4.el7.x86_64 6/15
Installing : 1:quota-nls-4.01-19.el7.noarch 7/15
Installing : tcp_wrappers-7.6-77.el7.x86_64 8/15
Installing : 1:quota-4.01-19.el7.x86_64 9/15
Installing : keyutils-1.5.8-3.el7.x86_64 10/15
Installing : libnfsidmap-0.25-19.el7.x86_64 11/15
Installing : libpath_utils-0.2.1-32.el7.x86_64 12/15
Installing : libini_config-1.3.1-32.el7.x86_64 13/15
Installing : gssproxy-0.7.0-30.el7_9.x86_64 14/15
Installing : 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 15/15
Verifying : gssproxy-0.7.0-30.el7_9.x86_64 1/15
Verifying : 1:quota-4.01-19.el7.x86_64 2/15
Verifying : libpath_utils-0.2.1-32.el7.x86_64 3/15
Verifying : libnfsidmap-0.25-19.el7.x86_64 4/15
Verifying : libevent-2.0.21-4.el7.x86_64 5/15
Verifying : keyutils-1.5.8-3.el7.x86_64 6/15
Verifying : libverto-libevent-0.2.5-4.el7.x86_64 7/15
Verifying : tcp_wrappers-7.6-77.el7.x86_64 8/15
Verifying : libcollection-0.7.0-32.el7.x86_64 9/15
Verifying : 1:quota-nls-4.01-19.el7.noarch 10/15
Verifying : libref_array-0.1.5-32.el7.x86_64 11/15
Verifying : libbasicobjects-0.1.1-32.el7.x86_64 12/15
Verifying : 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 13/15
Verifying : libini_config-1.3.1-32.el7.x86_64 14/15
Verifying : rpcbind-0.2.0-49.el7.x86_64 15/15
Installed:
nfs-utils.x86_64 1:1.3.0-0.68.el7.2
Dependency Installed:
gssproxy.x86_64 0:0.7.0-30.el7_9 keyutils.x86_64 0:1.5.8-3.el7 libbasicobjects.x86_64 0:0.1.1-32.el7 libcollection.x86_64 0:0.7.0-32.el7
libevent.x86_64 0:2.0.21-4.el7 libini_config.x86_64 0:1.3.1-32.el7 libnfsidmap.x86_64 0:0.25-19.el7 libpath_utils.x86_64 0:0.2.1-32.el7
libref_array.x86_64 0:0.1.5-32.el7 libverto-libevent.x86_64 0:0.2.5-4.el7 quota.x86_64 1:4.01-19.el7 quota-nls.noarch 1:4.01-19.el7
rpcbind.x86_64 0:0.2.0-49.el7 tcp_wrappers.x86_64 0:7.6-77.el7
Complete!
[root@ecs-c687-ecrs work]# yum install -y rpcbind
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package rpcbind-0.2.0-49.el7.x86_64 already installed and latest version
Nothing to do
[root@ecs-c687-ecrs work]#
2.2 设置节点
(1)设置节点名称
hostnamectl set-hostname nfs
(2)服务端安装NFS
yum -y install nfs-utils rpcbind
2.3 服务端配置
在NFS服务端上创建共享目录/data/nfs并设置权限
mkdir -p /data/nfs
chmod 666 /data/nfs
2.4 编辑export文件
vim /etc/exports
/data/nfs *(rw,no_root_squash,no_all_squash,sync)
其中的/data/nfs 就是NFS服务器需要共享出去的目录。 *号表示所有IP地址都可以访问。
参数介绍:
rw 读写权限
no_root_squash 客户端使用 root 身份来操作服务器的文件系统
sync 代表数据会同步写入到内存与硬盘中
(1)配置生效
exportfs -r
(2)启动rpcbind、nfs服务
systemctl enable rpcbind && systemctl start rpcbind
systemctl enable nfs && systemctl start nfs
(3)查看 RPC 服务的注册状况
rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 39748 status
100024 1 tcp 41475 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 46720 nlockmgr
100021 3 udp 46720 nlockmgr
100021 4 udp 46720 nlockmgr
100021 1 tcp 33605 nlockmgr
100021 3 tcp 33605 nlockmgr
100021 4 tcp 33605 nlockmgr
(4)showmount令来查阅是否可以联机
showmount -e localhost
选项与参数:
-a :显示目前主机与客户端的 NFS 联机分享的状态;
-e :显示某部主机的 /etc/exports 所分享的目录数据。
2.5 客户端配置
(1)安装nfs-utils客户端 —一般系统都自带了,不用安装。
yum -y install nfs-utils
(2)创建挂载目录—就是用来挂载NFS服务器的共享目录
mkdir /home/work
(3)查看服务器抛出的共享目录信息
showmount -e <NFS服务器IP地址>
(4)挂载服务器共享目录
mount -t nfs <NFS服务器IP地址>:<NFS服务器路径> <挂载到本地的路径>
(5)查看挂载结果
df -h
(6)卸载已挂在的NFS
umount <挂载到本地的路径>
3. 安装ffmpeg
3.1 安装yasm
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz #下载源码包
tar zxvf yasm-1.3.0.tar.gz #解压
cd yasm-1.3.0 #进入目录
./configure #配置
make && make install #编译安装
3.2 在线安装ffmpeg
(1)设置下载源
CentOS没有官方FFmpeg软件包,可以使用第三方YUM源(Nux Dextop)下载,就是版本较低,ffmpeg 2.8。
(1) yum -y install epel-release
(2) yum update -y
(3) rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
(4)
[CentOS 7]
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
[CentOS 6]
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
(2)安装FFmpeg 和 FFmpeg开发包
sudo yum install ffmpeg ffmpeg-devel -y
(3)测试ffmpeg是否安装OK
ffmpeg -version
查看版本:
[root@nfs ecrs_web_lib_centos]# ffmpeg -version
ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfdk-aac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
[root@nfs ecrs_web_lib_centos]#
3.3 从源码编译ffmpeg
(1)编译X264
[root@ecs-c687-ecrs work_pc]# tar xvf last_x264.tar.bz2
./configure
make
make install
(2)编译ffmpeg
./configure --enable-shared --target-os=linux --enable-gpl --enable-ffmpeg --enable-libx264
3.4 如果有多个ffmpeg版本存在怎么办?
如果系统里有多个ffmpeg存在,那么在命令行执行ffmpeg肯定是不知道当前这个命令是不是自己想要的。
如果是编译ffmpeg源码得到ffmpeg相关文件,那么在执行./configure
时,加一个选项,设置一下安装路径--prefix=$PWD/_install
。这样执行make install
时,安装的文件会拷贝到当前目录下的_install
目录里。
然后再通过ln建立一个链接文件到/usr/local/bin/
目录下。
ln -s /home/wbyq/ffmpe4.2.2/_install/bin/ffmpeg /usr/local/bin/ffmpeg422
然后将/home/wbyq/ffmpe4.2.2/_install/lib
目录加到系统库搜索的环境变量里。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wbyq/ffmpe4.2.2/_install/lib
如果觉得设置环境变量麻烦,以后也不常修改这些库,那么可以将ffmpeg的全部.so库拷贝到/usr/lib目录下去。
cp /home/wbyq/ffmpe4.2.2/_install/lib/* /usr/lib -dfv
说明:拷贝动态库最好都加上-d参数,保留库之间的链接属性。
拷贝之后再执行ldconfig
命令生效,也就是刷新缓存文件,让系统知道你更改了/usr/lib目录。
4. 编译zlib
4.1 编译zlib
wget http://www.zlib.net/zlib-1.2.12.tar.gz #下载zlib
tar zxvf zlib-1.2.12.tar.gz #解压
cd zlib-1.2.12 #进入目录
./configure #配置
make && make install #编译安装
4.2 安装g++编译器
如果需要编译C++代码,需提前安装g++编译器,默认只有gcc编译器。
yum -y install gcc-c++
4.3 编译quazip
wget https://udomain.dl.sourceforge.net/project/quazip/quazip/0.7.3/quazip-0.7.3.zip #下载quazip
unzip quazip-0.7.3.zip #解压
cd quazip-0.7.3 #进入目录
qmake #生成Makefile
make #编译
说明: quazip是Qt的工程,需要使用qmake进行编译。
如果是桌面版Linux那就很简单的,直接在Qt官网上下载xxx.run安装包,在命令行运行就可以安装。
那如果在Linux服务器上如何安装Qt的编译环境?因为可能有这么个需求,需要在Linux服务器命令行上编译Qt代码。 这种情况下就需要搭建一个Qt编译环境。
**解决办法: **将桌面版上安装好的Qt目录下,对应的编译器套件目录打包拷贝到Linux服务器上解码即可使用。
比如:我在ubuntu18.04上安装了Qt5.12.6,我的安装目录:/home/wbyq/Qt5.12.6
, 那么将/home/wbyq/Qt5.12.6/5.12.6/gcc_64/
目录打包即可。
下面是/home/wbyq/Qt5.12.6/5.12.6/gcc_64/
目录下的文件。
wbyq@wbyq:~/work$ ls /home/wbyq/Qt5.12.6/5.12.6/gcc_64/
bin doc include lib mkspecs phrasebooks plugins qml translations
打包压缩的命令:
tar czvf gcc_64.tar.gz /home/wbyq/Qt5.12.6/5.12.6/gcc_64
打包之后生成的文件: gcc_64.tar.gz
,拷贝到Linux服务器上解压,然后将bin目录下的qmake
文件建立一个软链接文件到/usr/local/bin/
目录下。
ln -s /home/work/gcc_64/bin/qmake /usr/local/bin/qmake
前面的目录/home/work/gcc_64/bin/qmake
是我在服务器上解压的路径。
然后就可以在Qt的工程目录下使用qmake生成Makefile文件,然后执行make即可编译Qt程序了。
如果编译好的Qt程序无法正常的运行,缺少库,需要告诉系统你的Qt动态库在哪里。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/work/gcc_64/lib
这行命令在当前命令行执行只是当前终端进程有效,如果想要全局生效,将这行代码加到/etc/profile文件最后,然后执行reoot
命令重启系统即可。
- 点赞
- 收藏
- 关注作者
评论(0)