YUM:Yellow dog Updater Modified

来源:https://www.cnblogs.com/jzbgltb/archive/2018/09/10/9617457.html
-Advertisement-
Play Games

1. 什麼是YUM YUM(全稱為 Yellow dog Updater Modified) 是一個在Fedora和RedHat以及CentOS中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣 ...


# 1. 什麼是YUM YUM(全稱為 Yellow dog Updater Modified) 是一個在Fedora和RedHat以及CentOS中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。 **YUM是C/S架構,是RPM的前端工具,依賴於RPM存在的** 伺服器端: 首先要是一個文件伺服器,有很大的存儲空間,裡面放著RPM包、元數據文件、conf文件、binary信息。並通過文件共用服務讓外部客戶端可以訪問到存放RPM包的目錄。 > YUM支持的文件伺服器有以下幾種: > - ftp:// > - http:// > - nfs:// > - file:/// ##為什麼有三個斜杠,這是因為第三個斜杠是Linux目錄中的斜桿 客戶端: 1. 支持RPM包管理基本功能,本地也要有YUM程式; 2. 本地要有配置文件(配置遠程伺服器YUM倉庫或本地伺服器YUM倉庫); # 2. YUM的工作流程 在客戶端,當YUM接收到用戶命令(例如:安裝程式包的命令)之後,會向著本地配置文件中配置的伺服器地址(URL)發起連接。YUM不會直接向伺服器請求程式包,而是請求YUM伺服器上存放RPM包名、版本、包和包之間依賴關係的元數據文件。這個文件下載到本地之後,會先存放到cache中,然後YUM會在本地上分析這個文件中是否存有要安裝程式包的包名,如果有就根據這個元數據文件嘗試分析該包的依賴關係,得出要依賴哪些程式包之後,就在本地已安裝的程式包中查詢被依賴的包中哪些已安裝,哪些沒有安裝; 分析完之後,YUM會啟動文件伺服器的客戶端向著YUM伺服器下載那些沒有安裝的程式包。下載完成後先緩存在本地,在本地開始執行類似於RPM安裝的操作;而安裝時會先安裝被依賴的程式包,所有程式包安裝完成後會通知客戶端,並自動刪除緩存區中的程式包以節省空間;但是元數據不會被刪除,因為下次再安裝新的程式包時,直接分析本地的元數據就可以獲取依賴關係,通過這種方式可以節省時間與網路帶寬。 但是上述這種機制,也存在著一些問題,萬一伺服器上的程式包或者依賴關係發生了變化,就會導致伺服器和客戶端本地的元數據不一致。想解決這個問題,可以在每次使用YUM的時候,都向伺服器請求元數據。但是這種方式浪費帶寬和時間,有的時候明明沒有變化,但還是需要下載。 YUM伺服器上有一個特殊文件,文件中記錄了每一個元數據文件的校驗碼,實際上每次運行YUM的時候,都會向伺服器請求這個文件(剛剛配置好YUM源的時候,本地沒有這個文件,這時候肯定是要下載元數據的),並和本地元數據中的校驗碼文件進行對比,如果一致則代表元數據沒有變化,本地元數據有效,否則就重新請求元數據。 # 3. YUM命令 ## 3.1 常用命令行選項 如果一個功能在配置文件中使能了,卻在命令行運行命令的時候去使能了,命令行優先。 ``` -q, --quiet:靜默模式 -v, --verbose:詳細模式 -y, --assumeyes:自動回答為yes; --assumeno:自動回答為no --nogpgcheck:禁止進行GPG Check; -R [minutes], --randomwait=[minutes]:最多等待時間 --disablerepo=repoidglob:禁用此處指定的repo倉庫ID,可配置通配符進行匹配; --enablerepo=repoidglog:啟用指定的repo倉庫ID,可配置通配符進行匹配; -x [package], --exclude=[package]:通配要排除的包 --noplugins:禁用所有插件; --color=COLOR:帶顏色 --downloadonly:僅下載包,不安裝或升級。預設下載在yum的緩存目錄中,預設為/var/cache/yum/$basearch/$releasever --downloaddir=DLDIR:指定下載目錄 ``` ## 3.2 查詢功能 **顯示倉庫列表** `yum repolist [all|enabled|disabled]` **按照選項列出程式包信息** ``` Note:根據命令格式可搭配glob風格的通配符; 列出所有可提供的或已安裝的程式包; yum list [all | glob_exp1] [glob_exp2] [...] 列出軟體倉庫中所有可以提供安裝的程式包 yum list available [glob_exp1] [...] 列出軟體倉庫中所有可用來更新的程式包(可以讓本地系統用來更新的包) yum list updates [glob_exp1] [...] 列出args指定的包。如果參數與可用包的名稱不匹配,則假定它是shell樣式的glob,並且列印任何匹配項。 yum list installed [glob_exp1] [...] 列出系統上已經安裝,但在被配置文件里列出的YUM倉庫里不存在的程式包 yum list extras [glob_exp1] [...] 列出系統上已經安裝,但在配置文件里列出的YUM倉庫中被廢棄的程式包 yum list obsoletes [glob_exp1] [...] 列出最近添加到YUM倉庫的RPM包 yum list recent ``` **顯示程式包信息,相當於rpm -qi PACKAGE** `yum info [...]` **查看指定特性(也可以是文件)是哪個程式包提供的** `yum provides | whatprovides feature1 [feature2] [...]` **搜索包含包名和摘要字元串** ``` 模糊搜索,搜索包名和摘要信息 yum search string1 [string2] [...] ``` **查看指定包所依賴的capabilities** `yum deplist package1 [package2] [...]` **查看rmp包db版本信息** `yum version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]` **查看yum事務歷史** ``` yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] 事務就是執行yum命令,查詢不算事務,一般包括安裝、升級、卸載等,修改類的操作才算事務; 例如: ]# yum history ##查看yum的歷史事務信息; ]# yum history summary ##查看yum歷史事務的摘要信息; ]# yum history list ##查看yum歷史事務列表,預設操作; ]# yum history liststats ##查看的是統計數據; ``` ## 3.3 安裝/升級/移除功能 **安裝程式包** ``` 預設會安裝最新的,安裝的時候指定部分包名就行,不需要指定完成的RPM程式包名稱 yum install package1 [package2] [...] ``` **重新安裝程式包** ``` 重新安裝(基於覆蓋方式安裝),類似於rpm -ivh --replacepgks yum reinstall package1 [package2] [...] ``` **升級程式包** `yum update [package1] [package2] [...]` **降級程式包** ``` 類似於rmp -Uvh --oldpackages yum downgrade package1 [package2] [...] ``` **檢查可升級的程式包** `yum check-update ` **卸載程式包** ``` 卸載某個程式包,會把依賴它的程式包也一起卸載 remove | erase package1 [package2] [...] ``` ## 3.4 清除/構建緩存 當更換新的YUM倉庫之後,執行一次清理和構建是很有必要,這可以使得本地和YUM倉庫中的元數據等信息同步。 **清理本地緩存目錄** 用於清理在yum緩存目錄中積累的各種各樣的東西 `yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]` **構建元數據** 下載並使用所有當前可用的YUM倉庫的元數據 `yum makecache [fast]` ## 3.5 安裝/升級本地程式包 **安裝本地RPM包** ``` 不用管這個RPM包的依賴問題,依賴問題會被yum解決 yum localinstall rpmfile1 [rpmfile2] [...] maintained for legacy reasons only - use install ``` **升級本地程式包** ``` 不用管這個RPM包的依賴問題,依賴問題會被yum解決 yum localupdate rpmfile1 [rpmfile2] [...] maintained for legacy reasons only - use update ``` ## 3.6 包組管理相關命令 ``` Note:如果包組名稱中包含空格,則要使用雙引號包圍; yum groupinstall group1 [group2] [...]:安裝包組; yum groupupdate group1 [group2] [...]:升級包組; yum grouplist [hidden] [groupwildcard] [...]:查看包組; yum groupremove group1 [group2] [...]:移除包組; yum groupinfo group1 [...]:查看包組相關信息,就是包組內有多少程式包等信息; ##Mandatory Packages:必須安裝的包; ##Default Packages:預設安裝的包; ##Optional Packages:可選安裝的包(如果被依賴也會安裝); 安裝一個包組的時候,預設情況只會安裝Mandatory或Default ,其中Optional Packages不會被安裝,想改變這種情況需要/etc/yum.repos.d/xxxx.repo中加入此選項 group_package_types=default, mandatory, optional ``` # 4. YUM客戶端的配置文件 ## 4.1 主配置文件/etc/yum.conf 一個YUM客戶端可以指向一個或多個倉庫(如:一個倉庫存儲的是基本程式包,一個倉庫存儲的是擴展程式包,一個倉庫存儲是第三方程式包); 當安裝程式包時,如果存在多個同一類倉庫(通過鏡像來管理);yum會同時分析多個倉庫,從中找出版本最新的程式包安裝,並且可以通過自定義COST,實現優先使用自定義的倉庫。 ``` [root@Centos7 ~]# cat /etc/yum.conf ##Centos7.4,沒有更改過完全預設。 1表示使能,0表示不使能;等號左右不要有空格,否則可能出現語法錯誤; [main] ##倉庫ID cachedir=/var/cache/yum/$basearch/$releasever ##緩存文件存放目錄 keepcache=0 ##緩存文件是否保存下來 debuglevel=2 ##debug調試級別,預設為2 logfile=/var/log/yum.log ##日誌文件路徑 exactarch=1 ##安裝程式包的時候,做精確地平臺匹配(例如:配置為0則允許在i386上更新i686的RPM包) obsoletes=1 ##僅在更新的時候生效,允許更新陳舊的RPM包 gpgcheck=1 ##安裝程式包的時候,檢查GPG(GNU Private Guard) plugins=1 ##是否允許使用插件(我們一般會用yum-fastestmirror這個插件) installonly_limit=5 ##同時安裝幾個程式包 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum ##追蹤BUG的URL distroverpkg=centos-release ##指定基準包,yum會根據這個包判斷發行版本 ``` ## 4.2 倉庫文件/etc/yum.repos.d/xx.repo repo文件是Fedora、Redhat和Centos中yum源(軟體倉庫)的配置文件,通常一個repo文件定義了一個或者多個軟體倉庫的細節內容,例如我們將從哪裡下載需要安裝或者升級的軟體包,repo文件中的設置內容將被yum讀取和應用! Note:文件必須以.repo結尾,否則不會被YUM使用 一個repo文件可以指向一個倉庫,為倉庫的指向提供配置信息; 一個repo文件也可以指向多個倉庫,只不過為了便於管理切割成了多個repo文件; 自定義repo文件的部分參數 ``` 1表示使能,0表示不使能;等號左右不要有空格,否則可能出現語法錯誤; [repositoryID]: ##設定倉庫ID(main不能作為ID,因為它是公共的); name=Some name for this repository ##設定YUM倉庫名; baseurl=url://server1/path/to/repository/ ##設定YUM倉庫訪問路徑(指向repodata這個目錄的上級目錄); url://server2/path/to/repository/ ##第二行及其之後的URL不能頂格寫 url://server3/path/to/repository/ mirrorlist= ##不能與baseurl同時使用,設定鏡像伺服器地址URL(指向的是個文本文件,裡面存放多個指向倉庫的URL,YUM會將這個文件下載到本地然後連接倉庫); enabled={1|0} ##設定是否啟用倉庫,預設啟用; gpgcheck={1|0} ##設定是否在安裝此倉庫中的程式包時,進行GPG校驗,來RPM包的完整性和來源合法性; repo_gpgcheck={1|0} ##設置是否檢查倉庫元數據簽名信息; gpgkey=URL ##指向GPG密鑰文件的訪問路徑(可能是倉庫或權威機構提供); enablegroups={1|0} ##設置是否在倉庫上使用組批量管理程式包; failovermethod={roundrobin|priority} ##故障轉移方法(輪詢|優先順序),預設為roundrobin隨機挑選,priority是按順序選擇; exclude=compiz* *compiz* fusion-icon* ##用來禁止這個軟體倉庫中的某些軟體包的安裝和更新,可以使用通配符,並以空格分隔,可以視情況需要自行添加; keepalive={1|0} ##是否當遠程伺服器是HTTP/1.1時,保持連接功能; username ##有些伺服器不支持匿名訪問,需要指明要訪問伺服器的用戶名; password ##有些伺服器不支持匿名訪問,需要指明要訪問伺服器的密碼; cost= ##訪問倉庫的開銷(預設為1000),用數字表示; group_package_types=default, mandatory, optional ##安裝包組中指定類型的包; ``` ## 4.3 YUM的repo配置文件中可用的變數 **示例:** ``` [centosplus] baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 ``` $releasever:程式的版本,對YUM而言指的是redhat-relrase版本。只替換為主版本號,如Redhat6.5 則替換為6 $arch:系統架構 $basearch:系統基本架構,如i686,i586等的基本架構為i386 $YUM0-$YUM9:在系統定義的環境變數,可以在yum中使用 # 5. repodata目錄 YUM倉庫存儲了眾多的RPM包,以及包的相關的元數據文件,其中包含元數據在內的一些文件就是放置於repodata目錄下的; 一般出現的找不到repodata目錄或文件的錯誤的原因通常有三個: 1. 路徑問題; 2. 沒有生成repodate目錄; 3. *.repo配置文件衝突。 repodata作為軟體的倉庫,其目錄下有四個必要文件,其中最主要的是repomd.xml文件。 1. filelists.xml.[gz] 2. other.xml.[gz] 3. primary.xml.[gz] 4. repomd.xml(md意思是metadata) ``` [Allen@Centos7 ~]$ ls -lh /mnt/sdf/repodata/ total 13M -rw-r--r--. 1 root root 1.3M Sep 10 14:07 4153601518ea9bea00dea4b73816fccd29a5167fca6902ee31f536e023763371-other.sqlite.bz2 -rw-r--r--. 1 root root 953K Sep 10 14:07 a7877ff695cd6b491a74016534c4201fcf0aa92f2bf7301c7cf72488e72f9807-other.xml.gz -rw-r--r--. 1 root root 3.2M Sep 10 14:07 bcb5a2092e7ad381b6e5b6f7982ca60efde0fd570bec36afb318829b0892152c-filelists.xml.gz -rw-r--r--. 1 root root 1.5M Sep 10 14:07 c2839d685c7b3885e9d9d883e3d2eff9f857a0ab8a6dbb4c8ada69fc041283a5-primary.xml.gz -rw-r--r--. 1 root root 3.1M Sep 10 14:07 d6ce21daefa0b83ba93871586fcf46030b8cea7675b31b42734353c112c165b7-primary.sqlite.bz2 -rw-r--r--. 1 root root 3.1M Sep 10 14:07 ee7a27844625d211f084876e6f94e1768f2a747d612c7252d77bee234405934d-filelists.sqlite.bz2 -rw-r--r--. 1 root root 3.1K Sep 10 14:07 repomd.xml ...primary:存儲主matadata數據,包括所有包名,版本號,依賴關係等等; ...filelists:保存了每個程式包安裝後會生成的文件; repomd:存儲了以上6個文件的指紋信息(校驗碼);即當yum從遠程倉庫下載程式包時,就先下載這個文件,比較與本地是否一致,如果一致,本地緩存繼續有效,否則重新下載; ``` # 6. createrepo_c命令 每個rpm包都包含一個內部文件清單,每一個文件就是capability,如果這個程式包還能額外提供其它的capability,需要在製作rpm包的sbark文件中顯示說明; YUM倉庫通過createrepo_c命令,通過分析每一個rpm包自帶的元數據,然後抽取出來,並羅列保存在元數據文件里,比如:在製作rpm包時,每個包叫什麼名字、依賴哪些包、提供哪些capability等,這些信息在製作rpm包時都已經提供了。 createrepo命令創建高級倉庫時比較困難,高級倉庫中要對程式包分組,創建分組,組文件是xml格式的,因此要創建時要精通xml語法才能創建; createrepo_c就可以創建repodata目錄 **NAME** `createrepo_c - Create rpm-md format (xml-rpm-metadata) repository` **SYNOPSIS** `createrepo_c [options] ` **OPTIONS** ``` -u,--baseurl :可選指明base URL本地的路徑; -o,--outputdir :可選輸出目錄的路徑; -x,--excludes :排除指定的程式包; -i,--pkglist :包含對哪些包創建; -g,--groupfile :指明包組文件; --basedir:指明獲取repodata的basedir路徑,預設當前工作目錄; --update:只更新那些在上次產生元數據之後被改變(基於文件大小和mtime),添加或者刪除了的項目,這可以大大減少I/O和處理時間; --update-md-path:使用已經存在的repodata。 -o --outputdir :可選的輸出目錄 ``` # 7. 配置YUM實驗 ## 7.1 使用系統光碟作為YUM源 ``` [Allen@Centos7 ~]$ cat /etc/yum.repos.d/cd.repo [mycdrom] name=Centos7.4 baseurl=file:///mnt/iso/ enabled=1 gpgcheck=1 gpgkey=file:///mnt/iso/RPM-GPG-KEY-CentOS-7 [root@study ~]# yum --enablerepo=mycdrom install software_name ``` ## 7.2 在本地構建YUM倉庫 ``` 1、創建目錄 mkdir /mnt/sdf 2、拷貝rpm包到本地YUM倉庫的目錄 cp /mnt/iso/Packages /mnt/sdf 3、在倉庫所在目錄下更新創建源(repodata) ##最終會在/mnt/sdf下創建一個叫做repodata的目錄 createrepo /mnt/sdf # 重新生成metadata,如果之前存在repodata可以使用--update進行更新; 4、創建配置文件 cat >/etc/yum.repos.d/custom.repo< /etc/cron.d/yumupdate ```
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 修改windows server的機器名的時候,發現change按鈕是disable的。 手動修改不了,用註冊表regedit來修改。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerNam ...
  • 簡介 Varnish是一款高性能、開源的緩存反向代理伺服器。它從客戶端接受請求,並嘗試從緩存中響應請求,如果無法從緩存中提供響應,Varnish 向後端伺服器發起請求,獲取響應,將響應存儲在緩存中,然後把響應發送給客戶端。如果Varnish能夠從Cache中響應一個請求,所消耗的時間是微秒級別的,這 ...
  • 配置完伺服器靜態IP後,在CMD視窗中查看ip地址,發現是Autoconfiguration IPV4。 上網搜索了,是關於虛擬伺服器的,但是我沒有配置虛擬伺服器,有點奇怪。 使用下麵的教程,可以解決這個問題。 1.仔細看了一下,配置的過程沒有任何問題,因為都是手動的 2.查看信息發現問題了,IP地 ...
  • test test test ...
  • 一、用戶與組 1.用戶與組的概念 在linux系統中,根據系統管理需要將用戶分為三種類型: 1.超級用戶:root是linux系統的超級用戶,對系統擁有絕對許可權。由於root用戶許可權太大,只有在進行系統管理、維護任務時使用root用戶,建議日常事物處理用普通用戶賬號。 2.普通用戶:普通用戶由roo ...
  • 提示:這裡的用戶指的是普通用戶 讀寫執行許可權對root無效 對於目錄來說 1)只擁有讀許可權 可以ls 查看目錄內容,不能切換進目錄中去 也不能創建目錄或文件 [support@node1 opt]$ ls log/ls: cannot access log/www: Permission denie ...
  • 原因:php 給android 寫介面出現java.net.ProtocolException:unexpected end of stream,查找android方面原因時發現數據超長 ,發現html源代碼被截斷了,原因在nginx轉發上,查詢nginx轉發日誌: 給與相關文件夾777許可權:解決 ...
  • alpha 版 內部測試版本。a 是希臘字母的第一個,表示最早的版本,一般用戶不要下載這個版本,這個版本包含很多 BUG,功能不全,主要是給開發人員和測試人員測試和找 BUG 用的。 beta版 公開測試版。b 是希臘字母的第二個,這個版本比 alpha版本發佈得晚一些,主要是給忠實用戶測試用的,改 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...