#!/bin/bash # set -x # This script tries to install a bwLehrpool satellite server in a (hopefully) # automatic fashion. It is only verified to work on a Debian 8.x distribution. # While it may work on any recent Debian-derived distribution using systemd # this is not guaranteed in any way. # # If there were any errors in running this script do the following steps to # re-install: # 1. Un-outcomment the call to purge_install near the end of this script. # 2. re-run the script; ignore any errors like "ERROR 1045 (28000): Access # denied for user 'root'@'localhost'". This is caused by mysql root password # mismatch; it will vanish on the second run. purge_install will uninstall # the packages given in PACKAGELIST_SERVER _and_ purge their configuration. # 3. re-run the script again; then the mysql root password will be set to the # queried password entry. Then the mysql databases and users will be deleted. # 4. Out-comment the call to purge_install and run the script again for a clean # install. # This cumbersome way will be remedied in the future. [ -z "$1" ] && exec $(readlink -f "$0 --help") while [ -n "$1" ]; do case "$1" in "-h" | "--help") echo "#" echo "# bwSuite Server and environment autoinstaller" echo "#" echo "# Options: -h or --help for (this) help," echo "# -V or --version followed by a mandatory version string." echo "# -n or --nodelete to _not_ delete source code after installation." echo "#" echo "# Note: A version string must be given!" echo "#" echo "# If you need to change any predefined values, take a look into includes/00-variables.inc." echo "# and set them there." echo "#" exit ;; "-V" | "--version") shift export VERSION="$1" shift ;; "-n" | "--nodelete") NODELETE_SOURCE="true" shift ;; *) echo "# Restarting with --help ..." exec $(readlink -f "$0 --help") exit 0 # Never reached, but one for the aesthetics! ;; esac done # Some version string sanity checks: [ -z "$VERSION" ] && { echo "No version string has been given - exit."; exit 1; } [ "${VERSION:0:1}" = '-' ] && { echo "Possibly no version string has been given - exit."; exit 1; } # Set and save some environmental variables: OLDUMASK=$(umask) OLD_DEBIAN_FRONTEND="$DEBIAN_FRONTEND" # For other variables see includes/00-variables.inc export SELF="$(readlink -f "$0")" export BASEDIR="$(dirname "${SELF}")" # # TRAPPING hierhin! # # First, to include includes include them: echo -n "# Sourcing includes: " for INCLUDE in "$BASEDIR"/includes/*.inc; do echo -n "." source "$INCLUDE" done echo " ok" ####### Main program ####### system_upgrade # No harm done even if not necessary install_packages "$PACKAGELIST_SCRIPT" # Packages needed for script # Then, let's download the needed helper files to static_files, as there # is no sense in commencing if one of these files is missing. get_files_http [ "${ERR}" -ne 0 ] && exit 1 setup_dhcp # dhcp: no dhclient but pump uninstall_packages mpt-status prerequisites # config directory, locales # query_passwords set_passwords # only to be used within certain circumstances - # see includes/query_user. set_version_string # Writing version string for rc.local-script preset_mysql_root # so mysqld keeps quiet when installing add_repos # Adding repos: backports install_packages NOREC "$PACKAGELIST_SERVER" # Packages needed for server installable without # recommended packages, so option NOREC is set. install_packages RECOM "$PACKAGELIST_WITH_RECOMMENDS" # Packages where installation of recommended # packages is necessary, so opt. RECOM is set. check_users # Meet interesting users with uid>=1000 and kill them. # user 65534/sync will be ignored. add_users_groups # Adding necessary users and groups import_gpg sudo_config # Adding sudo config for user taskmanager add_mysql_dbs_users # mysql stuff; adding databases and users patch_mysql_config # adding utf8 entries to /etc/mysql/my.cnf patch_tftpd-hpa_config copy_tftpd-hpa_service patch_lighttpd_config patch_php_config write_tmate_config # here or elsewhere... patch_ldapsearch write_apt_config install_bwSuite_server "$DMSDDIR" install_dnbd3-server "$DNBD3DIR" install_taskmanager "$TASKMANDIR" install_ipxe "$IPXEDIR" compile_ipxe "$IPXEDIR" &>/tmp/ipxesuccess & # $1: tar.gz-file, $2: unpacking to directory unpack_tar_gz "$BASEDIR/static_files/slx-admin.tar.gz" "-C $WWWDIR/slx-admin" unpack_tar_gz "$BASEDIR/static_files/openslx_tftp.tar.gz" "-C $TFTPDIR" unpack_tar_gz "$BASEDIR/static_files/syslinux4.tar.gz" "-C $TFTPDIR" unpack_tar_gz "$BASEDIR/static_files/syslinux6.tar.gz" "-C $TFTPDIR/v6" install_ldadp "$LDADPDIR" || perror "Could not install ldadp" # NFS server configuration: config_nfs # Samba configuration: User and share # This is out-commented, as not needed recently # setup_samba # Copying a script to configure a static IP install_config_static_ip # Set a cronjob to cron.daily which cleans bwlp-* stuff from /tmp if older than 2 days # and images from /srv/openslx/nfs/temp install_tmpdelete # Sometimes a low device timeout has lead to problems. So we set a rule to increase the # block device timeout (sd*) from 30 to 180 using an udev rule. set_vmware_device_timeout # color prompt, aliases patch_bashrc # vim config patch_vim setup_logging # This part drops a script and anchors it's execution within root's .profile: drop_firstrun_script install_slxlog install_timesync # cheap HTTP based timesync on boot install_finalize # Script for cleaning some stuff after installation # Remove translation from menu etc. patch_slxadmin # Check dir and file permissions: set_directory_permissions # And set some symbolic links thereafter: set_links tar -z -c -T /dev/null -f /opt/openslx/empty.tgz # Mark vmstore as not mounted touch "/srv/openslx/nfs/.notmounted" # Write version string write_versionstring # cleaning log files, authorized hosts, sources clean_install end_message finalize # Cleaning script; finalize script will delete itself. [ "$NODELETE_SOURCE" != "true" ] && { echo "#"; echo "# Deleting source directory..."; rm -rf "$BASEDIR"; echo "# done."; } \ || { echo "#"; echo "# Not deleting source directory; nodelete option was given."; } echo "Warte auf eventuelle Hintergrundprozesse." wait cat /tmp/ipxesuccess && rm /tmp/ipxesuccess exit 0