 …bent yn y ddgen. Gwyddon nhw'n Majesty. Mae e'n ysgrifennu ymlaen gwybod. Fe wneud nhw'n'r ffordd i'r ddebwynydd ar y llunydd. Byddwch yn derbydd ysgolodau yn ei drafod lle ehol os yw yn eu gweld. Felly, rydyn ni'n gwybod a llinwch. Rwy'n mynd i'n mwynhau am fflas i'r pwg, Gan yw'n mynd i'r cerddwyd yn ysgol yma. Mae'n amser oherwydd i'r holl ddau'r holl ddau'r holl ddau'r holl, gan weithio yma o'r holl o'r holl o'r holl o'r holl o'r holl. Pan os gallwn i'r holl yma, gallwch yn i'n mynd i'r holl yma, ddim yn gwneud o'r holl o'r holl. Mae'r holl ond yn ystod o'r holl, ac mae'r holl yma yn ystod o'r holl o'r holl o'r holl, a bob yw'r cyfyrdd sydd wedi cael ei wneud yn ychydig yn gweithio'r cyfyrdd gyda'r cyfyrdd, a rydyn ni'n gweithio'r cyfyrdd a'r ysgolion'r cyfrifiadau. Rydyn ni'n gweithio'r cyfrifiadau gyda'r cyfrifiadau ymlaen gael mewn cyfrifiadau o'r cyfrifiadau, felly oedd bryddiwch yn gwahanol i'r cyfrifiadau ac rydyn ni'n gweithio bod yma'r cyfrifiadau. Ond ymateb yn ymgyrch i'n ddwy'r ffordd, I'm going to walk you through the installation methods that the installer offers. I'm going to be running the installer together with you. We're going to debug a bit. We're going to build a UDEP that should be there. Forgot the section title. And we're going to be building installer images, including that UDEP and see if it will run. So that should be quite a nice setup. OK, well, that's a bit of a redundant slide. Some resources that are important. First of all, the Debian installer mailing list, where all development communication takes place. The Debian installer project website. The Wiki. We've moved a lot of information from the website to the Wiki, and it's fairly actively maintained. There's one special resource I would like to mention, and that's the homepage of the development version of the manual, which is on Aliot. It's linked from the project homepage, of course. And if you want to do anything with the installer, you need an SVN checkout. So what installation methods do we have, and how are they composed and how do they differ? You can recognize an installation consist of a number of stages, and these are listed here. I think this should be familiar to most people. The stages can differ between installation methods, and that's basically one characteristic of them. So here I've listed the sequence of components that are run when you do an I386 net boot or CD-ROM install. For other architectures, there are some differences. Some have really specialized installation methods that are using specialized UDEPs, but the basic flow is the same, and this is for stages one to three, stages four and five we will see after on the next slide. The first bit is not really part of stage at all, but that's when you do automated installs using in-a-tradee preceding, which means that you include a precede file inside the in-a-tradee, and that's read automatically by the installer. Then you get language and country selection, which determines the locale, keyboard chooser, and then it starts to diverge. For CD-ROM installation, you need to be able to load the additional components you install and need from the CD, so you need to detect the CD, and you need to do some hardware detection. While if you're doing net boot, you will have to detect your Ethernet card, and configure it. The next line is again preceding, but different methods. If you do a CD-based install, you can do file preceding. If you do a network-based install, you can do network preceding. That means loading the pre-configuration file from the network. No, we haven't done that config yet. No, I've not. It's there, phase three. After we've basically set up the access to the extra source for UDAPs, we need to load them. That's the next step, which is either load CD-ROM or download installer, and both call Anna, which is not nearly apt, but almost, to actually load them. Then on non-network-based installs, well, you still want to set up the network because you may need it later on, and you will need a network configured for the installed system anyway, so we might as well just do it here. Stages four and five are basically similar for all installation methods. First, some more hardware detection, mainly to find drivers for your hard disks, partitioning and a number of configurations that used to be in base config, basically, but this has all been moved to the first stage of the install before the reboot now. Then we run base installer, which calls the bootstrap, and set up your base system. In the end, base installer will allow you to select a kernel or will select one automatically for you depending on the priority you're installing, and it will install some extra packages for the kernel you need to bootloader, and it will do, for example, install the local package. After base installer, we have to set up apps for the target system so we can install tasks, and that's the function of upsetup. That will set up either a CD-ROM source and or a network source, and will try to add a security mirror. Then we run packet cell, which is basically a new-dab component that will call task cell, so then you get the selection of tasks like the desktop task, the print task, and so on. Bootloader installation, and then we are ready for the cleanup, and that used to be pre-base config, but because we got rid of base config, it was time to rename it, and so we've now called it Finish Install. That was done this week, I think. So, besides the flow of UDAPs, the installation method is determined by four characteristics. How is the installer booted? From where are the additional UDAPs retrieved that you need? From where are packages for the base system retrieved by the bootstrap, and from where do you get the packages needed for the installation of tasks? Well, this gives quite a full overview of all the installation methods supported. There are a few that differ amongst others, the S390 installation methods, but you see there's kind of a flow from fully network-based to more CD-based. Some people may not be familiar with the MiniISO. The MiniISO is a CD image, which is not generated by WCD, but is generated as a kind of by-product of the net boot installation method. It's the same in-it RD, but dropped onto an ISO image with ISO Linux Bootloader. That makes it extremely useful for testing purposes, because you can generate it in under a minute, and you can boot it immediately in an emulator or something like that without having to copy it to a boot server or having to generate the full CD images using Debian CD or something. Any questions at this stage? Sorry, could you wait for the mic? Does that mean the MiniISO is pretty much empty? Yes, it's pretty much empty. It contains just what needed to get to here, to the end of stage 2. The rest is all loaded over the network, so you need a good mirror available. Running the installer. I have here a very recent business card image. This is a familiar screen. What you may have seen in the announcements is that we can now do... Oh, I need to... We have a new installation option, which is the graphical installer, and I just want to show it because I'm very proud that we managed to integrate it into the main installer finally. It is somewhat bigger in a tidy than most... than the regular, nude-based installation methods, but we feel that... Thank you. We think that's well worth it. It still needs some work. It would be nice to get this aligned, but that's basically a hangover from the nude installation method where you have non-proportional characters. But we hope to be able to fix that at some point in the future. The main advantage of the graphical installer is, of course, that it allows us to add languages that have script sets that we are not able to support in the nude front-end. So it's really an internationalisation advance, which Christian, of course, is extremely happy about, and allows him to find even more translators for the installer. Franz, what toolkit is the graphical installer programmed in? It's programmed in GTK. It uses GTK libraries with everything that's underneath that, like Pango, ATK, and it runs on the direct frame buffer. I'm not going to actually run through the whole install with you. We will do some more bits later on, but let's go back to the presentation for now. That's the wrong key. Okay, so what happens when you boot the installer? First, based on the type of InnerTardee, we have either in it or has been in it is started, and those will do some very early initialisations, like making sure that some devices are present, and after that, they will both call this box in it, which parses ETC in a tab. That runs two sets of two scripts, and those scripts each do run parts on different directories. Some scripts will be just run, others will be sourced. Finally, the InnerTardee will set up a VT2 for a shell, VT3 for farlog messages, which we don't use anymore, that's tailed, and VT4 for the syslog, which basically now contains all debugging and log information. One important thing is that most of those scripts come from the root scale UDAP, and scripts can be architecture specific. At the end of the, or not really at the end, because the real end is shutting down the installer, but near the end of the Debian installer scripts, the main menu is started, and that basically manages the whole rest of the installation. It is running, even though you may not see it at critical and high priority, but it's still there running and managing it, and you can always go back to the menu using the go back button. During normal install you will mostly run at high priority. Critical priority is mostly used for preceded installs, automatic installs, while personally I use medium priority a lot, because it doesn't show all the really annoying detailed questions, but still gives you the main menu, and does more control over the flow of the installation. You know that every step you will have a point where you can say, okay, I want to switch to shell, and I want to add some debugging information, or I want to look at the state of the installer, which is not possible with high priority. I really use medium priority a lot. Low priority, of course, is for export installs, and at export install you get all those really weird options that nobody ever used anymore, like module parameters and stuff like that. The menu is dynamically assembled, which is needed, of course, because you don't have the full set of UDEPs right from the beginning, so basically after every step of the installation finishes, it will read the control file to see which UDEPs are available, and will rebuild the menu from scratch. The order of menu items is determined by two things. One is the dependencies between UDEPs. If a UDEP depends on another one, the other one will always end up higher in the menu, and the second is the menu item, which we will see later. The menu item is a number in the range from 1 to 99 at the moment, that if there are no priority conflicts, the menu item will determine the order. But they may be out of order if you look at what's actually displayed because of priorities. If you install a UDEP normally, it will only be unpacked if it's displayed, if it's a UDEP, a component that's displayed in the menu. So the post-inscript will not be run. That's a bit different from what happens in a normal system. If you have a UDEP that's not displayed in the menu and that has a post-inscript, most don't, but you can have one, then the post-inst will be run during the installation of UDEP. For UDEPs that are displayed in the menu, the post-ins will be run when it's selected from the main menu, either automatically or manually by selecting a menu item. So that means that you could say that the main menu is responsible for configuring UDEPs. If you compare it to a normal system. It also means that post-ins really have to be idempotent. You have to be able to run them multiple times and basically get the same result every time, which is a rather important development thing to think about. There are some components that are available at the bottom of the menu but are not run automatically. Those include saving log files, aborting the installation, changing the depconf priority, stuff like that. So here is two packages as they look in the status file. That should read status file in the title. On the running installer. Here you can see the menu item. NetCfg has a lower one than ChooseMirror. But as ChooseMirror depends on a configured network, which is provided by NetCfg, the order would be NetCfg first and ChooseMirror after anyway. As I said before, the order is first determined by dependencies. It also shows that you can use virtual packages to have more than one component provide the same functionality. We also have at the moment different partitioning programs and that provide like a setup file system or partitioned or swap partition, stuff like that. A base design policy has always been for the installer to keep it very modular, to keep it very flexible, to be able to drop in functionality where needed. Hooks are a method that's offered that flexibility. The installer uses hooks quite liberally. You see some examples here that are run at the different parts of the installation process. If you have a UDAP that is run quite early in the process, but also has something that needs to be done later on in the process, you select the correct hook directory, you drop in a script there in your rules file, and it will be executed then. You can see what the most used places are just before the bootstrap is run. After the basis has been installed, but before the kernel is selected, so you could even say, okay, I want to select a different kernel there. At the end, right at the end of the installation, when things are cleaned up and the last configuration bits are written to the target system. There are some other hooks that are not used so much and that are really specialized. You can drop things in libmainmenu.de. Those will be picked up by the main menu program. I'm not even sure what exactly they do, but if you're interested you can find out. The up-set-up generators, those are run when up-set is called and you have different generators to set up a CD-ROM app source or a mirror app source and for the security mirrors. Ubuntu even has a few scripts in our source repository for their source setup. We don't use them, of course, but it's easier for them if they're part of the source so they have a smaller diff. Then there's Partman. Partman is quite amazing. I've really only started working on Partman myself this year. Partman is one huge collection of hooks. There's almost nothing that isn't called a hook script. It makes it a bit hard to get into, but once you see the basic structure of Partman, I think you have to start to admire the guy who built it. There are a few special tools that are available, mostly for use in scripts. We have uninstall, which you can use to either schedule a UDAP for installation later after the source where you can get the UDAP from has been set up or it will be run immediately if it spots that the source already has been set up. Again, right in the beginning of the installation, for example, when the language is selected, you can say, okay, this language has been selected. That means that later on in the installation, I would like to have this UDAP run. Even though you cannot load UDAPs at that moment, you can say I want to do uninstall UDAP name and it will be scheduled for later installation as soon as possible. The same goes for apt install, only that installs real depth into the target system, into the installer environment. Then you have log output, which allows you to run a command and redirect all its output, be it to normal sys out or be it to sys error, where you want, basically. It's mostly used to redirect output to sys log. Then we have intarget, which allows you to run scripts inside the target, inside the truth. What intarget does is set up the environment a bit more so it will mount proc and sys and stuff like that and will unmount it again after the script finishes. You do intarget command or intarget script and it will truth, execute script, exit and clean up, which makes life a lot easier for us since it has been written because we used to do that kind of setup in the script themselves and that's no longer needed. Well, there is a bit of proceeding, a bit in the paper that I wrote for this conference about proceeding, but I don't really want to go into that here. I don't want to go into that, and to the appendix we have on proceeding in the installation guide. It's important if you want to do proceeding for search, that you use the search manual and if you want to do proceeding for either edge or sit, that you use the installation guide on alliot because there have been major changes. Okay. Now let's do some real development work. Let's try to fix the problem. And I've selected the problem that we discovered yesterday and which Mark Heimer and Stephen Graham helped us debug together with a guy on IRC who has done a lot of work on partner crypto recently and the four of us finally tracked it down, so let's try it if we can still do it. I will first need to load a snapshot that I prepared earlier. Is this still audible? That's this one. In this image I have run the installer up to partitioning basically. I've start the installation at medium priority to have the full control over it and you can see it's an empty disk. There's nothing yet on it. And what I want to do first is to start a web server from the installing environment so that we can easily check what's in the log files. So for that I will go back to the main menu and select the option save debug logs. Here you have the three options and the web server is by far the most used at the moment at least by me and Joey, I would guess. It tells you the IP address so let's start a web browser and as I've used the same address over and over again this week it's already there. Is it there? Yay! So here you have the SIFS log basically up to now and you just press F5 to get the new version with your latest debug information. This really makes debugging a lot easier than it used to be. When you had to use nano and you had far less crawling opportunity and you couldn't widen the screen this really gives you a lot of control. So the installers still knows that it's supposed to partition big disks next and the first thing we have to do is create a partition for LVM because the problem is in LVM. Let's create an MS-DOS partition. That's there. Create a new partition. Use the full size. It's going to be a primary and we're going to use it as a physical volume for LVM and that's basically it. So that's what we want. Now I'm going to take a snapshot to have our starting position for debugging and I will first show you the problem. We first have to confirm that we want to write the changes we've made to the partition table because otherwise LVM won't work and then we get the option to create volume groups. That looks nice but that doesn't. We should be asked for a volume group name or whatever. Joey, can we get a mic to you please? Okay, well let's just do that again. Create volume groups and nothing happens. We should be asked for volume group name and so on. So let's switch to... that won't work. It's going to take a lot of switching now. Refresh and see if we can find anything in the log. This one has been there for a while. We're still hoping that the part that LVM will fix this sometime. But that's not part of the problem. Well, this is basically part of the starting part. So it's not there. And I cannot see anything really weird here either. So we need to start looking a bit deeper down. If I switch to the second console and go to lip partman. Here you have that beautiful set of hook script directories. And the main menu, the main screen is the choose partition one. So we have to look in the choose partition directory. And there you find under number 30 the LVM option. So let's look there. And here we have two files. Choices isn't very interesting. That basically just gives the name of the menu option. But if we look at dual option, there we have a nice script. Partman is completely scripted. Except for the interface to lip parted, which is the parted server. And that's written in C. So nano is the editor that's available in DI. And let's just add a setman X to the script. Back to the installer. I'm going to back out just to make sure that the script is started from scratch. I don't know why this is shown. It should go back to the main menu in my opinion. So we just answer no. And here we have the start of LVM again. Modify our volume groups again. Create volume groups. Same error. And now we can check the logs again. And here you see... Whoa, what happened there? Here you see the output from that script. Well, the interesting bit should be at the bottom. But it seems to run fine. Which is of course not really what we wanted. I'm going to cheat a little bit. That's not here. Well, if you take a look at the source code of the script, you see that it's not really responsible for running these commands. But right at the bottom you can see that it calls the LVM CFG script. So maybe we should take a look at that. Let's see where it is. In bin LVM CFG. And let's try setman X in that one. Do I have a question here? Could we have a microphone please? Yes, I will remove that. So, none of the option. And take that one out. Back here. Back out again so we know that the scripts are started cleanly. And once again we go to check the log information. And here we have something that looks not like what you'd like to see. And well again you have to look at the code to see what's going wrong. But basically this variable should be create. Because the script checks for it and it isn't. So apparently there's something going wrong in that echo set TR command sequence. So let's see if we can reproduce the error. Let's go to... I'm going to keep it like this for a little bit. I can just look in the debugging what the actual commands are. As there is a set on the first space it doesn't really matter what we type after that. But what is important is set minus E. And then we have quote. I know space and everything after it. And close. Let's see what that does. Okay that looks good. And if we add the TR to C. I hope I'm not boring you Stephen. Because you've seen this already. And we have the segmentation fault right there. So let's check that it's really the TR command by removing the set. And yes. So now it's kind of time to file a release critical bug against busybox Udab. Which we did yesterday. Well I hope this shows you some of how relatively easy it is to debug Debian installer. Because it's all scripted. Because you have access to the logs in a fairly easy manner. There's a few C programs that will require a bit more effort. But you can get S trace into the installer environment. You can add debugging commands in your C program to make a display information. Compile the Udab. Drop it in. There are several techniques for that. Which I won't go into detail now. But I hope I will be able to add them to the paper later. And well we've never really been completely stuck debugging things. Any questions? Can we get Mike please? How am I supposed to get S trace into the environment? Is there an Udab for that? There is Udab for it. You will need to either include it into the NTRD when you build it. And I will show later how you can do that. Or you have to set up networking or access to a USB stick. And add it from there. There's a question from ISC from Rayfell Gizzard. Could you please ask if there's going to be a QT front end for the installer? Well we can expand the question by asking if there's going to be a X backend for the installer. At the moment we don't have plans for any of that. But we also don't exclude it. I heard this week that Trolltech has some plans to go into this direction a bit more. So who knows if it's proved to be superior technology and the changeover is not too big. We might. But for now we're quite happy with what we've been able to achieve using Direct FB and GTK. And there's a second question from Orlando Vile. Is the custom Debian Distro Toolkit finished? The Debian Distro Toolkit. I'm not sure that I understand what is meant by that. Joey, do you have any clue? The custom Debian Distro Toolkit. Wait for Mike please, Joey. I know that the CDD people are working on making ways to make customized to DI CDs and so on. I don't really know much more than that. I haven't looked at it. Okay. Well I have attended both early this week by Fragrant who has been doing Geek something which is about FreeGeek which is about recycling old computers. And they have developed something called Simple CDD which can be used to, I understand, I haven't looked at it yet, which can be used to generate CD images. Using Debian CD I think it's affronted to Debian CD and which also includes some pre-cofiguration stuff. But that would be something to look into for easy CD creation. I hope that answers the questions. Franz, going back to the QT bindings or interface, wouldn't that depend upon a QT layer on top of a frame buffer? And does that exist? I haven't got a clue but yes at the moment it would depend on direct FBE support. Unless of course we should go back to X. But as I understand it I'm not a technical expert in this area. But as I understand the X back-end is heavier than the direct FBE back-end. Sorry, people at home cannot follow. QT for the frame buffer certainly does exist but it's what TrollTech has been selling to their paying customers. The free version is just capable of doing X and nothing else as a teaser. Thank you for the information, Dario. Hi, what are the memory requirements for the graphical installation? For the normal installation, let me start off by that. We tried to support 32MB and the last beta release still managed that for IP86. For the graphical installer we have started with a fairly large unit RD. The memory requirements for that were set to be safe at 96MB. The entity has shrunk a lot since then mainly because we managed to deal a lot smarter with fonts. We tripped unused characters out of them. So it's really lean and just what we need to support the languages we have. Although if Google has this way we will need extra fonts and extra fonts and extra fonts so it will grow again. But I don't know what the current memory requirements are. We are hoping that we can get it down to 64MB which we think is a fairly sane requirement for a graphical installer. The installer will switch back automatically to the new front end if that is not met. So you will be able to install anyway even if you have less memory. Thank you. Okay, the mic over there. Could you please ask what are the processor requirements for the GUI installer? You saw that it runs fine in emulated environments. My laptop is a nice one but it's not extremely strong for current standards. It runs nice in emulated environments so it should run fine on, well, basically anything, Pentium 3 and higher I would say with decent. Okay, I hear it works fine on Pentium 200. Okay, let's move on while we've already done it. This is the missing caption creating UDAPs. What are UDAPs? UDAPs are basically just Debian packages, Debs, but with some special characteristics. They are optimized for size and because they need to be optimized for size they have relaxed policy requirements. You don't need to include license and documentation and stuff like that into the UDAP itself. A license has of course to be available into the source package but not into the UDAP itself basically because nobody will ever look at it or be interested in it. You need to keep the source model so that you can boot in Tardee fully into memory and a lot of the installation is run in memory only after you have run partman setup swap. Does swap become available so you can kind of increase your memory usage but up to that time you really need to try to be as lean as possible. That's also one of the reasons why long ago decision was made to only use C and Shell inside the installer to develop it. There is basically at the moment, although there are some plans to change that at least to some basic functionality, there's no version management. So once you've installed the UDAP you cannot upgrade it or whatever. There is an option to remove it but even that is not fully guaranteed to remove everything. The functionality is limited of the packaging tools. Creation of UDAP is fully supported by DAP Helper. If you use DAP package you will have to do some ugly work arounds for instance to force the UDAP extension in the file name. But DAP Helper, if you tell it that you're creating a UDAP will basically do everything for you. It will strip the documentation and the license and so on. It will skip steps and do other steps with special options. I've listed a few types of UDAPs, mostly for information. I'm not sure if I'm complete there but these are the main ones. Of course not all UDAPs that are used in the installer are written by the DAP installer team itself. We use a lot of UDAPs that are created as a by-product of normal packages or normal library packages. This is a very nice feature that was added recently and that actually allowed us to integrate the graphical installer into the main built environment. Up till a few months ago, if you ran the HSA lip DAPs, terrible words to pronounce, you would get dependencies on the normal libraries instead of the UDAPs. Why? Because the HSA lip files that are included in every library package just didn't know about UDAPs. So they couldn't tell the package, okay this is for a UDAP so you need to include a dependency on a UDAP instead of the normal library. So that basically meant that dependencies for libraries were fucked. That caused a lot of problems when building UDAPs and when building the installer because basically it would do the wrong thing. It would try to load a DAP instead of a UDAP. So what has been added is type support in deep package DAP and it's currently only used for UDAP but it could be used for other types of packages. You can see that a second line is added in the HSA lip files starting with UDAP column. Instead of referring to the name of the normal library it will refer to the name of the UDAP. To generate that extra line you have to do something like that in your rules file. The magic is in the add UDAP option. So when creating a UDAP there's two special things in the control file in the Debian directory. Those are xe package type UDAP which is the line that tells DAP helper that we are building a UDAP and so it will activate all that special build functionality. And the second one which is only used for UDAPs that are supposed to end up in the menu is the XB installer menu item. In this case it's 12. So let's try to... Yes, a question there, a microphone please. Is there any reason for the XC-XB? That's in policy I think. No? Can we get the mic to Joey? The X is of course for extended since it is in a defined field. The B means it goes into the binary package and the C means it is only present in the source control file. Frank? Would the installer team like that Deep Package Dev adds more features from the currently encapsulated in DAP helper to Deep Package Dev itself like supporting installer menu item and stuff like that without the prefix or is it... Do you like the fact that you don't have to file a bug against Deep Package Dev if you want to change that? Well, we do get all kinds of errors because of these lines when we're building the package. And it would be nice to get rid of them. So yes, we would like that if you say, okay I've now done all the 3000 bugs that are open against Deep Package and I'm ready for something new. No, the bugs against Deep Package not actually but the Deep Package Dev bug list is pretty much under control I think. And so you can certainly add some wish list bugs there and you have a good chance to get them merged. Okay, thank you very much. So getting back to the slides, what is the one killer feature that most installers have but Debian install on Lex? Anyone want to have a guess at this? Tetris! Well that is something we have been thinking about and even have been working towards. It isn't there yet, but I think it will be a feature that will be added post-edge. Or whatever, but we are looking at several options. Joey had a very nice one earlier this week that he showed to me. But yes, we will be looking into adding games, but that's not the one I was talking about. Well, let me just show you. Well, we are going to fix it. I really have to give the credits for that to Martin Selvalhelas. I received me on April the 1st, requesting this or something like it. So I thought, well, it could make for a nice demonstration package. Of course you need an SVN checkout and I need to set up my set route for this. I can try to do that. Too tiny. Well, let's make it full screen then. Although this is supposed to be a workshop and it would be better if you could all follow along, I'm afraid that would take too much time, so I have done a fair amount of presentation and I will basically walk you through the files that are included in the UDAP and explain a bit about what's in them and why it's there. Instead of doing it all together, I think that makes more sense for this meeting than really having you try to build your own UDAP that would take a slower tempo than I have time for at the moment. So let's see what we have here. Well, the first file that's there, check license, is the super secret C program that is going to check if the license key is actually valid. So that's basically compiled already. The Devin directory we have, of course, and we have finished install D, which is where we can, which is one of the hook script directories. What we have there is copy license with number 10 before it to help set the order of the scripts. Copy it into the USALib, finish install the directory on installation. Well, this is only an example, so I've made it fairly simple. Just copy each C license as it's created during the check of the key to target. That's basically all that's in the root directory for the UDAP. All interesting stuff is in the Devin directory. Well, this shouldn't come as much of a surprise to most people familiar with packages. It's all basic what's in all other packages. The change log is just an initial version. In the DI repository we use unreleased when there have been changes since the last upload. So we can easily see what UDAPs need to be checked when we are going to release. That's needed because there's quite a few people who work on UDAPs at the same time. We don't have really ownership of UDAPs, although we have main maintainers of some of them. Our competitors for DAP helper. A controlled file we will work on a bit later. The dears file contains the two dears that need to be created. USALib, finish, install D and Sbin. Let's take a look at the templates file. That has a few templates. The first one is to enter the key. The second one is to ask the user a question if he should enter an empty one, which of course is invalid. The third one is if he does enter a key, but the checked license script returns an error. The fourth one will be shown when a correct license key has entered. I've made it a bit secret by using two variables that will be set from that secret binary that we have. We have a message that will be shown on the board because we're going to reboot the system and it's not very nice to do that without announcing it. We have the title that's going to be entered into the main menu. The underscore before the description fields means that all these are translatable except for the confirmation one, which we should of course solve because otherwise Christian will be unhappy, but we will have to deal with it later at some time. The rules file. There's also not very much special in that. I've created a script variable where you can list one or more scripts that need to be dropped into hook directories. The small loop that's in the build target or the install target will put our scripts in the correct location. We have to install the checked license binary. As you see, for the rest, there are no special options needed on the DAP helper commands to generate UDAP. For a lot of UDAPs, the most functionality is contained in the post-inscript and it's the same here. There's a function that is called an error with the parameter of the template to be shown. That's either license UDAP invalid or license UDAP empty. There is an endless loop that will keep asking the license key until either the user chooses to abort or a correct key is entered. The PO directory is of course for translations. There are currently none in there but there is a template file so translators could start on this. We have control file which at the moment only has the source. We will need to add the binary so that is package license UDAP. Then we need to tell DAP helper that we are working with UDAP but we are trying to create a UDAP. So we need the XC package type UDAP. As it contains the secret binary, we need to make it architecture any. Which also means of course that the current setup will fail as I've only included one binary and we will basically need one per architecture. We can't build if it wouldn't be secret otherwise but we will still make it architecture any. Priority standard because we really want this to be run by default. If you make UDAP that contains a menu item optional or extra it will not be included in the menu by default only when there are dependencies requiring that UDAP. We need some dependencies for MESC and as ellipse. We will need a description. Well let's keep it at this for now. Because we want it to be shown in the main menu we will need a menu item but which. For that I am going to make a short excursion to projects DI installer documentation development. And there you have a lot of documentation that can be relevant when you are working on the installer. I am kind of hoping that I can extend the paper I have written for this DAP conf to be more like a DI developers reference manual. And that we can include a lot of the information that's currently here into that manual or into appendixes in that reference guide. But currently you can find a lot of information here. And we need the menu item numbers text. And here you can see that locale chooser is run at 10. Then we have load floppy which isn't used that often. But basically we want to run this UDAP after locale chooser and before anything else. So let's give it menu number 11 as well. The last thing that I have skipped is the copyright file. And well that's going to be a bit of a problem which I've solved by doing this. Yes. Okay let's go down one level and do a debelt. Well that looks good. There are some weird warnings about extra license file which is just because I've used words that it apparently checks on in other files. And no standards version field is a warning you will see quite often for UDAPs because it's not required. And well we use that your own release distribution name so it complains about that too. Should I move it up a bit? So now if we look down you can see I had a typo early on so it's now with a C and with an S. But yes it's correct and it's the one that we just regenerated. Well that's how you build a UDAP. Nothing to it. So the last subject and we have a quarter of an hour left so that should work quite nicely is building an actual image. And let's try to build one and test the UDAP we've just created. A question there. The skeleton that you started from is that just something you had around or I was thinking I was wondering if it might be useful to have something like a DH make target that could give you a nice skeleton for UDAP. Well what I normally do is take a fairly bare UDAP that I know there's about 30 or 40 available in the SVN repository. Copy that and delete everything I know I won't need and add it to rest. That's my working method but that's basically because I'm not a real developer. I'm just somebody who steals from others and modifies. There are probably other people who will start from scratch and do it in the correct way. This UDAP would need serious refrew anyway so yeah. So most of the images that or the installation methods that I've shown you in the beginning are ready for use like the HD media installation method, the mini ISO, the net boot image. The one exception are the images that are for CD-ROM. Those really need the CD-ROM environment because well basically you only build the entity and the kernel. So you need to embed it on a CD together with the remaining UDAPs that need to be loaded together with ISO Linux or whatever boot loader you need for your architecture. Depending on the type of image packages for installation of the target system. The exception to the exception is the mini ISO which is self-contained and is generated as part of the I image generation. Of course images can be built separately or as part of a release. What's involved in doing a release for Debian installer? Well basically you start doing Deepakogy build package after checking your changelog and so on. You do the upload and then you have to wait for a long time because the FTP masters have to do by hand processing of the upload. Because there's a tarball that needs to be extracted to a certain location on the mirror and some simulings have to be set there to make the installation images available for... download and for the Debian CD people who will build the CD images from it. And the irritating part is that the build these for the other architectures will only kick in after the by hand processing has happened. So that's what happened next and then for each of the architectures again there has to be some by hand processing. We hope that that will be automated at some point in the future. What are the requirements for building? If you want to build from the current development version you need to run unstable or unstable chirod. You need an SVN check out of trunk. You need to get the build dependencies for Debian installer. And you need to have a mirror available where the UDEPs that will be included in the image can be downloaded from. And you have two choices there. You can use the default source list UDEP which is generated based on the source list that's set up for the regular system. Or it will copy some information from there and add Debian installer section of the archive as parameter. Or you can use source list UDEP manual and then you can add basically any source you would like to include. Which can be useful for building images for testing. Although there's a more convenient mechanism available as well which I will come to a bit later. To build the search installer you need of course a search environment and a check out of the search branch in SVN and not the trunk. So the structure of the build system. It looks quite complex but it's a very hierarchical structure. And because it uses make it goes through that structure in a recursive way. The build targets that are available are generated dynamically from the definitions in various directories. And I've listed the main directories that are used in the build of system below that. A little bit in order of importance. The config directory contains and we will look at those a bit later. The config directory defines available targets. Package list defines which UDEPs will be used inside this particular image. The boot directory contains configuration files used to make an image bootable. Local UDEPs is the alternative to adding extra mirror sources that I mentioned just now. You can just drop a UDEP a newer version than is on the mirrors or an equal version into the local UDEPs directory. And if the UDEP should be included in the image it will first check local UDEPs and then check the mirror to include it. So that's very useful for testing. You can just drop a UDEP in there and we will be doing that for this test case. UDEP contains helper scripts. Temp is where you will find the full tree of the contents of the initRD after it has been built. So if you want to check if everything is there or if you want to check specific files you can always take a look in temp. And this is where the images themselves after they've been built end up together with some log files and manifest files. One important step in the build of an install image is library reduction. And that's basically used to minimize the size of the entities. There's a bit more information about this in the paper I wrote. And that's the last slide. So now let's go to the actual building of an image. So we need to go, let's go one down. Oh, you saw this. This is basically the set of UDEPs that we develop as the DI team. And if you look at partman, there's a lot. There you can see all the different partman components which all drop their hook scripts in the correct location. And if you look in kernel you can see all the source files for the kernel UDEPs that are generated for all architectures. Some have, still have 2.4 variants but I suspect we will be dropping them pretty soon. To build the image we need to go into installer which is where the Debian installer package is built from which is uploaded. If you run the build or the package build package here you will end up with the Debian installer package. We used to have the manual in here as well but sometime last year we separated that and created the separate source package for the installation guide. To build individual images you go to the build directory and here you see all those. Let me do really clean so you can see what's really there when you check it out. And here you see the directories I listed earlier. And while the needed characters one is a special one that's not really that interesting. I'm running a little bit short of time so I'm going to switch to building the image first and we'll see if we have questions after that and if not I will go into the contents of directories a bit more. But there are examples in the paper as well so I don't think it's really needed. If I do plain make you will see that it will go into the config directory and basically check which targets are available and list them. There's a lot of targets that you will never use so what we can do is shoot us at a grip there. Thank you. I just got an extension. These are the plain build targets. We also have rebuild targets that will do a little bit of cleaning before starting a build. There are clean targets and the really clean target is a very important one as well. So as I said the mini ISO is a byproduct of the net boot image and that's easy to test so let's build a net boot image and just get the mini ISO and as we wanted to include the UDEP we just created I already copied that into local UDEPs a bit earlier. So now we do a fake root, make build, net boot and let's pipe that to or redirect that to a log file. Here you can see the list of UDEPs that it's going to be using or UDEPs that it's going to be downloading. Because I did a really clean it has to get them from the mirror but we seem to have fairly decent network connection. Colonel image is of course the largest thing to be downloaded so that will take a little while. If I rebuild after this it will go a lot quicker because it will keep the UDEPs that's already downloaded into a cache directory. Well let me take this opportunity to see if there are any questions. Phillip Hans here. Not really a question but it's a gotcha because you cache the packages it also caches the things from local UDEPs so if you copy another updated one without changing the version number you get stitched and you keep on testing the wrong one. That's something that has been annoying me as well and I think we should delete the packages file in that directory or anyway we have to find a solution for that because you basically have to do a really clean now in order to test with newly dropped in UDEPs into local UDEPs. I agree with you. Ian Ffont. So there you seem to be using the SVN version right? Yes I'm using trunk. Okay but I saw that there are Debian installer packages in the archive. Can we start from each or is something... Can we start from the Debian installer packages which is in the archive to rebuild it like a pity gets so sit and go ahead or there is something missing? No you can start from that in principle but it's not the preferred method. If you do that and especially if you use the last beta there will be stuff in there that may not be usable anymore with the current UDEPs that are available. So if you're trying to build for trunk or for start you could probably do it because that's a fairly stable environment. But in testing and unstable there are so many changes that you really need to start with the most recent environment. How far are we? Still downloading? Not a question. Yes you mentioned that there was a way to build testing installer images without having a testing environment. What was that way? Did I say that? Yeah. Doesn't sound familiar. Okay so how would you build a testing installer? I guess that could be interpreted in two ways. One way you could mean that is the version of the installer using UDEPs from Edge. And the other way is the installer that defaults to installing testing. Okay. Well basically when you're talking about that you're not talking about building an image but more about assembling for instance a CD image from individual UDEPs. And when you look at the WNCD builds that are being done daily we have two basic sets of CDs. We have the Edge daily builds and we have the CID daily builds. One takes UDEPs from testing and one takes UDEPs from unstable. If you look on the CDs themselves you will always see actual packages from testing. So the CDs are always set up to install testing not unstable because the chance of installations breaking for unstable is just to make that a default. But we have two variations. Normally if you check the daily builds, the links to the daily builds on the Debian installer home page, they will point to the CID images. So UDEPs taken from unstable so you will be looking at the most recent uploaded version of UDEPs. When we are preparing for a release we will migrate the UDEPs that should go into the release to testing and switch the links for the daily images to using the Edge CD images. So at that point we will really be using UDEPs from testing and packages from testing. If you look at intermediate times using between releases looking at HDI images isn't really that useful because basically nothing changes there. The weekly CD builds are a bit like that. They use the UDEPs from testing so basically that's still better too but they have a new snapshot of the DEPs from testing. So the weekly CD builds are more for testing the installation of the target system than for testing the installer itself. I hope that's clear, it's quite complex and I probably should write that out as well. Screen saver, that's not very interesting. This is taking a bit longer than I'd hoped. Basically previously it downloaded everything that's needed for the 2.6 in a 3D and now it's downloading the kernel UDEPs for the 2.4 kernel. All the other UDEPs are already there so it should not take too long. Just a question back there. Yes, with respect to your floppy install images I assume there's one of the targets to make flops but how do you specify in that UDEP control file to which floppy is which UDEPs go? What is the process for that to separate in them? Okay, which UDEPs go into which image is determined in the package lists directory and there you will see all the image types available that's not per architecture but per image type and you may have variations between architectures on a higher level but the package lists files basically okay these UDEPs should be unpacked into this image but we should be able to just make it. It's going through nicely now. I think it's done really. This is just because I'm tailing it. Yep, done. So now I need to switch to here and do a little copy to here, power off, change the cd image we use and boot a thing. So here we have the language. I'll just select English because that will mean most people can read it and well United States because they're font of licenses and now we get the key map. Why don't we get the... We should have gotten the question about the... I think you might have forgotten to put the UDEP in the package lists or local UDEPs. Thank you. Let's see if we can correct that fairly quickly. So we switch back here and enlarge that. Vi package lists, net boot and here we have the architects below that. You can see the config file for I368 but we can also add a local file and if we put the license UDEP in there it should be added. Let's take a quick look at the I386. Here you can see a way that how it's determined with UDEPs are included and you can see from the top line include discover that it's recursive. You can include other definition files into your definition files so you don't duplicate too much and if you have to make changes you have to make the least changes possible. So now we have to run the build again and let's do it without... Sorry, we have to rebuild. This should go a lot quicker than just now. Franza, you're rebuilding the I26 and at our dear the I24. Both? Only rebuild the I24 with net boot. Remember that fun. We'll do the I26 afterwards then. You can see the library reduction basically. I still have one second. You also have to rebuild the other one because otherwise it doesn't get into it. You have to rebuild net boot as well again. After I386 because that's the way it's structured right now. It puts the I261 inside an image containing the other one. It's really wacky. It's one of the nice things we'll be able to fix when we drop to I24. I have basically started and because I have a local mirror so my build times are very quick. I've basically started to always do really clean before building but thanks Joey for enlightening us into the minor annoyances. I didn't want to do the download again though. So one more time. I'm just glad your machine isn't as slow as mine. Am I allowed to finish? I'll need two or three minutes. OK, almost there. Done. So now we can copy it again and then switch to VMware. Reset it. Beautiful screen. And now here indeed we have the license key. So if our plus enter you get the option to retry. Does anybody else have his license key at hand? GPL? OK, let's try it. I don't know. OK, that's it. So thank you very much for your attention everybody and let's enjoy the formal dinner.