sshpc_server_install.sh
por EDSON - LAMBDA
—
última modificação
13/06/2023 11h31
sshpc_server_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_server_install.sh [OPTION]" echo "Installs sshpc on server" echo "Example sudo ./.sshpc_server_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 getent passwd sshpc > /dev/null && echo "user already exits" && exit 1 useradd -mNr sshpc echo "sshpc:sshpc2022" | sudo chpasswd local port="9123" sed -E -i "s/.*Port [0-9]+/Port ${port}/" /etc/ssh/sshd_config # TODO ajeitar isso # echo "ServerAliveInterval 60" >> /etc/ssh/sshd_config } 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" chown -R sshpc /home/sshpc else debugging "Client directory already exists"; fi } create_run_directories() { ### Checks for necessary run, runned and running directories if [ ! -f "${SSHPC_DIRECTORY}/run" ] || [ ! -f "${SSHPC_DIRECTORY}/runned" ] || [ ! -f "${SSHPC_DIRECTORY}/running" ]; then mkdir -p ${SSHPC_DIRECTORY}/{run,runned,running} && debugging "Creating necessary directories" else debugging "Necessary directories already exist"; fi } 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 } create_key() { ### Creates a ssh-key for the sshpc system user sudo -u sshpc ssh-keygen -t rsa -f "${SSHPC_DIRECTORY}"/.ssh/id_rsa -q -N "" } set_crontab() { ### Sets crontab routines # Sets verify to cron agenda to run every 5 minutes debugging "Adding verify routine to crontab" echo "* * * * * ${SSHPC_DIRECTORY}/.bin/sshpc_verify.sh -q" >> "${SSHPC_DIRECTORY}/agenda.txt" echo "@reboot find /home/sshpc/running -type f | xargs sed 's/#//' -i" >> "${SSHPC_DIRECTORY}/agenda.txt" echo "15 1 * * 1 reboot" >> "${SSHPC_DIRECTORY}/agenda.txt" crontab -u sshpc "${SSHPC_DIRECTORY}/agenda.txt" rm ${SSHPC_DIRECTORY}/agenda.txt # Updates sshpc.log on reboot to root debugging "Adding sshpc.log updates to crontab" sudo -u sshpc touch "${SSHPC_DIRECTORY}/sshpc.log" sudo chmod 666 "${SSHPC_DIRECTORY}/sshpc.log" echo "@reboot tail -f /var/log/auth.log >> /home/sshpc/sshpc.log" >> "${SSHPC_DIRECTORY}/agenda.txt &" sudo -u root crontab "${SSHPC_DIRECTORY}/agenda.txt" rm ${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_run_directories install_sshpc_scripts set_crontab create_key debugging "=============================\n||| Installation complete |||\n=============================" } main "$@"