API:Application Programming Interface ==>軟件開發接口
POSIX :Portable OS
程序源代碼 –> 預處理 –> 編譯 –> 匯編 –>鏈接
靜態編譯 : .a
共享編譯(動態編譯):.so
ABI:Programming Binary Interface ==>軟件運行接口
Windows和linux不兼容
庫級別的虛擬化:
linux:WINE
Windows:Cywin
C程序編譯過程
JAVA程序運行
開發語言
C
C++
運用級開發
java , delphi , python, go , php , perl, ruby
包管理器
二進制應用程序的組成部分:
二進制文件,庫文件,配置文件,幫助文件
程序包管理器:
debian:deb文件===》dpkg包管理器
redhat:rpm文件===》rpm包管理器 ===》 redhat package manager
因為我們現在主流用的是centos,所以我們主要來看看rpm包管理器
包命名
源代碼: name-VERSION.tar.gz|bz2|xz
VERSION:major(主).minor(次).relsase
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
name:bash
VERSION:4.2.46
release:19.el7 (release.OS)
arch:x86_64
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
包:分類和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它
包之間:可能存在依賴關系,甚至循環依賴(裝A包時,提示要裝B,C包,裝B包時,又提示要裝X包…..)
解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:fedora 18+ rmp包管理器前端管理工具
庫文件file
查看二進制程序所依賴的庫文件
ldd /path/to/binary_file
管理查看本機裝載的庫文件
ldconfig
/sbin/ldconfig -p :顯示本機已經緩存的所有可用庫文件名妓文件路徑映射關系
配置文件: /etc/ld.so.conf , /etc/ld.so.conf.d/*.conf
緩存文件: /etc/ld.so.cache
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷的實現
程序包的安裝,卸載,查詢,升級和校驗等管理操作
-
包文件組成(包獨有內的文件)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
2.數據庫(公共)
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
程序包的來源
管理程序包
使用包管理器:rpm
使用前端工具:yum,dnf
獲取程序包途徑:
1.系統發行版的光盤或官方的服務器
CentOS 鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2.項目官方站點
3.第三方組織
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
4.自己制作
注意:要檢查其合法性: 來源合法性,程序包的完整性
rmp包管理
rpm -e rpm -qa rpm -ql rpm -qf
rpm -i
安裝:
rpm
-i或–install [install-options] package_file
-v:顯示詳細過程
-vv:顯示更詳細的過程
-h:以#顯示程序包管理執行進度
rmp -ivh package_file…
顯示yum-3.4.3-132.el7.centos.0.1.noarch 已安裝
[install-options]
–test:測試安裝,但不真正執行安裝;dry run模式
–nodeps:忽略依賴關系
–replacepkgs|replacefiles
–nosignature:不檢查來源合法性
–nodigest:不檢查包完整性
–noscipts:不執行程序包腳本片段
%pre :安裝前腳本;–nopre
%post:安裝后腳本;–nopost
%preun:卸載前腳本;–nopreun
%postun:卸載后腳本;–nopostun
rpm包升級:
-U 或–upgrade [install-options]package_file
-F 或–freshen [install-options]package_file
upgrade:安裝有舊版程序包,則升級
如果不存在舊版程序包,則安裝
freshen:安裝有舊版程序包,則升級
如果不存在舊版程序包,則不執行升級操作
rmp -Uvh packa_file…
rmp -Fvh packa_file…
–oldpackage:降級
–force:強行升級
注意:1.不要對內核做升級操作;linux支持多內核版本并存,因此,會直接安裝新版本內核
2.如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件
并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(filename.rpmnew)后保留
卸載:
rmp -e packa_name
–allmatches :卸載所有品牌指定名稱的程序包的各版本
–nodeps:忽略依賴關系
–test:測試卸載
rpm包查詢
rpm {-q|–query} [select-options] [query-options]
[select-options]
-a:所有包
-f:查看指定的文件由哪個程序包安裝生成
-p rpmfile:針對尚未安裝的程序包文件做查詢操作
–whatprovides CAPABILITY :查詢指定的CAPABILITY由哪個包所提供
–whatrequires CAPABILITY :查詢指定的CAPABILITY被哪個包所依賴
rmp2cpio 包文件|cpio -itv 預覽包內文件
rpm2cpio 包文件|cpio –id “*.conf” ”
包查詢
[query-options]
–changlog:查詢rpm包的changelog
-l –list:程序安裝生存的全部文件列表
-i –info:程序包的相關信息,版本號,大小,所屬的包組等等
-c –configfiles :查詢指定的程序提供的匹配文件
-d –docfiles 查詢指定的程序包提供的文檔
–provides:列出指定的程序包提供的所有CAPABILITY
-R –requires:查詢指定的程序包的依賴關系
–scripts:查詢程序包自帶的腳本片段
查詢的用法
-qi packag 包名
-qf file 文件名
-qc package
-ql package
-qd package
-qpi package_file
-qpl package_file
-qa
校驗:
rpm {-V|–verify} [select-options] [verify-options]
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
包來源合法性驗證:RSA
包來源完整性驗證 :SHA256
公鑰加密:
對稱加密:加密,解密使用同一密鑰
非對稱加密:密鑰是成對的
public key:公鑰,公開所有人
secret key:私鑰,不能公開
導入所需要公鑰:
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:初始化
如果事先不存在數據庫,則新建
否則,不執行任何操作
rpm –rebuilddb:重建
無論當前存在與否,直接重新創建數據庫
yum:yellowdog update modifier,prm的前端程序,用來解決軟件包相關依賴性,可以在多個
庫之間定位軟件包,up2date的替代工具
yum repository: yum repo ,存儲了眾多rpm 包,以及包的相關的元數據文件(放置于特定目錄repodata下)
文件服務器:
ftp://
heep://
file:///
yum配置文件
yum客戶端配置文件:
/etc/yum.conf :為所有倉庫提供公共配置
/etc/yum.repos.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 ,意為隨機挑選;
cost= 默認為1000
yum-config-manager –disable “ 倉庫名" 禁用倉庫
yum-config-manager –enable “ 倉庫名” 啟用倉庫
顯示倉庫列表
yum repolist [all|enabled|diasbale]
顯示程序包:
list
yum list [all|glob_exp1|….]
yum list [available|installed|updates]
安裝程序包
yum install package1 [package2]….
yum reinstall package1 [package]….重新安裝
升級程序包
yum update package1 [package2]….
yum downgrade package1 [package2]…. 降級
檢查可用升級
yum check-update
卸載程序包
remove | erase package1 [package2]….
查看程序包information
yum info […]
查看指定的特性(開始某文件)是由哪個程序包提供
yum provides|whatprovides feature1 [feature2]….
清楚本地緩存
yum clean[packages |metadate |expire-cache|rpmdb|plugins|all]
構建緩存
yum makecache
搜索:search string1 [string2]…
以指定的關鍵字所搜程序包名及summary信息
查看指定包所依賴的capabilities:
yum deplist package1…..
查看yum事務歷史
yum history [info|list|packages-lsit|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
yum history
yum history info 6==>歷史6的詳細信息
yum history undo 6==>撤銷歷史6中的操作,如果歷史6是安裝就卸載,如果歷史6是卸載就安裝
日志:/var/log/yum.log
安裝及升級本地程序包
yum install rpmfile1….
yum undate rmpfile1…
包組管理的相關命令:
groupinstall group1….
groupupdate group1….
grouplist [hidden] [groupwildcard]….
groupremove group1….
groupinfo group…
如何使用光盤當作本地yum倉庫
1.掛載光盤之某目錄,例如/media/cdrom
#mount /dev/cdrom /media/cdrom
2.創建配置文件
[centos7]
name=
baseurl=
gpgcheck=
enabled=
yum的命令行選項
–nogpgcheck:禁止進行pgp check
-y:自動回答為“yes”
-q:靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的repo
–enablerepo=repoidglob:臨時啟用此處指定的repo
–noplugins:禁用所有插件
yum倉庫
yum的repo配置文件中可用的變量
$releasever:當前OS的發行版的主版本號
$arch:平臺,i386,i486,i586,x86_64等
$basearch:基礎平臺;i386
$yum0-$yum9:自定義變量
實例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
創建yum倉庫:
createrepo [options] /path/to/directory
程序包編譯
程序包編譯安裝:
Application-VERSION-release.src.rpm –> 安裝后,使
用rpmbuild 命令制作成二進制格式的rpm 包,而后 再 安裝
源代碼–> 預處理–> 編譯(gcc)–> 匯編–> 鏈接–> 執行
源代碼組織格式:
多文件:文件中的代碼之間,很可能存在跨文件依賴關系
C 、C++ :make ( 項目管理器,configure –>Makefile.in –> makefile)
java: maven
編譯安裝
C代碼編譯安裝三步驟:
1, ./configure:
a.通過選項傳遞參數,指定啟用特性,安裝路徑等;執行時會參考以后的指定以及
makefile.in文件生成makefile
b.檢查依賴到的外部環境
2.make:根據makefile文件,構建應用程序
3.make install:復制文件到相應路徑
開發工具:
autoconf:生成configure腳本
automake:生成makefile.in
注意:安裝前查看INSTALL ,README
來源程序源代碼的獲?。?/p>
官方自建站點:
apache.org(ASF)
mariadb.org
…
代碼托管:
SourceForge.net
Github.com
code.google.com
c/c++編譯器:gcc(GNU C Complier)
編譯C源代碼:
前提:提供開發工具及開發環境
開發工具:make,gcc等
開發環境:開發庫,頭文件
glibc:標準庫
通過“包組”提供開發組件
CentOS 6: "Development Tools",
"Server Platform Development",
第一步:configure腳本
選項:指定安裝位置,指定啟動的特性
–help:獲取其支持使用的選項
選項分類:
安裝路徑設定:
–prefix=/path:指定默認安裝位置,默認為/舊/local/
–sysconfdir=/path:配置文件安裝位置
System types:支持交叉編譯
Optional Features:可選特性
–disable-FEATURE
–enable-FEATURE[=ARG]
Optional Packages: 可選包,
–with-PACKAGE[=ARG], 依賴包
–without-PACKAGE,
第二步:make
第三不 :make install
安裝后的配置:
1.二進制程序目錄導入之PATH環境變量中;
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
2.導入庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中;
讓系統重新生成緩存:
ldconfig [-v]
3.導入頭文件
基于鏈接的方式實現
ln -sv
4.導入幫助手冊
編輯/etc/man.config|man_db.conf文件
條件一個MANPATH
作業:
-
刪除kernel包后,無法啟動,并恢復之
1.刪除kernel
2.重啟虛擬機,選擇cdrom模式進入,然后選擇troubleshooting,進入到如下界面
3.選擇Rescue a CentOS system,然后選擇1
4按照提示輸入return
5.進入系統
6.使用rpm命令重新安裝kernel
注意:kernel是要安裝到/mnt/sysimages下
光盤是在/run/install/repo/Packages/下
命令為:rpm -ivh /run/install/repo/Pcakages/kernel…. –root=/mnt/sysimage
7.reboot重啟,回復正常
第二題:
源碼安裝PHP
-
在官網上下載源碼,我是在如下網站下載的
http://php.net/downloads.php
-
將源碼包放在指定位置,然后解壓解歸檔
3.解壓解歸檔后,目錄內容如下,在開始安裝前最好先看看INSTALL和README文件,里面的內容還是挺重要的,
在這里我就不截圖了
4.使用./configure –help查看各種文件安裝路徑設置,可以自己設置,默認為/usr/local
./configure --prefix=/usr/local/PHP --sysconfdir=/etc/PHP
將默認安裝位置設置為/usr/local/prefix/PHP下,配置文件安裝在/etc/PHP,其他的就先不做詳細設置了 篇幅有限,就全不截圖了
5.執行make命令 ====>漫長等待中…..
5.make test …….
6.執行manke install
7.安裝完成,然導入配置文件
1.將二進制程序目錄導入之PATH環境變量中;
1 PATH=/usr/local/PHP/bin:$PATH
2.導入庫文件路徑,添加新的庫文件是在目錄至此文件中,然后讓系統重新生成緩存:ldconfig[-v]
1 /usr/local/PHP/lib
3.導入頭文件
基于鏈接的方式實現
ln -sv
ln -s /usr/local/PHP/include/ /usr/include/php
4.導入幫助手冊
編輯/etc/man.config|man_db.conf 文件
添加man幫助手冊路徑至文件中
這樣就安裝完成了!
原創文章,作者:qiuwei,如若轉載,請注明出處:http://www.www58058.com/38753
內容整體很完整,對專用名詞應該進行一些詳細的解釋,而不是簡單的羅列,同時對知識點多一些文字性的描述,這樣不僅能增加文章的可讀性,同時更能增強自己的語言組織能力。