はじめに:ソフトウェア管理の重要性

サーバー運用において、ソフトウェアのインストール、アップデート、削除は日常的な作業です。Linuxはパッケージ管理システムを通じて依存関係の解決、バージョン管理、セキュリティアップデートを効率的に処理します。また、systemdを通じてサービスの起動、停止、自動起動を管理します。

1. パッケージ管理システムの理解

1.1 パッケージとは?

パッケージはソフトウェア、設定ファイル、依存関係情報を一つにまとめた圧縮ファイルです。パッケージマネージャーがインストール、アップデート、削除を自動的に処理します。

1.2 主要なパッケージ管理システム

ディストリビューション系列パッケージ形式低レベルツール高レベルツール
Debian/Ubuntu.debdpkgapt, apt-get
RHEL/CentOS/Fedora.rpmrpmyum, dnf
Arch Linux.pkg.tar.zstpacmanpacman

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編ではネットワーク設定とファイアウォールを扱います。