package managershsinmu/courses/_media/nasa... · 2012. 12. 3. · homework – build a meta package...

54
Package Managers What are they and why we use them

Upload: others

Post on 08-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package Managers What are they and why we use them

Page 2: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Thoughts of an admin

Installing software is painful

Installing a lot of software is extremely painful

Installing a lot of software on a lot of machines is HELL

Page 3: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

舉例 - LOL

天賦、符文

道具

Page 4: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Before Packages

Install from source

Time consuming

Varying configuration

Page 5: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Improvement 1

Copy the binaries

Setup scripts?

Version?

Dependencies?

Page 6: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package - Basic

Archive

Binaries

Supporting files

Setup script

Page 7: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package – Improvement

Versioning

◦ 1.0.x

◦ 1.1.x

◦ …

Upgrades!

Page 8: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package - Dependencies

Program A requires library B to work

If library C is available, program A will work better/faster!

Page 9: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Example – Call of Duty

Requires: DirectX

Works better with: PhysX

Page 10: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package Managers Low Level Unpacking packages

Run configuration scripts

Dependency checks

Page 11: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package Managers High Level Fetch from remote repositories

Search

Install additional packages to meet dependencies

Handle complex upgrades

Page 12: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package Repository

Collection of packages

Maintained by distribution

Multiple versions

Index

Page 13: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package Managers RPM Based DEB Based

Low level RPM Dpkg

High level YUM, up2date, … APT

Page 14: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

DEBIAN DPKG & APT

Focus on

Page 15: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Types of Packages

Binary Package

Meta Package

Virtual Package

Page 16: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Binary Package

Normal package

Source is available

Architecture

◦ Dependent

Compiled binary files

◦ Independent

Scripts

Documents

Data files

Page 17: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Meta Package

Depends on other packages only

Rename

◦ git-core -> git

Default version

◦ gcc -> gcc-4.6

◦ Python -> python2.7

Can be creative!

Page 18: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Virtual Package

Does not really exist

Names common functionality

Other binary packages “provide” a virtual package

c-compiler is provided by

◦ gcc

◦ gcc-4.6

◦ clang

Page 19: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Commonly Used Commands

apt-get

apt-cache

aptitude

◦ Frontend to the first 2 commands

Page 20: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Search for a package

apt-cache search ^vim$

Search pattern

State flags

Page 21: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Search Patterns

Patterns are regular expressions

Aptitude supports complex patterns

◦ See reference

Search requires guessing

◦ Just like Googling

Page 22: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Differences

Aptitude and apt-cache have slighty different behavior

◦ Aptitude looks at package name only

◦ Apt-cache looks at description as well

Page 23: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

State Flags

i Installed

c Removed

p Purged

v Virtual package

B Broken dependencies

u Unpacked

C Half-configured

H Half-installed

Page 24: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Try it!

You want to install a web server. What do you look for?

What should you actually install?

Page 25: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Looking at a package

Web interface

◦ http://packages.debian.org

CLI

◦ apt-cache show XXX

◦ aptitude show XXX

Debian Control File

Try it now!

Page 26: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80
Page 27: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package Info

Name

State

Version

Priority

Section

Maintainer

Architecture

Dependencies

Description

Page 28: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package Info - State

installed

not installed

removed

Page 29: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package Info - Version

Vim: 2:7.3.547-6

2: -> Epoch

7.3.547 -> Upstream version

-6 -> Debian package revision

Page 30: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Package Info - Priority

Required

Important

Standard

Optional

Extra

Page 32: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Installing / Removing

apt-get install XXX

aptitude install XXX

remove/purge

hold/unhold

upgrade

dist-upgrade

Page 33: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

remove vs. purge

Remove keeps config files in system

Purge = Remove + delete config files

Page 34: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

hold/unhold

Keep a package at a specific state/version unless explicitly request otherwise

Page 35: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

upgrade vs. dist-upgrade

upgrade only updates currently installed packages

dist-upgrade will do anything to satisfy all new dependencies

Page 36: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Try it now!

Install a web server

Then remove it

See that config files are still there

Then purge it

Page 37: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

MAKING A PACKAGE

Page 38: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Why?

Customize

Software not packaged yet

◦ Become a maintainer?

Build your own

Page 39: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Making your first package

Basic structure

◦ package/XXX

Files you want to package

◦ package/DEBIAN/control

Debian control file

◦ package/DEBIAN/xxx

Package scripts, other control files

dpkg-deb –b package

Page 40: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Homework – Build a meta package Name: nasa-hw

Should always install ◦ gcc no older than 4.7

◦ make newer than 3.80

Should not install when ◦ clang is installed

Maintainer: Your ID <your email>

Use your judgment for other fields ◦ Read the documents!

Submit .deb file

Page 41: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Too simple?

Debian related source code

◦ source/debian/rules

◦ source/debian/control

◦ source/debian/changelog

◦ source/debian/…

Page 43: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Packages for packaging

build-essential

dpkg-dev

debhelper

CDBS

dh_make

lintian

Page 44: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

build-essential

Meta package that depends on essential tools for packaging

You need to install additional tools/libraries

◦ debhelper, cdbs, …

◦ lib*-dev

Page 45: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

dpkg-dev

Basic tools for package development

dpkg-buildpackage

Page 46: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Debhelper

Collection of commands to assist packaging

Wraps complex steps

◦ Splitting files between different packages

◦ Generating shared library dependencies

◦ Generate and sign binary packages

◦ …

Page 48: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

dh_make

Prepare source code for packaging

Always uses debhelper

Supports CDBS

Page 49: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

lintian

Check packages for errors

Page 50: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Steps to packaging

http://www.debian.org/doc/manuals/maint-guide/first.en.html

1. Get source code

2. Unpack

3. dh_make

4. Install build dependencies

5. Check control file

6. Check installation paths

7. Build package ◦ dpkg-buildpackage -b

Page 51: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Homework

Build a package of “Omnitty”

◦ http://omnitty.sourceforge.net/

You will also need to build a package for “ROTE”

◦ http://omnitty.sourceforge.net/

Build it, install it, and try it out

Submit .deb for omnitty

Page 52: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

Tips

Packages you can look at

◦ libevent

◦ screen

◦ tmux

◦ make

Page 53: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

HOMEWORK RECAP

Page 54: Package Managershsinmu/courses/_media/nasa... · 2012. 12. 3. · Homework – Build a meta package Name: nasa-hw Should always install gcc no older than 4.7 make newer than 3.80

nasa-hw meta package

omnitty binary package

Leave your packages on 217 workstation

◦ Mail the path of your package to wens_at_csie.org

Start sooner! You need to do research to finish this assignment.