您好,登錄后才能下訂單哦!
首先linux軟件程序包和windows中的程序包是不兼容的,所以要在linux上使用windows上的程序,需要使用虛擬化工具。
庫級別的虛擬化:
linux : WinE
windows: Cywin
而程序開發語言有多種,分為系統級開發,和應用級開發
系統開發語言:
C, C++
C/C++程序格式:
源代碼:文本格式的程序代碼
編譯開發環境:編譯器、頭文件、開發庫
二進制格式:文本格式的程序代碼-->編譯器--> 二進制格式(二進制程序、庫文件、配置文件、幫助文件、)
應用級開發語言:
java/Python/perl/ruby/php/delphi/go
java/python程序格式:
源代碼:編譯成能夠在其虛擬機(jvm/pvm)運行的格式;
開發環境:編譯器、開發庫
二進制格式:程序代碼-->編譯器--> 二進制格式(二進制程序、庫文件、配置文件、幫助文件、)
程序包管理:
源代碼--> 目標二進制格式-->組織成為一個或有限幾個“包”文件;
安裝,升級,卸載,查詢,校驗
程序包管器分為:
debian系列:deb文件, dpkg包管理器
redhat系列: rpm文件, rpm包管理器
這里重要說下redhat系列的程序包管理“rpm包管理”rpm即為“Redhat Package Manager”現在也為
“RPM Package Manager”之意。
軟件程序包的命名有一定的格式;
源代碼:name-VERSION.tar.gz
VERSION: major(主版本號).minor(次版本號).release(發行版號)
rpm包命令格式:name-VERSION-release.arch.rpm
VERSION::major,minor,release
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, amd64powerpc: ppc
跟平臺無關:noarch
包的分類與拆包:
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm:開發子包
Application-utils-VERSION-ARHC.rpm:其它子包
Application-libs-VERSION-ARHC.rpm:其它子包
查看二進制程序所依賴的庫文件:
ldd/PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件:
ldconfig
/sbin/ldconfig-p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
安裝軟件包時,包之間可能存在依賴關系,甚至循環依賴,如安裝A包,需要先安裝B包,安裝B包需要先安裝C包,而安裝C包則需要先安裝A包,這種循環依賴的安裝,如果只是一步一步的安裝解決依賴關系,那就太耗費人力物力了,這是就需要使用一些前端工具來自動解決依賴關系。
解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 22+ rpm包管理器前端管理工具
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
1、包文件組成(每個包獨有)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
2、數據庫(公共)
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
...
存放在/var/lib/rpm
獲取程序包
安裝程序包,首先需要獲取程序包,而獲取程序包較為安全的途徑有以下幾種
(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
④自己制作
獲取程序包時需注意,檢查其合法性:來源合法性、程序包的完整性。
獲取到程序包之后,就需要安裝或管理程序包了,這里說下rpm包的管理:
rmp包管理:
rpm命令
CentOS系統上rpm命令管理程序包:
:安裝,升級,卸載,查詢,校驗,數據庫維護
rpm命令:rpm [options] [package_file]
安裝:-i,--install
升級:-U,--update,-F ,--freshen
卸載:-e,--erase
查詢:-q,--query
校驗:-V ,--verify
數據庫維護:--builddb,--initdb
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh PACKAGE_FILE
GENERAL OPTIONS:
-v:verbose,詳細信息
-vv: 更詳細的輸出
[install-options]:
-h: hash masks輸出進度條;每個#表示2%的進度;
--test : 測試安裝,檢測并報告依賴慣性系及沖突消息等;
--nodeps : 忽略依賴關系;不建議使用;
--replacepkgs : 重新安裝;
--nosignature: 不檢查來源合法性
--nodigest:不檢查包完整性
--noscipts:不執行程序包腳本片斷
如:測試安裝rpm包,可以看到包所需的依賴關系:
程序包安裝時會運行一些腳本做一些準備操作,注意:rpm可以自帶腳本;
四類: --noscripts(都不執行)
preinstall:安裝過程開始之前運行的腳本;%pre; --nopre
postinstall: 安裝過程完成之后運行的腳本;%post; --nopost
preuninstall:卸載過程真正開始之前運行的腳本;%preun; --nopreun
postuninstall:卸載過程完成之后運行的腳本,%postun; --nopostun
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
-U:升級或安裝
upgrade:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”
rpm -Uvh PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-F:升級
freshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作
rpm -Fvh PACKAGE_FILE ...
--oldpackage : 降級安裝;
--force:強制升級;
注意:
①不要對內核做升級操作;Linux支持多內核版本并存,因此直接安裝新版本內核即可
②如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
例:
卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
[--allmatches] :卸載所有匹配指定名稱的程序包的各版本;
[--nodeps] :忽略依賴關系
--text: 僅測試卸載, dry run模式
測試卸載,可以發現卸載時同樣存在著依賴關系
查詢:
rpm {-q|--query} [select-options] [query-options]
[select-options]:
PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本;
-a ,--all : 查詢已安裝的所有包;
-f FILE:查詢指定的文件由哪個程序包安裝生成;
-p,--package PACKAGE_FILE :用于實現對未安裝的程序包執行查詢
--whatprovides CAPABILITY : 查詢指定的CAPABILITY由哪個程序包提供 ;
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
相關用法:
[query-options]
--changelog:查詢RPM包的changlog;
-l, --list : 程序安裝生成的所有文件列表;
-i, --info:程序包相關的信息,版本號、大小、所屬的包組,等;
-c, --configfiles:查詢指定的程序包提供的配置文件;
-d, --docfiles:查詢指定的程序包提供的幫助文檔;
--provides:列出指定的程序包聽的所有的CAPABILITY;
-R, --requires:查詢指定程序包的依賴關系;
--scripts:查看程序包自帶的腳本片段;
rpm2cpio 包文件|cpio–itv :預覽包內文件
rpm2cpio 包文件|cpio–id “*.conf”:釋放包內文件
當誤操作損壞某個文件,導致程序不能使用時,如果直接將程序重新安裝,會覆蓋其配置文件,導致先前配置丟失;
可以將損壞的文件刪除,然后使用 rpm2cpio命令,重新解壓程序包中的指定文件,再將解壓后的文件移動到指定位置,即可使用;可以達到不覆蓋其他文件的情況下,重新修復程序。
校驗:
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
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
包校驗:
包來源合法性驗正及完整性驗正:
完整性驗正:SHA256
來源合法性驗正:RSA
公鑰加密:
對稱加密:加密、解密使用同一密鑰;
非對稱加密:密鑰是成對兒的
public key: 公鑰,公開所有人
secret key: 私鑰, 不能公開
導入所需要公鑰:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
rpm -K|checksigrpmfile檢查包的完整性和簽名
rpm -qagpg-pubkey* 查看已導入的密鑰
[root@centos7 Packages]# rpm -K zsh-5.0.2-14.el7.x86_64.rpm zsh-5.0.2-14.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
rpm數據庫
數據庫重建:
rpm管理器數據庫路徑:/var/lib/rpm
查詢操作:通過此處的數據庫進行;
獲取幫助:
CentOS6: man rpm
CentOS7: man rpmdb
rpm {--initdb|--rebuilddb}
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb:初始化數據庫,當前無任何數據庫可實施化創建一個新的;當前有時不執行任何操作;
--rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;
yum命令
前文已經提到安裝軟件包時,包之間可能存在依賴關系,需要使用一些前端工具來自動解決依賴關系。
解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 22+ rpm包管理器前端管理工具
CentOS中管理工具: yum, dnf
這里主要說下yum的使用方法:
yum : YellowdogUpdate Modifier;rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定
位軟件包,up2date的替代工具
yum repository: yum repo,存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下) repodata目錄所在的位置為倉庫應該指向的位置。
倉庫首先需要是文件服務器 (光盤本身也可當作倉庫)
文件服務器:
ftp://
http://
file:///
yum客戶端的配置文件:
/etc/yum.conf:為所有倉庫提供公共配置
man yum.conf可查看yum.conf的詳細信息
/etc/yum.repos.d/*.repo:為倉庫的執行提供配置
倉庫指向的定義:
【repositoryID】
name=Some name for this repository
baseurl=url://path/to/repository
enable={1|0}(默認為1,即啟用本倉庫)
gpgcheck={1|0}(默認為1,即啟用密鑰)
gpgkey=URL(gpg密鑰文件)
enablegroups={1|0}(默認為1,即啟用組管理)
faillovermethod={roundrobin|priority}(當baseurl指向多個時, 默認為:roundrobin,意為隨機挑選, priority:指定優先級)
cost= 默認為1000
例:
自定義倉庫指向:
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# vim base.repo
[base] name=CentOS 7 baseurl=http://10.1.0.1/cobbler/ks_mirror/CentOS-7-x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1
還可以將鏡像光盤當作倉庫:
首先需要掛載光盤:
[root@centos7 ~]# mount /dev/sr0 /mnt/cdrom/ mount: /dev/sr0 is write-protected, mounting read-only
然后進入/etc/yum.repos.d/目錄,將CentOS-Base.repo文件改為非repo結尾的文件(使此倉庫無法識別,達到禁止使用此倉庫的目的)
[root@centos7 ~]# cd /etc/yum.repos.d/ [root@centos7 yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
編輯CentOS-Media.repo文件
[root@centos7 yum.repos.d]# vim CentOS-Media.repo
[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
這樣即可使用本地倉庫!
yum命令的用法:
yum [options] [command] [package ...]
使用命令創建倉庫:
如:
生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo倉庫
yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/
yum-config-manager --disable “倉庫名" 禁用倉庫
yum-config-manager --enable “倉庫名” 啟用倉庫
顯示倉庫列表:
repolist [all|enabled|disabled]
[root@localhost yum.repos.d]# yum repolist Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile repo id repo name status Base CentOS 7 9,007 epel fedora-epel 8,508 repolist: 17,515
顯示程序包:
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available |install | updates} [glob_exp1] [...]
安裝程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...](重新安裝)
升級程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...](降級)
檢查可用升級:
yum check-update
卸載程序包:(存在依賴關系的包一起卸載)
yum remove | erase package1 [package2] [...]
查看程序包infomation
yum info [...]
查看指定的特性(某文件)是由哪個程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
清理本地緩存:
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構建緩存:
yum makecache
搜索:
yum search string1 [string2] [...]
以指定關鍵字搜索程序包名及summary信息
查看指定包所依賴的capabilities
yum deplist package1 [package2] [...]
查看yum事物歷史
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6
安裝及升級本地程序包
* localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
* localupdate rpmfile1 [rpmfile2] [...]
(用update替代)
包組管理的相關命令:
groupinstall group1 [group2] [...]
groupupdate group1 [group2] [...]
grouplist [hidden] [groupwildcard] [...]
groupremove group1 [group2] [...]
groupinfo group1 [...]
yum的命令行選項:
--nogpgcheck:禁止進行gpgcheck
-y: 自動回答為“yes”
-q:靜默模式
--disablerepo=repoidglob:臨時禁用此處指定的repo
--enablerepo=repoidglob:臨時啟用此處指定的repo
--noplugins: 禁用所有插件
yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號
$arch: 平臺,i386,i486,i586,x86_64等
$basearch:基礎平臺;i386
$YUM0-$YUM9:自定義變量
如:http://server/centos/$releasever/$basearch/
創建yum倉庫:
createrepo [options] <directory>
1、首先進入存放程序包的目錄,使用"createrpo ./"命令在當前目錄生成repodata目錄,進入目錄即可發現生成一些文件
[root@localhost repo]# createrepo ./ [root@localhost repo]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# vim base.repo
添加下列幾行:
[xen4centos] name=Xen 4 CentOS6 baseurl=file:///yum/repo/ gpgcheck=0
使用yum repolist命令即可查看倉庫已生成
程序包的編譯安裝:
上述說的都是二進制的rpm包,有很多優點:
1、包管理系統簡單,只需要幾個命令就可以實現包的安裝,升級,查詢和卸載;
2、安裝速度快;
但是也有很多缺點:
1、不能看到源代碼;
2、功能選擇不靈活;
3、存在依賴性。
而編譯安裝的程序包即源碼包,則可以彌補這些缺點
源碼包優點:
1、自由選擇所需的功能,
2、開源,如果能力足夠,可以修改源代碼
3、軟件是編譯安裝,所以更加適合自己的系統,更加穩定,效率也更高
4、卸載方便
缺點:
1、安裝過程步驟較多,尤其安裝較大的軟件合集時,容易出現拼寫錯誤
2、編譯時間長,安裝時間比二進制包時間長
3、因為是編譯安裝,安裝過程中一旦報錯新手很難撓解決
程序包編譯安裝:
Application-VERSION-release.src.rpm--> 安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝
源代碼-->預處理-->編譯(gcc)-->匯編-->鏈接-->執行
源代碼組織格式:
多文件:文件中的代碼之間,很可能存在跨文件依賴關系
C、C++:make (項目管理器,configure --> Makefile.in --> makefile)
java: maven
C代碼編譯安裝三步驟:
1、./configure:
(1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及makefile.in 文件生成makefile
(2) 檢查依賴到的外部環境
2、make:根據makefile文件,構建應用程序
3、make install:復制文件到相應路徑
開發工具:
autoconf: 生成configure腳本
automake:生成Makefile.in
注意:安裝前查看INSTALL,README
開源程序源代碼的獲取:
官方自建站點:
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 : 指定默認安裝位置,默認為/usr/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.s
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
例:編譯安裝apache 2.2,并啟動此服務
yum install -y gcc yum groupinstall -y "Development tools" yum groupinstall -y " Server Platform Development" ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2 make make install
將二進制程序目錄導入至PATH環境變量中
vim /etc/profile.d/httpd2.sh PATH=$PATH:/usr/local/apache2/bin
導入庫文件路徑
vim /etc/ld.so.conf.d/httpd2.conf /usr/local/apache2/lib
讓系統重新生成緩存
ldconfig -v
導入頭文件
ln -sv /usr/local/apache2/include /usr/inclcude/httpd2.h
導入幫助手冊
vim /etc/man.config MANPATH /usr/local/apache2/man
啟動服務
apachectl start
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。