軟件管理

軟件包管理


應用程序:

程序,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: 顯示監聽指定的套接字的進程的進程號及進程名


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章