序言
上一篇我们了解啦Linux系统中,根目录下的各个文件夹是做什么用的啦,也学会文件如何压缩打包。那么接下来我们就该用到这个系统啦。用这个系统,就是用这个系统的软件,那么我们对我们需要的软件如何安装,对不需要的软件如何卸载,本篇就此做个详解。
我们针对的系统为Centos,那么Centos的主要软件管理有3种,源码与tarball,rpm与srpm,yum。
我会在讲解每一种安装方式的同时,写一个我们开发常用到的软件实例的安装,源码安装redis,rpm安装rabbitmq,yum安装nginx。
源码与tarball方式安装软件的几个名词
在安装之前我们先说几个名词,对于开发人员来说应该是一目了然的。
开放源码:就是用编程语言写的程序代码,人懂机器不懂,无法在系统中执行。
编译程序:将程序代码转译成为机器看得懂的语言。
gcc:Liunx系统中最常见的语言为c语言,而c语言在linux上面最标准的编译程序就是gcc。它是由GNU计划所维护。对GNU有兴趣的话大家可以网上搜下资料。
利用gcc编译器进行程序的编译流程示意图:
可执行文件:经过编译程序变成二进制程序后机器能够看得懂所以称为可执行的文件。
函数库:类似子程序的角色,可以被调用来执行的一段功能函数。又分为动态函数库与静态函数库,动态函数库以so结尾,通常被命名为libxxx.so,编译时程序中只保存起指向地址,不合并到主程序中,所以主程序不能独立运行,需包含动态库,且动态库不可随意修改路径。静态函数库以.a结尾,通常被命名为libxxx.a,编译时会将其功能合并至主程序中,运行是不需要静态库的支持。
程序执行时引用外部动态函数库的示意图如下:
Tarball:这个更容易理解啦,就是为啦方面在网络上下载,软件开发者把源码打包压缩后,放到网上发布的软件文件。一般包含,源代码文件,检测程序文件(可能是configure或config等文件名),本软件的简易说明与安装说明(install或readme)。
Tarball方式安装Redis实例演练
基本步骤:
1、下载源文件至/usr/local/src目录下解压缩。
2、取得步骤流程:进入新建的目录下面,去查阅install与readme等相关文件内容。
3、相关属性软件安装:根据install与readme的内容查看并安装好一些相关的软件
4、建立makefile:以自动检测程序(configure或config)检测操作环境,并建立makefile这个文件
5、编译:以make这个程序并使用该目录下的makefile作为他的参数配置文件,进行make(编译)操作
安装:以make这个程序,并以makefile这个参数配置文件,依据install这个目标的指定来安装到正确的路径。
常用命令:
./configure:这个步骤就是在创建 Makefile 这个文件啰!通常程序开发者会写一支 scripts 来检查你的 Linux 系统、相关的软件属性等等,这个步骤相当的重要, 因为未来你的安装信息都是这一步骤内完成的!另外,这个步骤的相关信息应该要参考一下该目录下的 README 或 INSTALL 相关的文件!
make clean:make 会读取 Makefile 中关于 clean 的工作。这个步骤不一定会有,但是希望执行一下,因为他可以去除目标文件!因为谁也不确定源代码里面到底有没有包含上次编译过的目标文件 (*.o) 存在,所以当然还是清除一下比较妥当的。 至少等一下新编译出来的可执行文件我们可以确定是使用自己的机器所编译完成的嘛!
make:make 会依据 Makefile 当中的默认工作进行编译的行为!编译的工作主要是进行 gcc 来将源代码编译成为可以被执行的 object files ,但是这些 object files 通常还需要一些函数库之类的 link 后,才能产生一个完整的可执行文件!使用 make 就是要将源代码编译成为可以被执行的可可执行文件,而这个可可执行文件会放置在目前所在的目录之下, 尚未被安装到预定安装的目录中;
make install:通常这就是最后的安装步骤了,make 会依据 Makefile 这个文件里面关于 install 的项目,将上一个步骤所编译完成的数据给他安装到预定的目录中,就完成安装啦!
通过configure与make进行编译的示意图如下:
Redis实例安装:
下载:
解压:
编译:
设置配置参数:
启动:
验证使用redis:
总结下:其实在安装某些软件时,可能没有那么繁琐,就比如redis官方也有安装示例,大家看看就会啦,安装的方式有很多种,不必过于居于模式,但是一定要看官方的文档,不能胡乱一起瞎搞。
rpm与srpm基础理解
RPM全名是“RedHat Package Manager”,是RedHat公司发展出来的以一种数据库记录的方式来将你所需要的软件安装到linux系统的一套管理机制。
那么什么叫一种数据库记录的方式呢?就是开发发布者将软件编译过之后,打包成rpm基础的包文件,包中的软件都有头文件,头文件中记录这个软件需要依赖的软件,所需的服务器配置,及自身版本的一些信息,当我们安装这个软件时,rpm会根据这个头文件与liunx主机中的安装软件的记录信息做匹配,然后反馈环境是否满足,是否已存在,等等信息。
那么编译过后的软件,直接安装有什么优缺点呢?优点不用编译可快速安装,缺点:我们安装的主机环境必须要跟开发发布者编译时的环境一致。
那么什么叫做依赖的软件呢?很简单就想你安装MSSQL需要.NetFramwork一样,安装rabbitmq需要安装erlang环境一样。他们安装时都有依赖的软件或平台。
那么rpm与srpm的区别是什么呢?一张图搞定,如下:
rpm的包是什么样子呢?
首先先挂载cdrom到media下
查看rpm什么样子
看看有多少自带的Rpm包
哇自带3725个,基本够你用的啦。如果处理一些依赖软件或者自带的不能满足你的话,除啦软件官网下载之外,哥哥推荐三个网站:
http://rpm.pbone.net/
http://rpmfind.net/
http://www.rpmseek.com/index.html
Rpm命名规则
操作硬件平台:
Rpm安装语法:
[root@localhost ~]# rpm -ivh package_name
选项与参数:
-i :install 的意思
-v :察看更细部的安装信息画面
-h :以安装信息列显示安装进度
一般情况下这一句命令,配上系统自带的rpm包与上面三个网站中的包就足够啦,如果不能解决你的问题的话,那要查看软件官方提供的安装文档。
如果你对软件足够的熟悉那么也可以采用下面的参数进行安装。
Rpm的升级与更新
Rpm的查询
Rpm验证与数码签章
上面查询是否被改动过中有......T. 这是什么意思呢?
- S :(file Size differs) 文件的容量大小是否被改变
- M :(Mode differs) 文件的类型或文件的属性 (rwx) 是否被改变?如是否可执行等参数已被改变
- 5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同
- D :(Device major/minor number mis-match) 设备的主/次代码已经改变
- L :(readLink(2) path mis-match) Link 路径已被改变
- U :(User ownership differs) 文件的所属人已被改变
- G :(Group ownership differs) 文件的所属群组已被改变
- T :(mTime differs) 文件的创建时间已被改变
- P :(caPabilities differ) 功能已经被改变
如果一个文件都被改动过,那么如下显示:SM5DLUGTP c filename
至于那个 c 代表的是“ Config file ”的意思,也就是文件的类型,文件类型有下面这几类:
- c :配置文件 (config file)
- d :文件数据文件 (documentation)
- g :鬼文件~通常是该文件不被某个软件所包含,较少发生!(ghost file)
- l :授权文件 (license file)
- r :读我文件 (read me)
Rpm反安装与重建数据库
rpm --rebuilddb ==重建数据库
Rpm安装rabbitmq实战
首先打开rabbitmq.com官网,他的安装页有rpm包。安装文档指示我们安装rabbitmq需要2大步骤。
1、先安装erlang环境,2、安装rabbitmq。
由此可知rabbitmq是依赖erlang环境的,下面我们先安装下erlang。
[root@localhost src]# wget https://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_1_general/esl-erlang_19.2~centos~7_amd64.rpm --2017-02-07 14:10:27-- https://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_1_general/esl-erlang_19.2~centos~7_amd64.rpm 正在解析主机 packages.erlang-solutions.com (packages.erlang-solutions.com)... 31.172.186.53 正在连接 packages.erlang-solutions.com (packages.erlang-solutions.com)|31.172.186.53|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:43611864 (42M) [application/x-redhat-package-manager] 正在保存至: “esl-erlang_19.2~centos~7_amd64.rpm” 100%[==================================================================================================================================>] 43,611,864 446KB/s 用时 80s 2017-02-07 14:12:04 (530 KB/s) - 已保存 “esl-erlang_19.2~centos~7_amd64.rpm” [43611864/43611864]) [root@localhost src]# rpm -ivh esl-erlang_19.2~centos~7_amd64.rpm 错误:依赖检测失败: libodbc.so.2()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_baseu-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_baseu-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_baseu_xml-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_adv-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_adv-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_aui-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_aui-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_aui-2.8.so.0(WXU_2.8.5)(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_core-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_core-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_core-2.8.so.0(WXU_2.8.10)(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_gl-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_gl-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_html-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_html-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_stc-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_stc-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_xrc-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要 libwx_gtk2u_xrc-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
由此可见安装erlang环境也是需要环境支持的。那么我们安装erlang需要的安装环境,那么我们首先需要安装非默认的第三方yum库。
[root@localhost bin]# yum install epel-release
然后安装erlang需要的安装环境
[root@localhost bin]# yum install unixODBC unixODBC-devel wxBase wxGTK SDL wxGTK-gl 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: mirror.premi.st * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 软件包 unixODBC-2.3.1-11.el7.x86_64 已安装并且是最新版本 软件包 unixODBC-devel-2.3.1-11.el7.x86_64 已安装并且是最新版本 软件包 wxBase-2.8.12-20.el7.x86_64 已安装并且是最新版本 软件包 wxGTK-2.8.12-20.el7.x86_64 已安装并且是最新版本 软件包 SDL-1.2.15-14.el7.x86_64 已安装并且是最新版本 软件包 wxGTK-gl-2.8.12-20.el7.x86_64 已安装并且是最新版本
然后就可以顺利的把erlang安装上啦
[root@localhost src]# rpm -ivh esl-erlang_19.2~centos~7_amd64.rpm
最后安装rabbitmq那也是顺溜的很啦。
[root@localhost src]# rpm -ivh rabbitmq-server-3.6.6-1.el7.noarch.rpm
启动/关闭rabbitmq服务
- Whereis rabbitmq 找到bin/rabbitmq-server
- ./rabbitmq-server 启动 Starting broker... completed with 0 plugins. 说明安装成功。
- ./rabbitmq-server -detached 后台启动方式
- ./rabbitmqctl stop 关闭
启动端口
找到/etc/sysconfig/iptables ,如果不存在,随便一个iptalbles命令即可出现,如iptables -F 清除iptables已有的所有规则。配置如下端口对外开放。
[root@localhost src]# vim /etc/sysconfig/iptables
#RabbitMQ -A INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 25672 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 4369 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 5671 -j ACCEPT #RabbitMQ
启动插件
./rabbitmq-plugins enable rabbitmq_management(执行一次以后不用再次执行)
客户端打开管理页面
输入:服务器地址:15672 默认gust,不可用。只能在服务端可用。
关于rabbitmq的详细内容以后我还会补充,以前也有一篇我自己的博文,有兴趣的可以点开看下:.Net使用Rabbitmq详解
yum安装软件详细
关于yum的使用是非常简单的,大家可以看下 http://man.linuxde.net/yum 多敲敲练练就会啦。
而文章一开始说yum方式安装nginx,那么命令看仔细啦啊。
[root@localhost src]# yum install nginx
对,你没有看错,在线安装,自动解决软件相互依赖问题,安装成功啦,就是这么简单。
这里值得一说的是yum的包源配置是在下面的文件中:
[root@localhost etc]# ll /etc|grep yum drwxr-xr-x. 6 root root 95 2月 7 20:09 yum -rw-r--r--. 1 root root 970 11月 15 23:30 yum.conf drwxr-xr-x. 2 root root 4096 2月 7 20:10 yum.repos.d
在yum.repos.d这个文件夹下,你如何看懂文件中的内容,以及如何配置,那么你需要自行百度,我不想写啦
总结
接下来是大家最喜欢的总结内容啦,内容有三,如下:
1、希望能关注我其他的文章。
2、博客里面有没有很清楚的说明白,或者你有更好的方式,那么欢迎加入左上方的2个交流群,我们一起学习探讨。
3、你可以忘记点赞加关注,但千万不要忘记扫码打赏哦。