pack.sh 5.79 KB
Newer Older
fuyanbin's avatar
fuyanbin committed
1
#!/bin/bash
2
3
4
5
6
7
8
usage() {
    echo "Usage: $0 -V | --vendor  <vendor id>
                    -t | --type <pipe type>
                    -i | --image <image file>
                    --chroot-type <pack type>
                    --orgcode <organization code>
                    --channelid <channel id>
fuyanbin's avatar
fuyanbin committed
9
                    --packtype <pack type>
10
11
12
                    --help"
    exit 1
}
牛文敏's avatar
牛文敏 committed
13

14
15
16
17
18
19
VENDOR=""
PIPE_TYPE="small"
CHROOT_TYPE="androidrom"
DEPLOY="elf"
ORGCODE=""
CHANNELID=""
fuyanbin's avatar
typo    
fuyanbin committed
20
IMAGE_FILE=""
fuyanbin's avatar
fuyanbin committed
21
PACK_TYPE="other"
fuyanbin's avatar
fuyanbin committed
22

zhouzhenyu's avatar
zhouzhenyu committed
23
24
25
26
# new append
NOUPLOAD="false"
LOCAL="false"

27
28
29
30
export PATH=${PATH}:$(pwd)/tools/
PARSED_ARUGMENTS=$(getopt -a -n "$0" -o V:t:i: --long help,vendor:,type:,image:,chroot-type:,orgcode:,channelid:, -- "$@")
eval set -- "${PARSED_ARUGMENTS}"
while :
fuyanbin's avatar
fuyanbin committed
31
do
32
33
34
35
36
37
38
    case "$1" in
        -V | --vendor) VENDOR="$2"; shift 2 ;;
        -t | --type) PIPE_TYPE="$2"; shift 2 ;;
        -i | --image) IMAGE_FILE="$2"; shift 2 ;;
        --chroot-type) CHROOT_TYPE="$2"; shift 2 ;;
        --orgcode) ORGCODE="$2"; shift 2;;
        --channelid) CHANNELID="$2"; shift 2;;
fuyanbin's avatar
fuyanbin committed
39
        --packtype) PACK_TYPE="$2"; shift 2;;
40
41
42
43
        --help) usage ;;
        --) shift; break;;
        *) usage ;;
    esac
fuyanbin's avatar
fuyanbin committed
44
done
fuyanbin's avatar
fuyanbin committed
45

fuyanbin's avatar
cleanup    
fuyanbin committed
46
47
build_dir=$(mktemp -d /build/tmp.XXXXX)
packge_dir=$(mktemp -d /build/tmp.XXXXX)
fuyanbin's avatar
fuyanbin committed
48
boot_dir=$(mktemp -d /build/tmp.XXXXX)
49
50

build_image() {
fuyanbin's avatar
cleanup    
fuyanbin committed
51
    local img="$1"
fuyanbin's avatar
fuyanbin committed
52
    local android_sdk
fuyanbin's avatar
cleanup    
fuyanbin committed
53

54
55
56
    systemfile="$build_dir/system.PARTITION"
    systemfile_ext4="$build_dir/system.PARTITION.ext4"

fuyanbin's avatar
fuyanbin committed
57
    aml_image_v2_packer -d "$img" "$build_dir"
58
59
60
    if file "$systemfile" | grep "Android sparse image"
    then
        simg2img "$systemfile" "$systemfile_ext4"
fuyanbin's avatar
fuyanbin committed
61
        loopdev=$(losetup -P -f --show "$systemfile_ext4")
62
    else
fuyanbin's avatar
fuyanbin committed
63
        loopdev=$(losetup -P -f --show "$systemfile")
64
65
66
    fi

    mkdir "$build_dir/system"
fuyanbin's avatar
fuyanbin committed
67
    mount "$loopdev" "$build_dir/system"
68

fuyanbin's avatar
fuyanbin committed
69
    touch "$build_dir/system/.androidrom"
70

fuyanbin's avatar
fuyanbin committed
71
    rm -f "$build_dir/system/hugep-all.zip"
fuyanbin's avatar
fuyanbin committed
72
73
    rm -f "$build_dir/system/bin/hugep-all.zip"

fuyanbin's avatar
fuyanbin committed
74
    android_sdk="$(grep "build\.version\.sdk" "$build_dir"/system/build.prop | awk -F'=' '{print $2}')"
fuyanbin's avatar
fuyanbin committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
    if [[ "$android_sdk" -ge 28 ]]
    then
        find ./services/ -type f -name "*.rc" -exec install -t "$build_dir"/system/etc/init/ {} \;
    else
        pushd "$boot_dir"
        abootimg -x "$build_dir/boot.PARTITION" ramdisk
        mkdir initrd_dir
        pushd initrd_dir
        gunzip -c ../initrd.img | cpio -i
        popd
        cp initrd_dir/init.rc .
        rm -rf initrd_dir
        popd
        cp "$boot_dir"/init.rc "$packge_dir"/init.rc
        rm -rf "$boot_dir"
fuyanbin's avatar
fuyanbin committed
90
        if ! find_autostart -script_name preinstall.sh -initrc "$packge_dir"/init.rc -root_path "$build_dir" > "$packge_dir"/find_autostart.log 2>/dev/null
fuyanbin's avatar
fuyanbin committed
91
        then
fuyanbin's avatar
fuyanbin committed
92
            find_autostart -script_name recovery.sh -initrc "$packge_dir"/init.rc -root_path "$build_dir" > "$packge_dir"/find_autostart.log 2>/dev/null
fuyanbin's avatar
fuyanbin committed
93
94
95
        fi
        local auto_start_script
        auto_start_script="$(cat "$packge_dir"/find_autostart.log)"
fuyanbin's avatar
fuyanbin committed
96
        if [[ -z "$auto_start_script" ]] && [[ -f "$build_dir"/system/bin/startsoftdetector.sh ]]
97
        then
fuyanbin's avatar
fuyanbin committed
98
            # TODO: startsoftdetector.sh 会阻塞在某一步,要把 starthugep.sh 加在中间部分
99
100
            auto_start_script="/system/bin/startsoftdetector.sh"
        fi
101
        # NOTE: 返回的脚本路径里一定以 /system/ 开头, 所以下边拼路径时没有加上 /system
fuyanbin's avatar
fuyanbin committed
102
103
        if [[ -n "$auto_start_script" ]]
        then
104
            if ! grep -q "#!/system/bin/sh" "$build_dir"/"$auto_start_script"
fuyanbin's avatar
fuyanbin committed
105
            then
106
                echo "#!/system/bin/sh" >> "$build_dir"/"$auto_start_script"
fuyanbin's avatar
fuyanbin committed
107
            fi
fuyanbin's avatar
fuyanbin committed
108
109
110
111
            echo " " >> "$build_dir"/"$auto_start_script"
            echo "/system/bin/starthugep.sh > /dev/null 2>&1 &" >> "$build_dir"/"$auto_start_script"
            chmod 0755 "$build_dir"/"$auto_start_script"
            chcon u:object_r:drmserver_exec:s0 "$build_dir"/"$auto_start_script"
fuyanbin's avatar
fuyanbin committed
112
113
        fi
    fi
114

fuyanbin's avatar
fuyanbin committed
115
116
117
118
119
120
    cp -f "$build_dir/hugep-all.zip" "$build_dir"/system/bin/hugep-all.zip

    find ./services/ -type f ! -name  "*.rc" ! -name "*.zip" -exec install -m 0777 -t "$build_dir"/system/bin/ {} \;
    cp -f services/manager_bin_file.zip "$build_dir"/system/bin/manager_bin_file.zip

    for file in $(find ./services/ -type f ! -name "*.rc" ! -name "*.zip")
121
    do
fuyanbin's avatar
fuyanbin committed
122
        chcon u:object_r:drmserver_exec:s0 "$build_dir/system/bin/$(basename "$file")"
123
124
    done

fuyanbin's avatar
fuyanbin committed
125
126
    umount "$loopdev"
    losetup -d "$loopdev"
127
128
129
130
131
132
133
134
135
    rm -rf "$build_dir/system"
    sync

    if [[ -f "$systemfile_ext4" ]]
    then
        rm -f "$systemfile"
        img2simg "$systemfile_ext4" "$systemfile"
        rm -f "$systemfile_ext4"
    fi
fuyanbin's avatar
fuyanbin committed
136
    aml_image_v2_packer -r "/$build_dir/image.cfg" "$build_dir" "${packge_dir}/$(basename "$img")"
fuyanbin's avatar
fuyanbin committed
137
    rm -rf "$build_dir"
138
139
}

fuyanbin's avatar
fuyanbin committed
140
generate_vendor_confg() {
141
142
143
144
145
146
    local yaml_file_src
    local yaml_file

    yaml_file="$build_dir"/vendor.yaml
    yaml_file_src="$build_dir"/vendor.yaml.src
    cp vendor.yaml.src "$yaml_file_src"
fuyanbin's avatar
fuyanbin committed
147
148
149
150
    sed -i'' "s#__VENDOR__#$VENDOR#g"  "$yaml_file_src"
    sed -i'' "s#__ORGCODE__#$ORGCODE#g"  "$yaml_file_src"
    sed -i'' "s#__CHROOT_TYPE__#$CHROOT_TYPE#g"  "$yaml_file_src"
    sed -i'' "s#__DEPLOY__#$DEPLOY#g"  "$yaml_file_src"
fuyanbin's avatar
fuyanbin committed
151
152
    sed -i'' "s#__CHANNEL_ID__#$CHANNELID#g"  "$yaml_file_src"
    sed -i'' "s#__PACK_TYPE__#$PACK_TYPE#g"  "$yaml_file_src"
153
154
155
156
157
158
159
160
161
162
163
164
165
166
    aio -m enc -i "$yaml_file_src" -o "$yaml_file"
}

update_hugepall_zipfile() {
    local yaml_file
    local hugep_zip_file
    local hugep_zip_file_origin

    yaml_file="$build_dir"/vendor.yaml
    hugep_zip_file="$build_dir/hugep-all.zip"
    hugep_zip_file_origin="./services/hugep-all.zip"

    cp "$hugep_zip_file_origin" "$hugep_zip_file"

fuyanbin's avatar
fuyanbin committed
167
    zip -u -j "$hugep_zip_file" "$yaml_file"
fuyanbin's avatar
fuyanbin committed
168
    cp "$hugep_zip_file" /build/"$VENDOR-$ORGCODE-$CHANNELID-hugep-all.zip"
zhouzhenyu's avatar
zhouzhenyu committed
169
170
}

fuyanbin's avatar
cleanup    
fuyanbin committed
171
export PATH="$PATH:$(pwd)"/tools/
fuyanbin's avatar
fuyanbin committed
172
173
174

generate_vendor_confg
update_hugepall_zipfile
fuyanbin's avatar
fuyanbin committed
175
rm -rf "$build_dir"