Linux中软件的三种安装方式
Linux系统中,最常用的有三种安装方式
- 源码编译安装(根据当前系统编译)
- rpm安装(需要自己安装相应的依赖)
- yum安装(自动安装依赖)
当然,解压、配置(相当于windwos下绿色版的安装),也算是一种安装方式。
解压来,我将介绍这三种安装方式的使用方法!
文章目录
源码编译安装
src-build概述
源码编译安装即src-build式安装。
源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。
Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure -help
输出详细的选项列表。
其中-prefix
选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin
,库文件默认放在/usr/local/lib
,配置文件默认放在/usr/local/etc
,其它的资源文件放在/usr/local/share
,比较凌乱。
如果配置-prefix
,如下:
1 | ./configure --prefix=/usr/local/test |
可以把所有资源文件放在/usr/local/test的路径中,不会杂乱。
用了-prefix
选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。
当然要卸载程序,也可以在原来的make目录下用一次make uninstall,但前提是make文件指定过uninstall。
src-build安装Nginx
接下来,我以Nginx为例子,介绍源码编译安装方式:
(1)安装 gcc
Nginx 具有很强的可扩展性,需要使用哪些功能,只需通过 with 配置后重新编译即可添加此功能,所以对于 Nginx 的源码安装方式是我们最常接触到的。
Nginx 是由 C/C语言编写的,所以对其进行编译就必须要使用相关编译器。对于C/C语言的编译器,使用最多的是 gcc 与 gcc-c++,而这两款编译器在 CentOS6.5 中是没有安装的,所以首先要安装这两款编译器。
gcc,GNU Compiler Collection,GNU 编译器集合,其可以编译多种语言。
(2)安装依赖库
基本的 Nginx 功能依赖于一些基本的库,在安装 Nginx 之前需要提前安装这些库。
A. pcre-devel:pcre,Perl Compatible Regular Expressions,Perl 脚本语言兼容正则表达式,为 Nginx 提供正则表达式库。(即安装正则表达式的库)
B. openssl-devel:为 Nginx 提供 SSL(安全套接字层)密码库,包含主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。在安装之前需要注意,很多库具有 devel 库与非 devel 库两种。devel 库表示 development开发库,比非 devel 库会多出一些头文件、静态库、源码包等。而这些包在运行时不可能用到,但在开发时有可能用到。所以对于程序员来说,一般都是需要安装 devel 库的。不过,在 yum 安装 devel 库时,由于其依赖于非 devel 库,所以其会先自动安装非 devel 库,而后再安装 devel 库。所以真正在安装时,只需显示的安装 devel 库即可。通过以下命令可以查看到,非 devel 库也被安装了。
1 | # 1.为了编译nginx源码 |
然后,下载nginx,下载地址为:http://nginx.org/en/download.html
这里选择nginx-1.8.1版本进行下载。
- 将nginx-1.8.1.tar.gz上传到linux的/opt/apps/目录下(需要创建apps文件夹)
- 解压nginx-1.8.1.tar.gz,输入命令
tar -zxvf nginx-1.8.1.tar.gz
- 配置nginx(configure)
1 | [root@layne testdir]# cd /opt/apps/nginx-1.8.1 |
输入以下命令进行配置
1 | ./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_gzip_static_module --error-log-path=/var/log/nginx/nginx.log --pid-path=/var/log/nginx/pid |
/opt/nginx
指的是安装目录http_ssl_module
支持安全协议--with-http_gzip_static_module
支持压缩--error-log-path
错误日志目录--pid-path=/var/log/nginx/pid
进程id放置的目录信息
执行后输出以下结果
上面表示:
1 | nginx path prefix: "/opt/nginx" 将来安装的时候放的目录 |
这个步骤可以理解为预编译,主要用于检测系统基准环境库是否满足gcc环境,生成makefile文件。
- 编译(make)
make clean
命令用来清除上一次编译生成的目标文件(清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件)。这个步骤可有可无,但为了确保编译的成功,还是加上为好。防止由于软件中含有残留的目标文件导致编译失败。
生成脚本及配置文件:make
(根据Makefile文件编译源代码、连接、生成目标文件、可执行文件)
编译步骤:根据Makefile文件生成相应的模块
所以一般先输入make clean
再输入make
- 安装(make install)
输入make install
(将编译成功的可执行文件安装到系统目录中)
1 | # 安装之后进入nginx的安装目录/opt/nginx |
conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其他的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有个样板配置文件,以文件名.default结尾,使用的使用将其复制并将default去掉即可。
html:目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。
logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面。
sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能。
现在,我们启动nginx
1 | [root@layne conf]# cd ../sbin/ |
在浏览器中输入你的ip地址,如http://192.168.50.33/
出现该界面说明nginx安装成功。
关于卸载
要卸载程序,也可以在原来的make
目录下用一次make uninstall
,但前提是Makefile
文件有uninstall
命令。
也可以将有关目录删除,这个方法会比较麻烦,建议网上查找详细步骤。
rpm安装软件
rpm概述
RPM(RedHat Package Manager)安装管理,这个机制最早是由Red Hat开发出来,后来实在很好用,因此很多 distributions(发行版)就使用这个机制来作为软件安装的管理方式 ,包括Fedora,CentOS,SuSE等等知名的开发商。
RPM的优点
- RPM内含已经编译过的程序与配置文件等数据,可以让用户免除重新编译的困扰
- RPM在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装
- RPM文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件
- RPM管理的方式使用数据库记录 RPM 文件的相关参数,便于升级 、移除、查询与验证
rpm默认安装的路径如下:
- /etc 一些配置文件放置的目录,例如/etc/crontab
- /usr/bin 一些可执行文件
- /usr/lib 一些程序使用的动态链接库
- /usr/share/doc 一些基本的软件使用手册与说明文件
- /usr/share/man 一些man page(Linux命令的随机【跟随虚拟机】帮助说明)文件
rpm安装命令
1 | rpm -ivh package_name |
选项与参数:
-i
:install的意思-v
:察看更细部的安装信息画面-h
:以安装信息列显示安装进度
安装单个rpm包
1 | rpm -ivh package_name |
安装多个rpm包
1 | rpm -ivh a.i386.rpm b.i386.rpm *.rpm |
安装网上某个位置rpm包
1 | rpm -ivh http://website.name/path/pkgname.rpm |
rpm安装jdk
这里,我通过rpm安装jdk为例子,进行说明:
- 将jdk上传到/opt/apps目录下
1 | [root@layne ~]# cd /opt/apps |
- 安装当前目录下的jdk-7u80-linux-x64.rpm
1 | [root@layne apps]# rpm -ivh jdk-7u80-linux-x64.rpm |
- 查找java安装目录的位置:
1 | [root@layne apps]# whereis java |
- 配置环境变量
进入vim /etc/profile
,在文件最后加入以下两行代码:
1 | export JAVA_HOME=/usr/java/default |
- 让配置生效,使用
source /etc/profile
- 测试安装配置是否成功
1 | [root@layne ~]# java -version |
出现以上信息,说明配置成功
rpm安装:
- redhat提供了rpm管理系统
- 已经编译的软件包:针对不同的平台系统编译目标软件包
- 操作系统维护安装信息
- 软件包包含依赖检查,这是人需要参与处理的。你得下载它需要的所有依赖包并安装,才能安装一个rpm软件。
rpm查询
简单原理:rpm在查询的时候,其实查询的地方是在/var/lib/rpm/ 这个目录下的数据库文件
1 | [root@layne ~]# ll /var/lib/rpm/ |
rpm查询已安装软件,选项与参数:
-q :仅查询,后面接的软件名称是否有安装
-qa :列出所有的,已经安装在本机Linux系统上面的所有软件名称 !!!
-qi :列出该软件的详细信息,包含开发商、版本和说明等 !!
-ql :列出该软件所有的文件与目录所在完整文件名 !!
-qc :列出该软件的所有配置文件 !
-qd :列出该软件的所有说明文件
-qR :列出和该软件有关的相依软件所含的文件
-qf :由后面接的文件名,找出该文件属于哪一个已安装的软件 、
查询某个 RPM 文件内含有的信息: -qp[icdlR]
注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出 某个 RPM 文件内的信息,而非已安装的软件信息
案例1:查找是否安装jdk
1 | [root@layne ~]# rpm -qa |grep jdk |
注意:grep jdk
本来就是模糊查询,不用加*
。
案例2:查询jdk所包含的文件及目录
1 | [root@layne ~]# rpm -ql jdk |
案例3:查看jdk包的相关说明
1 | [root@layne ~]# rpm -qi jdk |
案例4:列出iptables的配置文件
1 | [root@layne ~]# rpm -qc iptables |
案例5:查看apr需要的依赖
1 | [root@layne ~]# yum install apr |
温馨提示:大改动之前一定要拍快照
rpm安装MySQL
- 查找当前系统中安装的MySQL:
1 | [root@layne ~]# rpm -qa | grep mysql |
上面是CentOS6.5自带的mysql,但是版本有点低
- 将上一步找到的mysql相关的包都删除(
-e
是erase的意思)
1 | [root@layne ~]# rpm -e mysql-libs-5.1.71-1.el6.x86_64 |
会发现mysql5.1.7被postfix-2:2.6.6-2.2.el6_1.x86_64依赖:
加上--nodeps
不检查依赖直接删除
1 | [root@layne ~]# rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64 |
- 检查并删除老版本mysql的开发头文件和库(如果有的话)
1 | [root@layne ~]# find / -name "mysql*" |
注意:卸载后/var/lib/mysql中的数据及/etc/my.cnf
不会删除(可以先备份,后删除),如果确定没用后就手工删除。
- 安装perl
1 | [root@layne ~]# yum install perl -y |
- 下载numactl-2.0.9-2.el6.x86_64.rpm并安装
1 | [root@layne apps]# cd /opt/apps/rpm_mysql |
numactl-2.0.9-2.el6.x86_64.rpm为Mysql依赖的包
- 安装mysql(有顺序要求)
方法1:依次安装如下软件包
1 | rpm -ivh mysql-community-common-5.7.19-1.el6.x86_64.rpm |
方法2:执行rpm -ivh mysql-community-*
,让系统自己判断rpm安装顺序
- 修改/etc/my.cnf文件,设置数据库的编码方式
1 | [client] |
- 如果出现错误,请查看/etc/my.cnf文件中指定的错误log日志的文件
错误log的存放位置为log-error=/var/log/mysqld.log
这里可能会出现找不到文件的情况,如果找不到这个文件,就先执行第9步再尝试,如果再不行就重启系统。
-
启动MySQL:
service mysqld start
-
找到随机密码
在/var/log/mysqld.log
中有一行:A temporary password is generated for root@localhost,后面就是随机密码
然后使用随机密码登陆:
1 | mysql -uroot -p"yAe7QGVJ;HlR" |
- 修改模式密码
1 | mysql> set global validate_password_policy=0; |
- 登陆mysql查看编码方式
1 | mysql> show variables like '%character%'; |
- 给root设置远程登录权限
1 | mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; |
ALL PRIVILEGES指所有的权限
‘root’@’%’ 指root用户除了localhost,也支持其他的远程登录
- 设置msyql开机启动
1 | mysql> exit |
到这里就安装完毕,如果安装失败,就把第6步安装的4个包删了重新来。
rpm卸载
找出与apr有关的软件名称,并尝试移除apr这个软件
1 | [root@layne ~]# rpm -qa|grep apr |
yum安装软件
了解epl
全称:Extra Packages for Enterprise Linux,企业版Linux的额外软件包。它是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。这个源兼容RHEL及像CentOS和Scientific Linux这样的衍生版本。
我们可以很容易地通过yum命令从EPEL源上获取上万个在CentOS自带源上没有的软件。EPEL提供的软件包大多基于其对应的Fedora软件包,不会与企业版Linux发行版本的软件发生冲突或替换其文件。更多关于EPEL 项目的细节可以到以下网站获取:https://fedoraproject.org/wiki/EPEL。
RHEL/CentOS系统有许多第三方源,比较流行的比如RpmForge,RpmFusion,EPEL,Remi等等。然而需要引起注意的是,如果系统添加了多个第三方源,可能会因此产生冲突——一个软件包可以从多个源获取,一些源会替换系统的基础软件包,从而可能会产生意想不到的错误。已知的就有Rpmforge与EPEL会产生冲突。对于这些问题我们建议,调整源的优先权或者有选择性的安装源,但是这需要复杂的操作,如果你不确定如何操作,我们推荐你只安装一个第三方源。
yum命令
yum的源在/etc/yum.repos.d/
目录下,以.repo结尾的的文件都是yum源配置文件,yum可以同时有多个镜像,名字无所谓,只要文件以.repo结尾就可以使用。
1 | [root@layne ~]# ls /etc/yum.repos.d/ |
可以看到,我启用了三个源,分别是CentOS-Base-Neu.repo、CentOS-Base.repo、 CentOS-Media.repo
yum命令:
1 | yum repolist #查看yum源 |
查询:
yum list
列出系统中已经安装的和可以安装的包
1 | yum list | grep mysql |
yum search
在yum源搜索指定的包
1 | yum search mysql |
yum info
打印指定包的描述信息
1 | yum info mysql |
安装和卸载:
1 | yum install xxx |
yum分组命令:
查询yum源中rpm包的组信息(一个group组包含多个软件包)
1 | yum grouplist |
查看指定组的信息
1 | yum groupinfo "Chinese Support" |
安装指定的组(即安装该组下的所有软件包)
1 | yum groupinstall "Chinese Support" |
删除指定软件
1 | yum groupremove "Chinese Support" |
更新指定软件组
1 | yum groupupdate "Chinese Support" |
其它命令(了解)
1 | Usage: yum [options] COMMAND |
yum的三类源
(1)本地自定义源
1 | cd /etc/yum.repos.d/ |
localRepo.repo中base那一部分改为
1 | ... |
插入DVD的ISO镜像文件(CentOS-6.8-x86_64-bin-DVD1.iso),挂载到/mnt目录
挂载设备
1 | mount /dev/cdrom /mnt |
统计出该目录有多少个rpm包
然后清缓存,再生成数据缓存
1 | yum clean all #清空本地元数据缓存 |
至此,本地yum源配置完成。
(2)发布局域网yum源
tomcat发布自定义的yum源
解压tomcat的tar包:
1 | tar -zxf apache-tomcat-7.0.68.tar.gz |
首先将dvd1和dvd2的内容从node2主机的/mnt目录拷贝到tomcat的webapps/ROOT/目录
输入./startup.sh
启动tomcat
在node1的tomcat.repo中进行配置:
配置tomcat.repo:
1 | [base] |
然后清缓存,再生成数据缓存
1 | yum clean all #清空本地元数据缓存 |
这样就可以了
(3)CentOS使用其他源
这个可以参考我的博客把Linux系统中的yum替换为清华源,速度瞬间从5KB/s变到3.5MB/s