Project

General

Profile

Building » History » Version 23

Bob Lightfoot, 2015-03-22 19:38

1 1 Adam Sutton
h1. Building
2
3 2 Adam Sutton
h2. Prerequisites
4
5 3 Adam Sutton
Before you can build Tvheadend you will need several packages installed on your development machine. 
6 2 Adam Sutton
7
The specific details will vary between distributions so we only cover the major ones here.
8
9
h3. Debian/Ubuntu
10
11
<pre>
12 7 Adam Sutton
$ sudo aptitude install build-essential git pkg-config libssl-dev bzip2 wget
13 2 Adam Sutton
</pre>
14
15
> Optional:
16
<pre>
17 9 John Törnblom
$ sudo aptitude install libavahi-client-dev zlib1g-dev libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
18 2 Adam Sutton
</pre>
19
20 17 Bob Lightfoot
h3. Redhat / Centos / Fedora
21 2 Adam Sutton
22 18 Bob Lightfoot
h4. Redhat/Centos/Fedora Build assumptions
23 13 Bob Lightfoot
24 12 Bob Lightfoot
<pre>
25
Redhat/Centos/Fedora are a package managed OS and as such tvheadend should be installed from an rpm on a production system.  
26
This set of instructions details using tools git, mock and rpmbuild to package the source into an rpm and then install the rpm
27
</pre>
28
29 18 Bob Lightfoot
h4. Build Environment Configuration
30 13 Bob Lightfoot
   
31
   install the software used for building tvheadened
32 12 Bob Lightfoot
<pre>
33
$sudo yum install git mock
34 1 Adam Sutton
</pre>
35 13 Bob Lightfoot
36 21 Bob Lightfoot
     create a user to do the building as -- this is not a requirement, but does provide a modicum of compartmentaliztion when building
37 12 Bob Lightfoot
<pre>
38 21 Bob Lightfoot
$sudo useradd -g mock mock
39 12 Bob Lightfoot
$sudo passwd mock
40 1 Adam Sutton
</pre>
41 13 Bob Lightfoot
42 12 Bob Lightfoot
     for more details view the Centos/Fedora Mock pages starting
43
     http://fedoraproject.org/wiki/Projects/Mock
44
45 18 Bob Lightfoot
h4. Getting the files to work with
46 13 Bob Lightfoot
47 12 Bob Lightfoot
    tvheadend sources are retrieved as follow
48
<pre>
49
$su mock
50
$mkdir git
51
$cd git
52
$ git clone https://github.com/tvheadend/tvheadend.git
53
</pre>
54
55
     create a workfiles holding directory
56
<pre>
57
$mkdir ~/tvheadend
58
</pre>
59
60
     you'll also need a starter source rpm and specfile found through one of the following in the ~/tvheadend folder:
61
     https://tvheadend.org/boards/4/topics/14666
62
     https://tvheadend.org/attachments/download/2823/tvheadend-4.0.01012015-1.src.rpm
63
     https://tvheadend.org/attachments/download/2738/tvheadend-4.0.01012015-1.spec
64
65 18 Bob Lightfoot
h4. Step by Step Building the RPM
66 12 Bob Lightfoot
67
     enter the local git repository and reset local to most current remote
68
<pre>
69
$cd ~/git/tvheadend
70
$git fetch origin
71
$git reset --hard origin/master
72
</pre>
73
74 22 Bob Lightfoot
      determine the commit id of the master branch - for ex. "e5dc86b3dd32f80c337da75cc0d2e00702c45fe1"
75 12 Bob Lightfoot
<pre>
76
$git show-ref --head
77
</pre>
78 1 Adam Sutton
79 22 Bob Lightfoot
      determine the version id of this build as well - for ex. "v3.9-2618-ge5dc86b"
80
81
<pre>
82
$git describe --dirty --match "v*"
83
</pre>
84
85
      create the spec file for the next version note new and old are the revision strings
86
      in this example tvheadend-new-spec would be tvheadend-3.9.2618-git.e5dc86b.1.spec
87 12 Bob Lightfoot
<pre>
88
$cp tvheadend-old.spec tvheadend-new.spec
89
</pre>
90
91
      open the new spec and edit as follows
92 23 Bob Lightfoot
      update the global commit string to match the current master commit - for ex. "e5dc86b3dd32f80c337da75cc0d2e00702c45fe1"
93
      change the version string to match the new being built - - for ex. version "3.9-2618" note the revision is automatic 
94
             except for the 1,2,3 or whatever patch might be applied
95 12 Bob Lightfoot
      change the git archive comment line to be the correct values commit tag and filename
96
      change the source0 filename also
97 19 Bob Lightfoot
      also modify the changelog to reflect the new version
98 12 Bob Lightfoot
      save the spec file for use later
99
<pre>
100 20 Bob Lightfoot
$vi tvheadend-new.spec
101 12 Bob Lightfoot
</pre>
102
103
      switch to the git tvheadened master and export the archive file called for in the new spec to the ~/tvheadend folder
104
<pre>
105
$cd ~/git/tvheadend
106
$git archive 96898a66e96927e4ace9a637ea923fd9f514dd1d --format=tar --prefix=tvheadend/ | gzip > ../tvheadend-4.0.03182015.tar.gz
107
$mv ../tvheadend-4.0.03182015.tar.gz ~/tvheadend
108
</pre>
109
110
      mock setup
111
           {for Fedora you'll need to use the rpmfusion environment}
112 15 Bob Lightfoot
           {for centos you'll need to use nuxro's repos as an environment}
113 12 Bob Lightfoot
      the /etc/mock/nux-7-x86_64.cfg can be created by adding following to the epel7.cfg and renaming as saved
114
115
<pre>
116
[nux-dextop]
117
name=Nux.Ro RPMs for general desktop use
118
baseurl=http://li.nux.ro/download/nux/dextop/el7/$basearch/ http://mirror.li.nux.ro/li.nux.ro/nux/dextop/el7/$basearch/
119
enabled=1
120
gpgcheck=1
121
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-nux.ro
122
protect=0
123
124
[nux-dextop-testing]
125
name=Nux.Ro RPMs for general desktop use - testing
126
baseurl=http://li.nux.ro/download/nux/dextop-testing/el7/$basearch/
127
enabled=0
128
gpgcheck=1
129
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-nux.ro
130
protect=0
131
</pre>
132
133 15 Bob Lightfoot
      clean the mock build environment 
134 12 Bob Lightfoot
<pre>
135
$mock --init -r nux-7-x86_64
136
</pre>
137
138
      now build the previous version in the clean environment
139
<pre>
140
$mock -r nux-7-x86_64 --rebuild tvheadend-4.0.01012015-1.src.rpm
141
</pre>
142
143
      copy in the new source tar and spec files
144
<pre>
145
$mock -r nux-7-x86_64 --no-clean --copyin tvheadend-4.0.03182015.tar.gz builddir/build/SOURCES/
146
$mock -r nux-7-x86_64 --no-clean --copyin tvheadend-4.0.03182015-1.spec builddir/build/SPECS/tvheadend.spec
147
</pre>
148
149
       shell in and confirm new source and spec are present and then build new src.rpm
150
<pre>
151
$mock -r nux-7-x86_64 --no-clean --shell
152
<mock>$ls -lah builddir/build/SOURCES
153
<mock>$ls -lah builddir/build/SPECS
154
<mock>$rpmbuild -bs builddir/build/SPECS/tvheadend.spec
155
<mock>$exit
156
</pre>
157
158
       copy out the new src.rpm
159
<pre>
160
$mock -r nux-7-x86_64 --no-clean --copyout builddir/build/SRPMS/tvheadend-4.0.03182015-1.src.rpm ./
161
</pre>
162
163
       build the new version from the source rpm
164
<pre>
165
$mock -r nux-7-x86_64 --rebuild tvheadend-4.0.03182015-1.src.rpm
166
</pre>
167
168
       move the results to your working folder
169
<pre>
170
$cp /var/lib/mock/nux-7-x86_64/result/*.rpm ./
171
</pre>
172
173 18 Bob Lightfoot
h4. Install the RPM
174 12 Bob Lightfoot
175 16 Bob Lightfoot
<pre>
176 1 Adam Sutton
$sudo yum install /home/mock/tvheadend/tvheadend-4.0.03182015-1.x86_64.rpm
177 16 Bob Lightfoot
</pre>
178 18 Bob Lightfoot
179 12 Bob Lightfoot
180 2 Adam Sutton
181
h3. Gentoo
182
183
TODO: this needs adding
184
185
h2. Get Source
186
187
Next you must obtain the source code, this is hosted on "github":https://github.com/tvheadend/tvheadend.
188
189
To clone the repository simple run the command:
190
191
<pre>
192
$ git clone https://github.com/tvheadend/tvheadend.git
193
</pre>
194
195
h2. Configuring
196
197
TVHeadend comes with a configuration script that allows you to enable/disable optional components and set install paths, etc.
198
199
Most people will be fine with the defaults and can run:
200
201
<pre>
202
$ ./configure
203
</pre>
204
205
However for more advanced options, please run the following:
206
207
<pre>
208
$ ./configure --help
209
</pre>
210
211
And then re-run configure with the required options, i.e.:
212
213
<pre>
214 10 John Törnblom
$ ./configure --disable-dvbscan
215 2 Adam Sutton
</pre>
216
217
h2. Compiling
218
219 3 Adam Sutton
To compile Tvheadend run:
220 2 Adam Sutton
221
<pre>
222
$ make
223
</pre>
224
225
h2. Installing
226
227 3 Adam Sutton
It is possible to install Tvheadend using make, based on the ./configure options, by running:
228 2 Adam Sutton
229
<pre>
230
$ sudo make install
231
</pre>
232
233 11 Adam Sutton
However it's recommend that you run from the build directory for development/testing (see [[Development]]):
234 2 Adam Sutton
235
<pre>
236
$ ./build.linux/tvheadend
237
</pre>
238
239 4 Adam Sutton
NOTE: its VERY important you run test builds from git root, so command should look similar to above.
240
241 3 Adam Sutton
And that you build a [[Packaging|package]] if you wish to install Tvheadend permanently and hook into the system start scripts etc.
242 2 Adam Sutton
243
Use of make install is not very traceable and so removal can sometimes be painful, and it might overwrite an existing installation.
244
245
h2. Packaging
246
247 3 Adam Sutton
For more information about packaging Tvheadend please see [[Packaging|here]]
248 2 Adam Sutton
249
h2. Reporting Problems
250
251 3 Adam Sutton
If you have problems with a custom compiled version of Tvheadend its important that any issue reports include details of the specific version of source you used. For more details please see [[bugreporting|here]].