web-dev-qa-db-ja.com

Dockerのapt-getインストールの自動補完を有効にする(ubuntu 14.04)

Dockerでubuntuコンテナを実行しています。私はオンラインで見つけたすべてのものを試しました:

「Sudo apt-get install」では自動補完は機能しません

しかし、「タブ」を押しても効果はありません

9
Vince

私はこれが古いことを知っていますが、私もそれに遭遇しました。 bashのデバッグモードset -xを使用すると、何が失敗しているかが明確になります。

Dockerコンテナとapt install bash-completionにアクセスし、ユーザー.bashrcを編集して正しいディレクトリを取得し、ログアウト/ログインします(基本的に (参照したq/a

失敗しているコマンドは次のとおりです。

# apt-cache --no-generate pkgnames firefox
E: Could not open file  - open (2: No such file or directory)

そこにある「--no-generate」は、何が起こっているのかを知る手掛かりになります(何か、何か、キャッシュがありません)。それなしで実行すると、パッケージのリストが返されます。

これにより、このシステムがどのように機能するかを参照リンクの一部で検索し、最終的にapt構成を検査することになりました。

root@edb76551d1dd:/var/cache/apt# apt-config dump |grep Dir::C
Dir::Cache "var/cache/apt/";
Dir::Cache::archives "archives/";
Dir::Cache::srcpkgcache "";
Dir::Cache::pkgcache "";

「pkgcache」が空であることに注意してください。通常のインストール(lxdコンテナーなど)で試してみると、設定されていることがわかります。これにより、構成情報が格納されている場所、/etc/apt/apt.conf.d/に導かれました。 Dockerコンテナで:

# grep cache *
[...]
docker-clean:Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";

上記のように、Dockerイメージはアクティブにこの値を設定解除し、aptがキャッシュファイルをローカルに保存しないようにします(イメージサイズを小さくするため)。そのファイルのすべてをコメントアウトしたので、ファイルは次のようになります。

# file: /etc/apt/apt.conf.d/docker-clean 
#DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
#APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
#Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";

そして今、物事は動作します(apt updateを一度実行した後:

# apt update
[...]        
# apt install firefox-d<tab>   
firefox-dbg  firefox-dev

参照資料

これらは、このシステムがどのように機能するかを理解するのに役立ちました...

7
dpb