#download OpenApps https://opengapps.org/ pico set -e WORKDIR=/home/.aliendalvik_systemimg_patch TMPWORKDIR="$WORKDIR/tmp" SQUASHFS_ROOT="$TMPWORKDIR/squashfs-root" MOUNT_ROOT="$TMPWORKDIR/systemimg_mount" SYSTEM_IMG=/opt/alien/system.img ORIG_IMG_FILE=orig_img_path.txt FEDORA22_REPO=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/Everything/aarch64/os/Packages OPENGAPPS_ARCH=arm64 OPENGAPPS_API=11.0 OPENGAPPS_VARIANT=pico GOOGLE_APPS_REMOVE='carriersetup-all extservicesgoogle-arm64 extsharedgoogle-all googlebackuptransport-all googlecontactssync-all googlefeedback-all googlepartnersetup-all setupwizarddefault-arm64 setupwizardtablet-arm64 vending-common' log() { printf '%s\n' "$1" > /dev/stderr } install_fedora22_rpm() { pkgname="$1" pkgversion="$2" if ! rpm -q "$pkgname" > /dev/null; then pkgfile="$pkgname-$pkgversion.fc30.aarch64.rpm" firstletter="$(printf '%s' "$pkgfile" | cut -c 1)" mkdir "$TMPWORKDIR/rpms" curl "$FEDORA22_REPO/$firstletter/$pkgfile" > "$TMPWORKDIR/rpms/$pkgfile" pkcon -y install-local "$TMPWORKDIR/rpms/$pkgfile" rm "$TMPWORKDIR/rpms/$pkgfile" rmdir "$TMPWORKDIR/rpms" fi } install_deps() { if ! rpm -q squashfs-tools > /dev/null; then log "squashfs-tools package not found. Installing..." pkcon -y install squashfs-tools fi if ! rpm -q rsync > /dev/null; then log "rsync package not found. Installing..." pkcon -y install rsync fi if ! rpm -q lzip > /dev/null; then log "lzip package not found. Installing..." install_fedora22_rpm lzip 1.20-4 fi } extract_image() { mkdir "$MOUNT_ROOT" mount -o loop,ro "$SYSTEM_IMG" "$MOUNT_ROOT" if [ -f "$MOUNT_ROOT/$ORIG_IMG_FILE" ]; then orig_image="$(cat "$MOUNT_ROOT/$ORIG_IMG_FILE")" log "$SYSTEM_IMG already patched, using original from $orig_image" else orig_image="$WORKDIR/system.img.orig.$(date +%Y%m%dT%H%M%S)" cp "$SYSTEM_IMG" "$orig_image" log "Copying original image $SYSTEM_IMG to $orig_image" fi umount "$MOUNT_ROOT" if [ ! -f "$orig_image" ]; then log "$orig_image not found" return 1 fi mount -o loop,ro "$orig_image" "$MOUNT_ROOT" if [ -f "$MOUNT_ROOT/$ORIG_IMG_FILE" ]; then umount "$MOUNT_ROOT" rmdir "$MOUNT_ROOT" log "$orig_image already patched, please restore original image to $SYSTEM_IMG" return 1 fi mkdir "$SQUASHFS_ROOT" # rsync needs to be run twice to copy all xattrs. Probably a bug in rsync. rsync -aSHAX "$MOUNT_ROOT/" "$SQUASHFS_ROOT/" rsync -aSHAX "$MOUNT_ROOT/" "$SQUASHFS_ROOT/" umount "$MOUNT_ROOT" rmdir "$MOUNT_ROOT" printf '%s' "$orig_image" > "$SQUASHFS_ROOT/$ORIG_IMG_FILE" } build_image() { cp "$SYSTEM_IMG" "$TMPWORKDIR/system.img.backup" mksquashfs "$SQUASHFS_ROOT" "$SYSTEM_IMG" -noappend -no-exports -no-duplicates -no-fragments rm "$TMPWORKDIR/system.img.backup" rm -r "$SQUASHFS_ROOT" } _find_opengapps() { downloads=/home/defaultuser/Downloads/ name_pattern="open_gapps-$OPENGAPPS_ARCH-$OPENGAPPS_API-$OPENGAPPS_VARIANT-*.zip" if [ "$1" != quiet ]; then log "Searching for Open GApps zip at $downloads/$name_pattern" fi find "$downloads" -maxdepth 1 -name "$name_pattern" | sort | tail -n 1 } get_opengapps_zip() { opengapps_zip="$(_find_opengapps)" if [ -z "$opengapps_zip" ]; then # Show the Open GApps download page to the user instead of automating # the download of the latest version. # The no-mirror policy log "Opening Open GApps download page" runuser -l defaultuser – /usr/bin/xdg-open "The Open GApps Project" log "Waiting for download to start" while [ -z "$opengapps_zip" ]; do sleep 1 opengapps_zip="$(_find_opengapps quiet)" done log "Detected new download at $opengapps_zip" log "Waiting for download to finish" while [ -f "$opengapps_zip" ] && [ -f "$opengapps_zip.part" ]; do sleep 1 done sleep 1 if [ ! -f "$opengapps_zip" ]; then log "Download failed" return 1 fi else log "Found Open GApps zip $opengapps_zip" fi printf '%s' "$opengapps_zip" } install_opengapps() { log "Unzip open gapps archive" unzip "$(get_opengapps_zip)" -d "$TMPWORKDIR/opengapps/" log "Remove some google apps" for p in $GOOGLE_APPS_REMOVE; do log "Removing $p" rm "$TMPWORKDIR/opengapps/Core/$p.tar.lz" done if [ -f "$TMPWORKDIR/opengapps/Core/extservicesgoogle-all.tar.lz" ]; then rm -r "$SQUASHFS_ROOT/system/priv-app/ExtServices" fi if [ -f "$TMPWORKDIR/opengapps/Core/extsharedgoogle-all.tar.lz" ]; then rm -r "$SQUASHFS_ROOT/system/app/ExtShared" fi mkdir "$TMPWORKDIR/opengapps_unarchived" for f in "$TMPWORKDIR"/opengapps/Core/*.tar.lz; do lzip -c -d "$f" | tar -x -C "$TMPWORKDIR/opengapps_unarchived" done rm -r "$TMPWORKDIR/opengapps/" ls -al "$TMPWORKDIR"/opengapps_unarchived ls -al "$SQUASHFS_ROOT/system/" ls -al "$SQUASHFS_ROOT/system/product" cp -r "$TMPWORKDIR"/opengapps_unarchived/*/*/* "$SQUASHFS_ROOT/system/" rm -r "$TMPWORKDIR/opengapps_unarchived/" } set_traps() { # shellcheck disable=SC2064 trap "$*" EXIT HUP INT QUIT PIPE TERM } cleanup() { if [ ! -f "$SYSTEM_IMG" ] && [ -f "$TMPWORKDIR/system.img.backup" ]; then mv "$TMPWORKDIR/system.img.backup" "$SYSTEM_IMG" || : fi umount "$MOUNT_ROOT" || : rm -r "$TMPWORKDIR" || : set_traps - exit 1 } set_traps cleanup systemctl stop aliendalvik mkdir -p "$WORKDIR" mkdir -p "$TMPWORKDIR" install_deps log "extract image" extract_image log "image was extracted" log "install open gapps" install_opengapps log "open gapps were installed" log "build image" build_image log "image was built" rmdir "$TMPWORKDIR" set_traps - exit 0