#!/bin/bash declare BASE_URL=https://git.netm.ch/m/os-init/raw/branch/main declare DIR_URL=fedora-44 IPV4=127.0.0.1 showHelp() { echo "init.sh" echo "" echo "usage :" echo "bash init.sh [options]" echo " -b | --base-url url" } InitConst() { IPV4=$(ip addr | grep 'inet ' | grep -v '127.0' | head -n1 | awk '{print $2}' | cut -f1 -d /) } Main() { InitConst NetSetHostname NetIPConfig #DNFSetProxy DNFUpdateDist DNFInstallBase DNFCleanAll BashSetAlias BashSetPS NanoSetConfig IssueSetContent SSHEnableRootLogin GrubSetConfig InstApps Reboot } NetSetHostname() { hostname=$(hostname) hostname=$(whiptail --title "Hostname + Domain" --inputbox "" 0 30 "${hostname}" 3>&1 1>&2 2>&3) # shellcheck disable=SC2181 if [ "$?" = "0" ] && [ "${hostname}" != "" ]; then hostnamectl set-hostname "${hostname}" fi } NetIPConfig() { options=() options+=("DHCP" "") options+=("Static" "") sel=$(whiptail --title "Network" --menu "" 0 0 0 "${options[@]}" 3>&1 1>&2 2>&3) # shellcheck disable=SC2181 if [ "$?" = "0" ]; then case ${sel} in "Static") NetIPConfigStatic;; esac fi } NetIPConfigStatic() { netif="$(ip a | grep ens | head -n1 | cut -d: -f2)" netif=${netif:1} netip="${IPV4}" netmask="24" netgw="$(echo "${IPV4}" | cut -d. -f1-3).1" netdns="$(echo "${IPV4}" | cut -d. -f1-3).1" netip=$(whiptail --title "Network" --inputbox "IP" 0 30 "${netip}" 3>&1 1>&2 2>&3) # shellcheck disable=SC2181 if [ "$?" = "0" ] && [ "${netip}" != "" ]; then netmask=$(whiptail --title "Network" --inputbox "Mask" 0 30 "${netmask}" 3>&1 1>&2 2>&3) if [ "$?" = "0" ] && [ "${netmask}" != "" ]; then netgw=$(whiptail --title "Network" --inputbox "Route" 0 30 "${netgw}" 3>&1 1>&2 2>&3) if [ "$?" = "0" ] && [ "${netgw}" != "" ]; then netdns=$(whiptail --title "Network" --inputbox "DNS" 0 30 "${netdns}" 3>&1 1>&2 2>&3) if [ "$?" = "0" ] && [ "${netdns}" != "" ]; then NETDEVICE=$(nmcli -t -f DEVICE connection show --active | head -n1) NETNAME=$(nmcli -t -f NAME connection show --active | head -n1) nmcli connection modify "${NETNAME}" \ ipv4.method manual \ ipv4.addresses "${netip}/${netmask}" \ ipv4.gateway "${netgw}" \ ipv4.dns "${netdns}" nmcli device reapply "${NETDEVICE}" && nmcli connection up "${NETNAME}" fi fi fi fi } DNFUpdateDist() { dnf -y upgrade } DNFInstallBase() { options=() options+=("curl" "" on) options+=("wget" "" on) options+=("lsof" "" on) options+=("bash-completion" "" on) options+=("nano" "" on) options+=("openssh-server" "" on) options+=("gnupg" "" on) options+=("rsync" "" on) options+=("nmon" "" on) options+=("snmpd" "" on) sel=$(whiptail --title "Basic Install" --checklist "" 0 0 0 "${options[@]}" 3>&1 1>&2 2>&3) # shellcheck disable=SC2181 if [ "$?" = "0" ]; then pkg="" for itm in ${sel}; do pkg="${pkg} $(echo "${itm}" | sed 's/"//g')" done # shellcheck disable=SC2086 dnf -y install ${pkg} for itm in ${sel}; do case ${itm} in '"snmpd"') SNMPDConfig;; esac done fi } DNFCleanAll() { dnf -y autoremove } BashSetAlias() { wget -O /etc/profile.d/alias.sh "${BASE_URL}"/"${DIR_URL}"/files/alias.sh } BashSetPS() { wget -O /etc/profile.d/ps1.sh "${BASE_URL}"/"${DIR_URL}"/files/ps1.sh } NanoSetConfig() { sed -i "/tabsize/c\set tabsize 2" /etc/nanorc { echo "set numbercolor brightwhite" echo "set statuscolor brightwhite,green" echo "set keycolor cyan" echo "set functioncolor green" } >> /etc/nanorc { echo "set titlecolor brightwhite,red" echo "set statuscolor brightwhite,red" } > /root/.nanorc } IssueSetContent() { wget -O /etc/issue "${BASE_URL}"/"${DIR_URL}"/files/issue } SNMPDConfig() { cummunityname=public cummunityname=$(whiptail --title "SNMP Community name" --inputbox "" 0 30 "${cummunityname}" 3>&1 1>&2 2>&3) mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak wget -O /etc/snmp/snmpd.conf "${BASE_URL}"/"${DIR_URL}"/files/snmpd.conf sed -i "s/COMMUNITY/${cummunityname}/" /etc/snmp/snmpd.conf systemctl restart snmpd } SSHEnableRootLogin() { sed -i "/PermitRootLogin prohibit-password/c\PermitRootLogin yes #prohibit-password" /etc/ssh/sshd_config systemctl restart sshd } GrubSetConfig() { if [ -f "/etc/default/grub" ]; then sed -i "/GRUB_TIMEOUT/c\GRUB_TIMEOUT=1" /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg fi } InstApps() { options=() options+=("nvtop" "" off) options+=("nvidia" "" off) options+=("nvidia-cuda" "" off) options+=("nvidia-container-toolkit" "" off) options+=("docker" "" off) SEL=$(whiptail --title "More Apps" --checklist "" 0 0 0 "${options[@]}" 3>&1 1>&2 2>&3) # shellcheck disable=SC2181 if [ "$?" = "0" ]; then for ITM in ${SEL}; do case ${ITM//\"/} in *) cd /tmp || exit wget "${BASE_URL}"/${DIR_URL}/apps/"${ITM//\"/}"/"${ITM//\"/}".sh bash ./"${ITM//\"/}".sh "${BASE_URL}"/${DIR_URL}/apps/"${ITM//\"/}";; esac done fi } Reboot() { if whiptail --yesno "Reboot ?" 0 0 3>&1 1>&2 2>&3; then reboot fi } while [ ${#} -gt 0 ]; do case ${1} in --help) showHelp; exit 0;; -b | --base-url) BASE_URL="${2}"; shift;; *) shift;; esac done Main