软件管理

软件包管理


应用程序:

程序,Architecture

C语言:源代码-->(编译)二进制格式

脚本:解释器(二进制程序)


源代码-->编译-->链接-->运行

程序:

静态

动态


静态链接

动态链接

共享库


配置文件:

dir=/path/to/somewhere


程序组成部分:

二进制程序

配置文件

帮助文件

/boot

/etc

/usr

/var

/dev

/lib

/tmp

/bin

/sbin

/proc

/sys

/mnt

/media

/home

/root

/misc

/opt

/srv





/usr/share/man


/etc, /bin, /sbin, /lib

系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上


/usr/

bin

sbin

lib

操作系统核心功能,可以单独分区

/usr/local

bin

sbin

lib

etc

man


/opt



/proc

/sys

不能单独分区,默认为空;

/dev: 设备,不能单独分区;

udev

/root: 不能单独分区


/var:建议单独分区


/boot:内核,initrd(initramfs)

内核:

POST-->BIOS(HD)-->(MBR)bootloader(文件系统结构,ext2, ext3, xfs)-->内核




程序:指令+数据

指令:芯片

CPU: 普通指令,特权指令

指令集

C语言:

Powerpc: 二进制格式 


x86:



x86: 汇编

powerpc: 汇编


高级语言:

C:


软件包管理器的核心功能:

1、制作软件包;

2、安装、卸载、升级、查询、校验;


Redhat, SUSE, Debian


Redhat, SUSE: RPM

Redhat Package Manager

PRM is Package Manager

Debian: dpt


依赖关系:

X-->Y-->Z

X-->Y-->Z

前端工具:yum, apt-get

后端工具:RPM, dpt


yum: Yellowdog Update Modifier

yum



rpm命令:

rpm:

数据库:/var/lib/rpm

rpmbuild:

安装、查询、卸载、升级、校验、数据库的重建、验正数据包等工作;


rpm命名:

包:组成部分

主包:

bind-9.7.1-1.el5.i586.rpm

子包:

bind-libs-9.7.1-1.el5.i586.rpm

bind-utils-9.7.1-1.el5.i586.rpm

包名格式:

name-version-release.arch.rpm

bind-major.minor.release-release.arch.rpm


主版本号:重大改进

次版本号:某个子功能发生重大变化

发行号:修正了部分bug,调整了一点功能


bind-9.7.1.tar.gz


rpm包:

二进制格式

rpm包作者下载源程序,编译配置完成后,制作成rpm包

bind-9.7.1-1.noarch.rpm

bind-9.7.1-1.ppc.rpm


rpm:


1、安装

rpm -i /PATH/TO/PACKAGE_FILE

-h: 以#显示进度;每个#表示2%; 

-v: 显示详细过程

-vv: 更详细的过程

rpm -ivh /PATH/TO/PACKAGE_FILE


--nodeps: 忽略依赖关系;

--replacepkgs: 重新安装,替换原有安装;

--force: 强行安装,可以实现重装或降级;

2、查询

rpm -q PACKAGE_NAME: 查询指定的包是否已经安装

rpm -qa : 查询已经安装的所有包


rpm -qi PACKAGE_NAME: 查询指定包的说明信息;

rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表;

rpm -qc PACEAGE_NEME:查询指定包安装的配置文件;

rpm -qd PACKAGE_NAME: 查询指定包安装的帮助文件;


rpm -q --scripts PACKAGE_NAME: 查询指定包中包含的脚本

rpm -qf /path/to/somefile: 查询指定的文件是由哪个rpm包安装生成的;

如果某rpm包尚未安装,我们需查询其说明信息、安装以后会生成的文件;

rpm -qpi /PATH/TO/PACKAGE_FILE

rpm -qpl 


3、升级

rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE: 如果装有老版本的,则升级;否则,则安装;

rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,退出;

--oldpackage: 降级

4、卸载

rpm -e PACKAGE_NAME

--nodeps

5、校验

rpm -V PACKAGE_NAME

6、重建数据库

rpm 

--rebuilddb: 重建数据库,一定会重新建立;

--initdb:初始化数据库,没有才建立,有就不用建立;



7、检验来源合法性,及软件包完整性;

加密类型:

对称:加密解密使用同一个密钥

公钥:一对儿密钥,公钥,私钥;公钥隐含于私钥中,可以提取出来,并公开出去;

单向:


# ls /etc/pki/rpm-gpg/

RPM-GPG-KEY-redhat-release

rpm -K /PAPT/TO/PACKAGE_FILE

dsa, gpg: 验正来源合法性,也即验正签名;可以使用--nosignature,略过此项

sha1, md5: 验正软件包完整性;可以使用--nodigest,略过此项


rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release: 导入密钥文件






1、rpm -qf 

2、rpm -qpl

l: List

i: 软件包的信息;

3、--import /etc/pki/rpm-gpg/

4、--rebuilddb



rpm --> yum


HTML: HyperText Mark Language

XML: eXtended Mark Language


XML, JSON: 半结构化的数据


yum仓库中的元数据文件:

primary.xml.gz

所有RPM包的列表;

依赖关系;

每个RPM安装生成的文件列表;

filelists.xml.gz

当前仓库中所有RPM包的所有文件列表;

other.xml.gz

额外信息,RPM包的修改日志;


repomd.xml

记录的是上面三个文件的时间戳和校验和;

yum install zsh


comps*.xml: RPM包分组信息


ftp://172.16.0.1/pub/{Server,VT,Cluster,ClusterStorage}


如何为yum定义repo文件

[Repo_ID]

name=Description

baseurl=

ftp://

http://

file:///

enabled={1|0}

gpgcheck={1|0}

gpgkey=



yum [options] [command] [package ...]


-y: 自动回答为yes

--nogpgcheck



list: 列表 

支持glob

all

available:可用的,仓库中有但尚未安装的

installed: 已经安装的

updates: 可用的升级




clean: 清理缓存

[ packages | headers | metadata | dbcache | all ]



repolist: 显示repo列表及其简要信息

all

enabled: 默认

disabled


install: 安装

yum install PACKAGE_NAME


update: 升级

update_to: 升级为指定版本


remove|erase:卸载


info: 


provides| whatprovides: 查看指定的文件或特性是由哪个包安装生成的; 

groupinfo

grouplist

groupinstall

groupremove

groupupdate




/media/cdrom/{Server,VT,Cluster,ClusterStorage}



如何创建yum仓库:

createrepo



http://172.16.0.1/yum/{Server,VT}




练习:

1、将系统安装光盘挂载至/media/yum目录,用其实现yum仓库;

2、配置使用http://172.16.0.1/yum/{Server,VT,Cluster,ClusterStorage}为可用yum仓库;



写一个脚本,完成以下功能:

说明:此脚本能于同一个repo文件中创建多个Yum源的指向;

1、接受一个文件名做为参数,此文件存放至/etc/yum.repos.d目录中,且文件名以.repo为后缀;要求,此文件不能事先存,否则,报错;

2、在脚本中,提醒用户输入repo id;如果为quit,则退出脚本;否则,继续完成下面的步骤;

3、repo name以及baseurl的路径,而后以repo文件的格式将其保存至指定的文件中;

4、enabled默认为1,而gpgcheck默认设定为0;

5、此脚本会循环执行多次,除非用户为repo id指定为quit;


if [ -e $1 ]; then

  echo "$1 exist."

  exit 5

fi


[repo id]

name=

baseurl=

enabled=

gpgcheck=



while, until, for


break: 提前退出循环

continue:提前结束本轮循环,而进入下一轮循环;



1000, SUM>5000


while的特殊用法一:

while :;do

  

done


while的特殊用法二:

while read LINE; do


done < /PATH/TO/SOMEFILE


/etc/passwd









写一个脚本,完成如下功能:

说明:此脚本能够为指定网卡创建别名,则指定地址;使用格式如:mkethalias.sh -v|--verbose -i ethX

1、-i选项用于指定网卡;指定完成后,要判断其是否存在,如果不存在,就退出;

2、如果用户指定的网卡存在,则让用户为其指定一个别名,此别名可以为空;如果不空,请确保其事先不存在,否则,要报错,并让用户重新输入;

3、在用户输入了一个正确的别名后,请用户输入地址和掩码;并将其配置在指定的别名上;

4、如果用户使用了-v选项,则在配置完成后,显示其配置结果信息;否则,将不显示;




RPM安装:

二进制格式:

源程序-->编译-->二进制格式

有些特性是编译选定的,如果编译未选定此特性,将无法使用;

rpm包的版本会落后于源码包,甚至落后很多;bind-9.8.7, bind-9.7.2

定制:手动编译安装


编译环境,开发环境

开发库,开发工具


Linux: C,

GNU: C


C,C++:

gcc: GNU C Complier, C

g++: 


make: 项目管理工具,

makefile: 定义了make(gcc,g++)按何种次序去编译这些源程序文件中的源程序


automake, --> makefile.in --> makefile

autoconf, --> configure




100个可选择特性,


make install



编译安装的三步骤:

前提:准备开发环境(编译环境)

安装"Development Tools"和"Development Libraries" 


# tar 

# cd

# ./configure  

--help 

--prefix=/path/to/somewhere

--sysconfdir=/PATH/TO/CONFFILE_PATH

功能:1、让用户选定编译特性;2、检查编译环境;

# make

# make install


# tar xf tengine-1.4.2.tar.gz

# cd tegnine-1.4.2

# ./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine/tengine.conf

# make

# make install

# /usr/local/tengine/sbin/nginx


1、修改PATH环境变量,以能够识别此程序的二进制文件路径;

修改/etc/profile文件

在/etc/profile.d/目录建立一个以.sh为名称后缀的文件,在里面定义export PATH=$PATH:/path/to/somewhere

2、默认情况下,系统搜索库文件的路径/lib, /usr/lib; 要增添额外搜寻路径:

在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中;

# ldconfig 通知系统重新搜寻库文件

-v: 显示重新搜寻库的过程

3、头文件:输出给系统

默认:/usr/include

增添头文件搜寻路径,使用链接进行:

/usr/local/tengine/include/   /usr/include/

两种方式:

ln -s /usr/local/tengine/include/* /usr/include/ 或

ln -s /usr/local/tengine/include  /usr/include/tengine

4、man文件路径:安装在--prefix指定的目录下的man目录;/usr/share/man

1、man -M /PATH/TO/MAN_DIR COMMAND

2、在/etc/man.config中添加一条MANPATH


netstat命令:

-r: 显示路由表

-n: 以数字方式显示

-t: 建立的tcp连接

-u: 显示udp连接

-l: 显示监听状态的连接

-p: 显示监听指定的套接字的进程的进程号及进程名


你可能感兴趣的:(源代码,配置文件,应用程序)