<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>oh jeez linux</title>
	<atom:link href="http://ohjeezlinux.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ohjeezlinux.wordpress.com</link>
	<description>The mustard indicates progress.</description>
	<lastBuildDate>Thu, 26 Jan 2012 20:49:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ohjeezlinux.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>oh jeez linux</title>
		<link>http://ohjeezlinux.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ohjeezlinux.wordpress.com/osd.xml" title="oh jeez linux" />
	<atom:link rel='hub' href='http://ohjeezlinux.wordpress.com/?pushpress=hub'/>
		<item>
		<title>FUDCon Blacksburg</title>
		<link>http://ohjeezlinux.wordpress.com/2012/01/24/fudcon-blacksburg/</link>
		<comments>http://ohjeezlinux.wordpress.com/2012/01/24/fudcon-blacksburg/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 15:04:26 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[Anaconda]]></category>
		<category><![CDATA[smolt]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[FUDCon]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenShift]]></category>
		<category><![CDATA[Red Hat]]></category>

		<guid isPermaLink="false">http://ohjeezlinux.wordpress.com/?p=139</guid>
		<description><![CDATA[So. FUDCon! You&#8217;re all probably tired of hearing about it already so I&#8217;ll spare you the personal details and get straight to the interesting stuff. Installer Team North America Jamboree New UI Progress on the new UI continues unabated, but &#8230; <a href="http://ohjeezlinux.wordpress.com/2012/01/24/fudcon-blacksburg/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=139&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So. FUDCon! You&#8217;re all probably tired of hearing about it already so I&#8217;ll spare you the personal details and get straight to the interesting stuff.</p>
<h2>Installer Team North America Jamboree</h2>
<h3>New UI</h3>
<p>Progress on the new UI continues unabated, but it&#8217;s just not gonna be done for F17. New target: F18. Woo!</p>
<h3>Installer image resplit</h3>
<p>My work to resplit the installer in two stages (and kill off the ancient crusty &#8220;loader&#8221; initrd environment in favor of dracut) has already partially landed in Rawhide, and we decided to commit to getting it finished for F17 if at all possible. This will mean:</p>
<ul>
<li>Greatly reduced installer memory use! Definitely under 512MB for media-based installs. Possibly under 256MB under optimum conditions. We&#8217;ll be doing tests and trying to find ways to reduce this further but that&#8217;s still a damn sight better than F15/F16.</li>
<li>Lots of 10-year-old code gets deleted or rewritten and moved upstream! Hooray for sharing code and maintenance burdens!</li>
<li>The installer should be able to mount anything that your normal system can mount, since we&#8217;re using dracut just like your normal system does. Which leads us to..</li>
</ul>
<h3>In the glorious future of F18 there is only preupgrade</h3>
<p>Upgrades in F18 will be handled using a totally separate codepath and runtime image, and <em>all upgrades will be handled Preupgrade-style </em>(i.e. starting the upgrade by running a program on your existing system).</p>
<p>You&#8217;ll still be able to run an upgrade from media if you want &#8211; the upgrader will be right there on the DVD/CD for you to run. But the installer won&#8217;t try to find any existing copies of Fedora to upgrade. If you want to upgrade, run the upgrader. If you want to do a fresh install, run the installer.</p>
<p>If you&#8217;re suddenly gasping for breath and thinking &#8220;OH NO MY /BOOT PARTITION IS TOO SMALL&#8221;: relax, friend. If we&#8217;re using the normal dracut initramfs to start the installer and upgrader, that means the upgrader will know exactly how to mount your root filesystem &#8211; even if it&#8217;s some magical encrypted-RAID10-double-LVM-with-cherries-on-top craziness. So we can store the upgrader runtime and packages basically wherever you have room for them.</p>
<h2>Smolt Chapter IV: A New Hope</h2>
<p>I am (ostensibly) the smolt maintainer. If you&#8217;ve filed any smolt bugs recently: Sorry! I don&#8217;t have a lot of time for smolt and it&#8217;s surprisingly hard to maintain in its current form.</p>
<p>But <a href="http://nathaniel.themccallums.org/tag/fedora/">Nathaniel McCallum</a> and I got to talking during FUDCon about how smolt could be made simpler and more powerful at the same time. The next day when I went to talk to him further about it, he was like: &#8220;oh yeah, so I implemented a really simple client and server along the lines of what we were talking about yesterday, so we just need to find somewhere to host it&#8230;&#8221;</p>
<p>And someone nearby said: &#8220;Why not just use <a href="https://openshift.redhat.com/">OpenShift</a>?&#8221; So, predictably, the next day Nathaniel was like: &#8220;So I got the server set up in OpenShift&#8230;&#8221;</p>
<p>So yeah. One weekend and we already have a live, mostly-functional prototype of a replacement for smolt. I&#8217;ll post more about it when we&#8217;re ready to start doing demos or asking for feedback but I&#8217;m kind of excited about it. If only I had more time&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/139/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=139&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2012/01/24/fudcon-blacksburg/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>
	</item>
		<item>
		<title>I&#8217;ve never had business cards before!</title>
		<link>http://ohjeezlinux.wordpress.com/2011/04/11/business-time/</link>
		<comments>http://ohjeezlinux.wordpress.com/2011/04/11/business-time/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 20:03:32 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[Awesome]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/wwoods/?p=79</guid>
		<description><![CDATA[I found some mail in my inbox this morning. Like, actual physical mail in my physical inbox. Weird! An otherwise-blank envelope from a nondescript address in Kentucky? Containing.. cards? What is this? OH VERY YES. These are, without at doubt, &#8230; <a href="http://ohjeezlinux.wordpress.com/2011/04/11/business-time/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=79&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I found some mail in my inbox this morning. Like, actual <em>physical</em> mail in my <em>physical</em> inbox. Weird!</p>
<p><a href="http://ohjeezlinux.files.wordpress.com/2011/04/img_04711.jpg"><img class="alignnone size-full wp-image-80" title="An envelope full of.. cards?" src="http://ohjeezlinux.files.wordpress.com/2011/04/img_04711.jpg?w=584" alt=""   /></a></p>
<p>An otherwise-blank envelope from a nondescript address in Kentucky? Containing.. cards? What <em>is</em> this?</p>
<p><a href="http://ohjeezlinux.files.wordpress.com/2011/06/img_04701.jpg"><img class="alignnone size-full wp-image-83" title="Now that's a business card with STYLE." src="http://ohjeezlinux.files.wordpress.com/2011/06/img_04701.jpg?w=584&#038;h=438" alt="" width="584" height="438" /></a></p>
<p>OH VERY YES.</p>
<p>These are, without at doubt, the finest business cards known to man. Just look at the smiling beefiness of my business card. Look at his bunly goodness and piquant mustard.</p>
<p>Look upon the Hot Dog, ye mighty, and <em>despair</em>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/79/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=79&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2011/04/11/business-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>

		<media:content url="http://ohjeezlinux.files.wordpress.com/2011/04/img_04711.jpg" medium="image">
			<media:title type="html">An envelope full of.. cards?</media:title>
		</media:content>

		<media:content url="http://ohjeezlinux.files.wordpress.com/2011/06/img_04701.jpg" medium="image">
			<media:title type="html">Now that&#039;s a business card with STYLE.</media:title>
		</media:content>
	</item>
		<item>
		<title>vim syntax hilighting for kickstart files</title>
		<link>http://ohjeezlinux.wordpress.com/2011/02/16/vim-syntax-hilighting-for-kickstart-files/</link>
		<comments>http://ohjeezlinux.wordpress.com/2011/02/16/vim-syntax-hilighting-for-kickstart-files/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 23:27:29 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[Anaconda]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/wwoods/?p=72</guid>
		<description><![CDATA[&#8220;Aaargh dammit vim&#8221;, I said to myself on Monday, as I started trying to edit a kickstart file. &#8220;Why do you keep thinking that the // in that URL is the beginning of a comment? This isn&#8217;t C++. You&#8217;re stupid &#8230; <a href="http://ohjeezlinux.wordpress.com/2011/02/16/vim-syntax-hilighting-for-kickstart-files/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=72&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&#8220;Aaargh dammit vim&#8221;, I said to myself on Monday, as I started trying to edit a kickstart file. &#8220;Why do you keep thinking that the <code>//</code> in that URL is the beginning of a comment? This isn&#8217;t C++. You&#8217;re stupid and I hate you.&#8221;</p>
<p>Fast-forward though a good 16 hours of frenzied hacking and much head-scratching, and voila:</p>
<p><img src="http://wwoods.fedorapeople.org/screenshots/kickstart-hilight-screenshot.png" width="459" height="658"></p>
<p>To install:</p>
<ul>
<li>save <code><a href="http://wwoods.fedorapeople.org/kickstart.vim">kickstart.vim</a></code> to <code>~/.vim/syntax/kickstart.vim</code></li>
<li>save <code><a href="http://wwoods.fedorapeople.org/kickstart-ftdetect.vim">kickstart-ftdetect.vim</a></code> to <code>~/.vim/ftdetect/kickstart.vim</code>
</ul>
<p>Enjoy!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/72/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=72&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2011/02/16/vim-syntax-hilighting-for-kickstart-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>

		<media:content url="http://wwoods.fedorapeople.org/screenshots/kickstart-hilight-screenshot.png" medium="image" />
	</item>
		<item>
		<title>depcheck: tags and timing</title>
		<link>http://ohjeezlinux.wordpress.com/2011/01/03/depcheck-tags-and-timing-2/</link>
		<comments>http://ohjeezlinux.wordpress.com/2011/01/03/depcheck-tags-and-timing-2/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 18:59:07 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[QA]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/wwoods/?p=52</guid>
		<description><![CDATA[Some details about the process where builds become updates, and where depcheck fits into it <a href="http://ohjeezlinux.wordpress.com/2011/01/03/depcheck-tags-and-timing-2/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=52&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In the previous three blog posts I talked quite a bit about the <code>depcheck</code> test itself. But tests don&#8217;t run in a vacuum &#8211; there are a lot of moving pieces around the test which have to work properly for the test to provide accurate &#8211; and useful &#8211; results.</p>
<h3>d(repo)/dt</h3>
<p>First let&#8217;s talk about how builds become updates &#8211; that is, the steps between a new package getting built, and a new update appearing in your friendly Software Updater app. Behold the <em>terrifying extent of my Inkscape skills</em>:</p>
<p><img src="http://wwoods.fedorapeople.org/images/depcheck-repo-flow.png" alt="" /></p>
<p>New packages get built in Koji, and then when the maintainers are happy with a build, they file an <em>Update Request</em> in Bodhi. Normally they request that the update go into the <code>updates-testing</code> repository, so testers can poke at it for a while and make sure it works, and then the maintainer requests that it go to the official <code>updates</code> repository. And then it shows up in Software Update.</p>
<p>Note that the maintainer makes the <em>request</em>, and that makes Bodhi tag the package as <code>pending</code> &#8211; but only members of the Release Engineering (rel-eng) team can actually <em>push</em> packages into <code>updates-testing</code> or <code>updates</code>. So in the end, it&#8217;s up to the Release Engineers to decide when a package is ready for release &#8211; based on automated test results, feedback from testers and developers, and their own best judgement.</p>
<p>This also means that <code>depcheck</code> can&#8217;t move packages into <code>updates</code> or <code>updates-testing</code>. It can mark them as <strong>approved</strong> &#8211; for example, by providing Bodhi feedback, or keeping test results somewhere &#8211; but it can&#8217;t actually move packages out of the <code>pending</code> list by itself.</p>
<h3>Acceptance</h3>
<p>This presents a problem. What happens if a pending update is accepted by <code>depcheck</code>, but before rel-eng pushes it into the wild, another update appears in <code>pending</code> and somehow conflicts with the first one?</p>
<p>For example: let&#8217;s say the <code>martini</code> package requires <code>gin</code> and <code>vermouth</code>. But then someone introduces a new package &#8211; <code>vodka</code> &#8211; which <code>Obsoletes: gin</code>. (Yes, I know &#8211; this would be <em>wrong</em> and <em>horrible</em> and should obviously be forbidden by Fedora policy and/or the Geneva Convention. But let&#8217;s put that aside for now.)</p>
<p>So &#8211; what do we do? We <em>could</em> try to go back and revoke our previous test result, which would leave one or both updates unaccepted. We&#8217;d need to write a bunch of new code to be able to revoke test results, and that would leave us with less packages being accepted. This seems.. less than desirable.</p>
<p>Another solution &#8211; the one that I prefer &#8211; is that once a package is accepted, we should leave it accepted. Basically we&#8217;d treat it as if it was already part of the live repos. This makes sense: since the goal is always to have a consistent set of packages, once a package is accepted as being consistent we shouldn&#8217;t mess with that. (Plus, it&#8217;s probably about to be pushed by rel-eng anyway, so it&#8217;s not unreasonable to treat it as if it already has been pushed live.) So in practice, this means the first test result takes priority, and we just don&#8217;t revoke accepted packages. This makes the code simpler and it should mean we get packages being accepted quicker.</p>
<p>To handle this, we need to be able to split the <code>pending</code> list into two parts: <code>pending</code> and <code>accepted</code>. <code>depcheck</code> treats the packages in <code>accepted</code> like the packages in the live repos, and doesn&#8217;t provide test results for them (obviously &#8211; they&#8217;ve all passed already!). Only the unapproved <code>pending</code> packages actually get test results.</p>
<p>This doesn&#8217;t <em>lock</em> the packages or anything like that. It can still be removed from <code>pending</code> by the usual means &#8211; obsoleted by the maintainer submitting a newer package, dropped because of bad karma in Bodhi, forcibly removed by rel-eng, etc. Being <em>accepted</em> just means that the package has passed autoqa and is <em>eligible</em> to be pushed by rel-eng &#8211; if they see fit.</p>
<h3>Timing: more than just the secret to comedy</h3>
<p>There&#8217;s another wrinkle. The AutoQA system runs all tests independently of each other. This is nice because it means we can run a lot of tests in parallel, but it also means that we can have <em>multiple depcheck tests</em> running at the same time. Which presents a problem: what if there&#8217;s two <code>depcheck</code> tests running at the same time, and one test marks some packages as accepted while the other test is still running? What should the other test do?</p>
<p>This is a classic concurrency problem, and there&#8217;s a lot of different possible ways to resolve it &#8211; usually involving locking or looping or both. We had a few ideas for simple solutions -  for example, we could restart the test if the list of accepted packages changed during the test. Except what if we get stuck in a loop? And also this would change the test results in some cases &#8211; so even though it&#8217;s the same test and the same packages, the results would be different if Test #1 finishes before Test #2 starts. Why should test timing affect the test results?</p>
<p>After a lot of whiteboard sketching and hand-wringing and test code, we realized that the simplest solution is: just don&#8217;t run <code>depcheck</code> tests in parallel. (At least, not tests for the same release &#8211; we can still run depchecks for Fedora 13 alongside Fedora 14 tests, since they don&#8217;t interact at all.) True, this is less efficient, but the current runtime for a <code>depcheck</code> test is something like 50-60 seconds. During our busiest time ever, we pushed 1300 updates through Bodhi in a month. This works out to 43 updates a day &#8211; or somewhere between 35 and 45 minutes of depcheck test time daily, on average. Even if we had a huge burst of updates &#8211; say 250 updates submitted simultaneously &#8211; and for some reason depcheck takes 10x longer than I expect, rel-eng only pushes updates once a day anyway! So by the time of the first rel-eng push we&#8217;d have processed ~144 of the updates, and the rest would be done the next day. So even in a worst-case scenario the outcome is: Less than half of the updates get delayed by <em>one day</em>. That&#8217;s it!</p>
<p>In the future we will definitely want to figure out a general strategy for handling tests that want to share information and need some locking/concurrency magic. But this turns out to be unnecessary for <code>depcheck</code> to function correctly and quickly. So we&#8217;ll leave it alone. For now.</p>
<h3>So what&#8217;s left?</h3>
<p>Not much! We should be ready to start running <code>depcheck</code> on new updates &#8211; in a purely informative manner &#8211; in the next couple of days. And once we&#8217;re pretty sure the results are right, we&#8217;ll start work to make Bodhi only show accepted updates to rel-eng. If it all works as it should, we should able to use this info to keep broken updates from getting into the live repos ever again. Won&#8217;t that be nice?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/52/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=52&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2011/01/03/depcheck-tags-and-timing-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>

		<media:content url="http://wwoods.fedorapeople.org/images/depcheck-repo-flow.png" medium="image" />
	</item>
		<item>
		<title>New job &#8211; and a new job opening at Red Hat</title>
		<link>http://ohjeezlinux.wordpress.com/2010/11/11/new-job-and-a-new-job-opening-at-red-hat/</link>
		<comments>http://ohjeezlinux.wordpress.com/2010/11/11/new-job-and-a-new-job-opening-at-red-hat/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 22:09:47 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/wwoods/?p=30</guid>
		<description><![CDATA[Eight releases ago (or 4 years, if your time isn&#8217;t measured in Fedora releases) I took the role of Fedora QA Lead. Or maybe &#8220;Fedora Test Lead&#8221;. It was kind of vague. See, there wasn&#8217;t an official title, because it &#8230; <a href="http://ohjeezlinux.wordpress.com/2010/11/11/new-job-and-a-new-job-opening-at-red-hat/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=30&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Eight releases ago (or 4 years, if your time isn&#8217;t measured in Fedora releases) I took the role of Fedora QA Lead. Or maybe &#8220;Fedora Test Lead&#8221;. It was kind of vague.</p>
<p>See, there wasn&#8217;t an official title, because it was a brand-new position. And there was no Feature process, no Release Criteria, no Test Day &#8211; no test plans at all &#8211; no proventesters, no Bodhi, no Koji. Everything got built by Red Hat employees, behind the Red Hat firewall, tested a bit (haphazardly, in whatever spare time the developers could muster) and pushed out to the public.</p>
<p>Things have come a long, long way since then, and I&#8217;m really proud of the things we&#8217;ve built and accomplished in Fedora QA. I&#8217;d like to take a minute to say &#8220;thanks&#8221; to everyone who&#8217;s contributed &#8211; anyone who&#8217;s participated in a test day, or written a test case, or pulled packages from <code>updates-testing</code> and given Bodhi feedback, or downloaded a Alpha/Beta/RC image and helped with the test matrix, or triaged a bug, or <em>filed</em> a bug, or helped someone else fix a bug.</p>
<p>My job changed over time to focus on the AutoQA project, and I&#8217;d also like to say &#8220;thanks&#8221; to everyone who&#8217;s given me ideas and suggestions along the way there. (And a huge thanks to James Laska, Kamil Paral, and Josef Skladanka for making these ideas actually <em>work</em>.)</p>
<p>Anyway, as the title suggests, I am indeed leaving Fedora QA. But I&#8217;m not going real far &#8211; I&#8217;m moving to Red Hat Engineering, and joining the Installer team. And this means that Red Hat is looking for someone to help lead the Fedora QA Automation efforts into the Glorious Future I keep promising. And that could be you.</p>
<p>If you want to work for (in my humble, personal opinion) a truly awesome company, and work with some brilliant, talented people, and get paid to write Free Software &#8211; and you think you have the skills and adaptability needed to do it &#8211; then check out the <a href="https://careers.redhat.com/ext/detail?redhat6360">job posting</a>. And if it feels right, apply.</p>
<p>I&#8217;ll be staying in QA until we get the <code>depcheck</code> test running &#8211; this was one of my original goals for Fedora QA and I&#8217;m not done until it is. And after that, it&#8217;s onward to <s>causing</s> fixing problems at the source. Wish me luck!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=30&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2010/11/11/new-job-and-a-new-job-opening-at-red-hat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>
	</item>
		<item>
		<title>depcheck: the why and the how (part 3)</title>
		<link>http://ohjeezlinux.wordpress.com/2010/11/04/depcheck-the-why-and-the-how-part-3/</link>
		<comments>http://ohjeezlinux.wordpress.com/2010/11/04/depcheck-the-why-and-the-how-part-3/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 14:45:00 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ohjeezlinux.wordpress.com/2010/11/04/depcheck-the-why-and-the-how-part-3/</guid>
		<description><![CDATA[In part 1 I talked about the general idea of the depcheck test, and part 2 got into some of the messy details. If you&#8217;d like a more detailed look at how depcheck should operate &#8211; using some simplified examples &#8230; <a href="http://ohjeezlinux.wordpress.com/2010/11/04/depcheck-the-why-and-the-how-part-3/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=130&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://qa-rockstar.livejournal.com/10187.html">part 1</a> I talked about the general idea of the <code>depcheck</code> test, and <a href="http://qa-rockstar.livejournal.com/10368.html">part 2</a> got into some of the messy details. If you&#8217;d like a more detailed look at how <code>depcheck</code> should operate &#8211; using some simplified examples of problems we&#8217;ve actually seen in Fedora &#8211; you should check out <a href="http://wwoods.fedorapeople.org/depcheck.html">this document</a> and the super-fancy inkscape drawings therein.</p>
<p>Now let&#8217;s discuss a couple of things that <code>depcheck</code> (and AutoQA in general) doesn&#8217;t do yet.</p>
<h3>Handling (or Not Handling) File Conflicts</h3>
<p>As mentioned previously, <code>depcheck</code> is not capable of catching file conflicts. It&#8217;s outside the scope of the test, mostly due to the fact that <code>depcheck</code> is <code>yum</code>-based, and <code>yum</code> itself doesn&#8217;t handle file conflicts. To check for file conflicts, <code>yum</code> actually just downloads all the packages to be updated and tells RPM to check them.<small><sup><a href="#p3c1">[1]</a></sup></small> RPM then reads the actual headers contained in the downloaded files and uses its complex, twisty algorithms (including the multilib magic described elsewhere) to decide whether it also thinks this update transaction is OK. This happens completely outside of <code>yum</code> &#8211; only RPM can <em>correctly</em> detect file conflicts. </p>
<p>So if we want to <em>correctly</em> catch file conflicts, we need to make RPM do the work. The obvious solution would be to trick RPM the same way we trick <code>yum</code> in <code>depcheck</code> &#8211; that is, by making RPM think all the available packages in the repos are installed on the system, so it will check the new updates against all existing, available packages.</p>
<p>Unfortunately, it turns out to be significantly harder to lie to RPM about what&#8217;s installed on the system. All the data that <code>yum</code> requires in order to simulate having a package installed is in the repo metadata, but the data RPM needs is only available from the packages themselves. So the inescapable conclusion is: right now, to do the job correctly and completely, a test to prevent file conflicts would need to examine <em>all 20,000+ available packages every time it ran</em>.</p>
<p>We could easily have a simpler test that just uses the information available in the <code>yum</code> repodata, and merely <em>warns</em> package maintainers about <em>possible</em> file conflicts.<small><sup><a href="#p3c2">[2]</a></sup></small> But turning this on too soon might turn out to do more harm than good: the last thing we want to do is overwhelm maintainers with false positives, and have them start ignoring messages from AutoQA. We want AutoQA to be trustworthy and reliable, and that means making sure it&#8217;s doing things <em>right</em>, even if that takes a lot longer.</p>
<p>In the meantime, I&#8217;m pretty sure <code>depcheck</code> is correctly catching the problems it&#8217;s designed to catch. It&#8217;ll need some testing but soon enough it will be working exactly how we want. Then the question becomes: how do we actually <em>prevent</em> things that are <em>definitely</em> broken from getting into the live repos?</p>
<h3>Infrastructure Integration, or: Makin&#8217; It Do Stuff</h3>
<p>A little bit of background: the <code>depcheck</code> test is part of the Fedora QA team&#8217;s effort to automate the <a href="http://fedoraproject.org/wiki/QA:Package_Update_Acceptance_Test_Plan">Package Update Acceptance Test Plan</a>. This test plan outlines a set of (very basic) tests which we use to decide whether a new update is ready to be tested by the QA team. (Please note that passing the PUATP<small><sup><a href="#p3c3">[3]</a></sup></small> does <em>not</em> indicate that the update is ready for release &#8211; it just means the package is <em>eligible</em> for <em>actual</em> testing.)</p>
<p>So, OK, we have some tests &#8211; <code>depcheck</code>, <code>rpmguard</code>, and others to come &#8211; and they either pass or fail. But what do we do with this information? Obviously we want to pass the test results back to the testers and the Release Engineering (rel-eng) team somehow &#8211; so the testers know which packages to ignore, and rel-eng knows which packages are actually acceptable for release. For the moment the simplest solution is to let the <code>depcheck</code> test provide <em>karma</em> in Bodhi &#8211; basically a +1 vote for packages that pass the test and no votes for packages that don&#8217;t.</p>
<p>Once we&#8217;re satisfied that <code>depcheck</code> is operating correctly, and we&#8217;ve got it providing proper karma in Bodhi when updates pass the test, we&#8217;ll add a little code to Bodhi so it only shows <code>depcheck</code>-approved updates to rel-eng. They can still choose to push out updates that <em>don&#8217;t</em> pass <code>depcheck</code> if necessary, but by default packages that fail depcheck will be ignored (and their maintainers notified of the failure). If the package later has its dependencies satisfied and <em>passes</em> depcheck, the maintainer may be notified that all is well and no action is necessary.<small><sup><a href="#p3c4">[4]</a></sup></small></p>
<h3>The Glorious Future of QA Infrastructure (pt. 1: Busy Bus)</h3>
<p>If you&#8217;ve hung around anyone from the QA or rel-eng or Infrastructure teams for any amount of time, you&#8217;ve probably heard us getting all worked up about The Fedora Messagebus. But for good reason! It&#8217;s a good idea! And not hard to understand:</p>
<p>The Fedora Messagebus is a service that gets notifications when Things Happen in the Fedora infrastructure, and relays them to anyone who might be listening. For example, we could send out messages when a new build completes, or a new update request is filed, or a new bug is filed, or a test completes, or whatever. These messages will contain some information about the event &#8211; package names, bug IDs, test status, etc. (This will also allow you to go to the source to get further information about the event, if you like.) The messagebus will be set up such that anyone who wants to listen for messages can listen for whatever types of messages they are interested in &#8211; so we could (for example) have a build-watcher applet that lives in your system tray and notifies you when your builds finish. Or whenever there&#8217;s a new kernel build. Or whatever!</p>
<p>How does this help QA? Well, it simplifies quite a few things. For example, AutoQA currently runs a bunch of <b>watcher scripts</b> every few minutes, which poll for new builds in Koji, new updates in Bodhi, changes to the repos, new installer images, and so on. Replacing all these <code>cron</code>-based scripts with a single daemon that listens on the bus and kicks off tests when testable events happen will reduce complexity quite a bit. Second (as mentioned above) we can send messages containing test results when tests finish. This would be simpler (and more secure) than making the test itself log in to Bodhi to provide karma when it completes &#8211; Bodhi can just listen for messages about new test results<small><sup><a href="#p3c5">[5]</a></sup></small>, and mark updates as having passed <code>depcheck</code> when it sees the right message.</p>
<p>But wait, it gets (arguably) more interesting.</p>
<h3>The Glorious Future of QA Infrastructure (pt 2: ResultsDB)</h3>
<p>We&#8217;ve also been working on something we call ResultsDB &#8211; a centralized, web-accessible database of all the results of all the tests. Right now the test results are all sent by email, to <a href="https://fedorahosted.org/pipermail/autoqa-results/">the autoqa-results mail list</a>. But email is just text, and it&#8217;s kind of a pain to search, or to slice up in interesting views (&#8220;show me all the test results for <code>glibc</code> in Fedora 13&#8243;, for example).</p>
<p>I said &#8220;web-accessible&#8221;, but we&#8217;re not going to try to create the One True Centralized Generic Test Result Browser. Every existing Centralized Generic Test Result Browser is ugly and hard to navigate and never seems to be able to show you the really <em>important</em> pieces of info you&#8217;re looking for &#8211; mostly because Every Test Ever is a <em>lot</em> of data, and a Generic Test Result Browser doesn&#8217;t know the specifics of the test(s) you&#8217;re interested in. So instead, ResultsDB is just going to hold the data, and for actually checking out test results we plan to have simple, special-purpose <em>frontends</em> to provide <em>specialized views</em> of certain test results.</p>
<p>One example is the <a href="http://wwoods.fedorapeople.org/screenshots/irb.png">israwhidebroken.com prototype</a>. This was a simple, specialized web frontend that shows only the results of a small number of tests (the ones that made up the Rawhide Acceptance Test Suite), split up in a specific way (one page per Rawhide tree, split into a table with rows for each sub-test and columns for each supported system arch).</p>
<p>This is a model we&#8217;d like to continue following: start with a <b>test plan</b> (like the <a href="http://fedoraproject.org/wiki/QA:Rawhide_Acceptance_Test_Plan">Rawhide Acceptance Test Plan</a>), automate as much of it as possible, and have those automated tests report results (which each correspond to one <b>test case</b> in the test plan<small><sup><a href="#p3c6">[6]</a></sup></small>) to ResultsDB. Once that&#8217;s working, design a nice web frontend to show you the results of the tests in a way that makes sense to you. Make it pull data from ResultsDB to fill in the boxes, and now you&#8217;ve got your own specialized web frontend that shows you exactly the data you want to see. Excellent!</p>
<h3>But How Will This Help With <code>depcheck</code> And The PUATP?</h3>
<p>Right! As mentioned previously, there&#8217;s actually a whole Package Update Acceptance Test Plan, with other test cases and other tests involved &#8211; <code>depcheck</code> alone isn&#8217;t the sole deciding factor on whether a new update is broken or not. We want to run a whole bunch of tests, like using <code>rpmguard</code> to check whether a previously-executable program has suddenly become non-executable, using <code>rpmlint</code> to make sure there&#8217;s a valid URL in the package  Once an update passes <em>all</em> the tests, we should let Bodhi know that the update is OK. But the tests all run independently &#8211; sometimes simultaneously &#8211; and they don&#8217;t know what other tests have run. So how do we decide when the whole test plan is complete?</p>
<p>This is another planned capability for ResultsDB &#8211; modeling <b>test plans</b>. In fact, we&#8217;ve set up a way to store <a href="https://fedoraproject.org/wiki/QA:Test_Plan_Metadata_Test_Page">test plan metadata in the wiki page</a>, so ResultsDB can read the Test Plan page and know exactly which tests comprise that plan. So when all the tests in the PUATP finish, ResultsDB can send out a message on the bus to indicate &#8220;package <code>martini-2.3</code> passed PUATP&#8221; &#8211; and Bodhi can pick up that message and unlock <code>martini-2.3</code> for all its eager, thirsty users.</p>
<p>But anyone who has used <code>rpmlint</code> before might be wondering: how will anyone ever get their package to pass the PUATP when <code>rpmlint</code> is so picky?</p>
<h3>The Wonders of Whitelists and Waivers</h3>
<p>This is another planned use for ResultsDB &#8211; storing <b>whitelists</b> and <b>waivers</b>. Sometimes there will be test failures that are expected, that we just want to ignore. Some packages might be idiosyncratic and the Packaging Committee might want to grant them exceptions to the normal rules. Rather than changing the test to handle every possible exception &#8211; or making the maintainers jump through weird hoops to make their package pass checks that don&#8217;t apply or don&#8217;t make sense &#8211; we&#8217;d like to have one central place to store exceptions to the policies we&#8217;ve set.</p>
<p>If (in the glorious future) we&#8217;re already using AutoQA to check packages against these policies, and storing the results of those tests in ResultsDB, it makes sense to store the exceptions in the same place. Then when we get a &#8216;failed&#8217; result, we can check for a matching exception before we send out a &#8216;failed&#8217; message and reject a new update. So we&#8217;ve got a place in the <a href="https://fedoraproject.org/wiki/AutoQA_resultsdb_schema">ResultsDB data model</a> to store exceptions, and then the Packaging Committee (FPC) or the Engineering Steering Committee (FESCo) can use that to maintain a <b>whitelist</b> of packages which can skip (or ignore) certain tests.</p>
<p>There have also been quite a few problematic updates where an unexpected change slipped past the maintainer unnoticed, and package maintainers have thus (repeatedly!) asked for automated tests to review their packages for these kinds of things before they go out to the public. Automating the PUATP will handle a lot of that. But: we <em>definitely</em> don&#8217;t want to require maintainers to get approval from some committee every time something weird happens &#8211; like an executable disappearing from a package. (That might have been an intentional change, after all.) We still want to catch suspicious changes &#8211; we just want the maintainer to review and approve them before they go out to the repos. So there&#8217;s another use for exceptions: <b>waivers</b>.</p>
<p>So don&#8217;t worry: we plan to have a working interface for reviewing and waiving test failures <em>before</em> we ever start using <code>rpmguard</code> and <code>rpmlint</code> to enforce any kind of policy that affects package maintainers.</p>
<h3>The Even-More Glorious Future of QA</h3>
<p>A lot of the work we&#8217;ve discussed here is designed to solve specific problems that already exist in Fedora, using detailed (and complex) test plans developed by the QA team and others. But what about letting individual maintainers add their own tests?</p>
<p>This has actually been one of our goals from Day 1. We want to make it easy for packagers and maintainers to have tests run for every build/update of their packages, or to add tests for other things. We&#8217;re working right now to get the test <em>infrastructure</em> (AutoQA, ResultsDB, the messagebus, and everything else) working properly before we have packagers and maintainers depending on it. The test structure and API are being solidified and <a href="https://fedoraproject.org/wiki/Writing_AutoQA_Tests">documented</a> as we go. We still need to decide where packagers will check in their tests, and how we&#8217;ll make sure people don&#8217;t put malicious code in tests (or how we&#8217;ll handle unintentionally misbehaving tests).</p>
<p>We also want to enable <em>functional testing</em> of packages &#8211; including <b>GUI testing</b> and <b>network-based</b> testing. The tests I&#8217;ve been discussing don&#8217;t require installing the packages or running any of the code therein &#8211; we just inspect the package itself for correctness. Actual functional testing &#8211; installing the package and running the code &#8211; requires the ability to easily create (or find) a clean test system, install the package, run some test code, and then review the results. Obviously this is something people will need to do if they want to run tests on their packages after building them. And this isn&#8217;t hard to do with all the fancy virtualization technology we have in Fedora &#8211; we just need to write the code to make it all work.</p>
<p>These things (and more) will be discussed and designed and developed (in much greater detail) in the coming days and weeks in Fedora QA &#8211; if you have some ideas and want to help out (or you have any questions) join the <code>#fedora-qa</code> IRC channel or the Fedora tester mailing list<small><sup><a href="#p3c7">[7]</a></sup></small> and ask!</p>
<p><small><br />
<sup><a name="p3c1">1</a></sup> This is why some update transactions can fail even after <code>yum</code> runs its dependency check, declares the update OK, and downloads all the packages.<br />
<sup><a name="p3c2">2</a></sup> Actually, this test already exists. See the <code><a href="http://git.fedorahosted.org/git/?p=autoqa.git;a=tree;f=tests/conflicts;hb=HEAD">conflicts</a></code> test, which is built around a tool called <code><a href="http://git.fedorahosted.org/git/?p=autoqa.git;a=blob;f=tests/conflicts/potential_conflict.py;h=c18dba0e6d572a5257df1784012fb152da29b1ed;hb=HEAD">potential_conflict.py</a></code>. Note how it&#8217;s pretty up-front about only catching <em>potential</em> conflicts.<br />
<sup><a name="p3c3">3</a></sup> Yeah, &#8220;PUATP&#8221; is a crappy acronym, but we haven&#8217;t found a better name yet.<br />
<sup><a name="p3c4">4</a></sup> Although maybe not &#8211; it seems really silly to send someone an email to tell them they don&#8217;t need to do anything. Informed opinions on this matter are welcomed. <br />
<sup><a name="p3c5">5</a></sup> In fact, AQMP and the <code>qpid</code> bindings allow you to listen only for messages that match specific properties &#8211; so Bodhi could listen only for <code>depcheck</code> test results that match one of the <code>-pending</code> updates &#8211; it doesn&#8217;t have to listen to all the messages and filter them out itself. Neat!<br />
<sup><a name="p3c6">6</a></sup> Some AutoQA tests will test multiple test cases, and thus report multiple test results. Yes, that can be a little confusing.<br />
<sup><a name="p3c7">7</a></sup> See the instructions here: <a href="http://fedoraproject.org/wiki/QA">http://fedoraproject.org/wiki/QA</a><br />
</small></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/130/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=130&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2010/11/04/depcheck-the-why-and-the-how-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>
	</item>
		<item>
		<title>Firesheep, and what you (as a user) should do about it</title>
		<link>http://ohjeezlinux.wordpress.com/2010/10/29/firesheep-and-what-you-as-a-user-should-do-about-it/</link>
		<comments>http://ohjeezlinux.wordpress.com/2010/10/29/firesheep-and-what-you-as-a-user-should-do-about-it/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 15:49:58 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/wwoods/?p=4</guid>
		<description><![CDATA[So there&#8217;s this thing called Firesheep. It&#8217;s a Firefox add-on (not yet available for Linux) that makes it easy to steal someone&#8217;s connection to basically any website (like Facebook, Twitter, or Amazon) &#8211; if: You&#8217;re on the same network as &#8230; <a href="http://ohjeezlinux.wordpress.com/2010/10/29/firesheep-and-what-you-as-a-user-should-do-about-it/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=6&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So there&#8217;s this thing called <a href="http://codebutler.com/firesheep">Firesheep</a>. It&#8217;s a Firefox add-on (not yet available for Linux) that makes it easy to steal someone&#8217;s connection to basically any website (like Facebook, Twitter, or Amazon) &#8211; <em>if</em>:</p>
<ol>
<li>You&#8217;re on the same network as that person (think free coffee shop Wi-Fi, college networks, etc.), and</li>
<li>The connection to the website is unencrypted &#8211; that is, it&#8217;s not using HTTPS.</li>
</ol>
<p>Let&#8217;s be clear: it&#8217;s <em>always</em> been possible to do this. In fact it&#8217;s never been that hard. All this tool actually does is make it easy. Really, really easy: I installed it yesterday while in a coffee shop here in Raleigh and within 5 minutes had access to a dozen different Facebook accounts, a couple of Yahoo accounts, and at one Amazon account. (Imagine what I could have bought myself with that Amazon account if the owner had 1-Click ordering turned on!)</p>
<p>The reason this is possible comes down to money: <em>Most web companies aren&#8217;t spending the time and money necessary to properly support encrypted connections, and they&#8217;re leaving us &#8211; their users &#8211; vulnerable.</em> Every web service already uses HTTPS for encrypted connections &#8211; they use them when you log in, in order to protect your password. Once you&#8217;ve logged in, though, they switch you back to the unencrypted connection, and your session becomes vulnerable.</p>
<p>For example, you <em>can</em> log into Facebook securely. Go ahead and try <a href="https://www.facebook.com/">https://www.facebook.com/</a> and you&#8217;ll see the nice lock icon that indicates that yes, your connection is encrypted and secure. But you&#8217;ll notice that clicking any link on the page will bring you to regular unencrypted Facebook &#8211; and make you vulnerable to hijacking.</p>
<p>Twitter&#8217;s almost worse: while <a href="https://twitter.com/">https://twitter.com/</a> works, and all the links will keep you on the secure site, the automatic refreshing code uses an insecure connection. So you don&#8217;t even need to click any links to make your session vulnerable.</p>
<p>Amazon is possibly the most blatant: if you go to <a href="https://www.amazon.com/">https://www.amazon.com/</a> you will be automatically redirected to the insecure <a href="http://www.amazon.com/">http://www.amazon.com/</a>. Oddly, though, <a href="https://www.amazon.ca/">https://www.amazon.ca/</a> works just fine. Score one for Canada, I guess!</p>
<p>Google does a better job than most. They changed GMail to use HTTPS by default a while ago, and you can go to <a href="https://www.google.com/">https://www.google.com/</a> and conduct all your searching over encrypted links. Because of this, I wasn&#8217;t able to steal any GMail sessions (even though they did show up in Firesheep).</p>
<p>A lot of the press reaction has completely missed the point. Computerworld published an article with the headline: &#8220;<a href="http://www.computerworld.com/s/article/9193420/Mozilla_No_kill_switch_for_Firesheep_add_on">Mozilla: No &#8216;kill switch&#8217; for Firesheep add-on</a>&#8220;. What? There&#8217;s no point in trying to block the add-on itself. It&#8217;s still just as possible to hijack people&#8217;s web sessions as it&#8217;s always been. They also mention that &#8220;Using Firesheep may be a criminal offense under U.S. law&#8221;, a useless non-revelation echoed by AOL&#8217;s Download Squad. Yes, it might be illegal, but this won&#8217;t stop anyone from using it any more than jaywalking laws prevent people from walking across streets. ZDNet claims: &#8220;<a href="http://www.zdnet.com/blog/networking/firesheep-8217s-real-lesson-take-wi-fi-security-seriously/278">Firesheep’s Real Lesson: Take Wi-Fi Security Seriously</a>&#8220;, which is utter nonsense. It doesn&#8217;t matter whether you used a password to access the coffeeshop&#8217;s Wi-Fi or not, as long as Facebook, Amazon, et. al. are failing to keep your data safe anyone on your network can steal your session.</p>
<p>Here&#8217;s the point, in the words of Firesheep&#8217;s author: &#8220;<em>Websites have a responsibility to protect the people who depend on their  services. They&#8217;ve been ignoring this responsibility for too long, and  it&#8217;s time for everyone to demand a more secure web. My hope is that  Firesheep will help the users win.</em>&#8220;</p>
<p>Or in other words: Facebook is screwing your privacy, yet again. And they&#8217;re not the only ones. So start writing to them. Tell them they need to start moving to HTTPS everywhere.</p>
<p>In the meantime, if you&#8217;re going to use any public networks &#8211; coffee shop Wi-Fi, computer labs, dorms, whatever &#8211; either stay off of Facebook and Twitter and friends (it&#8217;ll help you focus, anyway) or set up a VPN on your home network and connect through that.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=6&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2010/10/29/firesheep-and-what-you-as-a-user-should-do-about-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>
	</item>
		<item>
		<title>depcheck: the why and the how (part 2)</title>
		<link>http://ohjeezlinux.wordpress.com/2010/10/11/depcheck-the-why-and-the-how-part-2/</link>
		<comments>http://ohjeezlinux.wordpress.com/2010/10/11/depcheck-the-why-and-the-how-part-2/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 14:18:00 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ohjeezlinux.wordpress.com/2010/10/11/depcheck-the-why-and-the-how-part-2/</guid>
		<description><![CDATA[In part 1 I discussed the general idea of the depcheck test: use yum to simulate installing proposed updates, to be sure that they don&#8217;t have any unresolved dependencies that would cause yum to reject them (and thus cause everyone &#8230; <a href="http://ohjeezlinux.wordpress.com/2010/10/11/depcheck-the-why-and-the-how-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=129&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://qa-rockstar.livejournal.com/10187.html">part 1</a> I discussed the general idea of the <code>depcheck</code> test: use <code>yum</code> to simulate installing proposed updates, to be sure that they don&#8217;t have any <em>unresolved dependencies</em> that would cause <code>yum</code> to reject them (and thus cause everyone to be unable to update their systems and be unhappy with Fedora and the world in general.)</p>
<p>In this part we&#8217;re going to look at two of the trickier parts of the problem &#8211; interdependent updates and multilib.</p>
<h3>Interdependent Updates: no package is an island</h3>
<p>This, by itself, is a pretty simple concept to understand: some packages require a certain version of another package. For example, <code>empathy</code> and <code>evolution</code> both require a certain matching version of <code>evolution-data-server</code> (<code>e-d-s</code> for short) to operate properly. So if we update <code>e-d-s</code> we also have to rebuild and update <code>evolution</code> and <code>empathy</code>.<small><sup><a href="#p2c1">[1]</a></sup></small></p>
<p>So &#8211; that&#8217;s all fine, but what happens if we test the new <code>empathy</code> update before the new <code>evolution-data-server</code> has been tested and released?</p>
<p>If we test <code>empathy</code> by itself, depcheck will reject it because we haven&#8217;t released the new <code>e-d-s</code> yet. And then checking <code>e-d-s</code> by itself would fail, because we rejected the new <code>empathy</code> package that works with it &#8211; switching to the new <code>e-d-s</code> would cause the <em>existing</em> <code>empathy</code> to break.</p>
<p>Obviously this is no good &#8211; these two updates are perfectly legitimate <em>so long as they&#8217;re tested together</em>, but tested independently they both get rejected. And it&#8217;s not an uncommon problem, really &#8211; there are actually 8 other packages on my system which require <code>e-d-s</code>, and dozens (probably hundreds) of other examples exist. So we have to handle this sensibly.</p>
<p>The solution isn&#8217;t terribly complicated: <b>rather than testing every new update individually, we put new updates into a holding area, <em>test them all as a batch</em>, and then the packages in the batch that are judged to be safe are allowed to move out of the holding area.</b> So interdependent packages will sit in the holding area until all the required pieces are there &#8211; and then they all move along together. Easy!</p>
<p>This can be confusing, though. For instance: it&#8217;s true that we run <code>depcheck</code> for every new proposed update &#8211; but remember that we aren&#8217;t <em>only</em> testing the new update. We&#8217;re testing the new update <em>along with every previously-proposed update that hasn&#8217;t passed <code>depcheck</code> yet.</em> This means that a package that fails <code>depcheck</code> will be retested <em>with</em> every new update until it passes (or gets manually removed or replaced<small><sup><a href="#p2c2">[2]</a></sup></small>).</p>
<p>Because of this quirk, we need to design <code>depcheck</code> to notify the maintainer if their package fails its initial test<small><sup><a href="#p2c3">[3]</a></sup></small>, but <em>not</em> send mail for <em>every</em> failure &#8211; after the first time, failed updates can just sit quietly in the holding area<small><sup><a href="#p2c4">[4]</a></sup></small> until they finally have their dependencies satisfied and pass the test. At that point, the maintainer should get a followup notification to let them know that the update is OK. We might also want to notify maintainers if their packages get stuck in the holding area for a long time, but we haven&#8217;t decided if (or when) this would be useful or necessary.</p>
<h3>It&#8217;s Actually Even More Complicated Than That</h3>
<p>There&#8217;s actually more subtle complications here. First, you need to know that all Fedora updates are pushed into the live repos <em>by hand</em> &#8211; by someone from Fedora Release Engineering (aka <em>rel-eng</em>). So there&#8217;s going to be a delay &#8211; perhaps a few hours &#8211; between <code>depcheck</code> approving a package for release and the actual release of the package.</p>
<p>So: updates that have passed <code>depcheck</code> won&#8217;t actually get moved out of the holding area until someone from rel-eng comes along and pushes them out.<small><sup><a href="#p2c5">[5]</a></sup></small> But that&#8217;s fine &#8211; we <em>want</em> to include approved (but not-yet-pushed) updates in the <code>depcheck</code> test. We <em>need</em> them there, in fact, because we need to test subsequent updates as if the approved ones are already part of the public package repos (because they <em>will be</em>, just as soon as someone from rel-eng hits the button).</p>
<p>But: if someone revokes or replaces an update, this could cause <em>other</em> previously-approved updates to lose their approval. For example, let&#8217;s say <code>evolution-data-server</code> turns out to actually have some horrible security bug and needs to be fixed and rebuilt before it gets released into the wild. This would cause our previously-approved <code>empathy</code> update to fail <code>depcheck</code>! So clearly we need to retest all the proposed update &#8211; including approved ones &#8211; whenever new updates land. And rel-eng should <em>only</em> consider the <em>currently-approved</em> updates when they&#8217;re pushing out new updates.<small><sup><a href="#p2c6">[6]</a></sup></small></p>
<h3>Handling Multilib</h3>
<p><b>Multilib</b> is the term for the magic hack that allows you to run 32-bit code on your 64-bit system.<small><sup><a href="#p2c7">[7]</a></sup></small> It&#8217;s also the reason <code>i686</code> packages show up on <code>x86_64</code> systems (which annoys a lot of <code>x86_64</code> users, but hey, at least you can use the Flash plugin!). Multilib support allows you to do some strange things &#8211; like have two versions of the same package installed (e.g. my system has <code>sqlite.x86_64</code> and <code>sqlite.i686</code>). They can even both install the same <em>file</em> under certain circumstances (e.g. both <code>sqlite</code> packages install <code>/usr/bin/sqlite3</code> &#8211; and this is <em>totally allowed</em> on multilib systems.)</p>
<p>You might think this would cause some strange complications with (already complicated) dependency checking &#8211; and you&#8217;d be absolutely right. Luckily, though, <code>yum</code> already handles all of this for us &#8211; <em>provided</em> we give it the right things to check.</p>
<p>The <code>i686</code> packages are placed into the <code>x86_64</code> repo by a program called <code>mash</code>. Its job is to take a set of builds and decide which ones are <b>multilib</b> &#8211; that is, which ones are required for proper functioning of 32-bit binaries on 64-bit systems. When new updates are pushed out, <code>mash</code> is the thing that runs behind the scenes and actually picks the required RPMs and writes out all the metadata.</p>
<p>This means that if we want <code>depcheck</code>&#8216;s results to be accurate, we need to feed it the same RPMs and metadata that normal users would see once we pushed the updates. Which means that <code>depcheck</code> needs to run <code>mash</code> on the proposed updates, and use the resulting set of RPMs and metadata to run its testing. Otherwise we&#8217;ll completely miss any weird problems arising from incorrect handling of multilib packages.</p>
<p>Since <code>mash</code> was designed to take a Koji tag as its input, having the <code>-pending</code> tags for proposed updates allows us to use <code>mash</code> just like the normal push would, and therefore we can be sure we&#8217;re testing the right set of packages. Which means all our multilib problems are solved forever! ..right?</p>
<h3>Unsolved Problems and Future Work</h3>
<p>Sadly, no. The fact that we&#8217;re correctly checking multilib dependencies doesn&#8217;t necessarily mean we&#8217;ll catch <em>all</em> <code>yum</code> problems involving multilib. For example: problems keep arising when a package (e.g. <code>nss-softokn</code>) accidentally <em>stops</em> being multilib &#8211; so then you get an update that upgrades <code>nss-softokn.x86_64</code> but not <code>nss-softokn.i686</code>. Unfortunately, <code>yum</code> considers this type of update legitimate, and these dependencies to be properly resolved. But <em>subsequent</em> updates that want to use <code>nss-softokn</code> will be confused by the fact that there are two different versions of <code>nss-softokn</code> installed, and <em>then</em> <code>yum</code> will fail.</p>
<p>Another example is <em>file conflicts</em>. Normally it&#8217;s not allowed for multiple files to install the same package &#8211; but, as mentioned above, multilib packages can (under certain circumstances) install multiple copies of the same file. But <code>depcheck</code> doesn&#8217;t check this &#8211; mostly because <code>yum</code> (by itself) <em>does not check for file conflicts</em>. It does use the RPM libraries to check for file conflicts, but this is completely separate from <code>yum</code>&#8216;s dependency checking code. And strictly speaking, the purpose of the <code>depcheck</code> test is to <em>check dependencies</em>, and this is.. something else.</p>
<p>So: there are problems that <code>depcheck</code> will not solve &#8211; not because of bugs in depcheck, but because they&#8217;re outside of the reach of its design. But it&#8217;s important to understand what those problems are and &#8211; more importantly &#8211; to plan for future AutoQA tests that <em>will</em> be able to catch these problems. And we also need to think about how to use the test results to <em>enforce</em> policy &#8211; that is, how to make the Fedora infrastructure reject obviously broken updates. Or how to flag seemingly-broken updates for review, and require signoff before releasing them. We&#8217;ll talk about all that in part 3.</p>
<p><small><br />
<sup><a name="p2c1">1</a></sup> Technically not <em>every</em> change to <code>evolution-data-server</code> requires us to rebuild <code>empathy</code> and <code>evolution</code>, but let&#8217;s just ignore that for now.<br />
<sup><a name="p2c2">2</a></sup> Like if the maintainer replaces it with a newer version (hopefully one with fixed dependencies!), or if the Fedora Release Engineering team decides to remove it.<br />
<sup><a name="p2c3">3</a></sup> This message will include the error output so the maintainer knows what other package(s) are causing the problem, and therefore which maintainer to talk to if they want to get the problem resolved.<br />
<sup><a name="p2c4">4</a></sup> The holding area is actually a set of Koji tags that end in <code>-pending</code> &#8211; package maintainers may have seen some email involving this tag. Well, that&#8217;s what it&#8217;s for.<br />
<sup><a name="p2c5">5</a></sup> Yes, this means approved packages will actually keep getting retested even after they get approved. This is another place where we need to avoid notifying maintainers over and over.<br />
<sup><a name="p2c6">6</a></sup> Note that there&#8217;s <em>also</em> a small delay between when the update set changes and when the test completes &#8211; and so it could be possible for rel-eng to be looking at obsolete test results. We&#8217;re still trying to figure out the best way to make sure rel-eng is only dealing with up-to-date info.<br />
<sup><a name="p2c7">7</a></sup> Or 64-bit binaries on your mostly-32-bit system, in the case of <code>ppc64</code>.<br />
</small></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=129&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2010/10/11/depcheck-the-why-and-the-how-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>
	</item>
		<item>
		<title>depcheck: the why and how (part 1)</title>
		<link>http://ohjeezlinux.wordpress.com/2010/10/07/depcheck-the-why-and-how-part-1/</link>
		<comments>http://ohjeezlinux.wordpress.com/2010/10/07/depcheck-the-why-and-how-part-1/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 18:45:00 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ohjeezlinux.wordpress.com/2010/10/07/depcheck-the-why-and-how-part-1/</guid>
		<description><![CDATA[From the very beginning, one of the big goals of the AutoQA project was to set up an automated test that would keep broken updates out of the repos. People have been asking for something like this for years now, &#8230; <a href="http://ohjeezlinux.wordpress.com/2010/10/07/depcheck-the-why-and-how-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=128&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>From the very beginning, one of the big goals of the AutoQA project was to set up an automated test that would keep broken updates out of the repos. People have been asking for something like this for years now, but nobody&#8217;s managed to actually make it work. It turns out this is because it&#8217;s actually <em>really hard</em>.</p>
<p>But after a year (maybe two years?) of work on AutoQA we finally have such a test. It&#8217;s called <code>depcheck</code> and it&#8217;s very nearly complete, and should be running on all newly-created package updates very, very soon.</p>
<p>There&#8217;s a lot of interest in this subject among Fedora developers (and users!) and there have been a lot of discussions over the years. And there will probably be a lot of questions like: <i>&#8220;Will it keep [some specific problem] from happening again?&#8221;</i> But since it&#8217;s a really complicated problem (did I mention how it&#8217;s taken a couple of years?) it&#8217;s not easy to explain how the test works &#8211; and what it can (and can&#8217;t) do &#8211; without a good deal of background on the dependency checking process, and how it can go wrong. So let&#8217;s start with:</p>
<h3>A Rough Definition of the Problem</h3>
<p>Normally, when you update your system, yum<sup><a href="#c1">[1]</a></sup> downloads all the available <em>updates</em> &#8211; packages that are newer versions of the ones on your system &#8211; and tries to install them.</p>
<p>Sometimes a new update will appear in the update repos that &#8211; for some reason &#8211; cannot be installed. Usually there will be a set of messages like this, if you&#8217;re using yum on the commandline:</p>
<pre>
Setting up Update Process
Resolving Dependencies
--&gt; Running transaction check
--&gt; Processing Dependency: libedataserverui-1.2.so.10()(64bit) for package: gnome-panel-2.31.90-4.fc14.x86_64
---&gt; Package evolution-data-server.x86_64 0:2.32.0-1.fc14 set to be updated
---&gt; Package nautilus-sendto.x86_64 1:2.32.0-1.fc14 set to be updated
--&gt; Finished Dependency Resolution
Error: Package: gnome-panel-2.31.90-4.fc14.x86_64 (@updates-testing)
           Requires: libedataserverui-1.2.so.10()(64bit)
           Removing: evolution-data-server-2.31.5-1.fc14.x86_64 (@fedora/$releasever)
               libedataserverui-1.2.so.10()(64bit)
           Updated By: evolution-data-server-2.32.0-1.fc14.x86_64 (updates-testing)
               Not found
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
</pre>
<p>What&#8217;s happened here is that Fedora package maintainers have accidentally pushed out an update which has <em>unresolved dependencies</em> &#8211; that is, the RPM says that it requires some certain thing to function, but that other thing is not available. And so &#8211; rather than installing a (possibly broken) update &#8211; yum gives up.</p>
<p>So the problem to solve is this: how can we check proposed updates &#8211; <em>before</em> they hit the update repos &#8211; to make sure that they don&#8217;t have (or cause<sup><a href="#c2">[2]</a></sup>) unresolved dependencies?</p>
<h3>Aside: An Oversimplified Summary of How Dependencies Work</h3>
<p>RPM packages contain a lot more than files. They also contain scripts (to help install/uninstall the package) and data <em>about</em> the package, including <b>dependency info</b>. This mainly takes the form of four types of headers: <code>Provides</code>, <code>Requires</code>, <code>Conflicts</code>, and <code>Obsoletes</code>.</p>
<p><code><b>Provides</b></code> headers list all the things that the package provides &#8211; including files, library names, abstract capabilities (e.g. <code>httpd</code> &#8211; the package for the Apache webserver &#8211; has a &#8220;<code>Provides: webserver</code>&#8221; header) and the like.</p>
<p><code><b>Requires</b></code> headers list all the things that the package requires &#8211; which must match the <code>Provides</code> headers as described above. The majority of these headers list the libraries that a given program requires to function properly &#8211; such as <code>gnome-panel</code> requiring <code>libedataserverui-1.2.so.10</code> in the example above. </p>
<p><code><b>Conflicts</b></code> headers list packages that conflict with this package &#8211; which means this package cannot be installed on a system that has the conflicting package already installed, and trying to install it there will cause an error.</p>
<p>Finally, <code><b>Obsoletes</b></code> headers list packages that this one obsoletes &#8211; that is, this package can safely replace the other package (which should then be removed).</p>
<p>Collectively, this data is sometimes called <b>PRCO data</b>. When yum is &#8220;downloading metadata&#8221;, this is the data it&#8217;s downloading &#8211; a list of what packages require what things, and what packages provide those things, and so on. And that&#8217;s how yum figures out what it needs to complete the update and ensure that your system keeps working &#8211; and when the new <code>Requires</code> don&#8217;t match up with existing <code>Provides</code>, that&#8217;s when you see the dreaded <em>unresolved dependencies</em>.</p>
<h3>An Overly Simple (And Therefore Useless) Proposed Solution, With A Discussion Of Its Shortcomings</h3>
<p>&#8220;Well then let&#8217;s check all the <code>Requires</code> in proposed updates and make sure there&#8217;s a matching <code>Provides</code> in some package in the repos!&#8221;</p>
<p>Unfortunately, dependency resolution is a bit more complicated than this. First, just checking every package in every repo doesn&#8217;t quite work &#8211; you need to only look at the <em>newest</em> version of each package. Second, you need to take <code>Conflicts</code> and <code>Obsoletes</code> headers into account &#8211; ignoring packages that have been obsoleted, for instance. Oh also: you need to watch out for multilib packages &#8211; which is a special kind of black magic that nobody seems to fully understand &#8211; and, well, it&#8217;s all kind of complicated. If only there was already some existing code that handled this..</p>
<p>..and there is! <code>Yum</code> itself does all this when it&#8217;s installing updates. And if we want to be sure that <code>yum</code> will accept proposed updates, it makes sense to use the same code for the test as we do for the actual installation. So:</p>
<h3>A Slightly More Concrete Proposed Solution To The Problem</h3>
<p>&#8220;Let&#8217;s trick <code>yum</code> into <em>simulating</em> the installation of each proposed update and use its algorithms to determine whether the updates are installable!&#8221;</p>
<p>This, as it turns out, is not that hard to do. Yum is designed in such a way that it can use the repo metadata as if it were actually the local RPM database &#8211; which nicely simulates having all available packages installed on the local system. We can then ask yum to run <em>just</em> the dependency solving step of the package update process and see if that turns out OK.</p>
<p>If that works, the update(s) we&#8217;re testing must have consistent, solvable dependencies, and are safe to push to the repos. Otherwise we have problems, and the proposed update should be sent back to the maintainers for review and fixing.</p>
<p>That&#8217;s the general idea, anyway &#8211; and for simple cases, it works just fine! But there are over 10,000 packages in Fedora and some of them are.. less than simple. Sometimes there are interdependent updates &#8211; two (or more!) updates that require each other to function &#8211; and testing them individually would fail, but testing them together would work. Furthermore, what about the scary multilib black magic? How do we make sure we&#8217;re handling that properly?</p>
<p>I&#8217;ll discuss these issues (and our solutions) further in Part 2.</p>
<p><small><br />
<sup><a name="c1">1</a></sup> PackageKit and friends still use yum behind the scenes, so all this information still applies no matter what update system UI you use.<br />
<sup><a name="c2">2</a></sup> A new update can cause problems with <em>other</em> packages by obsoleting/conflicting with things they require &#8211; more on this later.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/128/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=128&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2010/10/07/depcheck-the-why-and-how-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>
	</item>
		<item>
		<title>A helpful git config snippet</title>
		<link>http://ohjeezlinux.wordpress.com/2010/06/04/a-helpful-git-config-snippet/</link>
		<comments>http://ohjeezlinux.wordpress.com/2010/06/04/a-helpful-git-config-snippet/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 21:15:00 +0000</pubDate>
		<dc:creator>wgwoods</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ohjeezlinux.wordpress.com/2010/06/04/a-helpful-git-config-snippet/</guid>
		<description><![CDATA[So, if you&#8217;re like me, you like to poke through the source of things from time to time but you always forget what the proper URL is for, say, GNOME git. Or Fedora hosted. Or whatever. Well, good news, friend! &#8230; <a href="http://ohjeezlinux.wordpress.com/2010/06/04/a-helpful-git-config-snippet/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=127&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, if you&#8217;re like me, you like to poke through the source of things from time to time but you always forget what the proper URL is for, say, GNOME git. Or Fedora hosted. Or whatever.</p>
<p>Well, good news, friend! Stuff this into your <code>~/.gitconfig</code> and make your life a bit easier:</p>
<pre>
[url "git://git.fedorahosted.org/git/"]
        insteadOf = "fh:"
[url "ssh://git.fedorahosted.org/git/"]
        insteadOf = "fh-ssh:"
[url "git://git.gnome.org/"]
        insteadOf = "gnome:"
[url "ssh://git.gnome.org/git/"]
        insteadOf = "gnome-ssh:"
[url "git://anongit.freedesktop.org/git/"]
        insteadOf = "fdo:"
[url "ssh://git.freedesktop.org/git/"]
        insteadOf = "fdo-ssh:"
</pre>
<p>Now you can do stuff like <code>git clone fdo:plymouth</code> or <code>git clone fh-ssh:autoqa.git</code> and it should Just Work*. Neat!</p>
<p>Now, if I was <i>really</i> clever, I&#8217;d find somewhere to ship this in the default Fedora install, or at least as part of the developer tools. Maybe someone else out there is <i>really</i> clever?</p>
<p><small>*Unless your local username is different from the remote username, in which case ssh might not work &#8211; but you can fix that by changing the url to <code>ssh://username@...</code> or putting the following in <code>~/.ssh/config</code>:</p>
<pre>
Host *.freedesktop.org
        User username
</pre>
<p></small></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ohjeezlinux.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ohjeezlinux.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ohjeezlinux.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ohjeezlinux.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ohjeezlinux.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ohjeezlinux.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ohjeezlinux.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ohjeezlinux.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ohjeezlinux.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ohjeezlinux.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ohjeezlinux.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ohjeezlinux.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ohjeezlinux.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ohjeezlinux.wordpress.com/127/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ohjeezlinux.wordpress.com&amp;blog=24203526&amp;post=127&amp;subd=ohjeezlinux&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ohjeezlinux.wordpress.com/2010/06/04/a-helpful-git-config-snippet/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3ecf42a38331044e3c33784d38e69625?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wgwoods</media:title>
		</media:content>
	</item>
	</channel>
</rss>
