一、軟件包管理
1.1 軟件包管理
API:Application Programming Interface 應用程序開發接口;程序員面對的編程接口
POSIX:portable operating system:可移植操作系統接口
v 程序源代碼 –> 預處理 –> 編譯 –> 匯編 –> 鏈接
靜態編譯: 共享編譯:.so
ABI:Application Binary Interface 應用程序的二進制接口;程序應用者面對運行程序接口
二進制文件接口Windows 與Linux 不兼容 :ELF(Executable and Linkable Format);PE(Portable Executable)
庫級別的虛擬化:Linux: WINE ;Windows: Cywin
1.2 包管理器
二進制應用程序的組成部分:二進制文件、庫文件、配置文件、幫助文件
程序包管理器:debian :deb 文件, dpkg 包管理器 ;redhat: rpm 文件, rpm 包管理器
rpm: Redhat Package Manager ;RPM Package Manager
1.2.1 包命名
源代碼:name -VERSION.tar.gz|bz2|xz ;VERSION(版本號): major.minor.release(開發版)minor為偶數是穩定版
rpm 包命名方式:name -VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release ; release :release.OS
常見的arch(架構):x86: i386, i486, i586, i686 ,x86_64: x64, x86_64, amd64 ;powerpc: ppc
跟平臺無關:noarch
1.2.2 包命名和工具
1包:分類 和 拆包
Application-VERSION-ARCH.rpm: 主包 ; Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包 ; Application-libs-VERSION-ARHC.rpm 其它子包
v 包之間:可能存在依賴關系,甚至循環依賴
解決依賴包管理工具:yum :rpm 包管理器的前端工具
apt-get :deb 包管理器前端工具 ;zypper: suse 上的rpm 前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
1.2.3 庫文件
查看二進制程序所依賴的庫文件: ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件:idconfig
/sbin/idconfig –p:顯示本機已經緩存的所有可用庫文件名及文件名的路徑映射關系
庫文件配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
庫文件緩存文件:/etc/ld.do.cache
1.2.4 程序包管理器
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作:
1 、包文件組成 ( 每個包獨有):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)第三方組織:Fedora-EPEL:Extra Packages for Enterprise Linux ; Rpmforge:RHEL 推薦,包很全
搜索引擎:http://pkgs.org ;http://rpmfind.net ;http://rpm.pbone.net ;https://sourceforge.net/
v (4) 自己制作
v 注意:檢查其合法性( 來源合法性, 程序包的完整性)
二、rpm包管理
CentOS系統上使用rpm命令管理程序包:安裝、卸載、升級、查詢、校驗、數據庫維護
2.1 安裝軟件包
rpm –ivh PACKAGE-FILE…
rpm {-i|–install}[install-options] PACKAGE_FILE
[install-options]:-test: 測試安裝,但不真正執行安裝;dry run 模式
–nodeps :忽略依賴關系 ;–replacepkgs | replacefiles:重復覆蓋安裝 ;–nosignature: 不檢查來源合法性
–nodigest :不檢查包完整性 ;–noscripts :不執行 程序包腳本
%pre: ; 安裝前腳本; –nopre ; %post: ; 安裝后腳本; –nopost
%preun: ; 卸載前腳本; –nopreun ; %postun: 卸載后腳本; –nopostun
2.2 軟件包升級
rpm {-U|–upgrade}[install-options] PACKAGE_FILE
rpm {-F|–freshen} [install-options] PACKAGE_FILE
upgrade :安裝有舊版程序包,則“升級” ; 如果不存在舊版程序包,則“安裝”
freshen :安裝有舊版程序包,則“升級” ; 如果不存在舊版程序包,則不執行升級操作
rpm -Uvh PACKAGE_FILE … ; rpm -Fvh PACKAGE_FILE …
–oldpackage :降級 ; –force:強行升級
升級注意項:(1)不要對內核做升級操作;linux支持多內核版本并存,因此,只需要直接安裝新內核版本
(2)如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個 配置文件并不會直接覆蓋老 版本的配置文件,而是把新版本的文件重命名(FILENAME.rpmnew)后保留
2.3 rpm包查詢(query)
rpm {-q|–query} [select-options] [query-options]
v [select-options]
-a: 所有包 ;-f: 查看指定的文件由哪個程序包安裝生成 ;-p rpmfile :針對尚未安裝的程序包文件做查詢操作;
–whatprovides CAPABILITY :查詢指定的 CAPABILITY由哪個包所提供
–whatrequires CAPABILITY :查詢指定的 CAPABILITY 被哪個包所依賴
v rpm2cpio 包文件|cpio –itv 預覽包內文件
v rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件
[query-options]
–changelog :查詢rpm 包的changelog
-c: 查詢程序的配置文件 ; -d: 查詢程序的文檔 ; -i: information:查詢包的信息
-l: 查看指定的程序包安裝后生成的所有文件 ; -R: 查詢指定的程序包所依賴的 的CAPABILITY
–scripts :程序包自帶 的腳本 ; –provides: 列出指定程序包所提供的 的CAPABILITY
2.3.1 組合查詢
-q:僅查詢,后面接的軟件名是否安裝 ; -qa:列出所有的已經安裝在本機Linux上面的所有軟件名稱
-qi:列出該軟件的詳細信息(information) ; -ql:列出該軟件所有的文件與目錄所在完整文件名
–qc:列出該軟件的所有配置(config)文件(/etc/下面的文件名) ;-qd:列出該軟件的所有幫助軟件(man)
-qR:列出該軟件有關的依賴軟件所含的文件(Required) ;–qf:后接文件名找出此文件屬于哪一個已安裝的軟件
-qp [ icdlR]:查詢某個RPM的信息,而非已安裝軟件的信息。
2.4 rpm包卸載
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
2.5 rpm包校驗
包來源合法性驗正及完整性驗正:
完整性驗正:SHA256 ; 來源合法性驗正:RSA
v 公鑰加密:(1)對稱加密:加密、解密使用同一密鑰; (2)非對稱加密:密鑰是成對兒的
public key: 公鑰,公開所有人 ; secret key: 私鑰, 不能公開
導入所需要公鑰:rpm –import / etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm -qa gpg-pubkey*
CentOS 7 發行版光盤提供: RPM-GPG-KEY-CentOS-7
2.6 數據庫重建
vim /var/lib/rpm ldd :查詢二進制執行命令所調用的庫如:ldd /bin/ls ldd /bin/cat
rpm {–initdb|–rebuilddb}
initdb: 初始化 如果事先不存在數據庫,則新建之;否則,不執行任何操作
rebuilddb :重建已安裝的包頭的數據庫
三、yum
yum(yellowdog update modifier)依賴于rpm CentOS安裝包的命令: yum, dnf
YUM: Yellowdog Update Modifier ,rpm 的前端程序,用來解決軟件包相關依賴性,
可以在多個庫之間定位軟件包, up2date 的替代工具
3.1 yum倉庫
yum依賴于數據庫,要使用yum,必須要建立yum倉庫(yum repository: yum repo):存儲了眾多rpm包,以及rpm包的相關的元數據文件(放置于特定目錄repodata 下)里面包括:包之間的依賴性、校驗、查詢、等信息。
元數據存放在:文件服務器:ftp:// ;http://; file://;在本機中以后可以用命令自動生成,只需要有包文件。
yum 客戶端配置文件:不同終端只能一個人使用yum
/etc/yum.conf :為所有倉庫提供公共配置 ; /etc/yum.repos.d/*.repo :為倉庫的指向提供配置
3.1.2 yum倉庫指向的定義
元數據文件repodata的父目錄即為倉庫指向的路徑
[repositoryID]如:[CentOS]】 ; name=Some name for this repository(為倉庫指名) ;
baseurl=url://path/to/repository/; [ftp:// ;http://; file:///mnt/yum(本機/mnt/yum下)];
enabled={1|0} (0表示倉庫禁用) ; gpgcheck={1|0}(0表示不檢查合法性–-import) ;
(開放源代碼密鑰)gpgkey=URL ; enablegroups={1|0} (是由支持用戶組)
failovermethod={roundrobin|priority},默認為:roundrobin ,意為多個url隨機挑選;
cost= 默認為1000(可以建多個倉庫,cost代表價格,cost值越低,優先級越高)
3.1.3 yum客戶端的建立
生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo repo鏡像文件
yum-config-manager –add-repo=http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/
v yum-config-manager –disable “ 倉庫名" 禁用倉庫
v yum-config-manager –enable “ 倉庫名”啟用倉庫 (適用于交互式腳本)
顯示倉庫列表:yum repolist [all|enabled|disabled] 顯示所有可安裝的包
3.1.4 yum程序包管理
yum list 查看包的列表 yum info 查看包的信息:包含的內容
yum list [all | glob_exp1] [glob_exp2] […]
yum list {available|installed|updates} [glob_exp1] […]
v 安裝程序包:相對于rpm,yum能簡便安裝,不用考慮依賴性,直接安裝所依賴的包
yum install package1 [package2] […]
yum reinstall package1 [package2] […] ( 重新安裝)
升級程序包:
yum update [package1] [package2] […]
yum downgrade package1 [package2] […] ( 降級)
v 檢查可用升級:
yum check-update
v 卸載程序包:不能卸載所依賴的包,導致卸載不干凈,留下垃圾。
yum remove | erase package1 [package2] […]
用 cat /var/log/yum.log 查看yum的安裝卸載日志
3.1.5 查看程序包information
yum info […]
v 查看指定的特性( 可以是某文件) 是由哪個程序包所提供:
yum provides | whatprovides feature1 [feature2][…] ——》rpm -qf
v 清理本地緩存:cat /etc/yum.conf à 得到cachedir=var/cache/yum/… 一般緩存元數據和其他的數據
yum clean [ packages | metadata | expire-cache(過期緩存) |rpmdb | plugins | all ]
如果遇到新安裝的yum報錯,而且配置文件沒啥問題,那就清除一下緩存(以前yum的配置文件緩存)
v 構建緩存:yum makecache
搜索:yum search string1 [string2] […]:以指定的關鍵字搜索程序包名及summary 信息
v 查看指定包所依賴的capabilities:
yum deplist package1 [package2] […]
v 查看yum 事務歷史:
yum history [info|list|packages-list|packages-info|summary|addon-info|redo(重做)|undo(撤銷)|
rollback|new|sync|stats]
yum history = cat /var/log/yum.log
yum history info 6
yum history undo 6
查看歷史上安裝的包,指定第6個(info),撤銷安裝的第6個,這個相當于能直接卸載依賴性的包
v日志文件存放:/var/log/yum.log
安裝及升級本地程序包:
yum localinstall rpmfile1 [rpmfile2] […] ( 用install 替代)
yum localupdate rpmfile1 [rpmfile2] […] ( 用update 替代)
3.1.6包組管理的相關命令
yum groupinstall group1 [group2] […] (安裝CentOS的安裝選項 如:Development tools)
yum groupupdate group1 [group2] […]
yum grouplist [hidden] [groupwildcard] […]查看包組的列表
yum groupinfo group1 […] 查看包組的信息,包含的內容:必選包組,默認,可選
查看顯示“=”代表隨著包組一塊安裝的
yum groupremove group1 [group2] […]
四、如何使用光盤當作本地yum 倉庫
(1) 掛載光盤至某目錄,例如/media/cdrom
# mount /dev/cdrom /media/cdrom
(2) 創建配置文件
[CentOS7] name= baseurl= gpgcheck= enabled=
4.1 yum倉庫示例
[centos7]
baseurl=http://172.18.0.1/cobbler/ks_mirror/CentOS-7-1511-x86_64/
#gpgcheck=0
gpgkey=http://172.18.0.1/cobbler/ks_mirror/CentOS-7-1511-x86_64/RPM-GPG-KEY-CentOS-7
enabled=1
4.2 yum 的命令行選項
–nogpgcheck :禁止進行gpg check
-y: 自動回答為“yes” -q :靜默模式
–disablerepo=repoidglob :臨時禁用此處指定的repo –enablerepo=repoidglob :臨時啟用此處指定的repo
–noplugins
yum 的repo 配置文件中可用的變量
$releasever: 當前OS 的發行版的主版本號 $arch: 架構平臺,i386,i486,i586,x86_64等
$basearch :基礎平臺;i386,x86_64
$YUM0-$YUM9: 自定義變量
v 實例:
http://server/centos/$releasever/$basearch/ 不管操作系統的版本5,6,7直接能夠找到對應版本所需的倉庫
http://server/centos/7/x86_64 http://server/centos/6/i384
v 自己創建yum 倉庫:首先要拿到rpm包,
rpm -ivh /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm
再創建元數據:createrepo [options] <directory>
4.3 光盤的自動掛載/misc/cd
cat /etc/yum.repos.d/wang.repo (查看yum倉庫的配置文件)
yum -y install autofs 下載autofs軟件
systemctl enable autofs === centos7 chkconfig autofs on === centos6 開通autofs服務
reboot 重啟
cat /etc/yum.repos.d/wang.repo 查看yum倉庫的配置文件是否如下:
[base] baseurl=file:///misc/cd/ gpgcheck=0
五、ftp服務
創建yum倉庫,為網絡客戶服務
rpm -ivh /misc/cd/Packages/vsftpd-3.0.2-10.el7.x86_64.rpm 下載vsftpd服務軟件包,自動創建/var/ftp/pub目錄。
systemctl start vsftpd === centos7 systemctl enable vsftpd === centos7(下次啟動繼續執行)
service vsftpd start === centos6 chkconfig vsftpd on === centos6 (啟動ftp服務)
iptables -F (清空防火墻) setenforce 0 禁用selinux守護 策略
rpm –ivh /misc/cd/Packages/createrepo….rpm 下載創建倉庫元數據的軟件包createrepo
cp *.rpm /var/ftp/pub/7 復制軟件包到/var/ftp/pub/7目錄下
createrepo /var/ftp/pub/7 (創建 /var/ftp/pub/7/repodata元數據 文件)之后才能訪問ftp共享文件。
在客戶端上:
[root@centos7 ~]# cat /etc/yum.repos.d/base.repo
[base]
baseurl=ftp://172.16.253.230/pub/$releasever/
gpgcheck=0
mount -o loop /root/CentOS-6.8-x86_64-bin-DVD1.iso /var/ftp/pub/6 掛載iso鏡像文件到/var/ftp/pub/6下v
六、http服務
6.1程序包編譯安裝
v Application-VERSION-release.src.rpm –> 安裝后,使用rpmbuild 命令制作成二進制格式的rpm包,而后 再安裝
v 源代碼–> 預處理–> 編譯–> 匯編–> 鏈接–> 執行
v 源代碼組織格式:多文件:文件中的代碼之間,很可能存在跨文件依賴關系。
6.1.1 編譯C 源代碼
準備: 提供開發工具及開發環境 (yum groupinstall “Development Tools”)
開發工具:make, gcc等 開發環境:開發庫,頭文件(glibc :標準庫)
實現:通過 “包組”提供開發組件
CentOS 6: Development Tools Server Platform Development
CentOS 7: Development Tools Development and Creative Workstation
C 、C++ :make ( 項目管理器,configure(增加參數) –>Makefile.in (模版文件)–> makefile)
java: maven相當于c 代碼的編譯安裝三步驟
6.1.2 C代碼編譯安裝三步驟
1 、./configure:執行命令必須在解壓縮的目錄下
(1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及makefile.in 文件生成makefile
(2) 檢查依賴到的 外部環境,如依賴的軟件包
2 、make :根據makefile 文件,構建應用程序,最文件終生成二進制文件
3 、make install: 復制文件到相應路徑
開發工具:autoconf: 生成configure 腳本 ; automake :生成Makefile.in
v 注意:安裝前用 configure – -help 查看cat INSTALL ,README。
開源程序源代碼的獲?。?/span>
(1)官方自建站點:apache.org (ASF :Apache Software Foundation) ; mariadb.org ; …
(2)代碼托管:SourceForge.net Github.com code.google.com
c/c++ 編譯器: gcc (GNU C Complier)
第一步:configure 腳本
選項:指定安裝位置、指定啟用的特性 –help: 獲取其支持使用的選項
選項分類:
安裝路徑設定:–prefix=/PATH: 指定默認安裝位置, 默認為/usr/local/ –sysconfdir=/PATH :配置文件安裝位置
System types: 系統類型
Optional Features: 可選特性 –disable-FEATURE –enable-FEATURE[=ARG]
Optional Packages: 可選包, –with-PACKAGE[=ARG], 依賴包 –without-PACKAGE, 禁用依賴關系
v第二步:make
v第三步:make install
6.1.3 安裝后的配置
(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
七、完整安裝編譯安裝http服務
1 yum groupinstall "Development Tools" 獲取開發(make)編譯(gcc)工具,獲取開發環境(開發庫,頭文件)
2 yum install lftp 使用ftp服務下載 http 安裝包
lftp 172.16.0.1/pub/Sources/sources/httpd/httpd-2.2.29.tar.bz2
get httpd-2.2.29.tar.bz2 (下載) bye:退出當前模式
tar xvf httpd-2.2.29.tar.bz2(解壓)
必須要ping通172.16.0.1,可以檢查路由設置,設置默認路由:route add default eth0 ;route -n
3 cat README INSTALL 查看幫助,建立文檔
4 yum install gcc 必須要先確定有編譯工具gcc
./configure –help 生成makefile文件
./configure –prefix=/usr/local/wanghttp 默認安裝目錄 –sysconfdir=/etc/wanghttp/ 設置默認安裝配置文件
5 make (根據makefile 文件,構建應用程序,最文件終生成二進制文件)
6 make install 復制二進制文件到相應路徑
7 vim /etc/profile.d/wanghttp.sh 編輯全局profile.d文件 ,設置自動執行的環境變量
PATH=$PATH:/usr/local/wanghttp/bin
8 vim /etc/man.config(CentOS6) | man_db.conf (CentOS7)
導入幫助手冊路徑 MANPATH /usr/local/wanghttp/man
9 vim /etc/ld.so.conf.d/wanghttp.conf
/usr/local/wanghttp/lib 創建數據庫 ; ldconfig (加載庫)
10 ln -s /usr/local/wanghttp/include/ /usr/include/wanghttp(指向鏈接的頭文件)
11 apachectl start
以前安裝的httpd沖突,需要卸載
如果不成的話就把hash -r,看是不是路徑問題
netstat -ant 查看80端口(http的默認端口)
iptables -F 清空防火墻
12 測試查看網頁:links ip 172.16.222.222 、 curl ip 172.16.222.222
13 切換到編輯網頁路徑:cd /usr/local/wanghttp/htdocs
echo "welcome to mage" > index.html 更改內容
原創文章,作者:lyx,如若轉載,請注明出處:http://www.www58058.com/61084