<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 21.4 Tarball 的管理與建議 在我們知道了源代碼的相關信息之后,再來要了解的自然就是如何使用具有源代碼的 Tarball 來創建一個屬于自己的軟件啰!從前面幾個小節的說明當中,我們曉得其實 Tarball 的安裝是可以跨平臺的,因為 C 語言的程序碼在各個平臺上面是可以共通的, 只是需要的編譯器可能并不相同而已。例如 Linux 上面用 gcc 而 Windows 上面也有相關的 C 編譯器啊~所以呢,同樣的一組源代碼,既可以在 CentOS Linux 上面編譯,也可以在 SuSE Linux 上面編譯,當然,也可以在大部分的 Unix 平臺上面編譯成功的! 如果萬一沒有編譯成功怎么辦?很簡單啊,通過修改小部分的程序碼 (通常是因為很小部分的異動而已) 就可以進行跨平臺的移植了!也就是說,剛剛我們在 Linux 下面寫的程序“理論上,是可以在 Windows 上面編譯的!”這就是源代碼的好處啦!所以說,如果朋友們想要學習程序語言的話, 鳥哥個人是比較建議學習“具有跨平臺能力的程序語言”,例如 C 就是很不錯的一個! 唉啊!又扯遠了~趕緊拉回來繼續說明我們的 Tarball 啦! ### 21.4.1 使用源代碼管理軟件所需要的基礎軟件 從源代碼的說明我們曉得要制作一個 binary program 需要很多咚咚的呢!這包括下面這些基礎的軟件: * gcc 或 cc 等 C 語言編譯器 (compiler): 沒有編譯器怎么進行編譯的動作?所以 C compiler 是一定要有的。不過 Linux 上面有眾多的編譯器,其中當然以 GNU 的 gcc 是首選的自由軟件編譯器啰!事實上很多在 Linux 平臺上面發展的軟件的源代碼,原本就是以 gcc 為底來設計的呢。 * make 及 autoconfig 等軟件: 一般來說,以 Tarball 方式釋出的軟件當中,為了簡化編譯的流程,通常都是配合前幾個小節提到的 make 這個指令來依據目標文件的相依性而進行編譯。但是我們也知道說 make 需要 makefile 這個文件的規則,那由于不同的系統里面可能具有的基礎軟件環境并不相同, 所以就需要偵測使用者的作業環境,好自行創建一個 makefile 文件。這個自行偵測的小程序也必須要借由 autoconfig 這個相關的軟件來輔助才行。 * 需要 Kernel 提供的 Library 以及相關的 Include 文件: 從前面的源代碼編譯過程,我們曉得函數庫 (library) 的重要性,同時也曉得有 include 文件的存在。很多的軟件在發展的時候都是直接取用系統核心提供的函數庫與 include 文件的,這樣才可以與這個操作系統相容啊!尤其是在“驅動程序方面的模塊 ”,例如網卡、聲卡、USB 等驅動程序在安裝的時候,常常是需要核心提供的相關信息的。在 Red Hat 的系統當中 (包含 Fedora/CentOS 等系列) ,這個核心相關的功能通常都是被包含在 kernel-source 或 kernel-header 這些軟件名稱當中,所以記得要安裝這些軟件喔! 雖然 Tarball 的安裝上面相當的簡單,如同我們前面幾個小節的例子,只要順著開發商提供的 README 與 INSTALL 文件所載明的步驟來進行,安裝是很容易的。但是我們卻還是常常會在 BBS 或者是新聞群組當中發現這些留言:“我在執行某個程序的偵測文件時,他都會告訴我沒有 gcc 這個軟件,這是怎么回事?”還有:“我沒有辦法使用 make 耶!這是什么問題?”呵呵! 這就是沒有安裝上面提到的那些基礎軟件啦! 咦!為什么使用者不安裝這些軟件啊?這是因為目前的 Linux distribution 大多已經偏向于桌面電腦的使用 (非服務器端),他們希望使用者能夠按照廠商自己的希望來安裝相關的軟件即可, 所以通常“默認”是沒有安裝 gcc 或者是 make 等軟件的。所以啦,如果你希望未來可以自行安裝一些以 Tarball 方式釋出的軟件時,記得請自行挑選想要安裝的軟件名稱喔!例如在 CentOS 或者是 Red Hat 當中記得選擇 Development Tools 以及 Kernel Source Development 等相關字眼的軟件群集呢。 那萬一我已經安裝好一部 Linux 主機,但是使用的是默認值所安裝的軟件,所以沒有 make, gcc 等咚咚,該如何是好?呵呵!問題其實不大啦,目前使用最廣泛的 CentOS/Fedora 或者是 Red Hat 大多是以 RPM (下一章會介紹) 來安裝軟件的,所以,你只要拿出當初安裝 Linux 時的原版光盤,然后以下一章介紹的 RPM 來一個一個的加入到你的 Linux 主機里面就好啦!很簡單的啦! 尤其現在又有 yum 這玩意兒,更方便吶! 在 CentOS 當中,如果你已經有網絡可以連上 Internet 的話,那么就可以使用下一章會談到的 yum 啰! 通過 yum 的軟件群組安裝功能,你可以這樣做: * 如果是要安裝 gcc 等軟件發展工具,請使用“ yum groupinstall "Development Tools" ” * 若待安裝的軟件需要圖形接口支持,一般還需要“ yum groupinstall "X Software Development" ” * 若安裝的軟件較舊,可能需要“ yum groupinstall "Legacy Software Development" ” 大概就是這樣,更多的信息請參考下一章的介紹喔。 ### 21.4.2 Tarball 安裝的基本步驟 我們提過以 Tarball 方式釋出的軟件是需要重新編譯可執行的 binary program 的。而 Tarball 是以 tar 這個指令來打包與壓縮的文件,所以啦,當然就需要先將 Tarball 解壓縮,然后到源代碼所在的目錄下進行 makefile 的創建,再以 make 來進行編譯與安裝的動作啊!所以整個安裝的基礎動作大多是這樣的: 1. 取得原始文件:將 tarball 文件在 /usr/local/src 目錄下解壓縮; 2. 取得步驟流程:進入新創建的目錄下面,去查閱 INSTALL 與 README 等相關文件內容 (很重要的步驟!); 3. 相依屬性軟件安裝:根據 INSTALL/README 的內容察看并安裝好一些相依的軟件 (非必要); 4. 創建 makefile:以自動偵測程序 (configure 或 config) 偵測作業環境,并創建 Makefile 這個文件; 5. 編譯:以 make 這個程序并使用該目錄下的 Makefile 做為他的參數配置文件,來進行 make (編譯或其他) 的動作; 6. 安裝:以 make 這個程序,并以 Makefile 這個參數配置文件,依據 install 這個標的 (target) 的指定來安裝到正確的路徑! 注意到上面的第二個步驟,通常在每個軟件在釋出的時候,都會附上 INSTALL 或者是 README 這種文件名的說明文檔,這些說明文檔請“確實詳細的” 閱讀過一遍,通常這些文件會記錄這個軟件的安裝要求、軟件的工作項目、 與軟件的安裝參數設置及技巧等,只要仔細的讀完這些文件,基本上,要安裝好 tarball 的文件,都不會有什么大問題啰。 至于 makefile 在制作出來之后,里頭會有相當多的標的 (target),最常見的就是 install 與 clean 啰!通常“make clean”代表著將目標文件 (object file) 清除掉,“make”則是將源代碼進行編譯而已。 注意喔!編譯完成的可可執行文件與相關的配置文件還在源代碼所在的目錄當中喔!因此,最后要進行“make install”來將編譯完成的所有咚咚都給他安裝到正確的路徑去,這樣就可以使用該軟件啦! OK!我們下面約略提一下大部分的 tarball 軟件之安裝的指令下達方式: 1. ./configure 這個步驟就是在創建 Makefile 這個文件啰!通常程序開發者會寫一支 scripts 來檢查你的 Linux 系統、相關的軟件屬性等等,這個步驟相當的重要, 因為未來你的安裝信息都是這一步驟內完成的!另外,這個步驟的相關信息應該要參考一下該目錄下的 README 或 INSTALL 相關的文件! 2. make clean make 會讀取 Makefile 中關于 clean 的工作。這個步驟不一定會有,但是希望執行一下,因為他可以去除目標文件!因為誰也不確定源代碼里面到底有沒有包含上次編譯過的目標文件 (*.o) 存在,所以當然還是清除一下比較妥當的。 至少等一下新編譯出來的可執行文件我們可以確定是使用自己的機器所編譯完成的嘛! 3. make make 會依據 Makefile 當中的默認工作進行編譯的行為!編譯的工作主要是進行 gcc 來將源代碼編譯成為可以被執行的 object files ,但是這些 object files 通常還需要一些函數庫之類的 link 后,才能產生一個完整的可執行文件!使用 make 就是要將源代碼編譯成為可以被執行的可可執行文件,而這個可可執行文件會放置在目前所在的目錄之下, 尚未被安裝到預定安裝的目錄中; 4. make install 通常這就是最后的安裝步驟了,make 會依據 Makefile 這個文件里面關于 install 的項目,將上一個步驟所編譯完成的數據給他安裝到預定的目錄中,就完成安裝啦! 請注意,上面的步驟是一步一步來進行的,而其中只要一個步驟無法成功,那么后續的步驟就完全沒有辦法進行的! 因此,要確定每一的步驟都是成功的才可以!舉個例子來說,萬一今天你在 ./configure 就不成功了,那么就表示 Makefile 無法被創建起來,要知道,后面的步驟都是根據 Makefile 來進行的,既然無法創建 Makefile,后續的步驟當然無法成功啰! 另外,如果在 make 無法成功的話,那就表示原始文件無法被編譯成可可執行文件,那么 make install 主要是將編譯完成的文件給他放置到文件系統中的,既然都沒有可用的可執行文件了,怎么進行安裝? 所以啰,要每一個步驟都正確無誤才能往下繼續做!此外,如果安裝成功, 并且是安裝在獨立的一個目錄中,例如 /usr/local/packages 這個目錄中好了,那么你就必需手動的將這個軟件的 man page 給他寫入 /etc/man_db.conf 里面去。 ### 21.4.3 一般 Tarball 軟件安裝的建議事項 (如何移除?升級?) 或許你已經發現了也說不定,那就是為什么前一個小節里面, Tarball 要在 /usr/local/src 里面解壓縮呢?基本上,在默認的情況下,原本的 Linux distribution 釋出安裝的軟件大多是在 /usr 里面的,而使用者自行安裝的軟件則建議放置在 /usr/local 里面。這是考慮到管理使用者所安裝軟件的便利性。 怎么說呢?我們曉得幾乎每個軟件都會提供線上說明的服務,那就是 info 與 man 的功能。在默認的情況下, man 會去搜尋 /usr/local/man 里面的說明文檔, 因此,如果我們將軟件安裝在 /usr/local 下面的話,那么自然安裝完成之后, 該軟件的說明文檔就可以被找到了。此外,如果你所管理的主機其實是由多人共同管理的, 或者是如同學校里面,一部主機是由學生管理的,但是學生總會畢業吧? 所以需要進行交接,如果大家都將軟件安裝在 /usr/local 下面,那么管理上不就顯的特別的容易嗎! 所以啰,通常我們會建議大家將自己安裝的軟件放置在 /usr/local 下,至于源代碼 (Tarball)則建議放置在 /usr/local/src (src 為 source 的縮寫)下面啊。 再來,讓我們先來看一看 Linux distribution 默認的安裝軟件的路徑會用到哪些?我們以 apache 這個軟件來說明的話 (apache 是 WWW 服務器軟件,詳細的數據請參考[服務器架設篇](http://linux.vbird.org/linux_server/0360apache.php)。你的系統不見得有裝這個軟件): * /etc/httpd * /usr/lib * /usr/bin * /usr/share/man 我們會發現軟件的內容大致上是擺在 etc, lib, bin, man 等目錄當中,分別代表“配置文件、函數庫、可執行文件、線上說明文檔”。 好了,那么你是以 tarball 來安裝時呢?如果是放在默認的 /usr/local 里面,由于 /usr/local 原本就默認這幾個目錄了,所以你的數據就會被放在: * /usr/local/etc * /usr/local/bin * /usr/local/lib * /usr/local/man 但是如果你每個軟件都選擇在這個默認的路徑下安裝的話, 那么所有的軟件的文件都將放置在這四個目錄當中,因此,如果你都安裝在這個目錄下的話, 那么未來再想要升級或移除的時候,就會比較難以追查文件的來源啰! 而如果你在安裝的時候選擇的是單獨的目錄,例如我將 apache 安裝在 /usr/local/apache 當中,那么你的文件目錄就會變成: * /usr/local/apache/etc * /usr/local/apache/bin * /usr/local/apache/lib * /usr/local/apache/man 呵呵!單一軟件的文件都在同一個目錄之下,那么要移除該軟件就簡單的多了! 只要將該目錄移除即可視為該軟件已經被移除啰!以上面為例,我想要移除 apache 只要下達“rm -rf /usr/local/apache” 就算移除這個軟件啦!當然啰,實際安裝的時候還是得視該軟件的 Makefile 里頭的 install 信息才能知道到底他的安裝情況為何的。因為例如 sendmail 的安裝就很麻煩...... 這個方式雖然有利于軟件的移除,但不曉得你有沒有發現,我們在執行某些指令的時候,與該指令是否在 PATH 這個環境變量所記錄的路徑有關,以上面為例,我的 /usr/local/apache/bin 肯定是不在 PATH 里面的,所以執行 apache 的指令就得要利用絕對路徑了,否則就得將這個 /usr/local/apache/bin 加入 PATH 里面。另外,那個 /usr/local/apache/man 也需要加入 man page 搜尋的路徑當中啊! 除此之外, Tarball 在升級的時候也是挺困擾的,怎么說呢?我們還是以 apache 來說明好了。WWW 服務器為了考慮互動性,所以通常會將 PHP+MySQL+Apache 一起安裝起來 (詳細的信息請參考服務器架設篇) ,果真如此的話,那么每個軟件在安裝的時候“都有一定的順序與程序!” 因為他們三者之間具有相關性,所以安裝時必需要三者同時考慮到他們的函數庫與相關的編譯參數。 假設今天我只要升級 PHP 呢?有的時候因為只有涉及動態函數庫的升級,那么我只要升級 PHP 即可!其他的部分或許影響不大。但是如果今天 PHP 需要重新編譯的模塊比較多,那么可能會連帶的,連 Apache 這個程序也需要重新編譯過才行!真是有點給他頭痛的!沒辦法啦!使用 tarball 確實有他的優點啦,但是在這方面,確實也有他一定的傷腦筋程度。 由于 Tarball 在升級與安裝上面具有這些特色,亦即 Tarball 在反安裝上面具有比較高的難度 (如果你沒有好好規劃的話~),所以,為了方便 Tarball 的管理,通常鳥哥會這樣建議使用者: 1. 最好將 tarball 的原始數據解壓縮到 /usr/local/src 當中; 2. 安裝時,最好安裝到 /usr/local 這個默認路徑下; 3. 考慮未來的反安裝步驟,最好可以將每個軟件單獨的安裝在 /usr/local 下面; 4. 為安裝到單獨目錄的軟件之 man page 加入 man path 搜尋: 如果你安裝的軟件放置到 /usr/local/software/ ,那么 man page 搜尋的設置中,可能就得要在 /etc/man_db.conf 內的 40~50 行左右處,寫入如下的一行: &gt; MANPATH_MAP /usr/local/software/bin /usr/local/software/man 這樣才可以使用 man 來查詢該軟件的線上文件啰! ![鳥哥的圖示](https://box.kancloud.cn/2016-05-13_5735736501917.gif "鳥哥的圖示") **Tips** 時至今日,老實說,真的不太需要有 tarball 的安裝了!CentOS/Fedora 有個 RPM 補遺計劃,就是俗稱的 EPEL 計劃,相關網址說明如下: [https://fedoraproject.org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL)~一般學界會用到的軟件都在里頭~ 除非你要用的軟件是專屬軟件 (要錢的) 或者是比較冷門的軟件,否則都有好心的網友幫我們打包好了啦! ^_^ ### 21.4.4 一個簡單的范例、利用 ntp 來示范 讀萬卷書不如行萬里路啊!所以當然我們就來給他測試看看,看你是否真的了解了如何利用 Tarball 來安裝軟件呢?我們利用時間服務器 (network time protocol) ntp 這個軟件來測試安裝看看。先請到 [http://www.ntp.org/downloads.html](http://www.ntp.org/downloads.html) 這個目錄去下載文件,請下載最新版本的文件即可。或者直接到鳥哥的網站下載 2015/06 公告釋出的穩定版本: > [http://linux.vbird.org/linux_basic/0520source/ntp-4.2.8p3.tar.gz](http://linux.vbird.org/linux_basic/0520source/ntp-4.2.8p3.tar.gz) 假設我對這個軟件的要求是這樣的: * 假設 ntp-4.*.*.tar.gz 這個文件放置在 /root 這個目錄下; * 源代碼請解開在 /usr/local/src 下面; * 我要安裝到 /usr/local/ntp 這個目錄中; 那么你可以依照下面的步驟來安裝測試看看 (如果可以的話,請你不要參考下面的文件數據, 先自行安裝過一遍這個軟件,然后再來對照一下鳥哥的步驟喔!)。 * 解壓縮下載的 tarball ,并參閱 README/INSTALL 文件 ``` [root@study ~]# cd /usr/local/src &lt;==切換目錄 [root@study src]# tar -zxvf /root/ntp-4.2.8p3.tar.gz &lt;==解壓縮到此目錄 ntp-4.2.8p3/ &lt;==會創建這個目錄喔! ntp-4.2.8p3/CommitLog ....(下面省略).... [root@study src]# cd ntp-4.2.8p3 [root@study ntp-4.2.8p3]# vi INSTALL &lt;==記得 README 也要看一下! # 特別看一下 28 行到 54 行之間的安裝簡介!可以了解如何安裝的流程喔! ``` * 檢查 configure 支持參數,并實際創建 makefile 規則檔 ``` [root@study ntp*]# ./configure --help &#124; more &lt;==查詢可用的參數有哪些 --prefix=PREFIX install architecture-independent files in PREFIX --enable-all-clocks + include all suitable non-PARSE clocks: --enable-parse-clocks - include all suitable PARSE clocks: # 上面列出的是比較重要的,或者是你可能需要的參數功能! [root@study ntp*]# ./configure --prefix=/usr/local/ntp \ &gt; --enable-all-clocks --enable-parse-clocks &lt;==開始創建makefile checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes ....(中間省略).... checking for gcc... gcc &lt;==也有找到 gcc 編譯器了! ....(中間省略).... config.status: creating Makefile &lt;==現在知道這個重要性了吧? config.status: creating config.h config.status: creating evconfig-private.h config.status: executing depfiles commands config.status: executing libtool commands ``` 一般來說 configure 設置參數較重要的就是那個 --prefix=/path 了,--prefix 后面接的路徑就是“這個軟件未來要安裝到那個目錄去?”如果你沒有指定 --prefix=/path 這個參數,通常默認參數就是 /usr/local 至于其他的參數意義就得要參考 ./configure --help 了! 這個動作完成之后會產生 makefile 或 Makefile 這個文件。當然啦,這個偵測檢查的過程會顯示在屏幕上, 特別留意關于 gcc 的檢查,還有最重要的是最后需要成功的創建起 Makefile 才行! * 最后開始編譯與安裝嚕! ``` [root@study ntp*]# make clean; make [root@study ntp*]# make check [root@study ntp*]# make install # 將數據給他安裝在 /usr/local/ntp 下面 ``` 整個動作就這么簡單,你完成了嗎?完成之后到 /usr/local/ntp 你發現了什么? ### 21.4.5 利用 patch 更新源代碼 我們在本章一開始介紹了[為何需要進行軟件的升級](../Text/index.html#intro_howto),這是很重要的喔!那假如我是以 Tarball 來進行某個軟件的安裝,那么是否當我要升級這個軟件時,就得要下載這個軟件的完整全新的 Tarball 呢?舉個例子來說,鳥哥的討論區 [http://phorum.vbird.org](http://phorum.vbird.org/) 這個網址,這個討論區是以 [phpBB](http://www.phpbb.com/) 這個軟件來架設的,而鳥哥的討論區版本為 3.1.4 ,目前 (2015/09) 最新釋出的版本則是 phpbb 3.1.5 。那我是否需要下載全新的 phpbb3.1.5.tar.gz 這個文件來更新原本的舊程序呢? 事實上,當我們發現一些軟件的漏洞,通常是某一段程序碼寫的不好所致。因此, 所謂的“更新源代碼”常常是只有更改部分文件的小部分內容而已。既然如此的話, 那么我們是否可以就那些被更動的文件來進行修改就可以咯?也就是說, 舊版本到新版本間沒有更動過的文件就不要理他,僅將有修訂過的文件部分來處理即可。 這有什么好處呢?首先,沒有更動過的文件的目標文件 (object file) 根本就不需要重新編譯,而且有更動過的文件又可以利用 make 來自動 update (更新),如此一來,我們原先的設置 (makefile 文件里面的規則) 將不需要重新改寫或偵測!可以節省很多寶貴的時間呢 (例如后續章節會提到的核心的編譯!) 從上面的說明當中,我們可以發現,如果可以將舊版的源代碼數據改寫成新版的版本, 那么就能直接編譯了,而不需要將全部的新版 Tarball 重新下載一次呢!可以節省帶寬與時間說!那么如何改寫源代碼? 難道要我們一個文件一個文件去參考然后修訂嗎?當然沒有這么沒人性! 我們在[第十一章、正則表達式](../Text/index.html)的時候有提到一個比對文件的指令,那就是 [diff](../Text/index.html#diff),這個指令可以將“兩個文件之間的差異性列出來”呢!那我們也知道新舊版本的文件之間, 其實只有修改一些程序碼而已,那么我們可以通過 diff 比對出新舊版本之間的文字差異,然后再以相關的指令來將舊版的文件更新嗎? 呵呵!當然可以啦!那就是 [patch](../Text/index.html#patch) 這個指令啦!很多的軟件開發商在更新了源代碼之后,幾乎都會釋出所謂的 patch file,也就是直接將源代碼 update 而已的一個方式喔!我們下面以一個簡單的范例來說明給你了解喔! 關于 diff 與 patch 的基本用法我們在第十一章都談過了,所以這里不再就這兩個指令的語法進行介紹, 請回去參閱該章的內容。這里我們來舉個案例解釋一下好了。假設我們剛剛計算三角函數的程序 (main) 歷經多次改版, 0.1 版僅會簡單的輸出, 0.2 版的輸出就會含有角度值,因此這兩個版本的內容不相同。如下所示,兩個文件的意義為: * [http://linux.vbird.org/linux_basic/0520source/main-0.1.tgz](http://linux.vbird.org/linux_basic/0520source/main-0.1.tgz) :main 的 0.1 版; * [http://linux.vbird.org/linux_basic/0520source/main_0.1_to_0.2.patch](http://linux.vbird.org/linux_basic/0520source/main_0.1_to_0.2.patch) :main 由 0.1 升級到 0.2 的 patch file; 請您先下載這兩個文件,并且解壓縮到你的 /root 下面。你會發現系統產生一個名為 main-0.1 的目錄。 該目錄內含有五個文件,就是剛剛的程序加上一個 Makefile 的規則文件。你可以到該目錄下去看看 Makefile 的內容, 在這一版當中含有 main 與 clean 兩個標的功能而已。至于 0.2 版則加入了 install 與 uninstall 的規則設置。 接下來,請看一下我們的作法啰: * 測試舊版程序的功能 ``` [root@study ~]# tar -zxvf main-0.1.tgz [root@study ~]# cd main-0.1 [root@study main-0.1]# make clean main [root@study main-0.1]# ./main version 0.1 Please input your name: VBird Please enter the degree angle (ex&gt; 90): 45 Hi, Dear VBird, nice to meet you. The Sin is: 0.71 The Cos is: 0.71 ``` 與之前的結果非常類似,只是鳥哥將 Makefile 直接給您了!但如果你下達 make install 時,系統會告知沒有 install 的 target 啊!而且版本是 0.1 也告知了。那么如何更新到 0.2 版呢?通過這個 patch 文件吧!這個文件的內容有點像這樣: * 查閱 patch file 內容 ``` [root@study main-0.1]# vim ~/main_0.1_to_0.2.patch diff -Naur main-0.1/cos_value.c main-0.2/cos_value.c --- main-0.1/cos_value.c 2015-09-04 14:46:59.200444001 +0800 +++ main-0.2/cos_value.c 2015-09-04 14:47:10.215444000 +0800 @@ -7,5 +7,5 @@ { float value; ....(下面省略).... ``` 上面表格內有個底線的部分,那代表使用 diff 去比較時,被比較的兩個文件所在路徑,這個路徑非常的重要喔! 因為 patch 的基本語法如下: > patch -p數字 &lt; patch_file 特別留意那個“ -p數字”,那是與 patch_file 里面列出的文件名有關的信息。假如在 patch_file 第一行寫的是這樣: > *** /home/guest/example/expatch.old 那么當我下達“ patch -p0 &lt; patch_file ”時,則更新的文件是“ /home/guest/example/expatch.old ”,如果“ patch -p1 &lt; patch_file”,則更新的文件為“home/guest/example/expatch.old”,如果“patch -p4 &lt; patch_file”則更新“expatch.old”,也就是說, -pxx 那個 xx 代表“拿掉幾個斜線(/)”的意思!這樣可以理解了嗎? 好了,根據剛剛上頭的數據,我們可以發現比較的文件是在 main-0.1/xxx 與 main-0.2/xxx , 所以說,如果你是在 main-0.1 下面,并且想要處理更新時,就得要拿掉一個目錄 (因為并沒有 main-0.2 的目錄存在, 我們是在當前的目錄進行更新的!),因此使用的是 -p1 才對喔!所以: * 更新源代碼,并且重新編譯程序! ``` [root@study main-0.1]# patch -p1 &lt; ../main_0.1_to_0.2.patch patching file cos_value.c patching file main.c patching file Makefile patching file sin_value.c # 請注意,鳥哥目前所在目錄是在 main-0.1 下面喔!注意與 patch 文件的相對路徑! # 雖然有五個文件,但其實只有四個文件有修改過喔!上面顯示有改過的文件! [root@study main-0.1]# make clean main [root@study main-0.1]# ./main version 0.2 Please input your name: VBird Please enter the degree angle (ex&gt; 90): 45 Hi, Dear VBird, nice to meet you. The sin(45.000000) is: 0.71 The cos(45.000000) is: 0.71 # 你可以發現,輸出的結果中版本變了,輸出信息多了括號 () 喔! [root@study main-0.1]# make install &lt;==將他安裝到 /usr/local/bin 給大家用 cp -a main /usr/local/bin [root@study main-0.1]# main &lt;==直接輸入指令可執行! [root@study main-0.1]# make uninstall &lt;==移除此軟件! rm -f /usr/local/bin/main ``` 很有趣的練習吧!所以你只要下載 patch file 就能夠對你的軟件源代碼更新了!只不過更新了源代碼并非軟件就更新!你還是得要將該軟件進行編譯后,才會是最終正確的軟件喔! 因為 patch 的功能主要僅只是更新源代碼文件而已!切記切記!此外,如果你 patch 錯誤呢?沒關系的!我們的 patch 是可以還原的啊!通過“ patch -R &lt; ../main_0.1_to_0.2.patch ”就可以還原啦!很有趣吧! 例題:如果我有一個很舊版的軟件,這個軟件已經更新到很新的版本,例如核心,那么我可以使用 patch file 來更新嗎?答:這個問題挺有趣的,首先,你必須要確定舊版本與新版本之間“確實有釋出 patch file ”才行,以 kernel 2.2.xx 及 2.4.xx 來說,這兩者基本上的架構已經不同了,所以兩者間是無法以 patch file 來更新的。不過, 2.4.xx 與 2.4.yy 就可以更新了。不過,因為 kernel 每次推出的 patch 文件都僅針對前一個版本而已,所以假設要由 kernel 2.4.20 升級到 2.4.26 ,就必須要使用 patch 2.4.21, 2.4.22, 2.4.23, 2.4.24, 2.4.25, 2.4.26 六個文件來“**依序更新**”才行喔!當然,如果有朋友幫你比對過 2.4.20 與 2.4.26 ,那你自然就可以使用該 patch file 來直接一次更新啰!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看