Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- #
- # Copyright (c) 2014 Canonical
- #
- # Author: Oliver Grawert <ogra@canonical.com>, Marius Gripsgard <me@mariogrip.com>
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License as
- # published by the Free Software Foundation; either version 2 of the
- # License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- # USA
- #
- set -e
- TARPATH=$1
- SYSIMG=$2
- check_prereq()
- {
- if [ ! $(which make_ext4fs) ] || [ ! -x $(which simg2img) ] || \
- [ ! -x $(which adb) ]; then
- echo "please install the android-tools-fsutils and android-tools-adb packages" && exit 1
- fi
- }
- do_shell()
- {
- adb shell "$@"
- }
- install_OPO()
- {
- adb push configs/70-bacon.rules /cache/system/usr/lib/lxc-android-config
- adb push configs/adbd.conf /cache/system/etc/init/
- do_shell "rm /cache/system/etc/init/ubuntu-location-service.conf"
- }
- convert_android_img()
- {
- simg2img $SYSIMG $WORKDIR/system.img.raw
- mkdir $TMPMOUNT
- mount -t ext4 -o loop $WORKDIR/system.img.raw $TMPMOUNT
- make_ext4fs -l 120M $WORKDIR/system.img $TMPMOUNT >/dev/null 2>&1
- }
- prepare_ubuntu_system()
- {
- do_shell "rm -f /data/system.img"
- for data in system android; do
- do_shell "rm -rf /data/$data-data"
- done
- if [ -z "$KEEP" ]; then
- do_shell "rm -rf /data/user-data"
- else
- echo -n "keep option set, keeping user data ... "
- fi
- do_shell "dd if=/dev/zero of=/data/system.img seek=500K bs=4096 count=0 >/dev/null 2>&1"
- do_shell "mkfs.ext2 -F /data/system.img >/dev/null 2>&1"
- do_shell "mkdir -p /cache/system"
- do_shell "mount -o loop /data/system.img /cache/system/"
- }
- usage()
- {
- echo "usage: $(basename $0) <path to rootfs tarball> <path to android system.img> [options]\n
- options:
- -h|--help this message
- -c|--custom path to customization tarball (needs to be tar.xz)
- -k|--keep-userdata do not wipe user data on device
- -w|--wipe-file absolute path of a file inside the image to wipe (empty)\n"
- exit 1
- }
- SUDOARGS="$@"
- while [ $# -gt 0 ]; do
- case "$1" in
- -h|--help)
- usage
- ;;
- -c|--custom)
- [ -n "$2" ] && CUST_TARPATH=$2 shift || usage
- ;;
- -k|--keep-userdata)
- KEEP=1
- ;;
- -w|--wipe-file)
- [ -n "$2" ] && WIPE_PATH=$2 shift || usage
- ;;
- esac
- shift
- done
- TARBALL=$(basename $TARPATH)
- if [ -z "$TARBALL" ]; then
- echo "need valid rootfs tarball path"
- usage
- fi
- TARTYPE=$(file --mime-type $TARPATH|sed 's/^.* //')
- case ${TARTYPE#application\/} in
- gzip|x-gzip)
- ;;
- *)
- echo "Need valid rootfs tarball gzip type"
- usage
- ;;
- esac
- if [ -z "$SYSIMG" ] || \
- [ "$(file --mime-type $SYSIMG|sed 's/^.* //')" != "application/octet-stream" ]; then
- echo "need valid system.img path and type application/octet-stream"
- usage
- fi
- if [ ! -z "$CUST_TARPATH" ] && \
- [ "$(file --mime-type $CUST_TARPATH|sed 's/^.* //')" != "application/x-xz" ]; then
- echo "Custom tarball needs to be valid path and type .tar.xz"
- usage
- fi
- [ $(id -u) -ne 0 ] && exec sudo $0 $SUDOARGS
- check_prereq
- WORKDIR=$(mktemp -d /tmp/rootstock-touch-install.XXXXX)
- TMPMOUNT="$WORKDIR/tmpmount"
- echo -n "transfering rootfs tarball ... "
- adb push $TARPATH /recovery/ >/dev/null 2>&1
- echo "[done]"
- if [ ! -z "$CUST_TARPATH" ]; then
- CUST_TARBALL=$(basename $CUST_TARPATH)
- echo -n "transferring custom tarball"
- adb push $CUST_TARPATH /recovery/ >/dev/null 2>&1
- echo "[done]"
- fi
- echo -n "preparing system-image on device ... "
- prepare_ubuntu_system
- echo "[done]"
- echo -n "unpacking rootfs tarball to system-image ... "
- do_shell "cd /cache/system && zcat /recovery/$TARBALL | tar xf -"
- do_shell "mkdir -p /cache/system/android/firmware"
- do_shell "mkdir -p /cache/system/android/persist"
- do_shell "mkdir -p /cache/system/userdata"
- do_shell "[ -e /cache/system/SWAP.swap ] && mv /cache/system/SWAP.swap /data/SWAP.img"
- for link in cache data factory firmware persist system; do
- do_shell "cd /cache/system && ln -s /android/$link $link"
- done
- do_shell "cd /cache/system/lib && ln -s /system/lib/modules modules"
- do_shell "cd /cache/system && ln -s /android/system/vendor vendor"
- do_shell "[ -e /cache/system/etc/mtab ] && rm /cache/system/etc/mtab"
- do_shell "cd /cache/system/etc && ln -s /proc/mounts mtab"
- if [ ! -z "$WIPE_PATH" ]; then
- do_shell "echo ' ' >/cache/system/$WIPE_PATH || true"
- fi
- echo "[done]"
- if [ ! -z "$CUST_TARPATH" ];then
- echo -n "unpacking custom tarball"
- do_shell "mkdir -p /cache/system/custom"
- do_shell "cd /cache && xzcat /recovery/$CUST_TARBALL | tar xf -"
- echo "[done]"
- fi
- echo -n "adding android system image to installation ... "
- convert_android_img
- ANDROID_DIR="/cache/system/var/lib/lxc/android/"
- adb push $WORKDIR/system.img $ANDROID_DIR >/dev/null 2>&1
- echo "[done]"
- echo -n "enabling Mir ... "
- do_shell "touch /cache/system/home/phablet/.display-mir"
- echo "[done]"
- echo -n "Setting OnePlus one configs... "
- install_OPO
- echo "[done]"
- echo "rebooting device"
- adb reboot
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement