源代碼包命名:name-VERSION.tar.gz
rpm包命名:name-VERSION-release.arch.rpm
VERSION:major.minor.release
arch:
x86:i386,i486,i586,i686
x86_64:x64,x86_64,amd64
powerpc:ppc
無平臺:noarch
包之間:存在依賴關係,使用包管理的前端工具,可自動化解決包的依賴關係
yum:rpm包管理器的前端工具
apt-get:deb包管理器的前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 22+ rpm包管理器的前端管理工具(CentOS7使用)
查看二進制程序所依賴的庫文件:(程序需要調用很多庫文件)
[root@localhost ~]# ldd /bin/ls linux-vdso.so.1 => (0x00007ffca11f0000) libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003d91600000) librt.so.1 => /lib64/librt.so.1 (0x0000003d90600000) libcap.so.2 => /lib64/libcap.so.2 (0x0000003d93200000) libacl.so.1 => /lib64/libacl.so.1 (0x0000003d9b600000) libc.so.6 => /lib64/libc.so.6 (0x0000003d8fe00000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003d8fa00000) /lib64/ld-linux-x86-64.so.2 (0x0000003d8f600000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003d90200000) libattr.so.1 => /lib64/libattr.so.1 (0x0000003d9fe00000) [root@localhost ~]#
管理和查看本機裝載的庫文件:
ldconfig(/sbin/ldconfig)
-p:顯示本機已經緩存的所有可用庫文件名及其路徑映射關係
配置文件:/etc/ld.so.conf /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
程序包管理:
將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
1、程序的組成清單(每個包獨有)
文件清單
安裝或卸載的腳本
2、數據庫(公共)
程序包名稱及版本
依賴關係
功能說明
安裝生成的各文件的文件路徑及校驗碼信息
程序包的管理方式:
包管理器:rpm
包管理器的前端工具:yum,dnf
獲取程序包的途徑:
1、系統發行版的光盤或官方的服務器
鏡像:mirrors.aliyun.com;mirrors.163.com
2、項目官方站點
apache,nginx,mariadb
3、第三方組織:
Fedora-EPEL(很強大的第三方源,建議安裝)
搜索引擎:pkgs.org;rpmfind.net;rpm.pbone.net
4、diy
tips:檢查合法性,來源合法性,程序包的完整性
RPM:
安裝,卸載,升級,查詢,校驗,數據庫維護
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE
-v:詳細信息(-vv)
-h:以#顯示程序包安裝進度
{install-options}
--test:測試安裝;dryrun模式
--nodeps:忽略依賴關係(兩個包互相依賴時使用)
--replacepkgs:重新安裝
--nosignatura:不檢查來源合法性
--nodigest:不檢查包完整性
--noscripts:不執行程序包腳本片段
一般使用 rpm -ivh PACKAGE_FILE進行程序包的安裝
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrade:安裝有舊版程序包,則升級;反之執行安裝過程
freshen:安裝有舊版程序包,則升級;反之不執行
--oldpackage:降級
--force:強行升級
tips:不要對內核做升級操作;linux支持多內核版本並存,因此請直接安裝新版本內核即可
如果原程序包的配置文件有過修改,升級時,新版本的配置文件不會覆蓋老版本的配置文 件,而會重命名爲FILENAME.rpmnew保留
查詢:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:所有包
-f:查看指定的文件是由哪個程序包安裝生成
[root@localhost ~]# rpm -qf /bin/ls coreutils-8.4-37.el6.x86_64 [root@localhost ~]# rpm -e --nodeps coreutils-8.4-37.el6.x86_64 [root@localhost ~]# ls -bash: /bin/ls: No such file or directory
-p /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包做查詢操作
--whatprovides:查詢指定的功能由哪個包提供
--whatrequires:查詢指定的功能被哪個包所依賴
[query-options]
--changelog:更新日誌
-c:查詢程序的配置文件
-d:查詢程序的文檔
-i:information信息
--scripts:程序包自帶的腳本片段
-R:查詢指定的程序包所依賴的能力
--provides:列出指定程序包所能提供的能力(CAPABILITY)
卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
校驗:
rpm {-V|--verify} [select-options] [verify-options]
使用非對稱加密對程序包進行加密,使用私鑰加密,公鑰開放,校驗時,如果開放公鑰無法進行校驗,則證明此包的來源合法性及完整性不正確。
導入所需要的公鑰:
rpm --import /PATH/TO/PUBLIC-KEY
發行版光盤會自帶密鑰文件
數據庫重建:
數據庫位置:/var/log/rpm/
rpm {--initdb|--rebuilddb}
initdb:初始化
rebuilddb:重建
YUM:(C/S架構)
yum repository:yum repo
存儲了衆多的rpm包,以及包的相關的遠數據文件
yum客戶端:
配置文件:
/etc/yum.conf:所有倉庫的公共配置
/etc/yum.repos.d/*.repo:倉庫的指向提供配置
倉庫指定的定義:
[repoID]
name=
baseurl=指向repodata文件的父目錄
nfs://
file:// }
enable=1|0 是否啓用
gpgcheck=1|0 是否校驗
gpgkey=密鑰文件
enablegroups=1|0 組啓用
failovermethod=roundrobin|priority
故障處理方式:默認爲roundrobin(隨機)
cost=
(默認1000)
顯示倉庫列表
yum repolist all|enable|disable
顯示程序包
yum list available|installed|updates
安裝程序包
yum install package...
升級程序包
yum update package...
yum reinstall package.. 重新安裝
檢查可用升級
yum check-update
卸載程序包
yum remove|erase package...
查看程序包信息
yum info package...
查看指定的特性是由哪個程序包提供
yum provides|whatprovides feature...
清理本地緩存
yum clean all
構建緩存
yum makechche
搜索
yum search string...
以指定的關鍵字搜索程序包名及summary信息
查看依賴
yum deplist package
查看yum事務
yum history [info|list|packa`ges-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
包組管理命令
groupinstall
groupupdate
grouplist
groupremove
groupinfo
命令行選項:
--nogpgcheck:禁止進行gpg check; 優先於倉庫配置文件
-y: 自動回答爲“yes”;
-q:靜默模式;
--disablerepo=repoidglob:臨時禁用此處指定的repo;
--enablerepo=repoidglob:臨時啓用此處指定的repo;
--noplugins:禁用所有插件;
使用光盤當做本地yum倉庫
1、掛載光盤
mount -r /dev/cdrom /media/cdrom
2、配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號;
$arch: 平臺;
$basearch:基礎平臺;
$YUM0-$YUM9
3、查看倉庫列表是否成功
yum repolist
手動創建yum倉庫
安裝createrepo
yum install createrepo
創建倉庫
createrepo DIR (DIR指向RPM包的文件夾)
配置文件
程序包編譯安裝:
testapp-VERSION-release.src.rpm --> 安裝後,使用rpmbuild命令製作成二進制格式的rpm包,而後再安裝;
源代碼組織格式:
多文件:文件中的代碼之間,很可能存在跨文件依賴關係;
C、C++: make (configure --> Makefile.in --> makefile)
項目管理工具makefile由Makefile.in生成,
編譯安裝三步驟:
./configure:
(1) 通過選項傳遞參數,指定啓用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile;
(2) 檢查依賴到的外部環境;
make:
根據makefile文件,構建應用程序;
make install
開發工具:
autoconf: 生成configure腳本
automake:生成Makefile.in
tips:安裝前查看INSTALL,README
編譯C源代碼:
前提:提供開發工具及開發環境
開發工具:make, gcc等
開發環境:開發庫,頭文件
glibc:標準庫
通過“包組”提供開發組件
CentOS 6: "Development Tools", "Server Platform Development",
安裝後的配置:
(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文件
添加一個MANPATH