當前位置: 首頁>>技術教程>>正文


在Linux上創建軟件包存儲庫:Fedora和Debian

, ,

介紹

這篇文章是我們邏輯上的延續PXE文章,因為在閱讀本文之後,您將能夠進行網絡啟動並實際安裝您選擇的發行版。但是創建您自己的存儲庫還有其他用途。例如,帶寬。如果您管理網絡,並且所有係統(或某些係統)都在運行相同的分發,則隻需要同步與附近的鏡像一起使用,並為您自己更新。接下來,也許您有一些自己創建的軟件包,發行版不會在主樹中接受,但是用戶發現它們很有用。獲取域名,設置網絡服務器,然後就可以開始了。在這裏,我們將不詳細介紹Web服務器的設置,僅介紹基本的安裝任務以及用於Fedora或Debian係統的存儲庫的基本設置。因此,期望您具有必要的硬件(服務器和必要的網絡設備,具體取決於情況)以及有關Linux和Web服務器的一些知識。所以,讓我們開始吧。

注意:本文來自我們先前的域名linuxcareer.com。

在Fedora係統上創建存儲庫

安裝工具

Fedora有一個名為createrepo這簡化了手頭的任務。因此,我們需要安裝的隻是httpd作為網絡服務器:

 # yum install createrepo httpd 

設置存儲庫

現在,設置好您的Web服務器之後,我們將假定根目錄為ar /var /www。我們必須以有組織的方式創建必要的目錄(如有必要,可以隨意調整以適應口味,或僅遵循官方布局):

 
 # cd /var/www/html
 # mkdir -p fedora/15/x86_64/base
 # mkdir fedora/15/x86_64/updates

現在就這樣。我們要做的就是將rsync到創建的文件夾,並確保我們有足夠的可用空間:

 # rsync -avrt rsync://ftp.heanet.ie/pub/fedora/linux/releases/15/Everything\
/x86_64/os/Packages/ /var/www/html/fedora/15/x86_64/base

現在對基本文件夾使用createrepo:

 # createrepo /var/www/html/fedora/15/x86_64/base

這是強製性的,因為它將在使用存儲庫時創建yum所需的repodata目錄。現在,讓我們重複以上相同的步驟,但是這次我們將獲取更新:

 # rsync -avrt rsync://ftp.heanet.ie/pub/fedora/linux/\
updates/15/x86_64/ /var/www/html/fedora/15/x86_64/updates

最後,我們建議您檢查httpd是否設置為在啟動時啟動,並且還使用cron定期獲取更新:

 # systemctl enable httpd.service
 # crontab -e

請記住,要添加的rsync命令是第二個,與更新有關的命令,並且systemctl僅在Fedora 15或更高版本上可用。在較舊的Fedora係統上使用ntsysv或chkconfig。

客戶端設置

您必須告訴將從服務器上獲取更新的計算機在哪裏找到它們,因此我們首先創建.repo文件:

# this will be base-lan.repo
[base-lan]
name=Fedora $releasever - $basearch
failovermethod=priority
baseurl=http://192.168.1.2/fedora/$releasever/$basearch/base
enabled=1
# Make sure you disable the official .repo files with enabled=0
gpgcheck=0

# this will be updates-lan.repo
[updates-lan]
name=Fedora $releasever - $basearch - Updates
failovermethod=priority
baseurl=http://192.168.1.2/fedora/$releasever/$basearch/updates
gpgcheck=0

現在,隻要做一個

 # yum update

然後您就可以出發了。

包裹簽收

正如我們的一位讀者所指出的,在安裝軟件包時,應該意識到安全問題。軟件可能會從受感染的服務器下載,並且可能包含惡意可執行文件。 Yum(以及apt,zypper和其他程序包管理係統)通過使用GPG密鑰克服了此問題。我們討論了鏡像Fedora存儲庫。這些軟件包已經簽名,可以在/etc /pki /rpm-gpg中找到密鑰。如果您在啟用本地存儲庫之前曾經使用Fedora官方存儲庫作為客戶端,則該目錄將已經包含必要的密鑰。如果沒有,可以從以下位置下載密鑰getfedora.org/keys/。現在,我們必須更改.repo文件以啟用gpgcheck並告訴yum鍵在哪裏。

# These are the only lines that need to be changed
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora

如果您使用的是本地自定義軟件包存儲庫,則yum會抱怨您的自定義軟件包未簽名。如果您是鏡像/存儲庫維護者並且僅向組織提供軟件包,則可以使用yum標誌–nogpgcheck,或者以安全的方式對自定義軟件包進行簽名。這是因為保存自定義/本地存儲庫的服務器也可能受到威脅。因此,您將必須在服務器上創建GPG密鑰,並使用rpm簽名自定義程序包:

$ gpg --gen-key
$ gpg --list-sigs

Create RPM package gpg key

如您所見,在我們的案例中,USERID是“ Linux Career此電子郵件地址已受到防止垃圾郵件機器人的保護。您需要啟用JavaScript才能查看它。 的document.getElementById( ‘cloak47b718fbecf76a36cae157df5a7ba0c7’).innerHTML=”; VAR前綴= ‘ma’+’il’+’to’; VAR路徑= ‘hr’+’ef’+’=’; VAR addy47b718fbecf76a36cae157df5a7ba0c7 = ‘user’+’@’; addy47b718fbecf76a36cae157df5a7ba0c7 = addy47b718fbecf76a36cae157df5a7ba0c7 + ‘linuxcareer’+’.’+’com’; VAR addy_text47b718fbecf76a36cae157df5a7ba0c7 = ‘user’+’@’+’linuxcareer’+’.’+’com’;document.getElementById(‘cloak47b718fbecf76a36cae157df5a7ba0c7’).innerHTML+=” + addy_text47b718fbecf76a36cae157df5a7ba0c7 +”;>“。現在公開密鑰:

 $ gpg --armor --export "USERID" > my.key.file.asc
 $ gpg --keyserver pgp.mit.edu --send-key "USERID"

當然,您的USERID將有所不同,因此請相應地更改信息。請注意,在我們對其進行測試的Fedora 16上,可執行文件名為gpg2而不是gpg。

我們隻需要在將對軟件包進行簽名的用戶的主目錄中創建一個.rpmmacros文件,然後在其中放置以下內容:

%_signature gpg
%_gpg_name USERID
%_gpgbin /usr/bin/gpg2

現在已經完成所有設置,對軟件包進行簽名的命令將是

 $ rpm --addsign name_of_package.rpm

現在,從您的自定義存儲庫下載的客戶端將使用’rpm –import $ key’,以便能夠下載那些自定義軟件包。

在Debian係統上創建存儲庫

正在安裝

由於Debian的存儲庫結構比較複雜,因此您會發現它在服務器端需要更多的工作,而在客戶端卻需要較少的工作。在任何時候,都會分為三個部分:穩定,測試和不穩定(不包括實驗性的),每個部分都包含三個組件,具體取決於軟件包的許可方式:主要,貢獻和非自由。您要決定要映射的發行版的哪個部分,這是您的決定,但我們有必要警告您:Debian提供的軟件包要比Fedora多得多,因此磁盤空間需求將大大增加。您可以使用很多工具來使用自己的自定義軟件包創建自定義存儲庫,但我們暫時仍將使用官方軟件包。因此,我們將返回有關PXE文章的設置,並為安裝創建本地存儲庫。我們將需要一個網絡服務器,因此讓我們安裝它:

 # aptitude install apache2

在繼續之前,請確保已配置並啟動了Apache。

服務器設置

就像在Fedora中一樣,默認的根目錄是/var /www,因此讓我們在其中創建一個debian目錄:

 # mkdir /var/www/debian

Debian人士推薦ftpsync,這是perl腳本的集合,旨在幫助您將所需的內容存儲到本地鏡像中。特別令人感興趣的是--exclude選項,因為您不想獲取Debian歸檔文件的所有內容(僅amd64,僅main和contrib,僅壓縮,無CD等)。如果要創建安裝後使用的存儲庫,隻需將/etc/apt/sources.list指向包含軟件包的目錄(您已經在其中有可用的模型)就可以了。例如:

 deb http://192.168.1.2/debian squeeze main contrib

但是,讓我們詳細了解如果您不喜歡使用ftpsync,則需要下載什麽。 Debian(以及Ubuntu,可能還有其他Debian-derivatives)有一個名為apt-utils,其中包括apt-ftparchive我們將用於自定義存儲庫的程序。所以…

 # aptitude install apt-utils

將在您的係統上安裝必要的工具。我們已經在網絡服務器上創建了基本目錄,因此我們將需要根據需要定製的子目錄:

 # cd /var/www/debian
 # mkdir -p pool/main
 # mkdir  pool/contrib
 # mkdir -p dists/squeeze/main/binary-amd64
 # mkdir -p dists/squeeze/contrib/binary-amd64
 # mkdir .cache

現在我們已經有了目錄結構,現在讓我們創建必要的配置文件,以幫助apt-ftparchive查找並索引我們的軟件。請注意,您可以使用此設置來鏡像官方Debian軟件包或使用自己的軟件包創建存儲庫,因為步驟相同。

我們將需要創建的兩個文件中的第一個文件(都將位於/var /www /debian中)名為apt-release.conf。

 # cd /var/www/debian
 # $editor apt-release.conf

與我們的需求相關的內容如下所示:

APT::FTPArchive::Release::Codename "squeeze";
APT::FTPArchive::Release::Origin "linuxcareer.com";
APT::FTPArchive::Release::Components "main contrib";
APT::FTPArchive::Release::Label "Linuxcareer.com Debian Repo";
APT::FTPArchive::Release::Architectures "amd64";
APT::FTPArchive::Release::Suite "squeeze";

您還可以使用apt-ftparchive來基於命令行參數生成配置文件。使用您喜歡的任何方法。

第二個配置文件名為apt-ftparchive.conf,其內容如下所示:

    Dir {
     ArchiveDir ".";
     CacheDir "./.cache";
    };

    Default {
     Packages::Compress ". gzip bzip2";
     Contents::Compress ". gzip bzip2";
    };

    TreeDefault {
     BinCacheDB "packages-$(SECTION)-$(ARCH).db";
     Directory "pool/$(SECTION)";
     Packages "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
     Contents "$(DIST)/Contents-$(ARCH)";
    };

    Tree "dists/squeeze" {
     Sections "main contrib";
     Architectures "amd64";
    }

如您所見,關於這兩個文件的語法非常類似於self-explanatory。

為了舉例說明,我們現在將從Debian鏡像下載一個.deb,以便正確地說明我們的想法。

 # cd /var/www/debian/pool/main
 # wget -c ftp://ftp.heanet.ie/mirrors/ftp.debian.org/debian/pool/main/\
p/patch/patch_2.6.1.85-423d-3_amd64.deb

現在,讓我們生成內容(每次添加或刪除軟件包時,都必須重複進行此操作)。

 # cd /var/www/debian
 # apt-ftparchive generate apt-ftparchive.conf
 # apt-ftparchive -c apt-release.conf release dists/squeeze > \
dists/squeeze/Release

這些動作做了所謂的“構建存儲庫”。現在,按照上麵的說明,在您的sources.list中添加一行,您就可以訪問您的軟件存儲庫。如果您需要成為Debian鏡像並且仍然不喜歡ftpsync,請將rsync與名為pool /$ section的遠程目錄一起使用,然後自己喝杯咖啡或其他東西。另外,請使用鏡像,請不要重載ftp.debian.org。

包裹簽收

如果要使用CD /DVD /Blu-Ray映像將內容提供給客戶端,則默認情況下不會對光學媒體映像上的Release文件進行簽名。但是,如果您通過同步鏡像內容來提供服務,則您不必做任何事情。如果您有自定義存儲庫,請按以下步驟操作。首先,如Fedora示例中所示,生成GPG密鑰:

 $ gpg --gen-key

現在,由於debsign中的錯誤#639204(今年8月的最新更新),看來我們將不得不采用替代方法。由於Debian軟件包基本上隻是ar檔案,因此我們將使用lower-level方式對我們的軟件包進行簽名:

 $ ar x package_name.deb
 $ cat debian-binary control.tar.gz data.tar.gz > tempfile
 $ gpg -abs -o _gpgorigin tempfile
 $ ar rc package_name.deb _gpgorigin debian-binary control.tar.gz data.tar.gz

因此,我們在這裏所做的就是用ar提取.deb文件,將其內容連接到一個臨時文件(注意順序),對該文件簽名,然後將.deb重組為原始狀態。現在我們需要導出GPG密鑰(如您所見,該過程與Fedora上應用的過程沒有什麽不同)。

 $ gpg --export -a > mydebsign.asc

現在,讓我們提取密鑰以供進一步使用:

 $ gpg --fingerprint

記住密鑰指紋中的最後四個組(如下所示),因為它們將是密鑰ID,我們將在以後使用。

在客戶端計算機上,確保已安裝debsig-verify,然後可以為密鑰創建位置:

 # mkdir /usr/share/debsig/keyrings/$key_id

如您在屏幕快照中所見,我們的示例密鑰ID為8760C540B4FC5C21。現在,我們導入密鑰:

 # gpg --no-default-keyring --keyring \
    /usr/share/debsig/keyrings/$key_id/debsign.gpg --import mydebsign.asc

現在,棘手的部分到了:我們需要密鑰的策略文件。使用的語言是XML,但是不必擔心:在/usr /share /doc /debisg-verify /examples中,您將找到一個名為generic.pol的文件,該文件可以複製到某個位置進行編輯和重命名。此類文件的示例如下所示:

<Policy xmlns="http://www.debian.org/debsig/1.0/">

<Origin Name="Linux Career" id="8760C540B4FC5C21"
Description="Package offered by Linux Career"/>

<Selection>
<Required Type="origin" File="debsign.gpg" id="8760C540B4FC5C21"/>
</Selection>

<Verification MinOptional="0">
<Required Type="origin" File="debsign.gpg" id="8760C540B4FC5C21"/>
</Verification>

</Policy>

您在上麵看到的隻是策略文件的必要部分。在檢查了示例並進行了必要的更改之後,將此文件保存到/etc/debsig/policies/$key_id/$policy_name.pol。完成此步驟後,如果正確執行了步驟,則可以將debsig-verify與程序包名稱一起用作參數,以檢查下載的程序包。感謝PurplePloyd在這方麵的有用文章。

客戶端設置

因此,讓我們啟動客戶端計算機,確保將其設置為從網絡啟動,並在要求您選擇鏡像時選擇“手動輸入信息”。輸入服務器的IP,然後輸入相對於/var /www的位置(在本例中為debian),就可以開始安裝了。

結論

即使在小型網絡上,人們也永遠講不到節省帶寬的重要性。當然,本地鏡像方法還有其他優點,例如為公司提供定製的軟件(應用特殊補丁或進行更改以更好地滿足公司的需求)或為自己喜歡的發行版打包軟件。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/9089.html,未經允許,請勿轉載。