[Nexus 7 General] phonic:
Ok, so there seems to be some issues with installing the recent 4.2.1 OTA update with custom recoveries (ie: CWM or TWRP). I ran into this issue myself, and I've seen many other posts with similar problems. I've found the solution and explained it in multiple threads, but due to the nature of the issue, I thought it deserved it's own thread to make sure everyone is aware of the problem and the workaround.

Details:

The 4.2.1 OTA update comes in two flavors - nakasi and nakasig. The former is for WiFi devices (8, 16, 32), and the latter is for 3G devices. In turn, they each have their own device types - grouper and talapia, respectively. While the hardware differences between the WiFi and 3G models is negligible, and most things are interchangeable (ie: kernels, recoveries, etc.), the updates are NOT, and you need to pick the correct one for your platform. For the 3G models, this means the 'nakasig' version.

However, the first thing the OTA update does is validate the integrity of the system. In addition to checking about 200 files in the /system partition, it also looks at the device itself. Specifically:

assert(file_getprop("/system/build.prop", "ro.build.fingerprint") == "google/nakasig/tilapia:4.2/JOP40C/527662:user/release-keys" ||

file_getprop("/system/build.prop", "ro.build.fingerprint") == "google/nakasig/tilapia:4.2.1/JOP40D/533553:user/release-keys");

assert(getprop("ro.product.device") == "talapia" ||

getprop("ro.build.product") == "talapia");

While the first part checks the build.prop file to see what the "ro.build.fingerprint" has defined, the latter (bolded) assert examines what the RECOVERY says the system is. This is where the problem lies. AFAIK, there are no 'talipia' versions of CWM or TWRP. All 3G users running custom recoveries are using the 'grouper' (ie: Wi-Fi only) version. And this is fine 99% of the time. But this is the 1% of the time when they are not compatible. As a result, when the updater script checks recovery, and is told that the system is 'grouper', it aborts the update.

I ran into this issue on both the latest versions of TWRP and CWM. I wasn't sure why, since I thought it just looked at build.prop which was OK. After speaking with oldblue910, he explained that it is getting that information not from build.prop, but from the custom recovery, which is why the update was failing (thanks to oldblue910 for the info!).

SO, I was left with one of two options. I could either restore the stock talipia recovery or modify the update zip to ignore this information. I chose the latter. I'm not sure why Google decided to even but this redundant check in place, since the build.prop fingerprint check should suffice to validate the hardware. Not to mention that the next part of the update is to assert check the majority of files in 'system' anyway, which would fail if it wasn't a 3G device. In any case, by removing the above bolded lines out of the updater-script, my tablet was able to be successfully updated to 4.2.1.

Since many other XDA users run custom recoveries, it is safe to say many other users will run into this issue as well. So I put my custom update online for anyone else to use.

You can download it here:

http://core.routed.com/CUSTOM_RECOVERY-65880f56b1c0.signed-nakasig-JOP40D-from-JOP40C.65880f56.zip

MD5SUM: b0adff6a04ca2ca6234a9678476d329e

A couple notes:

1) This update zip is completely identical to the Google version, outside of the talipia check removed.

2) This update should ONLY BE USED ON 3G NEXUS 7 MODELS. It will NOT work on Wi-Fi only versions.

3) All the other asserts are left in-tact, as they should be. So your 'system' needs to be mostly stock. It checks and patches about 200 files, and if any of them are modified, removed, frozen, etc., the update will fail.

4) The OTA update does NOT check or update the bootloader or kernel, so modifications or non-4.2-stock versions in those areas are fine. However, as stated in #3, mostly everything else should be stock.

5) If the update fails on a specific assert, it will explain what the problem is (ie: the specific apk or odex file). You will need to fix that before proceeding. If you run into an issue and require assistance, you will need to explain the exact error message.

6) As this is almost completely stock OTA update, you WILL lose root/custom recovery unless you take precautions to prevent them from being overwritten. To preserve root, you can use RootKeeper or a similar app to back it up. The latest version of CWM also will warn you if root is lost and apparently restore it for you. For the recovery side of things, the update puts that recovery-recovery file on the system. You can either manually remove it via adb shell (BEFORE REBOOTING AFTER THE UPDATE), or in CWM (and possibly TWRP's case), it should warn you that you might lose custom recovery after the update and ask if you want it to fix it for you (say yes).

Hopefully this helps others who ran into the same error as me. Enjoy!