You are on page 1of 4

#!

/bin/sh

#############################
# Linux Installation #
#############################

# Define the root directory to /home/runner.


# We can only write in /home/runner and /tmp in the runner/RDP.
ROOTFS_DIR=/home/runner

export PATH=$PATH:~/.local/usr/bin

max_retries=50
timeout=1

# Detect the machine architecture.


ARCH=$(uname -m)

# Check machine architecture to make sure it is supported.


# If not, we exit with a non-zero status code.
if [ "$ARCH" = "x86_64" ]; then
ARCH_ALT=amd64
elif [ "$ARCH" = "aarch64" ]; then
ARCH_ALT=arm64
else
printf "Unsupported CPU architecture: ${ARCH}"
exit 1
fi

# Download & decompress the Linux root file system if not already installed.

if [ ! -e $ROOTFS_DIR/.installed ]; then
echo
"##################################################################################
#####"
echo "#"
echo "# Aero Cloud VPS"
echo "#"
echo "# Copyright (C) 2022 - 2023, VPSFREE.ES"
echo "#"
echo "#"
echo
"##################################################################################
#####"
echo ""
echo "* [0] Debian - "
echo "* [1] Ubuntu - RDP Support"
echo "* [2] Alpine - "

read -p "Enter OS (0-3): " input

case $input in

0)
wget --tries=$max_retries --timeout=$timeout --no-hsts -O /tmp/rootfs.tar.xz \
"https://github.com/termux/proot-distro/releases/download/v3.10.0/debian-$
{ARCH}-pd-v3.10.0.tar.xz"
apt download xz-utils
deb_file=$(find $ROOTFS_DIR -name "*.deb" -type f)
dpkg -x $deb_file ~/.local/
rm "$deb_file"

tar -xJf /tmp/rootfs.tar.xz -C $ROOTFS_DIR;;

1)
wget --tries=$max_retries --timeout=$timeout --no-hsts -O /tmp/rootfs.tar.gz \
"http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-
20.04.4-base-${ARCH_ALT}.tar.gz"

tar -xf /tmp/rootfs.tar.gz -C $ROOTFS_DIR;;

2)
wget --tries=$max_retries --timeout=$timeout --no-hsts -O /tmp/rootfs.tar.gz \
"https://dl-cdn.alpinelinux.org/alpine/v3.18/releases/x86_64/alpine-minirootfs-
3.18.3-${ARCH}.tar.gz"

tar -xf /tmp/rootfs.tar.gz -C $ROOTFS_DIR;;

esac

fi

################################
# Package Installation & Setup #
################################

# Download static APK-Tools temporarily because minirootfs does not come with APK
pre-installed.
if [ ! -e $ROOTFS_DIR/.installed ]; then
# Download the packages from their sources
mkdir $ROOTFS_DIR/usr/local/bin -p

wget --tries=$max_retries --timeout=$timeout --no-hsts -O


$ROOTFS_DIR/usr/local/bin/proot
"https://raw.githubusercontent.com/dxomg/vpsfreepterovm/main/proot-${ARCH}"

while [ ! -s "$ROOTFS_DIR/usr/local/bin/proot" ]; do
rm $ROOTFS_DIR/usr/local/bin/proot -rf
wget --tries=$max_retries --timeout=$timeout --no-hsts -O
$ROOTFS_DIR/usr/local/bin/proot
"https://raw.githubusercontent.com/dxomg/vpsfreepterovm/main/proot-${ARCH}"

if [ -s "$ROOTFS_DIR/usr/local/bin/proot" ]; then
# Make PRoot executable.
chmod 755 $ROOTFS_DIR/usr/local/bin/proot
break # Exit the loop since the file is not empty
fi

chmod 755 $ROOTFS_DIR/usr/local/bin/proot


sleep 1 # Add a delay before retrying to avoid hammering the server
done

chmod 755 $ROOTFS_DIR/usr/local/bin/proot

fi
# Clean-up after installation complete & finish up.
if [ ! -e $ROOTFS_DIR/.installed ]; then
# Add DNS Resolver nameservers to resolv.conf.
printf "nameserver 1.1.1.1\nnameserver 1.0.0.1" > ${ROOTFS_DIR}/etc/resolv.conf
# Wipe the files we downloaded into /tmp previously.
rm -rf /tmp/rootfs.tar.xz /tmp/sbin
# Create .installed to later check whether Alpine is installed.
touch $ROOTFS_DIR/.installed
fi

# Print some useful information to the terminal before entering PRoot.


# This is to introduce the user with the various Alpine Linux commands.
# Define color variables
BLACK='\e[0;30m'
BOLD_BLACK='\e[1;30m'
RED='\e[0;31m'
BOLD_RED='\e[1;31m'
GREEN='\e[0;32m'
BOLD_GREEN='\e[1;32m'
YELLOW='\e[0;33m'
BOLD_YELLOW='\e[1;33m'
BLUE='\e[0;34m'
BOLD_BLUE='\e[1;34m'
MAGENTA='\e[0;35m'
BOLD_MAGENTA='\e[1;35m'
CYAN='\e[0;36m'
BOLD_CYAN='\e[1;36m'
WHITE='\e[0;37m'
BOLD_WHITE='\e[1;37m'

# Reset text color


RESET_COLOR='\e[0m'

# Function to display the header


display_header() {
echo -e "${BOLD_MAGENTA} TeserSprise"
echo -e "${BOLD_MAGENTA} Sub"
echo -e "${BOLD_MAGENTA}___________________________________________________"
echo -e " ${YELLOW}-----> System Resources <----${RESET_COLOR}"
echo -e ""
}

# Function to display system resources


display_resources() {
echo -e " INSTALLER OS -> ${RED} $(cat /etc/os-release | grep "PRETTY_NAME" |
cut -d'"' -f2) ${RESET_COLOR}"
echo -e ""
echo -e " CPU -> ${YELLOW} $(lscpu | grep 'Model name' | cut -d':' -f2- | sed
's/^ *//;s/ \+/ /g') ${RESET_COLOR}"
echo -e " RAM -> ${BOLD_GREEN}${SERVER_MEMORY}MB${RESET_COLOR}"
echo -e " PRIMARY PORT -> ${BOLD_GREEN}${SERVER_PORT}${RESET_COLOR}"
echo -e " EXTRA PORTS -> ${BOLD_GREEN}${P_SERVER_ALLOCATION_LIMIT}$
{RESET_COLOR}"
echo -e " SERVER UUID -> ${BOLD_GREEN}${P_SERVER_UUID}${RESET_COLOR}"
echo -e " LOCATION -> ${BOLD_GREEN}${P_SERVER_LOCATION}${RESET_COLOR}"
}
display_footer() {
echo -e "${BOLD_MAGENTA}___________________________________________________$
{RESET_COLOR}"
echo -e ""
echo -e " ${YELLOW}-----> VPS HAS STARTED <----${RESET_COLOR}"
}

# Main script execution


clear

display_header
display_resources
display_footer

###########################
# Start PRoot environment #
###########################

# This command starts PRoot and binds several important directories


# from the host file system to our special root file system.
$ROOTFS_DIR/usr/local/bin/proot \
--rootfs="${ROOTFS_DIR}" \
-0 -w "/root" -b /dev -b /sys -b /proc -b /etc/resolv.conf --kill-on-exit

You might also like