ウェブサイト検索

Linuxでのパッケージリポジトリの作成:FedoraとDebian


紹介

この記事は私たちのPXE記事の論理的な続きであり、これを読んだ後には、ネットワークブートができるだけでなく、好みのディストリビューションを実際にインストールすることもできるようになります。しかし、自分のリポジトリを作成する他の用途もあります。例えば、帯域幅です。ネットワークを管理していて、すべてのシステム(または一部)が同じディストリビューションを実行している場合、近くのミラーと連携してrsyncを使用し、自分で更新を提供する方が容易です。次に、あなたが作成したパッケージがあり、それがあなたのディストリビューションのメインツリーでは受け入れられない場合でも、ユーザーはそれらを有用だと感じるかもしれません。 ドメイン名を取得し、ウェブサーバーを設定すれば、そこから始まります。ここではウェブサーバーの設定については詳しく説明しません。基本的なインストールタスクと、FedoraまたはDebianシステム用のリポジトリの基本的な設定について説明します。したがって、必要なハードウェア(サーバーや状況に応じた必要なネットワーク機器)と、Linuxおよびウェブサーバーに関する基本的な知識が必要です。それでは始めましょう。

注意:この記事は以前のドメインlinuxcareer.comから移動されました。

Fedoraシステムでリポジトリを作成する

ツールをインストールする

Fedoraには、作業を簡素化するcreaterepoというツールがあります。したがって、私たちがインストールする必要があるのは、それとウェブサーバーとしてのhttpdだけです:

 # yum install createrepo httpd 

リポジトリの設定

さて、ウェブサーバーを設定した後、ルートディレクトリが /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コマンドは2つ目のもので、更新に関連していることを忘れないでください。また、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/からキーをダウンロードできます。今、gpgcheckを有効にし、yumにキーの場所を教えるために.repoファイルを変更する必要があります。

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

ご覧のとおり、USERIDはこの場合「Linux Career 」です。さて、キーを公開するために:

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

もちろん、あなたのUSERIDは異なるので、それに応じて情報を変更してください。私たちがこれをテストしたFedora 16では、実行可能ファイルの名前はgpgではなくgpg2です。

パッケージに署名するユーザーのホームディレクトリに.rpmmacrosファイルを作成し、そこに以下の内容を記入する必要があります:

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

すべてが整ったので、パッケージに署名する命令は次のようになります。

 $ rpm --addsign name_of_package.rpm

今、あなたのカスタムリポジトリからダウンロードしているクライアントは、これらのカスタムパッケージをダウンロードできるようにするために「rpm -import $key」を使用します。

Debianシステムでリポジトリを作成する

インストール中

Debianのリポジトリ構造はより複雑なので、サーバーサイドでは少し手間がかかる一方、クライアントサイドでは少なくなります。常に、stable(安定版)、testing(テスト版)、unstable(不安定版)の3つのセクションが存在します(experimentalは除く)。それぞれには、パッケージのライセンスによってmain、contrib、non-freeの3つのコンポーネントがあります。どの部分のディストリビューションをミラーリングするかはあなたの決定ですが、警告する義務があります:DebianはFedoraよりもはるかに多くのパッケージを提供しているため、ディスクスペースの要件が大幅に増加します。カスタムパッケージでカスタムリポジトリを作成するために使用できるツールがたくさんありますが、今のところ公式パッケージに固執します。したがって、PXE記事の設定に戻り、インストール用のローカルリポジトリを作成します。ウェブサーバーが必要になるので、インストールしましょう。

 # aptitude install apache2

続行する前に、Apacheが設定されていて起動していることを確認してください。

サーバーの設定

デフォルトのルートディレクトリは、Fedoraと同様に/var/wwwであるため、そこにdebianディレクトリを作成しましょう:

 # mkdir /var/www/debian

Debianの人々は、必要なものをローカルミラーに持ってくるのを助けるために設計されたperlスクリプトのコレクションであるftpsyncを推奨しています。特に興味深いのは--excludeオプションです。なぜなら、Debianアーカイブのすべての内容を取得したくないからです(amd64のみ、mainおよびcontribのみ、squeezeのみ、CDなしなど)。インストール後に使用するリポジトリを作成したい場合は、/etc/apt/sources.listをパッケージが含まれているディレクトリにポイントするだけです(そこにはすでに動作モデルがあります)それだけです。例えば:

 deb http://192.168.1.2/debian squeeze main contrib

しかし、ftpsyncを使いたくない場合、何をダウンロードする必要があるかを詳しく見てみましょう。Debian(およびUbuntu、そして他のDebian派生もおそらく)には、カスタムリポジトリで使用するapt-ftparchiveプログラムを含むapt-utilsというパッケージがあります。それでは…

 # 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パッケージをミラーリングすることも、自分自身のパッケージでリポジトリを作成することも可能です。手順は同じですので、ご注意ください。

私たちが作成する必要がある2つのファイルの最初のファイルは、apt-release.confという名前で、両方とも/var/www/debianに保存されます。

 # 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を使用することもできます。お好みのアプローチを使用してください。

2番目の構成ファイルは 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";
    }

ご覧のとおり、構文は両方のファイルに関して非常にわかりやすいです。

例として、私たちはアイデアを適切に示すために、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が好きでない場合は、リモートディレクトリ名をpool/$sectionとしてrsyncを使用し、コーヒーでも飲みに行ってください。また、ミラーを使用し、ftp.debian.orgに負荷をかけないようにしてください。

パッケージ署名

CD/DVD/Blu-Rayイメージを使ってクライアントにコンテンツを提供したい場合、光メディアイメージのReleaseファイルはデフォルトでは署名されていません。しかし、ミラーのコンテンツをrsyncで提供する場合、何もする必要がないかもしれません。カスタムリポジトリがある場合は、次のように行います。まず、Fedoraの例のように、GPGキーを生成します:

 $ gpg --gen-key

さて、debsign のバグ #639204 (最後の更新は今年の8月) のため、私たちは別のルートを取らざるを得ないようです。Debian パッケージは基本的にはアーカイブなので、私たちはパッケージに署名するためにより低レベルな方法を使用します:

 $ 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

鍵フィンガープリントの最後の4つのグループ(下記参照)を覚えておいてください。それらが鍵の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 を使用してダウンロードしたパッケージをチェックできます。この記事を提供してくれたPurpleFloydに感謝します。

クライアントのセットアップ

それでは、クライアントマシンを起動しましょう。ネットワークから起動するように設定されていることを確認し、ミラーを選択するように求められたら「情報を手動で入力」を選択してください。サーバーのIPアドレス、その後/var/wwwに対する場所(この場合はdebian)を入力すれば、インストールの準備が整います。

結論

小さなネットワークであっても、帯域幅を節約することの重要性を強調しすぎることはありません。もちろん、ローカルミラーアプローチには、会社専用にカスタマイズされたソフトウェア(特別なパッチの適用や会社のニーズにより適した変更)を提供することや、お気に入りのディストリビューション用にパッケージ化されたソフトウェアを提供するなどの他の利点もあります。

関連記事: