Application Installation

64
Application Installation Guntis Bārzdiņš Ģirts Folkmanis Artūrs Lavrenovs Normunds Grūzītis

description

“Hello World” $ cat > hello.c #include int main() { printf("Hello World! "); return 0; } Ctrl/D $ gcc hello.c $ ./a.out Hello World! $ Cat bez parametriem konkatenē standarta ievadu

Transcript of Application Installation

Page 1: Application Installation

Application Installation

Guntis BārzdiņšĢirts Folkmanis

Artūrs LavrenovsNormunds Grūzītis

Page 2: Application Installation

“Hello World”

$ cat > hello.c#include <stdio.h>int main() { printf("Hello World!\n"); return 0;}Ctrl/D$ gcc hello.c$ ./a.outHello World!$

Page 3: Application Installation

GCC: the GNU Compiler Collection

Originally: GNU C Compiler (1987) Frontends for:

C: gcc (vs. GCC) C++: g++ More (ada, java, objective-c, fortran, …)

Backends for: x86, ia-64, ppc, m68k, alpha, hppa, mips, sparc, mmix, pdp-11, vax, …

Page 4: Application Installation

GCC: the GNU Compiler Collection.c .java ...

gcc gcj ...

AST

ASM

OBJ

EXE

Page 5: Application Installation

Compiling C programs

Involves at least four kinds of files: Regular source code files (*.c) Header files (*.h) Object files (*.o) Binary executables (*.out)

Other kinds of files: Libraries (*.a) Shared libraries (*.so)

Page 6: Application Installation

gcc: Usage

gcc foo.cpp Outputs a.out executable binary

gcc -Wall -pedantic foo.cpp bar.cpp baz.o -o foo -Wall: warns about legal but dubious code constructs, helps to catch

a lot of bugs early -pedantic: warns about non-portable (non-standard) constructs -o: outputs the executable to the specified file

The standard C library (libc) is linked by default To include other libraries, e.g. the math library: -lm

The static library m is located in libm.a

Page 7: Application Installation

Steps involved

1. Preprocessor (cpp)

2. Compiler (gcc)

3. Assembler (as)

4. Linker (ld)

Page 8: Application Installation

Combines the program’s object code with other object code to produce an executable binary file

The other object code can come from the Run-Time Library, other pre-compiled libraries, or object files that you have created

On a Unix system, the executable file is called a.out by default If any linking errors are thrown, no executable file will

be generated

Linking

Page 9: Application Installation

Translation Process

Page 10: Application Installation

Static Linking

libm.a

printf.o, fopen.o

Linker (ld)

foo.obar.o

libc.a

a.out

fully linked executable object file

Page 11: Application Installation

Merging Relocatable Object Filesinto an Executable Object File

main()m.o

int *ep = &ea()

a.o

int e = 7

headers

main()

a()

0system code

int *ep = &e

int e = 7

system data

more system code

int x = 15int y

system data

int x = 15

Relocatable Object Files Executable Object File

.text

.text

.data

.text

.data

.text

.data

.bss .symtab.debug

.data

uninitialized data .bss

system code

Page 12: Application Installation

Dynamic Linking

a.out

Linker

Linker

a.o b.o

libfoo.so (position independent shared object)

bar.o

OS Loader (execve)

Dynamic Linker(ld-linux.so)

partially linked executable:dependency on libfoo.so

fully linked executable in memory

-fPIC

Page 13: Application Installation

Creating a static library

Indexed archive with *.o files Static library for linking: libsomething.a

Create .o files: gcc -c helper.c Create an archive: ar rlv libsomething.a *.o Generate index: ranlib libsomething.a == ar s Link the library: gcc -L/your/dir -lsomething

Page 14: Application Installation

Creating a dynamic library

Details differ for each platform gcc -shared -fPIC -o libhelper.so *.o

Linking: the same approach as for static (-llibrary) Also via $LD_LIBRARY_PATH, but:

Today used rarely and sometimes disabled completely Security and compatibility issues Replaced by ldconfig /etc/ld.so.conf

Page 15: Application Installation

Distribution software management systems provide libraries that the installed software depend on

Mostly dynamic libraries Some static libraries – mostly for development Or just to be safe, provide both

Library distribution

Page 16: Application Installation

Program development using gcc

Source File pgm.c

Program Object Code File pgm.o

Executable File a.out

Preprocessor

Modified Source Code (in RAM)

Compiler

Linker

Other Object Code Files (if any)

Editor

Page 17: Application Installation

Unix SW development environments GNU Emacs (1985) Kdevelop, Eclipse, Netbeans Xcode Vim (1991) Geany

Page 18: Application Installation

Other programming tools

There are tools to ease the single programmer development of modular projects (make)

There are version control systems for multi programmer projects: CVS, SVN, Git Git: a distributed revision control system with an emphasis on speed,

data integrity initially designed and developed by Linus Torvalds (2005) for the Linux kernel development

There are packaging tools to ease installing programs: Tarball, RPM, DEB, ...

Page 19: Application Installation

GNU make utility

If in a directory full of C files there is a text file with the default name makefile then running make will cause it to be used by the make program.

The power of make is that it examines timestamps.

If a change is made only to part2.c and make runs again, only part2.c is compiled. The linker links the old part1.o, old main.o and the new part2.o to make the final program.

Can be used to solve many other timestamp-based issues.

Page 20: Application Installation

Makefiles

• When programming large applications:– It is better to modularise– Keep individual source files small– Instead of one large file

• Difficult to edit• Slow to compile

– Tiresome to do manually (repeatedly)– Use a Makefile

Page 21: Application Installation

Example Makefile

• Consider a program contained in two separate source files:– main.c– sum.c– Both include a header sum.h

• Require the executable file to be named sum• A simple makefile can be used (see the next slide)

Page 22: Application Installation

Example Makefile

# Makes sumsum: main.o sum.o

gcc –o sum main.o sum.omain.o: main.c sum.h

gcc –c main.csum.o: sum.c sum.h

gcc –c sum.c

Comment

Dependency

Action

Dependency line starts with a target at column 0Action line begins with a TAB followed by a command line

Dependency + Action = Rule

Page 23: Application Installation

make (1976)

Searches the current directory for GNUmakefile/BSDmakefile, makefile, Makefile Runs the specified (or default) target(s) make [–f makefile] [target]

Declarative: necessary end conditions are described but the order in which the actions are to be taken is not specified Maintains dependency graphs (topological sorting of a DAG)

Based on modification times If node newer than child, remake child

Page 24: Application Installation

make variables and macros

Environment variables are available as $(PATH) etc. Macros can be composed of shell commands by using the

command substitution operator (backticks) Predefined internal macros aka. automatic variables:

$@ name of current target$? list of dependencies newer than target$< name of dependency file$* base name of current target$% for libraries, the name of member

Page 25: Application Installation

More on make rules Implicit or suffix rules

CC = gccCFLAGS = -g# The special fake target for suffixes.SUFFIXES: .o .c# .c to .o compilation.c.o: $(CC) $(CFLAGS) -c $<

Pattern rules Target contains exactly one character % for matching file names Prerequisites likewise use % to show how their names relate to the target

# From html to txt%.txt: %.html lynx -dump $< > $@

Page 26: Application Installation

all: hello cleanclean:rm –f *.o

helper.o: helper.c $(CC) $(CFLAGS) -o $@ $< OBJ = helper.o \ hello.ohello: $(OBJ)$(CC) $(CFLAGS) $(LDFLAGS) –o $@ $(OBJ)

make all

Page 27: Application Installation

The general routine Installing software from the source code generally

involves the following three steps: Configuring the makefile

Generating the makefiles before the compilation to tailor it to the system on which the executable is to be compiled and run

Compiling the code Installing the executables in the appropriate places

./configure make make install

Page 28: Application Installation

Revision management

Diffutils Find differences among files (diff and diff3) Update a set of files from generated differences (patch)

CVS Maintains a history of changes for groups of files

Including: who, when, what, and optionally why Newer alternative: subversion (SVN)

git – the Linux way

Page 29: Application Installation

CVS, Concurrent Versions System

Modify source code locally until it’s ready to be merged with what everyone sees

Multiple people can modify the same file and be ok

Develop multiple versions of software simultaneously And merge these branches later on

Recall past versions of code base Based on time ago or version

See committer's comments on their changes

Client/Server

Page 30: Application Installation

git

Linux kernel needed SCM after the proprietary system BitKeeper withdraw the free licence

Requirements: distributed workflow, speed, safety, open source A non-existent set of features at that time

Created by Linus Torvalds in 2005 Taking CVS as an example of what not to do

If in doubt, make the exact opposite decision ;)

Now de-facto SCM for the UNIX development

Locally stored full repository (revision history)

Page 31: Application Installation

Packaging approaches:source vs. binary

A software package: a software that is built from source with a package management system (PMS)

Two fundamentally different approaches for packaging-based software distributions:

Providing source packages containing the vendor sources plus instructions for automated build and installation

Providing binary packages containing the final installation files only

Most PMS support both approaches, although often not equally well

source package

binary package

distribution size package size package dependencies

installation reproducability

installationrun-time stability

installation system alignment

installation time

Page 32: Application Installation

Dependency management is a very helpful feature of package management systems

Keeps the system in a consistent state and guarantees the applications to run in the expected way

rpm or dpkg commands have limited dependency management features

They can report which library a package relies on, but the library can itself rely on other packages…

Repository-based PMS try to solve the dependency hell problem, however, the hell is still faced by the repository maintainers

Dependencies

Page 33: Application Installation

Main package distribution formats in Linux

There is no standard package manager in Linux Main package management systems:

Tarball files (.tar.gz / .tar.bz2) The old-fashioned way of distributing software in Linux/Unix Usually available for open source projects on their web pages Compatible with all distros The main package manager in Slackware, Gentoo

RPM (RedHat Package Manager) (.rpm) Has been adopted by many other distributions (Fedora, Mandrake, SUSE)

DEB (Debian Package Manager) (.deb) The most popular Linux package format

Page 34: Application Installation

Installing from Tarball files Software packages coming in source code archives have to be

compiled before installed Usually come in .tar.gz or .tar.bz2 archives

Preserve file system parameters: timestamps, ownership, permissions etc. Unpack the "tape archive":

tar xvf <package_name>.tar tar xzvf <package_name>.tar.gz tar xjvf <package_name>.tar.bz2

cd <package_name> Configure, compile, install:

./configure make make install

README and INSTALL files are typically included

Page 35: Application Installation

Originally: backup tools tar

-c: create -x: extract -z: use gzip compression -j: use bzip2 compression -v: verbose -f: use file

gzip compression is used in tarballs .tar.gz, .tgz and .tar.Z gzip file: compress file, renaming file to file.gz gunzip file.gz: uncompress file, renaming file.gz to file

bzip2 compression which is slightly better but requires more CPU is used in tarballs .tar.bz2 and .tbz2 bzip2 file: compress file, renaming file to file.bz2 bunzip2 file.bz2: uncompress file, renaming file.bz2 to file

Page 36: Application Installation

Apache example (historic)1. gunzip apache_xxx.tar.gz2. tar -xvf apache_xxx.tar3. gunzip php-xxx.tar.gz4. tar -xvf php-xxx.tar5. cd apache_xxx6. ./configure --prefix=/www --enable-module=so7. make8. make install9. cd ../php-xxx

10. Now, configure your PHP. This is where you customize your PHP with various options, like which extensions will be enabled. Do a ./configure --help for a list of available options. In our example we'll do a simple configure with Apache 1 and MySQL support. Your path to apxs may differ from our example.

./configure --with-mysql --with-apxs=/www/bin/apxs

11. make12. make install

If you decide to change your configure options after installation, you only need to repeat the last three steps. You only need to restart apache for the new module to take effect. A recompile of Apache is not needed. Note that unless told otherwise, 'make install' will also install PEAR, various PHP tools such as phpize, install the PHP CLI, and more.

Page 37: Application Installation

Managing software in RedHat-based distros

Packages are installed using the rpm command-line utility Install a package

rpm -i <package_name>.rpm Update an existing package

rpm -U <package_name>.rpm Remove a package

rpm -e <package_name>

yum –Yellowdog Updater, Modified Repository-based package management utility for RPM Used by most rpm-based distros: RHEL, Fedora, CentOS, etc. Solves dependency and update issues Install package and all its dependencies from repository:

yum -y install <package_name>

Page 38: Application Installation

Three ways to manage packages in Debian

dpkg: used on .deb files (like rpm) Standard Unix archives that include 2 tar archives: one holds the control

information and another contains the program data Install: dpkg -i <package_name>.deb

If an older version of the package is installed it updates it automatically by replacing it with the new one

Remove: dpkg -r <package_name>

dselect: a front-ent to dpkg, superseded by APT

apt-get: a front-end to dpkg,the most frequent way of managing software packages in Debian

Install: apt-get install <package_name> Remove: apt-get remove <package_name>

Page 39: Application Installation

Package management: features Using RPM

Install or upgrade a package: rpm -Uvh <package>-1.0.i386.rpm Remove a package: rpm -e <package>-1.0 Determine the version of a package you have installed: rpm -qa | grep <package> Determine the package a file belongs to: rpm -qf <file>

Using APT Update your package lists: apt-get update Install all updated packages: apt-get dist-upgrade Install a package: apt-get install <package> Upgrade a package: apt-get upgrade <package> Remove a package (and packages that depend on it): apt-get remove <package> Search for a package: apt-cache search <name>

Page 40: Application Installation

Other Packaging Methods

emerge in Gentoo Linux Deals mostly with source files

Fetches packages and compiles them according to compilation parameters given in /etc/make.conf

e.g. emerge kde #Fetches, compiles and installs packages for KDE

YAST in Suse

Aptitude – a "replacement" for apt-get Better dependency managment and state tracking Less broken systems and unsuccessful installs

Page 41: Application Installation

Gentoo Portage The emerge command-line tool is the key tool Provides ebuild scripts that download, patch, compile, and install

packages

Modeled on the ports-based BSD distributions Used also in Chrome OS

Source code tarballs are downloaded No need to wait for someone to make a binary package for your distribution

Dependency checking, extreme customization

Users specify what they want, and the system is built to their needs Compilers are optimized for the specific hardware

e.g. Altivec on G4 PPC chips, Pentium versus Athlon

Page 42: Application Installation

Portage tree

A collection of ebuilds, files that contain all information Portage needs to maintain software install, search, query, ... ebuilds reside in /usr/portage/ by default

The Portage tree is usually updated with rsync: $ emerge --sync $ emerge-webrsync

To search for all packages who have "pdf" in their name: $ emerge search pdf

Page 43: Application Installation

Evaluation of application

Edit RPM Specification

(.spec)

Commit RPM Specification

to CVS

Checkout RPM Specification

from CVS

Fetch Vendor Sources

Roll Source RPM Package

Store Source RPM into

Repository

Fetch Source RPM from Repository

UnpackSource RPM

Unpack Vendor Sources

Configure & Build Application

Install Application

Store BinaryRPM into

Repository

Roll Binary RPM Package

Fetch Binary RPM from Repository

Install Application

into Instance

RemoveApplication

from Instance

upgrade

END

BEGIN

Track Vendor Sources

Package lifecycledeveloper

administrator

Page 44: Application Installation

On-line package repositories Large package bases on the Web

Accessible via FTP or HTTP

http://rpm.pbone.net http://www.apt-get.org

Page 45: Application Installation

You can learn how to build Your own distributionhttp://www.linuxfromscratch.org

Page 46: Application Installation
Page 47: Application Installation
Page 48: Application Installation
Page 49: Application Installation
Page 50: Application Installation
Page 51: Application Installation
Page 52: Application Installation
Page 53: Application Installation

Using rpm

rpm –i install package, check for dependencies

rpm –e erase package rpm –U upgrade package rpm –q query packages (e.g., -a = all)

Page 54: Application Installation

rpm -qrpm -q -i telnetName : telnet Relocations: (not relocateable)Version : 0.17 Vendor: Red Hat, Inc.Release : 18.1 Build Date: Wed Aug 15 15:08:03 2001Install date: Fri Feb 8 16:50:03 2002 Build Host: stripples.devel.redhat.comGroup : Applications/Internet Source RPM: telnet-0.17-18.1.src.rpmSize : 88104 License: BSDPackager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>Summary : The client program for the telnet remote login protocol.Description :Telnet is a popular protocol for logging into remote systems over theInternet. The telnet package provides a command line telnet client.

Install the telnet package if you want to telnet to remote machines.

This version has support for IPv6.

Page 55: Application Installation

Building your own rpm: spec

# # spec file for hello world app# Summary: hello worldName: helloVersion: 1.0 Release: 1Copyright: GPL Group: Applications/TestSource: http://www.cs.columbia.edu/IRT/software/URL: http://www.cs.columbia.edu/IRT/software/Distribution: Columbia UniversityVendor: IRTPackager: Henning Schulzrinne <[email protected]>BuildRoot: /home/hgs/src/rpm

%description The world's most famous C program.

Page 56: Application Installation

Building your own rpm: spec

%preprm -rf $RPM_BUILD_DIR/hello-1.0zcat $RPM_SOURCE_DIR/hello-1.0.tgz | tar -xvf -

%buildmake

%installmake ROOT="$RPM_BUILD_ROOT" install

%files%doc README/usr/local/bin/hello/usr/local/man/man1/hello.1

%clean

Page 57: Application Installation

Building your own rpm

create ~/.rpmmacros%_topdir /home/hgs/src/test/rpm

cd /home/hgs/src/test/rpm/SPECS rpm -ba --buildroot /home/hgs/tmp hello-1.0.spec creates binary and source RPM

Page 58: Application Installation

Most popular package manager in the world APT is a system created in the Debian

community to automatically manage the packages dependencies

APT can install, remove and upgrade packages, managing dependencies and downloading the packages

It’s a frontend to other tools, and it uses the underlying package management system, like the rpm or dpkg commands

It’s able to fetch packages from several media (cdrom, ftp, http, nfs), and it can be used to create ad-hoc software repositories

APT

Page 59: Application Installation

APT – Using (1/3)

[root]@[/] # apt-get install nautilusReading Package Lists... DoneBuilding Dependency Tree... DoneThe following extra packages will be installed: bonobo libmedusa0 libnautilus0The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus0 packages upgraded, 4 newly installed, 0 to remove and 1

not upgraded.Need to get 8329kB of archives. After unpacking 17.2MB

will be used.Do you want to continue? [Y/n]

Page 60: Application Installation

APT – Using (2/3)

[root]@[/] # apt-get remove gnome-panelReading Package Lists... DoneBuilding Dependency Tree... DoneThe following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-

session0 packages upgraded, 0 newly installed, 4 to remove and 1

not upgraded.Need to get 0B of archives. After unpacking 14.6MB will be

freed.Do you want to continue? [Y/n]

Page 61: Application Installation

APT – Using (3/3)

[root]@[/] # apt-cache search pdfkghostview - PostScript viewer for KDEtetex - The TeX text formatting system.xpdf - A PDF file viewer for the X Window System…

[root]@[/] # apt-cache show xpdf…Filename: xpdf-1.00-3.i386.rpmDescription: A PDF file viewer for the X Window System.Xpdf is an X Window System based viewer for Portable

Document Format (PDF) files. Xpdf is a small and efficient program which uses standard X fonts.

Page 62: Application Installation

FreeBSD – Hybrid package management Binary packages

Uses FreeBSD repositories Common ./configure options for compilation pkg_add -r <package_name> pkg_info pkg_delete <package_name>\* Rather simplistic, no updates

pkg_delete <package_name>pkg_add -r <package_name>

pkgng – new generation pkgsolves lots of issuesnew advanced functionality

Page 63: Application Installation

FreeBSD – Ports Collection (Source packages)

Download snapshot (index) of ports collection from FreeBSD mirrors portsnap fetch

Extract index as directory tree to /usr/ports portsnap extract

Install software package cd /usr/ports/*/lighttpd make install clean Downloads and installs (compiles) tarballs (also all

dependencies) Asks for configuration options (frontend for ./configure)

Page 64: Application Installation

FreeBSD – what is Port?

Contents of directory in /usr/ports/<cat>/<name>

Some info files Dependency list Link to download original tarball from developer site

List of tarball files and SHA256 Patch files Configuration files Configuration options Makefile which does all the work