gentoo Portage使用


Portage文件

  配置指令

    Portage使用/usr/share/portage/config/make.globals里的默認配置,所有的Portage配置通過變量處理。

    由於在不同的cpu架構中,各個portage的配置的指令是不一樣的。portage有很多默認的配置文件,作為system profile的一部分。該profile 符號鏈接到/etc/portage/make.profile。Portage的關於profile 和所有profiles上級的配置都定義在make.defaults文件中。

    當想要修改一個變量的時候,不要去修改 /usr/share/portage/config/make.globals 或make.defaults.使用/etc/portage/make.conf,會覆蓋上面的文件。

    也可以定義一個環境變量作為portage的配置,不過我們不建議那樣做。

  Profile-specific信息

    我們已經遇到了/etc/portage/make.profile文件夾。事實上着並不完全是一個文件夾,他符號鏈接到profile。通過在/usr/portage/profiles/ 里的默認的一個profiles ,用戶可以創建在任何地方的profiles 文件並符號鏈接過去。一個profile 包含提供給Portage特定的體系架構信息,如一個軟件包的列表屬於相應的profile的系統,一個軟件包的列表也不為相應的profile工作等。

  用戶特定的配置

    當portage關於軟件安裝的行為需要改變的時候,在/etc/portage/正確設置的文件也需要被改變。強烈推薦使用 /etc/portage/里的文件,不推薦通過改變環境變量去改變行為。

    使用/etc/portage/ 用戶可以創建下列文件:

    • package.mask 列出來Portage 不該安裝的包
    • package.unmask 列出了Portage可以安裝的包
    • package.accept_keywords 列出了Portage可以安裝的包,即使這個包不適用該系統或架構。
    • package.use 列出了針對某個包使用的,而不針對全局的USE flags。

    這些沒必要非是文件,也可能是文件夾,包含了每個包的文件。更多的信息可以輸入man portage查詢

  改變Portage文件和目錄的位置

    上面提到的文件不能保存在其他的地方,Portage會到指定的地方去查找這些配置文件。無論如何,Portage為了各種各樣的目的,使用各種各樣的文件的位置。

    所有的目的都有總所周知的默認位置,但是可以通過修改/etc/portage/make.conf來自己定制。下面將會介紹怎么做。

    本文並不是唯一的參照,可以通過以下命令還獲取幫助:

    user $man portage

    user $man make.conf

 

存儲文件

  Gentoo repository

    默認的repository位置是/usr/portage。他定義在/usr/share/portage/config/repos.conf。如果需要修改這默認的,復制該文件到/etc/portage/repos.conf/gentoo.conf 然后改變location 的值,當通過修改這個值改變了默認位置,不要忘了修改/etc/portage/make.profile的符號鏈接。

    當修改了之后,由於他們不會注意location的改變,所以建議修改/etc/portage/make.conf里的PKGDIRDISTDIR RPMDIR變量,這是因為portage如何處理變量的原因造成的。

  預先構建的二進制文件( prebuilt binaries)

    盡管Portage默認不使用 prebuilt binaries。但他有廣泛的支持。當命令Portage使用prebuilt packages工作,它會在/usr/portage/packages里找prebuilt binaries,該位置定義在PKGDIR 變量中。

  源代碼(Source code)

    應用程序的源代碼默認存儲在 /usr/portage/distfiles中,該位置定義在DISTDIR 中。

  Portage數據庫(Portage database)

    Portage保存系統的狀態(哪些包被安裝了,哪些文件屬於哪個包的......)存儲在/var/db/pkg中。

    Note:不要手動修改這些文件,他會讓Portage變得無所適從。

  Portage緩存

    Portage的緩存(修改時間,virtuals,dependency tree信息等)被存儲在/var/cache/edb。該位置確實是一個緩存:如果沒有運行任何Portage關聯的程序時,用戶可以清理它。

 

構建軟件

  臨時的Portage文件

    Portage 軟件包編譯時使用的臨時空間默認的是/var/tmp/中,它有變量PORTAGE_TMPDIR 定義。

     當修改PORTAGE_TMPDIR 變量時,由於修改之后可能沒通知到系統,所以同樣推薦修改BUILD_PREFIX變量。這是因為portage如何處理變量的原因造成的。

  編譯目錄

    Portage為每個包創建了特定的編譯目錄,定義在 /var/tmp/portage/中,該目錄由變量BUILD_PREFIX 定義的。

  Live文件系統 位置

    默認情況下,Portage將所有的文件安裝到當前文件系統(/)里,但是可以通過修改ROOT 環境變量來改變。在你創建新的編譯鏡像時很有用。

 

日志功能

  Ebuild日志

    Portage可以為每個ebuild創建日志文件,只有在PORT_LOGDIR變量設置的位置為Portage可寫的時候,默認情況下,該變量時沒有被定義的。如果PORT_LOGDIR 變量沒有被定義,那么日志系統中就不會由任何編譯的日志信息存在。你可能會收到新的 elog支持的日志。

    如果PORT_LOGDIR 沒有被定義,elog 在使用中。然后由elog 保存的編譯日志和其他的一些日志就可以保存了。解釋如下:

    Portage對elog的使用提供了細粒度的控制:

      PORTAGE_ELOG_CLASSES:這讓用戶可以決定什么樣的日志可以被記錄下來。可以用空格分隔info, warn, error, log, 和 qa這些組合

        info:記錄由ebuild打印的關於einfo的信息

        warn:記錄由ebuild打印的關於ewarn的信息

        error:記錄由ebuild打印的關於eerror的信息

        log:記錄一些在許多ebuild找到的elog的信息

        qa:記錄由ebuild打印的關於QA Notice的信息

      PORTAGE_ELOG_SYSTEM:這個可以選擇用什么樣的模塊去處理log信息,如果為空,日志不可以記錄。用空格分隔的save, custom, syslog, mail, save_summary, 和mail_summary可以使用。使用elog中必須啟用至少一個模塊。

        save:它會為每個包保存一個日志,放在$PORT_LOGDIR/elog中。如果PORT_LOGDIR 未被定義的話,會放在

        custom:把所有的信息發送到用戶自定義的命令,在 $PORTAGE_ELOG_COMMAND里。后面會討論

        syslog:把所有的消息發送到已安裝的系統日志中。

        mail:發送所有的信息到用戶自定義的郵件服務中,定義在$PORTAGE_ELOG_MAILURI。稍后會討論,該elog 服務特性需要版本>=portage-2.1.1.

        save_summary:跟save功能類似,但它合並了每個信息到$PORT_LOGDIR/elog/summary.log里。如果$PORT_LOGDIR未定義的話,那就放到 /var/log/portage/elog/summary.log里。

        mail_summary:跟mail功能類似,但當emerge 退出時,它會發送所有的信息到一個單獨的郵箱中。

      PORTAGE_ELOG_COMMAND:這只在定制的模塊被啟用的時候,該特性才有用。用戶可以指定一條命令去處理log消息。注意,該命令可以被兩個變量使用:${PACKAGE} 是包名和版本,${LOGFILE}是logfile的絕對路徑。如:

PORTAGE_ELOG_COMMAND="/path/to/logger -p '\${PACKAGE}' -f '\${LOGFILE}'"
Example PORTAGE_ELOG_COMMAND definition

      PORTAGE_ELOG_MAILURI:它包含了一些郵件模塊的設置信息,如:address,user,password,mail server和port number。默認設置是root@localhost localhost。下面是個SMTP 服務的例子,在個特定的端口中,需要username 和password-based 驗證(默認的端口是25)

PORTAGE_ELOG_MAILURI="user@some.domain username:password@smtp.some.domain:995"
Example PORTAGE_ELOG_MAILURI definition

      PORTAGE_ELOG_MAILFROM:允許用戶設置log 郵件的”from“地址(發件人)。默認為Portage,如果沒有被設置的話。

      PORTAGE_ELOG_MAILSUBJECT:允許用戶創建日志郵件的主題,它可以利用兩個變量,${PACKAGE}表示包名和版本,${HOST}表示Portage運行的完整網域名稱。例如:

PORTAGE_ELOG_MAILSUBJECT="package \${PACKAGE} was merged on \${HOST} with some messages"
Example PORTAGE_ELOG_MAILSUBJECT definition

 

 

 

Portage配置

  就像上面提到的,Portage 通過許多定義在 /etc/portage/make.conf的變量或 /etc/portage/的子文件夾來配置的。請參考 make.conf 和portage man pages查找更多信息。

  user $man make.conf

  user $ man portage

Build-specific選項

  配置和編譯器選項

    當Portage 構建應用程序,它會傳送一些參數去編譯和配置腳本:

      CFLAGS和CXXFLAGS

        為c和c++定義所需的編譯flags

      CHOST

        為應用程序配置腳本定義構造主機的信息

      MAKEOPTS

        傳送到make 命令,通常發生在編譯期間,定義了大量的並行特性

      USE 也是經常用在編譯期間和配置期間,已經在之前的章節中詳細解釋。

  Merge選項

    當Portage merge了某一個軟件的新版本,它會從系統中移除舊的廢棄的文件。在unmerge之前Portage會給用戶5秒的延遲,這5秒是定義在CLEAN_DELAY 變量里的。

    可以告訴Portage每次emerge的時候都帶一個具體的選項參數,通過設置EMERGE_DEFAULT_OPTS。由很多經常用到的如--ask--verbose--tree,等等。

 

保護配置文件

  Portage保護位置

    如果文件沒有保存在保護文件夾中,那么portage的軟件的文件可能會被新的版本的軟件文件覆蓋掉。該保護區域定義在CONFIG_PROTECT 變量中,一般配置文件的位置。空格分隔目錄清單。

    當軟件的文件要被覆蓋到安全文件的時候,會有警告提示用戶。

    查找CONFIG_PROTECT 的設置的命令如下:

    user $emerge --info | grep 'CONFIG_PROTECT='

  排除的目錄

    用戶可以用CONFIG_PROTECT_MASK 變量來定義在保護目錄下的子文件夾中不受保護的文件夾。

 

下載選項參數

  Server 的位置

    當請求的信息或數據在系統中是不可用的時候,Portage 會從Internet中檢索它。服務器位置的各種信息和數據通道是由下面的變量定義的:

    GENTOO_MIRRORS:定義了一個包含源代碼(distfile) 服務位置的列表。

    PORTAGE_BINHOST:定義了一個特定服務的位置包含預先構建的包系統。

    第三個設置包括rsync 服務的位置,該服務用來給用戶更新Gentoo的repository。它定義在/etc/portage/repos.conf文件里(如果被定義成文件夾的話,就會在這個文件夾里)

      sync-type:定義了server的類型,默認為rsync

      sync-uri:定義了portage用來更新gentoo repository的特殊的服務

    GENTOO_MIRRORS、 sync-type, 和 sync-uri變量可以由mirrorselect 程序自動設置,當然,首先得先安裝 app-portage/mirrorselect 。安裝完成之后可以查看幫助

    root #mirrorselect --help

    如果環境需要使用代理服務器, http_proxyftp_proxy, 和RSYNC_PROXY 需要被設置。

  獲取的命令

    當portage需要獲取源代碼的時候,它默認的使用wget 方式,它可以由變量FETCHCOMMAND 來改變。

    portage可以繼續下載部分的源代碼,默認使用wget,可以通過RESUMECOMMAND 變量改變。

    確認FETCHCOMMAND 和RESUMECOMMAND 在正確的位置保存源代碼。在這兩個變量里, \${URI} 和 \${DISTDIR} 可以被使用,第一個是源代碼的地址,還有各自下載需要的位置。

    也可以定義特定的協議在FETCHCOMMAND_HTTP,FETCHCOMMAND_FTP,RESUMECOMMAND_HTTP和RESUMECOMMAND_FTP等變量中。

  Rsync設置

    不可能修改由Portage用來更新Gentoo repository的rsync 命令。但可以設置一些相關rsync命令的變量:

      PORTAGE_RSYNC_OPTS:設置一系列在sync中使用的默認變量,空格分開。如果你不知道你在干什么,那么不應該去修改它。注意,某些絕對必需的選擇總是會使用,即使PORTAGE_RSYNC_OPTS 是空的。

      PORTAGE_RSYNC_EXTRA_OPTS:當syncing的時候附加一些選項,每個選項空格分隔:

        --timeout=<number> :rsync 閑置多少秒后鏈接超時,默認為180 。

        --exclude-from=/etc/portage/rsync_excludes:它指向一個文件,文件列出了rsync更新過程中需要忽視的包或者類型。在該例子中,指向/etc/portage/rsync_excludes。

        --quiet:減少屏幕上的輸出

        --verbose:打印出完整的文件列表

        --progress:為每個文件顯示進度

      PORTAGE_RSYNC_RETRIES:定義了rsync 重連服務的次數,默認為3.

      更多參閱命令man rsync.

 

Gentoo的配置

  分支選擇

    通過變量ACCEPT_KEYWORDS可以改變默認的分支,它定義各種架構穩定的分支 

  Portage特性

    FEATURES 變量可以啟用某一特定的portage的特性

 

Portage行為

  資源管理

    使用PORTAGE_NICENESS 變量,用戶可以增加或減少portage 運行的 nice value。PORTAGE_NICENESS 的值被添加到默認的nice value。更多關於nice values,請參考:

    user $man nice

  輸出特性

    NOCOLOR 變量,默認為false。定義了portage是否禁用彩色輸出。

 

使用其中一個分支

  穩定的分支

    ACCEPT_KEYWORDS定義了各式各樣的軟件分支,默認為屬於該系統架構的穩定分支,如amd64。建議堅持穩定的分支。如果穩定不是那么重要,那么可以使用測試分支。

  測試分支

    為了使用更多的最近的軟件,用戶可以切換到測試分支,在具體的架構前面加上~就可以了。測試分支可能會有bug。

ACCEPT_KEYWORDS="~amd64"
/etc/portage/make.confUsing the testing branch

 

混合測試和穩定分支

  package.accept_keywords

    可以讓特殊的包擁有測試版本,而剩下的包都是穩定分支的版本。要這樣做,得在/etc/portage/package.accept_keywords里增加包的類型名稱。該名稱也可以是一個目錄,目錄下的所有包都可以設定。

app-office/gnumeric
/etc/portage/package.accept_keywords Use the testing branch for just the gnumeric application

  測試特定版本

    想要一個特定版本的軟件包,不想Portage 使用該包后面的版本。將版本信息加到package.accept_keywords的位置里。對於版本號,可以使用=,<=, <, > 或 >= 

=app-office/gnumeric-1.2.13
/etc/portage/package.accept_keywords Allow specific version selection

 

Masked的包

  package.unmask

    mask包的信息一般存儲在 /usr/portage/profiles/的package.mask中,如果你想unmask掉,到 /etc/portage/package.unmask里去修改,版本指定符號=,<=, <, > 或 >= 。一般不建議這樣做。

=net-mail/hotwayd-0.8
/etc/portage/package.unmask Unmasking a particular package/version

  package.mask

    跟unmask一致,只是目的是用來mask包。mask之后portage默認就不會去安裝了。

>sys-kernel/gentoo-sources-2.6.8.1
/etc/portage/package.mask Mask gentoo-sources with a version greater than 2.6.8.1

 

dispatch-conf

  dispath-conf是一個合成由portage產生的._cfg0000_<name> 文件. ._cfg0000_<name> 文件的合並工具,當它要復寫受CONFIG_PROTECT變量指定的保護的目錄的時候。使用dispatch-conf,用戶可以更新他們的配置文件以跟蹤最新版本軟件配置的變化。dispatch-conf 存儲了許多不同的配置文件的補丁或RCS修正系統。這意味着,當更新配置文件的時候犯了某個錯誤,管理員可以隨時還原以前的版本文件。

  當使用 dispatch-conf時,用戶可以按原樣要求保持配置文件,使用新的配置,修改當前的配置文件,或者交互的修改他們。dispatch-conf也擁有許多很好的附加特性。

    自動合並配置文件更新,只更新 更新的部分

    自動配置文件合並

  修改 /etc/dispatch-conf.conf,創建archive-dir變量引用的目錄,接着執行dispatch-conf:

  root #dispatch-conf

  當運行后,所有配置文件的改變將會被重新查看,按u表示用新的配置文件,w刪除新的配置,當所有的配置審查過后,或者按q,將會退出。

  更多查閱user $man dispatch-conf

 

etc-update

  etc-update是另一個合並配置文件的工具,並不像dispath-conf那樣簡單易用,也不如它功能強大。但它可以自動合並一些簡單的小的變化。它會對所有的配置文件更新,所以慎重使用。

  root #etc-update

 

quickpkg

  使用quickpkg可以創建已經合並了的包的檔案,可以使用這些檔案作為預先構建的包,運行quickpkg很簡單:只要把包名稱添加到檔案。如歸檔curl, orage, 和procps

  root #quickpkg curl orage procps

  預先構建的包將存儲在 $PKGDIR (/usr/portage/packages/ by default)中,這些包在$PKGDIR/CATEGORY里。

 

使用Gentoo倉庫的一個子集

  排除包和包的類別

    可以有選擇地更新某些類別/包和忽視其他類別/ 包,在 emerge --sync這一步可以通過在rsync排除類別/包。

    定義/etc/portage/make.conf中的PORTAGE_RSYNC_EXTRA_OPTS 變量,可以定義排除的包:

PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"
/etc/portage/make.conf Defining the exclude file
games-*/*
/etc/portage/rsync_excludes Excluding all games

    注意這可能導致依賴問題。如果依賴被排除的包的話。

 

添加非官方ebuild

  定義一個自定義存儲庫

    可以定義Portage使用非官方庫,創建一個新的目錄(如 /usr/local/portage),使用第三方存儲ebuild。使用相同的目錄結構作為官方Gentoo庫!

    root # mkdir -p /usr/local/portage/{metadata,profiles}
    root # chown -R portage:portage /usr/local/portage
    接下來,選擇一個合理的庫的名稱。下一個示例使用“localrepo”作為名稱:
    root #echo 'localrepo' > /usr/local/portage/profiles/repo_name
    然后告訴Portage,該倉庫是主要的倉庫。另一個repository不應該被自動同步。(不是rsync服務器的支持,git鏡像或者其他的倉庫源)
masters = gentoo
auto-sync = false
/usr/local/portage/metadata/layout.conf

    在repository 配置文件中啟用本地系統的倉庫,在/etc/portage/repos.conf文件中。下面需要提醒Portage 哪里可以找到本地的倉庫。

[localrepo]
location = /usr/local/portage
/etc/portage/repos.conf/localrepo.conf

  使用一些覆蓋來工作

    對於一些需要覆蓋工作的超級用戶,需要下載測試的包,或者從其他的源下載一些包, app-portage/layman包帶來了layman工具,可以幫助用戶覆蓋倉庫到最新的日期。

    首先安裝和配置layman ,詳細參考 Overlays User Guide,用 layman -a.增加渴望的倉庫。

    如,啟用hardened-development的覆蓋

    root #layman -a hardened-development

    不管在layman中使用了多少的可用的倉庫,所有的都可以用下面的方法更新:

    root #layman -S

    更多的信息可查閱 man layman

 

沒有Portage管理的軟件

  用自我管理的軟件去使用Portage

    有時用戶需要單獨的自己安裝、配置、管理軟件,而不是Portage自動處理。即使Portage 已經提供了軟件。已知的例子是內核源碼和 nvidia 驅動。也可以告訴Portage在系統中,某個軟件已被手動的安裝了(當計算依賴的時候,把這個軟件可以加進去),該過程叫做injecting ,Portage也支持,在/etc/portage/profile/package.provided文件中。

    例如:告訴Portage gentoo-sources-2.6.11.6已經被手動的安裝了,

sys-kernel/gentoo-sources-2.6.11.6
/etc/portage/profile/package.provided Marking gentoo-sources-2.6.11.6 as manually installed

 

介紹

  對於大多數用戶來說,從linux操作中獲取的信息已經足夠了。但是Portage做的更多.因為一些更激進的開發者或特定的一些場景,許多它的特性需要了解記錄。

  當然,更加的靈活帶來的是巨大的可能情況的清單,不可能把他們所有都記錄下來。相應的,我們聚焦一些更平常的問題。大多數情況下,如果用戶不能很容易的從手冊中找到大多數的特性,Portage提供了

  user $ man portage
  user $ man make.conf
  最后,知道這些高級功能,如果不正確使用,會使調試和故障診斷非常困難。確認打開錯誤提醒。
 
Per-package環境變量
  使用  /etc/portage/env

    默認的,構建包需要用到在/etc/portage/make.conf定義的環境變量。如CFLAGS、MAKEOPTS 或者更多,在一些情況下,可能需要為了某個特定的包定義某個特定的變量。為了這樣做,Portage支持了/etc/portage/env和/etc/portage/package.env。

     /etc/portage/package.env文件包含了一組偏離了環境變量的用途,但是需要定義標識符以便告訴Portage哪些變化了需要被編譯的包,標識符名稱是自由格式。Portage會去/etc/portage/env/IDENTIFIER里尋找變量。

  例子:特定的包使用debugging 

    我們為 media-video/mplayer包啟用debugging。

    首先,在 /etc/portage/env/debug-cflags定義debugging變量,標識是隨便取的,但是要易懂。

CFLAGS="-O2 -ggdb -pipe"
FEATURES="${FEATURES} nostrip"
/etc/portage/env/debug-cflags Specific variables for debugging

    下一步,我們指定 media-video/mplayer包去使用它

media-video/mplayer debug-cflags
/etc/portage/package.env Using debug-cflags for the mplayer package

 

在emerge過程中出現Hooking 

  使用/etc/portage/bashrc以及附屬文件

    當Portage使用ebuild工作,它使用一個bash環境來調用各種構建功能 (如src_preparesrc_configurepkg_postinst, 等.)但Portage也允許用戶設置一個特定的bash環境。

    使用一個特定的bash環境的優勢是,在emerge處理過程的每一步中,它都可以使用hook(鈎子)功能,它可以通過每一次的emerge(通過/etc/portage/bashrc) 或預構建包環境(通過/etc/portage/env)完成。

    在處理過程中使用hook,bash 環境可以監聽EBUILD_PHASE,CATEGORY 變量。基於這些變量的值,可以執行額外的步驟/功能。

  例如:更新數據庫文件

    在這個例子里,我們將使用/etc/portage/bashrc去執行數據應用程序文件去確保他們的數據庫已經更新到系統最新的日期了,在這個例子中,該程序叫做aide(一個入侵檢測工具)和updatedb (和mlocate一起使用),但這些都是例子,不要把這個當成AIDE 的指導手冊。

    為了在例子中使用/etc/portage/bashrc,我們需要在postrm(刪除文件之后)和postinst (安裝文件之后)這些方法中添加一個hook,因為文件系統上的文件已經改變了。

if [ "${EBUILD_PHASE}" == "postinst" ] || [ "${EBUILD_PHASE}" == "postrm" ];
then
  echo ":: Calling aide --update to update its database";
  aide --update;
  echo ":: Calling updatedb to update its database";
  updatedb;
fi
/etc/portage/bashrc Hooking into the postinst and postrm phases

 

 --sync之后執行任務

  使用/etc/portage/postsync.d位置

    目前位置我們已經討論了在ebuild過程中,使用hook。然而,Portage同樣擁有另一個重要的函數:更新Gentoo的倉庫。為了在更新倉庫之后運行任務,放入一個腳本到/etc/portage/postsync.d里,並確認它被標記為可執行。

  示例:運行eix-update

    如果eix-sync不使用在更新樹操作上,它仍然可能出現在emerge --sync(或emerge-webrsync)運行后去更新eix 數據庫,通過放入符號鏈接到/usr/bin/eix和/etc/portage/postsync.d/eix-update

    root #ln -s /usr/bin/eix /etc/portage/postsync.d/eix-update

    NOTE:如果一個不同的名字會被選中,那么它需要一個腳本,該腳本調用/usr/bin/eix-update代替。eix二進制看着它如何被稱為找出哪些函數執行。如果創建一個符號鏈接將指向eix但還不叫做eix-update,它不會正確地運行。

    

重寫配置文件設置

  使用/etc/portage/profile

    默認情況下,gentoo使用的設置包含了一個指向 /etc/portage/make.profile(符號鏈接到正確的配置文件夾)的配置,這些配置文件定義具體設置以及繼承自其他配置文件的設置(通過他們的父文件)。

    通過使用 /etc/portage/profile,用戶可以覆蓋配置文件設置,如包的設置(包被認為是系統設置的一部分),強制使用flags 等。

  例子:nfs-utils添加到系統設置

    當使用一個基於nfs文件系統,作為一個重要的文件系統,需要被標記 net-fs/nfs-utils 為一個系統包,如果管理員想要刪除,Portage會發出嚴重警告。

    要做好這一點,我們將包添加到/etc/portage/profile/packages,前綴

*net-fs/nfs-utils
/etc/portage/profile/packages Marking nfs-utils as a system package

 

應用非標准補丁

  使用epatch_user

    為了用類似的方式管理多個ebuild,ebuild 開發者使用了eclasses 定義常用的功能。eutils.eclass是這些eclasses 其中之一,提供了很有趣的epatch_user功能。

    epatch_user 函數應用在/etc/portage/patches/<category>/<package>[-<version>[-<revision>]]中的源代碼補丁,任何目錄中第一個找到的為准。遺憾的是,並不是所有的ebuild自動調用這個函數,所以把補丁放到該位置並不總是能有用。

    幸運的是,如上所示,用戶可以調用這個函數的hook,例如:准備階段。可以根據需要多次調用的函數,它只會應用補丁。

  示例:將補丁應用到Firefox

     www-client/firefox包是許多在ebuild內部調用epatch_user函數的眾多包之一,所以不需要覆蓋任何特定的東西。

    如果由於某種原因(例如,因為開發人員提供了一個補丁,並要求檢查修復bug報告),修補Firefox是必要的。需要的就是把補丁放在/etc/portage/patches/www-client/firefox(最好使用完整的名稱和版本,補丁不會干擾后面的版本)然后重新編譯Firefox。

 

 

    至此gentoo wiki上的主要文章都翻譯完了,想想剛開始的翻譯的時候,對Gentoo一竅不通,到后來的手動安裝,配置USE,升級內核,軟件系統,然后解決了若干bug。到現在開始已經用於自己的生產環境。想想還是很有趣的一段旅程。我已經將gentoo鎖定為自己的主要的linux戰場。所以我會一如既往的堅持下去。共勉之。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM