2023-09-04 08:56:43 +00:00
|
|
|
|
#download OpenApps https://opengapps.org/ pico
|
|
|
|
|
|
2023-09-04 08:33:11 +00:00
|
|
|
|
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
|