CentOS用一行Shell腳本自動下載RPM所有依賴包

在CentOS在線環境上下載所有RPM包依賴,然後在離線環境上安裝,網上的資料不少。但實踐了下,覺得網上的資料雷同的比較多,也陳舊了點,或其建議方法不能解決所有場景問題。

網上建議大概都是兩種操作方法,使用一句命令就可以搞定,假設,以安裝VirutalBo爲例:

#方法1

yum install --downloadonly --downloaddir=. VirtualBox-5.2-5.2.34_133893_el6

#方法2,需要特殊yum安裝yum-utils組件

yumdownloader --resolve --destdir=. VirtualBox-5.2-5.2.34_133893_el6

 

今天試了下,建議操作命令存在適應性問題,它們並不能下載所有的依賴包!

兩條命令均是根據本機環境,選擇性地做一些下載,所以,除非是對等的環境,不然,在離線環境安裝,很有可能還是會出現RPM包依賴問題。

因爲個人還是很想完全下載完所有的VirtualBox依賴包,所以,就使用yum deplist的命令查看包依賴關係。最開始,先是自己通過手工一條條進行選擇拷貝、粘貼,記載下載組件日誌,下載組件,然後再次利用yum deplist的命令輸出,作正確性的校驗,對比是否下載完整了。

好在Linux上gedit記事本,一個非常友好的功能,就是“以當前行內容進行搜索”的時間,搜索框裏面可以看出來此行是第幾個出現,加快了不少速度。

假設,我把我下載過的組件日誌記錄在文件頂部,yum deplist二次輸出的內容放在文件下面。然後,從下面最完整的yum deplist輸出內容開始,一個個對依賴進行搜索。如果,搜索功能說當前搜索行是出現在大於1的位置,那麼就可以證明,前面手工下載組件時,確實下載過(爲了避免一些重複內容,在搜索比較時,進行些刪除也是非常建議的,因爲重複行,也都已經被gedit高亮顯示)!

真佩服自己的耐心!!!

沉下心來,發現yum deplist的輸出非常格式化,而且爲了避免讓其他人不再麻煩,那麼爲什麼不用Shell腳本去分析、去下載呢?而且腳本代碼量粗略估算不大,用一行Shell腳本應該可以完事。

說幹、就幹,根據以前的Shell編程經驗和網上搜備忘資料(記得有這個功能,但是不知道怎麼去寫了,與提筆忘字一樣),後來測試通過用一行Shell腳本自動下載RPM依賴包的代碼:

yum deplist VirtualBox-5.2-5.2.34_133893_el6-1.x86_64 |grep provider|cut -d ':' -f 2 > pkgs.txt ;while read line ; do yumdownloader --resolve --destdir=. $line ; done < pkgs.txt

 

注:

   1、本來想僅利用yum自身downloadonly的下載方法;但是,在環境中,它的適應性還是比較明顯,就不得不引入yumdownloader

2、Shell腳本寫成一行,用;分割是關鍵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章