Or so I thought. RHEL (Red Hat Enterprise Linux) 6 still uses the "GRUB legacy" bootloader (RHEL 7, in beta, finally makes the leap to GRUB2.) But the example of how to specify a secondary password-protected boot menu just wasn't working.
password PASSWORD /boot/grub/menu-admin.lst
My problem was that /boot was its own partition and the config specified a root parameter that rendered all filepaths relative to /boot, so I needed /grub/menu-admin.lst instead. The documentation isn't actually wrong, but it could stand to lean on this point a lot more heavily: putting /boot on its own partition has been the norm for a long time.
Googling around, I found page after page of "How to configure grub" articles including the example from the manual, and not a damn one of them mentioned this point. Not even when the rest of their example configurations did the same thing as mine and would have had the some problem, i.e., not a damn one of the authors had actually tried it. They were just regurgitating documentation to puff up their article count.
Here's my pledge of quality: I don't give a damn about my article count.
]]>And I was indulgent, getting an i5 quad-core CPU and a fast SSD.
But then tragedy struck. After taking my old machine apart and installing it into the case for her machine, it didn't work. Not wanting to let her suffer for my computer-building ways, she then got the spiffy new hardware and I went without.
Her machine had been running Ubuntu 12.04 with an XFCE desktop; for the new one, I gave her Mint 16 Cinammon. Getting the relevant bits of the old environment back was fairly easy. I was disappointed to find I couldn't set up a vertical panel, apparently due to a limitation of Gnome 3. Yay progress. I tried a couple of dock apps, but they were so visually cluttered and noisy and determined to reproduce some of the worst mis-features of the Mac dock that I gave up.
The only thing she's really hated about Mint: Yahoo as the default search engine. But that's easy to fix.
The hardware from my old machine was good enough that I didn't want to give up on it, so I ordered the cheapest motherboard compatible with the CPU and the cheapest CPU compatible with the motherboard so I could figure out what had failed. Then tragedy struck again. I'm used to using New Egg's cheapest shipping, advertised as 4-8 business days, but getting it in 2 or 3 because it's coming from their warehouse in the City of Industry in SoCal. But the motherboard came from New Jersey and actually took 7 business days with two weekends in the middle, so I've been computerless for a while. (I tweeted about this with the #firstworldproblem hashtag…)
Finally, it arrived. I could finally do the testing to find that my old mobo and one stick of memory had gone bad. I suspect my comically oversized heatsink (and concomitantly heavy) put too much flex on the board on its way in or out of the case. Mental note: remove comically oversized heatsinks before removing the board; install them after mounting the board. (This had been an unattractive option due to how hard it was to get to one of the mounting screws, but thanks to my beautiful new precision screwdriver with a 6" shaft, it's not a problem anymore. And it's a much better tool for the motherboard mounting screws than all my old screwdrivers and I wish I'd had it years ago.) I don't have an explanation for the memory stick.
I took apart Malasada's new machine again, and put it back together with the newly arrived replacement CPU and motherboard but with the same drive. And finally I could assemble the new machine as I'd originally intended.
And, oh, is it conspicously fast. I'm running the current Debian Stable (Wheezy); my setup hasn't changed a lot. Maybe I'll start mining some digital currency just to give all those cores something to do.
Building quiet computers doesn't even offer a challenge anymore. Malasada's is dead quiet – the power draw is so low and the power supply so efficient that the power supply's fan doesn't even go on. I'm not loving the noise from the fan that came with my new comically oversized heatsink, but I think that's due to it being clipped to the heatsink without any padding. I'm going to try some thin foam at the corners, or just going without a heatsink fan and using a case fan. Maybe I'll even use the 200mm fan in my comically oversized case.
Plenty more excitement to come: this whole process has left me with some parts left over. Which means… more computer building!
So that's part of why the blog has been silent.
]]>But I never bothered becoming anything like an expert user of the phone. Calls, texting, occasional web-surfing, alarm clock… that's about it. I knew there were hackers out there rooting their phones and making custom ROMs and doing other interesting things, but I never cared enough to look into it.
But in recent months my wife and I have both been having problems with our phones running out of storage, and we were struggling to flush enough data to keep them functional. And one of the biggest culprits was the crapware the phone came with, like Twidroyd, a Twitter app that hasn't even worked for a long while. For your convenience, these couldn't be uninstalled or shifted to the SD card. A few months ago, I consulted my AskMe peeps about what to do about it, and the clear consensus was that the first step was rooting it.
This weekend I finally bit the bullet and figured it out. It reminded me a lot of modchipping and installing an alternative OS on my Xbox, to no surprise… in general, it's not difficult to do when you figure out what to do. But it's a pain in the ass to be sure what that is, when every guide and piece of software involved is a moving target maintained by hobbyists and they get out of sync with each other more often than not.
Anyway, this is what I did, following this guide and a number of other things. My phone was old, so I didn't have to worry about the exceptions noted for ZV9 ROMs.
Rooting itself was surprisingly easy. Install OI File Manager or anything else that lets you install packages from your SD card. Download GingerBreak APK 1.2. Put it on your SD card. Enable USB debugging under Settings > Applications > Development. Use the file manager to install GingerBreak and run it. After running, it'll reboot your phone. And that's it – your phone is now rooted and you'll be able to permit applications to do things you couldn't before.
I could have installed Link2SD at this point, which would have let me move the previously unmovable things to the SD card and solved my storage issues, but I decided to go ahead with replacing the ROM.
First I installed Titanium Backup, which requires a rooted phone. It lets you backup all your apps and data to the SD card, which I did.
Next I had to replace the recovery image, which is what your phone runs when booted into recovery mode. There's more than one choice here, but I used ZenGarden Touch for VM670. I put the .img file on my phone's SD card, along with the free version of Flash Image GUI and the files I'd need later, the zipfiles for the 2013-07-13 build of Mirage, a derivative of the CyanogenMod replacement ROM, and the 2011-08-28 build of Google Apps. There were other replacement ROMs I could have chosen, but cursory research suggested it was a good choice for my old phone and that going for Android versions more recent than 2.3.7 could be problematic.
Using OI File Manager again to install Flash Image GUI, I used it to write the ZenGarden recovery image to the phone. Then I powered off the phone and had to hold down the home key, the volume down key, and the power switch until the LG logo appeared and disappeared. Then it booted into ZenGarden.
First thing was to create a "nandroid backup" of my existing ROM, under "Backup & Restore > Nandroid Backup". Between that and the Titanium Backup above, it ought to be the case that I could revert to where I was before attempting to install the ROM.
Then I picked "Wipe/Format > Prepare for New Install", which cleans up where the ROM will be written. Finally, I did "Install Package > Install with Gapps" and chose the Mirage zipfile. And after a reboot, I was in something like a new phone.
I manually replaced some of the basic configuration, like turning off the GPS by default, and adding my home wifi password. I installed Titanium Backup again to restore my contacts, but I found there were a lot of problems with restoring things from the old phone to the new one, especially with directly re-installing the old applications from the backup. After trying to replace my old Swype and having it crash constantly, I ended up starting over from scratch (not that hard – I only had to boot back into the ZenGarden recovery image and repeat the steps of the previous paragraph). Easiest thing is to just sync all your data elsewhere, re-install the apps, and sync it back.
So now, with a few apps installed, I have 243M free. With the original ROM and crapware, I started with only 160M free. And I've got some neat new features like tethering my phone so I can connect my laptop to my phone by wifi and my phone to the net by 3G and have net access from my laptop wherever I have 3G. And with the custom ROM, it starts out rooted, so there are all the possibilities that offers.
I suspect I just got several years' more life out of my phone.
]]>perl -ne 'while (/href="(.*?sienkiewicz.*?\.jpg)"/g) { print "$1\n"}' dune.html|xargs wget
Blogspot's doing something a little peculiar though – those look like links directly to jpegs, but they're really returning html pages that have img tags requesting the actual jpeg. So…
perl -ne '/src="(.*?sienkiewicz.*?jpg)"/ && print "$1\n"' *sienkiewicz*jpg|xargs wget
wget automatically appended .1 to these jpegs because they would have had the same filenames as the html pages.
rm *sienkiewicz*jpg rename 's/\jpg\.1$/jpg/' *sienkiewicz*jpg.1
After the fact, I realized I could have just changed the s1600-h's in the original html page to s1600 – oh well.
Easiest way to read the result is to zip it into a cbz file.
zip -r dune.cbz *sienkiewicz*jpg
Installed a cbz reader and checked it out. Oops. Page 1 is screwed up – it was still the html.
rm *001.jpg dune.cbz wget http://3.bp.blogspot.com/_Rf9S3GkkeyI/SU4jMy6nGQI/AAAAAAAAIqM/JdvMxNup3_0/s1600/bill+sienkiewicz+and+ralph+macchio.+dune.+page.+001.jpg zip -r dune.cbz *sienkiewicz*jpg
Done. Hey, Steranko's Outland is even easier.
wget http://www.forcesofgeek.com/2013/06/read-jim-sterankos-outland-adaptation.html fgrep s1600 read-jim-sterankos-outland-adaptation.html|perl -ne 'while (/href="(.*?\.jpg)"/g) { print "$1\n" }'|xargs wget zip -r outland.cbz IMG*jpg]]>
Human-readable size, last modified time in ISO 8601 format, directories first, but otherwise sorted with most recently modified last, with suffixed symbols indicating directories, executables, etc., and without the initial total blocks line.
]]>