编译安装源代码
包的组成
rpm包管理
yum使用简介
Ubuntu软件包管理
程序包编译
程序源代码 --> 预处理 --> 编译 --> 汇编 --> 汇编 --> 链接
静态编译: .a
动态编译: .so
动态和静态链接的区别
动态:
把依赖做一个动态链接,占用空间少,易升级 共享
静态:
复制依赖到包嵌入到本地,升级难,需要重新编译,空间大 独立
编译安装的源码一般有两类,C和java
C和C++编译常用make项目管理器
configure脚本 --> Makefiel.in --> Makefiel
C源码编译过程详解
一、 .configure 通过选项传递参数指定特性和安装路径等,执行时会参考用户定义的值Makefile.in文件生成的
Makefiel;检查依赖的外部环境,如gcc等程序包
二、 make 根据Makefile文件构建应用程序
三、 make install 复制文件到相应程序
注: 配置前查看INSTALL,README信息
java: maven
编译安装C源代码准备事项
准备:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
glibc:标准库
实现:通过“包组”提供开发组件
Development Tools
Server Platform Development
生产实践:(基于最小化安装的系统)
[Centos@localhost ~]# yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip
编译安装后导入到PATH变量中
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
包的组成
二进制文件、库文件、配置文件、帮助文件
包的命名方式
arch平台号如x86_64、i386
noarch:通用
注:一般包是有依赖关系的,不建议单独安装,建议使用包依赖管理工具安装
centos: yum dnf
ubuntun: apt
库文件
ldd [OPTION]… FILE…查看命令动态库依赖
[root@centos7 CentOS7]# ldd /bin/cat
linux-vdso.so.1 => (0x00007ffd12841000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe2da3e4000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe2da7b1000)
管理库文件
[root@centos7 CentOS7# /sbin/ldconfig -p 查看在使用的共享库
[root@centos7 CentOS7# ldconfig 加载配置问阿金到指定库文件
包文件组成(每个包独立)
元数据:名称,脚本,依赖,描述
安装或卸载运行的脚本
程序包来源
centos镜像官方
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
镜像搜索引擎网址
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
扩展镜像epel源
rpm包管理
安装 rpm {-i|–install} [install-options] PACKAGE_FILE…
[ -i|-- intall ]
- i | --install
-v: 简洁
-vv: 详细
-h:显示执行进度
常用选项: rpm -ivh *.rpm
[ install -opeons]
--test: 测试安装
--nodeps: 忽略依赖
--replacepkgs 重新安装 | replacefiles 只覆盖冲突的文件
--nosignature: 不检查来源
--nodigest: 不检查完整信
--noscripts:不执行包脚本
%pre: 安装前脚本 --nopre
%post: 安装后脚本 --nopost
%preun: 卸载前脚本 --nopreun
%postun: 卸载后脚本 --nopostun
升级 rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
rpm {-F|–freshen} [install-options] PACKAGE_FILE…
upgrade 有旧包就升级,没有就安装
freshen:有旧就升级,否则不执行
--oldpackage:降级
--force:强制安装
常用选项
rpm -Uvh *.rpm
rpm -Fvh *.rpm
注:不对内核升级,可以linux多内核共存。避免依赖错误等
升级被修改过的程序包文件后,新版配置文件会和老版并存,并把新版重命名为(FILENAME.rpmnew)后保留
查询 rpm {-q|–query} [select-options] [query-options]
[select -options]
-a: 所有包
-f: 查看指定文件的程序包
-p rpmfile: 针对未安装的程序包做查询操作
--whatprovides CAPABILITY:查询指定CAPABILITY有那个包提供
--whatrequires CAPABILITY:查询指定CAPABILITY被那个包依赖
[query-options]
--changlong: 查询rpm包的changgelog
-c: 查询程序的配置文件
-d: 查询程序文档
-i: information
-l:查看指定程序包安装后生成的所有文件
--scripts:程序包自带的脚本
--provides:指定包提供的CAPABILITY
-R:查询指定包依赖的CAPABILITY
常用查询方法:
-qi PACKAGE ; -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE,...
-qa
包卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
包校验
rpm {-V|--verify} [select-options] [verify-options]
导入所需要公钥
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”
数据库
rpm包数据库(公共) /var/lib/rpm :建议备份
程序包名称版本
依赖关系
功能说明
包装后的路径和校验码
rpm {-initdb|--rebuilddb}
initdb:初始化,不存在数据库,就建立,否则不执行操作
rebuilddb:重建已安装的包头索引目录
如果不小心删除了某已知的数据文件目录,可用以下方式恢复
以误删除tree的/usr/bin/tree为例
# rpm2cpio /misc/cd/BaseOS/Packages/tree-1.7.0-15.el8.x86_64.rpm |cpio -tv
-rwxr-xr-x 1 root root 83544 May 11 23:54 ./usr/bin/tree
drwxr-xr-x 1 root root 0 May 11 23:54 ./usr/lib/.build-id
drwxr-xr-x 1 root root 0 May 11 23:54 ./usr/lib/.build-id/d8
lrwxrwxrwx 1 root root 24 May 11 23:54 ./usr/lib/.build-id/d8/6d516d7cb07fb9334cb268af808119e33a5ac5 -> ../../../../usr/bin/tree
drwxr-xr-x 1 root root 0 May 11 23:54 ./usr/share/doc/tree
-rw-r--r-- 1 root root 18009 Aug 13 2004 ./usr/share/doc/tree/LICENSE
-rw-r--r-- 1 root root 5620 Apr 22 2014 ./usr/share/doc/tree/README
-rw-r--r-- 1 root root 4430 Apr 24 2014 ./usr/share/man/man1/tree.1.gz
221 blocks
# rpm2cpio /misc/cd/BaseOS/Packages/tree-1.7.0-15.el8.x86_64.rpm |cpio -idv /root/usr/bin/tree
./usr/bin/tree
221 blocks
[root@Centos7 ~/usr/bin]#mv /root/usr/bin/tree /usr/bin/
[root@Centos7 ~/usr/bin]#tree -L 2 /root
/root
├── anaconda-ks.cfg
├── httpd-2.4.25
│ ├── ABOUT_APACHE
│ ├── acinclude.m4
│ ├── Apache-apr2.dsw
│ ├── Apache.dsw
│ ├── apache_probes.d
│ ├── ap.d
│ ├── build
注: 只针对较小的程序,如果程序过大可能会有额外的版本或兼容性等问题。
yum程序包管理
yum: rpm包管理解决软件包的依赖性
文件服务器:
http://
https://
ftp://
file://
配置文件组成:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repo.d/*.repo: 为仓库的指向提供配置
仓库指向配置
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin: 随机挑选,默认值
priority: 按顺序访问
cost= 默认为1000
yum仓库指向可用变量
$releasever: 当前OS的发行版的主版本号
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386, x86_64
Y U M 0 − YUM0- YUM0−YUM9:自定义变量
yum-config-manager(yumg配置文件管理员)
[root@Centos7 /apps]#yum-config-manager --disable 192.168.146.147_IOS_CentOS7 #添加仓库
yum-config-manager --disable “仓库名" 禁用仓库
yum-config-manager --enable “仓库名” 启用仓库
yum命令使用
yum [options] [command] [package …]
显示仓库列表
yum repolist [all|enabled|disabled]
显示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)
升级程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
检查可用升级:
yum check-update
卸载程序包:
yum remove | erase package1 [package2] [...]
查看程序包information:
yum info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
清除/var/cache/yum/$basearch/$releasever缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
构建缓存:
yum makecache
搜索:yum search string1 [string2] […]
以指定的关键字搜索程序包名及summary信息
查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...]
查看yum事务历史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6
安装及升级本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)
包组管理的相关命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
yum的命令行选项:
--nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件
日志 :/var/log/yum.log
缓存目录: /var/cache/yum/
yum仓库配置常见错误
路径错误,网络错误,配置文件格式
Ubuntu软件包管理
预编译配合着文件扩展.debj结尾,类似于rpm文件
软件包管理工具dpkg和rpm一样无法解决依赖关系
APT:包依赖解决工具 ,基于C/S架构
apt工作原理:在服务端同步所有DEB包信息并解压到本地,一旦服务端的有变化,需要使用分析工具genbasedir同步新的信息到本地;一旦客户端执行操作时,会生成本地DBEcache和客户端中的数据库信息比较,从而知道软件包软件版本,安装情况等。
dpkg使用
dpkg -i package.deb 安装包
dpkg -r package 删除包,不建议,不自动卸载依赖于它的包
dpkg -P package 删除包(包括配置文件)
dpkg -l 列出当前已安装的包,类似rpm -qa
dpkg -l package 显示该包的简要说明,类似rpm –qi
dpkg -L package 列出该包中所包含的文件,类似rpm –ql
dpkg -S <pattern> 搜索包含pattern的包,类似rpm –qf
dpkg -s package 列出该包的状态,包括详细信息,类似rpm –qi
dpkg --configure package 配置包,-a 使用,配置所有没有配置的软件包
dpkg -c package.deb 列出 deb 包的内容,类似rpm –qpl
dpkg --unpack package.deb 解开 deb 包的内容
获取更多: man dpkg
示例:
dpkg -l 列出系统上安装的所有软件包
dpkg -L bash 列出系统上安装的所有软件包
dpkg -S /bin/bash 查看/bin/bash来自于哪个软件包
dpkg -i /mnt/cdrom/pool/main/z/zip/zip_3.0-11build1_amd64.deb
安装本地的 .deb 文件
dpkg -r zip 卸载软件包
注意:一般建议不要使用dpkg卸载软件包。因为删除包时,但依赖于它的任何包仍将安装,并且可能无法再正常运行
apt管理器和apt-get命令对比
apt 命令 | 被取代的命令 | 命令的功能 |
---|---|---|
apt install | apt-get install | 安装软件包 |
apt remove | apt-get remove | 移除软件包 |
apt purge | apt-get purge | 移除软件包及配置文件 |
apt update | apt-get update | 刷新存储库索引 |
apt upgrade | apt-get upgrade | 升级所有可升级的软件包 |
apt autoremove | apt-get autoremove | 自动删除不需要的包 |
apt full-upgrade | apt-get dist-upgrade | 在升级软件包时自动处理依赖关系 |
apt search | apt-cache search | 搜索应用程序 |
apt show | apt-cache show | 显示安装细节 |
apt install | apt-get install | 安装软件包 |
apt remove | apt-get remove | 移除软件包 |
apt purge | apt-get purge | 移除软件包及配置文件 |
apt update | apt-get update | 刷新存储库索引 |
apt upgrade | apt-get upgrade | 升级所有可升级的软件包 |
apt autoremove | apt-get autoremove | 自动删除不需要的包 |
apt full-upgrade | apt-get dist-upgrade | 在升级软件包时自动处理依赖关系 |
apt search | apt-cache search | 搜索应用程序 |
apt show | apt-cache show | 显示安装细节 |