• recovery 升级'@/cache/recovery/block.map' failed错误问题


    随着android版本升级,升级包越来越大,当升级包无法存储在cache分区的时候,会把升级包下载到data分区,然后从data分区升级,最近从data分区加载升级包升级的时候,遇到了如下错误:

    [    1.945982] Supported API: 3
    [    1.957270] charge_status 1, charged 1, status -2, capacity -9223372036854775808
    [    1.973917] E:Failed to find CPU thermal info in /sys/class/thermal/
    [    1.990514] I:current maximum temperature: -1
    [    2.007184] Finding update package...
    [    2.057199] I:Update location: @/cache/recovery/block.map
    [    2.057251] Opening update package...
    [    2.092148] E:Failed to read /cache/recovery/block.map: No such file or directory
    [    2.107257] E:Map of '@/cache/recovery/block.map' failed
    [    2.140532] E:failed to map file
    [    2.158867] I:current maximum temperature: -1
    [    2.159049] I:@/cache/recovery/block.map
    [    2.159060] I:0
    [    2.159072] I:time_total: 0
    [    2.159079] I:retry: 0
    [    2.159085] I:uncrypt_time: 0
    [    2.159092] I:uncrypt_error: 1
    [    2.159099] I:
    [    2.159108] Installation aborted.
    [    2.223841] I:Saving locale "en-US"

    最直接的错误信息就是:E:Failed to read /cache/recovery/block.map: No such file or directory

    我们根据提示信息,去查询下cache分区,这个block.map文件是否存在。

    busybox mount -t ext4 /dev/block/cache /cache (如果无法挂载,设置selinux权限为 permissive)

    # busybox ls -l /cache/recovery/                                               
    total 104
    __bionic_open_tzdata: couldn't find any tzdata when looking for localtime!
    __bionic_open_tzdata: couldn't find any tzdata when looking for GMT!
    __bionic_open_tzdata: couldn't find any tzdata when looking for posixrules!
    -rw-r--r--    1 root     root            85 Jan  1 00:01 last_install
    -rw-------    1 system   system       61634 Jan  1 00:01 last_kmsg
    -rw-------    1 root     root             5 Jan  1 00:00 last_locale
    -rw-r-----    1 root     root         12160 Jan  1 00:01 last_log
    -rw-------    1 system   system       12160 Jan  1 00:01 log
    -rw-------    1 system   system          24 Jan  1  1970 uncrypt_file
    -rw-------    1 root     root            33 Jan  1  1970 uncrypt_status

    我们发现,我们需要的/cache/recovery/block.map文件竟然没有,那么肯定是生成block.map的时候出了问题,我们追寻重启进入recovery之前的log信息:

    [ 1212.869820@3] type=1400 audit(1209.144:3355): avc: denied { setattr } for pid=4433 comm="Thread-3" name="uncrypt_file" dev="mmcblk0p3" ino=13 scontext=u:r:system_app:s0 tcontext=u:object_r:cache_recovery_file:s0 tclass=file permissive=0
    [ 1212.885402@3] type=1400 audit(1212.820:3356): avc: denied { getattr } for pid=4501 comm="uncrypt" path="/data/cache" dev="mmcblk0p17" ino=19 scontext=u:r:uncrypt:s0 tcontext=u:object_r:cache_file:s0 tclass=dir permissive=0
    [ 1212.906032@2] watchdogd: watchdogd started (interval 10, margin 20)!
    [ 1212.906143@2] watchdogd: Failed to open /dev/watchdog: No such file or directory

    好像是处理/data与/cache分区时候遇到了selinux权限问题。(mmcblk0p3mmcblk0p17对应的分别是cache与data分区)

    我们可能需要为升级的应用赋予相应的selinux权限,但是上面遇到selinux权限就没有继续了,我们需要知道所有需要的selinux权限,那么我们把selinux设置为 permissive 状态,然后再升级一次,我们观察log状态:

    [   98.295965@1] type=1400 audit(84.812:43): avc: denied { open } for pid=2890 comm="HwBinder:2890_1" path="/sys/module/tvin_hdmirx/parameters/en_4k_2_2k" dev="sysfs" ino=6874 scontext=u:r:system_control:s0 tcontext=u:object_r:sysfs_cec:s0 tclass=file permissive=1
    [   98.313718@1] type=1400 audit(98.244:44): avc: denied { remove_name } for pid=4076 comm="Thread-4" name="update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:system_app:s0 tcontext=u:object_r:cache_file:s0 tclass=dir permissive=1
    [   98.333696@1] type=1400 audit(98.244:44): avc: denied { remove_name } for pid=4076 comm="Thread-4" name="update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:system_app:s0 tcontext=u:object_r:cache_file:s0 tclass=dir permissive=1
    [   98.353378@1] type=1400 audit(98.244:45): avc: denied { unlink } for pid=4076 comm="Thread-4" name="update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:system_app:s0 tcontext=u:object_r:cache_file:s0 tclass=file permissive=1
    [   98.373096@1] type=1400 audit(98.244:45): avc: denied { unlink } for pid=4076 comm="Thread-4" name="update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:system_app:s0 tcontext=u:object_r:cache_file:s0 tclass=file permissive=1
    [   98.392458@1] type=1400 audit(98.304:46): avc: denied { read } for pid=4076 comm="Thread-4" path="/data/cache/update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:system_app:s0 tcontext=u:object_r:cache_file:s0 tclass=file permissive=1
    [   98.618368@2] success set parent gpu_p1_composite rate to 500000000
    [   99.302385@1] success set parent gpu_p0_composite rate to 400000000
    [  100.074360@1] success set parent gpu_p1_composite rate to 285714285
    [  101.234329@3] success set parent gpu_p0_composite rate to 125000000
    [  101.344037@0] aml_snd_card_tv aml_snd_tv: I2S playback disable
    [  101.344244@0] aml_snd_card_tv aml_snd_tv: IEC958 playback disable
    [  120.075238@1] type=1400 audit(98.304:46): avc: denied { read } for pid=4076 comm="Thread-4" path="/data/cache/update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:system_app:s0 tcontext=u:object_r:cache_file:s0 tclass=file permissive=1
    [  120.090346@1] type=1400 audit(120.024:47): avc: denied { setattr } for pid=4076 comm="Thread-4" name="uncrypt_file" dev="mmcblk0p3" ino=13 scontext=u:r:system_app:s0 tcontext=u:object_r:cache_recovery_file:s0 tclass=file permissive=1
    [  121.326417@0] success set parent gpu_p1_composite rate to 666666666
    [  121.734307@0] success set parent gpu_p0_composite rate to 500000000
    [  121.897440@1] BT_RADIO going: off
    [  121.897470@1] BCM_BT: going OFF
    [  122.342361@2] success set parent gpu_p1_composite rate to 400000000
    [  123.438484@0] success set parent gpu_p0_composite rate to 285714285
    [  123.556904@1] type=1400 audit(120.024:47): avc: denied { setattr } for pid=4076 comm="Thread-4" name="uncrypt_file" dev="mmcblk0p3" ino=13 scontext=u:r:system_app:s0 tcontext=u:object_r:cache_recovery_file:s0 tclass=file permissive=1
    [  123.572107@1] type=1400 audit(123.508:48): avc: denied { getattr } for pid=4211 comm="uncrypt" path="/data/cache" dev="mmcblk0p17" ino=19 scontext=u:r:uncrypt:s0 tcontext=u:object_r:cache_file:s0 tclass=dir permissive=1
    [  123.591568@1] type=1400 audit(123.508:48): avc: denied { getattr } for pid=4211 comm="uncrypt" path="/data/cache" dev="mmcblk0p17" ino=19 scontext=u:r:uncrypt:s0 tcontext=u:object_r:cache_file:s0 tclass=dir permissive=1
    [  123.610598@1] type=1400 audit(123.508:49): avc: denied { getattr } for pid=4211 comm="uncrypt" path="/data/cache/update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:uncrypt:s0 tcontext=u:object_r:cache_file:s0 tclass=file permissive=1
    [  123.631453@1] type=1400 audit(123.508:49): avc: denied { getattr } for pid=4211 comm="uncrypt" path="/data/cache/update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:uncrypt:s0 tcontext=u:object_r:cache_file:s0 tclass=file permissive=1
    [  123.652217@1] type=1400 audit(123.512:50): avc: denied { read } for pid=4211 comm="uncrypt" name="update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:uncrypt:s0 tcontext=u:object_r:cache_file:s0 tclass=file permissive=1
    [  123.672583@1] type=1400 audit(123.512:50): avc: denied { read } for pid=4211 comm="uncrypt" name="update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:uncrypt:s0 tcontext=u:object_r:cache_file:s0 tclass=file permissive=1
    [  123.689809@1] type=1400 audit(123.512:51): avc: denied { open } for pid=4211 comm="uncrypt" path="/data/cache/update.zip" dev="mmcblk0p17" ino=316 scontext=u:r:uncrypt:s0 tcontext=u:object_r:cache_file:s0 tclass=file permissive=1
    [  124.950389@3] success set parent gpu_p1_composite rate to 125000000

    我们根据提示信息,增加相应的selinux权限:

    diff --git a/common/sepolicy/system_app.te b/common/sepolicy/system_app.te
    index 17e7f4e..3c77d47 100644
    --- a/common/sepolicy/system_app.te
    +++ b/common/sepolicy/system_app.te
    @@ -23,8 +23,8 @@
     #allow system_app unlabeled:file { lock open read write getattr };
     #
     ## /cache_file for dvb app creat update.zip file at /cache  dir
    -allow system_app cache_file:dir { search add_name write };
    -allow system_app cache_file:file { create getattr open write };
    +allow system_app cache_file:dir { search add_name remove_name write };
    +allow system_app cache_file:file { create getattr open write unlink read };
     #
     #allow system_app log_file:dir { search read open getattr };
     #allow system_app log_file:file { read open getattr };
    diff --git a/common/sepolicy/uncrypt.te b/common/sepolicy/uncrypt.te
    new file mode 100644
    index 0000000..578a6d7
    --- /dev/null
    +++ b/common/sepolicy/uncrypt.te
    @@ -0,0 +1,2 @@
    +allow uncrypt cache_file:dir getattr;
    +allow uncrypt cache_file:file { open read getattr };

    然后就可以正常升级了。至于如何通过提示的avc: denied信息增加selinux权限,可以自行学习。

  • 相关阅读:
    dom4j解析xml字符串实例
    使用Dom4j生成xml文件(utf-8编码)
    viewer.js插件简单使用说明
    html标签title属性效果优化
    XML文件读写编码不是UTF-8的问题
    webservice wsdl文件标签讲解
    定销房概念扫盲
    Sql Server系列:视图
    Centos7安装mysql5.6
    java实现链式队列
  • 原文地址:https://www.cnblogs.com/codeking100/p/10338060.html
Copyright © 2020-2023  润新知