-
-
Save lkraav/8729478217f5b76323f4a768301b3179 to your computer and use it in GitHub Desktop.
Sony 10 III - Dual SIM (arm64) | Sailfish OS 4.6 | Android 11 | Open GApps pico installation script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
set -e | |
WORKDIR=/home/.appsupport_systemimg_patch | |
TMPWORKDIR="$WORKDIR/tmp" | |
SQUASHFS_ROOT="$TMPWORKDIR/squashfs-root" | |
MOUNT_ROOT="$TMPWORKDIR/systemimg_mount" | |
SYSTEM_IMG=/opt/appsupport/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 appsupport | |
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment