#!/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 the current Debian release. # While it may work on any recent Debian-derived distribution using systemd # this is not guaranteed in any way. # # This installer is destructive and not idempotent. Only run on a clean Debian # install. Take a snapshot/backup before applying this, so you can start # over in case of failure. [ -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 # until pump is available again: # 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 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 install_ipxe "$IPXEDIR" compile_ipxe "$IPXEDIR" &>/tmp/ipxesuccess & add_mysql_dbs_users # mysql stuff; adding databases and users patch_mysql_config # adding utf8 entries to /etc/mysql/my.cnf write_tftpd_config patch_lighttpd_config patch_php_config # This takes a lot of time, so any background stuff before this. patch_ldapsearch patch_java install_bwSuite_server "$DMSDDIR" install_dnbd3-server "$DNBD3DIR" install_taskmanager "$TASKMANDIR" install_jawol "/usr/local/sbin" # $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" install_ldadp "$LDADPDIR" || perror "Could not install ldadp" # NFS server configuration: config_nfs install_system_scripts # color prompt, aliases patch_bashrc # vim config patch_vim install_timesync # cheap HTTP based timesync on boot # Remove translation from menu etc., enable required modules patch_slxadmin_dir # Check dir and file permissions: set_directory_permissions # And set some symbolic links thereafter: set_links # Create tables, fill with predefined stuff install_slxadmin_db 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 # This part drops a script and anchors it's execution within root's .profile # Do this at the end so it's not there if something failed drop_firstrun_script 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 vor Beendigung auf eventuelle Hintergrundprozesse." echo "iPXE-Kompilationslog wurde nach /tmp/ipxesuccess geschrieben." wait exit 0