软件包安装流程及相关问题

软件包安装流程如图:

当执行安装包命令后,会先去寻找仓库地址,仓库地址存放在/etc/yum.repos.d/*.repo中,至于为什么默认存放在这里,这是因为是在/etc/yum.conf主配置文件中声明了。其实也可以直接将repo文件中的内容直接放到主配置文件中,也可以正常寻找和运行。但为了方便日后方便寻找修改和管理,所以都放在/etc/yum.repos.d/下,repo的文件名是可以自定义的。找到仓库地址后,会向yum仓库发送获取元数据信息的请求,从而下载元数据缓存信息表到本机,元数据缓存信息表中存放的是所有仓库中的包的一个清单,有所有包在仓库中的一个存放位置。然后就该下载安装包了,下载完成后进行安装,安装完成后安装包会自动删除。

一些小questions:

1、/etc/yum.repos.d/目录内没有.repo文件,会导致什么问题?

找不到仓库。

2、执行yum命令的情况下,元数据缓存文件的作用是什么?

确定仓库中有哪些包以及包的位置,分析所要安装包的依赖关系。

3、yum clean all执行没问题,yum makecache报错是什么原因?

仓库配置文件有问题,说明没有配置或者配置错误。

4、yum repolist执行发现仓库名称都正常显示,但是对应包的数量都是0是什么原因?

可能仓库配置文件的URL写错了,从而无法正常获取到我们所需要仓库的包。

yum方式管理软件

1
2
3
4
5
6
7
8
yum分类:本地yum和远程yum
本地yum:
file://
远程yum:
http://
ftp://

以上都被称为URL,统一资源定位符

yum常见操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
清理yum缓存:(元数据建立)
yum clean all
#一般在仓库配置文件有所变动之后使用,因为之前的缓存文件已经不能满足现在的需求

缓存软件包信息:
提高搜索/安装软件的速度
yum makecache
#一般不常用,因为在第一次安装软件包时会自动下载缓存信息表

查询yum源信息:
yum repolist

查看命令属于哪个软件
yum provides 命令
#可以查看并没有安装的命令属于哪一个包,从而根据自己需求进行安装软件包

安装软件:
yum -y install 软件名称
#加了-y后不再需要确认即可直接安装
重装软件:
yum -y reinstall 软件名
#既然是重装,肯定要先卸载再安装,一般在误删了相关文件不知情导致不能正常使用时使用

卸载软件:
yum erase 软件名
yum remove 软件名

更换网络yum源–aliyun(此处以aliyun为例)

为什么要更换网络yum源呢?

因为官方的yum源仓库地址是国外的网址,要进行翻墙后才能正常访问下载,即使不翻墙也能访问到,那访问和下载速度也是非常的慢的,非常不利于我们的使用。国内很多公司和大学会有自己的镜像源仓库,我们可以把yum源换成国内的,这样访问和下载速度会快许多。下面以aliyun为例。

1
2
3
4
5
6
7
8
安装主yum源
[root@linux-server ~]# cd /etc/yum.repo.d
[root@linux-server yum.repos.d]# mkdir back
[root@linux-server yum.repos.d]# mv *.repo back #将之前的仓库配置文件备份
[root@linux-server yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #下载aliyun的yum源
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
完成后可以通过yum repolist命令查看是否成功!

老版本的主yum源尽量不要跟新版本的扩展源放在一起,因为老版本的源会去寻找新版本的依赖,可能会导致不能够正常使用。

制作本地yum源和仓库

为什么要制作本地yum源呢?因为在工作当中,很多公司的电脑其实他都是不连接网络的,所以这时候就需要制作本地yum源仓库了,那么一个存放了许多软件包的目录就是仓库了嘛。非也。一个目录并不是因为存了包之后就是仓库了,而是需要经过createrepo创建以后才能成为仓库,成为仓库中会多一个repodata文件。而镜像文件是比较特殊的,默认就是仓库文件,他里边已经有了repodata文件。

通过镜像制作本地yum源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
首先需要挂载镜像
[root@linux-server ~]# mkdir /mnt/centos7u4
将本地镜像上传到虚拟机中的/root目录中

语法: mount 挂载设备 挂载点

[root@linux-server ~]# mount CentOS-7-x86_64-DVD-1708.iso /mnt/centos7u4/
[root@linux-server ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/back #备份
[root@linux-server ~]# cd /etc/yum.repos.d/ #yum源配置文件存放目录
[root@linux-server yum.repos.d]# vim CentOS.Base.repo #在编写yum配置文件是必须是.repo
[centos7u4] #yum源区别名称,用来区分其他的yum源
name=centos7u4 #yum源描述 yum源名字
baseurl=file:///mnt/centos7u4 #指定本地yum源的路径
enabled=1 #是否使用此yum源(1为打开,0为关闭)
gpgcheck=0 #检查软件

完成后可以通过yum repolist命令查看是否成功!

通过开启yum下载缓存功能制作自己的yum源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
制作自己的yum源:
打开Yum缓存功能:安装完软件之后,软件不会被删除(默认安装完之后,不会保留安装包)
# vim /etc/yum.conf 修改下面参数的值为1,软件会被保存到cachedir指定的目录下
keepcache=1
[root@linux-server ~]# yum install -y httpd
[root@linux-server ~]# mkdir /yum_cache
[root@linux-server ~]# find /var/cache/yum/ -name "*.rpm" | xargs -i mv {} /yum_cache/ #此时/yum_cache下已经有包了,但还没有声明仓库
[root@linux-server ~]# ls /yum_cache/
apr-1.4.8-7.el7.x86_64.rpm
apr-util-1.5.2-6.el7.x86_64.rpm
httpd-2.4.6-97.el7.centos.5.x86_64.rpm
httpd-tools-2.4.6-97.el7.centos.5.x86_64.rpm
mailcap-2.1.41-2.el7.noarch.rpm
[root@linux-server ~]# yum install -y createrepo #创建repo文件工具
[root@linux-server ~]# createrepo /yum_cache/ //此目录就可以作为yum源了。
[root@linux-server ~]# vim /etc/yum.repos.d/myyum.repo
[myyum]
name=myyum
baseurl=file:///yum_cache/
enabled=1 #默认是开启的
gpgcheck=0
[root@linux-server ~]# yum repolist

总的来说就是以下流程:

1.修改主配置文件中内容,打开Yum缓存功能

2.创建文件夹,将来作为仓库使用

3.在安装包之后,找到包的存放位置并放到要作为仓库的文件夹中

4.声明存放包的文件夹为仓库

5.配置yum配置文件,之后即可使用

源码包管理

1
2
3
一个软件要在Linux上执行,必须是二进制文件,因此当我们拿到软件源码后,需要将它编译成二进制文件才能在Linux上运行。
源码包的编译用到了linux系统里的编译器,通常源码包都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。
源码安装的优点,编译安装过程,可以设定参数按照需求增加功能,进行安装,并且可以指定安装的版本,可以指定安装路径,灵活性比较大。

获得源码包途径 官方网站,可以获得最新的软件包

mysql: http://www.mysql.com/

1
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.27.tar.gz

Nginx: www.nginx.org

1
2
3
4
5
6
7
8
9
10
11
安装源码包 
准备工作(去Nginx官网下载Nginx软件的源码包)
1.编译环境如编译器gcc、make
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel #编译环境的准备
gcc是编译工具,编译单个文件
make工具可以看成是一个智能的批处理工具,通过调用makefile文件中用户指定的命令来进行编译和链接的。(将这种高级语言写的代码编译成二进制语言)
pcre支持正则表达式
zlib-devel,有些应用依赖于这个库才能正常运行,因此需要安装zlib-devel
openssl-devel 某些库文件等跟开发相关的东西。
2.准备软件 nginx-1.16.0.tar.gz
3.部署安装Nginx软件服务
1
2
3
4
5
6
7
8
9
10
11
12
实战:                                                                            
[root@linux-server ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz
[root@linux-server ~]# tar xzf nginx-1.16.1.tar.gz
[root@linux-server ~]# cd nginx-1.16.1
[root@linux-server nginx-1.16.1]# ./configure --user=www --group=www --prefix=/usr/local/nginx #--user指定用户 --prefix指定安装路径 --group指定组
[root@linux-server nginx-1.16.1]# make #编译文件
[root@linux-server nginx-1.16.1]# make install #安装文件
[root@linux-server ~]# useradd www #创建nginx用户
[root@linux-server ~]# /usr/local/nginx/sbin/nginx #启动nginx
[root@linux-server ~]# systemctl stop firewalld #关闭防火墙
[root@linux-server ~]# setenforce 0 #关闭selinux防火墙
[root@linux-server nginx-1.16.1]# /usr/local/nginx/sbin/nginx -s stop #停止nginx

输入IP访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
1、关闭防火墙

2、创建启动mysql服务的系统用户,mysql
useradd -r mysql -M -s /bin/nologin

3、下载编译工具
yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake

4、创建存放mysql服务的目录
mkdir -p /usr/local/mysql/{data,mysql,log}(data:数据存放;mysql:服务存放;log:日志信息)

5、获取mysql的源码包并解压

6、cd进mysql的源码包内执行使用cmake进行对mysql安装设置
指定端口,配置文件,安装位置,字符集,配置文件,数据信息等设置

7、编译及安装
make && make install

8、修改/etc/my.cnf的配置文件
[mysqld]
basedir=/usr/local/mysql #指定安装目录
datadir=/usr/local/mysql/data #指定数据存放目录
innodb_buffer_pool_size = 4G #给mysql分内存

9、初始化
给mysql安装目录及子文件修改拥有者和所属组
初始化:./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
`--initialize`:表示进行数据库初始化操作。
`--user=mysql`:指定使用 "mysql" 用户运行 MySQL 服务。
`--basedir=/usr/local/mysql`:指定 MySQL 的安装目录。
`--datadir=/usr/local/mysql/data`:指定 MySQL 数据库文件的存储目录。
得到十二位密码

10、启动mysqld服务
/usr/local/mysql/bin/mysqld_safe --user=mysql &

`bin/mysqld_safe`:这是启动MySQL服务器的一个包装脚本。 mysqld_safe 脚本会尝试安全地启动 mysqld 服务器。它会检查并设置一些环境变量,并尝试在 mysald 崩溃时重新启动它。这个脚本通常位于MySQL的安装目录的 bin 子目录下。
`-user=mysql`:这是一个命令行选项,用于指定运行MySQL服务器进程的系统用户。在这个例子中,它指定2mysq! 用户。出于安全考虑,通常建议以非root用户身份运行MySQL服务器。
`&`:这是一个Unix/linux shell的特性,用于将命令放到后台执行。这意味着当你运行这个命令时,你不需要等待MVSQL服务器完全启动就可以继续在shel中执行其他命令,服务器将在后台启动,并继续运行,即使你关闭了启动它的shell会话。

11、登录mysql
bin/mysql -uroot -p'十二位密码'
12、修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
13、停止mysqld服务
/usr/local/mysql/bin/mysqladmin -uroot -p'密码' shutdown