Package management with apt
Package management via apt-get runs hand-in-hand with the sources.list file. For information on editing or updating that files entries, see SourcesList
"In the beginning there was the .tar.gz. Users had to compile each program that they wanted to use on their GNU/Linux systems. When Debian was created, it was deemed necessary that the system include a method of managing the packages installed on the machine. The name dpkg was given to this system. Thus the famous ‘package’ first came into being on GNU/Linux, a while before Red Hat decided to create their own ‘rpm’ system.
A new dilemma quickly took hold of the minds of the makers of GNU/Linux. They needed a rapid, practical, and efficient way to install packages that would manage dependencies automatically and take care of their configuration files while upgrading. Here again, Debian led the way and gave birth to APT, the Advanced Packaging Tool, which has since been ported by Conectiva for use with rpm and has been adopted by some other distributions."
— From Debian APT HOWTO
All these commands require sudo. Replace "packagename" or "string" with the program you’re installing or searching for.
apt-get install packagename – installs a new package (but see aptitude, below)
aptitude – Curses viewer of packages installed or available. Aptitude can be used from the command-line in a similar way to apt-get, but only for some commands – install and remove being the most common. However, because aptitude keeps track of more information than apt-get does, it can be considered better at install and remove operations.
apt-get update — Run this after changing /etc/apt/sources.list or /etc/apt/preferences. You also must run it periodically to make sure your source list is up-to-date. This is the equivalent of “reload” in Synaptic, or “check for updates” in Windows or OS X or Fetch Updates in Adept.
apt-get upgrade — upgrades all installed packages. This is the equivalent of “mark all upgrades” and “apply” in Synaptic in one step.
apt-get dist-upgrade – upgrades the entire system to a newer release. The same as the above, except add the “smart upgrade” checkbox — i.e. tell APT to do whatever it has to do to upgrade to the latest packages, even if it means removing some other packages. (NB this is not a recommended way of upgrading to a new release)
apt-get -f install — the same as “Edit->Fix Broken Packages” and “Apply” in synaptic. Do this if you get complaints about packages with “unmet dependences”.
apt-get autoclean – Run this periodically to clean out .deb archives from packages which are no longer installed on the system. You can regain lots of disk space that way. If you’re really desperate for disk space, apt-get clean is more radical, and will remove .deb files even for packages currently installed. But most of the time you probably don’t need the .debs any more, so it might be worth it if you’re strapped for megabytes.
apt-get clean — the same as above, except remove *all* packages from the package cache. Usually you don’t need them, so this is smart if you’re running low on disk space. If you’re on dial-up, you might reconsider.
The package cache is in /var/cache/apt/archives, so "du -sh /var/cache/apt/archives" will tell you how much space cached packages are taking up.
dpkg-reconfigure foo — reconfigure package ”foo“. You really want to know this one. With many packages, you’ll be prompted with some configuration questions you may not have known were there. For example: dpkg-reconfigure fontconfig-config will present you with a ”wizard“ on configuring fonts in Ubuntu. I run this one on every Ubuntu install I do, because I want to make bitmapped fonts available to all my apps.
dpkg-reconfigure, like the name says, is for *reconfiguring* packages — if you’ve installed a package that’s asked you questions, and you’d like to change some of those answers, this is what you’re looking for.
echo "foo hold" | dpkg –set-selections — place package "foo" on hold, i.e. don’t upgrade this package, even if it means holding back loads of upgrades that depend on the upgraded version. This is the same as Synaptic’s "Package->Lock Version"
Note that apt-get dist-upgrade will override this, but will warn you first. Also, if you want to use this with sudo, you need ‘echo "foo hold" | sudo dpkg –set-selections’ and not ‘sudo echo "foo hold" | dpkg –set-selections’.
echo "foo install" — remove the "hold" or "locked package" state set above. The same thing with sudo applies, i.e. it’s ‘echo "foo install" | sudo dpkg –set-selections’
apt-get remove packagename – removes a installed package (configfiles remain)
apt-get --purge remove packagename – removes a installed package (configfiles will also be removed)
A special trick: if you want to remove package “foo” and install package “bar” in one step: apt-get --purge remove foo bar+.
apt-get autoremove packagename – removes a installed package and dependencies
apt-cache search foo — find packages that include “foo”.
dpkg -l ’*foo*‘ — find packages whose names contain “foo”. Similar to apt-cache search foo, but also shows whether package is installed on your system by marking with ii (installed) and un (not installed).
apt-cache show foo — shows the description of package “foo" and other relevant information including version, size, dependencies and conflicts.
dpkg –print-avail — similar to above.
dpkg -L package – List files in the package. Used also (?) to determine what files the “foo” package has installed on your system. This is *very* useful.
dpkg -c foo.deb — List files in the package "foo.deb". Note that foo.deb is a pathname — this is for .deb packages you’ve downloaded by hand.
dlocate foo — Determines Which installed package owns foo. dlocate shows files from installed packages that match “foo”, with the name of the package they came from. This is sort of the inverse of the above, and is useful for answering the question “What package did this file come from?“ You have to have the dlocate package installed for this to work.
dpkg -S foo — Like the above, but much slower. It’ll work on any Debian or Ubuntu system, i.e. it doesn’t require that dlocate be installed.
apt-file search foo — like dlocate and dpkg -S, but searches all available packages, not just the ones that are installed on your system — i.e. it answers the question ”what package provides this file?“. You’ll have to install the apt-file package first, and keep the apt-file database up to date (i.e. you have to do apt-file update just like you do apt-get update).
apt-cache pkgnames – Fast listing of every package in the system
A general note on searching: If searching for a generates a list that is too long, you can filter your results by piping them through the command grep. Examples:
apt-cache search filename | grep -w filename – shows only the files that contain filename as a whole word
dpkg -L package | grep /usr/bin – list files located in directories like /bin or /usr/bin, useful if you’re looking for a particular executable
For more information on apt-get, apt-cache and dpkg consult their manual pages by using the man command. These manuals will provide a wider scope of information in addition to all of the options that you can use with each program. Example: man apt-get.
Typical use case
I want to feel the wind in my hair, I want the adrenaline of speed. So lets install a racing game. But what racing games are available?
<font color="#0000ff">apt-cache search racing game</font>
It gives me a lot of answers. I see a game named "torcs". Lets get some more information on this game.
<font color="#0000ff">apt-cache show torcs</font>
Hmmm… it seems interesting. But is this game not already installed on my computer? And what is the available version? Is it from Universe or main?
<font color="#0000ff">apt-cache policy torcs</font>
Ok, so now, let’s install it!
<font color="#0000ff">apt-get install torcs</font>
What is the command I must type in the console to launch this game? In this example, it’s straightforward ("torcs"), but that’s not always the case. One way of finding the name of the binary is to look at what files the package has installed in "/usr/bin". For games, the binary will be in "/usr/games". For administrative programs, it’s in "/usr/sbin".
<font color="#0000ff">dpkg -L torcs|grep /usr/games/</font>
The first part of the command display all files installed by the package "torcs" (try it). With the second part, we ask to only display lines containing "/usr/games/".
Hmmm, that game is cool. Maybe there are some extra tracks?
<font color="#0000ff">apt-cache search torcs</font>
But I’m running out of space. I will delete the apt cache!
<font color="#0000ff">apt-get clean</font>
Oh no, my mother asked me to remove all games from this computer. But I want to keep the configuration files so I can simply re-install it later.
<font color="#0000ff">apt-get remove torcs</font>
If I want to also remove config files :
<font color="#0000ff">apt-get remove --purge torcs</font>
deborphan and debfoster are great for finding orphaned and unneeded packages which can be removed.
Speeding up your work at the command line
You can create aliases to make typing these commands faster. For example, you might put this in your *~/.bashrc*
<font color="#ff0000"> alias acs='apt-cache search'<br /> alias agu='sudo apt-get update'<br /> alias agg='sudo apt-get upgrade'<br /> alias agd='sudo apt-get dist-upgrade'<br /> alias agi='sudo apt-get install'<br /> alias agr='sudo apt-get remove'</font>
But see aptitude, above, for a reason to use "alias agi=’sudo aptitude install’"
Setting up apt-get to use a http-proxy
These are three methods of using apt-get with a http-proxy.
This is a temporary method that you can manually use each time you want to use apt-get through a http-proxy. This method is useful if you only want to temporarily use a http-proxy.
Enter this line in the terminal prior to using apt-get (substitute your details for yourproxyaddress and proxyport).
This method uses the apt.conf file which is found in your /etc/apt/ directory. This method is useful if you only want apt-get (and not other applications) to use a http-proxy permanently.
Note:- On some installations there will be no apt-conf file set up. This procedure will either edit an existing apt-conf file or create a new apt-conf file.
gksudo gedit /etc/apt/apt.conf
Add this line to your apt.conf file (substitute your details for yourproxyaddress and proxyport).
Save the apt.conf file.
This method adds a two lines to your .bashrc file in your $HOME directory. This method is useful if you would like apt-get and other applications for instance wget, to use a http-proxy.
add these lines to the bottom of your .bashrc file (substitute your details for yourproxyaddress and proxyport)
http_proxy=http://yourproxyaddress:proxyport<br />export http_proxy
Save the file. Close your terminal window and then open another terminal window
Test proxy with sudo apt-get update and whatever networking tool you desire. I use firestarter to see active connections.
If you make a mistake and go back to edit the file again, remember to close the terminal and reopen it. It will not function with the new settings until you do.
Proxy User Login
If you need to login to the Proxy server this can be achieved in most cases by using the following layout in specifying the proxy address in http-proxy. (substitute your details for username, password, yourproxyaddress and proxyport)
Debian Apt-howto documentation also available in package apt-howto.
For further apt-get goodness see PinningHowto.