360 lines
6.3 KiB
HTML
360 lines
6.3 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>Hands On</TITLE
|
|
><META
|
|
NAME="GENERATOR"
|
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
|
|
REL="HOME"
|
|
TITLE="Debian Binary Package Building HOWTO"
|
|
HREF="index.html"><LINK
|
|
REL="PREVIOUS"
|
|
TITLE="Package Structure"
|
|
HREF="x60.html"><LINK
|
|
REL="NEXT"
|
|
TITLE="Double Check"
|
|
HREF="x121.html"></HEAD
|
|
><BODY
|
|
CLASS="sect1"
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#840084"
|
|
ALINK="#0000FF"
|
|
><DIV
|
|
CLASS="NAVHEADER"
|
|
><TABLE
|
|
SUMMARY="Header navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TH
|
|
COLSPAN="3"
|
|
ALIGN="center"
|
|
>Debian Binary Package Building HOWTO</TH
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="left"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="x60.html"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="80%"
|
|
ALIGN="center"
|
|
VALIGN="bottom"
|
|
></TD
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="right"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="x121.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"></DIV
|
|
><DIV
|
|
CLASS="sect1"
|
|
><H1
|
|
CLASS="sect1"
|
|
><A
|
|
NAME="AEN88"
|
|
></A
|
|
>4. Hands On</H1
|
|
><P
|
|
> Now it is time to get practical ourselves.
|
|
I have a simple shell script named 'linuxstatus' which I want to install
|
|
as '/usr/bin/linuxstatus'.
|
|
|
|
So first let's create a directory named 'debian' next to the file 'linuxstatus'.
|
|
</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><FONT
|
|
COLOR="#000000"
|
|
><PRE
|
|
CLASS="screen"
|
|
> $ mkdir -p ./debian/usr/bin
|
|
$ cp linuxstatus ./debian/usr/bin
|
|
</PRE
|
|
></FONT
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><DIV
|
|
CLASS="sect2"
|
|
><H2
|
|
CLASS="sect2"
|
|
><A
|
|
NAME="AEN92"
|
|
></A
|
|
>4.1. control</H2
|
|
><P
|
|
> Let's start with the control file. The version number must have a dash with
|
|
an additional Debian package version number, e.g. '1.1-1'. If your program consists
|
|
e.g. only of portable shell scripts, use 'all' as its 'Architecture'.
|
|
</P
|
|
><P
|
|
>
|
|
For 'Depends' you might need to find out to which package a certain file or program
|
|
your new package relies onto belongs to.
|
|
You can use 'dpkg -S <file>' for this to find this out, e.g.:
|
|
</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><FONT
|
|
COLOR="#000000"
|
|
><PRE
|
|
CLASS="screen"
|
|
> $ dkpg -S /bin/cat
|
|
coreutils: /bin/cat
|
|
</PRE
|
|
></FONT
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
> Then to find out more about package 'coreutils' you can use
|
|
the command 'apt-cache showpkg coreutils', which will tell you
|
|
among other things the current version number that is installed
|
|
on the system.</P
|
|
><P
|
|
>
|
|
As a side note, there are two more ways to find the same information.
|
|
There is a web page where you can search for Debian files: <A
|
|
HREF="http://www.debian.org/distrib/packages"
|
|
TARGET="_top"
|
|
>http://www.debian.org/distrib/packages</A
|
|
>.
|
|
Go to the bottom of that page to fill out the web form.</P
|
|
><P
|
|
>
|
|
Last not least there is a nice GUI application named 'kpackage',
|
|
which provides convenient package browsing options and also allows
|
|
to search after packages given individual file names.
|
|
</P
|
|
><P
|
|
>
|
|
'Suggests', 'Conflicts', and 'Replaces' etc. can be left out if not needed.
|
|
</P
|
|
><P
|
|
> So here is the result of our first 'control' file:
|
|
</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><FONT
|
|
COLOR="#000000"
|
|
><PRE
|
|
CLASS="programlisting"
|
|
>Package: linuxstatus
|
|
Version: 1.1-1
|
|
Section: base
|
|
Priority: optional
|
|
Architecture: all
|
|
Depends: bash (>= 2.05a-11), textutils (>= 2.0-12), awk, procps (>= \
|
|
1:2.0.7-8), sed (>= 3.02-8), grep (>= 2.4.2-3), coreutils (>= 5.0-5)
|
|
Maintainer: Chr. Clemens Lee <clemens@kclee.de>
|
|
Description: Linux system information
|
|
This script provides a broad overview of different
|
|
system aspects.</PRE
|
|
></FONT
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
> The 'control' file gets copied into a directory called 'DEBIAN' inside the other
|
|
'debian' directory.
|
|
</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><FONT
|
|
COLOR="#000000"
|
|
><PRE
|
|
CLASS="screen"
|
|
> $ mkdir -p debian/DEBIAN
|
|
$ find ./debian -type d | xargs chmod 755 # this is necessary on Debian Woody, don't ask me why
|
|
$ cp control debian/DEBIAN
|
|
</PRE
|
|
></FONT
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
> If you expect your package to have a bigger audience in the future
|
|
it might help to read this
|
|
<A
|
|
HREF="http://people.debian.org/~walters/descriptions.html"
|
|
TARGET="_top"
|
|
>Writing Debian package descriptions</A
|
|
>
|
|
article.
|
|
</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="sect2"
|
|
><H2
|
|
CLASS="sect2"
|
|
><A
|
|
NAME="AEN108"
|
|
></A
|
|
>4.2. dpkg-deb</H2
|
|
><P
|
|
> Now it is almost done. Just type:
|
|
</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><FONT
|
|
COLOR="#000000"
|
|
><PRE
|
|
CLASS="screen"
|
|
> $ dpkg-deb --build debian
|
|
dpkg-deb: building package `linuxstatus' in `debian.deb'.
|
|
$ mv debian.deb linuxstatus_1.1-1_all.deb
|
|
</PRE
|
|
></FONT
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
> Uh, that was all easier than expected. Now we just have to install this package on our box
|
|
and we are done:
|
|
</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><FONT
|
|
COLOR="#000000"
|
|
><PRE
|
|
CLASS="screen"
|
|
> root# dpkg -i ./linuxstatus_1.1-1_all.deb
|
|
</PRE
|
|
></FONT
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
> Type '<TT
|
|
CLASS="literal"
|
|
>linuxstatus</TT
|
|
>' or '<TT
|
|
CLASS="literal"
|
|
>ls -l /usr/bin/linuxstatus</TT
|
|
>' to see if it worked.
|
|
If you don't like your package any more, just type '<TT
|
|
CLASS="literal"
|
|
>dpkg -r linuxstatus</TT
|
|
>'
|
|
and check again that the package is deinstalled. If you install a newer version
|
|
you don't have to remove the old one first, thought.</P
|
|
><P
|
|
>
|
|
If you are curious about the version numbering scheme and
|
|
naming conventions for a Debian package, have a read at
|
|
<A
|
|
HREF="http://www.debian.org/doc/manuals/reference/ch-system.en.html#s-pkgname"
|
|
TARGET="_top"
|
|
>this section</A
|
|
> in <A
|
|
HREF="http://www.debian.org/doc/manuals/reference/reference.en.html"
|
|
TARGET="_top"
|
|
>The Debian Reference</A
|
|
>.
|
|
</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="NAVFOOTER"
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"><TABLE
|
|
SUMMARY="Footer navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="x60.html"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="index.html"
|
|
ACCESSKEY="H"
|
|
>Home</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="x121.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
>Package Structure</TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
>Double Check</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
> |