Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxシステムを運用する上で、ソフトウェアのインストールやアップデートは欠かせない作業です。通常はapt
やyum
(現在はdnf
が主流)といったパッケージマネージャを使って公式リポジトリからインストールしますが、エンタープライズの現場では、独自のソフトウェアを管理したり、インターネットに接続できない環境で作業したりすることが多々あります。この記事では、そういった特定の環境で必要となるパッケージ管理の応用テクニックについて、詳しく解説していきます。
公式リポジトリにないソフトウェアや、より新しいバージョンのソフトウェアをインストールしたい場合、外部のリポジトリを追加する必要があります。
add-apt-repository
と最新の鍵管理UbuntuやDebianでは、add-apt-repository
コマンドが最も一般的です。このコマンドは、リポジトリ情報を/etc/apt/sources.list.d/
ディレクトリに新しいファイルとして追加し、同時にそのリポジトリのGPG鍵をインポートしてくれます。最近の環境では、管理者が手動で追加する鍵は/etc/apt/keyrings/
に配置し、deb822
形式の.sources
ファイルでSigned-By:
オプションを使って鍵を限定的に紐づける手順が推奨されています。
手動での追加例(推奨手順):
# keyringディレクトリを作成し、パーミッションを設定
$ sudo install -d -m 0755 /etc/apt/keyrings
# GPG鍵をダウンロードし、keyringとして安全な場所に配置
$ curl -fsSL https://example.com/debian/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/example-archive-keyring.gpg
$ sudo chmod 0644 /etc/apt/keyrings/example-archive-keyring.gpg
# deb822形式でリポジトリ情報を記述
$ sudo tee /etc/apt/sources.list.d/example.sources >/dev/null <<'EOF'
Types: deb
URIs: https://example.com/debian
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/example-archive-keyring.gpg
EOF
# リポジトリ情報を更新
$ sudo apt update
($
はコマンドプロンプトを表します。入力時は含めないでください。)
⚠️ 外部リポジトリ追加時の注意 公式以外のリポジトリは信頼性を必ず確認し、不明なリポジトリを追加しないよう注意してください。システム全体のパッケージが書き換わる場合もあり、最悪マルウェア感染のリスクもあります。また、
apt-key
コマンドおよびtrusted.gpg(.d)
への鍵配置は非推奨化が進んでおり、今後はSigned-By:
を併用する新しい形式が必須となります。
インターネットに接続されていないクローズドな環境では、外部からのパッケージ取得ができません。このような状況では、事前にパッケージをダウンロードして持ち込む必要があります。
apt
コマンドを使ってパッケージと依存関係にあるファイルをまとめてダウンロードできます。
コマンド例:
# パッケージと依存ファイルをAPTキャッシュにダウンロード
$ apt-get install --download-only <package_name>
このコマンドは、現在のリポジトリ設定に基づいて再帰的に依存関係を解決し、パッケージを/var/cache/apt/archives/
にダウンロードします。ターゲット環境と同じリポジトリ設定で実行しないと、依存パッケージの取りこぼしが発生しやすい点に注意が必要です。直接カレントディレクトリにダウンロードしたい場合は、apt-get download <package_name>
またはapt download <package_name>
を使用します。
オフライン環境でのインストール:
オフライン環境に持ち込んだパッケージは、dpkg
コマンドで個別にインストールするか、apt
のローカルリポジトリとして設定してインストールします。
# 個別インストール(依存関係は手動で解決する必要あり)
$ sudo dpkg -i package_name.deb
# APTを使って依存関係を自動解決してインストール(APT 1.1+で対応)
$ sudo apt install ./package_name.deb
複雑な依存関係を一括でダウンロードする場合は、apt-offline
やapt-rdepends
などのツールを活用する方法もあります。
ダウンロードした.deb
ファイルをローカルリポジトリとして使用したい場合は、dpkg-scanpackages
コマンドでPackages
ファイルを作成し、file:///
パスをsources.list
に追加する方法もあります。trusted=yes
オプションはセキュリティ検証を無効にするため、本当に信頼できるローカル用途のみに限定して使用してください。
# ローカルリポジトリの作成例
$ sudo apt-get install dpkg-dev
$ cd /path/to/repo
$ dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
# 参照例(/etc/apt/sources.list.d/local.listを作成)
$ echo "deb [trusted=yes] file:///path/to/repo ./" | sudo tee /etc/apt/sources.list.d/local.list
$ sudo apt update
独自のアプリケーションや、OSのバージョンに合わせたカスタムビルドが必要な場合、パッケージを自作するテクニックが非常に役立ちます。
RPMパッケージを作成するには、SPECファイルと呼ばれる設定ファイルが必要です。このファイルは、パッケージのメタデータ(名前、バージョンなど)、ビルド手順、インストール先のファイルリストなどを定義します。初めてrpmbuild
を使う場合は、事前にrpmdev-setuptree
コマンドでビルドに必要なディレクトリ構成を自動作成すると便利です。
SPECファイルの構成例:
Name: sample-app
Version: 1.0.0
Release: 1%{?dist}
Summary: A simple example application
License: MIT
Source0: %{name}-%{version}.tar.gz
BuildRequires: make gcc
Requires: <dependency-package>
%description
This is a sample application for creating RPM packages.
%prep
# ビルド前の準備
%setup -q
%build
# ビルドコマンドの例: make
make
%install
# インストールコマンドの例: make install DESTDIR=%{buildroot}
make install DESTDIR=%{buildroot}
%files
# パッケージに含めるファイル
/usr/bin/sample-app
近年のRHEL/Fedora系ではGroup
タグは非推奨となっています。
SPECファイルを使ったパッケージの作成:
rpmbuild
コマンドを使って、SPECファイルからパッケージをビルドします。
$ rpmbuild -ba sample-app.spec
作成されたRPMファイルは、通常~/rpmbuild/RPMS/<architecture>/
に生成されます。
DEBパッケージを作成するには、debian
ディレクトリ内に複数の設定ファイルを用意する必要があります。最低限必要なのは、パッケージのメタデータを定義するcontrol
ファイルと、インストール後の処理を記述するpostinst
スクリプトなどです。
controlファイルの構成例:
Source: sample-app
Section: utils
Priority: optional
Maintainer: Your Name <you@example.com>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.7.2.0
Package: sample-app
Architecture: amd64
Depends: <dependency-package_A>, <dependency-package_B>
Description: A simple example DEB package.
Depends:
セクションには、依存するパッケージをカンマ区切りで記述できます。
DEBパッケージの作成:
debuild
やdpkg-deb
といったコマンドを使って作成します。また、fpm
(Effing Package Management)のようなツールを使うと、RPMやDEBといった異なるパッケージ形式を簡単に相互変換することも可能です。
この記事では、Linuxのパッケージ管理における応用的なトピックとして、外部リポジトリの追加、オフライン環境での管理、そしてRPM/DEBパッケージの自作について解説しました。これらのテクニックは、通常の運用ではあまり使われないかもしれませんが、エンタープライズの現場や特定の要件を持つシステムでは非常に重要になります。
この記事が、Linux管理・運用の知識をさらに深める一助となれば幸いです。ご覧いただきありがとうございました。