#!/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=$(pwd) 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 "# Biralo Gaming" 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} Biralo Gaming" 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