第四周知识总结
Rpm 软件包
1)安装:rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose 显示详细过程
-vv:
-h: 以#显示程序包管理执行进度
常用用法rpm -ivh PACKAGE_FILE
rpm包安装[install-options]
--test: 测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs | replacefiles
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
%pre: 安装前脚本 --nopre
%post: 安装后脚本 --nopost
%preun: 卸载前脚本 --nopreun
%postun: 卸载后脚本 --nopostun
如果把一个文件如tree删了
第一种方法可以进行覆盖安装包
rpm-ivh /misc/cd/BaseOS/Packages/tree-1.7.0-15.el8.x86_64.rpm
第二种方法 (缺点是会改变文件属性信息)
或者用rpm2cpio工具把tree.rpm包进行解压把tree文件
Rpm2cpio /misc/cd/BaseOS/Packages/tree-1.7.0-15.el8.x86_64.rpm |cpio -idv ./usr/bin/tree(idv后面加上要解包的文件到当前目录下)
再把usr/bin/tree mv到/usr/bin/里面就可以了
--replacepkgs
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
%pre: 安装前脚本 --nopre
%post: 安装后脚本 --nopost
%preun: 卸载前脚本 --nopreun
%postun: 卸载后脚本 --nopostun
2)查询:rpm {-q|--query} [select-options] [query-options
常用查询用法:-qi PACKAGE,
-q --changelog:查询rpm包的changelog:
-qa 查询所有包
-q PACKAGE 查看包
-qi PACKAGE 查询包的描述信息
-qc PACKAGE 查看程序的配置文件
-ql PACKAGE 安装之后查看包内生成哪些文件
-qd PACKAGE 只想查出文档
-q --scripts PACKAGE 程序包自带的脚本
-qf FILE 可以查看磁盘上文件到底来源于哪个包
-qpi PACKAGE_FILE 在安装前查看包文件信息 加上p表示后面跟的是文件路径文件名
-qpl PACKAGE_FILE, ... 安装前查看安装包在磁盘上生成哪些文件l为list 列出将要生成那些文件
#和CAPABILITY(能力)相关
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
--provides:列出指定程序包所提供的CAPABILITY
-R:查询指定的程序包所依赖的CAPABILITY
升级rpm包升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE
upgrade:安装有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”, 如果不存在旧版程序包,则不执行升级操作
--oldpackage:降级
--force: 强制安装
常用组合
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
升级注意项:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老 版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留
包校验:
在安装包时,系统也会检查包的来源是否是合法的
检查包的完整性和签名
rpm -K|--checksig rpmfile
在检查包的来源和完整性前,必须导入所需要公钥
cat /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial(查看公钥)
导入公钥
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-contosofficial
再次进行校验
rpm -K|--checksig rpmfile
Signature ok校验成功
rpm -qa “gpg-pubkey(查询刚才导入的秘钥)
软件在安装时,会将包里的每个文件的元数据,如:大小,权限,所有者,时间等记录至rpm相关的数
据库中,可以用来检查包中的文件是否和当初安装时有所变化
rpm {-V|--verify} [select-options] [verify-options]
包卸载
格式rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
注意:当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
范例:强行删除rpm包,并恢复
[root@centos7 ~]#rpm -e rpm --nodeps
#重启进入rescue模式
#mkdir /mnt/cdrom
#mount /dev/sr0 /mnt/cdrom
#rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm --root=/mnt/sysimage
#reboot
统计rpm的架构类型及相应的包数量的三种方法:
[root@centos8 Packages]#pwd
/misc/cd/BaseOS/Packages
1)[root@centos8 Packages]#ls *.rpm | grep -Eo '[^.]+\.rpm$'| grep -Eo '^[^.]+'|sort |uniq -c
389 i686
211 noarch
1061 x86_64
2)[root@centos8 Packages]#ls *.rpm |rev|cut -d. -f2|rev |sort |uniq -c
389 i686
211 noarch
1061 x86_64
3)[root@centos8 Packages]#ls *.rpm | grep -Eo '[^.]+\.rpm$'|cut -d. -f1|sort |uniq
Yum
在/etc/yum.conf 进行vim配置
配置仓库最重要的几点:
1.name 可缺失但是最好写上
2.路径 一种是mirrorlist 还有一种是baseurl(一般来说使用较多 支持加变量)
3.gpgcheck 如果是1 需要再加上一行gpgkey
4.enable可以不写
5.配置仓库的时候必须放在/etc/yum.repos.d下 而且必须以repo为后缀
name=Some name for this repository
baseurl=url://path/to/repository/ 仓库的真正路径
enabled={1|0} 0是禁用 1是使用 如果不写默认是1
gpgcheck={1|0} Gpgcheck是对于校验包的签名 默认是1需要检查签名 0是不检查
gpgkey=URL 秘钥路径
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin:意为随机挑选,默认值
priority:按顺序访问
cost= 默认为1000
Installonly_limit=3是否允许并发安装 同时可以装三个包 最小值为2 如果设为0或1则不限制
Clean_requiremengts_on_remove=ture 删除包时是否把不使用的包删除
Bset=ture 是否支持安装最新的包 即使缺失依赖性(一般不动 如果想装比较旧的版本需要指定)
Yum实际上是Python写的
contos8dnf'是python3重新写的 yum 在remove删除包时centos8可以选择删除依赖的包
但是cenots7不会 使用yum history
使用yum history info2 查看当初做的事件 再使用 yum history undo 2 把之前安装的包撤销卸载
如果删错包可以使用redo2表示重做 重新装
如何定义仓库路径:repodata元数据仓库 他所在的父目录是谁他就是仓库路径
contos8需要配置两个yum仓库:Baseos以及Appstream
yum客户端配置文件
帮助参考: man 5 yum.conf
/etc/yum.conf #为所有仓库提供公共配置
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号,如:8,7,6
$arch: CPU架构,如:aarch64, i586, i686,x86_64等
$basearch:系统基础平台;i386, x86_64
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量
yum服务器的仓库可以多种形式存在:
fifile:// 本地路径
ftp://
http非加密
Https加密格式
/etc/yum.conf #为所有仓库提供公共配置:
范例:CentOS 8 配置文件
[root@centos8 ~]# ll /etc/yum.conf
lrwxrwxrwx. 1 root root 12 May 14 2019 /etc/yum.conf -> dnf/dnf.conf
[root@centos8 ~]#cat /etc/yum.conf
[main]
gpgcheck=1 #安装包前要做包的合法和完整性校验
installonly_limit=3 #同时可以安装3个包,最小值为2,如设为0或1,为不限制
clean_requirements_on_remove=True #删除包时,是否将不再使用的包删除
best=True #升级时,自动选择安装最新版,即使缺少包的依赖
范例:CentOS 7的配置文件
[root@centos7 ~]# ll /etc/yum.conf
-rw-r--r--. 1 root root 970 Aug 8 19:57 /etc/yum.conf
[root@centos7 ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?
project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
具体yum仓库配置:/etc/yum.repos.d/*.repo:
最简化配置:name(描述不要带特殊符号) baseurl(仓库指向的真正路径 可以写多个) gpgcheck=0
下载centos的时候默认情况仓库以已经配好指向互联网的大仓库 centos官方网站(但是在国外比较远 一般采用国内站点 如华为 阿里云之类的)
放在了cd /etc/yum.repos.d/下 而且有多个仓库每个仓库各自有各自的文件夹
配置centos8yum仓库配置客户端(也可以到网站里面直接下载)
centos8需要搭建两个yum仓库 也可以放到一个里面 AppStream 跟BaseOS
1.在此目录下建个文件夹把这些仓库做些备份mkdir backup 移动到mv*.repo back/
2.vim 一个以repo为后缀的文件如base.repo
[BaseOS]
name=aliyun BaseOS
baseurl = file:///misc/cd/BaseOS(上课期间优先走光盘源)
https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
https://mirrors.huaweicloud.com/centos/8/BaseOS/x86_64/os/ https://mirrors.huaweicloud.com/centos/8/BaseOS/x86_64/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
enabled=1
~
Vim以Appstream.repo的文件编辑
[AppStream]
name=aliyun AppStream
baseurl = https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/
https://mirrors.huaweicloud.com/centos/8/AppStream/x86_64/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
enabled=1
- cd 然后dnf repolist 查询配置好的仓库
- 随之就可以安装软件了 如dnf install httpd
卸载指令:dnf remove httpd 可以把依赖的包同时卸载
但是contos7就不可以直接卸载依赖包
配置contos6和7的仓库:(极致简单写法三行)
- .在/etc/yum.repos.d目录下建个文件夹把这些仓库做些备份mkdir backup 移动到mv*.repo back/ 或者删除
- Vim一个repo为后缀的文件
[base]
name=Base
baseurl =https://mirrors.aliyun.com/centos/$releasever/os/$basearch
(contos7和centos6一样用此变量就可以通用)
gpgcheck=0
- 可以把改文件scp直接拷贝到centos6上 scp 10.0.0.203(需要拷贝的ip):/etc/repos.d/
- 直接在一个文件base.repo里同时配置base epel extras三个源
[base]
name=base
baseurl = https://mirrors.aliyun.com/centos/$releasever/os/$basearch
gpgcheck=0
[extras]
baseurl = https://mirrors.aliyun.com/centos/$releasever/os/$basearch
gpgcheck=0
[epel]
name=epel
baseurl = https://mirrors.aliyun.com/centos/$releasever/os/$basearch
gpgcheck=0
用脚本来配置仓库:vim yum_repo.sh
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=base
baseurl=https://mirrors.aliyun.com/centos/\$releasever/os/\$basearch
gpgcheck=0
EOF
此处变量前需要加上$来表示变量本身的意义 单引号不行
配置私有yum源仓库:
一:配置客户端服务器
- 首先要安装yum -y install httpd(要先配置一下yum仓库指向aliyun或者不配也行指向国外站点centos)会自动生成 ll -d/var/www/html文件夹
- systemctl enable --now httpd 把httpd服务启动起来 相当于在电脑上建个网站
- 建个文件下 mkdir /var/www/html/centos/8 -pv(参考aliyuncentos配置) 然后把光盘整个挂到此目录里
4.mount /dev/sr0/mnt/
5.cp -a /mnt/* /var/www/html/centos/8拷贝指向本机ip
cd /var/www/html/centos/8 ls查看是否有AppStream 跟BaseOS
二:yum客户端配置:
把旧的base做个备份 mv base
[root@repo-client ~]#cat /etc/yum.repos.d/test.repo
[BaseOS]
name=BaseOS
baseurl=http://10.0.0.88/centos/8/BaseOS
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[AppStream]
name=Appstream
baseurl=http://10.0.0.88/centos/8/AppStream/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Epel源跟extras源 需要先配置一个指向aliyun之类的仓库然后才能下载元数据 然后执行dnf reposync --repoid=epel --download-metadata -p
/var/www/html命令 下载之后 再把指向指向本机仓库
清理缓存yum clean 应该先清理缓存在清理配置文件
编译源码:
C语言源代码编译安装过程
利用编译工具,通常只需要三个大的步骤
一. ./configure (后面可以支持很多参数 可以自己指定路径方便管理)
(1) 通过选项传递参数,指定安装路径、启用特性等;执行时会参考用户的指定以及Makefile.in文
件生成Makefifile
(2)编译安装具有依赖性 检查依赖到的外部环境,如依赖的软件包 但是configure可能检查不到位以至于缺失安全包在make环节报错 需要再把缺失的依赖包装上 但是make环节再装就有可能出现错误需要从头再来 把前面文件删掉
二.make 根据Makefifile文件,构建应用程序 一定要在解包的目录下 否则找不到
加速选项 make -j 加数字(cpu数量)
三.make install 复制文件到相应路径
注意:安装前可以通过查看README,INSTALL获取帮助 如果比较小的软件只有两步makefile 以及makeinstall 直接会给makefile文件
编译安装tree1.8
./configure --help
export PATH=/PATH/TO/BIN:$PATH
#1 安装相关的依赖包
yum install gcc make
#2 下载源码并解压
tar xvf tree-1.8.0.tgz
#3 进入解压缩的目录,README和INSTALL
cd tree-1.8.0/
cat README
cat INSTALL
#4 修改源码的版本号
sed -i 's#v1\.8\.0#v.18.0#' tree.c
#5 编译准备
vim Makefile
prefix = /apps/tree
#6 编译make
#7 安装
make install
#8 修改PATH变量
echo 'PATH=/apps/tree/bin:$PATH' > /etc/profile.d/tree.sh
. /etc/profile.d/tree.sh (如果直接使用tree 使用的是原来的tree 需要加上路径./tree
解决方法 把新tree的路径/apps/bin/tree放在path变量里原来tree路径的前面
Vim /etc/profile.d/tree.sh 或者cp /apps/bin/tree /usr/local/bin 或者以软连接的方式 )
#9 验证结果
tree --version
范例:cmatrix编译安装
#1 安装相关包
dnf install gcc make ncurses-devel autoconf
#2 下载并解压缩包
cd /usr/local/src
wget https://github.com/abishekvashok/cmatrix/releases/download/v2.0/cmatrix
v2.0-Butterscotch.tar
tar xvf cmatrix-v2.0-Butterscotch.tar
#3 配置
cd cmatrix
./configure --prefix=/apps/cmatrix
#4 编译并安装
make && make install
#5 配置环境
echo 'PATH=/apps/cmatrix/bin:$PATH' > /etc/profile.d/cmatrix.sh
. /etc/profile.d/cmatrix.sh 或者用软连接ln -sv /apps/cmatrix/bin/cmatrix /usr/local/bin/
#6运行
cmatrix -a -b -C yellow
范例:centos8 编译安装httpd-2.4.41
#1 安装包
dnf install gcc make apr-devel apr-util-devel pcre-devel openssl-devel redhat-rpm-config
#2 下载并解压缩包
tar xvf httpd-2.4.41.tar.bz2
#3 配置
cd httpd-2.4.43/
./configure --prefix=/apps/httpd --sysconfdir=/etc/httpd --enable-ssl
#4 编译并安装
make -j 4 && make install
#5 配置环境
echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd24.sh
. /etc/profile.d/httpd.sh
#6运行
apachectl start
#7 指定用apache用户运行
useradd -r -s /sbin/nologin apache
vim /etc/httpd24/httpd.conf
user apache
group apache
#7生效和验证
apachectl stop
apachectl
ps aux 查看