web-dev-qa-db-fra.com

activation de l'achèvement automatique pour apt-get install in docker (Ubuntu 14.04)

J'utilise un conteneur Ubuntu dans Docker. J'ai essayé tout ce que j'ai trouvé en ligne, y compris:

l'auto-complétion ne fonctionne pas pour "Sudo apt-get install"

mais appuyer sur "tab" n'a toujours aucun effet

9
Vince

Je sais que c'est vieux, mais je l'ai aussi rencontré. On voit clairement ce qui échoue avec l'aide du mode débogage dans bash: set -x.

Une fois que vous avez entré votre conteneur docker et apt install bash-completion, et éditez vos utilisateurs .bashrc pour trouver le bon répertoire, puis déconnectez-vous/connectez-vous (suivez essentiellement les étapes de la section q/a que vous avez référencé .

La commande qui échoue est la suivante:

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

Le '--no-generate' devrait vous donner une idée de ce qui se passe (quelque chose, quelque chose, le cache est manquant). Si vous courez sans, vous récupérez une liste de paquets.

Cela m'a amené à rechercher dans certains de mes liens de référence la manière dont ce système est censé fonctionner et éventuellement à inspecter la configuration d'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 "";

Notez que 'pkgcache' est vide. Essayez cela sur une installation normale (comme un conteneur lxd), et vous remarquerez qu'il est défini. Cela m'a conduit à l'endroit où les informations de configuration sont stockées, /etc/apt/apt.conf.d/. Sur le conteneur de docker:

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

Vous remarquerez ci-dessus que les images du menu fixe annulent activement cette valeur afin d'empêcher apt de stocker le fichier cache localement (afin de réduire la taille de l'image). J'ai commenté tout dans ce fichier, donc le fichier ressemble maintenant à:

# 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 "";

Et maintenant, les choses fonctionnent (après avoir exécuté apt update une fois:

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

Références

Cela m'a aidé à comprendre comment ce système fonctionnait ...

7
dpb