手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 共通環境の基本設定 – snap / dirmngr / environment / profile を整える

この記事では、Ubuntu 26.04 の全ホスト共通設定として、snapdirmngr/etc/environment/etc/profile.d、ユーザー profile の扱いを整理します。個別アプリケーションを入れる前に、proxy、PATH、CA bundle、共通環境変数の土台をそろえるための設定です。

Ubuntu Server を複数台で運用する場合、ネットワーク、時刻同期、更新管理だけでなく、共通環境のそろえ方も重要です。proxy を通る環境では、APT だけでなく snap、GnuPG の dirmngr、シェル環境、各種 CLI が同じ前提で動く必要があります。

この記事では、個別のアプリケーション設定ではなく、全ホストに共通する環境の土台を扱います。ポイントは、システム全体で使う環境変数と、ログインシェルで使う profile 設定を分けることです。

Ubuntu 26.04 サーバー管理ガイドに戻る

共通環境で整理する対象

この記事で扱う対象は、1つの大きな機能ではありません。小さな設定の集合です。ただし、これらが揃っていないと、後続の構築や管理コマンドで不必要な差分が出ます。

対象役割
snapsnap パッケージの proxy と refresh 方針を管理する
dirmngrGnuPG が keyserver などへ接続する時の proxy を管理する
/etc/environmentシステム全体の PATH や proxy 環境変数を定義する
/etc/profile.dログインシェルで使う共通環境変数を定義する
~/.profile.dユーザー単位の private な環境変数を分離する

特に proxy 環境では、APT は通るのに snap は通らない、curl は通るのに GnuPG は通らない、ログインシェルでは見えるが systemd 管理下では見えない、という差分が起きやすくなります。

snap の proxy と refresh を確認する

snap は APT とは別に proxy と refresh の設定を持ちます。snap を積極的に使わない場合でも、Ubuntu 環境では snapd が存在することがあるため、更新タイミングを明示しておくと挙動を把握しやすくなります。

snap get system proxy.http
snap get system proxy.https
snap get system refresh.timer
snap get system refresh.metered
snap get system refresh.retain

設定する場合は、snap set system を使います。例では proxy を指定し、refresh を日曜の早朝に寄せ、metered connection では hold し、保持世代を 2 にしています。

sudo snap set system proxy.http=http://proxy.example.internal:8080
sudo snap set system proxy.https=http://proxy.example.internal:8080
sudo snap set system refresh.timer=sun,04:00-05:00
sudo snap set system refresh.metered=hold
sudo snap set system refresh.retain=2

snap の refresh は、通常の apt upgrade とは別の更新経路です。サーバー運用では、いつ更新されるのか、何世代保持するのかを把握しておく方が安全です。

dirmngr の proxy を設定する

dirmngr は GnuPG が keyserver へ接続する時などに使われます。proxy 環境では、APT の proxy だけを設定しても GnuPG の通信が失敗することがあります。

sudo install -d -m 0755 /etc/gnupg
sudo tee /etc/gnupg/dirmngr.conf >/dev/null <<'EOF'
http-proxy http://proxy.example.internal:8080
EOF
sudo chmod 0644 /etc/gnupg/dirmngr.conf
sudo gpgconf --kill dirmngr

gpgconf --kill dirmngr で dirmngr を再起動させ、次回利用時に新しい設定を読み込ませます。外部 keyserver を使わない設計でも、GnuPG を使うツールがある場合は確認しておく価値があります。

/etc/environment を整える

/etc/environment は、システム全体の基本的な環境変数を置く場所です。PATH、HTTP_PROXY、HTTPS_PROXY、NO_PROXY などを明示します。

sudo tee /etc/environment >/dev/null <<'EOF'
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
HTTP_PROXY="http://proxy.example.internal:8080"
http_proxy="http://proxy.example.internal:8080"
HTTPS_PROXY="http://proxy.example.internal:8080"
https_proxy="http://proxy.example.internal:8080"
NO_PROXY="localhost,127.0.0.1,::1,.example.internal"
no_proxy="localhost,127.0.0.1,::1,.example.internal"
EOF
sudo chmod 0644 /etc/environment

/etc/environment は shell script ではありません。複雑な条件分岐や command substitution を書く場所ではなく、単純な key-value の定義として扱う方が安全です。

/etc/profile.d に共通 profile を置く

ログインシェルで使う共通値は、/etc/profile.d に分けると管理しやすくなります。ここでは、非対話更新用の DEBIAN_FRONTEND、proxy、CA bundle、内部 registry などの値を例にします。

sudo tee /etc/profile.d/u70-common.sh >/dev/null <<'EOF'
export DEBIAN_FRONTEND="noninteractive"
export HTTP_PROXY="http://proxy.example.internal:8080"
export http_proxy="http://proxy.example.internal:8080"
export HTTPS_PROXY="http://proxy.example.internal:8080"
export https_proxy="http://proxy.example.internal:8080"
export NO_PROXY="localhost,127.0.0.1,::1,.example.internal"
export no_proxy="localhost,127.0.0.1,::1,.example.internal"
export SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt"
export DOCKER_REGISTRY="registry.example.internal:5000"
export HARBOR_REGISTRY="harbor.example.internal:443"
EOF
sudo chmod 0644 /etc/profile.d/u70-common.sh

/etc/profile.d はログインシェル向けです。systemd service の環境変数とは別物なので、サービスに渡したい値は unit file や EnvironmentFile 側で管理します。

ユーザー private profile を分離する

全員に見えてよい共通値と、特定ユーザーだけが持つべき値は分けます。API key、管理者パスワード、vault password file のような値を /etc/profile.d に置くのは避けるべきです。

install -d -m 0700 "$HOME/.profile.d"
touch "$HOME/.profile.d/credential.sh"
chmod 0600 "$HOME/.profile.d/credential.sh"
cat >> "$HOME/.profile" <<'EOF'
if [ -d "$HOME/.profile.d" ]; then
  for f in "$HOME/.profile.d"/*.sh; do
    [ -r "$f" ] && . "$f"
  done
fi
EOF

この形にしておくと、共通値は /etc/profile.d、個人または管理作業用の秘密値は ~/.profile.d に分けられます。秘密値を扱う場合は、所有者、権限、バックアップ、端末履歴への露出にも注意します。

反映状態を確認する

設定後は、ログインし直すか新しい shell を開いて、期待した値が見えるか確認します。

env | grep -E '^(HTTP_PROXY|HTTPS_PROXY|NO_PROXY|SSL_CERT_FILE|DOCKER_REGISTRY|HARBOR_REGISTRY)='
snap get system proxy.http
snap get system refresh.timer
gpgconf --list-dirs | grep dirmngr
cat /etc/gnupg/dirmngr.conf

ここで確認したいのは、単にファイルが存在することではありません。実際に使うコマンドから見た時に、proxy、PATH、CA bundle が同じ前提になっているかです。

まとめ

Ubuntu 26.04 の共通環境設定は、派手な作業ではありません。しかし、proxy、PATH、CA bundle、snap refresh、GnuPG の通信設定が揃っていないと、後続の構築手順で予期しない差分が出ます。

  • snap の proxy と refresh 方針を明示する
  • dirmngr の proxy を /etc/gnupg/dirmngr.conf に設定する
  • /etc/environment でシステム全体の PATH と proxy を整理する
  • /etc/profile.d でログインシェル向けの共通値を定義する
  • 秘密値は全体 profile に置かず、ユーザー private な profile に分離する

共通環境を整える目的は、便利な環境変数を増やすことではありません。サーバーごとの前提差を減らし、後続の APT、TLS、registry、CLI 操作が同じ条件で動くようにすることです。

参考書籍
参考書籍
Advanced Ubuntu Administration and Management Best Practices
Ubuntu Server の共通環境設定や基本運用を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。
関連する記事
Ubuntu 26.04 共通環境の基本設定 – snap / dirmngr / environment / profile を整える

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る