0:00:00.000,0:00:05.000 The next talk is packaging for beginners 0:00:05.000,0:00:07.000 by Gergely Nagy 0:00:11.000,0:00:13.000 This talk will be, 0:00:13.000,0:00:15.000 about packaging in a 0:00:15.000,0:00:17.000 much, different style than 0:00:17.000,0:00:19.000 most would expect. 0:00:19.000,0:00:21.000 So, first of all 0:00:21.000,0:00:23.000 who amoung you have 0:00:23.000,0:00:25.000 read the new maintainers guide 0:00:25.000,0:00:27.000 or, the packaging guide or 0:00:27.000,0:00:29.000 any of that stuff? 0:00:29.000,0:00:31.000 How many of you 0:00:31.000,0:00:33.000 enjoyed it? [laughter] 0:00:33.000,0:00:35.000 [laughter] 0:00:35.000,0:00:37.000 Alright, well that's 0:00:37.000,0:00:39.000 because they are very dry 0:00:39.000,0:00:41.000 and to make 0:00:41.000,0:00:43.000 this talk, better and useful 0:00:43.000,0:00:45.000 I will ignore everything that is written in 0:00:45.000,0:00:47.000 them. [laughter] I would advise you 0:00:47.000,0:00:49.000 to do the same because they are very 0:00:49.000,0:00:51.000 useful once you know, what 0:00:51.000,0:00:53.000 you are doing but when you are 0:00:53.000,0:00:55.000 trying 0:00:55.000,0:00:57.000 your first steps, they are 0:00:57.000,0:00:59.000 an awful, boring 0:00:59.000,0:01:01.000 piece of something. 0:01:01.000,0:01:03.000 So, we will 0:01:03.000,0:01:05.000 do something very different today. 0:01:05.000,0:01:07.000 Another question, how 0:01:07.000,0:01:09.000 many of you have read the policy 0:01:09.000,0:01:11.000 from beginning to end? 0:01:13.000,0:01:15.000 ok, congratulations! 0:01:15.000,0:01:17.000 1 person, how many 0:01:17.000,0:01:19.000 of you tried to read 0:01:19.000,0:01:21.000 the policy ? 0:01:21.000,0:01:23.000 How many of you got bored 0:01:23.000,0:01:25.000 after the first 5 minutes? 0:01:25.000,0:01:27.000 Yes, 0:01:27.000,0:01:29.000 because the poilcy is not meant to be 0:01:29.000,0:01:31.000 read from begining to 0:01:31.000,0:01:33.000 end. You look at it 0:01:33.000,0:01:35.000 trying to find things when lintian, 0:01:35.000,0:01:37.000 yells at you. 0:01:37.000,0:01:39.000 So, that's what we will do 0:01:39.000,0:01:41.000 today. 0:01:43.000,0:01:45.000 I have one small announcement 0:01:45.000,0:01:47.000 to make, 0:01:47.000,0:01:49.000 I have bad news. I promised 0:01:49.000,0:01:51.000 ponies but it turns out 0:01:51.000,0:01:53.000 ponysay is not 0:01:53.000,0:01:55.000 free software. At, least 0:01:55.000,0:01:57.000 the data is not. 0:01:57.000,0:01:59.000 So, this talk we will 0:01:59.000,0:02:01.000 package something entirely different, 0:02:01.000,0:02:03.000 but since I promised ponies! 0:02:03.000,0:02:05.000 Here is one I drew, 0:02:05.000,0:02:07.000 today. 0:02:07.000,0:02:09.000 Doesn't look 0:02:09.000,0:02:11.000 like a pony! but. 0:02:13.000,0:02:15.000 Okay. 0:02:15.000,0:02:17.000 So, let's look at 0:02:17.000,0:02:19.000 what we will be packaging today. 0:02:19.000,0:02:21.000 It's a little program I 0:02:21.000,0:02:23.000 wrote. 0:02:23.000,0:02:25.000 Fit for, 0:02:25.000,0:02:27.000 Debian's 20th birthday! 0:02:27.000,0:02:29.000 The cake 0:02:29.000,0:02:31.000 is a lie, 0:02:31.000,0:02:33.000 appearently it isn't, but 0:02:33.000,0:02:35.000 it's an ASCII art so it doesn't 0:02:35.000,0:02:37.000 look like a cake. 0:02:37.000,0:02:39.000 But, if you squint a little you might notice, 0:02:39.000,0:02:41.000 that it is one. 0:02:41.000,0:02:43.000 And, the resolution 0:02:43.000,0:02:45.000 is terrible, so we have 0:02:45.000,0:02:47.000 the text all over the place. [laughter] 0:02:47.000,0:02:49.000 But that is ok, we don't mind. 0:02:49.000,0:02:51.000 It looks better when the resolution 0:02:51.000,0:02:53.000 is bigger, trust me on that. Anyway, 0:02:53.000,0:02:55.000 we will take this piece of software 0:02:55.000,0:02:57.000 it's, really easy and package 0:02:57.000,0:02:59.000 it. 0:02:59.000,0:03:01.000 It's your 0:03:01.000,0:03:03.000 standard how to 0:03:03.000,0:03:05.000 based thing written in C. 0:03:05.000,0:03:07.000 It has one 0:03:07.000,0:03:09.000 source file and that is about it. 0:03:09.000,0:03:11.000 How do you go about packaging 0:03:11.000,0:03:13.000 it ? Well, the easiest 0:03:13.000,0:03:15.000 way is to call 0:03:15.000,0:03:17.000 dpkd-buildpackage 0:03:19.000,0:03:21.000 command. 0:03:21.000,0:03:23.000 And see what it tells you, 0:03:23.000,0:03:25.000 well it's missing a changelog and a debian 0:03:25.000,0:03:27.000 directory, so let's make one. 0:03:29.000,0:03:31.000 There is a handy tool called 0:03:31.000,0:03:33.000 'dch', which is 0:03:33.000,0:03:35.000 short of deb change 0:03:35.000,0:03:37.000 it is mean't to, 0:03:37.000,0:03:39.000 help you write change logs. 0:03:39.000,0:03:41.000 And we will use it to 0:03:41.000,0:03:43.000 create one. 0:03:45.000,0:03:47.000 We fill it out 0:03:47.000,0:03:49.000 you've probably seen a few change logs. 0:03:49.000,0:03:51.000 It's not rocket science. 0:03:53.000,0:03:55.000 Oh, 0:03:57.000,0:03:59.000 ok, 0:03:59.000,0:04:01.000 sorry. 0:04:03.000,0:04:05.000 Fill it out. 0:04:07.000,0:04:09.000 We do not have an ITP, 0:04:09.000,0:04:11.000 bug to close, so that's about it. 0:04:11.000,0:04:13.000 Let's see what it says now. 0:04:13.000,0:04:15.000 Oh, 0:04:15.000,0:04:17.000 lots of text! What did it 0:04:17.000,0:04:19.000 type. Oh, 0:04:19.000,0:04:21.000 we need a control file! What is a control file? 0:04:21.000,0:04:23.000 Well, a control file 0:04:23.000,0:04:25.000 tells, dpkg 0:04:25.000,0:04:27.000 what 0:04:27.000,0:04:29.000 sources you have and what binaries 0:04:29.000,0:04:31.000 packages you want to build. 0:04:31.000,0:04:33.000 So, we will hack up a really 0:04:33.000,0:04:35.000 easy one. 0:04:35.000,0:04:37.000 First, of all 0:04:37.000,0:04:39.000 every control file 0:04:39.000,0:04:41.000 has to have 2 0:04:41.000,0:04:43.000 sections. The first section 0:04:43.000,0:04:45.000 describes the source 0:04:45.000,0:04:47.000 it looks a bit 0:04:47.000,0:04:49.000 like, 0:04:51.000,0:04:53.000 ok, 0:04:53.000,0:04:55.000 sorry I always forget my editor is 0:04:55.000,0:04:57.000 a bit dumb! 0:04:57.000,0:04:59.000 The first section 0:04:59.000,0:05:01.000 describes the source, 0:05:01.000,0:05:03.000 which 0:05:03.000,0:05:05.000 in this case 0:05:05.000,0:05:07.000 is this. 0:05:07.000,0:05:09.000 We also 0:05:09.000,0:05:11.000 have a couple of other fields we need 0:05:11.000,0:05:13.000 here like, maintainer 0:05:17.000,0:05:19.000 we need a Section 0:05:21.000,0:05:23.000 lets see 0:05:23.000,0:05:25.000 games, will be fine 0:05:25.000,0:05:27.000 and the 0:05:27.000,0:05:29.000 priotity which will be extra. 0:05:29.000,0:05:31.000 That should 0:05:31.000,0:05:33.000 be enough for starters, 0:05:41.000,0:05:43.000 and I need to learn to spell. 0:05:43.000,0:05:45.000 The next section, 0:05:45.000,0:05:47.000 is about the binary 0:05:47.000,0:05:49.000 we will build one 0:05:49.000,0:05:51.000 binary package 0:05:51.000,0:05:53.000 except it's called Package. 0:05:55.000,0:05:57.000 It has the same name. 0:05:59.000,0:06:01.000 We give it a description, 0:06:07.000,0:06:09.000 and, 0:06:09.000,0:06:11.000 the long description starts 0:06:11.000,0:06:13.000 right after in the next line. 0:06:13.000,0:06:15.000 You have to start it with a space, 0:06:15.000,0:06:17.000 because, 0:06:17.000,0:06:19.000 this whole control files looks like an email. 0:06:21.000,0:06:23.000 And starting 0:06:23.000,0:06:25.000 with a space tells the, 0:06:25.000,0:06:27.000 parser it 0:06:27.000,0:06:29.000 is a continuation, 0:06:29.000,0:06:31.000 of what was above. 0:06:39.000,0:06:41.000 Ok and that is about it. 0:06:43.000,0:06:45.000 So, we have a very 0:06:45.000,0:06:47.000 simple control file. 0:06:47.000,0:06:49.000 Let's see what the tool 0:06:49.000,0:06:51.000 tells us. 0:06:51.000,0:06:53.000 Oh, 0:06:53.000,0:06:55.000 right we need an Architecture field. 0:07:01.000,0:07:03.000 Every package in Debian must, 0:07:03.000,0:07:05.000 have an 0:07:05.000,0:07:07.000 Architecture associated 0:07:07.000,0:07:09.000 with it. 0:07:11.000,0:07:13.000 It can be 0:07:13.000,0:07:15.000 either 0:07:15.000,0:07:17.000 and Arch all 0:07:17.000,0:07:19.000 package, which means the same 0:07:19.000,0:07:21.000 binary will run on all 0:07:21.000,0:07:23.000 architectures. 0:07:23.000,0:07:25.000 In our case this is, 0:07:25.000,0:07:27.000 wrong, because this is a C 0:07:27.000,0:07:29.000 program which is compiled and 0:07:29.000,0:07:31.000 it depends on the architecture. 0:07:31.000,0:07:33.000 So, we write in here 0:07:33.000,0:07:35.000 you could list 0:07:35.000,0:07:37.000 the architectures here if your 0:07:37.000,0:07:39.000 package is something that 0:07:39.000,0:07:41.000 only works on a certain subset of 0:07:41.000,0:07:43.000 of architectures. 0:07:45.000,0:07:47.000 You can make it Linux, 0:07:47.000,0:07:49.000 specific by writing linux-any 0:07:49.000,0:07:51.000 or FreeBSD specific. 0:07:53.000,0:07:55.000 by writing, 0:07:55.000,0:07:57.000 kfreebsd-any. 0:07:57.000,0:07:59.000 This is a portable thing so we will write, 0:07:59.000,0:08:01.000 any. 0:08:01.000,0:08:03.000 Going further, 0:08:03.000,0:08:05.000 now it needs a rules 0:08:05.000,0:08:07.000 file. We are progressing, 0:08:07.000,0:08:09.000 a rules file is used 0:08:09.000,0:08:11.000 to do the hard 0:08:11.000,0:08:13.000 work. 0:08:13.000,0:08:15.000 It tells dpkg 0:08:15.000,0:08:17.000 rules 0:08:17.000,0:08:19.000 about how to build a 0:08:19.000,0:08:21.000 package. In the most simple case 0:08:21.000,0:08:23.000 like ours, 0:08:27.000,0:08:29.000 we will deal with 0:08:29.000,0:08:31.000 this only. 0:08:31.000,0:08:33.000 This is 'magic', 0:08:33.000,0:08:35.000 'black magic', 0:08:35.000,0:08:37.000 but the wonderful thing about 0:08:37.000,0:08:39.000 black magic is that you don't need to 0:08:39.000,0:08:41.000 understand it. If you need 0:08:41.000,0:08:43.000 to change the way, 0:08:43.000,0:08:45.000 the magic works. 0:08:45.000,0:08:47.000 You only have to understand little 0:08:47.000,0:08:49.000 pieces of it, and thankfully 0:08:49.000,0:08:51.000 deb helper, which 0:08:51.000,0:08:53.000 dh is a part of 0:08:53.000,0:08:55.000 has wonderful documentation. 0:08:55.000,0:08:57.000 Man pages and so on, 0:08:57.000,0:08:59.000 and so forth. 0:08:59.000,0:09:01.000 I would suggest, 0:09:01.000,0:09:03.000 that if you start packaging, 0:09:03.000,0:09:05.000 something. Start with this 0:09:05.000,0:09:07.000 and 0:09:07.000,0:09:09.000 if something goes wrong, go from there. 0:09:09.000,0:09:11.000 We will see how things, 0:09:11.000,0:09:13.000 will go wrong and 0:09:13.000,0:09:15.000 by the way Debian 0:09:15.000,0:09:17.000 rules is a make file thats 0:09:17.000,0:09:19.000 why we have this first 0:09:19.000,0:09:21.000 line here. 0:09:21.000,0:09:23.000 We also need to make 0:09:23.000,0:09:25.000 it executable, of course. 0:09:27.000,0:09:29.000 Now, lets see what happens 0:09:31.000,0:09:33.000 oh, yeah. 0:09:35.000,0:09:37.000 Since it's a make file, 0:09:37.000,0:09:39.300 I have to make it a makefile. 0:09:41.300,0:09:43.300 There we go. 0:09:45.300,0:09:47.300 Well, 0:09:47.300,0:09:49.300 it did things. 0:09:51.300,0:09:53.300 But, it also 0:09:53.300,0:09:55.300 gave us a lot of 0:09:55.300,0:09:57.300 errors and 0:09:57.300,0:09:59.300 other things. 0:09:59.300,0:10:01.300 So, we need to tell this 0:10:01.300,0:10:03.300 tool to ignore, 0:10:03.300,0:10:05.300 the git directory 0:10:05.300,0:10:07.300 and a couple of other 0:10:07.300,0:10:09.300 things. The best way to do that, 0:10:13.300,0:10:15.300 is to set the 0:10:15.300,0:10:17.300 source format to, 0:10:17.300,0:10:19.300 the one it suggests. 0:10:19.300,0:10:21.300 Right, here at the bottom. 0:10:21.300,0:10:23.300 We can do that by 0:10:23.300,0:10:25.300 creating a new directories, 0:10:25.300,0:10:27.300 called debian and then source. 0:10:29.300,0:10:31.300 And, creating 0:10:31.300,0:10:33.300 a new file in it 0:10:33.300,0:10:35.300 called format. 0:10:37.300,0:10:39.300 Which has the text, 0:10:39.300,0:10:41.300 '3.0 0:10:41.300,0:10:43.300 (quilt)' in it. 0:10:43.300,0:10:45.300 What this format does you 0:10:45.300,0:10:47.300 don't need to know, at least 0:10:47.300,0:10:49.300 not right now. It's 0:10:49.300,0:10:51.300 pretty complicated and 0:10:51.300,0:10:53.300 its a similiar 0:10:53.300,0:10:55.300 kind of 'magic' as debhelper. 0:10:57.300,0:10:59.300 It just has less documentation. 0:11:01.300,0:11:03.300 We also want to tell debhelper that, 0:11:03.300,0:11:05.300 we want to use 0:11:05.300,0:11:07.300 the latest and greatest version of 0:11:07.300,0:11:09.300 it. It was 0:11:09.300,0:11:11.300 complaining about that to at the beginning, 0:11:11.300,0:11:13.300 but I'm not going to scroll that high up. 0:11:13.300,0:11:15.300 Which we can do by, 0:11:15.300,0:11:17.300 echoing a '9' into a file called 0:11:17.300,0:11:19.300 debian/compat . 0:11:19.300,0:11:21.300 Now, lets see what happens. 0:11:23.300,0:11:25.300 Well, this is 0:11:25.300,0:11:27.300 much, much, 0:11:27.300,0:11:29.300 improved. 0:11:31.300,0:11:33.300 It compilied and now it is doing, 0:11:33.300,0:11:35.300 somethings and it 0:11:35.300,0:11:37.300 it is also asking for my password. 0:11:39.300,0:11:41.300 No, I'm not going to sign it right now. 0:11:45.300,0:11:47.300 So, it did stuff. 0:11:47.300,0:11:49.300 It also built, 0:11:51.300,0:11:53.300 a debian package for us, 0:11:53.300,0:11:55.300 which is great. 0:11:55.300,0:11:57.300 But I thing 0:11:57.300,0:11:59.300 is, a lot of 0:11:59.300,0:12:01.300 things missing from this. 0:12:01.300,0:12:03.300 For example, 0:12:03.300,0:12:05.100 we can run lintian, 0:12:05.100,0:12:05.300 on the changes file[br]we can run lintian, 0:12:05.300,0:12:07.300 on the changes file 0:12:07.300,0:12:09.300 and it will tell us all kinds of things. 0:12:11.300,0:12:13.300 A lot of bad, bad 0:12:13.300,0:12:15.300 things about the package. 0:12:19.300,0:12:21.300 Ok, 0:12:21.300,0:12:23.300 let's see, 0:12:23.300,0:12:25.300 we are missing the maintainer name, which I'm not going 0:12:25.300,0:12:27.300 to fix right now. 0:12:27.300,0:12:29.300 I'm not going to fix the 0:12:29.300,0:12:31.300 changelog either, because I 0:12:31.300,0:12:33.300 know better. 0:12:33.300,0:12:35.300 It's missing a copyright file, 0:12:35.300,0:12:37.300 which I'm not going to add 0:12:37.300,0:12:39.300 either, because writing a 0:12:39.300,0:12:41.300 copyright file could take an 0:12:41.300,0:12:43.300 entire session of its own. 0:12:45.300,0:12:47.300 I can add the standards version 0:12:47.300,0:12:49.300 field. 0:12:53.300,0:12:55.300 Which is as easy, 0:12:57.300,0:12:59.300 as this, the standards 0:12:59.300,0:13:01.300 version field, 0:13:03.300,0:13:05.300 signals which version 0:13:05.300,0:13:07.300 of policy this package was 0:13:07.300,0:13:09.300 made to conform to. 0:13:11.300,0:13:13.300 What is worse, is that 0:13:13.300,0:13:15.300 we are missing dependencies. 0:13:15.300,0:13:17.300 If we look into the package 0:13:19.300,0:13:21.300 debian package. 0:13:23.300,0:13:25.300 We will see that there is no depends 0:13:25.300,0:13:27.300 line, if we try to install this 0:13:27.300,0:13:29.300 It may work 0:13:29.300,0:13:31.300 and on my computer it will because 0:13:31.300,0:13:33.300 I already have all the dependancies installed. 0:13:35.300,0:13:37.300 But since it's a compiled 0:13:37.300,0:13:39.300 thing, it will at least 0:13:39.300,0:13:41.300 need libc, 0:13:41.300,0:13:43.300 and probably a few other 0:13:43.300,0:13:45.300 things as well. 0:13:45.300,0:13:47.300 So, we do 0:13:47.300,0:13:49.300 another kind of magic. 0:13:49.300,0:13:51.300 And add 0:13:51.300,0:13:53.300 the depends line to 0:13:53.300,0:13:55.300 the binary section. 0:13:55.300,0:13:57.300 Now, 0:13:59.300,0:14:01.300 is this line of magic, 0:14:01.300,0:14:03.300 which looks like shell 0:14:03.300,0:14:05.300 variable except, 0:14:05.300,0:14:07.300 they are not. 0:14:07.300,0:14:09.300 The way it works, 0:14:09.300,0:14:11.300 is when debhelper 0:14:11.300,0:14:13.300 runs, it will 0:14:15.300,0:14:17.300 find all the 0:14:17.300,0:14:19.300 packages that your binary 0:14:19.300,0:14:21.300 is dependant on. At least if they are 0:14:21.300,0:14:23.300 in 'C' and 0:14:23.300,0:14:25.300 fill 0:14:25.300,0:14:27.300 this variable out, 0:14:27.300,0:14:29.300 with the results. 0:14:29.300,0:14:31.300 It something 0:14:31.300,0:14:33.300 like 'ldd' 0:14:33.300,0:14:35.300 improved. 0:14:41.300,0:14:43.300 Here we see, 0:14:43.300,0:14:45.300 the output of 'ldd' 0:14:45.300,0:14:47.300 as you can see, this 0:14:47.300,0:14:49.300 thing depends on quite a lot of 0:14:49.300,0:14:51.300 things. 0:14:53.300,0:14:55.300 Ranging from freetype 0:14:55.300,0:14:57.300 to libX11 0:14:57.300,0:14:59.300 to 0:14:59.300,0:15:01.300 otherthings. 0:15:05.300,0:15:07.300 Yes? 0:15:13.300,0:15:15.300 One moment. 0:15:25.300,0:15:27.300 [Question] Wouldn't you have to go through 'configure-ac', 0:15:27.300,0:15:29.300 to figure all this stuff? 0:15:29.300,0:15:31.300 [Gergely] We can, 0:15:31.300,0:15:33.300 and we will just not 0:15:33.300,0:15:35.300 right now. 0:15:35.300,0:15:37.300 We need 0:15:37.300,0:15:39.300 to figure out the 0:15:39.300,0:15:41.300 dependices of the binary, 0:15:41.300,0:15:43.300 if you go through, 0:15:43.300,0:15:45.300 'configureare-ac' you can figure 0:15:45.300,0:15:47.300 out the build dependices. 0:15:47.300,0:15:49.300 Which will be useful to, 0:15:49.300,0:15:51.300 and I'll get to that 0:15:51.300,0:15:53.300 in about 5 minutes. 0:15:59.300,0:16:01.300 To figure out the, 0:16:01.300,0:16:03.300 runtime dependicies you can, 0:16:05.300,0:16:07.300 use this 'sh.libs' 0:16:07.300,0:16:09.300 depends line. 0:16:09.300,0:16:11.300 It will be figured out 0:16:11.300,0:16:13.300 automatically most of the time. 0:16:13.300,0:16:15.300 To figure out, 0:16:15.300,0:16:17.300 the build dependicies 0:16:17.300,0:16:19.300 you have to do that manually. 0:16:21.300,0:16:23.300 And as I said we will get 0:16:23.300,0:16:25.300 to that in a moment. 0:16:27.300,0:16:29.300 I'm not going to build the package, 0:16:29.300,0:16:31.300 again because that takes a long time. 0:16:31.300,0:16:33.300 I will show you 0:16:33.300,0:16:35.300 another thing, a very 0:16:35.300,0:16:37.300 useful tool callled 'sbuild'. 0:16:39.300,0:16:41.300 Which works 0:16:41.300,0:16:43.300 by setting up a clean 0:16:43.300,0:16:45.300 environment to build your package in. 0:16:55.300,0:16:57.300 The last time I ran 0:16:57.300,0:16:59.300 'dpkg-buildpackage' 0:16:59.300,0:17:01.300 it also built a source package 0:17:01.300,0:17:03.300 I believe or if not? 0:17:03.300,0:17:05.300 Yes, it did. 0:17:09.300,0:17:11.300 'sbuild' works after 0:17:11.300,0:17:13.300 setting up which is easy and 0:17:13.300,0:17:15.300 and well documented in it's 0:17:15.300,0:17:17.300 man page and other 0:17:17.300,0:17:19.300 kinds of documentation. 0:17:19.300,0:17:21.300 It sets up a clean, 0:17:21.300,0:17:23.300 environment with only 0:17:23.300,0:17:25.300 'build-essential' installed. 0:17:25.300,0:17:27.300 You can give this tool, 0:17:27.300,0:17:29.300 debian source 0:17:29.300,0:17:31.300 control file. It will grab 0:17:31.300,0:17:33.300 all the build dependicies, install 0:17:33.300,0:17:35.300 it in the 0:17:35.300,0:17:37.300 'chroot' 0:17:37.300,0:17:39.300 amd try to build the package. It's very good 0:17:39.300,0:17:41.300 at figuring out your build dependicies 0:17:41.300,0:17:43.300 are and weather 0:17:43.300,0:17:45.300 your package will build on 0:17:45.300,0:17:47.300 the autobuilders or 0:17:47.300,0:17:49.300 if it will not. 0:17:51.300,0:17:53.300 This takes quite a long 0:17:53.300,0:17:55.300 time because it will have to 0:17:55.300,0:17:57.300 install the things. 0:17:57.300,0:17:59.300 Except it won't because 0:17:59.300,0:18:01.300 we don't have any build dependicies 0:18:01.300,0:18:03.300 right now. 0:18:07.300,0:18:09.300 Oh, we do 0:18:09.300,0:18:11.300 because 0:18:11.300,0:18:13.300 never mind. 0:18:13.300,0:18:15.300 I'll just stop this. 0:18:19.300,0:18:21.300 I forgot that 0:18:21.300,0:18:23.300 I built the source 0:18:23.300,0:18:25.300 earlier. 0:18:31.300,0:18:33.300 Maybe this time? 0:18:41.300,0:18:43.300 One momement, 0:18:43.300,0:18:45.300 I'll fix this in a moment. 0:19:13.300,0:19:15.300 Ok, lets see. 0:19:15.300,0:19:17.300 We should have 0:19:17.300,0:19:19.300 no build dependicies now. 0:19:19.300,0:19:21.300 Whats the problem 0:19:21.300,0:19:23.300 now? 0:19:51.300,0:19:53.300 Ok, while I 0:19:53.300,0:19:55.300 fix my environment, 0:19:55.300,0:19:57.300 lets skip 0:19:57.300,0:19:59.300 the next step. 0:19:59.300,0:20:01.300 If I had compiled this thing without 0:20:01.300,0:20:03.300 out build dependicies, it would fail 0:20:03.300,0:20:05.300 in a clean environment. 0:20:07.300,0:20:09.300 What we will do next is, 0:20:09.300,0:20:11.300 go through 'configure-ac' and figure out 0:20:11.300,0:20:13.300 what this thing needs. 0:20:21.300,0:20:23.300 Well, lets see. 0:20:23.300,0:20:25.300 It needs, 0:20:25.300,0:20:27.300 'pkg-config', 0:20:27.300,0:20:29.300 because that is what provides 0:20:29.300,0:20:31.300 this macro. 0:20:31.300,0:20:33.300 It will need, 0:20:35.300,0:20:37.300 I'm not sure how to pronounce this. 0:20:37.300,0:20:39.300 errr, lib-ca-ca somthing..... 0:20:39.300,0:20:41.300 It's like aalib 0:20:41.300,0:20:43.300 but with colours. It also 0:20:43.300,0:20:45.300 needs, 0:20:45.300,0:20:47.300 'imlib2'. 0:20:47.300,0:20:49.300 Lets add those 0:20:49.300,0:20:51.300 to the build dependency. 0:20:55.300,0:20:57.300 And, it also needs, 0:20:57.300,0:20:59.300 debhelper because we are using that. 0:21:01.300,0:21:03.300 Since, we are using compat level 9 0:21:03.300,0:21:05.300 we need 'debhelper' 0:21:05.300,0:21:07.300 version 9 or later. 0:21:07.300,0:21:09.300 We need, 0:21:09.300,0:21:11.300 this 0:21:17.300,0:21:19.300 and this should 0:21:19.300,0:21:21.300 do. 0:21:23.300,0:21:25.300 Rebuild the source package again and 0:21:25.300,0:21:27.300 I forgot to tell it, to not sign the package. 0:21:29.300,0:21:31.300 There we go. 0:21:37.300,0:21:39.300 Lets see how it worked. 0:21:43.300,0:21:45.300 Right, 0:21:45.300,0:21:47.300 now it figured out 0:21:47.300,0:21:49.300 that it needs 0:21:49.300,0:21:51.300 quite a few pacakges. 0:21:57.300,0:21:59.300 It can also download 0:22:01.300,0:22:03.300 the build dependicies from the internet. 0:22:03.300,0:22:05.300 I have them downloaded already, 0:22:05.300,0:22:07.300 which is why it didn't do that. 0:22:07.300,0:22:09.300 Then it, 0:22:09.300,0:22:11.300 installs all of them and 0:22:11.300,0:22:13.300 will try to compile the package 0:22:13.300,0:22:15.300 and make a binary out of it. 0:22:15.300,0:22:17.300 If it all succeeds, it will 0:22:17.300,0:22:19.300 copy the result 0:22:19.300,0:22:21.300 into the same directory, 0:22:21.300,0:22:23.300 which we ran the tool from. 0:22:25.300,0:22:27.300 If it doesn't work, 0:22:27.300,0:22:29.300 then it will 0:22:29.300,0:22:31.300 leave 0:22:31.300,0:22:33.300 the logfile of the whole 0:22:33.300,0:22:35.300 build in the same directory 0:22:35.300,0:22:37.300 which we ran it from. 0:22:37.300,0:22:39.300 Sadly, it takes a little while 0:22:39.300,0:22:41.300 on my laptop because 0:22:41.300,0:22:43.300 it is kind of old and 0:22:43.300,0:22:45.300 slow, but we are all ready at the 0:22:45.300,0:22:47.300 setting up stage. 0:22:49.300,0:22:51.300 Meanwhile, 0:22:51.300,0:22:53.300 do you have any 0:22:53.300,0:22:55.300 questions, so far? 0:23:05.300,0:23:07.300 [Question] The setup we see running 0:23:07.300,0:23:09.300 thats setting it up in a sandbox 0:23:09.300,0:23:11.300 or something. [Gergely] Yes. 0:23:11.300,0:23:13.300 'sbuild', 0:23:13.300,0:23:15.300 is a tool 0:23:15.300,0:23:17.300 with which you can setup a 0:23:17.300,0:23:19.300 'chroot'. 0:23:21.300,0:23:23.300 A clean one, 0:23:23.300,0:23:25.300 and it will 0:23:25.300,0:23:27.300 do all the magic in there. 0:23:27.300,0:23:29.300 It's also, 0:23:29.300,0:23:31.300 useful if you are running, 0:23:31.300,0:23:33.300 say, 'stable' or 0:23:33.300,0:23:35.300 'testing' but want to build for a 0:23:35.300,0:23:37.300 stable, because 0:23:37.300,0:23:39.300 everything that goes into debian 0:23:39.300,0:23:41.300 must be built on 'unstable'. 0:23:45.300,0:23:47.300 [Question] Do you have any recommendations 0:23:47.300,0:23:49.300 regarding the build environment? For, example using 0:23:49.300,0:23:51.300 'pbuilder' over 'cowbuilder', 0:23:51.300,0:23:53.300 or is it just a personal preference? 0:23:53.300,0:23:55.300 [Gergely] It's just personal 0:23:55.300,0:23:57.300 preference, I have used 'sbuild' 0:23:57.300,0:23:59.300 ever since it was 0:23:59.300,0:24:01.300 packaged. So, thats what 0:24:03.300,0:24:05.300 I'm familiar with, 0:24:05.300,0:24:07.300 but other 0:24:07.300,0:24:09.300 other people are using 'pbuilder' or 0:24:09.300,0:24:11.300 'cowbuilder' and 0:24:11.300,0:24:13.300 I think there are maybe one or two 0:24:13.300,0:24:15.300 more similiar tools. 0:24:15.300,0:24:17.300 They all work, they all 0:24:17.300,0:24:19.300 have different properties. 0:24:19.300,0:24:21.300 You can choose which ever 0:24:21.300,0:24:23.300 you like. 0:24:25.300,0:24:27.300 It builds and now it's 0:24:27.300,0:24:29.300 removing all the packages 0:24:29.300,0:24:31.300 it installed before. 0:24:33.300,0:24:35.300 We have a successful build but, 0:24:35.300,0:24:37.300 'lintian' failed. 0:24:37.300,0:24:39.300 Well, thats 0:24:39.300,0:24:41.300 kind of expected because there is a lot of 0:24:41.300,0:24:43.300 things missing from this package. 0:24:47.300,0:24:49.300 oh, I'm stupid 0:24:49.300,0:24:51.300 nevermind. 0:24:51.300,0:24:53.300 So, 0:24:53.300,0:24:55.300 we have a debian package. 0:24:55.300,0:24:57.300 Right here, which we built. 0:25:01.300,0:25:03.300 Lets try installing it. 0:25:11.300,0:25:13.300 Ooooh, 0:25:13.300,0:25:15.300 there are things in it. 0:25:17.300,0:25:19.300 and if I 0:25:19.300,0:25:21.300 run it. 0:25:21.300,0:25:23.300 It works! It 0:25:23.300,0:25:25.300 looks a bit silly [clapping] but it works 0:25:25.300,0:25:27.300 [clapping] 0:25:29.300,0:25:31.300 I just rememebered that I had this terminal 0:25:31.300,0:25:33.300 window open, because I wanted to run it 0:25:33.300,0:25:35.300 here, because it has 0:25:35.300,0:25:37.300 smaller fonts and it 0:25:37.300,0:25:39.300 looks much nicer this way. 0:25:45.300,0:25:47.300 That was what I had, 0:25:47.300,0:25:49.300 prepared. 0:25:53.300,0:25:55.300 Oh, wait. 0:26:05.300,0:26:07.300 So, if we run 0:26:07.300,0:26:09.300 'lintian' on this thing, it 0:26:11.300,0:26:13.300 tells us a few 0:26:13.300,0:26:15.300 errors 0:26:15.300,0:26:17.300 and warnings. 0:26:17.300,0:26:19.300 Like, this binary 0:26:19.300,0:26:21.300 doesn't have a man page, 0:26:21.300,0:26:23.300 it's in section games but 0:26:23.300,0:26:25.300 contains no games because games 0:26:25.300,0:26:27.300 need to go into 0:26:27.300,0:26:29.300 '/usr/games' not in 0:26:29.300,0:26:31.300 '/usr/bin'. 0:26:31.300,0:26:33.300 We can actually fix that easily. 0:26:33.300,0:26:35.300 That will show, 0:26:35.300,0:26:37.300 how to. 0:26:41.300,0:26:43.300 We have 0:26:43.300,0:26:45.300 a package which should 0:26:45.300,0:26:47.300 be installed 0:26:47.300,0:26:49.300 into 0:26:49.300,0:26:51.300 '/usr/games' instead of 0:26:51.300,0:26:53.300 '/usr/bin'. 0:26:53.300,0:26:55.300 Since we built only one 0:26:55.300,0:26:57.300 binary, 0:26:57.300,0:26:59.300 we can tell configure 0:26:59.300,0:27:01.300 that 0:27:01.300,0:27:03.300 binaries, should go into '/usr/games' 0:27:03.300,0:27:05.300 not '/usr/bin'. 0:27:07.300,0:27:09.300 With debhelper, 0:27:09.300,0:27:11.300 using this short form we 0:27:11.300,0:27:13.300 can do that by overriding, 0:27:13.300,0:27:15.300 the configure step. 0:27:19.300,0:27:21.300 That works 0:27:21.300,0:27:23.300 by adding a new target 0:27:23.300,0:27:25.300 to the 0:27:25.300,0:27:27.300 'debian/rules' makefile. 0:27:27.300,0:27:29.300 We simply call 0:27:29.300,0:27:31.300 the original 0:27:31.300,0:27:33.300 tool and 0:27:33.300,0:27:35.300 pass it 0:27:35.300,0:27:37.300 '--prefix=/usr/games' argument. 0:27:41.300,0:27:43.300 This will do all the magic 0:27:43.300,0:27:45.300 'dh_auto_configure' 0:27:45.300,0:27:47.300 does. 0:27:47.300,0:27:49.300 Which includes, adding 0:27:51.300,0:27:53.300 hardening flags, 0:27:53.300,0:27:55.300 adding 0:27:55.300,0:27:57.300 all kinds of other 0:27:57.300,0:27:59.300 options. 0:27:59.300,0:28:01.300 We will also tell it, 0:28:01.300,0:28:03.300 that we want to change 0:28:03.300,0:28:05.300 the prefix. 0:28:09.300,0:28:11.300 Another, thing 0:28:11.300,0:28:13.300 about the 'dch' 0:28:13.300,0:28:15.300 tool is, 0:28:15.300,0:28:17.300 it can not only create 0:28:17.300,0:28:19.300 changelog files it can 0:28:19.300,0:28:21.300 add new 0:28:21.300,0:28:23.300 entries into it. 0:28:23.300,0:28:25.300 By using the 0:28:25.300,0:28:27.300 '-i' 0:28:27.300,0:28:29.300 option. 0:28:45.300,0:28:47.300 Now we can build 0:28:47.300,0:28:49.300 the package again. 0:28:57.300,0:28:59.300 I stopped the build, 0:29:07.300,0:29:09.300 Anyway, if it wasn't 0:29:09.300,0:29:11.300 scrolling this fast, you could see the 0:29:11.300,0:29:13.300 argument we 0:29:13.300,0:29:15.300 added 0:29:15.300,0:29:17.300 was actually passed. 0:29:21.300,0:29:23.300 Anyway, if we 0:29:23.300,0:29:25.300 look at the, 0:29:25.300,0:29:27.300 Ok, not going to do that 0:29:27.300,0:29:29.300 in midnight commander. 0:29:37.300,0:29:39.300 There is another command called, 0:29:39.300,0:29:41.300 'dpkg-deb' 0:29:41.300,0:29:43.300 With which you can inspect, 0:29:43.300,0:29:45.300 extract and 0:29:45.300,0:29:47.300 reassemble 0:29:47.300,0:29:49.300 debian packages. 0:29:49.300,0:29:51.300 Right now we will use the 0:29:51.300,0:29:53.300 '-c' option 0:29:53.300,0:29:55.300 which means contents. 0:29:57.300,0:29:59.300 To list what 0:29:59.300,0:30:01.300 is inside it. 0:30:03.300,0:30:05.300 Well, 0:30:05.300,0:30:07.300 this worked a little 0:30:07.300,0:30:09.300 except we didn't want to 0:30:09.300,0:30:11.300 pass prefix because 0:30:11.300,0:30:13.300 everything under prefix 0:30:13.300,0:30:15.300 '/usr/games/' including 0:30:15.300,0:30:17.300 the documentation! We only want 0:30:17.300,0:30:19.300 to place the binaries 0:30:19.300,0:30:21.300 there. 0:30:25.300,0:30:27.300 So, it's not '--prefix=/usr/games' 0:30:27.300,0:30:29.300 but 0:30:29.300,0:30:31.300 '--bindir=/usr/games'. 0:30:31.300,0:30:33.300 I think, 0:30:37.300,0:30:39.300 yup. 0:30:45.300,0:30:47.300 Ok, here we go 0:30:47.300,0:30:49.300 again. 0:30:51.300,0:30:53.300 This time instead of 0:30:53.300,0:30:55.300 looking at the final 0:30:55.300,0:30:57.300 package, we will have a look at 0:30:59.300,0:31:01.300 the debian directory. 0:31:01.300,0:31:03.300 As you can see there are a couple of new 0:31:03.300,0:31:05.300 files there, like 0:31:07.300,0:31:09.300 'debian/files' or 0:31:09.300,0:31:11.300 the 0:31:11.300,0:31:13.300 'cake-is-a-lie.debhelper.log' 0:31:13.300,0:31:15.300 which is a log of 0:31:15.300,0:31:17.300 the 'debhelper' commands 0:31:17.300,0:31:19.300 which ran, 0:31:19.300,0:31:21.300 or the 'cake-is-a-lie.substvars' file. 0:31:21.300,0:31:23.300 There is also a directory 0:31:25.300,0:31:27.300 called 'cake-is-a-lie'. 0:31:27.300,0:31:29.300 In this 0:31:29.300,0:31:31.300 directory are 0:31:33.300,0:31:35.300 all the 0:31:35.300,0:31:37.300 things 0:31:37.300,0:31:39.300 installed which our package will 0:31:39.300,0:31:41.300 include. 0:31:43.300,0:31:45.300 If we go through that, 0:31:45.300,0:31:47.300 will we see that under '/usr/games' 0:31:47.300,0:31:49.300 is our program, 0:31:49.300,0:31:51.300 there is documentation, 0:31:51.300,0:31:53.300 and there are the pictures also, 0:31:53.300,0:31:55.300 and there is a DEBIAN 0:31:55.300,0:31:57.300 directory. 0:31:57.300,0:31:59.300 In all captial letters, 0:31:59.300,0:32:01.300 that directory is 0:32:01.300,0:32:03.300 special 0:32:03.300,0:32:05.300 it contains all the 0:32:07.300,0:32:09.300 metadata 0:32:09.300,0:32:11.300 which also goes into the 0:32:11.300,0:32:13.300 final debian 0:32:13.300,0:32:15.300 package. This is all 0:32:15.300,0:32:17.300 created by 'debhelper'. 0:32:21.300,0:32:23.300 If you want to quickly look at 0:32:23.300,0:32:25.300 what goes into your package 0:32:25.300,0:32:27.300 you can look 0:32:27.300,0:32:29.300 under the debian directory, 0:32:29.300,0:32:31.300 and find the 0:32:31.300,0:32:33.300 directory with the same name as 0:32:33.300,0:32:35.300 your binary package and see what is 0:32:35.300,0:32:37.300 there. What is in there will go 0:32:37.300,0:32:39.300 in your package. 0:32:43.300,0:32:45.300 If we run 'lintian' 0:32:45.300,0:32:47.300 on this again. 0:32:59.300,0:33:01.300 Well, it complains about a lot less 0:33:01.300,0:33:03.300 things. 0:33:05.300,0:33:07.300 Our program is finally at the correct 0:33:07.300,0:33:09.300 location. 0:33:09.300,0:33:11.300 So, what I would advise, 0:33:11.300,0:33:13.300 if you start 0:33:13.300,0:33:15.300 to package something from scratch 0:33:15.300,0:33:17.300 start with a very simple rules 0:33:17.300,0:33:19.300 file that pretty much 0:33:19.300,0:33:21.300 leaves everything to 0:33:21.300,0:33:23.300 'debhelper' and 0:33:23.300,0:33:25.300 after each interation 0:33:25.300,0:33:27.300 run 'lintian' and try to 0:33:27.300,0:33:29.300 correct the problems. 0:33:29.300,0:33:31.300 If you need 0:33:31.300,0:33:33.300 to change something, 0:33:33.300,0:33:35.300 which 'debhelper' can't figure out, 0:33:35.300,0:33:37.300 or something it 0:33:37.300,0:33:39.300 figures out but wrongly. 0:33:39.300,0:33:41.300 Just, add an override, 0:33:41.300,0:33:43.300 you don't have to know 0:33:43.300,0:33:45.300 all the magic that 0:33:45.300,0:33:47.300 is behind 'debhelper' 0:33:47.300,0:33:49.300 just a few tiny pieces. 0:33:49.300,0:33:51.300 Which you need, 0:33:51.300,0:33:53.300 for your package. 0:33:57.300,0:33:59.300 That's pretty much my recommendation. 0:33:59.300,0:34:01.300 I have found that, 0:34:01.300,0:34:03.300 it works fairly well. 0:34:03.300,0:34:05.300 Most of my packages are 0:34:05.300,0:34:07.300 built this way. 0:34:11.300,0:34:13.300 Any questions ? 0:34:17.300,0:34:19.300 Here in the front. 0:34:25.300,0:34:27.300 [Question] Where does 0:34:27.300,0:34:29.300 'make' come into play? 0:34:33.300,0:34:35.300 [Gergely] I am not quite sure why 'make' was chosen, 0:34:35.300,0:34:37.300 originally for Debian rules. 0:34:39.300,0:34:41.300 Some 10 years 0:34:41.300,0:34:43.300 ago you only needed a file, 0:34:43.300,0:34:45.300 it didn't have 0:34:45.300,0:34:47.300 to be a makefile although it was 0:34:47.300,0:34:49.300 recommended 0:34:49.300,0:34:51.300 but then the policy was changed 0:34:53.300,0:34:55.300 to require it being a 0:34:55.300,0:34:57.300 make file and I'm not quite sure why. 0:34:57.300,0:34:59.300 It's a 0:34:59.300,0:35:01.300 mostly likely 0:35:01.300,0:35:03.300 habit, 0:35:03.300,0:35:05.300 or historical reasons. 0:35:11.300,0:35:13.300 Does that answer your question? 0:35:19.300,0:35:21.300 [Questioner] Maybe my 0:35:21.300,0:35:23.300 question was wrong, 0:35:23.300,0:35:25.300 What is the difference between 'dpkg-buildpackage' 0:35:25.300,0:35:27.300 and make ? 0:35:27.300,0:35:29.300 [Gergely] Oh. Well the main 0:35:29.300,0:35:31.300 difference is 0:35:31.300,0:35:33.300 that 'dpkg-buildpackage' 0:35:33.300,0:35:35.300 does a few other things. 0:35:35.300,0:35:37.300 Like, 0:35:37.300,0:35:39.300 generating a changes file for you, 0:35:39.300,0:35:41.300 it can also build 0:35:41.300,0:35:43.300 source package 0:35:43.300,0:35:45.300 and 0:35:45.300,0:35:47.300 it can do a couple 0:35:47.300,0:35:49.300 of other things but the main 0:35:49.300,0:35:51.300 is generating 0:35:51.300,0:35:53.300 the changes file, 0:35:53.300,0:35:55.300 the changes file lists, 0:35:55.300,0:35:57.300 well we can just 0:35:57.300,0:35:59.300 have a look at it. 0:36:01.300,0:36:03.300 No. 0:36:11.300,0:36:13.300 The changes 0:36:13.300,0:36:15.300 file is what you, 0:36:15.300,0:36:17.300 actually upload 0:36:17.300,0:36:19.300 to the Debian servers, 0:36:19.300,0:36:21.300 along with the rest. 0:36:21.300,0:36:23.300 It lists all the 0:36:23.300,0:36:25.300 files that belong to this 0:36:25.300,0:36:27.300 version of the package 0:36:27.300,0:36:29.300 including the source, 0:36:29.300,0:36:31.300 if there is any. 0:36:33.300,0:36:35.300 This is something that 'make' 0:36:35.300,0:36:37.300 can't do, this is 0:36:37.300,0:36:39.300 all 0:36:39.300,0:36:41.300 done by, 0:36:43.300,0:36:45.300 'dpkg-buildpackage' or 0:36:45.300,0:36:47.300 actually a tool that it calls 0:36:47.300,0:36:49.300 for you. 0:36:51.300,0:36:53.300 We can 0:36:53.300,0:36:55.300 do something like Debian rules 0:36:55.300,0:36:57.300 binary, 0:36:59.300,0:37:01.300 if I where in the right directory, 0:37:01.300,0:37:03.300 that is. 0:37:03.300,0:37:05.300 Which we will do 0:37:05.300,0:37:07.300 nothing right now because it's already built, 0:37:07.300,0:37:09.300 but I can, 0:37:09.300,0:37:11.300 clean and I can run binary 0:37:11.300,0:37:13.300 and it will do all the things that 0:37:13.300,0:37:15.300 it did before. 0:37:15.300,0:37:17.300 'dkpg-buildpackage' 0:37:17.300,0:37:19.300 does call this command aswell, 0:37:19.300,0:37:21.300 the difference is that, 0:37:21.300,0:37:23.300 now I have a deb file, 0:37:23.300,0:37:25.300 and that is it. 0:37:25.300,0:37:27.300 I don't have a source 0:37:27.300,0:37:29.300 tarball, I don't have 0:37:29.300,0:37:31.300 the debian tarball, 0:37:31.300,0:37:33.300 I don't have the debian 0:37:33.300,0:37:35.300 source control file, I don't have the 0:37:35.300,0:37:37.300 changes file and I don't 0:37:37.300,0:37:39.300 have any of the signed either. 0:37:39.300,0:37:41.300 'dpkg-buildpackage' 0:37:41.300,0:37:43.300 does that 0:37:43.300,0:37:45.300 for you. 0:37:47.300,0:37:49.300 Any other questions ? 0:37:49.300,0:37:51.300 Another here. 0:37:53.300,0:37:55.300 [Question] I have never 0:37:55.300,0:37:57.300 packaged anything but I have 0:37:57.300,0:37:59.300 some code that has, 0:37:59.300,0:38:01.300 the Debian rules for ubuntu. 0:38:01.300,0:38:03.300 Is there any difference ? 0:38:03.300,0:38:05.300 [Gergely] Not much. 0:38:05.300,0:38:07.300 [Questioner] Could it be a start to learn to package ? 0:38:07.300,0:38:09.300 [Gergely] Yes. [Questioner] And if it's 0:38:09.300,0:38:11.300 a python package ? 0:38:11.300,0:38:13.300 [Gergely] Well, that's a little bit different. 0:38:15.300,0:38:17.300 You will most 0:38:17.300,0:38:19.300 likely 0:38:19.300,0:38:21.300 need to adjust the 0:38:21.300,0:38:23.300 dependicies by hand, I'm not 0:38:23.300,0:38:25.300 quite sure 0:38:25.300,0:38:27.300 but you can't figure out python 0:38:27.300,0:38:29.300 dependicies automatically. 0:38:31.300,0:38:33.300 But otherwise it's very similiar. 0:38:33.300,0:38:35.300 I believe. 0:38:35.300,0:38:37.300 But, if you have a debian 0:38:37.300,0:38:39.300 rules files from ubuntu 0:38:39.300,0:38:41.300 that is a good start. 0:38:41.300,0:38:43.300 [Questioner] Okay, thanks. 0:38:53.300,0:38:55.300 [Gergely] If there are no more questions then, 0:38:57.300,0:38:59.300 I think this is it. 0:38:59.300,0:39:01.300 I can be 0:39:01.300,0:39:03.300 algernon@debian.org 0:39:03.300,0:39:05.300 or on IRC, 0:39:07.300,0:39:09.300 if you have any packaging 0:39:09.300,0:39:11.300 questions feel free to 0:39:11.300,0:39:13.300 turn to me and 0:39:13.300,0:39:15.300 I will be happy to answer, 0:39:15.300,0:39:17.300 if I can. 0:39:17.300,0:39:19.300 If not I'll try to find 0:39:19.300,0:39:21.300 appropriate documention. 0:39:23.300,0:39:29.300 [Applause]