<?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/"
	>

<channel>
	<title>thomas.apestaart.org</title>
	<atom:link href="http://thomas.apestaart.org/log/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://thomas.apestaart.org/log</link>
	<description>Present Perfect</description>
	<lastBuildDate>Sat, 18 May 2013 11:51:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Organizing photo libraries</title>
		<link>http://thomas.apestaart.org/log/?p=1550</link>
		<comments>http://thomas.apestaart.org/log/?p=1550#comments</comments>
		<pubDate>Sat, 18 May 2013 11:51:02 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Pictures]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1550</guid>
		<description><![CDATA[The weather&#8217;s picking up so it&#8217;s time for spring cleaning around the house. When I moved back to Barcelona three years ago I took with me my old analogue photos and negatives, with the idea of sorting through them at some point and getting them digitized. And while I&#8217;m at it, maybe it&#8217;s time to [...]]]></description>
			<content:encoded><![CDATA[<p>The weather&#8217;s picking up so it&#8217;s time for spring cleaning around the house.  When I moved back to Barcelona three years ago I took with me my old analogue photos and negatives, with the idea of sorting through them at some point and getting them digitized.  And while I&#8217;m at it, maybe it&#8217;s time to pull all my various folders of photos together too and organize them.</p>
<p>Well, I finally started.  I grouped the negatives, labeled them by year, put them in individual envelopes, and handed them off to a professional lab to scan them after doing a quick test run on one set (which turned out great, but it&#8217;s *really* annoying me that they scan to JPEG by default, charge 40% extra for TIFF, and use a non-multiple-of-8 resolution to scan at which means I can&#8217;t losslessly rotate the negatives.  Yes, I&#8217;m anal.)</p>
<p>So now I pulled together all my various folders of photos, and before I start doing tagging and stuff like that, I want to organize them in a decent folder layout.  Googling for ideas pretty much suggests that the way to go is</p>
<p>YYYY/MM/DD</p>
<p>with possibly some description together with the DD</p>
<p>I&#8217;m not really happy about that, however, because there are certain things I&#8217;d like to be able to do:</p>
<ul>
<li>easily see where photos come from &#8211; did I make them ? did I get them from someone ? Did I download them from Facebook ?</li>
<li>Are these original files from a camera without editing ?</li>
<li>Are these the original scans ? From negatives ? From actual photos ? Or are they retouched, rotated, denoised, &#8230;</li>
<li>Are these photos SFW ? Can I point my media center slideshow to this directory and have it safely show any photos under it ? (What do you mean, you&#8217;ve never snowboarded at night in only your underwear, and mooning the photographer ?) Or maybe not even SFW, but simply watchable and reasonable quality or subject material?</li>
</ul>
<p>I realize some of these issues can not be resolved simply with a directory layout.  But I&#8217;m sure some of you must have had similar issues or come up with a slightly better layout ? </p>
<p>Point me in the right direction please.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1550</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>morituri and Hidden Track One Audio</title>
		<link>http://thomas.apestaart.org/log/?p=1545</link>
		<comments>http://thomas.apestaart.org/log/?p=1545#comments</comments>
		<pubDate>Fri, 10 May 2013 20:08:31 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[morituri]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1545</guid>
		<description><![CDATA[I have tomorrow (saturday) blocked out for a whole day of morituri hacking as I will be home alone. One of the things a lot of morituri users are puzzled by is its relentless drive to extract every single sample of audio from the CD. Currently, even if it&#8217;s a really short pre-gap, and most [...]]]></description>
			<content:encoded><![CDATA[<p>I have tomorrow (saturday) blocked out for a whole day of <A href="https://thomas.apestaart.org/morituri/trac">morituri</A> hacking as I will be home alone.</p>
<p>One of the things a lot of morituri users are puzzled by is its relentless drive to extract every single sample of audio from the CD.  Currently, even if it&#8217;s a really short pre-gap, and most likely just an inaccurate master or burn, with no useful audio in it.</p>
<p>For me, that was a design goal of morituri &#8211; I want to be able to exactly reproduce a CD as is.  That is to say, ripping a CD should extract *all* audio from the CD, and it should be possible to make a copy of that CD and then rip that copy, and end up with exactly the same result as from the original CD.  (I&#8217;m sure there&#8217;s a fancy scientific term for that that I can&#8217;t remember right now)</p>
<p>To a lot of other people, it seems to be annoying and they don&#8217;t like having those small almost empty files lying around.</p>
<p>So I thought I&#8217;d do something about that, and that it might be useful as well to analyze my current collection of tracks and figure out what&#8217;s in there.  Maybe I can find some hidden gems that I hadn&#8217;t noticed before?</p>
<p>So I added a quick task to morituri that calculates the maximum sample value (I didn&#8217;t want to use my own level element in GStreamer for this as I wanted to make sure it was actual digital zero; this should be done in an element instead though, but I preferred the five minute hack for this one).</p>
<p>And then I ran:</p>
<blockquote><p>
rip debug maxsample /mnt/nas/media/audio/rip/morituri/own/album/*/00*flac
</p></blockquote>
<p>Sadly, that turned up 0 as the biggest sample for all these tracks!</p>
<p>Wait, what? I spent all that time on getting those secret tracks ripped just to get none? That&#8217;s not possible! I know some of those tracks!</p>
<p>Maybe the algorithm is wrong.  Nope, it works fine on all the regular tracks.</p>
<p>Oh, crap.  Maybe morituri has been ripping silence all this time because my CD drive can&#8217;t get that data off.  Yikes, that would be a bit of egg on my face.</p>
<p>No, it works if I check that Bloc Party track I know about.</p>
<p>Ten minutes of staring at the screen to realize that, while I was outputting names from a variable from the for loop over my arguments, the track I was actually passing to the task was always the first one.  Duh.  Problem solved.</p>
<p>As for what I found in my collection:</p>
<ul>
<li>a cute radio jingle that brought back memories from a live bootleg I had made myself of Bloem.  That&#8217;s from over ten years ago, but that must have been around the time I learned about the existence of HTOA and wanted to get one in</li>
<li>found unknown HTOA tracks on Art Brut&#8217;s Bang Bang Rock &#038; Roll, Mew&#8217;s Half the world is watching me; not their best stuff</li>
<li>soundscapey or stagesetting tracks on QOTSA&#8217;s Songs for the Deaf, Motorpsycho&#8217;s Angels and Daemons at play And Blissard; not that worth it (the Blissard track was ok, but really quiet)</li>
<li>
Pulp hid a single piano chord in a 2 second pre-gap on This is Hardcore; very curious.  It&#8217;s not an intro to the first track, because it doesn&#8217;t fit with the sound at all.
</li>
<li>Damien Rice hid a demo version of 9 Crimes (the first track) in the pregap; instead of piano and female vocals, he plays guitar and sings all the parts.</li>
<li>Got reacquainted with my favourite HTOA tracks: the orchestral quasi-wordless medley on the Luke Haines/Das Capital disc; the first Bloc Party album with a beautiful instrumental (up there with the hidden track at the end of Placebo&#8217;s first album; both bands delivering an atypical but stunning moodscape; the beautiful cover of Ben Kenobi&#8217;s Theme by Arab Strap on the Cherubs EP (no idea why that landed in my album dir, that needs to be fixed); the silly Soulwax skit for their second album.
</ul>
<p>Of course, Wikipedia has the <A href="http://en.wikipedia.org/wiki/List_of_albums_with_tracks_hidden_in_the_pregap">last word on everything</A></p>
<p>I note that they think Pulp recorded a cymbal, not a piano.  And now that I see the title of the QOTSA hidden track, I get the joke I think.</p>
<p>In total, on my album collection of 1564 full CD&#8217;s, I have 171 HTOA&#8217;s ripped, 138 tracks of pure digital silence, and only about 11 are actually useful tracks.</p>
<p>I expected to find more gems in my collection.  I&#8217;ll go through ep&#8217;s, singles and compilations next just to be sure.</p>
<p>But with this code in hand, maybe it&#8217;s time to add something to morituri to save the silent HTOA tracks as pure .cue information.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1545</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Votes for talks at open source conferences</title>
		<link>http://thomas.apestaart.org/log/?p=1537</link>
		<comments>http://thomas.apestaart.org/log/?p=1537#comments</comments>
		<pubDate>Tue, 07 May 2013 11:53:26 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1537</guid>
		<description><![CDATA[I&#8217;ve never been a fan of voting for talks, because it tends to be poorly implemented under the guise of democracy. Of course it&#8217;s easy for me to talk, I&#8217;ve never organized anything at that scale. I&#8217;ll give two examples on why I feel this way, one of which triggering today&#8217;s blog post. First off, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve never been a fan of voting for talks, because it tends to be poorly implemented under the guise of democracy.  Of course it&#8217;s easy for me to talk, I&#8217;ve never organized anything at that scale.</p>
<p>I&#8217;ll give two examples on why I feel this way, one of which triggering today&#8217;s blog post.</p>
<p>First off, my colleague Marek submitted a talk to Djangocon.  The talk was about how to use <A href="https://github.com/f3at/feat">feat</A> (a toolkit we wrote for livetranscoding) to serve Django pages, but in such a way that they can use Deferreds to remove the concurrency bottleneck of &#8220;1 request at a time&#8221; per process running Django.</p>
<p>Personally, to me, this is one of the most irritating design choices of Django &#8211; from the ground up it was built synchronously (which could have been fine in most places).  But the fact that, when you get a request, you have to always synchronously respond to it (and block every other request for that process in the meantime) is a design choice that could have easily been avoided.</p>
<p>In our particular use case, it was really painful.  If our website has to do an API request to some other service we don&#8217;t control that can easily take 30 seconds, our process throughput suddenly becomes 2 pages per minute.  All the while, the server is sitting there waiting.</p>
<p>Yes, you can throw RAM at the problem and start 30 times more processes; or thread out API requests; or farm it out to Celery, and do some back-and-forthing to see when the call&#8217;s done.  Or do any other number of workarounds for a fundamental design choice.</p>
<p>Since we like Twisted, we preferred to throw Twisted at the problem, and ended up with something that worked.</p>
<p>Anyway, that&#8217;s a lot of setup to explain what the talk was about.  Marek submitted the talk to DjangoCon, and honestly I didn&#8217;t expect it to get much traction because, when you&#8217;re inside Django, you think like Django, and you don&#8217;t really realize that this is a real problem.  Most people who do realize it switch away to something else.</p>
<p><strong>But to my surprise, Marek&#8217;s talk was the most-voted talk!</strong> I wish I could link to the results, but of course that vote site is no longer online.</p>
<p>I guess I expected that would mean he&#8217;d be presenting at DjangoCon this year.  So I asked him today when his talk was, and he said &#8220;Oh that&#8217;s right.  I did not get accepted.&#8221;</p>
<p>Well, that was a surprise.  Of course, the organising committee reserves the right to decide on their own &#8211; maybe they just didn&#8217;t like the talk.  But if you ask your potential visitors to vote, you&#8217;d expect the most-voted talk to make it on the schedule no ?</p>
<p>The feedback Marek got from them was surprising too, though.  Their first response was that this talk was too similar to another talk, titled &#8220;How to combine JavaScript &#038; Django in a smart way&#8221;.  Now, I&#8217;m not a JavaScript expert, but from the title alone I can already tell that it&#8217;s very unlikely that these two talks have many similarities beyond the word &#8216;Django&#8217;.</p>
<p>After refuting that point, their second reason was that they wanted more experienced speakers (but they didn&#8217;t ask Marek for his experience), and their third reason was that the talk was in previous editions of DjangoCon US/EU (it&#8217;s unclear whether they meant his talk or the JavaScript one, but Marek&#8217;s definitely wasn&#8217;t, and we couldn&#8217;t find any mention of the other talk in previous conferences.  I&#8217;m also not sure why that even matters one way or the other. This email thread was in Polish, so I have to rely on Marek&#8217;s interpretation of it)</p>
<p>Personally, my reaction would have been to complain to the organizers or Django maintainers.  Marek&#8217;s flegmatic attitude was much better though &#8211; after such an exchange, he simply doesn&#8217;t want to have anything to do with the conference.</p>
<p>He&#8217;s probably right &#8211; <strong>it&#8217;s hard to argue with someone who doesn&#8217;t want to invite you and is lying about the reasons.</strong></p>
<p>The second example is <A href="http://bcndevcon.org/">BCNDevCon</A>, a great conference here in Barcelona, organized by a guy who used to work for Flumotion who I have enormous respect for.  I&#8217;ve never seen anyone create such a big conference over so little time.</p>
<p>He believes strongly in the democratic aspect, and as far as I can tell constructs the schedule solely based on the votes.</p>
<p>Sadly I didn&#8217;t go to the last one, and the reason is simply because I felt that the talks that made it were too obviously corporate.  A lot of talks were about Microsoft products, and you could tell that they won votes because people&#8217;s coworkers voted on talks.  I&#8217;m not saying that&#8217;s necessarily wrong &#8211; given that he worked at our company and has friends here, I&#8217;m sure people working here presenting at his conference have also done vote tending.  It&#8217;s natural to do so.  But there should be a way to balance that out.</p>
<p>I think the idea of voting is good, but implementation matters too.  Ideally, you would only want people that actually are going to show up to vote.  I have no idea how you can ensure that, though.  Do you ask people to pre-pay ? Do you ask them to commit to pay if at least 50% of their votes make it in the final schedule, kickstarter-style ?</p>
<p>These two examples are on opposite extremes of voting.  One conference simply disregards completely what people vote on.  If I had voted or bought a ticket, I would feel lied to.  Why waste the time of so many people? The other conference puts so much stock in the vote, that I feel the final result was strongly affected.  I seriously doubt all those Windows 8 voters actually showed up.</p>
<p>Does anyone have good experiences with conference voting that did work? Feel free to share!</p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1537</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>If I was 16 years younger&#8230;</title>
		<link>http://thomas.apestaart.org/log/?p=1533</link>
		<comments>http://thomas.apestaart.org/log/?p=1533#comments</comments>
		<pubDate>Fri, 03 May 2013 21:30:25 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1533</guid>
		<description><![CDATA[I&#8217;d totally try and be the intern for pinboard. The money is great for a summer job, but that&#8217;s not the important part. pinboard seems interesting, it&#8217;s a real service, and it&#8217;s (I assume) small enough to understand from top to bottom. Contrary to, say, a Google Summer of Code project, you get to touch [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d totally try and be the <a href="https://blog.pinboard.in/2013/04/seeking_a_summer_pintern/">intern for pinboard</a>.</p>
<p>The money is great for a summer job, but that&#8217;s not the important part.  pinboard seems interesting, it&#8217;s a real service, and it&#8217;s (I assume) small enough to understand from top to bottom.  Contrary to, say, a Google Summer of Code project, you get to touch a real existing service, and from what I can tell from the blog you get to do it with a smart and funny guy.</p>
<p>You&#8217;ve got five weeks left; even if you&#8217;re in the middle of exams right now, apply!</p>
<p>(And if you do, why not add the features to merge and rename tags while you&#8217;re at it?)</p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1533</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>measuring puppet</title>
		<link>http://thomas.apestaart.org/log/?p=1529</link>
		<comments>http://thomas.apestaart.org/log/?p=1529#comments</comments>
		<pubDate>Thu, 24 Jan 2013 19:58:17 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[puppet]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[measure]]></category>
		<category><![CDATA[moreutils]]></category>
		<category><![CDATA[ts]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1529</guid>
		<description><![CDATA[For one of work&#8217;s projects, we&#8217;ll soon be working on scaling our platform more, which will require deploying a bunch more machines. For this project, we basically have a local dev platform, an online dev platform, a preproduction platform, and a production platform. Right now, all these platforms have exactly one host. There are two [...]]]></description>
			<content:encoded><![CDATA[<p>For one of work&#8217;s projects, we&#8217;ll soon be working on scaling our platform more, which will require deploying a bunch more machines.  For this project, we basically have a local dev platform, an online dev platform, a preproduction platform, and a production platform.</p>
<p>Right now, all these platforms have exactly one host.  There are two puppetmasters, one for the dev platforms and one for the pre/pro platforms.</p>
<p>Since deploying a bunch more machines is going to require a lot more puppet running, I want to work on removing as much friction as I can from my puppet work.  I do the runs manually as we upgrade platforms during deployment, and a run typically takes well over a minute.  For me, that&#8217;s too long &#8211; it causes me to waste time, lose focus, task switch, and forget I should be following up on puppet runs.  It makes finetuning puppet modules a chore as I hack on them.</p>
<p>So I wanted to start by trimming some of the obvious fat before I segment my puppet config into separately testable pieces.  I would have expected puppet apply to actually have something to help with that, but it doesn&#8217;t.</p>
<p>After thinking it through, I realized I wanted some kind of tool that would timestamp output of puppet apply &#8211;debug so I could see which things it does take more time than others.</p>
<p>I wasn&#8217;t sure what to google for, but timestamp stdout seemed to bring up some results, and I hit on <a href="http://joeyh.name/code/moreutils/" title="moreutils">http://joeyh.name/code/moreutils/</a> which includes a tool called &#8216;ts&#8217; and is a simple pipe filter that timestamps lines going to stdout.</p>
<p>That was almost good enough.  What I really wanted though was to know how much time elapsed since printing the last line.  My perl is rusty, but I managed to quickly cook up a <a href="https://thomas.apestaart.org/thomas/trac/browser/patches/moreutils/0001-add-support-for-incremental-timestamping.patch">patch</a> that makes it print incremental timestamps.</p>
<p>Now I can do a puppet run like this:<br />
<code>puppet apply --modulepath=`pwd`/modules:`pwd`/dev/modules manifests/site.pp --debug | ts -i "%H:%M:%.S" | egrep -B 1 "^00:00:0[^0]"<br />
00:00:00.001066 debug: Executing 'test -e ../commit &amp;&amp;                   (                     test xorigin/master == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/master^0 | head -n 1` == `cat ../commit` ) )'<br />
00:00:02.646908 debug: Service[postfix](provider=redhat): Executing '/sbin/service postfix status'<br />
--<br />
00:00:00.000987 debug: Executing 'test -e ../commit &amp;&amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'<br />
00:00:01.871258 debug: Exec[git-checkout-/var/www/partner-test](provider=posix): Executing check 'test -e ../commit &amp;&amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'<br />
00:00:00.000942 debug: Executing 'test -e ../commit &amp;&amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'<br />
00:00:01.886606 debug: Prefetching aliases resources for mailalias<br />
--<br />
00:00:00.000957 debug: Executing '/usr/sbin/semanage fcontext -l | grep -q '^/home/git/dev(/.*)?''<br />
00:00:01.750281 debug: /Stage[main]/Dexter::Apache/Selinux::Set_fcontext[home-httpd]/Exec[semanage-/home/git/dev-httpd_sys_content_t]/unless: /usr/sbin/semanage: Broken pipe<br />
--<br />
00:00:00.000855 debug: Executing 'test -e ../commit &amp;&amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'<br />
00:00:02.064475 debug: /Schedule[puppet]: Skipping device resources because running on a host<br />
--<br />
00:00:00.001048 debug: Executing '/usr/sbin/semanage fcontext -l | grep -q '^/srv/merchant(/.*)?''<br />
00:00:01.750129 debug: /Stage[main]/Partner::Install/Selinux::Set_fcontext[srv-merchant-httpd]/Exec[semanage-/srv/merchant-httpd_sys_content_t]/unless: /usr/sbin/semanage: Broken pipe<br />
--<br />
00:00:00.000861 debug: Executing 'test -e ../commit &amp;&amp;                   (                     test xmaster == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify master^0 | head -n 1` == `cat ../commit` ) )'<br />
00:00:01.841316 debug: Exec[git-checkout-/var/www/merchant](provider=posix): Executing check 'test -e ../commit &amp;&amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'<br />
00:00:00.000955 debug: Executing 'test -e ../commit &amp;&amp;                   (                     test xorigin/release-1.4.x == `cat ../commit` ||                         (                             git fetch -a;                             test `git rev-parse --verify origin/release-1.4.x^0 | head -n 1` == `cat ../commit` ) )'<br />
00:00:01.858206 debug: Service[httpd](provider=redhat): Executing '/sbin/service httpd status'</code></p>
<p>Some explanation is in order.</p>
<p>The puppet apply is straightforward if you know puppet a little &#8211; it will apply a manifest and spit out a lot of debug info.</p>
<p>The output gets piped into ts, which will do incremental timestamping (with -i, which is what my patch adds) according to the specified format (ts by default uses seconds precision, but can do microsecond precision if you use %.S in the format).</p>
<p>Then I grep for all lines that take at least 1 second to be output, and display the line before that too (since puppet is generating output either before or after a possibly long-running task, so either on the line before or the line that took too long).</p>
<p>In the first section, I doubt service postfix status is to blame, so it&#8217;s probably my convoluted git updating that takes too long.  I need to rework that module so it doesn&#8217;t fetch on every run.</p>
<p>In the third section, semanage is to blame.  Hm, maybe I need to find a different way to look up whether the particular fcontext rule I want to add is already there.  I&#8217;ve considered converting it to facts, although that sounds like it would be stretching facts a little &#8211; that&#8217;s a lot of info to store in a fact.</p>
<p>The others are repeats of both, so I know where to start trimming the fat now!</p>
<p>And when all > 1 sec items are gone, time to shave off more below that.</p>
<p>If you want to try out ts with incremental timestamping, it&#8217;s available in the rebuilt moreutils rpm in my <A href="http://thomas.apestaart.org/pkg/">package repositories</A> for CentOS 6 and F16/17/18.</p>
<p>If any puppetmaster (hah!) has good tips on how to debug and measure the catalog generation step (the one on the master), let me know!</p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1529</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>mach 1.0.2 &#8220;ears&#8221; released</title>
		<link>http://thomas.apestaart.org/log/?p=1527</link>
		<comments>http://thomas.apestaart.org/log/?p=1527#comments</comments>
		<pubDate>Tue, 22 Jan 2013 21:32:41 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[mach]]></category>
		<category><![CDATA[Releases]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1527</guid>
		<description><![CDATA[Another Fedora, another mach release. This release fixes a minor bug and adds support for Fedora 18. Get the source, update from my repository, or wait until updates hit the Fedora repository. Happy packaging!]]></description>
			<content:encoded><![CDATA[<p>Another Fedora, another mach release.  This release fixes a minor bug and adds support for Fedora 18.</p>
<p><A href="http://thomas.apestaart.org/download/mach/">Get the source</A>, update from my repository, or wait until updates hit the Fedora repository.</p>
<p>Happy packaging!</p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1527</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>morituri 0.2.0 &#8220;ears&#8221; released</title>
		<link>http://thomas.apestaart.org/log/?p=1525</link>
		<comments>http://thomas.apestaart.org/log/?p=1525#comments</comments>
		<pubDate>Sun, 20 Jan 2013 22:45:21 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[morituri]]></category>
		<category><![CDATA[Releases]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1525</guid>
		<description><![CDATA[A new year, a new morituri release. I got informed some people wanted to use morituri with a different log output, so I made the logger pluggable. For my personal use, I have now gotten to ripping all my singles and ep&#8217;s, and so instead of having singles with the same name as an album [...]]]></description>
			<content:encoded><![CDATA[<p>A new year, a new morituri release.</p>
<p>I got informed some people wanted to use morituri with a different log output, so I made the logger pluggable.</p>
<p>For my personal use, I have now gotten to ripping all my singles and ep&#8217;s, and so instead of having singles with the same name as an album overwrite the album, I added template variables for the release type.  I&#8217;ve also changed the default templates to use it, so if you were relying on the default template for your collection, you may want to either move those files or use the previous default template.</p>
<p>morituri now has a config file, so once you&#8217;ve run rip offset find to find your drive&#8217;s offset, it will save it and automatically use it for ripping.  Same for checking whether cdparanoia can defeat the drive&#8217;s caching.  morituri saves it by drive information, not by device node, so it will work with different USB drives too.</p>
<p>See <A href="https://thomas.apestaart.org/morituri/trac">the trac page</A> for more info and download links.  You can also download it from my package repository for Fedora 17 and 18 if that&#8217;s your distro.</p>
<p>For the curious, here&#8217;s some more info:</p>
<p><code>This is morituri 0.2.0, "ears"</p>
<p>Coverage in 0.2.0: 67 %   (1890 / 2807), 95 python tests</p>
<p>Features added in 0.2.0:</p>
<p>- added plugins system for logger<br />
- added rip cd rip --logger to specify logger<br />
- added reading speed, cdparanoia and cdrdao version to logger<br />
- added rip drive analyze to detect whether we can defeat audio cache behaviour<br />
- store drive offsets and cache defeating in config file<br />
- rip drive list shows configured offset and audio cache defeating<br />
- added rip image retag --release-id to specify the release id to tag with<br />
- added %r/%R for release type to use in track/disc template<br />
- added %x for extension to release template</p>
<p>Bugs fixed in 0.2.0:</p>
<p>-  89: Fails to rip track with \ in its name<br />
- 105: Backslash in track names causes "Cannot find file" during rip<br />
- 108: Unable to find offset / rip<br />
- 109: KeyError when running "rip offset find"<br />
- 111: Python traceback when config has no read offset for CD<br />
-  76: morituri should allow for a configuration file<br />
-  96: rip image retag: allow specification of release ID<br />
- 107: Backslash in track name confuses AR step<br />
- 112: add MusicBrainz lookup URL to generated logfile</code></p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1525</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Fedora 18 part one</title>
		<link>http://thomas.apestaart.org/log/?p=1514</link>
		<comments>http://thomas.apestaart.org/log/?p=1514#comments</comments>
		<pubDate>Wed, 16 Jan 2013 23:10:06 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Fedora]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1514</guid>
		<description><![CDATA[Yesterday, I was wondering if there shouldn&#8217;t be a new Fedora out by now and if it would fix a bunch of my current GNOME 3 annoyances. So I checked, and lo and behold, the final release date was yesterday! Excellent. Let&#8217;s do some completely unscientific scoring this time around. In part one, it&#8217;s bound [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I was wondering if there shouldn&#8217;t be a new Fedora out by now and if it would fix a bunch of my current GNOME 3 annoyances.</p>
<p>So I checked, and lo and behold, the final release date was yesterday! Excellent.</p>
<p>Let&#8217;s do some completely unscientific scoring this time around.  In part one, it&#8217;s bound to get ugly because you always run into the negatives first when doing an upgrade.</p>
<p>First challenge was finding the torrent links for the full DVD.  Apparently the DVD is now a well-hidden option, and the torrent even more so &#8211; I had to google for it, I couldn&#8217;t find any links on the download site. <strong>-1 and -1.</strong> I appreciate that there is a small CD with a live installer and everything, but I have to upgrade 3 computers in total so I prefer to download once as much as I can &#8211; although it&#8217;s likely all of them will need to upgrade gazillions of packages soon after.</p>
<p>The second issue: after booting, by default it gives you the second option &#8211; test media and install. I didn&#8217;t realize that, and just hit Enter. Then anaconda starts counting something without telling you what it&#8217;s doing, at which point I figured it would be a media check as it was really slow.  But if you hit Esc to abort it, you get dropped into a rescue shell, instead of just continuing.  Err, OK.  I don&#8217;t know if anyone out there really uses or prefers the media check option, but I never do.</p>
<p>Reboot, make sure to go up to select the first option (which, really, should be switched to the second if you&#8217;re not going to default to it ?)</p>
<p><strong>-1 for being confusing and defaulting to wasting my time.</strong></p>
<p>This is the first anaconda that is actually full-screen on my laptop, nice.  <strong>+1</strong></p>
<p>The first impression of anaconda is that it looks good and it looks very GNOME 3-y.  Not entirely sure I like the &#8216;things popping up on my screen as anaconda presumably checks stuff&#8217; without telling me, because there&#8217;s potential for getting it wrong (<strong>-1</strong>), but I&#8217;ll accept it for now.  Definitely liking that it figured out my network connection automatically, if NetworkManager is behind it then I&#8217;ll be darned &#8211; yay for NetworkManager! (<strong>+10</strong> alone for that one, so NetworkManager pulls out slightly from minus infinity.)</p>
<p>Date &#038; Time, since you now can rely on network possibly working maybe you should look me up by IP as a sane default instead of New York ? Network Time was on by default, but no.  No points for or against though.</p>
<p>On to partitioning.  I&#8217;ve always used a custom layout.  The new dialog scares me a little; I checked &#8220;I don&#8217;t need help&#8221; but the only option forward is &#8216;reclaim space&#8217;, so I&#8217;m not sure it&#8217;s not going to do anything bad to my drives. <strong>-5</strong></p>
<p>On the next screen, I see a tree with New Fedora 18 Installation, Fedora Linux 15, Fedora Linux 16, and Unknown.  I typically have two or three root partitions so I can test different Fedora versions and fall back to older ones when I&#8217;m upgrading.  It&#8217;s a little confusing to use the tree, but basically I figured out how to go through the Fedora Linux 15 config and get it to move the ones I wanted to use to the New Fedora 18 Installation.  I definitely see the potential for this being easier to use than the old way but it needs a bit more documentation or tooltips or explanation to make it really feel safe to use.  Maybe it would help too to have a final overview page when finishing partition so you can confirm that it looks like it&#8217;s going to do the right thing. <strong>-1</strong> for the confusion, but <strong>+5</strong> for finding partition info from all my roots.</p>
<p>It&#8217;s a small touch, but it&#8217;s nice it&#8217;s asking for your root password *while* already installing packages.  Makes it a little faster to get it done.  <strong>+3</strong> guys! I&#8217;m wondering if it couldn&#8217;t do more of that &#8211; your time zone config for example ?</p>
<p>The redesigned anaconda really looks nice, and fits in well with the GNOME 3 experience I&#8217;m now used to.  Gutsy move, but this is going to pay off in the long run.  <strong>+10</strong></p>
<p>After waiting for the packages to install, I clicked Reboot, and it dropped me in a text mode that said [terminated].  oh well, nothing&#8217;s perfect I guess. <strong>-2</strong></p>
<p>On a hard reboot, I got greeted with a reasonably nice GUI that had managed to pick up my old boot options &#8211; even the Windows partition I have on this machine.  <strong>+5</strong> The text looked ugly and stretched (<strong>-1</strong>), but it could have been worse.</p>
<p>Firstboot starts and greets me first with a big white square around my cursor (<strong>-1</strong>), and then the nice-looking GUI.  Firstboot asks me for date and time info again, not sure why.  Maybe an oversight. <strong>-1</strong></p>
<p>And then we&#8217;re on to the login screen.  And it definitely looks nice! <strong>+5</strong></p>
<p>Logging in.  Being told there are updates.  Holy crap &#8211; 218 updates &#8211; for a release that&#8217;s a day old.  Does the word &#8216;release&#8217; mean anything anymore? <strong>-5</strong>.  Seriously, freeze that crap for a few days, only real security issues or facepalm bugs.</p>
<p>My updated failed to process &#8211; because I had installed the rpmfusion rpm and it doesn&#8217;t have the GPG key.  Yet again, by default updating packages fails completely when anything in the config is not working, instead of at least getting me the updates that can be installed, in the name of, you know, security. <strong>-10</strong> because this is a persistent attitude problem for yum.</p>
<p>Create some missing symlinks, and the upgrade can continue.  So I leave for lunch.</p>
<p>And when I come back, I am greeted by some kind of lock screen.  It looks pretty. (<strong>+3</strong>)  It&#8217;s like a video game, those arrows. Yes, that&#8217;s it &#8211; it reminds me of when I pretend to be Batman in Arkham City and I&#8217;m on a mission and it&#8217;s telling me to glide down in the direction of the three floating arrows. Except, it&#8217;s not actually acting like a lock screen &#8211; when I click it, something happens and I go to a user selection ? It looks like I got logged out behind my back ? Really ? Is it doing some kind of automatic logout after upgrading ? I hope not, that would be horrible as a default. No clue what happened. <strong>-5</strong></p>
<p>I log in again, and recover my vim sessions that got so brutally killed.</p>
<p>I start running the install commands that are part of my general upgrade checklist.  In the meantime, I check out this rumour I heard that Fedora 18 installs with kernel 3.6 by default but the one day old upgrades install 3.7, so I run rpm -qa | grep kernel.</p>
<p>Oh my.  It&#8217;s spewing db errors halfway through the query.  Three times in a row.  Contrary to popular belief, rpm is really robust, and you really need to do evil things to get it to corrupt, like drop your hard drive or kill -9 during package installs.  But here it just fails simply querying, presumably for the first time in my experience it can&#8217;t handle querying while installing ? <strong>-5</strong></p>
<p>After letting it sit there and install some more, I get that lock screen again.  I click it, and some arrows flash.  Maybe I&#8217;m supposed to drag it up or something ? But before I can do, the screen flashes, and I&#8217;m back to the login prompt.  Oh, so even worse &#8211; this new lock screen crashes my whole desktop somehow ? Ouch. <strong>-5</strong></p>
<p>Evolution forgot my sort settings (per folder) and 3-pane window. <strong>-3</strong> for making me suffer through having to sort every single folder by date, descending again (really, is unsorted a sane default to anyone ?)</p>
<p>The lock screen looked cool at first glance, but after what feels like lifting up the door to my garage four times today already it&#8217;s getting on my nerves.  <strong>-3</strong> Same with the &#8216;pressure-triggered&#8217; notification area, which is starting to cause pain in my hand on my laptop, and I never have that kind of trouble.  I wonder if these things got designed with a console joypad as an interface, where you could accept that pressure-triggered actions make sense.  <strong>-3</strong> for sucking and another <strong>-3</strong> for making me think originally that it looked cool until I actually had to use it.</p>
<p>My first login as a &#8216;fresh&#8217; user (I don&#8217;t mount my real home until I&#8217;m sure all the basics work ok) is very zippy and GNOME 3 looks tidier.  <strong>+5</strong></p>
<p>However, my second login, with my old user, takes a good 30 seconds before anything at all appears beside the desktop.  I don&#8217;t know which dead weight I&#8217;m dragging along from before, but this upgrade is not liking it one bit.  No feedback whatsoever on what&#8217;s going wrong though.  <strong>-3</strong></p>
<p>Total score so far: <strong>-13</strong>.</p>
<p>It didn&#8217;t pull back to breakeven, but don&#8217;t despair &#8211; now that the basics are done, it&#8217;s bound to get better in the next part.</p>
<p>(editor&#8217;s note &#8211; see if you can tear this whole article to pieces by pointing out a counting error in the score, cleverly invalidating my already unimportant opinion!)</p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1514</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>dEUS week</title>
		<link>http://thomas.apestaart.org/log/?p=1510</link>
		<comments>http://thomas.apestaart.org/log/?p=1510#comments</comments>
		<pubDate>Thu, 06 Dec 2012 15:08:20 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1510</guid>
		<description><![CDATA[For some reason this week turned out dEUS week at home in Barcelona. Ripping the deluxe edition of Worst Case Scenario that came with the DVD, I finally watched the &#8216;Time is the state of my jeans&#8217; documentary about the album. So I thought, why not go the whole hog, and use some dangerous pirate [...]]]></description>
			<content:encoded><![CDATA[<p>For some reason this week turned out dEUS week at home in Barcelona.  Ripping the deluxe edition of Worst Case Scenario that came with the DVD, I finally watched the &#8216;Time is the state of my jeans&#8217; documentary about the album.</p>
<p>So I thought, why not go the whole hog, and use some dangerous pirate site to download the Belpop special about dEUS, and get through all of it.</p>
<p>The contrast between these two documentaries was very revealing.</p>
<p>The first one focuses only on the album, with interviews of the band members together, and they turn out very different than in the second where people were interviewed separately.  In the joint interviews, you can see how Tom&#8217;s controlling side comes out and talks over the other people; maybe I&#8217;m reading too much into it, but you even see some of the band members bite their tongue and being reminded of why they left the band in the first place.  It doesn&#8217;t paint as nice a picture of Tom.</p>
<p>The second documentary makes him look a lot nicer.  They seem to actually show bits of the other interviews to each member, so they can still react, and usually it ends up with loud laughter.  The stories are better too, the second documentary goes more in-depth.  The international stars make a comeback experience, which I guess is unavoidable.</p>
<p>It&#8217;s fun to see the history from before the first album, and it reminded me of the first time I saw them &#8211; a little festival 20 km from my house in the sports room of a school, where they were the last band before headliner Nemo (who had just released their debut).  dEUS in its early days was sloppy but dangerous &#8211; when you see the live recordings of that period of Suds &#038; Soda for example, they mess up one of the two notes in the riff, mess up the rhythm and the phrasing, and so on.</p>
<p>The second documentary is full of funny moments.  My favorite is when Rudy Trouvé talks about the EP after the debut:<br />
&#8220;Tommy thinks that my sister = my clock really (long pause) made sure that a part of the audience tuned out.  I think so too (starts giggling evily)&#8221;.</p>
<p>The Belpop documentary is definitely the better one of the two.</p>
<p>The bonus disc for the WCS deluxe edition is a nice collection of stuff I painstakingly collected at the time, just in time for our current music consumption culture.  Kinderballade, their only dutch-spoken song (and one of my favourite tracks they ever did) was on a hard-to-find tribute album, probably made around my sister = my clock because the sounds are so similar, but beautifully done.  Their b-sides from that album are plentiful and excellent.</p>
<p>The one answer neither documentary answers is the question I&#8217;ve always had about the debut album &#8211; why did the English version have a different tracklist ? For me, Via will always be followed by Let Go.  Yeah, maybe Right as Rain is a better song, but it&#8217;s not right in the flow of the album.  Same for Great American Nude &#8211; an amazing song, but after the 50 second splinter bomb of shake your hip (the real ending of the album to me), the only thing that fits is the completely atypical dive bomb djingle.  Great American Nude brings the energy back up instead of doing something out of character to go back to the opening track.  I just have no idea what was wrong with the original release.</p>
<p>I hope to get off planet dEUS by next week, but an album like this that hit when I turned 18 is going to be in my head forever.  They were, and still are, an excellent band.</p>
<p>Here&#8217;s hoping that two years from now the WCS gang gets together again to play the album together.  Come on Rudy and Klaas, give it a think.</p>
<p>After so many years, I also finally appreciate a track like WCS (First Draft).  I used to hate that song, but today it&#8217;s one of my favorites.  Time is the state of my jeans is as good a definition of time as time is what turns kitten into cats.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1510</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>399 days without hard drive failures</title>
		<link>http://thomas.apestaart.org/log/?p=1507</link>
		<comments>http://thomas.apestaart.org/log/?p=1507#comments</comments>
		<pubDate>Sat, 01 Dec 2012 19:36:11 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Fedora]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://thomas.apestaart.org/log/?p=1507</guid>
		<description><![CDATA[Well, it&#8217;s been a record 399 days, but they have come to an end. Last weekend, a drive in my home desktop started failing. I had noticed some spurious SATA errors in dmesg before, and load times were rising (although lately in the 3.4/5/6 kernels I&#8217;ve been running I&#8217;ve actually seen that happen more and [...]]]></description>
			<content:encoded><![CDATA[<p>Well, it&#8217;s been a record 399 days, but they have come to an end.  Last weekend, a drive in my home desktop started failing.  I had noticed some spurious SATA errors in dmesg before, and load times were rising (although lately in the 3.4/5/6 kernels I&#8217;ve been running I&#8217;ve actually seen that happen more and more, so it wasn&#8217;t a clear clue).</p>
<p>Then things really started slowing down, and a little later I noticed the telltale clicking sound a drive can make when it&#8217;s about to give up.</p>
<p>Luckily life has taught me <A href="http://thomas.apestaart.org/log/?p=621">many valuable lessons</A> when it comes to dealing with hard drives.  The failing drive was a 1TB drive in a RAID-1 software raid setup, so fixing it would be simple &#8211; buy a new 1TB drive and put it in the RAID, and just wait for hours on end (or, go to sleep) as the RAID rebuilds.</p>
<p>A few years ago I started keeping track of my drives in a spreadsheet, labeling each drive with a simple four digit code &#8211; the first two digits the year I bought the drive in, and the second two digits just a sequence (and before you ask, the highest those two digits got so far is 07 &#8211; both in &#8217;11 and &#8217;12).  The particular drive failing was 0906, so the drive was about 3 years old &#8211; reasonable when it comes to failure (given that it has been running pretty much 24/7), but possibly still under warranty, and I&#8217;ve never had the opportunity to try and get a disk back under warranty, although this particular one was bought in Belgium.</p>
<p>But I digress.</p>
<p>Of course, I seldom take the simple route.  When buying hard drives, I basically only follow one rule &#8211; buy the biggest drive with the  cheapest unit price.  And at last, Barcelona stores have gotten to the 3TB drives being at that sweet spot.  So, why buy a comparatively expensive 1 TB drive and not get to have any fun with complicated drive migration?</p>
<p>So I settled on a 3TB Seagate Red drive (this is a new range specifically for NAS systems, although I&#8217;m not convinced they&#8217;re worth the 6% extra cost, but let&#8217;s give it a try) so I could replace the penultimate 2TB drive in my ReadyNAS, get 1TB of extra capacity on that, and then just use the newly freed 2TB drive in my desktop computer.</p>
<p>Of course, that&#8217;s when I ended up with two problems.  </p>
<p>Problem 1 was the NAS.  The ReadyNAS was at 10TB already, having 4 3TB drives and 2 2TB drives with dual redundancy.  I took out a tray, replaced the drive, put it back in, and then waited a good 18 hours for the array to rebuild.  (The ReadyNAS has something they call XRaid2 which really is just a fancy way of creating software raids and grouping them with LVM, but in practice it usually works really well &#8211; figuring out a number of raid devices it should create using the mix of physical drives).</p>
<p>This time, it had correctly done the raid shuffle, but then gave me an error message saying it couldn&#8217;t actually grow the ext4 filesystem on it because it ran out of free inodes.  Ouch.  A lot of googling told me that I should try to do an offline resize, so I stopped all services using the file system, killed all apple servers that somehow don&#8217;t shut down, and did the offline resize.  And then I rebooted.</p>
<p>The ReadyNAS seemed to be happy with that at first, saying it now had more space (although depending on the tool you use, it still says 10TB, because of the 2 to the 10/10 to the 3rd number differences adding up).  But soon after that it gave me ext3 errrors.  Uh oh.</p>
<p>With sweaty palms, I stopped all services again, unmounted the file system, and fsck&#8217;d it.  And almost immediately it gave me a bunch of warnings about wrong superblocks, wrong inodes, all in the first 2048 sectors.  Sure I have backups, but I wasn&#8217;t looking forward to figuring out how up-to-date they were and restoring up to 10 TB from them.</p>
<p>I gasped for air and soldiered on, answering yes to all questions, until it churned away, and I went to sleep.  The next morning, a few more yeses, and the file system seemed to have been checked.  Another reboot, and everything seemed to be there&#8230; Phew, bullet 1 dodged.</p>
<p>On to problem number 2 &#8211; the desktop.  The first bit was easy enough &#8211; although I&#8217;ve never been able to use gdisk to copy over partition tables like I used to with fdisk &#8211; it seems to say it did it, but it never actually updates the partition table.  Anyway, I created it by hand copying the exact numbers, then added the partitions to the software raid one by one, and again waited a good 6 hours.</p>
<p>And looking at my drive spreadsheet, I noticed I had a spare 2TB drive lying around that I was keeping in case one of the NAS drives would fail &#8211; but given that most of them are 3TB right now, that wouldn&#8217;t be very useful.  So, after the software raid rebuilt in my desktop, I switched out the working 1 TB drive as well, and repeated the whole dance.</p>
<p>So now I had 2 2TB drives, 1 TB of which was correctly used.  At this point I would normally figure out how to grow the partitions, then the md device, then the LVM on it, and then finally grow my ext4 /home partition.  But since it&#8217;s using LVM and I never played with it much, this time I wanted to experiment.</p>
<p>I still had the working 1TB drive which I could use as a backup in case everything would fail, so I was safe as houses.  </p>
<p>At first I was hoping to do this with gparted live, but it seems gparted doesn&#8217;t understand either software raid or lvm natively, so it&#8217;s back to the command line.<br />
Create two linux raid partitions on the two 2TB drives, assemble a new md device, and spend a lot of time reading the LVM howto.</p>
<p>In the end it was pretty simple; step 1 was to use vgextend to add the new md to the volume group, and then lvextend -l 100%FREE -r to grow the logical volume and resize the file system all at once.  That automatically fsck&#8217;s (which you can follow progress of by sending USR1) and then resize2fs (which you can&#8217;t really check progress of once it&#8217;s started)</p>
<p>(By now, we&#8217;re over a week into the whole disk dance, in case you were wondering &#8211; doing anything with TB-sized disks takes a good night for each operation).</p>
<p>Except that now rebooting for some reason didn&#8217;t work &#8211; grub complained that it didn&#8217;t know the filesystems it needed &#8211; /boot is on a software raid too, and even though I don&#8217;t recall running anything grub-related in this whole process, I had swapped out a few disks and may have botched something up when transferring boot records.</p>
<p>At the same time, I was also experimenting with Matthias&#8217;s <A href="http://git.marmotte.net/git/glim/plain/README">excellent new GLIM boot usb</A> project (where you finally just drop in .iso files if you want to have multiple bootable systems on your usb key, without too much fidgeting), so I tried doing this in system rescue cd.</p>
<p>Boot into that, manually mount the right partitions, chroot into that, and then grub2-install /dev/sda.</p>
<p>Except that grub complained saying<br />
<code>Path `/boot/grub2' is not readable by GRUB on boot. Installation is impossible. Aborting. </code></p>
<p>Most likely this was due to it being on a software raid.  Lots of people seemed to run into that, but no clear solutions, so I went the dirty way.  I stopped the raid device, mounted one half of it as a normal ext file system (tried read-only first, but grub2-install actually needs to write to it), ran grub2-install, unmounted again.  Then I recreated the software raid device for /boot again by reassembling, and that somehow seemed to work.</p>
<p>Reboot again, and this time past GRUB, but dropped in a rescue shell.  My mdadm.conf didn&#8217;t list the new raid device, so the whole volume group failed to start.  Use blkid to identify the UUID, add that to /etc/mdadm.conf (changing the way it&#8217;s formatted, those pesky dashes and colons in different places), verify that it can start it, and reboot.</p>
<p>And finally, the reboot seems to work.  Except, it needs to do an SELinux relabel for some reason! And in the time it took me to write this way-too-long blogpost, it only managed to get up to 54%.</p>
<p>And I was hoping to write some code tonight&#8230;</p>
<p>Oh well, it looks like I will have 1TB free again on my NAS, and 1TB of free space on my home desktop.</p>
<p>There is never enough space for all of the internet to go on your drives&#8230;</p>
<p><strong>UPDATE</strong>: SELinux relabeling is now at 124%.  I have no idea what to expect.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomas.apestaart.org/log/?feed=rss2&#038;p=1507</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
