Linux Software Installation Guide

A couple of years of experience have taught me there are many ways to install software into Linux. Most of those methods are as easy as fishing for piranhas with a horse for bait – it’s quick and painless (for the fisherman, absolute nightmare for the horse) and a few of them are as enjoyable as listening to your tone deaf sister do karaoke without a background track – it goes on for ever and ever and ever and causes your ears to close shop and move to another body. A couple of days ago I was stuck down with a couple of those convoluted and very painful installation methods….

Installing Software into Linux
The Options, They are A-Limitless

“AAAAARRRRGHGGGHGGHEEGHGHHGH!” Is the exact sound I made when Apt screwed up during a distribution upgrade and left me with 208 installable-but-not-gonna-be-installed packages, 2 removable-but-ain’t-gonna-do-it packages, 16 upgradeable ones that rolled their eyes at me for two days while I tried to figure out how to get past the gigantic horned gatekeeper that blew flames and shook its double edged battle axe at me every time I tried to log in to KDE (little did he know I’d got gnome installed too so I snook past where he wasn’t looking).

It took two days for me to realize I could fix Apt with just one magic command, which I’ll come to before the end of this article. But first, here is a guide to properly installing and uninstalling software into a Linux system. I use Linux Mint, a flavor of Ubuntu which is based on Debian so the commands and methods I will demonstrate here will be based around Debian.

The guide is split into 5 sections:

The installation methods demonstrated are:

Yes, this is the simple kiss-of-life guide to breathing fire into your computer’s motherboard with software you previously thought impossible to get installed.

Package Managers

More often than not, when you need to install software into a Linux system or update and upgrade software that already exists within the system all you need do is activate a package manager, locate the program you wish to install, click install then sit back, relax, put your feet up and drink your favorite beverage while Linux does the rest. Let’s take a virtual whirlwind tour of some of those package managers.

Graphical Package Managers

There are too many package managers for us to look at them all so I will discuss only one, The One that is probably favored by most users of Debian based distros. Synaptic is a graphical front end for apt-get and installs .deb packages that it automatically downloads from repositories. It can also install .deb packages downloaded by the user without using Synaptic to obtain them.

Synaptic Package Manager
Synaptic Package Manager, the Front End of Apt-Get

Install it with

apt-get install synaptic

Run it by clicking its icon in your programs menu or by pressing “Alt+F2” (or open a terminal) then entering “synaptic”.

Loading Synaptic With Kicker
Loading Synaptic With Kicker

Once it’s running, press the “Reload” button on the top left, let it update your package list then choose the packages you wish to install or remove by left or right-clicking them and selecting an option.

Beyond simple point’n’click software installation, you can

  • enable, disable and add extra repositories with Synaptic’s Repository Manager located at Settings>Repositories
  • fix broken packages via Edit>Fix Broken Packages
  • view a package’s details by right-clicking its name then selecting “Properties”
  • lock a package version by selecting the package (left click it) then navigating the top menu bar to Package>Lock Version, and
  • upgrade all software and upgrade your system.

It does a lot more too but this article’s scope is limited to software installation and removal so I won’t discuss the rest here.

Synaptic is very easy to use and the best way to learn it is to install it and play with it.

Package managers used by other Linux versions include:

  • Portage (Gentoo)
  • Yum Extender (RPM packages), and
  • many, many more exist.
Command Line Package Managers

There are three that are used by Debian based distributions:

Some other Linux distributions use

  • Yum – used by Fedora and has the same commands as Apt.
  • Emerge – used by Gentoo.

I will only discuss the ones used by Debian distros, namely, Apt, Aptitude and dpkg.

Advanced Packaging Tool, APT

Apt is a series of tools that enable .deb packages to be installed onto a Debian based system and .rpm packages onto one that uses RPM’s. If you open a terminal and type “man apt” you will get a bit of information about it and if you type “apt -h” you will get a bit more info about it; neither of them are very instructive (use Shift+Q to quit the man or help page).

The most frequently used apt commands are to

  • update the package list
  • sudo apt-get update
  • install new packages
  • sudo apt-get install PACKAGE-NAME

    or

    sudo apt-get install PACKAGE-ONE PACKAGE-TWO PACKAGE-THREE ETC
  • update all software installed on the system
  • sudo apt-get upgrade
  • upgrade all software installed on the system (including the operating system)
  • sudo apt-get dist-upgrade
  • install dependencies required by a specific package (sometimes required)
  • sudo apt-get build-dep PACKAGE-NAME
  • remove a package
  • sudo apt-get remove PACKAGE-NAME
  • remove a package and all its configuration files (all settings etc…)
  • sudo apt-get purge PACKAGE-NAME
  • clean out the package cache (deletes downloaded package files – does not remove the installed programs)
  • sudo apt-get clean
  • clean out obsolete package files (leaves the new, in date ones in the cache)
  • sudo apt-get autoclean
  • automatically remove unused packages
  • sudo apt-get autoremove
  • check for broken packages
  • sudo apt-get check
  • fix broken packages
  • sudo apt-get install -f
  • add a CD-ROM to the repository sources list (useful when internet access is broken or restricted)
  • sudo apt-cdrom add

Some useful extra commands are

  • If you want a list of all the software installed onto your system through apt (or dpkg), type
  • apt-cache pkgnames
  • To see that list alphanumerically sorted and displayed one page at a time (use Page-Up and Page-Down to scroll and Shift+Q to quit the list)
  • apt-cache pkgnames | sort | less
  • to print the list to a file located on your desktop in a file called package-list.txt
  • apt-cache pkgnames | sort > ~/Desktop/package-list.txt
DPKG – the Debian Package Management System

Dpkg is the main package installer used by Debian based systems. Most other package managers are front ends for dpkg; apt is no exception. Consequently, most package managers share some files with dpkg such as repository source lists e.g /etc/apt/sources.list and the package status list /var/lib/dpkg/status. In the main, apt is preferred over dpkg even though dpkg is the actual installer. However, dpkg is useful when apt screws up or a system crash occurs during software installation which inevitably results with poorly configured software. The commands required to install, remove, reconfigure and fix a broken or a partial package installation are the only ones I will demonstrate here:

  • To install a package
  • sudo dpkg -i PACKAGE-NAME
  • To remove a package
  • sudo dpkg -r PACKAGE-NAME
  • To configure a package
  • sudo dpkg --configure PACKAGE-NAME
  • To configure all unconfigured packages
  • sudo dpkg --configure -a
  • To reconfigure an already installed package
  • sudo dpkg-reconfigure PACKAGE-NAME

Whenever apt, aptitude, Synaptic or any other package manager is unable to install software due to dependency conflicts or other issues like “internal compiler error: Segmentation fault”, you should remove the conflicted software with “dpkg -r PACKAGE-NAME”. More often than not, it will be the only sane way to fix your regular package manager; and use “sudo dpkg –configure -a” to configure uninstalled software whenever your regular package manager crashes during software installation.

More information about dpkg is available here.

Aptitude

Aptitude is another front end for dpkg. It provides easy access to dpkg’s functions via both command line controls and a menu driven terminal interface (think along the lines of DOSShell). Aptitude’s command structure is roughly the same as that used by apt. Being a front end to dpkg it uses the same repository source list as dpkg and apt.

Here are a few examples to give you an idea of how similar Aptitude’s commands are to apt’s commands:

  • To update the package list
  • sudo aptitude update
  • To install software
  • sudo aptitude install PACKAGE-NAME
  • To reinstall software
  • sudo aptitude install --reinstall PACKAGE-NAME
  • To remove software
  • sudo aptitude remove PACKAGE-NAME
  • To remove software and purge its settings
  • sudo aptitude purge PACKAGE-NAME
  • To upgrade the system and installed software
  • sudo aptitude full-upgrade
  • To clean the package cache of downloaded packages
  • sudo aptitude clean
  • To hold back a package’s installation
  • sudo aptitude hold PACKAGE-NAME

To learn more of Aptitude’s commands, open a terminal and type

aptitude --help

or

man aptitude

To use Aptitude’s menu driven interface, open a terminal and type

sudo aptitude
Using Aptitude to Install Software
The Aptitude Package Manager

Aptitude’s menu is activated and deactivated by pressing

Ctrl+T

Menu navigate is done with the cursor keys to select items and the enter key to activate them. The Tab key moves between interactive options, the “+” key selects a package to be installed, the “-” key selects a package for removal and the “=” key specifies a package to be held.

To quit Aptitude, type

Ctrl+C

The most commonly used commands within Aptitude are:

  • To update your package list
  • Ctrl+T
    Menu>Update Package List
  • To install recommended packages
  • Ctrl+T
    Menu>Install Packages
  • Review suggested packages
  • press Ctrl+T
    Menu>Install Packages
  • To install a specific package
  • Ctrl+T
    Search>Find

You will discover short-cut keys as you familiarize yourself with the program.

Although Aptitude is less mentioned than apt and apt-get, it is the preferred method, above all others, of installing software into Linux. One reason for this is that Aptitude records any dependencies installed when packages are installed so Aptitude removes them automatically once those dependencies have are no longer required by any installed packages. A second reason for Aptitude’s preferential use is that it pays attention to software packages when their details suggest their functioning might be enhanced by the installation of optional extra packages. It’s worthwhile checking Aptitude’s package installation suggestions at least once per month to ensure your system is not missing out on anything through poor package management via other package managers.

Source Code installers

Some software is best installed, or can only be installed, from source code. To many people, this method of installation is as off-putting as dating a corpse. Luckily it is not as complicated as it looks and 99% of the time we need only unzip the source-code to a directory, open a terminal and type a few commands to complete an installation. We do not usually need to edit any configuration or setup files to ensure success.

Some of the reasons you might want to install from source-code include

  • unavailability of software through a package maintainer
  • a need for a newer software version than the one available through a package maintainer
  • the package maintainer’s version is incompatible with a computer system’s architecture
  • the package maintainer’s version is broken, and/or
  • the package manager is broken or inaccessible and the only way to fix it is to install software from source

A big advantage of installing software from source is that the end product is tailored to the system that builds it rather than the package maintainer’s system that built the one available for installation through a package manager.

The main disadvantage of building from source is that a system’s package manager is unaware of the software’s presence; this leads to the second disadvantage: source built software does not usually automatically update whereas package managed software does (via a package manager).

Check that software you wish to install is not available through your preferred package manager before you install from source-code. If it is available through your package manager decide whether the source-code offers real benefits over the package managed version.

Down to the Nitty-Gritty

The most important piece of information to remember after installing any software from source code is to register it with the system by entering “sudo ldconfig” into a terminal. That command will also get rid of many installation errors – if software fails to install due to an unspecified error or a GCC or G++ error, just enter “sudo ldconfig” into a terminal then retry the installation process.

Theses instructions are written for the command line but can easily (mostly) be carried out with a file browser. I suggest you follow along with a file browser and enter the commands into a terminal.

So, you’ve downloaded your source-code and it is packaged, as they usually are, in a compressed file in either a .tar.bz, .tar.bz2, .tar, .zip or .gz format:

  • Find somewhere to unpack it:
    Unpack it somewhere under your home folder so that you do not need to be a route user to manage it. It is best to create a common directory where you can unpack all source-code packages that you download. I use a directory called “installed”. You can call your source-code directory anything you want. Most people use a directory called “src”. This directory is sometimes already present, if it is not then I suggest you create it with the terminal command:
  • mkdir ~/src

    The tilde symbol “~” represents the logged in user’s home directory e.g /home/michael is the same as ~/michael and /home/simone is the same as ~/simone

  • Move your downloaded file to the “src” directory:
  • mv DIR/FILE ~/installed

    Replace FILE with the file’s name and DIR with the file’s directory location
    for example, if the file called source-code.zip is on your desktop, you would type

    mv ~/Desktop/source-code.zip ~/src
  • Change directory to the “src” directory
  • cd ~/src
  • Unzip the file. Most source-code packages are zipped as .tar.bz, .tar.bz2, .tar or .zip. Unzip it with one of these commands
  • tar -zxf FILE.tar
    tar -jxvf FILE.tar.bz
    tar -jxvf FILE.tar.bz2
    tar -zxvf FILE.tar.gz
    unzip FILE.zip
  • Change directory to the one created by the unzip process:
    1. find it by listing the files in the directory
    2. ls -1

      that is a “one” not a lowercase “L”

    3. then cd to it
    4. cd DIRECTORY-NAME
    5. list all the files in the directory
    6. ls -1 -a

      If only one folder is listed, change directory to it then retype “ls -1 -a”.

Some source-code packages come with instructions. Look for files called “readme”, “install” or “instructions”. Occasionally, the instructions are in a separate directory called “docs”. You have the option to either read the instructions to discover any needed dependencies and learn about any special methods else you can skip to the next step, cross your fingers and hope for the best.

If you do decide to read the instructions, type “more” followed by the file name to bring them up, e.g

more readme

If you do not bother to read the instructions, look through the list of files and see if any look like these:

That list relates to the setup instructions listed below and is in order of usage preference e.g if you see a file called “configure” then use the set-up instructions listed under “configure”, if the only one you recognize is “setup.py” then jump to the set-up instructions for “setup.py” but if you see both one called “setup.py” AND one called “configure” then first try the instructions for “configure” before you try the ones for “setup.py”.

For any of these set-up instructions, if any errors occur check the installation output and look for instances of “Looking for….not found” and “Error”. Unfound items are usually required dependencies, optional libraries or alternative libraries to the ones being used. Install those missing files and you will usually resolve the fault. Often there are many warnings, this is not unusual and are not typically anything to worry about.

Configure

This is the most common installation method. This process configures the files for a system, compiles the installation binaries, installs the binaries, cleans the source folder of unneeded files created by the previous steps then registers the binaries for use by the rest of the system. Open a terminal and type, singularly

./configure
make
sudo make install
make clean
sudo ldconfig
Make

Follow the instructions for Configure but skip the “./configure” step.

Cmake

Follow the instructions for Configure but replace “./configure” with “cmake”.

Qmake

This one usually requires an external build directory. If it does, see the section entitled Using an External Build Directory, otherwise follow the instructions for Configure but replace “./configure” with “qmake”.

Bootstrap

Follow the instructions for Configure but replace “./configure” with “./bootstrap”.

Setup.py

This is nice and easy, just type

python setup.py install
.Sh

A .sh file is a shell script. To use it you must first make it executable

chmod u+rwx FILE.bin

Then run it by typing

./FILE.sh

On some systems

bash FILE.sh

or

sh FILE.sh
.bin

This is a binary file. To use it you must first make it executable

chmod u+rwx FILE.bin

Then run it by typing

./FILE.bin
.jar

This is a java file. To use it you must first make it executable

chmod u+rwx FILE.jar

Then run it by typing

java -jar FILE.jar
.pl

This is a perl script. To use it you must first make it executable

chmod u+rwx FILE.pl

Then run it by typing

perl FILE.pl

Or, sometimes

FILE.pl

Using an External Build Directory


The old “we really want you to install this great software but wanna make it hard, real hard, for ya” one.

Some source-code must be built from an external directory. The build directory cannot usually be a sub-directory of the source-code’s directory. The way to build source-code in an external directory is as simple as calling the configure or make script from an external directory.

  • Let’s assume you have your source-code in
  • ~src/source-code/
  • You will need to build your source-code in an external directory called
  • ~/src/source-code-build
  • To do this
    1. Move up a directory
    2. cd ..
    3. Make a new directory with the same name as your source-code’s directory but suffix it with “build”
    4. mkdir DIRECTORY-build
    5. Enter this new directory
    6. cd DIRECTORY-build
    7. Then call the configure or make script.
    8. Use the instructions as provided for each build method listed above but prepend the first command (only the first command) with the directory path to the configure or make script in the source-code’s directory, for example

      ~/src/DIRECTORY/configure
      qmake ~/src/DIRECTORY/
      cmake ~/src/DIRECTORY/

When Things Go Wrong

Something usually goes wrong when the instructions are not read and followed correctly, if something does go wrong and the software fails to install you should check the terminal output for hints of where the installation failed (including the old “internal compiler error: Segmentation fault”) then install any missing dependencies before typing

make distclean
make confclean
sudo ldconfig

Retry the installation. If it still does not install, rerun the installation but use “sudo make” instead of “make”.

Whenever apt, aptitude, Synaptic or any other package manager is unable to install or uninstall software due to dependency conflicts or other issues created by another software package, you should remove the package that is causing problems by typing

dpkg -r PACKAGE-NAME

Your system will be left with unconfigured or partially configured software if your computer of package manager crashes while software is being installed so configure the software by typing

sudo dpkg --configure -a

The check that the software you were installing prior to the crash has been installed.
That magic command “dpkg -r PACKAGE-NAME” would have saved me two days of labor had I realized to use it when my computer had distribution upgrade problems. I suggest you remember it because it will get you out of many jams very quickly.

If the installation of one or more packages is blocking the installation of other packages then you should put the problem packages on “hold”. You can usually tell that packages are failing to install due to one or more problem packages because your package manager will state “X packages held back” or something similar to that. The problem package will be one of those that are not being held back. Use Aptitude to put it on hold and the other packages will miraculously become unheld and installable.

Put a package on hold with

sudo aptitude hold PACKAGE-NAME

or, use Aptitude’s graphical frontend. Start it with

sudo aptitude

then

  1. Press “Ctrl+T” to access the menu
  2. Press “Return”
  3. Use the arrow keys to navigate to the suspect package
  4. Press the “equals” key i.e “=” (the package to be held should now change color)
  5. Press “Ctrl+T” then press return

Any packages that are ready to install but were stuck due to the (now held) problem package will now install.

Segmentation Faults

These happen all too frequently. I’ve met my fair share of them and have found several solutions. If you get any installation errors that look like these:

Ouch! Got SIGSEGV, dying..
Segmentation fault

Segmentation faulty tree… 50%

or just the plain old

Segmentation fault

Or your package manager nearly starts but crashes just before it fully loads then you will need to use one of these solutions

  • Open terminal and type
    sudo ldconfig
  • If that doesn’t work, type
    sudo rm /var/cache/apt/*.bin
  • Then use apt-get remove to uninstall your package manager
  • Finally, use apt-get install to re-install your package manger

Sharing is caring!

Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

6 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
6
0
Would love your thoughts, please comment.x
()
x