Tag: HowTo

Insufferable is Awesome

I got a Nexus 7 for Christmas. As you might expect, the first thing I did was root it. The second was to get all my usual apps -- E-Mail, RSS, emulators -- set up and working. The ones I'm used to from my phone.

But the third thing? Comics.

I've been very excited about Mark Waid's digital comics endeavors for years now. He gets it. Release your books in DRM-free standard formats, and treat pirates like they're potential customers instead of treating your customers like they're potential pirates.

In a nutshell, I'd been waiting to get a tablet just for the opportunity to see what it was Waid was up to.

Well, for starters, his books up on thrillbent.com are just straight-up free downloads.

Want to download all of Thrillbent's marquee book, Insufferable, by Waid and artist Peter Krause, for free? (Hint: yes. Yes you do.) Here's a simple, handy bash script to do it:

for((i = 1; i <= 9; i++)); do wget http://www.thrillbent.com/cbz/insufferable/Insufferable_0$i\_Mark_Waid_2012.cbz; done for((i = 10; i <= 34; i++)); do wget http://www.thrillbent.com/cbz/insufferable/Insufferable_$i\_Mark_Waid_2012.cbz; done

And presumably next week #35 will be out with a "2013" in place of that "2012" in the filename and it'll go on from there.

From a nuts-and-bolts storytelling perspective, Insufferable is a perfectly compelling superhero book. It's a Batman pastiche, but I happen to like Batman pastiches. (I often say that my all-time favorite Batman comic is Astro City: Confession.) The setup here is, loosely: What if Nightwing was a total douchebag?

It follows that moment of the sidekick -- named Galahad, in this case -- striking off on his own, no longer able to work with his mentor (Nocturnus). And Galahad isn't the class act that Dick Grayson is -- he's an insecure, spoiled celebrity. Nocturnus, meanwhile, has seen better days; he's something of a has-been and is now superheroing on a budget.

That, by itself, is enough for an intriguing, human superhero yarn. Insufferable would be a thoroughly enjoyable book on the strength of good old-fashioned traditional comic book storytelling.

But instead, it innovates. Waid and Krause make a point of doing things with a digital comic that can't be done on paper. Frames appear one swipe at a time; characters' facial expressions change. In one case, Nocturnus does the classic Batman entrance -- in one panel, the room is empty; swipe your finger and suddenly he's just there. As Galahad rides off after the bad guy, he receives a tweet making fun of him. Swipe and a few retweets appear over the scene; swipe again and the screen starts to fill with them.

Waid discusses these techniques in a recent Robot 6 interview. He cites the master, Bernie Krigstein, as his greatest inspiration in thinking of panel composition as a tool for pacing.

Waid's got the right idea, and it almost always works. As I read Insufferable I keep thinking of how smart he and Krause are in their use of these techniques, how they're not flashy and they're not there just for the sake of Doing Something Different; they actually serve the story in a way that -- while original -- has its roots in decades of traditional comics.

For my money, there is one example where it doesn't quite work: repeating the same panel exactly. I get what they're trying to do -- hell, where would Bendis be without that technique? -- but while you can repeat a panel exactly on paper as a pacing tool, it throws me to see it in a digital comic. There's a simple UI design reason for this: when a user interacts with a program, the program is supposed to do something. If I swipe a page, I can't tell the difference between "the same panel repeats" and "nothing happens". My first thought isn't "Oh, that's a beat", it's "Did I not press hard enough?"

There's a simple solution -- just change something, anything, in the panel. Make somebody blink, or change a facial expression slightly -- anything at all to give the user some sort of feedback that yes you turned the page and now this is the next image.

But you know, the occasional false note is the price of innovation. Yes, I found something small that, in my opinion, doesn't quite work in Waid and Krause's book. But there's so damn much that does work, and works astonishingly well.

I've said before that now is the best time to be a comics fan. Insufferable is one more example of why. Go give it a read -- it won't cost you anything and I think you'll be glad you did.

I haven't gotten around to the other Thrillbent books yet, but I intend to. But first -- well, it's Wednesday. I've got some traditional, paper-and-toner-and-staples comics to go pick up.

ROM Collection Browser in XBMC Frodo

BTW, anyone using ROM Collection Browser who's just upgraded to the latest XBMC beta and found that the list of ROMs is completely blank:

Open up C:\Users\[username]\AppData\Roaming\XBMC\addons\script.games.rom.collection.browser\resources\lib\gui.py and find the following line, which appears twice:

self.addItem(item, False)

In both occurrences, change it to simply

self.addItem(item)

You don't need to restart XBMC, but if you've got ROM Collection Browser open, right-click out of it and then reopen it. That will get the list to reappear.

If you find that it throws an "Unimplemented method" error for executehttpapi when you try to launch a game, open up launcher.py in the same directory and replace all instances of "executehttpapi" with "executeJSONRPC". (Same as above: you don't need to restart XBMC, but you do need to restart ROM Collection Browser for the changes to take.)

Thanks to versus for posting the gui.py fix and fmonaca for posting the launcher.py fix on the XBMC forums.

(And yes, I am posting this at 12:30 in the damn morning. You know how sometimes you have a thought on how to fix a vexing computer problem and know it'll be gone by morning?)

Triple-Booting a Mac Pro: Legacy Edition

Well, it's been a pretty exasperating few days, but I've successfully gotten my old (2006/1,1) Mac Pro set up to triple boot Lion (with a 64-bit kernel), OpenSUSE 12.2, and the Windows 8 Release Preview.

First, I set up Lion. I followed Jabbawok's Mountain Lion guide exactly, with one exception: since I was installing Regular Lion and not Mountain Lion, I didn't need to alter OSInstall.mpkg to skip the motherboard check. (As far as drive bays: I put the installer hard drive in bay 1 and the Lion drive in bay 2.)

After this I found that I could only get the 64-bit kernel if I used Chameleon's flag for Safe Mode (-x). Otherwise I got a blank gray screen on my helper card and a white screen with a frozen mouse pointer on my main card. This fixed itself once I yanked the helper card -- but I'll get to that in a minute. If you've got a helper card and you're following this guide, don't remove it until you've got all 3 OS's installed and get a nice clean GRUB menu when you boot. (Or a stupid-looking light-gray-on-bright-green GRUB menu, as the case may be.)

Anyway, after setting up Lion, I set up Boot Camp and tried to install Win8 (on a drive in Bay 3). I got the ol' "Select CD-ROM Boot Type" prompt where everything froze and failed to recognize any input.

I'd dealt with this years ago when I first set up Windows 7; I had to bootstrap my install disc. I decided I would just as soon not fuck with that procedure ever again, so instead of bootstrapping Win8, I used my already-bootstrapped Win7 disc to install Win7 and then upgraded to the Win8 preview from there.

And then I installed OpenSUSE (over the Lion installer partition in bay 1).

The OpenSUSE install DVD gave me the same "Select CD-ROM Boot Type" prompt freeze, so I tried the OpenSUSE KDE LiveCD -- that one worked just fine.

And after I'd installed OpenSUSE, I found that my computer had set itself up to automatically boot straight to the GRUB boot prompt. And, better still -- it had correctly set up Windows and both 32- and 64-bit kernel boots for OSX. Chameleon was totally redundant and unnecessary by this point.

The trouble? GRUB had the same problem Chameleon had: OSX would lock on boot unless I ran it in safe mode.

So that's when I popped out the helper card.

(Don't know what a helper card is? Then you don't need to know about it. But the gist is this: my Mac Pro came with a GeForce 7300GT graphics card. Last year I upgraded to a GTX 570. While current versions of OSX do recognize the GTX 570, the EFI boot firmware does not -- so I needed to leave the 7300GT plugged in to see the boot menu.)

Once I popped the 7300GT, everything worked great -- the GRUB menu came up, and booted any of the 3 OS's without any trouble. Success!


Or at least, success until earlier today when something got fucked up and broke everything and I spent my entire day trying to fix it. Ultimately it appears to have been a weird fluke -- I think my partition table got corrupted somehow, because I found that even a format/reinstall didn't fix the problem; I had to actually repartition (the Chameleon/OpenSUSE drive) to get it working again.

So that sucked. And is the second time in two days I found myself chasing down help pages for the last line of a boot log only to find it had nothing whatsoever to do with the actual problem I was having. What a damn bummer.

The upshot, though, is that I've got a 64-bit kernel working in OSX, which should let me set up the RAIDZ array I wanted to put together for my grandmother's home movies.

And last night I played Mass Effect 2 for an hour or so without getting a BSOD. Could be just a coincidence, but I'm hoping that removing the helper card and booting from GRUB instead of EFI fixed the constant crashes I'd been having before.

Next I'll try it under WINE -- maybe I won't have to reboot to Windows at all anymore.


As for how I feel about Macs, Windows 8, and OpenSUSE...well, those are all ripe topics for another day.

Setting Up MikG on an Evo 4G

As recently noted, I finally joined the twenty-first century and got me a smartphone. It's an HTC Evo 4G, purchased from friend and Brontoforumgoer TA, and I'm rather enjoying it. But it was a bit of a pain to set up, and, as I am wont to do when I find myself banging my head against the wall over a technical problem, I'm inclined to write up a little howto. (My #2 most popular post is the one about filesyncing with Unison. And because I know you'll ask, the #1 post is the one about FF7 mods.)

The first hurdle was that the phone was running Cyanogenmod. (So, first of all, it was already rooted. This is not a rooting guide; my phone was already rooted when I got it.) Now, from all appearances Cyanogenmod is great -- but what TA and I didn't know is that you can't activate your phone with Cyanogenmod on it.

The guy at the Sprint store suggested I unroot the phone and restore it to factory default. As I found out from a helpful thread on XDA Developers, you do not have to unroot your phone to activate it. You do have to flash it with a Sense-based ROM. (Sense, BTW, is HTC's UI.)

I found several recommendations for Sense ROMs, many outdated (and many of those unavailable for download since MegaUpload's been taken down). One that is recent and still available, and which I saw recommendations for all over the place: MikG.

Now, guides to flashing your Android ROM are legion (here's one from Android Authority), and recovery software varies, so the exact menu options may be different from one to the next. But here are the basics:

Download the MikG ROM.

Copy it to your phone's SD card.
I actually found that I couldn't mount my phone as an external drive on any of my computers when it was booted to Cyanogenmod for some reason; fortunately I was able to mount it when I booted to recovery mode -- see next step. Copying the zipfile straight to the sdcard root is probably the easiest way to go -- at any rate, don't unzip it.

Boot to Recovery Mode.
If your phone is already rooted and already has a custom ROM, like mine did, then you've most likely already got a recovery boot enabled. Shut your phone down, then power it back on, holding the Power and Vol- buttons. From here the touchscreen won't work; you'll only have access to the Power button and the Volume rocker. The rocker moves the cursor up and down, and the power button operates like the Enter key.

Back up your shit.
There should be an option to back up your system. Do this, because you're about to wipe everything out and you're going to want to be able to restore if anything goes wrong.

Wipe userdata, cache, and dalvik cache.
Seriously, this is a necessary step; do not skip it or it will fuck everything else up. Just don't do anything stupid like wipe your SD card in the bargain; you need that.

Flash the ROM from zip. That'd be the zipfile you copied to the card earlier.

Troubleshooting: Kubuntu lies. I just couldn't get the thing to flash; I kept getting errors. I found that the zip's checksum on the SD card didn't match the one on my computer, I copied and tried over and over again and even reformatted the card -- long story short, don't trust Kubuntu when it says the file has finished copying or when it says it's safe to remove the device. I don't think it's a KDE problem per se since I had the same problem using Nautilus, but at any rate -- start the filecopy and then go do something else for a little bit; give it more than ample time to copy. Just in case. I did the same thing with the unmount -- after I'd let enough time pass that I was sure the file had copied, I clicked Unmount and then waited awhile just to make sure that had happened cleanly. Patient waiting and the file finally copied correctly; MikG installed and was running.

But I still had to actually activate the thing.

Rather than take another trip to the local Sprint store (which would likely have been easier and taken less time, in hindsight), I did it through the Sprint website.

The first bit's easy enough: assuming you've already got a Sprint phone, you just deactivate that and tell them to move your number over to the new phone. You'll need to enter a serial (which you have to remove the battery from your Evo to get at), and they'll send you an E-Mail.

Follow the instructions in the E-Mail, not the ones on the website. They are not the same and the ones on the website are incomplete.

The E-Mail looks something like this (I've redacted my personal information):

You may need to enter the following information in your new phone to complete the activation process:
6-digit programming code: [...]
MDN (Phone number): [...]
MSID (IMSI): [...]

If you are programming a used phone, look in the manual programming instructions for your steps. If you don't find the instructions to program a used phone, follow the steps below to clear or reset your phone to its factory settings. Important note: This will remove all personal information, including texts, pictures, contacts, applications, etc.

To program a used phone:

  1. On the dial pad, press ##786 followed by an additional # symbol
  2. Follow any on-screen prompts to Reset your phone
  3. Enter the 6-digit code
  4. Select Reset
  5. Confirm any on-screen Reset to default messages
  6. After the reset, press ## followed by the 6-digit code, followed by an additional # symbol (Example: ##123456#) Note: The last # entered will not show on the display

It's easy enough when you do it like that; my problem was that I followed the guide on the website. Which didn't quite work right.

Anyhow, hopefully I've saved somebody somewhere some trouble -- maybe it'll be my new #2 most popular post.


So far I've stuck with MikG, for a couple reasons. One is that Sprint's data plan is ridiculously overpriced and I'm tempted to jump ship to Virgin Mobile or some other Sprint reseller -- and it'd be nice to still have a Sense ROM on there so I can activate.

But another is that I'm really kinda digging the design of Sense. It's fast, it's straightforward, most of the built-in widgets are actually useful and the ones that aren't are easy to remove, and if you had asked me if someone would be able to convincingly pull off a smooth, intuitive seven-workspace layout on a damn phone screen I would have told you you were out of your mind -- but damned if they didn't do exactly that.

I'm a tinkerer by nature, so I may not stick with it. Maybe I'll switch back to Cyanogenmod. Maybe I'll fuck around and install Ice Cream Sandwich or Jelly Bean -- I'm not really that concerned about watching Netflix on my phone or using the front-facing camera, and Sprint doesn't even have 4G in my state.

Food for thought, anyhow.

Final Fantasy 7 PC Mods

I'm not altogether sure when I first stumbled across the Final Fantasy 7 modding community. It's not surprising that it exists -- it is, after all, a popular game with a huge fan following -- but it is perhaps surprising that there are some really high-quality improvements to the game out there. High enough that I got the itch to replay the game for the first time in about a decade.

I'll talk about the experience of replaying it at 28 later. (tl;dr: it's not as good as 15-year-old Thad thought, but it's better than 18-year-old Thad thought.) For now, I'll stick with the technical.

Now, there are advantages to simply emulating the PlayStation version -- the ability to save anywhere is a biggie, and emulator-level texture smoothing is nice too. But I decided to go with the PC version because, again, it's the mods that drew me in. The major hub of mod development is the qhimm forums. And here are a few I've been using, ranked in order of importance.

The Essential

First, you'll need to get the game. Try eBay.

Then, you'll need to patch it to version 1.02.

And there's one mod that is absolutely necessary to get Final Fantasy 7 PC to run at all on a post-Win98 computer: Aali's Custom Graphics Driver. At the time of this writing it's at version 0.7.10b, but it's under active development. Make sure you jump to the end of the thread and grab the latest version; the link in the first post is version 0.1a from March 2009.

Setting it up is a simple process and described in the post that links it. You need to run both ff7config.exe and ff7.exe with full Administrator privileges, and I found that the graphics looked washed-out until I set compress_textures = no in the ff7_opengl.cfg file. It's probably a good idea to go through the troubleshooting thread if you have any other issues with it.

The Pretty Great

FMV Updates -- the PC versions of the FMV cutscenes look, inexplicably, even worse than the PlayStation versions. Modder DLPB has taken the PS1 versions and given them frame-by-frame upscaling and cleanup. The end result is, as he put it, a polished turd -- it's still kind of a mess but it's a damn sight better than what you get out of the box. Keep in mind that, after installing, you'll need to edit the videopath setting in your Windows registry.

Avalanche's Graphical Overhaul: Gorgeous but not quite finished.Team Avalanche's Graphical Overhaul (the thread links the GUI Update as well, but I'll get to that a little lower down). Many of the models in FF7 -- such as the characters, monsters, and treasure chests -- are untextured polygons. That means they upscale without loss of quality, and actually hold up pretty well even though they're not as smooth as what we're used to in this day and age. The polygons with 2D textures on top of them, on the other hand -- like, say, the world map -- look quite a lot the worse for wear upscaled to a modern resolution. The Avalanche World Map Patch adds hi-res textures, in both 720p-and-down and 1080p-and-up flavors, and it looks goddamn gorgeous. It's currently an 0.9, which means it's not quite there yet -- now and again you'll see a low-res stripe on a hi-res mountain, as in the image to your right -- but it's close, and it's well worth installing in its mostly-complete state. (YMMV on which components you want to install -- I don't use the alternate avatars or the replacement Barrett model.)

FF7Music: Okay, so the FF7 soundtrack sounds not-very-good coming out of Windows's default MIDI sequencer. It's bundled with its own Yamaha sequencer, but it's incompatible with modern versions of Windows. It's possible -- and perhaps more elegant -- to tweak your soundfont with Timidity, but FF7Music gives you the flexibility to set whatever tracks you want. The installer I linked includes the PS1 version of the music, and also a resequenced version by a guy going by the handle finalfantim -- it's not a remix as it's the exact same MIDI tracks, but he's resequenced them using high-quality instruments and, while it's a matter of taste, I find that they sound better in nearly all cases. (Except the guitar on his version of the Cosmo Canyon theme; I don't care for that and use the PS1 version.) Of course, there's also the option of customizing it with music of your choice -- I've always hated the FF7 version of the Victory Fanfare, so I've swapped it out for a nice Minibosses version instead. And if you want to edit music files so they loop properly, there's a tutorial for that, too.

(The biggest drawback for me? While the thread says FF7Music works in Wine, I've found it doesn't work very well on my system -- it'll play a track or two, the opening, maybe the overworld theme when I load my game, but it stops after a few track changes. So if I want to enjoy the benefits of FF7Music, I have to reboot to Windows proper. YMMV, though; if you want to try using it under Wine, maybe you'll have better luck than I did.)

(I should add, though, that in my experience every single other mod I list here works great under Wine.)

Haven't Decided What I Think of These Yet

Team Avalanche's GUI Overhaul -- I linked this same thread up above to praise the Graphical Overhaul, but the GUI update is a separate mod. And as the header implies, I'm not sure if I like it or not. It's added a font that looks more like the one in the PS1 version of the game, but I'm not sure it looks as good as the default Windows font; there are some spacing issues I don't care for. And it actually supercedes some of the additions in the Graphical Overhaul -- for example, the GO includes a rather nice set of color item icons by a guy named romeo14, but the custom GUI will ignore them in favor of its own grayscale versions. And while it works fine on one of the two computers I installed it on, it somehow managed to hose my installation on the other, leaving it so that the game crashes as soon as I load a menu -- and it must have overwritten a setting somewhere, because it happens even if I disable the mod.

Project Blackfan -- Okay, so we've covered overworld graphics. This is a huge attempt to replace all the field graphics. Modder yarLson is extracting every single background image and running it through a Photoshop filter. The result -- well, the biggest problem is that they're all PNGs because that's the only format Aali's driver supports; highest-quality JPEGs would have looked just as good and taken up a fraction of the space. As for how they look, that's a matter of personal perspective; all graphics filters inevitably come down to whether you prefer your upscaled lo-res images to be pixellated or blurry. These are blurry. For my money, they work absolutely wonderfully on natural environments that look like photographs (like the rocky areas in the North Crater) but aren't as good on the technological sets (like the Highwind). It's worth checking out to see what you think; since the files sit in the mods\[modpath]\field directory, they're trivial to remove if you don't like them.

Millenia's custom weapons for Cloud -- from what I've seen these look great; however, the new swords appear to have finally shattered my Cloud's fragile psyche and convinced him to join Cobra.

Image: Cloud's messed-up jaw

Keep an Eye on These

Retranslation -- this could go either way. It's sure to be more competent than the game's official translation, but it's too early to tell whether it will be any fun. Fan translations of Final Fantasy 4 and 5 back in the 1990's were fun and vastly superior to Square's initial attempts at English scripts for those games, but the fan translation of 6 met a more lukewarm reception; I'm part of the group that thinks it sucks all the charm out of Woolsey's (admittedly compromised) version. Now, this 7 fan translation could end up like 4 and 5, or it could end up like 6 -- and given that the focus seems to be on debating whether the Turks should be named Reno and Elena or Leno and Yrena, I'm sadly inclined to fear the latter. But hey, at least they know how to spell mithril.

Menu overhaul -- this is actually included in the Retranslation mod, so don't install both. (Actually, at the time of this writing neither one of them has a demo available to install at all, but...you know, keep it in mind once they're updated.) At any rate, it changes the menu font and alignment, apparently to something more closely resembling Final Fantasy 9's version. It was initially designed to accommodate the longer names of items, spells, and summons in the retranslation, but I foresee it improving aesthetics and possibly even gameplay for the existing version of the game as well.

FL's Battle Scene/World Map Enhancement -- I've covered projects to improve the world map and the field maps; this one is for the battle scenes. (And also the 2D bits of the world map, like the skyline with Meteor, though I couldn't get that bit to work -- maybe it's incompatible with Team Avalanche's world map version?) It's still early days, but it's looking good.

Project Bombing Mission -- Team Avalanche's project to replace all graphics -- battle and field, background and character -- in the opening section of the game.

Q-Gears -- an attempt to rewrite the FF7 engine from scratch. It's the equivalent of Exult, the open-source engine for Ultima 7; it would use the FF7 resource files but would provide its own executable. If this project is finished, it has potentially huge ramifications; it would mean multiplatform support for FF7 and, potentially, other PS1-era Square games like 8, 9, and Xenogears. It could make all of them easier to mod, as well as open up opportunities for people to develop their own games based on the engine.

Haven't Tried

Kranmer's Trainer -- I griped earlier about FF7 PC's lack of save-anywhere functionality. Well, nobody's grafted save states onto the thing, but this trainer purports to do the next best thing: enables the "Save" and "PHS" options any time you open the menu. I say "purports" because AVG flags the binary as a Trojan and refuses to run it, so I haven't actually tried it; I believe it's a false positive but fair warning, use it at your own risk.

AnyCD -- purportedly this removes the need to change discs/mounted disc images. It's not a nodisc crack, as you'll still need at least one game disc (or image) to play, but if it works that's two disc images you don't need to store on your hard drive. Three if you include the installation CD.

Zerox's Tifa model -- I haven't tried any replacement character models because it would be distracting to have a detailed character standing in-between two PS1-vintage ones; maybe I'll replay the game when there are high-detail models for every character. But this one looks good from the screenshots!

Not Actually a Mod

Can't really think of a better place to put this. While FF7 PC has joystick support, I couldn't get it to recognize my Rumblepad 2. I rigged up keyboard emulation using Logitech's Gaming Software. I mapped the buttons to the appropriate keys to match the PS1 button config, and additionally set up the left stick for movement and the right stick for camera rotation. (I also set it up so pushing in the left stick works as a second Run button, but it doesn't work very well.) You can import my settings or, if you don't have a Logitech controller or just don't like my settings for some reason, try rolling your own using finalfantasy7pc.com's game controls page as reference. (If you are using Logitech's Gaming Software, remember to check the inexplicably-named "FPS Style Movement" box or diagonals won't work on the D-pad. Because FPS, apparently, is the only genre where you hit two directional buttons to make a diagonal.)

Not My Cuppa

APZ Cloud -- this one's been pulled from the qhimm forums since the designer swiped the textures from somewhere else; he's working on a new version now. The existing APZ Cloud is a popular mod but I don't really like the look of it -- but YMMV. I preferred his Kingdom Hearts model, but he never released it for download; the qhimm forums have a strict policy against ripping models from other games.

Phoenix Rejuvenation Project -- an incredibly ambitious project to replace every single "chibi" field character with a more detailed, more realistically-proportioned version. I have a great deal of respect for the talent and work that's gone into the project, but I think it's a bad idea from the get-go; I'm all for more detailed models but the field models should stay chibi. In fact, I intend to devote my entire next post to the subject. Be here.


If you would rather be somewhere else, do feel free to discuss this post and general FF7age over at Brontoforumus.

Also, I finally fixed the horribly outdated worstforumsever.com link at the top of the sidebar. Just in time for my background check!

Unison: File sync from Ubuntu to Windows 7

Hey, been awhile. Have been ignoring the blog (even my traditional New Year's Eve Post) and many of my other Internet habits in favor of various projects I've been hard at work on. I just pulled off a WordPress update; you're reading this so it looks like it went smoothly.

Anyhow. One of the aforementioned projects (and the thing you came here to read, if you found this page by Googling an error message -- and if you did, you may want to skip my meandering explanation and go straight for the numbered steps at the bottom of this post): I recently decided to set up a file sync system across the computers in my house. It's useful for syncing things like savegames, RSS feeds, and the public-domain ebooks I've been grabbing from Project Gutenberg and MobileRead and comics from Digital Comic Museum across multiple devices.

I'd done some command-line RSS before, and also set up backup systems with Toucan, but figured I'd try something different on this one. I gave Ubuntu One a shot and it seemed promising until I realized it isn't open-source and I can't set up my own server. Canonical is swiftly becoming the Apple of the Linux world -- good at taking open-source software and making it pretty and usable, but not so great at giving back to the open-source community.

Ultimately I settled on Unison, which proved to be a bit of a headache -- frankly if anybody has a better solution I'd be happy to hear it, but here's how I got it to work.

First of all, the Unison GUI requires GTK. Hardly a problem on the Linux side, but under Windows, extracting the binaries from gtk.org and setting the PATH variable didn't work, no matter what I did. Maybe it's a Windows 7 thing, or maybe it's a Unison thing, but either way, Unison threw up "This application has failed to start because libgtk-win32-2.0-0.dll was not found. Re-installing the application may fix this problem." every time I ran it. Sticking it directly in the GTK\bin directory worked but is an ugly solution; multiple sites suggested installing Pidgin, which comes with GTK, but produces the same problem as Unison doesn't find it in the path.

(Actually, let me back up a bit: I couldn't get Unison to work with 64-bit GTK at all. The only Unison binaries I could find were 32-bit; I opted to install a 32-bit version of GTK rather than stick Cygwin on my HTPC and compile Unison from source.)

Ultimately, I found a binary Windows installer for GTK (conveniently the first Google match for gtk windows binary installer); whatever my PATH problem was, this installer fixed it. The Unison GUI was up and running, from its own folder.

Next problem, though: SSH. Unison did not play nice with PuTTy.

Googling the problem, I found a page called Unison-ssh, which includes a wrapper named ssh.exe for download. If you've read this far you've probably already installed PuTTy, but in case you haven't, you'll only need it if you want to use public key authentication -- this ssh.exe will automatically install a copy of PuTTy's command-line SSH utility, plink.exe, if it can't find it. (Well, hypothetically. It tries to stick it in WINDIR and if you're not running it with admin privileges it'll fail.)

Now, I should add that this ssh.exe doesn't work properly under Windows 7; it'll prompt you for a username but only let you type one character and then automatically Enter it. Same problem with the password prompt. The comments thread in the page is filled with people who have the same problem. Maybe a clean compile would fix it, I don't know; again, I didn't want to go to the trouble of setting up compilers on my HTPC.

There's a solution a ways down the comments thread. Unison stores its data in the .unison directory, even under Windows. (That'd be \Users\name\.unison under Win7.) They're simple text files with the .prf extension. And you can add an "sshargs" line to give command-line arguments. If you're comfortable sticking your password in plain text, you can add the line "sshargs = -pw [pass]" and you're done. But if you're not, you can set it up with RSA keys. A later comment links a post on Palin's Technical Blog that runs down how to generate a keypair with puttygen -- the problem is, I couldn't get my Linux server to accept it; I kept getting a "Server refused our key" error.

I found the solution on Andre Molnar's blog: you need to generate the keypair on the Linux server, using ssh-keygen, add the public key to your authorized_keys file, then move the private key over to the Windows machine and use puttygen to import it and then save as a PuTTy .ppk file. From there, add "sshargs = -i [path to private key]" to the appropriate .prf file.

Almost done, but the Unison GUI still has path issues, even if you stick ssh.exe in the same directory as PuTTy and add that to your PATH. I got around it by sticking a shortcut on the desktop with the PuTTy directory as the working directory.

In summary:

  1. Install openssh-server on your Linux server and PuTTy on your Windows client.
  2. Install Unison and its dependencies on your Linux server. (It's offered in the Ubuntu repos; command-line is unison, GUI is unison-gtk.)
  3. Install Unison on the Windows client.
  4. If you want to use Unison's GUI, install GTK on Windows.
  5. Download the ssh.exe wrapper for PuTTy. Stick ssh.exe in the same directory as PuTTy and put that directory in your PATH.
  6. Generate an RSA keypair on your Linux server using ssh-keygen. By default it will put the keys in ~/.ssh/id_rsa and id_rsa.pub.
  7. Copy the contents of the public key (id_rsa.pub) to ~/.ssh/authorized_keys. Remember to set perms on ~/.ssh to 700 and authorized_keys to 600.
  8. Move the private key (id_rsa) to the Windows machine. That's move, not copy; delete it from the Linux side as you don't want to store the same private key in more than one place.
  9. Run puttygen.exe. Import your existing private key, then save the result as a new .ppk file. Delete the original key file. Again, only the owner should have read perms on this file.
  10. At a minimum, your \Users\name\.unison\foo.prf file should contain the following:

    root = [Windows path]
    root = ssh://[user]@[host]//[Linux path]
    sshargs = -i [path to private key]

  11. To get the Unison GUI to run ssh.exe properly, create a shortcut and set its working directory to the PuTTy directory.
  12. You can schedule regular syncs using Windows Task Scheduler; run the command-line Unison executable, with args "-batch [name of pref file]". Don't include path or extension, just the filename ("foo" in my example above).

So there you go: a cross-platform syncing solution. Good for backups, for keeping files consistent between your desktop and your laptop, or for anything else that requires keeping the same files on multiple machines.


Playing: Just finished playing a fan translation of Act Raiser. Maybe a bit more on that soon.

Reading: Blood of the Elves. As I await The Witcher 2.

What "Hacker" Means to Me

Recently, I made some comments on the unfortunate change in popular usage of the word "hacker", from a positive term for a skilled programmer, to a negative term for a skilled programmer, to a negative term for someone who can figure out Sarah Palin's zip code.

I like to think of myself as a hacker in the original, positive sense, and I have a story about what that means.

Ten years ago, I upgraded my OS to Windows 98. Unfortunately, during the upgrade my hard drive, which had been compressed using DriveSpace, one of the worst pieces of software ever, was corrupted.

Now, I'll grant I'm a pack rat, but there wasn't much of sentimental value on there. There was, however, the most recent installment of KateStory, Book IX. It turned out Steve had a backup, but it was incomplete.

That gnawed at me for years. I kept the hard drive and never wiped it, and every now and again I'd hook it up and see if I could find a way to recover the data. I could never get it to mount. My instinct was that I shouldn't be working with the physical drive anyway, that I should copy the data from it to an image so I could make additional copies and freely mess with them without worrying about losing the original data. But none of the disk-imaging tools I could find would image a disk that wouldn't mount.

By the summer of 2004, I was familiar enough with Linux to know that dd was the tool I wanted, that it would make a bit-for-bit copy of the data on a device regardless of whether it could make any sense of it. I copied the drive to a file and went to take a look at what I could do with it.

File recovery software pulled up some images and some old E-Mails, but not the ones I wanted. In fact, searching the raw hex, I found the text "Subject: Re: KateStory IX: Third Anni" followed by gibberish; the data literally went from plain text to incomprehensible compressed bytes in the middle of the subject line I was looking for. I abandoned the project for a few months.

As the fall rolled around and the KateStory's tenth anniversary approached, I got to thinking about it again. I looked up information on how to recover DriveSpace volumes, and happened upon Dean Trower's DriveSpace 3 Disaster Recovery Kit. Since it required DriveSpace to run, and since DriveSpace won't run on modern versions of Windows, I set up VMWare on my computer and installed Windows 98 on it. My memory of what I tried then is fuzzy; I'm not sure what I did wrong but I still didn't recover the data.

It seems like I tried a couple more things over the years that followed. I think there was a period where I thought maybe the compression I couldn't get past wasn't DriveSpace's but Netscape's. (In retrospect, I believe Netscape Mail's "compress folders" option didn't actually compress text, it just deleted the text of E-Mails that had been deleted from the mailbox but not removed from the mail files.) I definitely remember at least one occasion where I dumped the entire 545MB hard drive image into a Thunderbird folder -- now, whether or not I qualify as a hacker, I think we can all agree that qualifies as a hack. When it didn't work under Thunderbird, I found old copies of Netscape 3 and 4 and tried it there; that didn't work either.

About a month ago, with KateStory XVII beginning, the anniversary approaching once more, and my going back through Books XIII-XVI to put them on this site, I got the urge to take another crack at IX. I did what I'd done before: set up VMWare, set up Windows 98, and got a copy of the Disaster Recovery Kit.

Without getting into too much detail, a DriveSpace "compressed drive" is actually a single file stored on a physical hard drive, then mounted as a virtual drive. As I said, I couldn't mount the drive. The docs for Trower's program mentioned creating an empty DriveSpace volume and looking at its file header; I got the idea from there to look at the header bytes on a fresh file and see where I could find them in my disk image. I found them -- the beginning of the compressed file -- and deleted everything prior to them on the image. (It bears noting that at this point I had numerous backups of the image and wasn't hacking up my only copy.)

Following the advice in Trower's Readme, I started with the simplest solution: copy the compressed file to a host drive and see if Windows mounts it. He cautioned that it might not work and Windows's attempt to "fix" the corrupted data could hose it; he was right. I was thrilled to see the filenames in the root directory show up, but I couldn't access the data in any of them.

On to step two: I tried using Trower's decmprss program. I tried it several times and discovered that it kept outputting empty files; they were the same size as my image but made up entirely of zeroes.

There was a line in the Readme: "DCMPRESS ought to work under Windows, but nevertheless I recommend running it in MS-DOS mode." All right. I did a Shut Down/Restart in MS-DOS Mode, but Windows 98 and VMWare weren't quite playing nice; any time I did that DOS would run for a minute or two and then freeze up and require a simulated hard reset.

So I went back to Windows, and checked to see why decmprss was outputting empty files. I started by trying it on a new compressed image that I knew didn't contain any corrupt data. I got the same result, proving that it wasn't just a problem reading my corrupt image.

Trower's toolkit included the source code, so I jumped into it to see if I could find out what was wrong. For the first time in years I found myself coding in Pascal -- coincidentally the same language Dr. Wily teaches at Prescott High School in KateStory IX. I didn't do anything particularly clever, just added some traces to see where the problem was occurring. I confirmed that the problem lay not in the Pascal portion of the code, but in the x86 assembler.

All right, I thought, my guess is that Windows 98 doesn't like the direct system calls that the assembler portion of the code is making. So that takes us back to trying to run it under DOS -- and if that doesn't work, the only thing left to try is to learn x86 assembler and pore through the DriveSpace API.

Booting to DOS from Win98 shutdown still didn't work, but it turned out that picking it from the boot menu worked just fine -- once I went into OSX's keyboard settings and disabled F8 for pulling up Spaces so I could use it in VMWare.

That worked, and generated a file that contained KateStory chapters that, I could confirm, were not in the copy I had.

That would be where the rest of Trower's toolkit came in -- reassembling files that had been partially compressed -- but I was confident that KateStory IX had been entirely compressed. So now it was time for my Thunderbird hack.

So I copied the entire, 1GB+ uncompressed image into Thunderbird's mail folders. Success -- Thunderbird correctly parsed out all the files that were E-Mails. I sorted them out, exported the ones that had "KateStory IX" in the sub line, and copied them out of the Win98 VM into my "real" system. From there I went through them all, cut out the stuff that was redundant or off-topic (which was most of it), and lo: today, this fourteenth anniversary of the original KateStory and eleventh anniversary of this installment, I have KateStory IX in its entirety.

So, back to my initial point: what does "hacker" mean to me? Well, eleven years ago my friends and I wrote a goofy story. Ten years ago, I lost it. And over the intervening years, I used my skill and my determination to get it back. (A friend once told me that when I want something I go after it like a pit bull, I don't let go. Comparisons to pit bulls may be the only thing Sarah Palin and I have in common.) I'm not some scary terrorist stealing your credit card or breaking into the Pentagon, I'm a guy who used his skill to recover a lost piece of his childhood.

Of course, I'm sure there are those who will say this doesn't make me a hacker. And maybe they're right. In the final analysis, all I did was use the dd command, set up a virtual machine, install Windows 98, do some very cursory hex editing, boot to DOS, use someone else's recovery tools, and copy a giant file into Thunderbird's mail folders. When all's said and done, I only wrote a few lines of code, and all they wound up doing was confirming what the Readme had already told me. So maybe that's not enough to qualify me as a hacker.

But you know what? If that's not enough to qualify as hacking, then plugging Sarah Palin's zip code into a password hint field sure as shit isn't.

WordPress

You've probably noticed the site looks different.

Or, if you haven't because you're reading this via RSS, you've probably noticed you just got ten duplicate entries in your reader.

That's because I just migrated my backend over to WordPress.

As I alluded in a recent post (and yes, I update so seldom that three months ago qualifies as "recent"), b2evolution reached a point where it made even the simplest tasks a chore. A quick rundown:

  • As noted before, it refused "id" and "name" attributes in <a> tags. In other words, it would not allow me to use anchor tags as anchors.
  • Its error messages were hideous. "Invalid URL" may be useful information in a post that has as many as three links in it, but when you have fifty, it's the coding equivalent of punching me in the gut and then pointing and laughing. And for those of you who have not yet taken a 100-level programming course, it bears noting here that telling me which URL was causing a problem would take maybe twenty characters of additional code.
  • Not only wouldn't it tell me which URL was a problem, it wouldn't tell me why. I had to poke through a gigantic list of blocked URLs before I discovered that b2evolution had for some reason automatically blacklisted all mac.com sites.
  • Okay, this is the best one. You think blocking mac.com is bad? Check this out. In the same post, I linked to a rather lengthy driver URL -- go ahead and mouse over that link and see what I mean -- and b2evolution rejected it.
    See anything wrong with it? No? Neither did I. It took me about an hour to figure out what was happening. Here's the problem:
    The link contains the string "&ProductID". See where I'm going yet? No, you probably don't; even if you know that the HTML code for an ampersand is "&amp;" it probably hasn't hit you what happened there.
    So okay, here's what happened: b2evolution saw the "&Product" in that link, expanded it to "&amp;Product", and then, on a second pass, turned the ;P into a smiley.
    Hang on, it gets better: there is no way to disable smileys in the b2evolution admin control panel; you have to hack the PHP manually.
    Hang on, it gets even better: there actually is a checkbox in the control panel to allow you to disable smileys...and it is grayed out by default. Someone went to the trouble of actually coding up an easy fix...just to make it impossible to use.

In short, b2evolution was like everything my old web host ever gave me: at first, it was a generous gift and gave me an outlet to share my thoughts with the world, but over a period of years it became less and less bearable up until it reached a point where I simply couldn't go about my daily business anymore without it making my life unpleasant.

Actually, catty remarks about Internet drama aside, this is a coincidence -- I started this overhaul several days before Sharkey decided to pull up stakes. However, it's a happy coincidence, and it's nice to see him carve us out an alternative to Crazytown.

Anyway, on to the technical side, for anyone else who has WordPress questions. On the whole, I think WP is better so far. I absolutely despise "smart" quotes, and it parses text inside <code> tags just as poorly as b2evolution, if not even worse, but fortunately I found two plugins called Unfancy Quote and Preserve Code Formatting which take care of those two problems right out the gate.

I think I've done a pretty good job with the new theme, taking the old look and making a few modest changes to it. (I've finally retired that silly-ass old digits.com counter. It is the end of an era.) The CSS is my own, but the PHP code is largely adapted from Sandbox. As such, it's GPL'ed code, so once I'm finished tweaking it I'll put a zip file up just in case anyone wants to eyeball my source.

If there's anyone else trying to migrate old-ass b2evolution (0.9 series) to WordPress, there are a couple different ways to do it. You can convert to Movable Type and import natively (tutorial at Insert Witty Title), which preserves categories but hoses custom slugs, or you can use a conversion PHP script (tutorial at ibrian, though there are a few different versions of the script), which preserves custom slugs but hoses categories. I opted for the latter since it's less of a pain to recreate categories than slugs, but YMMV; if you never used custom slugs and just stuck with the default post titles, I'd say try the former. (There is something in there about how b2evo replaces spaces with underscores and WP replaces them with dashes, but there should be a tool to correct that too.)

Anyway. New blog, new forum. Let me know what you think. Maybe one of these days I'll get up the courage to dust the cobwebs off my Links page.


Playing: Super Mario Galaxy.

Reading: Just finishing Dune.

Triple-Booting a Mac Pro

Updated 2007-10-14. Scroll down to where it says "Update 2007-10-14". I'd put a link here, but for some reason b2evolution will not let me use the "id" or "name" attributes; expect a presumably silly and useless "rant" on that subject very, very soon. (Update 2008-01-17: Switching to WordPress fixed the problem.)


So I got that Mac Pro I was talking about earlier. No, I still can't afford the thing, so if you notice me living a life of indentured servitude for the rest of my days, well...I'm Irish. We're used to it.

The bastard about being on the bleeding edge is that there aren't a whole lot of guides to walk you through your setup. For example, I found quite a number of guides on how to multiboot a MacBook Pro with 3 OS's on different partitions of the same drive, but approximately bupkis on how to do it on a Mac Pro with each OS on its own drive.

So, in case anyone winds up Googling for the same information I couldn't quite find, here's how I finally did it. Hopefully this'll make it easier for you than it was for me.

Installation and booting

I can't say for certain, but I think order of drives and order of installation are both important.

After some trial and error, I wound up laying my drives out like this:

Drive 1 is Kubuntu.
Drive 2 is OSX.
Drive 3 is Windows XP x64.

Leastways, that's how they're set up in hardware. For reasons I'm not altogether clear on, they show up in software as Kubuntu on sda, Windows on sdb, and OSX on sdc. Still more curiously, both the Kubuntu drive and the OSX drive are assigned SCSI ID 0,0,0. (Could be some holdover from the old master/slave days? Maybe the drives are on different controllers? Something to do with MBR vs. GPT? Is it because the Kubuntu drive is physically first but the Mac drive boots first? Don't know.)

Order of installation seems to be important too. I say this because my first time through, I installed Kubuntu, it ran fine, and then I installed Windows and Kubuntu wouldn't boot anymore. I'd click on the Linux icon and it would boot the wrong OS. (Actually, it still does; more on that later.) So, as with most things in life, everything was going great until I installed Windows.

But after a day and a half of banging my head against the wall, I finally got all 3 OS's moving by rearranging the drives (see above) and installing Windows first and then Kubuntu. (OSX, of course, was preinstalled.)

Things to keep in mind: since we're talking 64-bit Windows, the Boot Camp program is useless. You can ignore it. It might be useful for resizing your OSX partition since Windows insists, for no reason whatsoever, on writing system files to the first drive. I say "for no reason whatsoever" because you can move those files -- boot.ini , ntdetect.com , and ntldr -- to the drive Windows is installed on and it'll run just fine. There's more info at x(perts)64; that guide is specifically for dual-booting XP and Vista, but I found it useful anyway.

(Also, "the first drive" noted above is actually the second drive in my case, which caused a good deal of confusion; as I mentioned earlier, both the Kubuntu drive and the Mac drive show up as 0,0,0.)

It's also worth noting that the much-ballyhooed rEFIt doesn't work for me; I have to hold down Option at startup to get a working boot menu.

That menu gives me the following:
rEFIt, Windows, Windows, Windows
because EFI very helpfully assumes anything that's not Mac is Windows.

The first "Windows" is actually Kubuntu. The second gives me "Error loading operating system". I assume that the first "Windows" is the MBR of the drive and the second is the first partition, which is flagged bootable but doesn't have Grub on it.

The third "Windows" is actually Windows.

Now, rEFIt looks similar -- it offers "Boot Mac OS X from Mac", then "Boot Linux from HD", "Boot Legacy OS from HD", "Boot Windows from Partition 1", not always in that order -- but the last three all open the same OS, either Linux or Windows depending on which I booted more recently.

So I'm stuck with holding Option at boot and selecting the left Windows or the right Windows, but at least it works. I'm hoping future versions of rEFIt fix this problem.

Windows

Here's where you can find the necessary 64-bit drivers for Windows:

(Sources: Triple Boot thread on the Apple forums; Airport Driver thread on driverguide.com forums)

Kubuntu

Boot issues aside, this is the single most painless Linux installation I have ever experienced. I know there's no dearth of people singing the praises of Ubuntu and how close it is to being ready for desktop use, but I'm afraid I'm going to have to add my own redundant voice to the chorus. It was almost painless.

I still had to install the nVidia drivers by hand -- either get us some free drivers that work or stop being so damn concerned about ideological purity, guys; I need support for my video card, and this would make life pretty rough for the average user. But by my standards as a Linux vet...I didn't even have to touch xorg.conf. Kubuntu, how I love you.

Setting up wireless was another concern, especially when I read there was no native support for the adapter and I'd have to use ndiswrapper. Let me explain something about ndiswrapper: it was a bastard to install under Gentoo, and is responsible for every single kernel panic I've experienced in the past year and a half.

Under Kubuntu, on the other hand, it was over in minutes. And I don't want to jinx it, but it hasn't panicked my kernel yet.

There's a HowTo at ubuntuforums.org. Steps 1-3 are outdated now; Feisty comes with a current version of ndiswrapper, so you won't need to update it. As for the bcmwl5.inf file, it's the same one in the Dell package I linked above.

To get wireless to work immediately at boot, you'll also need to set your access point up. In Kubuntu, you do go to K → System Settings → Network Settings, click "Administrator Mode", enter your password, click wlan0, then Configure Interface, and enter the ESSID and WEP key. (DHCP and "Activate when computer starts" should already be set.)

I will note that on one of my reboots wireless didn't start up automatically and I had to run iwconfig myself. I think that's most likely due to signal interference in my apartment, but I can't say for sure at this point.

Sound support was the biggest problem I hit. The ALSA driver for Feisty doesn't support the Mac Pro's audio adapter.

After poking around for awhile, I decided that rather than bother with the individual package, I'd just go ahead and upgrade to Gutsy RC. After all, if you've even read this far, I'm guessing you're somebody who's not afraid of the letters "RC"; I'd advise you just to go with Gutsy from the start. (Course, by the time anybody actually reads this guide, I'm betting Gutsy final will be out.)

So far Gutsy's working just fine for me. (Update 2007-10-14: Except that I can't adjust volume from the keyboard. The bar goes between 0 and 11 but doesn't actually make any change in the volume. This appears to be a known bug in Gutsy at the moment.)

I'll edit this post if anything changes or if I find anything else out -- I have a Bluetooth keyboard and Mighty Mouse that I haven't bothered trying to set up in Kubuntu yet; I intended it more for my media center/emulation rig Mac Mini anyway. But if I get that, or anything else set up, I'll make a note of it here.

Hoping this has been a help to somebody. I don't usually do this, but when I find myself running into problems that aren't well-documented, I figure I may as well document them myself in the hopes that I can make life a little easier for the next guy.

Good luck, next guy.


Reading: Cat's Cradle again, the first in my "My favorite recently-deceased science fiction authors" theme. I think A Wrinkle in Time is probably next.


Update 2007-10-14: Accessing the Mac drive from Kubuntu

It's easy enough to mount an HFS+ volume under Linux (FS type is just "hfsplus" in mount or fstab), but accessing your home directory or mounting with write permissions is a little trickier.

To access your home directory on the Mac volume from Kubuntu, your Mac user account and your Linux user account need to have the same UID. There are a number of ways to do this; the easiest involve simply creating a new user, but I changed the UID on my Mac login to 1000 with no real trouble.

Just go into Applications/Utilites and run NetInfo Manager, click Users, then your username, then scroll down to uid and gid and change them both to 1000 (or whatever your UID is under Linux -- 1000 is, of course, the default number for the first user account).

After that, you'll need to log out and back in, pull up a terminal, do a sudo chown -R <username>:<group> /Users/<username>, and then log out and back in again.

My source on all this is the Gentoo wiki (even though I'm using Kubuntu).

That should give you write access to your home directory on the Mac drive from Linux. To get read access, you'll need to disable journaling.

It occurred to me that I'd like to keep journaling enabled in OSX and only disable it when I want to access the data from Kubuntu. I came up with a relatively simple solution: I wrote a script to enable journaling when OSX boots, and added a line to the shutdown script to disable it.

For the startup script, I created a directory called /Library/StartupItems/EnableJournaling containing a filepair called EnableJournaling and StartupParameters.plist, as follows:

StartupParameters.plist

{
Description = "Enable Journaling";
Provides = ("Journaling");
OrderPreference = "Late";
}

EnableJournaling

#!/bin/sh

. /etc/rc.common

# Enables journaling on Mac volume

ConsoleMessage "Enabling journaling on /Volumes/Mac"
diskutil enableJournal /Volumes/Mac
exit 0

(Don't forget to make this file executable.)

(Source: Greg Neagle's blog)

And I modified /etc/rc.shutdown to the following:

#!/bin/sh
# Copyright 1997-2004 Apple Computer, Inc.

. /etc/rc.common

if [ -f /etc/rc.shutdown.local ]; then
sh /etc/rc.shutdown.local
fi

SystemStarter stop

# ADD THIS LINE:
diskutil disableJournal /Volumes/Mac

kill -TERM 1

exit 0

Seems to work all right; I get journaling when I'm running OSX, and I get write access when I'm running Kubuntu. (Update 2007-11-05: It appears rc.shutdown is gone in Leopard. I'll update when I learn more.)

The bad news is that it doesn't work both ways. At present I have Kubuntu installed on a ReiserFS volume, which is unsupported by OSX. I could have made it an ext3 FS instead and installed the ext2 driver for OSX, but, well, if I wanted compatibility over performance, I probably wouldn't have gotten a Mac Pro.

Thad's Tech Tips

Hello, random Googler. This one is for you.

Today's post is about some issues I've been having at work with an old Web server running Fedora Core 2. For various reasons, I have been attempting to update the packages on this old piece of junk to the latest available versions. (That is, the latest available for FC2; I'm not going to try the Herculean task of updating to 7.) For those of you who are not interested in technical details on server administration, this post is not for you; it is for the random Googler who found this page by searching for some of the keywords in the below explanation. Keywords like 4f2a6fd2, 6cdf2cc1, yum, GPG, and zlib.

The reason that I am posting this is that I have spent several days figuring this shit out for myself, with only minimal aid provided by Google searches; there seems to be no information anywhere detailing this set of problems, and I'd like to make life a little easier for the next poor bastard caught in this situation.

Problem #1 is finding a yum repository. The Fedora Legacy Project has shut down. There are still a goodly number of mirrors operational as of this writing, but my copy of yum rejected a number of them based on errors like the following:

Gathering header information file(s) from server(s)
Server: Fedora Core 2 - via Fedora Legacy Project
retrygrab() failed for:
http://[...]/fedora/2/os/i386/headers/header.info
Executing failover method
failover: out of servers to try
Error getting file http://[...]/fedora/2/os/i386/headers/header.info
[Errno 4] IOError: HTTP Error 404: Not Found


A couple of URLs I've found that do have the header.info file are:

http://www.blagblagblag.org/pub/mirrors/fedoralegacy/fedora/$releasever/updates/$basearch/
http://fedoralegacy.mirrors.redwire.net/fedora/$releasever/updates/$basearch/

and the latter, conveniently, is even the top option in the default /etc/yum.conf . So just comment out the Main Fedora Updates section and uncomment the pertinent lines under Fedora Legacy Project.

(Aside gripe: b2evo apparently automatically turns URLs into links, even if they are obviously bullshit URLs. Update 2008-01-17: Switching to WordPress took care of this problem.)

Then comes my next problem:

warning: rpmts_HdrFromFdno: V3 DSA signature: NOKEY, key ID 4f2a6fd2
Error: Could not find the GPG Key necessary to validate pkg /var/cache/yum/updates-released/packages/pango-1.4.1-1.i386.rpm
Error: You may want to run yum clean or remove the file:
/var/cache/yum/updates-released/packages/pango-1.4.1-1.i386.rpm
Error: You may also check that you have the correct GPG keys installed


It turns out that key is actually located on the default install. Just do:

rpm --import /usr/share/doc/fedora-release-2/RPM-GPG-KEY-fedora

You'll probably also want to import http://www.fedoralegacy.org/FEDORA-LEGACY-GPG-KEY.

You'd think that would be the end of my GPG problems. But you'd be wrong.

warning: rpmts_HdrFromFdno: V3 DSA signature: NOKEY, key ID 6cdf2cc1
Error: Could not find the GPG Key necessary to validate pkg /var/cache/yum/crash-hat/packages/zlib-1.2.2.2-0.i386.rpm
Error: You may want to run yum clean or remove the file:
/var/cache/yum/crash-hat/packages/zlib-1.2.2.2-0.i386.rpm
Error: You may also check that you have the correct GPG keys installed


Now this one turned out to be a bit tricky. All my Google searches for "6cdf2cc1" turned up people trying to install a certain open-source anti-virus program (I'm omitting its name because if you're like me, you'll see page after page of results mentioning that program and then attempt a Google search which removes that search term). Very few mentioned zlib, and none told me where I could find the appropriate GPG key.

After some further banging my head against the wall, it occurred to me to ask myself what set zlib apart from all the other packages, since they hadn't given me any errors.

As it turns out, zlib was the only package hanging out in the /var/cache/yum/crash-hat/packages directory. It was, in fact, from a different repository, not the Fedora Legacy repos listed above.

So I Googled crash-hat and the very first match was titled CrashHat YUM Repository. It linked the appropriate GPG-KEY and that was all I needed; at last I could update my server. Now it is merely ancient, not decrepit.

With any luck, this may help fix some of the other issues the server's been having. Perhaps more on those at a later date.