sshpc_client_install.sh
por EDSON - LAMBDA
—
última modificação
13/06/2023 11h30
sshpc_client_install.sh — 4 KB
Conteúdo do arquivo
#!/bin/bash ######################################################################################### ## SSHPC - Cluster de processamento distribuído baseado em SSH ## ## ## ## Local: Laboratório Multiusuário de Bioinformática e Análise de Dados (LAMBDA) ## ## Centro de Biotecnologia (CBiotec), Universidade Federal da Paraíba (UFPB) ## ## Data: 30/05/2023 ## ## Coordenador: Edson Luiz Folador ## ## IC: Arthur Araújo de Lacerda ## ######################################################################################### readonly PROGNAME=$(basename "$0") readonly PROGDIR=$(readlink -m $(dirname "$0")) readonly SSHPC_DIRECTORY="/home/sshpc" # debugging flag debugging() { ${debug} && echo -e "$1"; } help() { echo "Usage: sudo ./sshpc_client_install.sh [OPTION]" echo "Installs sshpc on client" echo "Example sudo ./.sshpc_client_install.sh" echo echo "Options" echo -e "-q, --quiet\tDisables verbose" echo -e "-h, --help\tHelp function" } create_sshpc_user() { ### Creates sshpc system user # if user already exists, deletes user and procedes if getent passwd sshpc > /dev/null; then debugging "sshpc user already exists, creating a new one\n" userdel -fr sshpc >& /dev/null else debugging "Creating sshpc user" fi useradd -mNr sshpc > /dev/null echo "sshpc:sshpc2022" | sudo chpasswd local port="9123" if [[ -f /etc/ssh/sshd_config ]]; then sed -E -i "s/.*Port [0-9]+/Port ${port}/" /etc/ssh/sshd_config else debugging "OpenSSH-server required!\n install it, reboot the system and try again" exit 1 fi } create_bin() { ### Checks for .bin directory if [ ! -d "${SSHPC_DIRECTORY}/.bin" ]; then mkdir -p "${SSHPC_DIRECTORY}/.bin" && debugging "Creating client directories" mkdir -p "${SSHPC_DIRECTORY}/.ssh" && debugging "Creating ssh directories" touch "${SSHPC_DIRECTORY}/.ssh/authorized_keys" chown -R sshpc ${SSHPC_DIRECTORY} else debugging "Client directory already exists"; fi } create_config_file() { ### Checks for the config file if [ ! -f "${SSHPC_DIRECTORY}/.bin/sshpc.conf" ]; then touch ${SSHPC_DIRECTORY}/.bin/sshpc.conf && debugging "Creating config file" local lab local server local mac="$(cat /sys/class/net/en*/address | sed 's/://g')" local cores=$(nproc) local port=$(cat /etc/ssh/sshd_config | grep -Po "(?<=Port )(\d+)") echo -e "server=\"${server}\"\nport=\"${port}\"\nlab=\"${lab}\"\nmac=\"${mac}\"\ncores=\"${cores}\"" > "${SSHPC_DIRECTORY}/.bin/sshpc.conf" else debugging "Config file already exists" fi } install_bzip2() { ### Installing Bzip2 apt-get install bzip2 && debugging "Installing bzip2" } install_sshpc_scripts() { ### install worker from server debugging "Downloading server scripts" declare -a scripts_to_download=("sshpc_worker.sh" "sshpc_client_pair.sh") for script in "${scripts_to_download[@]}"; do debugging "Downloading ${script} script" if $debug; then wget "https://www.ufpb.br/lambda/contents/documentos/sshpc/${script}" -O "${SSHPC_DIRECTORY}/.bin/${script}" else wget -q "https://www.ufpb.br/lambda/contents/documentos/sshpc/${script}" -O "${SSHPC_DIRECTORY}/.bin/${script}"; fi chmod +x "${SSHPC_DIRECTORY}/.bin/${script}" done } set_crontab() { ### Sets worker to cron agenda to run every minute debugging "Adding routine to crontab" echo "* * * * * ${SSHPC_DIRECTORY}/.bin/sshpc_worker.sh -q" > "${SSHPC_DIRECTORY}/agenda.txt" crontab -u sshpc "${SSHPC_DIRECTORY}/agenda.txt" } main() { local debug=true while true; do case "$1" in -q | --quiet) debug=false; shift;; -h | --help) help; exit 0;; --) break;; *) break ;; esac done create_sshpc_user create_bin create_config_file install_bzip2 install_sshpc_scripts set_crontab debugging "=============================\n||| Installation complete |||\n=============================" } main "$@"