Revision as of 19:59, 7 August 2016

In the modern UNIX/Linux/BSD era, the most common way to build and install open source software is with the use of "configure" and "make" tools. This exercise provides an introduction to building

open-source software with those tools.

Prerequisite Knowledge

Students should be comfortable with: uncompressing source "tarballs", using the Linux commandline, using "su" (or "sudo") to gain root privileges, installing software packages with the native package manager

Learning Objectives

Student should be able to configure, build, and install software using the "configure" and "make" tools.

Background:

As an alternative to the below curl example, the htop project has one of the best build documentation files out there, and it is a relatively simple project.

Directions:

First, let's get started by opening a terminal window. You should be logged in as your normal (non-root) user. If you are not in your home directory, go there by typing:

cd ~

On Fedora, in GNOME, it will look something like this:

Preparing the system

Now, we need to make sure we have the software installed that will let us download, build, and install new software from source code. These tools are:

wget - a command-line tool to download files from the internet

libtool - a utility that helps to generate shared library files

make - a utility that parses Makefiles and starts the build

gcc - the GNU compiler collection

tar - a program used to make and unpack archive files

sed - a stream text editor utility that curl uses to configure

grep - a pattern matching utility that curl uses to configure

zlib - a compression library that curl detects and uses if present

Most (if not all) of these items should already be installed on your Linux system, but we'll make sure. In order to install software packages on Linux, you will need to use root privileges. You can either use "su" or "sudo" for this. Sudo is easier, but it requires that your user be configured in /etc/sudoers first. Ask your instructor if this is the case. Su works as long as you know the root password (it will ask you for it).

Now that we have these software tools installed, we will download the source code (curl) that we're going to be using today. At the command-line of your terminal, run:

wget http://curl.haxx.se/download/curl-7.43.0.tar.bz2

This will download "curl-7.43.0.tar.bz2" into your home directory. Next, unpack this source archive (also called a "tarball") using the tar command:

tar xvf curl-7.43.0.tar.bz2

The options to the tar command are:

x - eXtract

v - Verbose (show us what is happening)

f - File (we're working with a file. tar started life a long time ago writing to tape drives for backups, so we have to tell it we're working on modern files instead)

You should see a lot of files scroll by, and end up with a "curl-7.43.0" directory. Go into that directory:

cd curl-7.43.0

Answer these questions:

What did the `yum` command do?

Why did we need to use `su` or `sudo` to install packages?

What is a "tarball"? How can we tell if a file is a "tarball"?

Configuring and Building Source Code

Look at the files in the curl-7.43.0 directory with the `ls` command. This is the top-level of the source code tree for curl. There are a few files you should know about:

configure - This is the script that you will run to configure the curl source code to be built on your Linux system. Sometimes, configure needs to be generated from configure.ac (using a tool called `autoconf`), but this curl source tree already has a valid `configure` script.

configure.ac - This is the raw source file that is used to make the `configure` script. You will not need to touch it now, but you should open it in a text editor and compare it to the contents of `configure`.

Makefile - This is the file that tells `make` how to build the code. It is generated from Makefile.in by the `configure` script. Curl comes with a preconfigured `Makefile`, but `configure` will replace it.

Makefile.in - This is the source file that is used to make the `Makefile`. Open it in a text editor and compare it to the contents of `Makefile`.

TODO -finish

Answer these questions:

What utility generated `Makefile.in`?

Installing the code

TODO

Answer these questions:

TODO

Deliverables:

Answers and explanations for the questions in each section.

curl should successfully be installed in /opt/curl

Assessment:

Students can be graded on understanding the build & install process, as well as successful build and installation of curl from source code.

Criteria

Level 1 (fail)

Level 2 (pass)

Level 3 (good)

Level 4 (exceptional)

Understanding the build & install process

0-3 correct answers

3-6 correct answers

6-9 answers correct

All answers correct, with valid reasoning.

Successful build and installation of curl from source code

Code not built or installed

Student attempted to build, but could not install

Student built code, but did not install correctly into /opt/curl

Code is built and installed correctly into /opt/curl

Comments:

What should the instructor know before using this activity?

A basic familiarity with autotools generated configure and Makefiles is very helpful, though, not necessarily required.

Additional Information:

Knowledge Area/Knowledge Unit

Software Engineering (SE) / Tools and Environments

Topic

Software configuration management and version control

Level of Difficulty

Easy

Estimated Time to Completion

30 minutes to 1 hour

Materials/Environment

Internet access, computer (or VM) with Linux installed, student has account and root access (sudo is fine). Some commands reference Fedora, but can be converted to other Linux flavors.