2009-05-07
Next Session: TBD |
Toggle line numbers
1 [06:58] <dholbach> hiya kirkland :)
2 [06:58] <@kirkland> dholbach: howdy
3 [06:58] * kirkland wonders how many people are up at this crazy hour :-)
4 [06:59] <Rail> +1 :)
5 [06:59] * FuturePilot is
6 [06:59] <@kirkland> very good :-)
7 [06:59] <RoAkSoAx> +1
8 [06:59] <@kirkland> i'm just getting my demo env setup
9 [06:59] * dholbach just told a few folks
10 [06:59] <Jordan_U> I'm not
11 [07:00] <ienorand> I've sleep during the day...
12 [07:00] <@kirkland> howdy all!
13 [07:01] <@kirkland> alrighty ...
14 [07:01] <@kirkland> my name is Dustin Kirkland
15 [07:02] <@kirkland> I'm a MOTU and Core Developer in Ubuntu, and I work for Canonical on the Ubuntu Server
16 [07:02] <@kirkland> i'm here to talk about PPA's
17 [07:02] <@kirkland> what they are
18 [07:02] <@kirkland> how to use them
19 [07:03] <@kirkland> and how wonderfully useful they are!
20 [07:03] <@kirkland> so a PPA is a Personal Package Archive
21 [07:03] <@kirkland> and it's a tremendously interesting concept
22 [07:04] <@kirkland> i have been in and around Linux development for almost 10 years now, and I never heard of this "PPA" concept until I began working on ubuntu and with launchpad
23 [07:04] <@kirkland> so let's start by explaining what an archive is
24 [07:05] <@kirkland> i assume most people here have used something like apt-get, aptitude, smart, update-manager, synaptic
25 [07:05] <@kirkland> these are client-side utilities that talk to a server providing an archive
26 [07:06] <@kirkland> now the archive itself
27 [07:06] <@kirkland> is really just an http server
28 [07:06] <@kirkland> with files and directories that can be browsed
29 [07:06] <@kirkland> i suppose it could probably be an ftp server too
30 [07:07] <@kirkland> in any case, you're probably familiar with http://archive.ubuntu.com
31 [07:07] <@kirkland> if not, browse around it some time, by hand, by pointing a web browser at that address
32 [07:07] <@kirkland> you should see a fairly regular hierarchy
33 [07:07] <@kirkland> most of the interesting stuff happens in the pool/ directory
34 [07:08] <@kirkland> that's where binary and source packages land
35 [07:09] <@kirkland> now, archive.ubuntu.com is the "official" archive
36 [07:09] <@kirkland> which means that these are the packages, as "officially" prepared by the developers of the Ubuntu project
37 [07:10] <@kirkland> ie, MOTU for Universe/Multiverse, and Core Dev for Main
38 [07:10] <@kirkland> users should be able to maintain some fair amount of confidence in the quality and security of packages available in the general ubuntu archive
39 [07:10] <@kirkland> .....
40 [07:10] <@kirkland> now, that's all fine and dandy
41 [07:11] <@kirkland> but where does the really fun crack live?
42 [07:11] <@kirkland> in PPA's of course :-)
43 [07:11] <@kirkland> so a PPA is really just a mini little archive
44 [07:11] <@kirkland> the structure is basically identical to the archive.ubuntu.com
45 [07:12] <@kirkland> but the packages provided there are not part of the official distribution
46 [07:12] <@kirkland> there are several reasons for this
47 [07:12] <@kirkland> and different people use PPA's for different ones
48 [07:12] <@kirkland> usually, it's intended for testing
49 [07:13] <@kirkland> providing a binary, built package to some person or people for them to test
50 [07:13] <@kirkland> let's take a look at a couple of examples ...
51 [07:14] <@kirkland> as part of my responsibilities on the Ubuntu Server Team, I'm the package maintainer of KVM
52 [07:14] <@kirkland> it's a virtualization hypervisor, similar, perhaps, to vmware or virtualbox
53 [07:14] <@kirkland> 8.04 (hardy) shipped with kvm-62, 8.10 (intrepid) shipped with kvm-72
54 [07:14] <@kirkland> whereas 9.04 (jaunty) shipped with kvm-84
55 [07:15] <@kirkland> now, in the last ~1 year, this particular package has come *a long* way
56 [07:15] <@kirkland> and there are people using hardy and intrepid want to use kvm-84, for various bugs that have been fixed, or new features added
57 [07:16] <@kirkland> of course, we have processes for rolling out small fixes via updates to Hardy/Intrepid etc.
58 [07:16] <@kirkland> and we have a backports mechanism for backporting packages too
59 [07:16] <@kirkland> but this is a bit of a special case, and I wanted some really thorough testing
60 [07:16] <@kirkland> i could ask people to just "go build it yourself"
61 [07:16] <@kirkland> but really, how many people would do that? :-)
62 [07:17] <@kirkland> and, furthermore, how would I be sure that they built the right thing, or in the right way?
63 [07:17] <@kirkland> so i've been using a PPA to provide packages to this group of people
64 [07:17] <@kirkland> https://edge.launchpad.net/~ubuntu-virt/+archive/ppa
65 [07:17] <@kirkland> specifically, that PPA ^
66 [07:18] <@kirkland> if you go to that webpage, you should see 3 version of kvm published in that ppa, one each for Hardy, Intrepid, and Jaunty
67 [07:18] <@kirkland> you can also see that I uploaded the latest version merely 7 hours ago :-)
68 [07:18] <@kirkland> that brings us to another nice benefit of PPA's ...
69 [07:19] <@kirkland> you can upload to them basically whenever you want!
70 [07:19] <@kirkland> for the official archives, we have a number of deadlines and freezes that must be adhered to
71 [07:19] <@kirkland> currently, Karmic is open for development, and developers can upload to it
72 [07:19] <@kirkland> but Hardy/Intrepid/Jaunty are not open for development
73 [07:20] <@kirkland> and thus, it requires special permission to upload to those official archives
74 [07:20] <@kirkland> but PPA's can be uploaded to at any time, really
75 [07:20] <@kirkland> I should also note that this particular PPA is a "team" PPA
76 [07:20] <@kirkland> this is a relatively recent feature to Launchpad
77 [07:21] <@kirkland> so I have my own PPA ...
78 [07:21] <@kirkland> https://edge.launchpad.net/~kirkland/+archive/ppa
79 [07:21] <@kirkland> but i also have access to a number of team ppa's
80 [07:21] <@kirkland> so these KVM packages are sort of maintained by the ~ubuntu-virt team
81 [07:22] <@kirkland> in my PPA, you'll see a different set of packages
82 [07:22] <@kirkland> for one thing, you might notice XMMS :-)
83 [07:22] <@kirkland> i still prefer xmms over all of the other mp3 players out there, but it was pulled from the official Ubuntu archives (for some very good reasons)
84 [07:23] <@kirkland> no matter ... I just keep a copy in my PPA, that I can use on any Ubuntu machine I have :-)
85 [07:23] <@kirkland> so using a ppa
86 [07:23] <@kirkland> i should probably explain how to do this ...
87 [07:24] <@kirkland> to do so, i have created a shared screen instance
88 [07:24] <@kirkland> you can join me at:
89 [07:25] <@kirkland> ssh -C guest@ec2-75-101-177-177.compute-1.amazonaws.com
90 [07:25] <@kirkland> the password is "guest"
91 [07:26] <@kirkland> okay
92 [07:26] <@kirkland> please try to watch IRC, where I'll explain what I'm doing
93 [07:26] <@kirkland> and the terminal, where I'm going to do it
94 [07:26] <@kirkland> first, I'm going to add my PPA to my list of archives
95 [07:26] <@kirkland> sudo vi /etc/apt/sources.list
96 [07:27] <@kirkland> now, see the webpage https://edge.launchpad.net/~kirkland/+archive/ppa
97 [07:27] <@kirkland> deb http://ppa.launchpad.net/kirkland/ppa/ubuntu jaunty main
98 [07:27] <@kirkland> deb-src http://ppa.launchpad.net/kirkland/ppa/ubuntu jaunty mai
99 [07:27] <@kirkland> i'm going to add that to my sources.list
100 [07:27] <@kirkland> i'm going to save that file
101 [07:27] <@kirkland> and sudo apt-get update
102 [07:28] <@kirkland> as you can see, i get an error about a missing gpg key
103 [07:28] <@kirkland> we can solve that by retrieving the proper key
104 [07:28] <@kirkland> This repository is signed with 1024R/34BEEE14 OpenPGP key. Follow these instructions for installing packages from this PPA.
105 [07:28] <@kirkland> ^ the webpage tells us this
106 [07:28] <@kirkland> http://keyserver.ubuntu.com:11371/pks/lookup?search=0x657A928364338B14A900B68D7781BA0134BEEE14&op=index
107 [07:29] <@kirkland> https://help.launchpad.net/Packaging/PPA#Adding a PPA to your Ubuntu repositories
108 [07:30] <@kirkland> sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 657a928364338b14a900b68d7781ba0134beee14
109 [07:30] <@kirkland> now, let's rerun the update
110 [07:30] <@kirkland> \o/
111 [07:30] <@kirkland> no errors
112 [07:31] <@kirkland> so i want to install the last screen-profiles package from my PPA
113 [07:31] <@kirkland> note that version on this Hardy server is 1.44
114 [07:31] <@kirkland> https://edge.launchpad.net/~kirkland/+archive/ppa
115 [07:31] <@kirkland> and note that 1.54 is available here
116 [07:32] <@kirkland> now, notice that version 1.54-0ubuntu1~ppa3 is installed
117 [07:33] <@kirkland> thanks micahg
118 [07:33] <@kirkland> so apt-cache policy screen-profiles will show the different versions available
119 [07:33] <@kirkland> and specifically where they came from
120 [07:33] <@kirkland> now, let's grab a source package
121 [07:35] <@kirkland> whoops, bad example
122 [07:35] <@kirkland> um, let's grab a different package (something that's not already in my ppa)
123 [07:36] <@kirkland> gotta chase down some dependencies
124 [07:36] <rolando-ve> Try a usplash-theme
125 [07:36] <santiago-ve> fish
126 [07:37] <@kirkland> so i'm going to grab the source of a package called bip
127 [07:37] <@kirkland> it's an irc proxy
128 [07:37] <@kirkland> apt-get source bip
129 [07:37] <@kirkland> let's imagine that i've made some edition to the source code
130 [07:38] <@kirkland> now, i need to increment the version, and add a changelog message
131 [07:38] <@kirkland> dch -i
132 [07:38] <@kirkland> (more dependencies)
133 [07:40] <@kirkland> okay, now here's an important point
134 [07:40] <@kirkland> when preparing a package for upload to a ppa
135 [07:40] <@kirkland> we need to version it in such a way that it's a "successor" to previous versions
136 [07:40] <@kirkland> but we want to make sure that future, official versions supercede this package
137 [07:41] <@kirkland> in this case, jaunty's bip is version 0.7.4-2ubuntu1
138 [07:41] <@kirkland> by doing a dch -i, i have "incremented" the ubuntu1 to an ubuntu2
139 [07:41] <@kirkland> that will ensure that this is considered an "upgrade" from the previous ubuntu1 version
140 [07:42] <@kirkland> however, we want to make sure that a future, *real* ubuntu2 version will supercede this one
141 [07:42] <@kirkland> and thus, there's a special character that allows us to do this ...
142 [07:42] <@kirkland> the ~ tilda
143 [07:42] <@kirkland> bip (0.7.4-2ubuntu2~ppa1) jaunty; urgency=low
144 [07:42] <@kirkland> package is bip
145 [07:42] <@kirkland> the version is 0.7.4-2ubuntu2~ppa1
146 [07:43] <@kirkland> if i want to make multiple uploads of this package over and over to my ppa, i can iterate ~ppa2, ~ppa3, etc.
147 [07:43] <@kirkland> now, i add a change log entry
148 [07:43] <@kirkland> specificying the file i changed
149 [07:43] <@kirkland> and why
150 [07:43] <@kirkland> and i reference the bug number fixed
151 [07:44] <@kirkland> next I should build the package locally
152 [07:44] <@kirkland> to make sure that I haven't broken the build somehow
153 [07:44] <@kirkland> before wasting the time of the build machines in soyuz
154 [07:44] <@kirkland> (note that you should really use pbuild or sbuild, eventually, but that's an hour long class in itself)
155 [07:44] <@kirkland> so first, i need to get the build-dependencies
156 [07:45] <@kirkland> sudo apt-get build-dep bip
157 [07:45] <@kirkland> and then I'll do the build
158 [07:45] <@kirkland> using "debuild"
159 [07:46] * kirkland now wishes he had shelled out $0.80/hour for the quad-core ec2 instance :-)
160 [07:47] <@kirkland> so dch is the changelog editor
161 [07:47] <@kirkland> you can use dch -e to edit the existing entry
162 [07:47] <@kirkland> (ie, don't increment)
163 [07:47] <@kirkland> the -i does the increment
164 [07:47] <@kirkland> i also should have noted that you really want to double check the release
165 [07:47] <@kirkland> in this case, it's "jaunty"
166 [07:48] <@kirkland> but you might have, perhaps, wanted to specify that this package is for hardy or karmic, for instance
167 [07:48] <@kirkland> okay, the build is done
168 [07:48] <@kirkland> you see there's an error
169 [07:48] <@kirkland> it's missing the gpg to sign this package
170 [07:48] <@kirkland> of course, I have not copied my gpg key to ec2 :-)
171 [07:48] <@kirkland> so I'm not going to be able to sign this package
172 [07:49] <@kirkland> (nor actually upload it)
173 [07:49] <@kirkland> but let's get to that point ....
174 [07:49] <@kirkland> looking in the director above this one, we can now see that we have binary *.deb files
175 [07:49] <@kirkland> so we have build the binary package locally
176 [07:49] <@kirkland> now, let's build the source package
177 [07:49] <@kirkland> debuild -S
178 [07:50] <@kirkland> again, i'm going to get the same GPG errors
179 [07:50] <@kirkland> under normal circumstances, you will be prompted for your GPG password
180 [07:50] <@kirkland> and GPG will be used to "sign" your package
181 [07:50] <@kirkland> this is how Launchpad (and users of your PPA) can have confidence that you're the person who created that pacakge
182 [07:51] <@kirkland> okay, so the *source.changes file is the file that contains the magic needed to upload to a ppa
183 [07:51] <@kirkland> we should see some important information in this file
184 [07:52] <@kirkland> most importantly, checksums of the files, and a manifest of the files that need to be uploaded
185 [07:52] <@kirkland> once you have a changes file, you are clear to upload
186 [07:52] <@kirkland> now, uploading to a PPA requires one configuration change
187 [07:52] <@kirkland> you need a file in your home directory called ~/.dput.cf
188 [07:53] <@kirkland> my ppa entry looks like this:
189 [07:53] <@kirkland> [kirkland-ppa]
190 [07:53] <@kirkland> fqdn = ppa.launchpad.net
191 [07:53] <@kirkland> method = ftp
192 [07:53] <@kirkland> incoming = ~kirkland/ubuntu/
193 [07:53] <@kirkland> login = anonymous
194 [07:53] <@kirkland> allow_unsigned_uploads = 0
195 [07:53] <@kirkland> now that i have that file, i could attempt the upload
196 [07:54] <@kirkland> (note that this is going to fail, because of the lack of a gpg signature)
197 [07:54] <@kirkland> but i want to demonstrate the command
198 [07:54] <@kirkland> dput kirkland-ppa *sources.changes
199 [07:54] <@kirkland> dput kirkland-ppa *source.changes
200 [07:55] <@kirkland> now under normal circumstances, you'd see a few messages scroll by, and see your upload take place
201 [07:55] <@kirkland> about a minute later, you should get an email from Launchpad either accepting, or rejecting your upload (in case something was malformed)
202 [07:55] <@kirkland> if it's accepted, your package will go into the build queue
203 [07:55] <@kirkland> and eventually, Soyuz will build your code, and publish it to your PPA
204 [07:56] <@kirkland> alrighty ... let's take a few questions ...
205 [07:56] <djails> how do you specify what ubuntu version your package is for ?
206 [07:56] <rolando-ve> Kirk, If I use intrepid, and need to do that for Hardy, I must to do in a chroot + debootstrap?
207 [07:56] <blacknred0> so if i am building my first package should i start importing my keys first from launchpad?
208 [07:56] <@kirkland> it's pretty quiet, so i suppose you can just paste your question here
209 [07:57] <@kirkland> djails: in the first line of the changelog, edited with dch
210 [07:57] <@kirkland> djails: bip (0.7.4-2ubuntu2~ppa1) jaunty; urgency=low
211 [07:57] <@kirkland> djails: note the "jaunty" in that line
212 [07:58] <@kirkland> rolando-ve: hmm, to do your test binary build properly -- yes
213 [07:58] <@kirkland> rolando-ve: however, you should be able to build your source package safely
214 [07:58] <@kirkland> rolando-ve: so in that case you could grab the source, edit your changelog (and whatever files) and debuild -S
215 [07:58] <@kirkland> rolando-ve: again, it's always proper form to test your build locally first
216 [07:58] <iKOSHrf> can i make it a version that never gets replaced by the official branch? or just start my own ?
217 [07:59] <@kirkland> rolando-ve: it's quite rude to cause build failures on launchpad (costing other people time) if your build won't even work locally
218 [07:59] <micahg> ls
219 [07:59] <micahg> oops
220 [07:59] <@kirkland> blacknred0: if you're building your first package, you should make sure that launchpad has your GPG and SSH public keys
221 [08:00] <@kirkland> blacknred0: also, i think you have to sign the Ubuntero agreement to use PPAs
222 [08:00] <@kirkland> iKOSHrf: i don't think i understand that question?
223 [08:00] <blacknred0> kirkland, yeap, i have all of them. i am getting problems in the building :S
224 [08:00] <Ludo> kirkland, i see the package you build was for the i386 architectures. How will you change the package to be build for the amd64 architectures?
225 [08:00] <@kirkland> iKOSHrf: if you don't ever want it to get replaced, change the version to 99999.99999.9999 :-)
226 [08:00] <iKOSHrf> kirkland, if i just want to "fork" the version to make it my own "version" for some odd reason
227 [08:01] <iKOSHrf> hehehe ok.
228 [08:01] <@kirkland> blacknred0: make sure you have all of the build dependencies, sudo apt-get build-dep $PKG
229 [08:01] <blacknred0> kirkland, i mean is just a single script but it the make doesn't want to make the file properly
230 [08:01] <blacknred0> kirkland, ok, thnx for the info.
231 [08:02] <@kirkland> iKOSHrf: well i think that's exactly what I did in my bip example -- i have forked the ubuntu2 version; but you're saying that you don't want it to ever be replaced
232 [08:02] <@kirkland> iKOSHrf: in that case, you could add a really big number at the beginning of the package (which I don't really recommend), or "pin" the package
233 [08:02] <@kirkland> iKOSHrf: see the manpages for apt-get for pinning instructions
234 [08:02] <iKOSHrf> ok, thanks.
235 [08:02] <djails> kirkland: thanks. Now if you want to create a package for different versions of ubuntu, how do you go about that ?
236 [08:03] <@kirkland> Ludo: well, ideally you'd test your build on both architectures; i usually do that with KVM virtual machines; however, I understand that this isn't always possible
237 [08:03] <@kirkland> Ludo: launchpad will build PPA packages for several archectures for you
238 [08:04] <@kirkland> Ludo: basically, once I've confirmed that it builds on one arch, and if I have reasonable certainty that it'll build elsewhere, I go ahead and push it to launchpad
239 [08:04] <Ludo> kirkland, thanks.
240 [08:04] <@kirkland> djails: what do you mean? you just change "jaunty" to say "karmic" or "hardy" in that first line
241 [08:05] <djails> kirkland: so do you maintain a debian/ dir per version ? I have this upstream source tree and I want to createpackages for serveral ubuntus
242 [08:05] <micahg> do you need ot backport -dev packages?
243 [08:05] <@kirkland> djails: ah ...
244 [08:06] <@kirkland> djails: gotcha
245 [08:06] <Ludo> kirkland, how would one add a extra dependency to a package? For example I need a extra library or newer library for my modification to work?
246 [08:06] <@kirkland> djails: so I usually just dch -e, add a ~ppa1 ... hardy, then debuild -S
247 [08:06] <@kirkland> djails: then, in that same dir
248 [08:07] <@kirkland> djails: dch -e again, change to ~ppa2 ... intrepid, debuild -S again
249 [08:07] <@kirkland> djails: dch -e again, change to ~ppa3 ... jaunty; debuild -S
250 [08:07] <@kirkland> djails: then cd ..
251 [08:07] <@kirkland> djails: and dput kirkland-ppa *source.changes
252 [08:07] <@kirkland> djails: HOWEVER ....
253 [08:07] <@kirkland> djails: this won't necessarily work for just any package
254 [08:08] <@kirkland> djails: it'll work fine for simple packages with minimal build dependencies
255 [08:08] <@kirkland> djails: but if a package depends on a newer version of some library, it's quite a bit more difficult :-)
256 [08:08] <djails> kirkland: ok got it ! i ll try that
257 [08:08] <@kirkland> Ludo: that information is in debian/control
258 [08:08] <@kirkland> Ludo: so over in our shared screen session ...
259 [08:09] <@kirkland> Build-Depends: cdbs (>= 0.4.49), debhelper (>= 5.0.37.2), bison, flex, libssl-dev, quilt
260 [08:09] <@kirkland> Ludo: those are the build-deps for bip
261 [08:09] <@kirkland> okay guys ... i'm about to call it a night here
262 [08:09] <@kirkland> as it's past 2am :-)
263 [08:09] <micahg> 1 last Q?
264 [08:09] <@kirkland> one thing that i'll mention
265 [08:09] <@kirkland> micahg: shoot!
266 [08:09] <micahg> do you have to backport -dev packages?
267 [08:10] <micahg> I want to build FF3.5b4 for Jaunty
268 [08:10] <micahg> or are -dev only used when compiling?
269 [08:10] <ienorand> ps
270 [08:10] <ienorand> sorry
271 [08:11] <@kirkland> micahg: i'm not sure i understand your question
272 [08:11] <@kirkland> micahg: but your build dependencies should be available
273 [08:11] <@kirkland> micahg: so if you want to build something in your PPA, you need to ensure that the build deps are available
274 [08:11] <@kirkland> micahg: that brings up an important point ....
275 [08:12] <@kirkland> micahg: in your PPA configuration page, you can specify a few different restrictions, or options for your dependencies
276 [08:12] <@kirkland> on your own PPA page, you should see a link for "Edit dependencies"
277 [08:13] <@kirkland> Basic (only released packages).
278 [08:13] <@kirkland> Security (basic dependencies and important security updates).
279 [08:13] <@kirkland> Default (security dependencies and recommended updates).
280 [08:13] <@kirkland> Proposed (default dependencies and proposed updates).
281 [08:13] <@kirkland> Backports (default dependencies and unsupported updates).
282 [08:13] <@kirkland> micahg: that might help
283 [08:13] <micahg> ok
284 [08:13] <micahg> thanks
285 [08:13] <rolando-ve> Thanks
286 [08:14] <djails> kirkland: thanks !
287 [08:14] <FuturePilot> kirkland: thanks for the tutorial :)
288 [08:14] <@kirkland> you guys are most welcome
289 [08:14] <Ludo> kirkland, thanks.
290 [08:14] <rolando-ve> Nice job kirkland
291 [08:14] <@kirkland> so one last thing in closing
292 [08:14] <@kirkland> some people have asked how to setup a shared screen session like i used
293 [08:14] <@kirkland> did you guys find that useful?
294 [08:14] <micahg> yes
295 [08:14] <djails> definitely
296 [08:14] <FuturePilot> very
297 [08:15] <rolando-ve> Yeap
298 [08:15] <Ludo> ^^
299 [08:15] <@kirkland> okay, so i have a blog post about this
300 [08:15] <@kirkland> http://blog.dustinkirkland.com/2009/04/teaching-class-with-gnu-screen.html
301 [08:15] <@kirkland> that explains in detail what needs to be done
302 [08:15] <rolando-ve> Thanks again, :D
303 [08:15] <ienorand> Thankyou for the session :)
304 [08:15] <@kirkland> more simply, if you have an EC2 account, you can use a script I wrote, called "screenbin"
305 [08:16] <@kirkland> i just uploaded a new version to my PPA, so look for it there shortly :-)
306 [08:16] <@kirkland> that's all from me
307 [08:16] <@kirkland> good night :-)
308 [08:16] <@kirkland> or morning
309 [08:16] <micahg> good night
310 [08:17] <rolando-ve> kirkland: If you let me, I would like to translate it to Spanish
311 [08:17] <@kirkland> rolando-ve: please, go for it :-)
312 [08:17] <rolando-ve> and post it in my blog, (as yours)
313 [08:17] <rolando-ve> Thanks!
314 [08:17] <rolando-ve> see all!
Packaging/Training/Logs/2009-05-07 (last edited 2009-05-07 08:03:00 by i59F73504)