POSIX:Portable Openratin System 跨平台調用 API:兼容,意味開發庫兼容,因此,源代碼可跨平台 ABI:兼容,編譯後的程序可以跨平台 庫為函數,function 庫:可執行程序,本身不能作為程序執行入口,但可以被調用,是編譯好的二進制格式
預編譯、編譯、匯編、鏈接 #靜態鏈接:將庫包含在程序中 #動態鏈接:dll,so(shared object) #編譯:源代碼翻譯成cpu指令集的過程
*注意:1.os平台:編譯好的應用程序必須為特定平台所支持的版本
2.硬件平台:應用程序為特定的cpu所支持*
二進制程序:/bin,/sbin /usr/sbin,/usr/local.bin,/usr/local/sbin 自身庫文件:/lib /lib64 /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64 開發時調用API,運行時調用ABI 通過調整/etc/ld.so.conf /etc/ld.so.conf.d/*.conf 配置文件:/etc,無須額外配置 幫助文件: man文件,info文件,README,INSTALL,ChangeLog man COMMAND 到某路徑下查找與命令名同名的通常以。gz結尾的壓縮文件的名字 /usr/share/man
ldd命令:
查看應用所依賴的共享庫 ldd [options] 二進制文件 root@localhost Desktop]# ldd /bin/cat linux-vdso.so.1 => (0x00007ffff63ea000) libc.so.6 => /lib64/libc.so.6 (0x0000003cc4400000) /lib64/ld-linux-x86-64.so.2 (0x0000003cc3c00000)
1、數據庫:
名稱和版本, 安裝生成的各文件路徑,校驗碼, 依賴關系 提供功能性的說明
2、提供程序組成格式:
文件清單 安裝卸載時運行的腳本
應用程序格式:
源代碼 name(名稱)-major(主版本).minor(次版本).release(修正號).tar.gz
循環依賴: x-->Y 版本依賴: x-->y-->x Debian:.deb dpkg RadHat: .rpm(perl編寫),rpm(RadHat Package Manager) rpm:RPM is Package Manager SUSE: rpm
打包 安裝 查詢 升級 卸載 校驗 數據庫管理
出現原因:因為依賴關系太麻煩
apt-get yum
rpm包命名格式:
源程序:name-version.tar.{gz|bz2|xz} 命名格式: version:major.minor.release rpm包:name-version-release.arch.rpm release:通常包含rpm的只做發行號,還包含使用的OS(平台)
OS平台
el6:redhat enterprise linux6 el5:redhat enterprise linux5 CentOS5: suse11 arch: X86_64 i386,i586,i686 ppc noarch
來源合法性驗證:
源程序:通過md5或sha1校驗碼驗證; rpm包:發行商提供的是合法性是可信的 驗證包完整性:校驗碼 驗證來源合法:公鑰加密算法
獲取rpm的途徑:
1、發行商的光盤或站點服務器 CentOS: http://mirrors.163.com http://mirrors.sohu.com 2、rpmfind http://rpmfind.net 3、rpmpbone http://rpm.pbone.net
**注意:
1、發行商。發行光盤中的包,需要升級時,官方釋放出升級包
2、Fedora EPEL**
安裝程序包
rpm -i --install 安裝 rpm -i /path/to/rpm_package ... -v:顯示安裝信息 -vv:二級詳細 -vvv:三級詳細 -h:hash 以#的個數顯示安裝進度,一個#表示2%的進度 --test:僅測試,不真正執行安裝過程 如果存在依賴 解決依賴關系: 忽略依賴關系:--nodeps 重新安裝: -ivh --replacepkgs 原來的配置文件不會被覆蓋,新安裝的配置文件將會重命名為以.rpmnew為後綴的文件 卸載: rpm -e --erase rpm -e package_name 如果卸載被其他程序所依賴的包 1、把依賴者一同卸載 2、忽略依賴關系:--nodeps 3、不在卸載
rpm管理:查詢
查詢 rpm -q 查詢所有已安裝的包: rpm -qa 查詢包的描述信息: rpm -qi package_name 查詢某單個包是否安裝: rpm -q 包名 查詢安裝包生曾的列表的位置 rpm -ql package 查詢某文件是那個包安裝生成的: rpm -qf 文件 查詢包安裝後生成的幫助文檔: rpm -qd 包名 查詢安裝後生成的配置文件: rpm -qc 包名 查詢包相關的腳本: rpm -q --scripts 包名 腳本分四類 preinstall 安裝前腳本 postinstall 安裝後腳本 preuninstall 卸載前腳本 postuninstall 卸載後腳本 查詢尚未安裝的rpm包文件的相關信息: 查詢安裝後會生成的文件列表: rpm -qpl 包名 查詢其簡單描述信息: rpm -qpi 包名
rpm管理:升級
rpm -U:升級或安裝 rpm -F:只升級 rpm {-Uvh|-Fvh}/path/to/package_file --nodeps: 忽略依賴關系 --force:強行安裝
**注意:不要對內核執行升級操作;
多版本內核可以並存,因此,建議執行安裝操作**
rpm管理:校驗:檢查包安裝後生成的文件是否被修改過
rpm -V package_Name S file Size differs 大小 M Mode differs (includes permissions and file type) 頭文件 5 digest (formerly MD5 sum) differs MD5 D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs 屬主 G Group ownership differs 屬組 T mTime differs 修改時間 P caPabilities differ 能力改變了
rpm管理:校驗來源合法性和軟件完整性
包完整行:通過單向加密機制(MD5|sha1) 來源合法性:通過公鑰加密機制(RSA) 命令:gpg rpm -K /path/to/somefile rpm --checksig /path/to/package_file --nosigeature:不檢查來源合法性 --nodigest:不檢查包完整性
rpm管理:導入密鑰
rpm --import /path/to/gpg-key-file 導入以後再做驗證
rpm包管理:數據庫
位置:/var/lib/rpm 重建:rpm --initdb:初始化 如果事先不存在一個數據庫,則新建之 rpm --rebuilddb 重建 直接新建數據庫,會覆蓋原有庫
解決依賴關系:程序包管理器的前段工具
yum(Yellowdog Update Modifier)依賴於rpm
文件服務器(共享rpm包):
通過yum所支持的文件共享機制將各rpm包通過文件服務共享
repository:倉庫
1.需要的各rpm包 2.依賴關系、程序包安裝後所能夠生成的列表等元數據文件
yum客戶端
1.配置文件:指定各可用的yum倉庫; 2.緩存元數據:yum會到各可用yum倉庫獲取元數據,並緩存至本地 3、分析元數據:根據具體的操作請求完成元數據分析,可能包括依賴關系、文件列表等信息 4.執行具體操作
客戶端配置文件指定對服務器配置文件:
ftp ftp://server/path/to/repo http http://server/path/to/repo nfs nfs://servr/nfs_path file file:///path/to/path
yum操作
格式:yum [install] command
check 檢查在rpmdb中的問題 check-update 檢查可升級的軟件包 clean [all|package|metadata|expire-cache|rpmdb|plugins] 清除緩存 deplist 列出軟件包的依賴 downgrade 降級包 groupinfo “package_group_name” 顯示包組信息 groupinstall "group_name" 安裝包組 grouplist 列出所有包組 groupremove ”group_name“: 卸載組 help 顯示有幫助的用法信息 history 查看yum的命令歷史 info 列出包的描述信息 install 安裝 list [all|installed|available] 把所有可以使用的 provides 查詢某文件是由那個包安裝的 reinstall 重新安裝指定的程序包 repolist[all|enabled|disabled] 顯示各可用的倉庫列表 search 對於給定的字符串搜索包詳細信息 update package_name 升級指定的程序包 updateinfo 在資料庫更新信息的行為 upgrade 更新程序包回吐廢棄考慮 version 顯示機器和/或可用回購一個版本。
要使用yum管理應用程序,首先得配置其可用的yum倉庫,保存在配置文件中
/etc/yum.conf /etc/yum.repo.d/*.repo 配置文件格式:由兩段組成。類似window的ini配置文件 [main]:主配置段 [repo]:倉庫配置段 配置repo [repo_ID] name=String baseurl=倉庫的訪問路徑 enabled={1|0}1,表示啟用。0表示不啟用 gpgcheck={1|0}1,驗證gpg。0表示不驗證 gpgkey=公鑰地址(可以是本地,也可以是服務器端路徑) cost=定義此倉庫開銷,默認為1000
安裝本地包
install /path/to/package_file 手動禁止檢查來源及完整性:--nogpgcheck
*如果系統為Centos 5,開發包組為”Development Tools“和”DeveLopment Libraries“
如何系統為centos 6,常用的開發包為”Development tools“和”Server Platform Development”
yum配置文件中可用的宏*
yum配置文件中可用的宏
$releasever:程序的版本,對Yum而言指的是redhat-relrase版本。只替換為主版本號,如Redhat6.5 則替換為6 $arch:系統架構 $basharch:系統基本架構,如i686,i586等的基本架構為i386 $YUM0-9:在系統定義的環境變量,可以在yum中使用
獲取當前系統相應宏替換的辦法
python import yum,pprint yb=yum.YumBase() pprint.pprint(yb.conf.yumvar,width=1) Loaded plugins: product-id, refresh-packagekit {'arch': 'ia32e', 'basearch': 'x86_64', 'releasever': '6Server', 'uuid': '238c299d-9681-4725-ad7a-c2ae6302e693'} quit()
yum repository:制作yum倉庫文件
1.yum install createrepo -y 制 作creatrepo 2.createrepo 路徑 3.配置yum源
制作一個遠程的yum倉庫
1.准備文件服務器;使用httpd為例,請事先確保以安裝httpd程序包 2.在/var/www/html目錄。使用一個目錄來保存准備制作稱為yum倉庫的所有rpm包 cd /var/www/html lftp 172.16.0.1/pub/Sources/6.x86_64 lftp : >mirror openstack bye 3.創建yum倉庫 rm -rf /var/www/html/openstack/repodata createrepo /var/www/html/openstack 4.啟動http服務 service httpd start 5.配置實用自建的yum倉庫 [openstack] name=Openstack Repository baseurl=http://172.16.100.7/openstack enabled=1 gpgcheck=0 6.配置好epel的yum源 7.測試使用 yum install openstack-keystone
源碼程序包:
c,c++ perl源碼 python源碼
應用程序:項目組
軟件基金會:FSF,ASF 項目組:主導者,contributor 小項目:一個人維護 商業公司支持:開源版/企業版
開源網站
github.com code.google.com
源程序:
項目工程:把代碼分散於多個源代碼文件 GNU/make(項目編譯工具) autoconf:configre腳本, 用來檢查編譯環境是否滿足編譯需求,並定義當前程序編譯時啟用那個特性或功能,已經安裝路徑的定義等等 結果:會根據makefile.in文件生成makefile文件 automake:生成Makefile.in文件 用於結合configure腳本生成makefile文件 makefile文件是make命令的配置文件
編譯安裝的步驟:
1.拿到源代碼,並解壓 tar -xf package-version.tar.{gz|bz2|xz} 注意:展開後的目錄通常為package-version 2.切換至源碼目錄中 cd package-version 3.執行configure腳本 ./configure 4.編譯 make 5.安裝 make install
configure腳本的通用功能:
1.指定安裝路徑 --prefix=前綴,用於指定安裝路徑 --prefix=/usr/local/package_name --sysconfdir=/etc/package_name 2.指定啟動/禁用的特性 --enable-feature:例如--enable-fpm --disable-fecture;例如 --disable-socket 3.指定所依賴功能、程序或文件 --with-function: 啟用某功能 --without-function: 禁用某功能 不同的程序,其configure不盡相同,應獲取幫助信息 ./configure --help
二進制程序的訪問方法
1.vim /etc/profile.d/apache.sh
PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH expore PATH
2.source /etc/profile.d/apache.sh
頭文件輸出給系統
ln -sv /usr/local/apache/include /usr/include/httpd
庫文件輸出
vim /etc/ld.so.conf.d/httpd.conf /usr/local/apache/lib
讓系統重新生成庫文件路徑緩存
ldconfig
輸出man文件
1. vim /etc/man.conf 2. 添加 MANPATH /usr/local/apache/man