1 分で読了 #devops
このページの目次

Gentoo パッケージ管理オペレーションマニュアル

Portage は Gentoo のパッケージ管理システムです。主要な概念: ebuild (ビルドスクリプト), emerge (CLI), USE フラグ (コンパイル時の機能スイッチ), world set (ユーザーが明示的にインストールしたパッケージ), @system (基本システムセット)。

ステータス確認

# インストール済みパッケージ
equery list '*'                          # すべてのインストール済みパッケージ (app-editors/neovim-0.10.0)
equery list -i                           # 同上
eix -I                                   # インストール済み (eix は equery よりも大幅に高速)
eix -I --format '<category>/<name>-<installedversions:INSTALLEDVERSION>\n'  # 簡潔なフォーマット
qlist -IRv                               # portage-utils バージョン (さらに高速)

# パッケージ情報
equery uses neovim                       # パッケージの USE フラグとその現在のステータスを表示
equery depends neovim                    # neovim に依存しているパッケージ
equery depends --indirect neovim         # 再帰的な逆依存関係 (間接依存を含む)
equery files neovim                      # パッケージがインストールしたファイル
equery size neovim                       # パッケージのディスク使用量
eix neovim                               # パッケージの概要 (バージョン/説明/USE/overlay)

# アップグレード可能なパッケージの確認
emerge --sync && emerge -puDN @world     # -p=pretend, -u=update, -D=deep, -N=new-use
emerge -puDN @world --verbose-conflicts  # 競合の詳細を含む

# USE フラグ
emerge --info | grep USE                  # グローバル USE 設定
portageq envvar USE                       # 現在有効なグローバル USE
euse -a                                   # すべての USE フラグのステータス (+有効/-無効)
euse -i gtk                               # gtk フラグの説明を表示

# world set
cat /var/lib/portage/world               # ユーザーが手動でインストールしたパッケージのリスト
emerge --depclean -p                      # クリーンアップ可能な孤立依存関係のプレビュー

# 依存関係分析
emerge -p --depclean                      # どのパッケージが孤立しているか
revdep-rebuild -p                         # 壊れた動的リンク依存関係のプレビュー

インストールとアンインストール

# インストール
emerge -av app-editors/neovim             # -a=ask (確認), -v=verbose
emerge -av --autounmask-write neovim      # USE/keyword 変更を自動で書き込み (その後 dispatch-conf が必要)
emerge -1av neovim                        # -1=oneshot (world set に追加しない)

# アンインストール
emerge -aC app-editors/neovim             # --unmerge, world set から削除
emerge -a --depclean app-editors/neovim   # 孤立依存関係とともにクリーンアップ

# アップグレード
emerge -avuDN @world                       # すべてを更新 (一般的)
emerge -avuDN @world --with-bdeps=y       # ビルド時の依存関係を含む
emerge -avuDN @world --exclude "sys-kernel/*" # 特定のパッケージを除外
emerge -avuDN @world --keep-going          # エラー発生時に続行 (最後に失敗リストを要約)

# overlay からインストール
emerge -av app-editors/neovim::guru       # overlay を指定

# ダウンロードのみでインストールしない
emerge -avf neovim                         # -f=fetchonly

USE フラグ管理

# 一時的に有効化/無効化 (単発の emerge)
USE="gtk -qt5" emerge -av app-editors/neovim

# パッケージレベルの USE (永続化)
# /etc/portage/package.use/<name> または /etc/portage/package.use を編集
echo "app-editors/neovim gtk -qt5" >> /etc/portage/package.use/neovim

# グローバル USE (永続化)
# /etc/portage/make.conf を編集:
# USE="gtk -qt5"

# 特定の USE フラグがどのパッケージに影響するかを確認
equery hasuse gtk
eix --installed-with-use gtk

# USE フラグ変更後に影響を受けるパッケージを再コンパイル
emerge -av --changed-use @world
emerge -av --newuse @world                # 同上 (-N)

Keyword と Mask

# ~amd64 (testing) の特定パッケージを許可
echo "app-editors/neovim ~amd64" >> /etc/portage/package.accept_keywords/neovim
# 特定バージョンを許可
echo "=app-editors/neovim-0.10.0 ~amd64" >> /etc/portage/package.accept_keywords/neovim
# ** (すべての keyword、ライブ ebuild を含む) を許可
echo "app-editors/neovim **" >> /etc/portage/package.accept_keywords/neovim

# Mask (インストール/アップグレードの阻止)
echo ">=app-editors/neovim-0.11.0" >> /etc/portage/package.mask/neovim
# Unmask (グローバル mask の解除)
echo "app-editors/neovim" >> /etc/portage/package.unmask/neovim

設定更新 (dispatch-conf)

# emerge 後に CONFIGURATION FILES の更新通知がある場合:
dispatch-conf                            # ._cfg ファイルを対話式でマージ
# ショートカットキー: u=use-new, z=zap-new(新しい設定を破棄), m=merge-interactive, q=quit

# 保留中の設定を表示
find /etc -name '._cfg*'                  # マージ待ちのすべての設定ファイルをリスト

# 自動化 (非対話式)
etc-update                                # 別の設定マージツール

トラブルシューティングとメンテナンス

# 同期
emerge --sync                             # ebuild ツリーを更新
emaint sync -a                            # すべてのリポジトリ (overlay を含む) を同期
eix-sync                                  # emerge --sync + eix キャッシュの更新

# 壊れた依存関係の修復
revdep-rebuild                            # broken linkage (soname 変更後) をスキャンして再コンパイル
revdep-rebuild -p -- --exclude gcc        # プレビュー、特定のパッケージを除外

# @world の再構築 (メジャーバージョンアップ後)
emerge -e @world                          # -e=emptytree、すべてのパッケージを完全に再コンパイル

# Python ターゲットアップグレード後
emerge -av1 --changed-deps @world         # 依存関係が変化した場合のみ再コンパイル

# クリーンアップ
emerge --depclean -a                      # 孤立依存関係をクリーンアップ
eclean-dist -d                            # distfiles (ダウンロードしたソースパッケージ) をクリーンアップ
eclean-pkg -d                             # バイナリパッケージをクリーンアップ
eclean-kernel -n 2                        # 最新の 2 つのカーネルを保持、古いものをクリーンアップ

# ビルドログの確認
less /var/log/emerge.log                  # emerge の履歴
less /var/tmp/portage/*/temp/build.log    # 失敗したビルドのログ

# システムの一貫性チェック
emerge -avuDN @world --verbose-conflicts   # アップグレード前に競合をチェック
emerge @preserved-rebuild                 # preserved-libs の消費者を再コンパイル

# overlay の問題をチェック
emerge --info | grep overlay
# guru などの overlay が競合を引き起こす場合、一時的に無効化:
# emerge -avuDN @world --exclude="*::guru"

Overlay 管理

# 有効な overlay のリスト
emerge --info | grep -A 20 "Repositories"
layman -l                                # layman を使用している場合

# overlay の追加 (eselect-repository)
eselect repository list                  # 利用可能な overlay をリスト
eselect repository enable guru           # guru overlay を有効化
eselect repository disable guru          # 無効化

# overlay の同期
emaint sync -r guru                      # guru のみを同期

Profile とコンパイラ

# Profile の切り替え
eselect profile list                     # 利用可能な profile をリスト
eselect profile set default/linux/amd64/23.0/desktop

# GCC バージョンの切り替え
gcc-config -l                            # インストール済みの GCC をリスト
gcc-config x86_64-pc-linux-gnu-13.2.0    # 切り替え
source /etc/profile                      # 環境を更新

# Python バージョン
eselect python list
eselect python set python3.12

# ビルド環境の確認
emerge --info                            # 完全な Portage 環境 (CHOST/CFLAGS/USE/...)

早見表: make.conf の主要設定

# /etc/portage/make.conf の主要項目:
# MAKEOPTS="-j16"                # 並列コンパイル数 (≈CPU コア数)
# EMERGE_DEFAULT_OPTS="--jobs=4 --load-average=16"  # 並列 emerge タスク
# ACCEPT_LICENSE="*"             # すべてのライセンスを受諾 (本番環境では注意)
# L10N="en-US zh-CN"             # ローカライズ
# VIDEO_CARDS="amdgpu radeonsi"  # グラフィックカードドライバー
# INPUT_DEVICES="libinput"       # 入力デバイス
# CPU_FLAGS_X86="aes avx avx2 ..."  # コンパイラ最適化 (cpuid2cpuflags)