Project

General

Profile

Building » History » Version 15

Bob Lightfoot, 2015-03-18 22:15

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
h3. Redhat
21
22 12 Bob Lightfoot
h2. 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 1 Adam Sutton
h2. 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 12 Bob Lightfoot
     create a user to do the building as
37
<pre>
38
$sudo useradd mock
39
$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 1 Adam Sutton
h2. 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
h2. Step by Step Building the RPM
66
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
      determine the commit id of the master branch
75
<pre>
76
$git show-ref --head
77
</pre>
78
79 14 Bob Lightfoot
      create the spec file for the next version note new and old are the date-revision strings
80 12 Bob Lightfoot
<pre>
81
$cp tvheadend-old.spec tvheadend-new.spec
82
</pre>
83
84
      open the new spec and edit as follows
85
      update the global commit string to match the current master commit
86
      change the version string to match the new being built
87
      change the git archive comment line to be the correct values commit tag and filename
88
      change the source0 filename also
89
      save the spec file for use later
90
<pre>
91
$vi tvheadend-new
92
</pre>
93
94
      switch to the git tvheadened master and export the archive file called for in the new spec to the ~/tvheadend folder
95
<pre>
96
$cd ~/git/tvheadend
97
$git archive 96898a66e96927e4ace9a637ea923fd9f514dd1d --format=tar --prefix=tvheadend/ | gzip > ../tvheadend-4.0.03182015.tar.gz
98
$mv ../tvheadend-4.0.03182015.tar.gz ~/tvheadend
99
</pre>
100
101
      mock setup
102
           {for Fedora you'll need to use the rpmfusion environment}
103 15 Bob Lightfoot
           {for centos you'll need to use nuxro's repos as an environment}
104 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
105
106
<pre>
107
[nux-dextop]
108
name=Nux.Ro RPMs for general desktop use
109
baseurl=http://li.nux.ro/download/nux/dextop/el7/$basearch/ http://mirror.li.nux.ro/li.nux.ro/nux/dextop/el7/$basearch/
110
enabled=1
111
gpgcheck=1
112
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-nux.ro
113
protect=0
114
115
[nux-dextop-testing]
116
name=Nux.Ro RPMs for general desktop use - testing
117
baseurl=http://li.nux.ro/download/nux/dextop-testing/el7/$basearch/
118
enabled=0
119
gpgcheck=1
120
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-nux.ro
121
protect=0
122
</pre>
123
124 15 Bob Lightfoot
      clean the mock build environment 
125 12 Bob Lightfoot
<pre>
126
$mock --init -r nux-7-x86_64
127
</pre>
128
129
      now build the previous version in the clean environment
130
<pre>
131
$mock -r nux-7-x86_64 --rebuild tvheadend-4.0.01012015-1.src.rpm
132
</pre>
133
134
      copy in the new source tar and spec files
135
<pre>
136
$mock -r nux-7-x86_64 --no-clean --copyin tvheadend-4.0.03182015.tar.gz builddir/build/SOURCES/
137
$mock -r nux-7-x86_64 --no-clean --copyin tvheadend-4.0.03182015-1.spec builddir/build/SPECS/tvheadend.spec
138
</pre>
139
140
       shell in and confirm new source and spec are present and then build new src.rpm
141
<pre>
142
$mock -r nux-7-x86_64 --no-clean --shell
143
<mock>$ls -lah builddir/build/SOURCES
144
<mock>$ls -lah builddir/build/SPECS
145
<mock>$rpmbuild -bs builddir/build/SPECS/tvheadend.spec
146
<mock>$exit
147
</pre>
148
149
       copy out the new src.rpm
150
<pre>
151
$mock -r nux-7-x86_64 --no-clean --copyout builddir/build/SRPMS/tvheadend-4.0.03182015-1.src.rpm ./
152
</pre>
153
154
       build the new version from the source rpm
155
<pre>
156
$mock -r nux-7-x86_64 --rebuild tvheadend-4.0.03182015-1.src.rpm
157
</pre>
158
159
       move the results to your working folder
160
<pre>
161
$cp /var/lib/mock/nux-7-x86_64/result/*.rpm ./
162
</pre>
163
164
h2. Install the RPM
165
<pre>
166
$ sudo yum install /home/mock/tvheadend/tvheadend-4.0.03182015-1.x86_64.rpm
167
</pre>
168
169 2 Adam Sutton
170
h3. Gentoo
171
172
TODO: this needs adding
173
174
h2. Get Source
175
176
Next you must obtain the source code, this is hosted on "github":https://github.com/tvheadend/tvheadend.
177
178
To clone the repository simple run the command:
179
180
<pre>
181
$ git clone https://github.com/tvheadend/tvheadend.git
182
</pre>
183
184
h2. Configuring
185
186
TVHeadend comes with a configuration script that allows you to enable/disable optional components and set install paths, etc.
187
188
Most people will be fine with the defaults and can run:
189
190
<pre>
191
$ ./configure
192
</pre>
193
194
However for more advanced options, please run the following:
195
196
<pre>
197
$ ./configure --help
198
</pre>
199
200
And then re-run configure with the required options, i.e.:
201
202
<pre>
203 10 John Törnblom
$ ./configure --disable-dvbscan
204 2 Adam Sutton
</pre>
205
206
h2. Compiling
207
208 3 Adam Sutton
To compile Tvheadend run:
209 2 Adam Sutton
210
<pre>
211
$ make
212
</pre>
213
214
h2. Installing
215
216 3 Adam Sutton
It is possible to install Tvheadend using make, based on the ./configure options, by running:
217 2 Adam Sutton
218
<pre>
219
$ sudo make install
220
</pre>
221
222 11 Adam Sutton
However it's recommend that you run from the build directory for development/testing (see [[Development]]):
223 2 Adam Sutton
224
<pre>
225
$ ./build.linux/tvheadend
226
</pre>
227
228 4 Adam Sutton
NOTE: its VERY important you run test builds from git root, so command should look similar to above.
229
230 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.
231 2 Adam Sutton
232
Use of make install is not very traceable and so removal can sometimes be painful, and it might overwrite an existing installation.
233
234
h2. Packaging
235
236 3 Adam Sutton
For more information about packaging Tvheadend please see [[Packaging|here]]
237 2 Adam Sutton
238
h2. Reporting Problems
239
240 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]].