JS

2013년 9월 27일 금요일

넥서스 7 (2013) OTA 실패

넥서스 7 (2013)을 루팅 등을 하지 않고 순정 상태로 사용 중이었다. 그런데 시스템 업데이트 과정에서 오류가 발생하였다. 처음에는 일시적인 오류라고 착각을 했는데, 같은 오류가 두세번 반복되고 난 후, 내 넥서스 7에 문제가 있다는 것을 알게 되었다. 오류가 발생한 화면에서 volume up key + power key를 누르면 recovery mode가 나오면서 어디서 오류가 발생했는지도 볼 수 있다. 에러 메시지는 다음과 같았다.

Finding update package...
Opening update package...
Verifying update package...
Installing update...
Verifying current system...
assert failed: apply_patch_check("/system/framework/framework-res.apk", "d6ff2a1767bec4e906ee8498fc852d74c16e328d", "b92dd7bde4e18298ee24053ba36436f4f03fcb79")
E:Error in /cache/58a0583c950458ab96dc1fc29b020c6782493c3b.signed-razor-JSS15R-from-JSS15Q.58a0583c.zip
(Status 7)
Installation aborted.

정상적인 방법으로 OTA를 시도한 경우에도 실패했고, adb sideload를 이용한 방법도 실패했다. 공장 초기화를 한 후 다시 시스템 업데이트를 시도한 경우에도 실패했다. 모든 경우에 위와 같은 assert failed 메시지가 나타났다.

* 루팅을 시도하지도 않았고, 커스톰 롬을 설치하지도 않았다.

* 설정의 메뉴에서 공장 초기화를 해도 문제는 해결되지 않았다.

* 리커버리 모드에서 공장 초기화를 해도 문제는 해결되지 않았다.

* 위 메시지에서 assert failed에 해당하는 부분은 OTA update 파일에서 META-INF/com/google/android/update-script의 line #196에 해당하는 내용이다.

* 루팅은 하지 않았고, 시스템 파티션에 read-only로 접근 가능하다. adb pull /system/framework/framework-res.apk로 JSS15Q 상태의 기기에서 framework-res.apk를 추출한 후 sha1sum을 해보니 결과는 b92dd7bd... 이였다.

* Factory image의 압축을 해제한 후 apk의 파일을 추출할 수 있다 (참고1, 참고2). 요약하면 sgs2toext4.jar을 이용하여 .img 파일을 .ext4.img 파일로 바꿀 수 있고, 그 파일은 DiskInternals Linux Reader에서 읽을 수 있다. 이렇게 해서 framework-res.apk를 추출했고, 그 파일의 sha1sum은 b92dd7bd... 이였다.

* 그리고 d6ff2a17...은 업데이트 적용 후의 sha1sum인 것 같다.

* OTA 파일에서 patch/system/framework/framework-res.apk.p가 바이너리 패치 파일인 것 같다.

* apply_patch_check가 정확히 무슨 일을 하는지 모르겠다. 내 시스템에서 framework-res.apk의 sha1sum은 분명히 문제가 없다. 그리고 OTA 파일도 아마 문제가 없을 것이다. 정상적인 방법(sideload 말고)을 이용했을 때도 같은 에러가 발생했으며, 에러 메시지에서 보이는 파일명(zip 파일)은 sideload를 위해 다운 받은 zip 파일의 파일명과 일치하기 때문이다.

댓글 없음:

댓글 쓰기