linux第十二天
软件包管理rpm以及yum,编译安装
linux 第十二天
软件包管理
最原始的软件包:编译安装。
我们可以使用rpm管理软件的安装卸载等,


rmp内的文件一般有各种tar打包文件

二进制文件运行要依赖各种库,window和linux依赖的abi不同


ldconfig -v查看系统加载的库文件



-v显示详细,vv就更详细,-h是进度条

假装安装:rpm -ivh sl-5.02-9.fc29.x86_64.rpm --test
有些包需 要一些依赖,可以使用:rpm -ivh sl-5.02-9.fc29.x86_64.rpm --test --nodigest
我们可以看某个包有没有装上:rpm -q tree。可以看其中的文件:rpm -ql tree。如果我们不小心把它里面的内容删了,可以使用replacepkgs覆盖安装(注意是所有文件覆盖)。我们可以使用rpm2cpio这个命令把rpm命令转化为cpio的数据流,rpm2cpio tree-1.6.0...|cpio -tv查看里面的内容,然后我们可以挑一部分解压。rpm2cpio tree-1.6.0...|cpio -id ./usr/bin/tree
如果有这种情况:A包中有a.text文件,但是B包也有,那么可以用replacefiles(一般文件都不会带版本号)

注意内核包是可以并存的,在开机的时候会让你选择启动哪个。如果你要安装一个低版本的,可以使用oldpackage降级。装完以后,可以在boot下面看到两个版本


注意如果你/var/lib/rpm文件不存在那么rpm -qa是无法查询的.qf查询文件来自哪个包(就算文件被删了也可以查到,因为查的是数据库)
rpm -q tree可以跟上某个包单独查询,但是必须准确写出包名,可以用grep,或者:rpm -qa "*tre*"
除了上面所说的cpio,也可以这样查未安装的包里面的文件 rpm -qlp sl-5.02-9.fc29.x86_64.rpm
查看是谁提供的:rpm -q --whatprovides tree
被哪个包依赖:rpm -q --whatrequires bash

查看包提供的能力:rpm -q --provides bash
查询某个包的依赖:rpm -qR tree
如果你想看包的配置文件:rpm -qc bash(小工具可能没有配置文件)
查看包的脚本:rpm -q --scripts bash,如果要看没装的包的脚本:rpm -qp --scripts 包名

–allmatches全部卸载某个软件的所有版本,–nodeps强制卸载
rpm -V centos-release查看文件跟我们刚安装好的时候的状态发生了什么差别

S代表字节大小,5代表md5hash值(内容只要变一点点那么hash值就会改变)D是设备的主要编号

-k rpm包,如果你没导入公私,那么就算完整也还会报错
钥匙放在:rpm -qa "gpg-pubkey*"先查看
卸载也是用e卸载key
yum

yum依赖yum仓库,里面除了你要装的东西(元素据)之外还记录了包的分组信息,这些信息都会下载下来缓存在你的机器上,下次你查询都是在这些缓存里面查。
当然如果你路径变了,记得清缓存。
学号yum:会写配置文件,会清缓存
我们yum的配置文件是;/etc/yum.conf。这个是默认配置。但是我们实际改的是,在/etc/yum.repos.d里面创建file.repo文件,可以参考。
.repo文件的创建格式
1 | |

yum repolist`列出仓库名称
yum缓存目录:du -sh /var/cache/yum,清理缓存:yum cleam all
如果你装了不同版本的软件,可以共存,用yum list tree查看。如果你再重装,会安装最新的,再次查看就是最新的了
如果你觉得这警告:Repository 'base' is missing name。。觉得碍眼 可以加上name设置
自己动手搭建yum源
最简单的方法就是把光盘都复制到一个目录下,可以参考下阿里云的:https://mirrors.aliyun.com/centos/7/os/x86_64/
最简单的方法把光盘挂到我们目录下:
- 先创建目录:
mkdir /var/ftp/pub/centos/7/os/x86_64/ -pv - 挂载:
mount /dev/sr0 /var/ftp/pub/centos/7/os/x86_64/.这个是只读提示 - 安装ftb :
yum install vsftpd - 启动ftp:
systemctl start vsftpd - 关闭防火墙并防止开机启动:
systemctl stop firewalldsystemctl disable firewalld - 可以用
iptables -vnL查看防火墙是否关闭成功 - slinux问题。用
sesed -i.back 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config。然后用命令setenforce 0.可以用getenforce命令确认确实变成permissive了
1 | |
我们这里使用两个变量替换了7跟x86_64,这里参考的是/etc/yum.conf文件
如果你需要挂载6的同样的参考上面的挂载:echo '- - -' > /sys/class/scsi_host/host2/scan.再加了块光盘后可以执行这条命令
如果你手上只有rpm包,可以这样做:
- 先创建一个yum源:
mkdir /var/ftp/pub/app - 然后执行:
createrepo /var/ftp/pub/app/
1 | |
如果你后面又来了10个新的包,需要重新构建,那么必须把文件删了:rm -rf repodata/
先清空缓存然后重新执行上面的操作
yum remove httpd卸载软件包(含依赖的)
判断有没有安装如果没有安装那就安装:package=httpd;rpm -q $package &> /dev/null || yum -y install $package。-y自动装
我们可以配置多个baseurl,不过得这么写:
1 | |
还可以用文件存放url路径
-q静默安装

yum list后面跟有@符号的都是已经安装的

生成默认的repo文件,指定url:yum-config-manager --add-repo=file:///misc/cd
yum update这样回更新所有安装


搜索或包含summer
cat /var/log/yum.log查看简单日志
yum history undo 8把第八步后悔,安变成卸,卸变成安。redo重做

yum install /misc/cd/pa....可以安装本地包
yum底层还是调用rpm,因此无法用yum卸载rpm

yum grouplist查看包组
yum groupinfo "File and Print Server"查看包组信息

编译安装

make项目管理器已经集成了不少现成的功能,需要用到Makefile文件,里面定制了需要编译的功能(甚至可以指定安装的地方)。用configure脚本来生成Makefile,开发的人已经帮你写好了
Makefile.in是同一个模板文件,我们可以参考这个文件来生成Makefile文件,但是我们也不需要去看

make命令就在系统中,来编译我们的应用程序

我们直接安装Devlopment Tool工具来进行编译工作,server那就给开发人员吧:yum groupinstall "Development Tools"
我们来用httpd软件为例子来进行一次编译安装
在官网下载源码压缩文件,解压,习惯性的看下README,INSTALL(告诉你怎么装)-
./configure --help,看看选项,可以选择安装哪去(–prefix,所有东西都安装在一个目录,总目录,–enable-xxx,启动特性)运行:`./configure –prefix=/app/httpd24 –sysconfdir=/etc/httpd24/ \
–enable-ssl
–enable-proxy-fcgi。回发现报错,缺了APR,接着运行:yum install apr-devel` 记得加上devel发现又缺:
yum install apr-util-devel又缺pcre-config:
yum install pcre-devel又缺mod_ssl:
yum install openssl-devel最后再一次安装,最终生成Makefile文件
运行
make -j 4,-j代表使用多线程编译,但是如果我们编译一个更大的软件,可以:make && make install.make install是我们的最后一步。或者再make之后:make install && echo -e "\a"最后我们启动这个软件,但是我们如果不把路径写入path变量的话得输入路径,因此我们还是把路径加入path:
vim /etc/profile.d/http24.sh。写入:PATH=/app/httpd24/bin:$PATH.然后. /etc/profile.d/http24.sh启动
apachectl.然后看看80端口有没有启动:ss -ntl.页面是放在/app/httpd24/htdocs/下安装后你可以把原来的解压文件夹删了
如果没有man帮助则可以手动导入,编辑/etc/man.config|man_db.config文件添加一个MANPATH