diff --git a/20240807_102225.png b/20240807_102225.png new file mode 100644 index 0000000..3df4692 Binary files /dev/null and b/20240807_102225.png differ diff --git a/Screenshot_20240807_100014_Termux.png b/Screenshot_20240807_100014_Termux.png new file mode 100644 index 0000000..8261757 Binary files /dev/null and b/Screenshot_20240807_100014_Termux.png differ diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..da6a87c --- /dev/null +++ b/install.sh @@ -0,0 +1,202 @@ +#!/data/data/com.termux/files/usr/bin/bash +# -*- coding: utf-8 -*- + +function print_ew () { + + if [[ "$1" == "error" ]]; then + s_text="\x1b[38;5;1m[ERROR]:"; + text="$2\n"; + elif [[ "$1" == "warn" ]]; then + s_text="\x1b[38;5;220m[WARNING]:"; + text="$2\n"; + elif [[ "$1" == "question" ]]; then + s_text="\x1b[38;5;128m[QUESTION]:"; + text="$2"; + elif [[ "$1" == "info" ]]; then + s_text="\x1b[38;5;83m[Installer thread/INFO]:"; + text="$2\n"; + else + s_text="\x1b[38;5;31m[$1]:"; + text="$2\n"; + fi + + current_time="$( date +"%k:%M:%S" )"; + + printf "\x1b[38;5;214m[${current_time}] ${s_text}\x1b[0m \x1b[38;5;87m$text\x1b[0m"; + +} + +if [[ "$(uname -o)" != "Android" ]]; then # check termux + print_ew "error" "this script is for Termux. " && exit 1; +fi + +fn_install () { + + clear; + + directory=ubuntu-fs; + + UBUNTU_VERSION=jammy; + + if [ -d "$directory" ]; then + first=1 + print_ew "warn" "Skipping the download and the extraction" + elif [ -z "$(command -v proot)" ]; then + print_ew "error" "Please install proot." && exit 1; + elif [ -z "$(command -v wget)" ]; then + print_ew "error" "Please install wget." && exit 1; + fi + + if [ "$first" != 1 ]; then + if [ -f "ubuntu.tar.gz" ]; then + rm -rf ubuntu.tar.gz > /dev/null 2>&1; + fi + + if [ ! -f "ubuntu.tar.gz" ]; then + + print_ew "info" "Downloading the ubuntu rootfs, please wait 2 minute..."; + + ARCHITECTURE=$(dpkg --print-architecture); + + case "$ARCHITECTURE" in + aarch64) + ARCHITECTURE=arm64 ;; + arm) + ARCHITECTURE=armhf ;; + amd64|x86_64) + ARCHITECTURE=amd64 ;; + *) + print_ew "error" "Unknown architecture :- $ARCHITECTURE" && exit 1 ;; + esac + + wget "https://partner-images.canonical.com/core/${UBUNTU_VERSION}/current/ubuntu-${UBUNTU_VERSION}-core-cloudimg-${ARCHITECTURE}-root.tar.gz" -q -O ubuntu.tar.gz; + + print_ew "info" "Download complete!"; + fi + + cur=`pwd`; + + mkdir -p $directory > /dev/null 2>&1; + + cd $directory; + + print_ew "info" "Decompressing the ubuntu rootfs, please wait..."; + + proot --link2symlink tar -zxf $cur/ubuntu.tar.gz --exclude='dev'||:; + + print_ew "info" "The ubuntu rootfs have been successfully decompressed!"; + + print_ew "info" "Fixing the resolv.conf, so that you have access to the internet"; + + printf "nameserver 8.8.8.8\nnameserver 8.8.4.4\n" > etc/resolv.conf; + + stubs=(); + + stubs+=('usr/bin/groups'); + + for f in ${stubs[@]};do + print_ew "info" "Writing stubs, please wait..."; + echo -e "#!/bin/sh\nexit" > "$f"; + done + + print_ew "info" "Successfully wrote stubs!"; + + cd $cur; + + fi + + mkdir -p ubuntu-binds; + + bin=start.sh; + + print_ew "info" "Creating the start script, please wait..."; + + cat > $bin <<- EOM +#!/bin/bash +# -*- coding: utf-8 -*- + +cd \$(dirname \$0); + +## unset LD_PRELOAD in case termux-exec is installed +unset LD_PRELOAD; +command="proot"; + +## uncomment following line if you are having FATAL: kernel too old message. +#command+=" -k 4.14.81"; +command+=" --link2symlink"; +command+=" -0"; +command+=" -r $directory"; + +if [ -n "\$(ls -A ubuntu-binds)" ]; then + for f in ubuntu-binds/* ;do + . \$f; + done +fi + +command+=" -b /dev"; +command+=" -b /proc"; +command+=" -b /sys"; +command+=" -b ubuntu-fs/tmp:/dev/shm"; +command+=" -b /data/data/com.termux"; +command+=" -b /:/host-rootfs"; +command+=" -b /sdcard"; +command+=" -b /storage"; +command+=" -b /mnt"; +command+=" -w /root"; +command+=" /usr/bin/env -i"; +command+=" HOME=/root"; +command+=" PATH=/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/games:/usr/local/games"; +command+=" TERM=\$TERM"; +command+=" LANG=C.UTF-8"; +command+=" /bin/bash --login"; +com="\$@"; + +if [ -z "\$1" ]; then + exec \$command; +else + \$command -c "\$com"; +fi +EOM + + print_ew "info" "The start script has been successfully created!"; + + print_ew "info" "Fixing shebang of start.sh, please wait..."; + + termux-fix-shebang $bin > /dev/null 2>&1; + + print_ew "info" "Successfully fixed shebang of start.sh!"; + + print_ew "info" "Making start.sh executable please wait..."; + + chmod +x $bin > /dev/null 2>&1; + + print_ew "info" "Successfully made start.sh executable"; + + print_ew "info" "Cleaning up please wait..."; + + rm ubuntu.tar.gz -rf > /dev/null 2>&1; + + print_ew "info" "Successfully cleaned up!"; + + print_ew "info" "installation completed! Run => bash start.sh"; + + rm -rf .git 2>&1; + +} + +trap '' 2 + + if [ "$1" == "-y" ]; then + fn_install; + elif [ "$1" == "" ]; then + print_ew "question" "Do you want to install ubuntu-in-termux? [Y/n] " && read cmd; + if [ "$cmd" == "y" ]; then + fn_install; + elif [ "$cmd" == "Y" ]; then + fn_install; + else + print_ew "error" "Installation aborted."; + fi + else + print_ew "error" "Installation aborted."; + fi