File: 72-nomake.txt

package info (click to toggle)
debmake-doc 1.22-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 12,952 kB
  • sloc: makefile: 916; sh: 692; python: 202; ansic: 114; sed: 16
file content (154 lines) | stat: -rw-r--r-- 5,715 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// vim:set filetype=asciidoc:
[[nomakefile]]
=== No Makefile (shell, CLI)

Here is an example of creating a simple Debian package from a POSIX shell CLI program without its build system.

Let's assume this upstream tarball to be *debhello-0.2.tar.gz*.

This type of source has no automated means and files must be installed manually.

For example:
----
 $ tar -xzmf debhello-0.2.tar.gz
 $ cd debhello-0.2
 $ sudo cp scripts/hello /bin/hello
 ...
----

Let's get this source as tar file from a remote site and make it the Debian package.

.Download *debhello-0.2.tar.gz*
----
include::../examples/debhello-0.2_build-1/step000.slog[]
----

Here, the POSIX shell script *hello* is a very simple one.

.*hello* (v=0.2)
----
include::../examples/debhello-0.2_build-1/step101.slog[]
----

Here, *hello.desktop* supports the "`https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/[Desktop Entry Specification]`".

.*hello.desktop* (v=0.2)
----
include::../examples/debhello-0.2_build-1/step102.slog[]
----

Here, *hello.png* is the icon graphics file.

Let's package this with the *debmake* command.  Here, the **-b':sh'** option is used to specify that the generated binary package is a shell script.

----
include::../examples/debhello-0.2_build-1/step200.slog[lines=1..3]
 ...
include::../examples/debhello-0.2_build-1/step200.slog-sanity[]
 ...
----

Let's inspect notable template files generated.

.The source tree after the basic *debmake* execution. (v=0.2)
----
include::../examples/debhello-0.2_build-1/step201.slog[]
----

.*debian/rules* (template file, v=0.2):
----
include::../examples/debhello-0.2_build-1/step202.slog[]
----

This is essentially the standard *debian/rules* file with the *dh* command. Since this is the script package, this template *debian/rules* file has no build flag related contents.

.*debian/control* (template file, v=0.2):
----
include::../examples/debhello-0.2_build-1/step203.slog[]
----

Since this is the shell script package, the *debmake* command sets "`*Architecture: all*`" and "`*Multi-Arch: foreign*`".  Also, it sets required *substvar* parameters as "`*Depends: ${misc:Depends}*`".  These are explained in "`<<basics>>`".

Since this upstream source lacks the upstream *Makefile*, that functionality needs to be provided by the maintainer.  This upstream source contains only a script file and data files and no C source files; the *build* process can be skipped but the *install* process needs to be implemented.  For this case, this is achieved cleanly by adding the *debian/install* and *debian/manpages* files without complicating the *debian/rules* file.

Let's make this Debian package better as the maintainer.

.*debian/rules* (maintainer version, v=0.2):
----
include::../examples/debhello-0.2_build-1/step301.slog[]
----

.*debian/control* (maintainer version, v=0.2):
----
include::../examples/debhello-0.2_build-1/step302.slog[]
----

WARNING: If you leave "`*Section: unknown*`" in the template *debian/control* file unchanged, the *lintian* error may cause a build failure.

.*debian/install* (maintainer version, v=0.2):
----
include::../examples/debhello-0.2_build-1/step304.slog[]
----

.*debian/manpages* (maintainer version, v=0.2):
----
include::../examples/debhello-0.2_build-1/step305.slog[]
----

There are several other template files under the *debian/* directory.  These also need to be updated.

.Template files under *debian/*. (v=0.2):
----
include::../examples/debhello-0.2_build-1/step400.slog[]
----

You can create a non-native Debian package using the *debuild* command (or its equivalents) in this source tree.  The command output is very verbose and explains what it does as follows.

----
include::../examples/debhello-0.2_build-1/step500.slog[lines=1..13]
 ...
include::../examples/debhello-0.2_build-1/step500.slog-binary[]
 ...
include::../examples/debhello-0.2_build-1/step500.slog-tail[]
----

Let's inspect the result.

.The generated files of *debhello* version *0.2* by the *debuild* command:
----
include::../examples/debhello-0.2_build-1/step600.slog[]
----

You see all the generated files.

* The *debhello_0.2.orig.tar.gz* file is a symlink to the upstream tarball.
* The *debhello_0.2-1.debian.tar.xz* file contains the maintainer generated contents.
* The *debhello_0.2-1.dsc* file is the meta data file for the Debian source package.
* The *debhello_0.2-1_all.deb* file is the Debian binary package.
* The *debhello_0.2-1_amd64.build* file is the build log file.
* The *debhello_0.2-1_amd64.buildinfo* file is the meta data file generated by *dpkg-genbuildinfo*(1).
* The *debhello_0.2-1_amd64.changes* file is the meta data file for the Debian binary package.

The *debhello_0.2-1.debian.tar.xz* file contains the Debian changes to the upstream source as follows.

.The compressed archive contents of *debhello_0.2-1.debian.tar.xz*:
----
include::../examples/debhello-0.2_build-1/step701.slog[]
----

The *debhello_0.2-1_amd64.deb* file contains the files to be installed as follows.

.The binary package contents of *debhello_0.2-1_all.deb*:
----
include::../examples/debhello-0.2_build-1/step700.slog[]
----

Here is the generated dependency list of *debhello_0.2-1_all.deb*.

.The generated dependency list of *debhello_0.2-1_all.deb*:
----
include::../examples/debhello-0.2_build-1/step702.slog[]
----
(No extra dependency packages required since this is a POSIX shell program.)

NOTE: If you wish to replace upstream provided PNG file *data/hello.png* with maintainer provided one *debian/hello.png*, editing *debian/install* isn't enough.  When you add *debian/hello.png*, you need to add a line "`include-binaries`" to *debian/source/options* since PNG is a binary file. See *dpkg-source*(1).