Linuxサーバー管理完全攻略 第3編:パッケージ管理とサービス運用
Linux Server Administration Complete Guide Part 3
Linuxサーバー管理完全攻略シリーズ
第2編:ユーザーと権限 | 第3編:パッケージ管理とサービス(現在)| 第4編:ネットワークとファイアウォール
はじめに:ソフトウェア管理の重要性
サーバー運用において、ソフトウェアのインストール、アップデート、削除は日常的な作業です。Linuxはパッケージ管理システムを通じて依存関係の解決、バージョン管理、セキュリティアップデートを効率的に処理します。また、systemdを通じてサービスの起動、停止、自動起動を管理します。
1. パッケージ管理システムの理解
1.1 パッケージとは?
パッケージはソフトウェア、設定ファイル、依存関係情報を一つにまとめた圧縮ファイルです。パッケージマネージャーがインストール、アップデート、削除を自動的に処理します。
1.2 主要なパッケージ管理システム
| ディストリビューション系列 | パッケージ形式 | 低レベルツール | 高レベルツール |
|---|---|---|---|
| Debian/Ubuntu | .deb | dpkg | apt, apt-get |
| RHEL/CentOS/Fedora | .rpm | rpm | yum, dnf |
| Arch Linux | .pkg.tar.zst | pacman | pacman |
2. APT(Debian/Ubuntu系)
2.1 パッケージリストの更新
# パッケージリスト更新(インストール前に必須)
sudo apt update
# インストール済みパッケージのアップグレード
sudo apt upgrade
# システム全体のアップグレード(依存関係変更含む)
sudo apt full-upgrade
# 不要なパッケージの削除
sudo apt autoremove
2.2 パッケージの検索と情報確認
# パッケージ検索
apt search nginx
# パッケージ情報確認
apt show nginx
# インストール済みパッケージ一覧
apt list --installed
# 特定パッケージのインストール確認
apt list --installed | grep nginx
2.3 パッケージのインストール/削除
# パッケージインストール
sudo apt install nginx
# 複数パッケージを同時インストール
sudo apt install nginx mysql-server php-fpm
# 特定バージョンをインストール
sudo apt install nginx=1.18.0-0ubuntu1
# パッケージ削除(設定ファイル保持)
sudo apt remove nginx
# パッケージ完全削除(設定ファイル含む)
sudo apt purge nginx
# .debファイルを直接インストール
sudo dpkg -i package.deb
sudo apt install -f # 依存関係解決
2.4 リポジトリ管理
# リポジトリリストの場所
/etc/apt/sources.list
/etc/apt/sources.list.d/
# PPA追加(Ubuntu)
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# PPA削除
sudo add-apt-repository --remove ppa:ondrej/php
3. YUM/DNF(RHEL/CentOS/Fedora系)
3.1 基本コマンド
# パッケージリスト更新とアップグレード
sudo yum update # CentOS 7
sudo dnf update # CentOS 8+, Fedora
# パッケージ検索
yum search nginx
dnf search nginx
# パッケージ情報
yum info nginx
dnf info nginx
# パッケージインストール
sudo yum install nginx
sudo dnf install nginx
# パッケージ削除
sudo yum remove nginx
sudo dnf remove nginx
3.2 グループパッケージ
# グループ一覧確認
dnf group list
# 開発ツールグループインストール
sudo dnf groupinstall "Development Tools"
# グループ削除
sudo dnf groupremove "Development Tools"
3.3 リポジトリ管理
# リポジトリリストの場所
/etc/yum.repos.d/
# EPELリポジトリ追加
sudo dnf install epel-release
# リポジトリ一覧確認
dnf repolist
# 特定リポジトリからインストール
sudo dnf install --enablerepo=epel package-name
4. パッケージ管理実践テクニック
4.1 セキュリティアップデートのみ適用
# Ubuntu/Debian
sudo apt upgrade --only-upgrade
# RHEL/CentOS
sudo yum update --security
sudo dnf update --security
4.2 パッケージバージョンの固定
# Ubuntu/Debian - バージョン固定
sudo apt-mark hold nginx
sudo apt-mark unhold nginx
apt-mark showhold
# RHEL/CentOS - バージョン除外
# /etc/yum.conf または /etc/dnf/dnf.conf
exclude=nginx*
4.3 キャッシュ管理
# APTキャッシュクリア
sudo apt clean # ダウンロードしたパッケージファイル削除
sudo apt autoclean # 古いバージョンのみ削除
# YUM/DNFキャッシュクリア
sudo yum clean all
sudo dnf clean all
5. systemdとサービス管理
5.1 systemdとは?
systemdはLinuxのinitシステムおよびシステム管理デーモンです。サービスの起動/停止、ブート時の自動起動、ロギング、依存関係管理などを担当します。
5.2 サービス制御の基本
# サービス状態確認
sudo systemctl status nginx
# サービス起動/停止/再起動
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
# 設定リロード(無停止)
sudo systemctl reload nginx
# 再起動またはリロード(サポートしていればリロード)
sudo systemctl reload-or-restart nginx
5.3 ブート時の自動起動
# 自動起動有効化
sudo systemctl enable nginx
# 自動起動無効化
sudo systemctl disable nginx
# 即時起動 + 自動起動有効化
sudo systemctl enable --now nginx
# 自動起動状態確認
systemctl is-enabled nginx
5.4 サービス一覧と状態
# 全サービス一覧
systemctl list-units --type=service
# 実行中のサービスのみ
systemctl list-units --type=service --state=running
# 失敗したサービス
systemctl list-units --type=service --state=failed
# サービス依存関係確認
systemctl list-dependencies nginx
6. カスタムサービスの作成
6.1 Unitファイル構造
# /etc/systemd/system/myapp.service
[Unit]
Description=My Custom Application
After=network.target
[Service]
Type=simple
User=appuser
Group=appgroup
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start.sh
ExecStop=/opt/myapp/bin/stop.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
6.2 主要セクションの説明
- [Unit]:サービス説明、依存関係定義
- [Service]:実行方法、ユーザー、再起動ポリシー
- [Install]:有効化時に接続されるターゲット
6.3 サービスの登録と管理
# Unitファイル作成/修正後
sudo systemctl daemon-reload
# サービス有効化と起動
sudo systemctl enable --now myapp
# 状態確認
sudo systemctl status myapp
# ログ確認
sudo journalctl -u myapp -f
6.4 様々なサービスタイプ
# Type=simple(デフォルト)
# メインプロセスが直接起動
# Type=forking
# 従来のデーモン方式、フォーク後に親が終了
Type=forking
PIDFile=/var/run/myapp.pid
# Type=oneshot
# 一回限りの作業(スクリプト実行)
Type=oneshot
RemainAfterExit=yes
# Type=notify
# サービスが起動完了をsystemdに通知
Type=notify
7. journalctl - ログ管理
7.1 基本的な使い方
# 全ログ表示
sudo journalctl
# 特定サービスのログ
sudo journalctl -u nginx
# リアルタイムログ追跡
sudo journalctl -u nginx -f
# ブート以降のログのみ
sudo journalctl -b
# 前回ブートのログ
sudo journalctl -b -1
7.2 時間と優先度フィルター
# 時間範囲指定
sudo journalctl --since "2026-01-21 10:00" --until "2026-01-21 12:00"
sudo journalctl --since "1 hour ago"
sudo journalctl --since today
# 優先度フィルター
sudo journalctl -p err # error以上
sudo journalctl -p warning # warning以上
# 出力形式
sudo journalctl -o json-pretty # JSON形式
sudo journalctl -o short-iso # ISO時間形式
7.3 ログ管理
# ディスク使用量確認
sudo journalctl --disk-usage
# 古いログ削除
sudo journalctl --vacuum-time=7d # 7日以前を削除
sudo journalctl --vacuum-size=500M # 500MB以下に維持
# 設定ファイル:/etc/systemd/journald.conf
SystemMaxUse=500M
MaxRetentionSec=7day
8. 実践シナリオ
8.1 LAMPスタックインストール(Ubuntu)
# パッケージ更新
sudo apt update
# Apache、MySQL、PHPインストール
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql
# サービス起動と自動起動有効化
sudo systemctl enable --now apache2
sudo systemctl enable --now mysql
# 状態確認
systemctl status apache2 mysql
8.2 Node.jsアプリのサービス登録
# /etc/systemd/system/nodeapp.service
[Unit]
Description=Node.js Application
After=network.target
[Service]
Type=simple
User=nodeuser
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node app.js
Restart=on-failure
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
# 登録と起動
sudo systemctl daemon-reload
sudo systemctl enable --now nodeapp
8.3 定期アップデートの自動化
# Ubuntu - unattended-upgradesインストール
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
# 設定確認
cat /etc/apt/apt.conf.d/20auto-upgrades
# RHEL/CentOS - dnf-automatic
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
9. トラブルシューティング
9.1 パッケージ問題の解決
# APTロック問題
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
# 壊れたパッケージの修復
sudo apt --fix-broken install
sudo dpkg --configure -a
# RPMデータベース再構築
sudo rpm --rebuilddb
9.2 サービス問題の解決
# サービス起動失敗の原因確認
sudo systemctl status myservice
sudo journalctl -xe -u myservice
# 設定ファイル文法チェック
sudo nginx -t
sudo apache2ctl configtest
# systemd再分析
sudo systemctl daemon-reexec
まとめ
パッケージ管理とサービス運用はサーバー管理の核心です。apt/yum/dnfでソフトウェアを効率的に管理し、systemdでサービスを安定的に運用しましょう。
次の第4編ではネットワーク設定とファイアウォールを扱います。
シリーズ
← 第2編:ユーザーと権限 | 第3編(現在)| 第4編:ネットワークとファイアウォール →