enabling auto completion for apt-get install in docker (ubuntu 14.04)
I am running an ubuntu container in docker. I tried everything I found online, including:
auto-completion does not work for "sudo apt-get install"
but pressing "tab" still has no effect
Solution 1:
I know this is old, but I ran into it too. It's clear what is failing with the help of debug mode in bash: set -x
.
Once you get your into your docker container and apt install bash-completion
, and edit your users .bashrc
to source the right directory, and logout/login (basically follow the steps in the q/a you referenced.
The command that is failing is:
# apt-cache --no-generate pkgnames firefox
E: Could not open file - open (2: No such file or directory)
The '--no-generate' in there should give you a clue what is going on (something, something, cache is missing). If you run without it, you get back a list of packages.
This led me to search in some of my reference links with how this system is supposed to work, and eventually inspect the apt configuration:
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 "";
Notice that 'pkgcache' is empty. Try that on a normal install (like a lxd container), and you will notice it is set. This led me to the place that configuration information is stored, /etc/apt/apt.conf.d/
. On the docker container:
# grep cache *
[...]
docker-clean:Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";
You'll notice above that docker images are actively unsetting this value, to keep apt from storing the cache file locally (to reduce image size). I commented out everything in that file, so the file now looks like:
# 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 "";
And now, things work (after running apt update
once:
# apt update
[...]
# apt install firefox-d<tab>
firefox-dbg firefox-dev
References
These helped me figure out how this system worked...
- auto-completion does not work for "sudo apt-get install"
- https://wiki.ubuntu.com/ReducingDiskFootprint
- https://github.com/debops/ansible-php/issues/22