Day13 03-大家都会的4种Linux软件安装与管理

文章目录

      • 第四章 软件安装与管理【重要】
        • 4.1 软件安装介绍
        • 4.2 二进制安装
          • 4.2.1 安装.tar.gz、.bz2二进制软件包
          • 4.2.2 提供安装程序的软件包
          • 4.2.3 案例: 二进制安装JDK
        • 4.3 rpm安装
          • 4.3.1 案例: rpm安装MySQL
        • 4.4 软件安装之yum【重点】
          • 4.4.1 yum的简介
          • 4.4.2 阿里云镜像替换
          • 4.4.3 yum的基本操作
          • 4.4.4 搭建本地yum源
          • 4.4.5 搭建局域网yum源
        • 4.5 软件安装之源码安装【了解】
          • 4.5.1 源码编译安装
          • 4.5.2 安装步骤
          • 4.5.3 案例: 源码编译安装Python3

第四章 软件安装与管理【重要】

4.1 软件安装介绍

学软件开发,各种台的软件熟练安装是必须要熟练掌握。大家都知道,Windows下安装软件时,只需用鼠标双击软件的安装程序,或者用Zip等解压缩软件解压缩即可安装;在android或者apple中安装软件时,只需要在手机应用商店点击安装即可。而在Linux下安装软件难度高于Windows、Android、ios和windows phone下软件安装。下面我就详细讲解Linux下如何安装软件。

Linux下软件的安装大概可以分为如下几种:

1 二进制程序的安装(最简单安装)

2 rpm程序安装(后缀名为*.rpm) 

3 yum源安装(本质也是rpm安装,它只是rpm的一种安装方式而已)

4 源码安装

4.2 二进制安装

Linux下二进制格式的软件是指事先已经在各种平台编译安装好相关软件,然后压缩打包,在安装时只需解压或者执行安装可执行文件即可。这种软件发行格式类似与windows系统,这样做的原因是保护源代码程序不对外泄露,保护知识产权。二进制软件包的优点是安装简单、容易,缺点是缺乏灵活性,相应的软件包执行在对应平台下安装,离开这个环境软件就无法运行。

二进制软件包提供了很多类型的打包方式,最常见的就是我们RPM格式的包,还有以“*.tar.gz、*.tgz、*.bz2“等形式的二进制软件包,最后还有一个就是提供安装程序进行安装的二进制软件包。下面分别介绍:

4.2.1 安装.tar.gz、.bz2二进制软件包

这种格式的软件包,安装其实就是简单的解压过程,根据不同的软件打包格式,我们用相应的解压命令解压即可。

对于*.tar.gz软件格式解压:tar –zxvf xxxxxx.tar.gz 对于*.bz2软件格式解压: tar -jxvf xxxxxx.tar.gz这类软件的卸载,对于解压后只有单一目录的软件,可以直接删除对应软件目录即可,如果解压后文件分散在几个目录中,需要一一手动删除目录。

例如:我们常用的应用服务器容器tomcat软件就是基于这种打包压缩格式发行的。我们只需下载后解压即可完成安装,如果需要卸载,直接删除对应的tomcat目录即可。

4.2.2 提供安装程序的软件包

这种软件包都提供了安装脚本或者安装向导程序,只需在下载此类软件包后解压,然后进入安装目录,找到类似的setup、install、install.sh之类的可执行文件运行即可,然后根据提示(比如安装路径,参数设置等等)进行相应的设置,接着安装就自动完成。

这类软件的卸载也提供了相应的卸载脚本或者卸载向导,根据提示即可完成软件卸载。

例如:经常使用的sun jdk就是这种安装方式,从网络下载下来的jdk是个二进制可执行文件,首先设置文件的可执行权限(例如chmod 755 jdk1.6.0_07.bin,权限操作本书后面会有详细讲述) ,然后运行软件(也即是./ jdk1.6.0_07.bin)即可完成安装。安装完成会在当前目录产生一个对应的jdk程序目录。

4.2.3 案例: 二进制安装JDK
  1. 准备安装包
# 准备JDK的安装包,使用SSH工具,上传到Linux,放到 ~/softwares 路径下
[root@qianfeng01 ~]# cd ~/softwares && ls
  1. 解压安装
# 将刚才上传的JDK的安装包直接解压即可完成安装
# 安装路径规划: /usr/local
[root@qianfeng01 ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local
  1. 更名操作【非必需】
# 将JDK更名,为了方便后续的使用
[root@qianfeng01 ~]# mv jdk1.8.0_221/ jdk
  1. 配置环境变量
# 到第三步,JDK的安装已经结束。但是如果需要正常使用的话,还需要配置环境变量
# Linux的环境变量和Windows的环境变量配置大同小异
  1. 环境变量配置文件
1. /etc/profile : 系统级的配置,针对所有的用户生效。每一个用户登录的时候都会加载这个文件。【选择这个】
2. ~/.bash_profile : 用户级别的配置,针对当前用户生效。登录特定用户的时候会加载这个文件。
  1. 编辑配置文件
[root@qianfeng01 ~]# vim /etc/profile
...前面内容省略...
...Shift + g 跳转到末尾,在下一行添加...
# Java Environment
export JAVA_HOME=/usr/local/jdk		# 你的JDK的安装路径
export PATH=$PATH:$JAVA_HOME/bin	# 配置path
  1. 重新引导
# 重新引导/etc/profile文件,使得刚才的配置生效
[root@qianfeng01 ~]# source /etc/profile
  1. 验证
#在任意的路径下,使用javac,如果提示的不是“未找到命令”,则配置完成!
[root@qianfeng01 ~]# javac
用法: javac <options> <source files>
其中, 可能的选项包括:
  -g                         生成所有调试信息
  -g:none                    不生成任何调试信息
  -g:{lines,vars,source}     只生成某些调试信息
  -nowarn                    不生成任何警告
  ......

4.3 rpm安装

RPM软件包管理

RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括RedHat、CentOS、SUSE等Linux的发行版本都有采用,可以算是公认的行业标准了。RPM文件在Linux系统中的安装最为简便

RPM命令使用

rpm的常用参数

i:安装应用程序(install)

vh:显示安装进度(verbose hash) 

U:升级软件包(update) 

qa: 显示所有已安装软件包(query all)

e:卸载应用程序(erase)

注意:如果其它软件包有依赖关系,卸载时会产生提示信息,可使用--nodeps强行卸载。

查询所有安装的rpm包: [root@qianfeng01 ~]# rpm –qa

查询mysql相关的包: [root@qianfeng01 ~]# rpm –qa | grep mysql

安装:[root@qianfeng01 ~]# rpm  -ivh  jdk.rpm

卸载: [root@qianfeng01 ~]# rpm –e mysql*

强行卸载:[root@qianfeng01 ~]# rpm –e mysql*  --nodeps
4.3.1 案例: rpm安装MySQL
  1. 安装包准备
通过SSH工具,将MySQL的RPM安装包上传到Linux的 ~/softwares 目录下。

MySQL的RPM安装包,可以在MySQL的官网下载,也可以直接使用课程提供的资料。
注意事项:
- 在官网下载安装包的时候,注意版本号
- mysql-8.0.26-1.el7.aarch64.rpm-bundle.tar
- 这里的el7,表示适用于CentOS7的版本。注意,不要下载el6的。
- aarch64: 这个表示arm版本的CentOS,如果是amd64架构的,可以选择x64。
  1. 环境准备
# CentOS7中,系统默认采用的数据库是mariadb,这个数据库与MySQL冲突!
# 因此,在安装MySQL之前,需要先将其卸载!
[root@qianfeng01 ~]# rpm -qa | grep mariadb			# 查询是否已经安装了mariadb
mariadb-libs-5.5.68-1.el7.aarch64				    # 查询结果。如果没有这个结果,说明没有安装。

# 强制卸载mariadb
# --nodeps: 强制卸载,RPM卸载程序的时候,如果这个程序被其他的程序依赖,是无法卸载的。
#           此时,就需要使用--nodeps,忽略依赖,强制卸载。
# 下面的卸载命令中,卸载的包是上方查询到的包
[root@qianfeng01 ~]# rpm -e mariadb-libs-5.5.68-1.el7.aarch64 --nodeps
  1. 安装MySQL
# 安装MySQL, 其实就需要安装 mysql-community-server, 但是它依赖其他的包
[root@qianfeng01 mysql]# rpm -ivh mysql-community-common-8.0.26-1.el7.aarch64.rpm
[root@qianfeng01 mysql]# rpm -ivh mysql-community-client-plugins-8.0.26-1.el7.aarch64.rpm
[root@qianfeng01 mysql]# rpm -ivh mysql-community-libs-8.0.26-1.el7.aarch64.rpm
[root@qianfeng01 mysql]# rpm -ivh mysql-community-libs-compat-8.0.26-1.el7.aarch64.rpm
[root@qianfeng01 mysql]# rpm -ivh mysql-community-client-8.0.26-1.el7.aarch64.rpm
[root@qianfeng01 mysql]# yum install -y net-tools perl
[root@qianfeng01 mysql]# rpm -ivh mysql-community-server-8.0.26-1.el7.aarch64.rpm
  1. 启动MySQL服务
# 查看MySQL服务的运行状态
[root@qianfeng01 ~]# systemctl status mysqld
# 如果MySQL服务没有开启,则开启
[root@qianfeng01 ~]# systemctl start mysqld
  1. 登录到MySQL
# 在第一次开启MySQL服务的时候,会自动生成一个随机的密码
[root@qianfeng01 ~]# grep password /var/log/mysqld.log			# 到mysqld.log文件中查找password
2020-12-16T07:47:14.117739Z 1 [Note] A temporary password is generated for root@localhost: pVLJs6&o(QQe

# 使用这个随机密码登录到MySQL
[root@qianfeng01 ~]# mysql -u root -p
pVLJs6&o(QQe		# 这里用自己的密码登录
  1. 修改密码
# 1. 修改MySQL的密码策略(安全等级)
#    MySQL默认的密码安全等级有点高,在设置密码的时候,必须同时包含大小写字母、数字、特殊字符,以及对位数有要求
show variables like '%validate_password%';			# 查看密码策略
set global validate_password.policy=LOW;			# 修改密码策略等级为LOW
set global validate_password.length=4;				# 密码的最小长度
set global validate_password.mixed_case_count=0;	# 设置密码中至少要包含0个大写字母和小写字母
set global validate_password.number_count=0;		# 设置密码中至少要包含0个数字
set global validate_password.special_char_count=0;	# 设置密码中至少要包含0个特殊字符

# 2. 修改密码
alter user root@localhost identified by '123456';

# 3. 远程授权
create user root@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' with grant option;
  1. 重新登录
试着退出MySQL,用新的密码重新登录。如果可以登录成功,那么MySQL的安装就到此结束!
MySQL在安装完成后,是不需要配置环境变量的。因为RPM的安装特性,启动脚本会被放到/usr/bin下。这个路径本来就在环境变量里面,不需要单独配置。

4.4 软件安装之yum【重点】

4.4.1 yum的简介
yum,是Yellowdog Updater Modified的缩写,是Linux一种软件包管理工具。

    在之前的课程中,我们学习过了RPM的安装。RPM的安装,其实是Linux中的标准的安装方式。但是RPM有一个非常麻烦的地方,就是需要手动管理安装包;另外,RPM是不能自动的解决依赖缺失的。在安装的软件的时候,如果这个程序需要依赖其他的程序,则需要我们手动安装,参考上一篇的练习: MySQL的安装。每一个依赖的程序都需要我们手动安装。
yum则完美的解决了这样的问题。使用yum安装,不需要关心这个软件包依赖什么程序,yum会自动的帮你安装依赖的组件。

    yum的本质其实还是RPM的安装,yum只是对其进行了自动的管理,不需要我们再手动的管理依赖。
4.4.2 阿里云镜像替换
yum是一个在线安装软件的管理工具,因此需要通过网络下载软件。
yum自带的镜像是一个国外的地址,速度会比较慢。因此在使用的过程中,很多时候我们是需要将其替换为国内的源的。

常见的国内的源:
http://mirrors.163.com							# 网易的源
http://mirrors.sohu.com							# 搜狐的源
http://mirrors.tuan.tsinghua.edu.cn	  			# 清华大学源
http://mirrors.ustc.edu.cn						# 中科大源
https://mirrors.aliyun.com						# 阿里巴巴的源

替换阿里源

# 1. 切换到源文件的路径下
#    在这个路径下,有若干个repo文件,里面记录的就是源信息
#    网络镜像源,在CentOS-Base.repo中
[root@qianfeng01 ~]# cd /etc/yum.repos.d

# 2. 将原来的源备份
[root@qianfeng01 yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak

# 3. 下载阿里云的源配置信息到本地
[root@qianfeng01 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 4. 重新构建YUM的缓存
[root@qianfeng01 yum.repos.d]# yum clean all
[root@qianfeng01 yum.repos.d]# yum makecache
4.4.3 yum的基本操作

查询

yum list     				  # 查询所有可用软件包列表

yum search 关键字     			# 搜索服务器上所有和关键字相关的包

yum info 关键字 				# 来查找包名

安装

yum -y install 包名     # -y  自动回答yes  

升级

yum -y update 包名 

# 注意:如果不加包名,就升级所有的,包括内核。必须加包名升级单个软件包,慎用升级所有的
# 检测升级 yum check-update

卸载

yum -y remove 包名

其他操作

yum --help、man yum  				 # 帮助

yum clean all          	   		# 清除缓存和旧的包

yum repolist                	# 查看当前可用的yum源

yum deplist httpd            	# 列出一个包所有依赖的包
4.4.4 搭建本地yum源
  1. 挂载光盘

    1. 自己创建/mnt/cdrom文件夹,为了挂载光盘的内容

      [root@qianfeng01 ~]# mkdir /mnt/cdrom
      
    2. 挂载相关命令

      挂/卸载
      命令: mount / unmount
      格式: mount [参数] 存储设备 挂载点
      说明: 存储设备对应分区的设备文件(如"/dev/sdb1")或网络资源路径。
           挂载点为用户指定用于挂载的目录。挂载点必须是一个已经存在的目录。
      参数 说明
      -t 文件系统类型 指定文件系统的类型。
      通常不必指定,mount会自动选择正确的类型。



      光盘或光盘镜像 iso9660
      fat16文件系统 msdos
      fat32文件系统 vfat
      ntfs文件系统 ntfs
      -o options 主要用来描述设备或档案的挂载方式。


      采用只读方式挂载设备 ro
      用来把一个文件当成硬盘分区挂载上系统 loop
      采用读写方式挂载设备 rw
      指定访问文件系统所用字符集 locharset
      -f 用于除错。它会使mount并不执行实际挂载的动作,而是模拟整个挂载的过程。
      -v 显示较详细信息,通常会和-f一起使用。
      -f 使每一个mount的动作产生一个线程负责执行。挂载大量NFS档案系统时可以加快挂载的动作。
      -a 将/etc/fstab中定义的所有档案系统挂载。通常和-f一起使用
    3. 命令解析

      ##命令格式:mount [-t vfstype] [-o options] device dir 
      其中: 
      #1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有: 
      光盘或光盘镜像:iso9660 
      DOS fat16文件系统:msdos 
      Windows 9x fat32文件系统:vfat 
      Windows NT ntfs文件系统:ntfs 
      Mount Windows文件网络共享:smbfs 
      UNIX(LINUX) 文件网络共享:nfs 
      #2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有: 
      loop:用来把一个文件当成硬盘分区挂接上系统 
      ro:采用只读方式挂接设备 
      rw:采用读写方式挂接设备 
      iocharset:指定访问文件系统所用字符集 
      #3.device 要挂接(mount)的设备。 
      #4.dir设备在系统上的挂接点(mount point)。
      ##将镜像文件挂载在/mnt/cdrom下
      [root@qianfeng01 ~]# mkdir /mnt/cdrom  #在根目录下的mnt目录下创建目录cdrom
      [root@qianfeng01 ~]# mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom	##挂载
      [root@qianfeng01 ~]# umount /mnt/dvd   							##卸载
      
  2. 让网络源失效

    [root@qianfeng01 yum.repos.d]# cd /etc/yum.repos.d/
    
    [root@qianfeng01 yum.repos.d]# rename  .repo  .repo.bak  *        #重命名所有的.repo文件
    
    [root@qianfeng01 yum.repos.d]# cp  CentOS-Media.repo.bak  CentOS-Media.repo     #配置一个.repo文件
    
  3. 对CentOS-Base.repo的解释

    [root@qianfeng01 yum.repos.d]# cat /etc/yum.repos.d/CentOS-Base.repo
    
    [base]
    
    name=CentOS-$releasever - Base
    
    mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=os
    
    baseurl=http://mirror.centos.org/centos/releasever/os/basearch/
    
    gpgcheck=1
    
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    

    解释:

    [base]	     容器名称,一定要放在[]中
    
    name         容器说明,这个可以自己随便写
    
    mirrorlist   镜像站点,这个可以注释掉
    
    baseurl      yum源服务器的地址。默认是CentOS官方的yum源服务器
    
    enabled      此容器是否生效,如果不写或写enable=1都是生效,写成enable=0就是不生效
    
    gpgcheck      如果是1是指RPM的数字证书生效,如果是0则不生效
    
    pggkey        数字证书的公匙文件保存位置,不用修改
    
  4. 修改光盘yum源文件

    [root@qianfeng01 yum.repos.d]# vi CentOS-Media.repo 
    
    [c6-media]
    name=CentOS-$releasever - Media
    baseurl=file:///mnt/cdrom        
    #这里的地址为自己光盘挂载地址,并把不存在的地址注释掉,在行首注释
    # file:///media/cdrom/
    # file:///media/cdrecorder/
    gpgcheck=1
    enabled=1        #把原来的0改为1,让这个yum源配资文件生效
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    

    可使用 yum repolist 查看当前可用yum源

    yum clean all
    
    yum repolist
    

    注意点:

    1 如果一旦重启服务器,需要重新挂载
    
    2 需要检查当前的虚拟机的镜像文件挂载处,将已经连接前面打勾
    
    3 如果镜像文件有两个DVD,我们可以这样做
    
    1)再添加一个光驱,将DVD2连接进来
    
    2)将服务器重启,发现在/dev下有了两个镜像文件(cdrom和cdrom1)
    
    3)在/mnt下再去创建一个文件夹(cdrom1)
    
    4)分别进行挂载操作
    [root@qianfeng01 ~]# mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom
    
    [root@qianfeng01 ~]# mount -t iso9660 -o loop /dev/cdrom1 /mnt/cdrom1
    
    5)到/etc/yum.repos.d里面,同时添加路径
    
    file:///mnt/cdrom
    
    file:///mnt/cdrom1
    
4.4.5 搭建局域网yum源
  1. 选择局域网内的一台机器作为YUM源服务器,安装HTTP服务进程

    [root@qianfeng01 ~]# yum list | grep http
    [root@qianfeng01 ~]# yum -y install httpd.x86_64
    
  2. 开启HTTP服务进程并设置开机自启动

    [root@qianfeng01 ~]# service httpd start
    [root@qianfeng01 ~]# chkconfig httpd on
    
  3. 配置HTTP服务管理YUM源目录

    # HTTP服务进程管理的目录是/var/www/html
    
    # 在管理目录下,创建软连接,指向YUM源目录
    [root@qianfeng01 ~]# ln -s /mnt/dvd /var/www/html/repo        <===都是用绝对路径,保没错
    
  4. 其他机器只需要把本地YUM源的路径指向局域网YUM源地址即可

    [root@qianfeng01 yum.repos.d]# vi local.repo        		# 编辑文件,后缀必须是.repo
    
    [local]																									<=== YUM源仓库名
    name=localrepo																					<=== 昵称
    baseurl=http://局域网IP/repo															<=== 局域网YUM仓库位置
    enabled=1																								<=== 1 表示启用,0表示禁用
    gpgcheck=1																							<=== 1 表示 校验
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6			<=== 校验钥匙
    

4.5 软件安装之源码安装【了解】

4.5.1 源码编译安装
由于linux操作系统开放源代码,因而在其上安装的软件大部分也都是开源软件,例如apache、tomcat、php等软件。开源软件基本都提供源码下载,源码安装的方式;

源码编译安装的优点

1 用户可以自己定制软件功能,安装需要的模块,不需要的功能可以不用安装。

2 用户还可以自己选择安装路径,方便管理。

3 卸载软件也很方便,只需删除对应的安装目录即可。

4 能最大程度和服务器平台融合,效率稍微比其他方式高。

5 没有windows所谓的注册表之说。

源码编译安装的缺点

1 安装较为繁琐,需要自己配置

2 安装较为耗时,需要自己编译源码

3 安装较为容易出错,出错也难以解决
4.5.2 安装步骤
源码安装软件一般有以下几个步骤组成:下载解压源码、分析安装平台环境(ifconfigure)、编译安装软件(make,make install)。下面我们分别介绍。
  1. 下载解压源码

    linux下软件的源码一般都是C或者C++语言编写的,并且都会在软件的官方网站上提供源码包下载,例如apache开源项目的官方网站为http://www.apache.org,此外在网上的很多开源社区一般也提供一些常用软件的源码下载,源码都打包成压缩文件,常见的源码打包压缩格式有“.tar.gz”、“.tar.baz2”等。我们可以从网站上首先下载源码文件,然后在传到所在的linux系统下,如果你的linux系统处于联网状态下,也可以直接在系统内通过wget之类的下载命令将源码包直接下载到linux系统下。
    
    下载完成,把相应的软件解包即可,针对下载软件包的不同,使用不同的方法进行解压,解压完毕后进入解压生成的目录中,在这个目录下,一般都存在一个REDAME文件,这个文本文件非常重要,它详细的介绍了这个软件所能完成的功能、授权许可、安装需求、安装注意事项、安装方式等等,由于linux各个版本的差异,以及安装环境的不同,软件的安装方式也不尽相同,所以在安装软件前,一定要事先阅读这个README文件,确保安装的正确性。
    
  2. 分析安装平台环境

    在软件包解压完毕之后,我们进入源码目录,一般都会存在configure和README这么两个文件,README就是上面我们讲到的,是对软件的介绍和安装说明;linux下软件的安装受到操作系统安装环境的影响,比如某些软件在安装或者运行过程中需要调用操作系统本身的库文件,或者需要运行系统的某个工具等等,但是系统中不存在这个库文件或者这个工具没有安装,那么安装或者运行软件就会失败。
    
    为了避免这个问题的出现,在安装软件的时候就需要分析操作系统环境,检测当前系统是否拥有安装软件所需的所有文件和工具,如果系统缺少某个文件,就给出提示,直到满足软件的所有需求为止。这个就是configure文件的功能,configure文件一般是个可执行文件,可以在当前目录下直接输入“./configure”进行软件安装的环境测试,如果提示缺少某些安装包,就需要进行安装,直到测试通过。通常的,源码安装都需要GCC或者CC编译器,这些编译器一般在安装系统时定制安装包中的开发工具选项下,其实这也是我们在第二章安装linux系统中要求选择开发工具包的原因所在。
    
    此外,在执行configure分析软件需求时,还可以在“./configure”后面加上软件的安装路径以及安装所需的模块等等一些选项,来定制用户需要的软件功能。
    
  3. 编译安装软件

    在验证软件安装环境后,正式进入软件的编译步骤,在进行编译前,首先了解下关于编译的一些基础知识。
    
    在linux系统下,make是我们经常用到的编译命令,无论是安装软件还是项目开发,都会经常用到编译安装命令,也就是make和make install,对于一个包含很多源文件的应用程序,使用make和makefile工具可以简单快速的解决各个源文件之间复杂的依赖关系,同时,make工具还可以自动完成所有源码文件的编译工作,并且可以只对上次编译后修改过的文件进行增量编译,因此,熟练掌握了make和makefile工具之后,源码安装软件就变的像windows下安装软件一样简单。
    
  4. Makefile文件介绍

    make工具最主要的功能就是通过makefile文件来实现的,makefile文件是按照某种语法来进行编写的,文件中定义了各个源文件之间的依赖关系,并说明了如何编译源文件并生成可执行文件,它通过描述各个源程序之间的关系让make工具自动完成编译工作。
    
    在linux系统下,习惯用Makefile替代makefile文件,我们在执行configure通过后,就会在当前目录下生成这个文件,一般情况下在命令行输入make时,make命令会默认去寻找当前目录下的Makefile文件,如果我们用其它文件作为makefile,就要在make命令选项后指定makefile文件,例如我们设定编译规则文件为make_file,就需要使用以下命令指定:[root@WEBServer ~]#make -f make_file
    
  5. Makefile举例

    下面我们通过举例了解下Makefile的编写原则和内容。
    
    例如有一个test程序,有三个源文件file1.c、file2.c、file3.c以及库文件LS编译生成,这三个源文件还分别包含了自己的头文件1.h、2.h、3.h。通常,C编译器将会输出三个目标文件file1.o、file2.o、file3.o。假定file1.c和file3.c都要声明用到一个apcs的文件,但是file2.c不用,也就是在file1.c和file3.c文件中都有类似“#include “apcs””的声明。
    
    下面这段代码就是对test程序的描述:
    
    1 #It is a example for describing makefile
    2 test: file1.o file2.o file3.o
    3 cc file1.o file2.o file3.o -LS -o test
    4 file1.o: file1.c 1.h apcs
    5 gcc -c file1.c
    6 file3.o: file3.c 3.h apcs
    7 gcc -c file3.c
    8 file2.o: file2.c c.h
    9 gcc -c file2.c
    
    这个描述文档其实就是一个makefile文件,第一行为注释行,第二行指定test程序有file1.o、file2.o、file3.o链接生成,第三行描述了如何从test所依赖的文件建立可执行文件,接下来的第四、六、八行定义了三个目标文件和它们依赖的“.c”、“.h”和“apcs”文件。剩下的第五、七、九行定义了如何从目标依赖的文件生成可执行文件。
    
    在了解Makefile文件结构后,我们就可以控制编译的选项,定制自己所需的软件功能。
    
    接下来,我们只需在命令行输入make命令,即可进入编译阶段,根据软件源程序的大小和系统的硬件配置,编译时间不定,编译完毕,会在当前目录以及子目录下生成相应的可执行文件,接下来就进入最后的安装软件阶段,在命令行输入make install命令,开始安装软件,安装进程会首先创建安装目录,如果我们没有指定安装的目录,安装程序默认会安装在系统的/usr/local目录下创建安装目录,然后将相应的文件和可执行程序从源码目录拷贝到安装目录下,这样安装就完毕了。
    
4.5.3 案例: 源码编译安装Python3

Linux中内置了python2,但是这个版本太老了,很多的新特性都不支持。我们的课程使用到的是python3的版本,因此我们需要手动去安装python3。点击下载Python3.10.9

Python目前最新的是3.11的版本,但是这个版本与目前的Spark版本不兼容,Spark目前支持的最高的版本为3.10。因此我们在这里安装的时候需要安装3.10的版本。我们选择的是最新发布的3.10.9的版本。

  1. 安装openssl

openssl在前期的课程中我们暂时使用不到,但是在后续的课程中,例如在Hive中使用PyHive来操作的时候,可能会出现找不到_ssl模块的错误,原因在于在编译安装Python的时候,需要使用openssl库,但是CentOS内置的openssl版本太低,而且yum安装的版本也比较低,因此我们就需要手动的下载openssl,编译安装openssl

# 1、安装openssl需要的依赖
yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++

# 2、下载openssl的安装包
wget https://www.openssl.org/source/openssl-1.1.1s.tar.gz --no-check-certificate

# 3、编译安装openssl
# 3.1、将下载到的openssl包解压,使用 tar -zxvf 即可
# 3.2、cd进入到解压出来的openssl源码到目录下
# 3.3、配置编译安装时候的属性
./config --prefix=/usr/local/openssl shared zlib
# 3.4、编译安装
make && make install

# 4、修改环境变量配置文件/etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib
# source使其生效
  1. 安装Python
# 1. 下载编译的时候需要使用到的工具包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make cyrus-sasl-devel

# 2. cd进入到解压出来的Python3源码的根目录
# 3. 设置编译安装时候的属性
./configure --prefix=/usr/local/python-3.10.9 --with-openssl=/usr/local/openssl/

# 4. 编译安装
make && make install

# 5. 配置Python的环境
# /usr/local/bin 是一个用户自己安装的程序存放的目录,本身就在PATH中。
# 因此我们只需要将需要执行的命令、脚本,放到这个目录下即可,不需要再额外的配置环境变量。
ln -s /usr/local/python-3.10.9/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python-3.10.9/bin/pip3 /usr/local/bin/pip3
  1. 配置网络加速
# 编辑pip配置文件
mkdir ~/.pip
touch ~/.pip/pip.info

# 编辑国内镜像
vim ~/.pip/pip.info

# 添加如下内容
[global]
	index-url=http://mirrors.aliyun.com/pypi/simple
	trusted-host=mirrors.aliyun.com

你可能感兴趣的:(全链路数据仓库,linux,linux软件安装,linux,mysql,安装,python3源码安装,yum源制作,阿里云镜像替换)