この記事では、Ubuntu 26.04 の全ホスト共通設定として、snap、dirmngr、/etc/environment、/etc/profile.d、ユーザー profile の扱いを整理します。個別アプリケーションを入れる前に、proxy、PATH、CA bundle、共通環境変数の土台をそろえるための設定です。
Ubuntu Server を複数台で運用する場合、ネットワーク、時刻同期、更新管理だけでなく、共通環境のそろえ方も重要です。proxy を通る環境では、APT だけでなく snap、GnuPG の dirmngr、シェル環境、各種 CLI が同じ前提で動く必要があります。
この記事では、個別のアプリケーション設定ではなく、全ホストに共通する環境の土台を扱います。ポイントは、システム全体で使う環境変数と、ログインシェルで使う profile 設定を分けることです。
共通環境で整理する対象
この記事で扱う対象は、1つの大きな機能ではありません。小さな設定の集合です。ただし、これらが揃っていないと、後続の構築や管理コマンドで不必要な差分が出ます。
| 対象 | 役割 |
snap | snap パッケージの proxy と refresh 方針を管理する |
dirmngr | GnuPG が 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=2snap の 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 dirmngrgpgconf --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 操作が同じ条件で動くようにすることです。


