簡單的解決方式: Shared object "libintl.so.4" not found 跟 libc.so 函式一樣 也是在安裝某些軟體就會出現(xiàn)錯誤畫面. 問題分析: libintl.so 函式是安裝 /usr/port/devel/gettext/ 程式後取得. 理論上來說 目前版本的相關(guān)函數(shù)是 libintl.so.5 為何還要去讀取舊的 libintl.so.4 版本. 當(dāng)你在安裝gmake時,gmake會去連結(jié)安裝gmake當(dāng)時的libinl.so的版本,是version 4. 也就是 libintl.so.4 當(dāng)你更新過相關(guān)的ports (devel/gettext) 將會用 libintl.so.5 取代 libintl.so.4 除非你能取得先前某些系統(tǒng)保留舊有的 libintl.so.4 否則就會出現(xiàn)安裝失敗狀況. 很可惜的是...有很多程式需要 gettext 函式. 你可以用 cd /usr/ports/ ; make search key="gettext" | more 查詢?yōu)槭颤N要加上more 因為太多怕你看到昏頭... 問題解決: 要解決這個問題 你可以透過重新建立所有與 gettext 相關(guān)的ports程式 # portupgrade -fr gettext 重新建立或重新安裝所有與 gettext相關(guān)連的程式, 若你忘掉了 請參閱 更新ports/升級系統(tǒng) >; portupgrade 軟體更新或是簡單的用偷吃步 把*目前版本*link過去..QQ (版本6..類推)然後就可以順利進(jìn)行程式安裝. 針對某些 ports 不做 CVSup 若 ports 底下的某些分類完全用不到,則可以在 CVSup 時,不做更新,以節(jié)省 網(wǎng)路頻寬與時間。 # vi /usr/sup/refuse ****************************************** ports/french ports/german ports/hebrew ports/hungarian ports/japanese 那麼則上述目錄下的檔案皆不會更新。 如果是想要某些單一的 ports 不做同步,例如想保留舊版不做同步,或新版出現(xiàn) 問題時。 # vi /usr/sup/refuse ****************************************** ports/lang/perl5.8 那麼 ports/lang/perl5.8 這個 ports 不會做 CVSup 同步。這些設(shè)定方法支援萬用字元。 # vi /usr/sup/refuse ****************************************** ports/lang/perl* ports/po* 安裝 ports 出現(xiàn) port is outdated 的錯誤訊息 例如安裝 imap-uw 時,出現(xiàn)以下內(nèi)容: Your installation of the cclient port is outdated. Please delete it before continuing. 表示因為相對應(yīng),且已安裝好的 cclient 這個軟體過於老舊,建議先升級這個軟 體再行安裝 imap-uw。因此只要先升級 cclient 後,再安裝即可。 # cd /usr/ports/mail/cclient/ # make reinstall 或 # make deinstall && make install # cd /usr/ports/mail/imap-uw/ # make install 安裝 ports 出現(xiàn) OpenSSL vulnerabilities 的錯誤訊息 在安裝有些套件時,如果有相依於 OpenSSL 時,且判斷系統(tǒng)目前使用的 OpenSSL 版本有漏洞問題時,會出現(xiàn)如下的訊息: |
Dependency warning: used OpenSSL version contains known vulnerabilities Please update or define either WITH_OPENSSL_BASE or WITH_OPENSSL_PORT 一般建議的解決方法有二種。 第一種:升級系統(tǒng)(需含系統(tǒng)內(nèi)建之 OpenSSL 一并升級),再安裝該套件可以先查詢目前系統(tǒng)所用之 OpenSSL 的版本: openssl version -v 升級系統(tǒng)可叁考 FNP: upgrade core system 或 FNP: upgrade major system。 升級完系統(tǒng)後,再進(jìn)行一次 OpenSSL 版本之確認(rèn)。然後再安裝該套件,這訊息就不會出現(xiàn)了。 第二種:使該套件相依於 ports tree 中的 OpenSSL 這種方法會安裝 ports tree 中新版本的 OpenSSL,然後相依於此新版本的OpenSSL,而不是系統(tǒng)本身內(nèi)建的 OpenSSL。只要安裝套件時,加入 WITH_OPENSSL_PORT 的叁數(shù),即會安裝 ports tree 中的 OpenSSL,并且該套件 也會相依於此。方法如下: make -DWITH_OPENSSL_PORT install這里不建議用叁數(shù) WITH_OPENSSL_BASE,因為這表示安裝套件時,是相依於原本系統(tǒng)中可能有漏洞的 OpenSSL,這樣會導(dǎo)致安全性的問題。 安裝 ports 時,原本應(yīng)該出現(xiàn)的清單選項不見了 這是由於系統(tǒng)會紀(jì)錄曾安裝過 ports 的當(dāng)時所選擇的清單選項,因此有時會因為安裝時出了問題,或是再一次安裝時,就不會出現(xiàn)清單可以選擇。如何讓清單選項重新出現(xiàn)呢? make clean make showconfig # 顯示設(shè)定的內(nèi)容 make rmconfig # 清除設(shè)定的內(nèi)容 make config 之前設(shè)定 ports 的選項預(yù)設(shè)會紀(jì)錄在 /var/db/ports/{ports_name}/options 內(nèi)容中。如要查看之前 python 有選擇的清單選項: cat /var/db/ports/python/options 檢查是否有安裝重覆的 ports/packages 隨著時間的演進(jìn),不同時間安裝的軟體會有不同版本的釋出,而且不同軟體相依的版本號也不同,所以往往會造成同一個軟體安裝過多版本的情形發(fā)生。這里我必須聲明的是,雖然套件名稱相同,可是可能沒辦法上下相容,因此造成有些軟體必須依賴比較舊的版本,而有些軟體必須依賴比較新的版本,如果有這種情形發(fā)生的話,那麼二個版本的存在是正常的。 否則的話,我們會建議移除舊版的套件,將所有相依於此套件改為相依於新版的。也就是說,移除舊版的套件,然後將原本相依於舊版的套件,改為相依於新版的套件。注意,我強調(diào)的是新舊版套件是相容的。因為這種做法有點危險,因此不提供做法,請使用更水階的套件管理工具,如 portupgrade 來完成。檢查是否有安裝重覆的 ports/packages 的方法如下: pkg_info | sort | sed -e 's/-[0-9].*$//' | uniq -c | grep -v '^[[]]*1' 如果有一行是顯示" 3 libtool",則表示目前系統(tǒng)有安裝三種不同版本的 libtool套件。 接下來可以檢查這三種版本是否可以相容: cd /usr/ports/ make search name=libtool 如果發(fā)現(xiàn)分別有三種 ports 來代表這三種不同版本的 libtool,就表示他們彼此不相容,必須保留三者,否則可能會發(fā)生相依問題。假設(shè)如下: /usr/ports/devel/libtool13 /usr/ports/devel/libtool14 /usr/ports/devel/libtool15 反之,如果發(fā)現(xiàn)只有一種 ports 來代表這種不同版本的套件,則表示目前系統(tǒng)安裝的三種版本是相容的,只要修改原本相容於其它二種版本所有的套件,并指向欲保留的那個版本,然後移除其它二種即可。如發(fā)現(xiàn)系統(tǒng)目前有安裝三種不同版本的 gettext: cd /usr/ports/ make search name=gettext 然後檢查的結(jié)果如下: /usr/ports/devel/gettext 則將所有相依於 gettext 舊版本的其它套件都改為相依於新版的 gettext,然後再移除系統(tǒng)中舊版的 gettext 即可。 `make deinstall' 與 `pkg_delete' 有什麼不同 簡單來說,`make deinstall' 會移除該 port,并且不會叁照其相依/相關(guān)的 ports。 `pkg_delete' 在移除該 port 前,會叁照其相依/相關(guān)的 ports,并且 `pkg_delete' 有支援 wild card,如要移除所有 p 開頭的 ports,則: cd /var/db/pkg/ pkg_delete p* 要注意的是,如果使用 `make deinstall',則最好確定系統(tǒng)目前所安裝的版本,與 ports collection 中顯示的版本符合,否則有可能會出現(xiàn)非預(yù)期性錯誤;而 `pkg_delete' 是因為直接刪除系統(tǒng)中所安裝的版本,所以沒有此問題。 因此,換句話說,當(dāng)系統(tǒng)所安裝的版本符合 ports collections 中的版本,則可以使用 `make deinstall' 或 `pkg_delete',否則的話最好用 `pkg_delete'。 安裝 ports 出現(xiàn) local modification time does not match remote 的錯誤訊息 這通常表示你已經(jīng)下載了這個檔案在 /usr/ports/distfiles 的對應(yīng)目錄中,但是它并不是 port collections 所期望下載的。通常的解決方法是在 /usr/ports/distfiles 的對應(yīng)目錄中移除此檔案,再重新下載。 例如是安裝 joe 時出現(xiàn)如下的錯誤訊息: fetch: joe2.8.tar.Z: local modification time does not match remote 則將 joe2.8.tar.Z 於 /usr/ports/distfiles 中移除: cd /usr/ports/editors/joe/ make distclean 最後再重新安裝即可 我有個問題請教 如果我已經(jīng)安裝了一套軟件,比如xorg, 我想把它及其依賴的做成packages,該怎么做呢 ??? make package-recursive 前提是之前沒有安裝其中的包否則會有問題(我覺得這是bug,不過暫時還沒有很好的解決辦法) 在 FreeBSD 上模擬 Linux 的環(huán)境 最新最完整的資料在官方的 Handbook 上。 簡單來說,F(xiàn)reeBSD 核心必須支援,且必須安裝 Linux Runtime Libraries,最後做一些設(shè)定。 如果要執(zhí)行 Linux ELF Binaries,可以先查詢目前 FreeBSD 是否已經(jīng)支援 Linux ELF。 brandelf -l 看是否有 Linux 的字樣,如果沒的話,請回頭檢查是否哪一步驟沒有做到。然後檢查執(zhí)行檔是否為 Linux ELF Binaries。 brandelf execution-binary-filename 如果是 Linux ELF Binaries,則正常執(zhí)行即可。 如果顯示結(jié)果不是 Linux ELF Binaries,但是自己確定是 Linux ELF Binaries 的話,則只要更改一下 ELF 的格式即可。 brandelf -t Linux execution-binary-filename 然後再檢查一次是否已經(jīng)修正為正確的格式。 在 FreeBSD 上安裝 Linux rpm 請確定已經(jīng)成功在 FreeBSD 上模擬 Linux 的環(huán)境,安裝 rpm 的方式如下: rpm --ignoreos --root /compat/linux --dbpath /var/lib/rpm/ -Uvh xxx.rpm |
標(biāo)簽:無錫 合肥 云南 萍鄉(xiāng) 天水 宿州 錫林郭勒盟 克拉瑪依
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《FreeBSD常用命令--ports使用方法講解》,本文關(guān)鍵詞 FreeBSD,常用,命令,--ports,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。