#!/usr/bin/env bash clear ## HEADER echo -e "${On_Green}==================================================================== ==== Tyleo Next Generation Script - Fedora Interactive Deployer ==== ====================================================================${Color_Off}" ## HOST DETAILS # SHOW echo -e "${On_Green}= Host Informations${Color_Off}" echo -e " Hostname : ${BGreen}$HOSTNAME${Color_Off}" echo -e " Primary IP : ${BGreen}$(hostname -I | cut -d' ' -f1)$Color_Off" echo -e " Time : ${BGreen}$(date)${Color_Off}" echo -e " User : ${BGreen}$(whoami)${Color_Off}" echo -e " UID/GID : ${BGreen}$UID${Color_Off}" echo -e " HomeDir : ${BGreen}$HOME${Color_Off}" echo -e " Language : ${BGreen}$LANG${Color_Off}" echo -e "${On_Green}= ${Color_Off}" ###################### ## BASE (UI) prefix="Run |>" errors="Error |>" succes="Success |>" compat="Compat |>" askfor="Question |>" ###################### ## ROOT MODE CHECK (SUDO MODE OR SU MODE) if [ "$UID" -ne 0 ] then echo -e "${Red}$errors Root mode not detected (current UID : ${BRed}$UID${Red}). You must run this script as root or via sudo command. (we recommend running as root mode after sudo su -)${Color_Off}" exit fi ###################### if [[ -f "$osrel" ]]; then echo -e "${BCyan}$compat${Color_Off} Fedora was detected." echo -e "${BYellow}$prefix${Color_Off} Continue Execution." else echo -e "${BCyan}$compat${Color_Off} Another OS is active on this machine. Incompatibility identified." echo -e "${BYellow}$prefix${Color_Off} Exiting." exit fi ## RANDOM PIN pincode=$(shuf -i 1000-9999 -n 1) ####################### ## CONFIRMATION echo -n -e "${BBlue}$askfor${Color_Off} Type this code to execute ($pincode) : " read -r pinentered if [[ "$pinentered" -ne "$pincode" ]] then echo -e "${BRed}$errors Pincode $pinentered received, there is an error here. Good Bye.${Color_Off}" echo -e "${BRed}$errors Exiting...${Color_Off}" exit fi echo -e "${BGreen}$succes Pincode $pinentered received, Accepted.${Color_Off}" ####################### sleep 2 clear echo -e "${On_Blue}== Interactive Deployment Started - Welcome $(whoami) ==${Color_Off}" echo "defaultyes=True" >> /etc/dnf/dnf.conf echo "color=never" >> /etc/dnf/dnf.conf ## Updating System echo -e "${BYellow}$prefix${Color_Off} DNF:Updating Packages..." echo -e "$BPurple" dnf up -y --refresh echo -e "$Color_Off" echo -e "$Color_Off" ## Firewall Control clear echo -e "${On_Blue}== FirewallD Control ==${Color_Off}" echo -n -e "${BBlue}$askfor${Color_Off} Disable Firewall-D ? (Recommended to avoid issues, can be enabled again later)(Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then systemctl stop firewalld systemctl disable firewalld echo -e "${BYellow}$prefix${Color_Off} FirewallD is now stopped and disabled." sleep 3 else echo -e "${BYellow}$prefix${Color_Off} FirewallD was ${BRed}not${Color_Off} disabled." sleep 3 fi accept="n" ## BASIC PACKAGES BY TYLEO (With auto mode) clear echo -e "${On_Blue}== Basic Package by Tyleo Dv. Delaware - Installation Processing ==${Color_Off}" echo -n -e "${BBlue}$askfor${Color_Off} Install Basic Package (Recommended, Include BTOP, HTOP and Glances) ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then echo -e "${On_Blue}== htop btop duf fish zsh git nano glances ==${Color_Off}" echo -e "${BYellow}$prefix${Color_Off} Installing Base Packages (recommended by Tyleo)..." echo -e "${BYellow}$prefix${Color_Off} DNF:Installing Packages..." echo -e "$BPurple" dnf in -y htop btop duf fish zsh git nano glances echo -e "$Color_Off" echo -e "${BYellow}$prefix${Color_Off} SYS:Enabling Glances..." systemctl enable glances systemctl start glances fi accept="n" ## BASIC PACKAGES BY TYLEO (With auto mode) clear echo -e "${On_Blue}== Additionnal Packages - Installation Processing ==${Color_Off}" echo -n -e "${BBlue}$askfor${Color_Off} Install Additionnal Packages ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then echo -n -e "${BBlue}$askfor${Color_Off} Packages (separated by SPACES) :" read -r pkgs echo -e "$BPurple" dnf up --refresh -y dnf in $pkgs -y echo -e "$Color_Off" fi accept="n" ## BASIC PACKAGES BY TYLEO (With auto mode) if [[ -f /usr/bin/cockpit-bridge ]]; then clear echo -e "${On_Blue}== Cockpit Admin Panel - Installation Processing ==${Color_Off}" echo -n -e "${BBlue}$askfor${Color_Off} Install Cockpit [9090/https] ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then echo -e "$BPurple" dnf up --refresh -y dnf in cockpit -y echo -e "$Color_Off" dnf in -y cockpit-navigator dnf in -y https://github.com/45Drives/cockpit-navigator/releases/download/v0.5.8/cockpit-navigator-0.5.8-1.el8.noarch.rpm echo -e "${Purple} [9090/https] Enabling Cockpit Services..." systemctl enable cockpit.socket systemctl enable cockpit echo -e "${Purple} [9090/https] Starting Cockpit Services..." systemctl start cockpit.socket systemctl start cockpit fi accept="n" fi clear echo -e "${On_Blue}== Basic System Configuration ==${Color_Off}" echo -n -e "${BBlue}$askfor${Color_Off} Change Hostnames ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then echo -n -e "${BBlue}$askfor${Color_Off} New Pretty Hostname (spaces,maj) : " read -r pHost echo -n -e "${BBlue}$askfor${Color_Off} New Static Hostname (no-space,no-maj) : " read -r sHost echo -e "${Purple} Setting Hostname (Pretty)${BGreen} [OK]${Color_Off}" hostnamectl set-hostname "$pHost" --pretty echo -e "${Purple} Setting Hostname (Static)${BGreen} [OK]${Color_Off}" hostnamectl set-hostname "$sHost" --static sleep 3 fi accept="n" echo -n -e "${BBlue}$askfor${Color_Off} Create a Service Account ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then echo -n -e "${BBlue}$askfor${Color_Off} Username : " read username if [[ -f /usr/bin/fish ]]; then useradd $username --shell /usr/bin/fish -G wheel -m -d /home/srv-$username -c "Service Account" -b /home/srv-$username echo "$username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/srv-$username passwd $username else useradd $username --shell /usr/bin/bash -G wheel -m -d /home/srv-$username -c "Service Account" -b /home/srv-$username echo "$username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/srv-$username passwd $username fi sleep 3 fi accept="n" echo -n -e "${BBlue}$askfor${Color_Off} Change Local and SSHD MOTD (Cockpit/sshd) ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then echo -n -e "${BBlue}$askfor${Color_Off} MOTD - Description (no-return,spaces,maj) : " read -r dMOTD echo -e "${Purple} Setting MOTD to Local motd file (/etc/motd)${BGreen} [OK]${Color_Off}" echo -e "$dMOTD" > /etc/motd echo -e "${Purple} Setting MOTD to SSHD motd file (/etc/ssh-motd)${BGreen} [OK]${Color_Off}" echo -e "$dMOTD" > /etc/ssh-motd echo -e "${Purple} Setting SSHD Configuration to SSHD .d file (/etc/ssh/sshd_config.d/999-banner)${BGreen} [OK]${Color_Off}" echo "Banner /etc/ssh-motd" > /etc/ssh/sshd_config.d/999-banner chmod 0600 /etc/ssh/sshd_config.d/999-banner chmod 0600 /etc/ssh-motd systemctl restart sshd sleep 3 fi accept="n" echo -n -e "${BBlue}$askfor${Color_Off} Change Timezone ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then echo -n -e "${BBlue}$askfor${Color_Off} Enter the Timezone (Zone/City) : " read -r tzone timedatectl set-timezone $tzone echo -e "${Purple} Setting Timezone to $tzone${BGreen} [OK]${Color_Off}" sleep 3 fi accept="n" ## DOCKER clear echo -e "${On_Blue}== Docker Community Edition - Installation Processing ==${Color_Off}" echo -n -e "${BBlue}$askfor${Color_Off} Install Docker ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then echo -e "${BYellow}$prefix${Color_Off} DNF-CFG:Adding Docker CE Repo (Auto Rel)..." dnf config-manager --add-repo=https://download.docker.com/linux/fedora/docker-ce.repo -y echo -e "$Color_Off" echo -e "${BYellow}$prefix${Color_Off} DNF:Updating Index..." echo -e "$BPurple" dnf up -y --refresh echo -e "$Color_Off" echo -e "$Color_Off" echo -e "${BYellow}$prefix${Color_Off} DNF:Installing docker-ce..." echo -e "$BPurple" dnf in docker-ce -y echo -e "$Color_Off" wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop chmod +x /usr/local/bin/ctop wget http://s.tyleodev.fr/host-binary/lazydocker -O /usr/local/bin/lzd chmod +x /usr/local/bin/lzd curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /bin/docker-compose chmod +x /bin/docker-compose echo -e "${BYellow}$prefix${Color_Off} SYS:Enabling Docker and Docker Socket..." systemctl enable docker.socket systemctl enable docker systemctl start docker.socket systemctl start docker sleep 3 fi accept="n" ## XRDP (RDS Mode, not recommended for Docker enabled host) clear echo -e "${On_Blue}== X-Server Remote Desktop Services - Installation Processing ==${Color_Off}" echo -n -e "${BBlue}$askfor${Color_Off} Install XRDP Server ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then dnf up -y echo -e "$Color_Off" echo -e "$BPurple" dnf in xrdp -y echo -e "$Color_Off" firewall-cmd --permanent --add-port=3389/tcp firewall-cmd --reload chcon --type=bin_t /usr/sbin/xrdp chcon --type=bin_t /usr/sbin/xrdp-sesman systemctl enable xrdp systemctl enable xrdp-sesman systemctl start xrdp systemctl start xrdp-sesman sleep 3 fi accept="n" ## GOOGLE CHROME // FOR RDS OR DESKTOP ONLY chrome_rpm="https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm" clear echo -e "== ${BBlue}G${BRed}o${BYellow}o${BBlue}g${BGreen}l${BRed}e${Color_Off} Chrome - Installation Processing ==" echo -n -e "${BBlue}$askfor${Color_Off} Install Google Chrome Browser ? (RDS or Desktop only !!)(Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then dnf up -y echo -e "$Color_Off" echo -e "$BPurple" dnf in -y $chrome_rpm echo -e "$Color_Off" sleep 3 fi # TERMINATED clear echo -e "${On_Green}== Script Finished - Reboot is Recommended ==${Color_Off}" echo -n -e "${BBlue}$askfor${Color_Off} Reboot Now ? (Y/n):" read -r accept if [[ $accept = Y ]] || [[ $accept = y ]] ; then echo -e "${BPurple}${BYellow}$prefix${Color_Off} Rebooting ...${Color_Off}" sleep 1 sudo reboot fi accept="n"