欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    么是 RPM

    RPM 全稱為:Red-Hat Package Manager,即紅帽 Linux 發(fā)行版的軟件包管理器。RPM 的出現(xiàn),提升了 Linux 軟件安裝、升級的便捷性。RPM 遵循 GPL 協(xié)議,除了紅帽 Linux 發(fā)行版,Caldera OpenLinux、SUSE 以及 Turbo Linux 等 Linux 的發(fā)行版也使用 RPM,因此 RPM 是 Linux 軟件包管理的行業(yè)標(biāo)準(zhǔn)。為了使讀者能夠較為深入理解 RPM,我們先介紹軟件的構(gòu)建方法。

    計算機(jī)軟件的軟件是從源代碼構(gòu)建出來的。源代碼是人們以人類可讀的語言書寫的、讓計算機(jī)執(zhí)行任務(wù)的指令。人類可讀的語言格式和規(guī)范,就是編程語言。

    從源代碼制作軟件的過程,稱之為是軟件編譯。從源代碼構(gòu)建成軟件的編譯有兩種方式:

    • 本機(jī)編譯 (Natively Compiled),對應(yīng)編譯型語言。
    • 解釋編譯(Interpreted Compiled),對應(yīng)解釋性語言。

    本機(jī)編譯方式下,代碼可以獨(dú)立編譯成機(jī)器代碼或直接編譯為二進(jìn)制文件可執(zhí)行文件。本機(jī)編譯構(gòu)建的軟件包中,包含編譯環(huán)境下計算機(jī)體系架構(gòu)的特征。例如,使用 64 位(x86_64)AMD 計算機(jī)中編譯的軟件,不能在 Intel 處理器架構(gòu)上運(yùn)行。

    與本機(jī)編譯可以獨(dú)立執(zhí)行相對應(yīng),某些編程語言不能將軟件編譯成計算機(jī)可以直接理解的格式,而需要語言解釋器或語言虛擬機(jī)(如 JVM),我們稱之為解釋編譯。常用的解釋語言有 Byte Compiled(源代碼需要編譯成字節(jié)代碼,然后由語言虛擬機(jī)執(zhí)行,如 Python)和 Raw Interpreted(原始解釋語言完全不需要編譯,它們由解釋器直接執(zhí)行,如 Bash shell)兩種。

    我們常用的 bash shell 和 Python 是解釋型的,這種方式編譯出的程序與硬件架構(gòu)無關(guān),通過這種方式編譯出的 RPM 會被標(biāo)注為 noarch(說明 RPM 包不依賴于特定 linux 發(fā)行版)。

    在介紹了源代碼的編譯方式后,接下來我們通過實(shí)驗(yàn)的方式展現(xiàn)軟件的編譯過程。

    從源代碼構(gòu)建軟件

    在正式開始驗(yàn)證之前,我們需要在 Linux 中安裝編譯工具。

    # yum install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils

    接下來,我們分別介紹本機(jī)編譯和解釋編譯。

    本機(jī)編譯代碼

    在編程語言中,C 語言是本機(jī)編譯。我們查看一個源代碼文件,如清單 1 所示:

    清單 1. C 語言源碼文件
          # cat cello.c
    #include <stdio.h>
    int main(void) {
        printf("Hello World, I'm DavidWei!\n");
        return 0;
    }

    調(diào)用 C 編譯器 gcc 進(jìn)行編譯:

    # gcc -o cello cello.c

    編譯成功后,我們可以執(zhí)行結(jié)果輸出。

    # ./cello

    Hello World, I'm DavidWei!

    為了實(shí)現(xiàn)自動化構(gòu)建代碼,我們添加 Makefile,這是大型軟件開發(fā)中常用的方法。

    首先創(chuàng)建一個 Makefile,如清單 2 所示:

    清單 2. Makefile 文件
    # cat Makefile
    cello:
                  gcc -o cello cello.c
    clean:
                   rm cello

    接下來,通過 make 來完成編譯。

    執(zhí)行 make 會自動編譯源代碼,然后可以成功執(zhí)行,如下圖 1 所示:

    圖 1. 編譯并運(yùn)行代碼

    執(zhí)行 make clean 會刪除編譯結(jié)果,如下圖 2 所示:圖 2. 刪除編譯結(jié)果

    在介紹了本機(jī)編譯后,我們介紹解釋編譯。

    解釋型代碼

    對于用解釋型編程語言編寫的軟件,如果是 Byte Compiled 語言如 Python,就需要一個編譯步驟,把源代碼構(gòu)建成 Python 的語言解釋器(稱為 CPython)的可以執(zhí)行文件。

    我們查看一個 python 的源代碼,如清單 3 所示:

    清單 3. Python 源代碼文件
            # cat pello.py
    #!/usr/bin/env python
    print("Hello World, I'm DavidWei!")

    對源代碼進(jìn)行編譯:

    # python -m compileall pello.py

    Compiling pello.py ...

    編譯成功后運(yùn)行:

    # python pello.pyc

    Hello World, I'm DavidWei!

    我們看到,對源.py 文件進(jìn)行字節(jié)編譯后會生成一個.pyc 文件,這是 python 2.7 字節(jié)編譯的文件類型,這個文件可以使用 python 語言虛擬機(jī)運(yùn)行。

    查看文件類型:

    # file pello.pyc

    pello.pyc: python 2.7 byte-compiled

    和 python 相對應(yīng),無需編譯的解釋性代碼是 Raw Interpreted,如我們?nèi)粘J褂玫?bash shell。

    我們看一個 shell 文件,如清單 4 所示:

    清單 4. Shell 文件
    # cat bello
    #!/bin/bash
    printf "Hello World, I'm DavidWei!\n"

    對于 Raw Interpreted 源碼,我們使文件可執(zhí)行、然后直接運(yùn)行即可,如下圖 3 所示:

    圖 3. 修改權(quán)限運(yùn)行 shell

    在介紹了如何從源碼構(gòu)建軟件包后,接下來我們介紹如何給軟件打補(bǔ)丁。

    給軟件打補(bǔ)丁

    在計算機(jī)軟件中,補(bǔ)丁是用來修復(fù)代碼中的漏洞的。軟件中的補(bǔ)丁表示的是與源代碼之間的不同之處。接下來,我們從原始源代碼創(chuàng)建補(bǔ)丁,然后應(yīng)用補(bǔ)丁。

    創(chuàng)建補(bǔ)丁的第一步是備份原始源代碼,通常是將它拷貝為.orig 文件。我們以 cello.c 為例。

    首先備份 cello.c,然后修改 cello.c 中的內(nèi)容,如下圖 4 所示,我們修改了源代碼中的描述:

    圖 4. 備份并修改源碼

    首先查看兩個源碼文件的不同之處,如下圖 5 所示:

    圖 5. 查看兩個源碼文件的不同

    將兩個源碼的不同之處保存到 cello-output-first-patch.patch 中。

    # diff -Naur cello.c.orig cello.c > cello-output-first-patch.patch

    為了驗(yàn)證打補(bǔ)丁的效果,將 cello.c 文件恢復(fù)為原始源代碼,如下圖 6 所示:

    圖 6. 恢復(fù) cello.c 初始內(nèi)容

    將補(bǔ)丁文件重定向到補(bǔ)丁,給源碼打補(bǔ)丁,如下圖 7 所示。

    圖 7. 給源碼打補(bǔ)丁

    從上圖 cat 命令的輸出中可以看到補(bǔ)丁已成功構(gòu)建并運(yùn)行,如圖 8 所示:

    圖 8. 構(gòu)建源碼并運(yùn)行

    至此,證明為打補(bǔ)丁成功。

    安裝軟件

    一旦我們構(gòu)建了軟件,我們就可以將它放在系統(tǒng)的某個目錄下,以便用戶可以執(zhí)行。為了方便操作,很多時候我們需要將編譯和安裝進(jìn)行合并。

    對于不需要編譯類的解釋型語言,例如 shell,可以使用 install 命令安裝到 linux 中,如下圖 9 所示:

    圖 9. 安裝并執(zhí)行 shell

    對于需要編譯的語言,就需要先編譯再安裝。例如使用 make install。修改 makefile 文件,如下圖 10 所示:

    圖 10. 修改 Makefile

    構(gòu)建并安裝 cello.c 程序,并執(zhí)行驗(yàn)證成功,如下圖 11 所示:

    圖 11. 構(gòu)建并安裝 cello.c

    我們剛展示的是編譯與安裝在相同的環(huán)境下,即可以通過 Makefile 的方式,直接編譯和安裝程序;如果編譯和運(yùn)行是兩個環(huán)境,那么我們就需要對軟件進(jìn)行 RPM 打包。在 RPM 打包之前,需要將源代碼進(jìn)行打包生成 tar.gz 文件。

    源代碼生成 tar.gz 包

    在源碼打包時,需要在每個源代碼版本中包含一個 LICENSE 文件。我們模擬生成遵守 GPLv3 的壓縮包,如下圖 12 所示:

    圖 12. 生成 LICENSE 文件

    將 bello 程序的源碼打包,如下圖 13 所示:

    圖 13. 將 bello 程序的源碼打包

    創(chuàng)建~/rpmbuild/SOURCES 目錄,將.tar.gz 文件移動過去,如下圖 14 所示:

    圖 14. 移動 tar.gz 包

    用相同的方法,我們?yōu)?Pello 和 Cello 的源碼打包,由于方法相同因此不再贅述。

    將源碼打包以后,接下來我們就可以使用 RPM 將其構(gòu)建成 RPM 包。

    RPM 打包

    RPM 文件有兩類:源 RPM(SRPM)和二進(jìn)制 RPM。SRPM 中的有效負(fù)載是 SPEC 文件(描述如何構(gòu)建二進(jìn)制 RPM)。

    查看 SRPM 的目錄結(jié)構(gòu),如下圖 15 所示:

    圖 15. 查看 SRPM 目錄結(jié)構(gòu)

    上圖中 SRPM 五個目錄的作用分別是:

    BUILD構(gòu)建 RPM 包的時,會在此目錄下產(chǎn)生各種%buildroot 目錄。如果構(gòu)建失敗,可以據(jù)此查看目錄日志,進(jìn)行問題診斷。RPMS構(gòu)建成功二進(jìn)制 RPM 的存放目錄。存放在 architecture 的子目錄中。例如:noarch 和 x86_64SOURCES存放源代碼和補(bǔ)丁的目錄。構(gòu)建 RPM 包時,rpmbuild 命令將會從這個目錄查找源代碼。SPECSSPEC 文件存放目錄SRPMS存放 SRPM 的目錄

    在介紹了 SRPM 的目錄結(jié)構(gòu)后,我們詳細(xì)介紹 SPEC 的作用。

    什么是 SPEC 文件?

    SPEC 文件是 rpmbuild 程序用于實(shí)際構(gòu)建 RPM 的方法。SPEC 文件包含如下字段:

    SPEC DirectiveDefinitionName包的名稱,應(yīng)與 SPEC 文件名匹配Version軟件的上游版本號。ReleaseRPM 軟件版本號。初始值通常應(yīng)為 1%{?dist},并在一個新版本構(gòu)建時重置為 1.SummaryRPM 包的簡要說明License正在打包的軟件的許可證。URL該程序的更多信息的完整 URL(通常是打包的軟件的上游項(xiàng)目網(wǎng)站)。Source0上游源代碼的壓縮歸檔的路徑或 URL
    如果需要,可以添加更多的 SourceX 指令,每次遞增數(shù)字,例如:Source1,Source2,Source3,依此類推Patch0應(yīng)用于源代碼的第一個補(bǔ)丁的名稱。
    如果需要,可以添加更多 PatchX 指令,增加每次編號如:Patch1,Patch2,Patch3 等。BuildArch表示 RPM 包的構(gòu)建的計算機(jī)架構(gòu)。如果包不依賴于體系結(jié)構(gòu),即完全用于編寫解釋的編程語言,這應(yīng)該是 BuildArch:noarch。BuildRequires編譯軟件包所需的依賴包列表,以逗號分隔。Requires安裝軟件包時所需的依賴包列表,以逗號分隔。ExcludeArch如果某個軟件無法在特定處理器架構(gòu)下運(yùn)行,在此進(jìn)行指定。

    在運(yùn)維過程中,我們經(jīng)常會查看到一個 RPM 包的 Name、Version、Release。這個字段就是在 SPEC 文件中定義的。

    例如,我們要查詢 Python RPM 包版本,如下圖 16 所示:

    圖 16. 查看 python 版本

    在上圖的輸出中:python 是 Name、2.7.5 是 Version、58.el7 是 Release、x86_64 是 BuildArch。這些信息都是在 SPEC 中定義的。

    接下來,我們介紹 RPM SPEC 文件中使用的語法。

    SPEC DirectiveDefinition%description完整描述了 RPM 中打包的軟件,可以包含多行并分成段落。%prep打包準(zhǔn)備階段執(zhí)行一些命令%build包含構(gòu)建階段執(zhí)行的命令,構(gòu)建完成后便開始后續(xù)安裝。%install包含安裝階段執(zhí)行的命令。%check包含測試階段執(zhí)行的命令。%files需要被打包/安裝的文件列表。%changelogRPM 包變更日志。

    在介紹了 SEPC 的格式和語法后,接下來我們介紹如何書寫 SPEC 并構(gòu)建 RPM 包。

    書寫 SPEC 文件

    在打包新軟件時,可以通過 rpmdev-newspec 工具創(chuàng)建一個新的 SPEC 文件,然后據(jù)此進(jìn)行修改。

    首先,我們通過三個源碼文件生成三個 SPEC,如下圖 17 所示:

    圖 17. 生成 SPEC 文件

    點(diǎn)擊查看大圖


    .SPEC 已經(jīng)生成,如下圖 18 所示:

    圖 18.查看生成的 SPEC 文件

    接下來我們?yōu)槿齻€ SRPM 書寫 SPEC,描述如下:

    Software NameExplanation of examplebello基于 bash 書寫的。不需要構(gòu)建但只需要安裝文件。 如果是預(yù)編譯的二進(jìn)制文件需要打包,這種方法也可以使用,因?yàn)槎M(jìn)制文件也只是一個文件。pello基于 Python 書寫的軟件。用 byte-compiled 的解釋編程語言編寫的軟件,用于演示字節(jié)編譯過程的安裝和安裝生成的預(yù)優(yōu)化文件。cello基于 C 書寫的軟件。用 natively compiled 的編程語言編寫的軟件,演示使用工具的常見構(gòu)建和安裝過程以及編譯本機(jī)代碼。

    由于三個 SPEC 修改的思路類似,因此我們只細(xì)致介紹 bello 的 SPEC 修改步驟。

    生成的 bello.spec 文件內(nèi)容如清單 5 所示:

    清單 5. 自動生成的 bello.spec
            # cat bello.spec
    Name:           bello
    Version:
    Release:        1%{?dist}
    Summary:
    
    License:
    URL:
    Source0:
    
    BuildRequires:
    Requires:
    
    %description
    
    
    %prep
    %setup -q
    
    
    %build
    %configure
    make %{?_smp_mflags}
    
    
    %install
    rm -rf $RPM_BUILD_ROOT
    %make_install
    
    
    %files
    %doc
    
    
    
    %changelog

    修改后的 bello.spec 內(nèi)容如清單 6 所示:

    清單 6. 修改后的 bello.spec
            [root@rpmlab-d710 ~]# cat ~/rpmbuild/SPECS/bello.spec
    Name:           bello
    Version:        0.1
    Release:        1%{?dist}
    Summary:        Hello World example implemented in bash script
    
    License:       GPLv3+
    URL:           https://www.example.com/%{name}
    Source0:       https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz
    
    Requires:      bash
    
    BuildArch:     noarch
    
    %description
    The long-tail description for our Hello World Example implemented in
    bash script of DavidWei.
    
    %prep
    %setup -q
    
    
    %build
    
    
    %install
    
    mkdir -p %{buildroot}%{_bindir}
    
    install -m 0755 %{name} %{buildroot}%{_bindir}/%{name}
    
    %files
    %license LICENSE
    %{_bindir}/%{name}
    
    
    %changelog
    * Tue Jun 29 2019 DavidWei - 0.1-1
    - First bello package
    - Example second item in the changelog for version-release 0.1-1

    在修改完 SEPC 后,我們就可以根據(jù)源代碼和 SPEC 文件構(gòu)建軟件包。

    構(gòu)建二進(jìn)制 RPM 包

    實(shí)際上,我們在構(gòu)建二進(jìn)制 RPM 包時,有兩種構(gòu)建方法:

    • 從源碼構(gòu)建 SRPM,然后再構(gòu)建二進(jìn)制 RPM
    • 直接從源碼構(gòu)建二進(jìn)制 RPM。

    然而,在軟件開發(fā)中,我們通常會采用第一種方法,因?yàn)樗幸韵聝?yōu)勢:

    • 便于保留的 RPM 版本的確切來源(以 Name-Version-Release 格式標(biāo)注)。這對于 debug 非常有用。
    • 需要在不同的處理器硬件平臺上使用 SRPM 構(gòu)建二進(jìn)制 RPM。

    由于篇幅有限,本文只展示從源碼構(gòu)建 SRPM,再從 SRPM 構(gòu)建二進(jìn)制 RPM 的步驟。

    構(gòu)建 Source RPM 和二進(jìn)制 RPM

    下面我們演示如何通過源碼和剛修改的 SPEC 文件構(gòu)建 Source RPM 并在構(gòu)建時指定-bs 參數(shù)(如果使用-bb 參數(shù),則直接生成二進(jìn)制 RPM),以便生成 SRPM,如下圖 19 所示:

    圖 19. 構(gòu)建 SRPM

    首先,我們基于 SRPM 生成二進(jìn)制 RPM。執(zhí)行過程如清單 7 所示:

    清單 7. 由 SRPM 構(gòu)建二進(jìn)制 RPM
            # rpmbuild --rebuild ~/rpmbuild/SRPMS/bello-0.1-1.el7.src.rpm
    Installing /root/rpmbuild/SRPMS/bello-0.1-1.el7.src.rpm
    warning: bogus date in %changelog: Tue Jun 29 2019 DavidWei - 0.1-1
    Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.hNMkOC
    + umask 022
    + cd /root/rpmbuild/BUILD
    + cd /root/rpmbuild/BUILD
    + rm -rf bello-0.1
    + /usr/bin/tar -xf -
    + /usr/bin/gzip -dc /root/rpmbuild/SOURCES/bello-0.1.tar.gz
    + STATUS=0
    + '[' 0 -ne 0 ']'
    + cd bello-0.1
    + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
    + exit 0
    Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.0isn4Y
    + umask 022
    + cd /root/rpmbuild/BUILD
    + cd bello-0.1
    + exit 0
    Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.epoHml
    + umask 022
    + cd /root/rpmbuild/BUILD
    + '[' /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64 '!=' / ']'
    + rm -rf /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64
    ++ dirname /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64
    + mkdir -p /root/rpmbuild/BUILDROOT
    + mkdir /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64
    + cd bello-0.1
    + mkdir -p /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/bin
    + install -m 0755 bello /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/bin/bello
    + /usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /root/rpmbuild/BUILD/bello-0.1
    /usr/lib/rpm/sepdebugcrcfix: Updated 0 CRC32s, 0 CRC32s did match.
    + '[' noarch=noarch ']'
    + case "${QA_CHECK_RPATHS:-}" in
    + /usr/lib/rpm/check-buildroot
    + /usr/lib/rpm/redhat/brp-compress
    + /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
    + /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
    + /usr/lib/rpm/redhat/brp-python-hardlink
    + /usr/lib/rpm/redhat/brp-java-repack-jars
    Processing files: bello-0.1-1.el7.noarch
    Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.hV1l1H
    + umask 022
    + cd /root/rpmbuild/BUILD
    + cd bello-0.1
    + LICENSEDIR=/root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/share/licenses/bello-0.1
    + export LICENSEDIR
    + /usr/bin/mkdir -p /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/share/licenses/bello-0.1
    + cp -pr LICENSE /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/share/licenses/bello-0.1
    + exit 0
    Provides: bello=0.1-1.el7
    Requires(rpmlib): rpmlib(CompressedFileNames) <=3.0.4-1 rpmlib(FileDigests) <=4.6.0-1 rpmlib(PayloadFilesHavePrefix) <=4.0-1
    Requires: /bin/bash
    Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64
    Wrote: /root/rpmbuild/RPMS/noarch/bello-0.1-1.el7.noarch.rpm
    Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.PCJIAr
    + umask 022
    + cd /root/rpmbuild/BUILD
    + cd bello-0.1
    + /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64
    + exit 0
    Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.ift0pO
    + umask 022
    + cd /root/rpmbuild/BUILD
    + rm -rf bello-0.1
    + exit 0

    二進(jìn)制 RPM 構(gòu)建成功后,可以在~/rpmbuild/RPMS/中找到生成的二進(jìn)制 RPM:bello-0.1-1.el7.noarch.rpm,如下圖 20 所示:

    圖 20. 查看生成的二進(jìn)制 RPM

    通過 SRPM 構(gòu)建成二進(jìn)制 RPM 后,源碼會被自動刪除。如果想恢復(fù)源碼,需要安裝 srpm,如下圖 21 所示:

    圖 21. 安裝 SRPM 并查看源代碼

    現(xiàn)在我們檢查生成的二進(jìn)制 RPM 的正確性并進(jìn)行安裝。

    檢查并安裝 RPM 包

    Rpmlint 命令可以檢查二進(jìn)制 RPM、SRPMs 和 SPEC 文件的正確性。

    我們以 bello.spec 為例進(jìn)行檢查。

            # rpmlint bello.spec
    bello.spec: E: specfile-error warning: bogus date in %changelog: Tue Jun 29 2019 DavidWei - 0.1-1
    0 packages and 1 specfiles checked; 1 errors, 0 warnings.

    從 bello.spec 的檢查結(jié)果中,發(fā)現(xiàn)一個 error。具體報錯描述我們需要檢查 srpm。

    # rpmlint ~/rpmbuild/SRPMS/bello-0.1-1.el7.src.rpm
    bello.src: W: invalid-url URL: https://www.example.com/bello HTTP Error 404: Not Found
    bello.src: E: specfile-error warning: bogus date in %changelog: Tue Jun 29 2019 DavidWei - 0.1-1
    1 packages and 0 specfiles checked; 1 errors, 1 warnings.

    從檢查 SRPM 的結(jié)果可以看出,報錯的原因是 URL(https://www.example.com/bello)無法訪問。我們修改 SEPC,將地址設(shè)置為可訪問地址,如下圖 22 所示:

    圖 22. 修改 SPEC 設(shè)置 URL 為可訪問地址

    修改成功后再重新編譯后檢查,重新驗(yàn)證二進(jìn)制 RPM 正確性,error 數(shù)量為 0,如下圖 23 所示:

    圖 23. 驗(yàn)證二進(jìn)制 RPM 的正確性

    最后,安裝編譯好的 rpm 包并運(yùn)行程序進(jìn)行驗(yàn)證,如下圖 24 所示:

    圖 24. 安裝二進(jìn)制 RPM 包并執(zhí)行程序

    我們看到,上圖中執(zhí)行 bello 程序成功,證明 RPM 安裝成功。

    如何在異構(gòu)環(huán)境重新編譯 RPM

    在前文中我們已經(jīng)提到,有的 RPM 包與運(yùn)行環(huán)境有關(guān),有的無關(guān)。如果一個 RPM 依賴于某一個版本的運(yùn)行環(huán)境(linux 版本或處理器架構(gòu)),我們?nèi)绾巫屵@個 RPM 在其他的環(huán)境中運(yùn)行?這涉及到異構(gòu)環(huán)境下的 RPM 重新編譯。

    Mock 是一個用于構(gòu)建 RPM 包的工具(就像 docker 啟動一個 build 的環(huán)境一樣,擺脫對編譯環(huán)境 linux 版本的限制)。它可以為不同的架構(gòu)、Linux 版本構(gòu)建 RPM 軟件包。在 RHEL 系統(tǒng)上使用 Mock,需要啟用"Extra Packages for Enterprise Linux"(EPEL)存儲庫。

    針對 RPM 包,Mock 最常見的用例之一是創(chuàng)建原始的構(gòu)建環(huán)境。通過指定不同的配置文件(/etc/mock 目錄下)即模擬使用不同的構(gòu)建環(huán)境。

    查看 mock 配置文件,如下圖 25 所示:

    圖 25. 查看 mock 配置文件

    我們以 epel-7-x86_64.cfg 為例,查看其中關(guān)于架構(gòu)的描述,如清單 8 所示,可以看到是 x86_64 和紅帽 Linux 發(fā)行版 7 的信息:

    清單 8. 查看 epel-7-x86_64.cfg 配置文件中架構(gòu)信息
            [root@master mock]# cat epel-7-x86_64.cfg  |grep -i arch
    config_opts['target_arch']='x86_64'
    config_opts['legal_host_arches']=('x86_64',)
    mirrorlist=http://mirrorlist.centos.org/?release=7& arch=x86_64& repo=os
    mirrorlist=http://mirrorlist.centos.org/?release=7& arch=x86_64& repo=updates
    mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-7& arch=x86_64
    mirrorlist=http://mirrorlist.centos.org/?release=7& arch=x86_64& repo=extras
    mirrorlist=http://mirrorlist.centos.org/?release=7& arch=x86_64& repo=sclo-rh
    mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=testing-epel7& arch=x86_64
    mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-7& arch=x86_64

    使用 epel-7-x86_64 配置來構(gòu)建 SRPM,如下圖 26 所示:

    圖 26. 使用 epel-7-x86_64 構(gòu)建二進(jìn)制 RPM

    使用 epel-6-x86_64 配置來構(gòu)建 SRPM,如下圖 27 所示:

    圖 27. 使用 epel-6-x86_64 構(gòu)建二進(jìn)制 RPM

    查看構(gòu)建好的二進(jìn)制 rpm:cello-1.0-1.el6.x86_64.rpm,如下圖 28 所示:

    圖 28. 查看構(gòu)建好的二進(jìn)制 RPM

    安裝 cello-1.0-1.el6.x86_64.rpm,如下圖所示:

    圖 29. 安裝構(gòu)建好的二進(jìn)制 RPM

    點(diǎn)擊查看大圖

    查看構(gòu)建好的二進(jìn)制 RPM cello-1.0-1.el7.x86_64.rpm,并進(jìn)行安裝驗(yàn)證,如下圖 30 所示:
    圖 30. 安裝構(gòu)建好的二進(jìn)制 RPM


    至此,在異構(gòu)環(huán)境下重新編譯二進(jìn)制 RPM 成功。

    結(jié)束語

    通過本文,相信您對通過源碼構(gòu)建成 RPM 有了較為深刻的理解。隨著開源理念的不斷普及,越來越多的客戶將業(yè)務(wù)系統(tǒng)從 Windows 遷移到 Linux 上,理解了 Linux 中的 RPM 打包方式,會對以后我們?nèi)粘5墓ぷ饔泻艽蟮膸椭?/p>

    原文:https://www.ibm.com/developerworks/cn/linux/l-lo-rpm-build-package/index.html

    前市面上的一體式水冷散熱器還是以240/360水冷為主,如果只看性能的話當(dāng)然冷排尺寸越大,散熱效果越好,不過旗艦級的360水冷并不能安裝在數(shù)量眾多的MATX機(jī)箱里。NZXT(恩杰)Kraken X63 RGB水冷散熱器是一款280水冷,在保證了散熱效果的同時也能擁有不錯的兼容性,一起來看看吧。

    規(guī)格參數(shù)

    散熱器尺寸:315mm×143mm×30mm

    冷頭尺寸:79mm×79mm×52mm

    水泵速度:800~2800±300 RPM

    風(fēng)扇規(guī)格:AER RGB 2 140mm×2,500~1800RPM±300 RPM

    控制類型:CAM軟件控制

    參考價格:1299元

    從外觀設(shè)計來看,Kraken X63 RGB延續(xù)了NZXT家族化的外觀風(fēng)格,和之前的X62區(qū)別不大,屬于X系列280水冷的第四代產(chǎn)品。與基礎(chǔ)款相比,RGB版本最大的特點(diǎn)就是增加了純白配色,冷排、水管和水冷頭均采用白色涂裝,給那些追求簡約時尚和小清新風(fēng)格的玩家提供了高顏值的新選擇。

    NZXT Kraken X63 RGB的水冷頭配備了X系列標(biāo)志性的“無限鏡”設(shè)計,升級后的無限燈環(huán)相比之前加大10%,擁有更加獨(dú)特酷炫的無限反射RGB燈光效果。并且具備可獨(dú)立定址的RGB通道,通過專用的CAM軟件即可獨(dú)立控制Logo與光環(huán)的燈光效果。同時Logo的方向可以以30°的角度旋轉(zhuǎn)調(diào)節(jié),讓玩家在打造ITX主機(jī)的水冷系統(tǒng)時不用擔(dān)心水冷頭的安裝方向。

    水冷頭采用第七代Asetek水泵,性能強(qiáng)勁,水冷頭底座采用銅底銑底工藝,可以帶來與處理器更好的接觸效果,底座上已經(jīng)預(yù)涂了硅脂涂,用戶拿到手就可以直接安裝。冷頭側(cè)面有兩個接口,一個是特殊定制的X3接口,用于連接SATA電源、RGB信號、風(fēng)扇供電等,另一個是MicroUSB接口,用于連接主板前置USB 2.0接口。值得一提的是,冷頭的HUE 2輸出通道支持ARGB串聯(lián),最多4可以串聯(lián)4根LED燈條或者RGB電纜梳來進(jìn)一步強(qiáng)化機(jī)箱燈效。

    NZXT Kraken X63 RGB使用了尺寸為315mm×143mm×30mm的鋁制水冷排,同樣采用了純白配色,可以搭配2個140mm風(fēng)扇使用,四周采用了包邊設(shè)計。一共有14條冷排水道,水道之間的鰭片采用折片設(shè)計,整體做工比較細(xì)致。水冷管是長度400mm的橡膠管道,管外包裹著細(xì)尼龍編制網(wǎng)套,減少了水管被劃傷的幾率,水冷頭端支持30°旋轉(zhuǎn)微調(diào)膠管方向,防止與其他硬件的碰撞沖突。

    冷排上配備了2把Aer RGB 2 140風(fēng)扇,扇葉周圍框架上有RGB燈環(huán),同樣可以通過CAM軟件控制燈效。風(fēng)扇搭載了FDB液態(tài)軸承,在扇葉邊緣采用了倒角進(jìn)氣口,主打耐用和靜音。風(fēng)扇轉(zhuǎn)速為500~1500RPM(±300RPM),擁有最大91.19 CFM的風(fēng)量表現(xiàn),在轉(zhuǎn)速不變的情況下,最大風(fēng)量上要比Aer RGB 2 120風(fēng)扇好上太多,這使得280水冷的風(fēng)扇能以更低的轉(zhuǎn)速運(yùn)行,相較于240水冷擁有比較明顯的靜音優(yōu)勢。

    扣具方面,NZXT Kraken X63 RGB的平臺兼容性非常不錯,主流以及發(fā)燒平臺基本能做到全覆蓋,玩家可以根據(jù)自己使用的平臺進(jìn)行選擇。另外,現(xiàn)在購買產(chǎn)品的用戶向賣家提供購買憑證以及SN號碼,就能免費(fèi)領(lǐng)取Intel LGA1700主板扣具,準(zhǔn)備升級12代處理器的用戶可以繼續(xù)使用這款水冷。

    為了測試這款水冷的散熱性能,我們將NZXT Kraken X63 RGB安裝在一個i9-12900K搭建的英特爾12代測試平臺,使用AIDA64只勾選FPU壓力測試以獲得最大且穩(wěn)定的處理器發(fā)熱量,進(jìn)行為時20分鐘的考機(jī)溫度測試。在NZXT CAM軟件中提供了靜音、性能、固定和自定義四種散熱模式,不過這只影響日常使用時的風(fēng)扇調(diào)度,CPU滿載情況下的性能是一樣的。

    測試時,我們手動將風(fēng)扇和水泵轉(zhuǎn)速拉到最大,在室溫為23.8℃的辦公室中,考機(jī)20分鐘CPU封裝溫度為90℃,此時CPU功耗在240W左右,其中P核、E核分別穩(wěn)定在4.9GHz和3.7GHz。通過NZXT的CAM控制軟件,可以看到這時候水冷液的溫度為32℃,也是很低的溫度水平,說明積熱基本都被排出去了,滿載狀態(tài)下的散熱及噪聲表現(xiàn)都比較不錯。而在默認(rèn)的靜音模式下,它的靜音效果完全和240水冷拉開了差距,運(yùn)行時幾乎聽不到風(fēng)聲,并且在這個轉(zhuǎn)速下140風(fēng)扇也能輕松吹透冷排,待機(jī)溫度僅為28℃。

    總結(jié):有顏有實(shí)力的冷靜之選

    今年NZXT的水冷相比以前要更加強(qiáng)調(diào)提升外觀視覺效果,比如我們今天測評的KRAKEN X63 RGB就是一款純白配色并且搭載RGB燈光的一體式水冷,顏值方面非常出眾。而作為一款280水冷散熱器,它有著相對360水冷更強(qiáng)的兼容性,同時產(chǎn)品的散熱和靜音表現(xiàn)不俗,在性能測試下能將i9-12900K這樣的旗艦處理器的溫度控制在90℃,如果搭配定位稍低的12代i7、i5處理器使用基本能滿足其散熱需求。同時原廠提供六年質(zhì)保,質(zhì)量方面不用擔(dān)心,有興趣的小伙伴可以了解一下。

    RPM:對RPM格式的軟件包進(jìn)行安裝、查詢、更新、升級、校驗(yàn)、卸載以及生成.rpm格式的軟件包等。

    YUM:能在線下載、安裝、卸載、升級rpm軟件包等任務(wù),并且能夠自動查找并解決rpm包之間的依賴關(guān)系,一次性完成所有具有依賴關(guān)系rpm包的安裝。


    目錄

    一、RPM管理工具

    二、YUM管理工具

    三、總結(jié)

    四、思維導(dǎo)圖

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有