Ubuntu Weekly Recipe

第331回 パッケージ管理のハウツー集

この記事を読むのに必要な時間:およそ 6 分

UbuntuはおもにデスクトップLinuxの初心者ユーザーをターゲットにした使いやすさを重視して開発,発展していきました。今では初心者かどうかに関係なく数多くのユーザーを獲得した結果,Ubuntuの使い方や流儀について質問されることも多くなりました。

今回はそんな「こんなときどうすればいいの?」と質問を受ける項目のうち,とくにパッケージ管理まわりのあれやこれやを紹介します。

Aptをプロキシ内部で使うときに注意すべきこと

Ubuntuはシステム設定の「ネットワーク」からネットワークプロキシの設定を行えます。この設定を行えば,環境変数が設定され,Firefoxを含む各種ソフトウェアはプロキシ経由で接続するようになります。しかしいくつかのケースにおいて,プロキシ設定について留意する必要があります。

図1 システム設定のネットワークプロキシの設定画面

図1 システム設定のネットワークプロキシの設定画面

サーバー環境での設定

システム設定はデスクトップ環境のみ存在し,サーバー環境の場合は自分でプロキシ設定を行う必要があります。もしデスクトップ環境と同じように設定したい場合は,次のファイル注1を編集してください注2)⁠

/etc/environment

http_proxy="http://proxy.example.com:8080/"
https_proxy="https://proxy.example.com:8080/"
ftp_proxy="ftp://proxy.example.com:8080/"
socks_proxy="socks://proxy.example.com:1080/"

/etc/apt/apt.conf

Acquire::http::proxy "http://proxy.example.com:8080/";
Acquire::https::proxy "https://proxy.example.com:8080/";
Acquire::ftp::proxy "ftp://proxy.example.com:8080/";
Acquire::socks::proxy "socks://proxy.example.com:1080/";

ちなみに,apt.confの場合は未設定の場合,環境変数の値が使用されます。ただし,aptコマンドは原則としてsudo経由で実行することになるので,環境変数の値を使いたい場合は後述の「sudoコマンド実行時のプロキシ設定」が必要です。

注1)
apt.confについては,/etc/apt/apt.conf.d/以下にプロキシ用の設定ファイルを置く形でもかまいません。システム設定から変更した場合は,apt.confが変更されます。
注2)
設定値については各環境に合わせてください。上記すべてを設定する必要はなく,大抵の場合はhttpとhttpsだけで事足ります。

sudoコマンド実行時のプロキシ設定

sudoコマンドを使って何かコマンドを実行した場合,http_proxyなどの環境変数は引き継がれません。このため一般ユーザーだとwgetは成功するもののsudoで実行すると失敗する,というケースがよくあります注3)⁠

一番手っ取り早いのは,-Eオプションを使って,sudoを実行するユーザーの環境変数をsudoの対象のユーザーに引き継いでしまうことです。

$ sudo -E env
(http_proxyなどが引き継がれていることがわかる)

http_proxyなど特定の環境変数のみ引き継ぎたい場合は,sudoersを編集しましょう。

$ sudo visudo -f /etc/sudoers.d/proxy
(以下を追加する)
Defaults env_keep="http_proxy"
Defaults env_keep+="https_proxy"
Defaults env_keep+="ftp_proxy"
Defaults env_keep+="socks_proxy"

wgetなら/etc/wgetrcgitならgit-configのcore.gitproxyやhttp.proxyなど,アプリケーションごとの設定も存在しますので,必要に応じて使い分けてください。

注3)
たとえばadd-apt-repositoryコマンドは,pycurlを使ってLaunchpadにアクセスするため,https_proxyが設定されていないと失敗します。

プロキシのユーザー名とパスワード

これまで説明したいずれのケースにおいても,プロキシのユーザー名とパスワードはURLに埋め込むことで設定できます。

http_proxy="http://user:password@proxy.example.com:8080/"

ただし/etc/environmentや/etc/apt/apt.confに書く場合,このままだとパスワードを平文で保存する必要があります。平文で保存したくない場合は,どこかに暗号化した状態で保存しつつ,ログイン時に復号しhttp_proxyを設定するスクリプトを~/.profileに記述すると良いでしょう。⁠sudoコマンド実行時のプロキシ設定」と併せて使用すれば,apt.confへの設定は不要になります。

apt-get update時に「ハッシュサムが適合しません」と出る

プロキシ環境の内部から「apt-get update」などでパッケージリストを更新しようとすると,⁠ハッシュサムが適合しません」といったエラーが表示されることがあります。これはプロキシでキャッシュされているデータとキャッシュされていないデータの不整合が生じるために起こる問題です。

プロキシ内部からアップデートする場合は,/etc/apt/apt.confで,キャッシュを使わない設定にしておきましょう。

Acquire::http::No-Cache "true";
Acquire::https::No-Cache "true";

No-Cache以外にも,apt.confにはキャッシュコントロール用の設定が存在します。プロキシ内部のaptについては,単純にNo-Cacheにするだけでなく第315回でも紹介しているapt-cacher-ngを使って,プロキシの負荷を下げることも考慮してみてください。

パッケージを再インストールしたい

パッケージ管理されているファイルの一部を誤って消してしまった場合,そのパッケージを再インストールすることで復旧できます。

$ sudo apt install --reinstall パッケージ名

設定ファイルも含めて元に戻したい場合は,一度完全削除してからインストールし直しましょう。

$ sudo apt remove --purge パッケージ名
$ sudo apt install パッケージ名

この場合,削除するパッケージに依存しているパッケージも削除されてしまうため,インストールし直したあとに手動で対応する必要があることに注意してください。

ここでいう「完全削除」とはDebianパッケージにおける「設定ファイル」も含めて削除することを意味しています。各パッケージの設定ファイルのリストは次のコマンドで確認できます。

$ dpkg-query --control-show パッケージ名 conffiles

ここにリストアップされていない設定ファイル,たとえばソフトウェアが起動時にユーザーのホームディレクトリに自動生成するファイル,などは完全削除でも削除されません。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入