7.14 Linux源碼包升級(jí)

      網(wǎng)友投稿 606 2025-03-31

      linux 系統(tǒng)中更新用源碼包安裝的軟件,除了卸載重裝這種簡(jiǎn)單粗暴的方法外,還可以下載補(bǔ)丁文件更新源碼包,用新的源碼包重新編譯安裝軟件。比較兩種方式,后者更新軟件的速度更快。


      使用補(bǔ)丁文件更新源碼包,省去了用 ./configured 生成新的 Makefile 文件,還省去了大量的編譯工作,因此效率更高。學(xué)完本節(jié)會(huì)對(duì)比有更深入的理解。

      linux補(bǔ)丁文件的生成和使用

      Linux 系統(tǒng)中可以使用 diff 命令對(duì)比出新舊軟件的不同,并生成補(bǔ)丁文件。

      diff 命令基本格式為:

      [root@localhost ~]# diff 選項(xiàng) old new \#比較old和new文件的不同

      此命令中可使用如下幾個(gè)選項(xiàng):

      -a:將任何文檔當(dāng)作文本文檔處理;

      -b:忽略空格造成的不同;

      -B:忽略空白行造成的不同;

      -I:忽略大小寫造成的不同;

      -N:當(dāng)比較兩個(gè)目錄時(shí),如果某個(gè)文件只在一個(gè)目錄中,則在另一個(gè)目錄中視作空文件;

      -r:當(dāng)比較目錄時(shí),遞歸比較子目錄;

      -u:使用同一輸出格式;

      從生成補(bǔ)丁文件,到使用其實(shí)現(xiàn)更新軟件的目的,為了讓讀者清楚地了解整個(gè)過程的來龍去脈,下面我們自己創(chuàng)建兩個(gè)文件(分別模擬舊軟件和新軟件),通過對(duì)比新舊文件生成補(bǔ)丁文件,最后利用補(bǔ)丁文件更新舊文件,具體步驟如下:

      創(chuàng)建兩個(gè)文件,執(zhí)行如下命令:

      [root@localhost ~]# mkdir test \#建立測(cè)試目錄 [root@localhost ~]# cd test \#進(jìn)入測(cè)試目錄 [root@localhost test]# vi old.txt our school is lampbrother \#文件old.txt,為了便于比較,將每行分開 [root@localhost test]# vi new.txt our school is lampbrother in Beijing \#文件new.txt

      利用 diff 命令,比較兩個(gè)文件(old.txt 和 new.txt)的不同,并生成補(bǔ)丁文件(txt.patch),執(zhí)行代碼如下:

      [root@localhost test]# diff -Naur /root/test/old.txt /root/test/new.txt > txt. patch \#比較兩個(gè)文件的不同,同時(shí)生成txt.patch補(bǔ)丁文件 [root@localhost test]#vi txt.patch \#查看一下這個(gè)文件 --/root/test/old.txt 2012-11-23 05:51:14.347954373 +0800 \#前一個(gè)文件 \+ + + /root/test/new.txt 2012-11-23 05:50:05.772988210 +0800 \#后一個(gè)文件 @@-2, 3+2, 5@@ school is lampbrother +in +beijing \#后一個(gè)文件比前一個(gè)文件多兩行(用+表示)

      利用補(bǔ)丁文件 txt.patch 更新 old.txt 舊文件,實(shí)現(xiàn)此步操作需利用 patch 命令,該命令基本格式如下:

      [root@localhost test]# patch -pn < 補(bǔ)丁文件 \#按照補(bǔ)丁文件進(jìn)行更新

      -pn 選項(xiàng)中,n 為數(shù)字(例如 p1、p2、p3 等),pn 表示按照補(bǔ)丁文件中的路徑,指定更新文件的位置。

      這里對(duì) -pn 選項(xiàng)的使用做一下額外說明。我們知道,補(bǔ)丁文件是要打入舊文件的,但是當(dāng)前所在目錄和補(bǔ)丁文件中記錄的目錄不一定是匹配的,需要 “-pn” 選項(xiàng)來同步兩個(gè)目錄。

      例如,當(dāng)前位于 “/root/test/” 目錄下(要打補(bǔ)丁的舊文件就在當(dāng)前目錄下),補(bǔ)丁文件中記錄的文件目錄為 “/root/test/dd.txt”,如果寫入 “-p1”(在補(bǔ)丁文件目錄中取消一級(jí)目錄),那么補(bǔ)丁文件會(huì)打入 “root/test/root/test/old.txt” 文件中,這顯然是不對(duì)的;如果寫入的是 “-p2”(在補(bǔ)丁文件目錄中取消二級(jí)目錄),補(bǔ)丁文件會(huì)打入 “/root/test/test/old.txt” 文件中,這顯然也不對(duì)。如果寫入的是 “-p3”(在補(bǔ)丁文件目錄中取消三級(jí)目錄),補(bǔ)丁文件會(huì)打入 “/root/test/old.txt” 文件中,old.txt 文件就在這個(gè)目錄下,所以應(yīng)該用 “-p3” 選項(xiàng)。

      如果當(dāng)前所在目錄是 “/root/” 目錄呢?因?yàn)檠a(bǔ)丁文件中記錄的文件目錄為 “/root/test/old.txt”,所以這里就應(yīng)該用 “-p2” 選項(xiàng)(代表取消兩級(jí)目錄),補(bǔ)丁打在當(dāng)前目錄下的 “test/old.txt” 文件上。

      因此,-pn 選項(xiàng)可以這樣理解,即想要在補(bǔ)丁文件中所記錄的目錄中取消幾個(gè) “/”,n 就是幾。去掉目錄的目的是和當(dāng)前所在目錄匹配。

      7.14 Linux源碼包升級(jí)

      現(xiàn)在更新 “old.txt” 文件,命令如下:

      [root@localhost test]# patch -p3 < txt.patch patching file old.txt \#給old.txt文件打補(bǔ)丁 [root@localhost test]# cat old.txt \#查看一下dd.txt文件的內(nèi)容 our school is lampbrother in Beijing \#多出了in Beijing兩行

      可以看到,通過使用補(bǔ)丁文件 txt.patch 對(duì)舊文件進(jìn)行更新,使得舊文件和新文件完全相同。

      通過這個(gè)例子,大家要明白以下兩點(diǎn):

      給舊文件打補(bǔ)丁依賴的不是新文件,而是補(bǔ)丁文件,所以即使新文件被刪除也沒有關(guān)系。

      補(bǔ)丁文件中記錄的目錄和當(dāng)前所在目錄需要通過 “-pn” 選項(xiàng)實(shí)現(xiàn)同步,否則更新可能失敗。

      給apache打入補(bǔ)丁

      本節(jié)仍以 apache 為例,通過從官網(wǎng)上下載的補(bǔ)丁文件 “mod_proxy_ftp_CVE-2008-2939.diff”,更新 httpd-2.2.9 版本的 apache。

      這里使用的補(bǔ)丁文件,修補(bǔ)了 apache 代理 FTP 站點(diǎn)時(shí),模塊空指針引用拒絕服務(wù)攻擊的漏洞(了解即可,不用深究)。

      具體更新步驟如下:

      從 apache 官網(wǎng)上下載補(bǔ)丁文件;

      復(fù)制補(bǔ)丁文件到 apache 源碼包解壓目錄中,執(zhí)行命令如下:

      [root@localhost ~]# cp mod_proxy_ftp_CVE-2008-2939.diff httpd-2.2.9

      給舊 apache 打入補(bǔ)丁,具體執(zhí)行命令如下:

      [root@localhost ~]# cd httpd-2.2.9 \#進(jìn)入apache源碼目錄 [root@localhost httpd-2.2.9]# vi mod_proxy_ftp_CVE-2008-2939.diff \#查看補(bǔ)丁文件 --modules/proxy/mod_proxy_ftp.c (Revision 682869) \+ + + modules/proxy/mod_proxy_ftp.c (Revision 682870) …省略部分輸出… \#查看一下補(bǔ)丁文件中記錄的目錄,以便一會(huì)兒和當(dāng)前所在目錄同步 [root@localhost httpd-2.2.9]# patch - p0 < mod_proxy_ftp_CVE-2008-2939.diff \#打入補(bǔ)丁

      為什么是 “-p0” 呢?因?yàn)楫?dāng)前在 “/root/httpd-2.2.9” 目錄中,但補(bǔ)丁文件中記錄的目錄是 “modules/proxy/mod_proxy_ftp.c”,就在當(dāng)前所在目錄中,因此一個(gè) “/” 都不需要去掉,所以是 “-p0”。

      重新編譯 apache 源碼包,執(zhí)行如下命令:

      [root@localhost httpd-2.2.9]# make

      安裝 apache,執(zhí)行如下命令:

      [root@localhost httpd-2.2.9]# make install

      通過對(duì)比《Linux源碼包安裝和卸載》一節(jié)中安裝源碼包的過程,不難發(fā)現(xiàn),打補(bǔ)丁更新軟件的過程比安裝軟件少了 “./configure” 步驟,且編譯時(shí)也只是編譯變化的位置,編譯速度更快。

      注意,如果未安裝過 httpd-2.2.9,就需要先打入補(bǔ)丁,再依次執(zhí)行 “./configure”、“make”、

      “make install” 命令。

      patch 命令不僅可以給就文件打入補(bǔ)丁,還可以執(zhí)行反操作,即恢復(fù)用補(bǔ)丁文件修改過的源文件,例如:

      [root@localhost httpd-2.2.9]# patch -R < modjDroxy_ftp_CVE-2008-2939.diff -R(大寫)選項(xiàng)表示還原補(bǔ)丁。

      Apache Linux

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:信息化項(xiàng)目管理,實(shí)現(xiàn)企業(yè)數(shù)字化轉(zhuǎn)型的關(guān)鍵
      下一篇:制造業(yè)生產(chǎn)管理跳槽(生產(chǎn)計(jì)劃跳槽方向)
      相關(guān)文章
      亚洲高清日韩精品第一区| 亚洲欧洲尹人香蕉综合| 666精品国产精品亚洲| 亚洲AV综合色一区二区三区| 狠狠综合久久综合88亚洲| 老司机亚洲精品影视www| JLZZJLZZ亚洲乱熟无码| 亚洲午夜精品久久久久久浪潮| 亚洲国产成人精品女人久久久 | 亚洲国产av玩弄放荡人妇 | 国产亚洲精品美女久久久| 中文字幕亚洲综合久久菠萝蜜| 激情97综合亚洲色婷婷五 | 国产亚洲老熟女视频| 中文字幕亚洲激情| 亚洲色偷偷偷鲁综合| 亚洲国产小视频精品久久久三级 | 国产亚洲女在线线精品| 亚洲国产黄在线观看| 国产综合亚洲专区在线| 亚洲国产精品一区二区久久hs| 亚洲av中文无码乱人伦在线r▽| 色播亚洲视频在线观看| 亚洲一级毛片视频| 久久青青成人亚洲精品| 18gay台湾男同亚洲男同| 亚洲三级在线播放| 亚洲AV无码一区二区一二区| 亚洲福利精品电影在线观看| 亚洲日韩在线第一页| 亚洲国产另类久久久精品黑人| 香蕉视频在线观看亚洲| 亚洲色欲或者高潮影院| 最新亚洲精品国偷自产在线| 亚洲成a人无码亚洲成www牛牛| 亚洲高清偷拍一区二区三区 | 一区二区亚洲精品精华液 | xvideos亚洲永久网址| 亚洲日韩精品一区二区三区| 亚洲综合婷婷久久| 亚洲综合一区二区三区四区五区|