#!/bin/bash # set -x PS=$(which ps) GREP=$(which grep) LOGGER=$(which logger) MKDIR=$(which mkdir) MOUNT=$(which mount) MOUNTDIR=/mnt/diskmount/ SERVICEUTIL=openslx-utility.service SERVICEUMOUNT=openslx-umount.service SERVICEDISKMOUNT=$(echo "$MOUNTDIR" |tr / -|sed 's:^-::;s:-$::').mount # mounter needs to be named like that... or else! TARGET=$(systemctl get-default) # systemd erkennen case $(${PS} --pid 1 -o comm h) in systemd) echo "openslx praeinstaller: systemd detected." if [ -d /etc/systemd/system ]; then SERVICEDIR=/etc/systemd/system/ else SERVICEDIR=/lib/systemd/system/ fi if [ -L "${SERVICEDIR}/graphical.target.wants/${SERVICEMOUNT}" ] \ || [ -L "${SERVICEDIR}/graphical.target.wants/${SERVICEUMOUNT}" ] \ || [ -L "${SERVICEDIR}/graphical.target.wants/${SERVICERESOLUTION}" ]; then while [ "$RESCRIPT" != "y" ] && [ "$RESCRIPT" != "n" ]; do RESCRIPTDEF=y read -e -p "There seems to an older install. Delete (y/n, Default is $RESCRIPTDEF, Ctrl-C to exit): " RESCRIPT RESCRIPT="${RESCRIPT:-$RESCRIPTDEF}" done fi if [ "${RESCRIPT}" == "y" ]; then # Just unlink stuff... echo "Deleting old links..." unlink "${SERVICEDIR}/graphical.target.wants/${SERVICEMOUNT}" 2>/dev/null unlink "${SERVICEDIR}/shutdown.target.wants/${SERVICEUMOUNT}" 2>/dev/null unlink "${SERVICEDIR}/basic.target.wants/${SERVICERESOLUTION}" 2>/dev/null fi echo "openslx praeinstaller: installing systemd service (floppy disk mounter) to ${SERVICEDIR}/${SERVICEDISKMOUNT}." cat <<-HEREDOC > "$SERVICEDIR"/"$SERVICEDISKMOUNT" [Unit] Description=Mount pseudofloppy fd1 [Mount] What=/dev/fd1 Where=/mnt/diskmount Type=vfat Options=defaults HEREDOC echo "openslx praeinstaller: installing systemd service (openslx utility script) to ${SERVICEDIR}/${SERVICEUTIL}." cat <<-HEREDOC > "${SERVICEDIR}"/"${SERVICEUTIL}" [Unit] Description=openslx utility script After=$TARGET Requires=${SERVICEDISKMOUNT} DefaultDependencies=no [Service] Type=oneshot ExecStart=${LOGGER} "openslx utility script: starting." ExecStart=${MOUNTDIR}/linux/openslx ExecStart=${LOGGER} "openslx service file: done." RemainAfterExit=yes HEREDOC echo "openslx praeinstaller: installing systemd service (umounter) to ${SERVICEDIR}/${SERVICEUMOUNT}." cat <<-THEREDOC > "$SERVICEDIR"/"${SERVICEUMOUNT}" [Unit] Description=openSLX umount utility Before=shutdown.target DefaultDependencies=no [Service] Type=oneshot ExecStart=${LOGGER} "openslx service file: umounter started." ExecStart=${MOUNTDIR}/linux/umnt_shares ExecStart=${LOGGER} "openslx service file: done." RemainAfterExit=no THEREDOC [ ! -d "$SERVICEDIR"/"${TARGET}".wants ] && mkdir "$SERVICEDIR"/"${TARGET}".wants 2>/dev/null [ ! -d "$SERVICEDIR"/shutdown.target.wants ] && mkdir "$SERVICEDIR"/shutdown.target.wants 2>/dev/null # some distr. eg. Suse seem to want these: # [ ! -d "$SERVICEDIR"/reboot.target.wants ] && mkdir "$SERVICEDIR"/reboot.target.wants 2>/dev/null # [ ! -d "$SERVICEDIR"/halt.target.wants ] && mkdir "$SERVICEDIR"/halt.target.wants 2>/dev/null ln -s "${SERVICEDIR}"/"${SERVICEUTIL}" "$SERVICEDIR"/"${TARGET}".wants/"${SERVICEUTIL}" ln -s "${SERVICEDIR}"/"${SERVICEUMOUNT}" "$SERVICEDIR"/shutdown.target.wants/"${SERVICEUMOUNT}" # ln -s "${SERVICEDIR}"/"${SERVICEUMOUNT}" "$SERVICEDIR"/reboot.target.wants/"${SERVICEUMOUNT}" # ln -s "${SERVICEDIR}"/"${SERVICEUMOUNT}" "$SERVICEDIR"/halt.target.wants/"${SERVICEUMOUNT}" echo "openslx praeinstaller: doing systemd reload." systemctl daemon-reload ;; init) echo "openslx praeinstaller: init(V) detected." SERVICEDIR=/etc/init.d/ [ ! -d "${SERVICEDIR}" ] && { echo "openslx praeinstaller: No init directory $SERVICEDIR found, exiting."; exit 1; } SERVICEFILE=openslx-scriptinstall echo "openslx praeinstaller: installing init service file to ${SERVICEDIR}/${SERVICEFILE}." cat <<-THEREDOC > "${SERVICEDIR}"/"${SERVICEFILE}" #!/bin/sh -e ### BEGIN INIT INFO # Provides: openSLX_scriptinstaller # Required-Start: 2 3 4 5 # Required-Stop: 0 1 6 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: false # Short-Description: openSLX script package starter. ### END INIT INFO # # Starts via Xsetup patching the openSLX script package # to correct screen resolution and mount network shares # when Xsetup is started. case "\$1" in start) ${LOGGER} "openslx init file: started." ${MKDIR} -p /mnt/diskmount ${MOUNT} | ${GREP} -q /mnt/diskmount || ${MOUNT} /dev/fd1 /mnt/diskmount ${MOUNTDIR}/linux/vm_runtime ${LOGGER} "openslx init file: done." ;; stop|restart|force-reload) exit 0 ;; *) echo "Usage: $0 {start}" >&2; exit 1 ;; esac THEREDOC chmod +x "${SERVICEDIR}"/"${SERVICEFILE}" echo "openslx praeinstaller: enabling ${SERVICEFILE}." update-rc.d "${SERVICEFILE}" defaults ;; *) echo "openslx praeinstaller: Could not determine mother-of-all-processes (not systemd, not init)." echo "openslx praeinstaller: Giving up, exiting." exit 1 esac exit 0