# Adapted from : # http://bazaar.launchpad.net/~marionnet-drivers/marionnet/trunk/view/head:/useful-scripts/marionnet_from_scratch # (LGPL) post_install () { echo -e "* Marionnet installation completed\n\n" echo -e "Post installation hook" echo -e "——————————————————————\n" # ============================================================= # Adjust X -nolisten tcp # ============================================================= # Here $SUDO_OR_NOTHING is null tmpfile=$(mktemp /tmp/marionnetInstallTmpXXXXXXX) function remove_nolisten_assignment_from { # global SUDO_OR_NOTHING local i=$1 $SUDO_OR_NOTHING sed -i -e 's/\(^[a-ZA-Z0-9]*[=].*[-]nolisten tcp.*\)$/#\1\n\1/g' $i $SUDO_OR_NOTHING sed -i -e 's/\(^[a-ZA-Z0-9]*[=].*\)[-]nolisten tcp\(.*\)$/\1 \2/g' $i } function remove_nolisten_X_or_startx_actuals_from { # global SUDO_OR_NOTHING local i=$1 $SUDO_OR_NOTHING sed -i -e 's/\(^[a-ZA-Z0-9/: ]*X.*\)[-]nolisten tcp\(.*\)$/\1\2/g' $i $SUDO_OR_NOTHING sed -i -e 's/\(^[a-ZA-Z0-9/: ]*startx.*\)[-]nolisten tcp\(.*\)$/\1\2/g' $i } function remove_DisallowTCP_from { # global SUDO_OR_NOTHING local i=$1 $SUDO_OR_NOTHING sed -i -e 's/\(^DisallowTCP=true.*\)$/#\1\nDisallowTCP=false/g' $i } # Sections in file have the form "[security]" function ensure_section_and_binding { [[ $# -ge 3 ]] || return 1 local SECTION=$1 # ex: security local VARIABLE=$2 # ex: Enable local VALUE=$3 # ex: true local AWK_PROGRAM shift 3 AWK_PROGRAM=" BEGIN {x=0} /\[$SECTION\]/ {x=1;print;next} (x==1) && /$VARIABLE=.*/ {print \"$VARIABLE=$VALUE\"; x=2; next} (x==1) && /\[.*\]/ {print \"$VARIABLE=$VALUE\n\"; print; x=2; next} /\[.*\]/ {print;next} {print} END {if (x==0) print \"[$SECTION]\"; if (x==0 || x==1) print \"$VARIABLE=$VALUE\n\";}" case $# in 0) awk "$AWK_PROGRAM" ;; *) local i local TMPFILE=$(tmpfile) for i in "$@"; do awk 0<"$i" 1>$TMPFILE "$AWK_PROGRAM" cat $TMPFILE 1>"$i" done rm $TMPFILE ;; esac } # This is needed, for instance, for ubuntu 10.10 function ensure_DisallowTCP_false_to_gdm_custom_dot_conf { # global SUDO_OR_NOTHING CHANGED_FILES local custom=${1:-/etc/gdm/custom.conf} local TMPFILE=$(tmpfile) cp $custom $TMPFILE ensure_section_and_binding "security" "DisallowTCP" "false" $TMPFILE ensure_section_and_binding "xdmcp" "Enable" "true" $TMPFILE if ! diff -q $custom $TMPFILE >/dev/null; then CHANGED_FILES+="$custom " $SUDO_OR_NOTHING bash -c "cat $TMPFILE >$custom" fi } # This is needed, for instance, for ubuntu 12.04 function ensure_xserver_allow_tcp_in_lightdm_dot_conf { # global SUDO_OR_NOTHING CHANGED_FILES local custom=${1:-/etc/lightdm/lightdm.conf} local TMPFILE=$(tmpfile) cp $custom $TMPFILE ensure_section_and_binding "SeatDefaults" "xserver-allow-tcp" "true" $TMPFILE if ! diff -q $custom $TMPFILE >/dev/null; then CHANGED_FILES+="$custom " $SUDO_OR_NOTHING bash -c "cat $TMPFILE >$custom" fi } function apply_all_filters { # global CHANGED_FILES local i=$1 cat $i > $BACKUP { remove_nolisten_assignment_from $i; remove_DisallowTCP_from $i; remove_nolisten_X_or_startx_actuals_from $i; } || true diff -q $BACKUP $i >/dev/null || { CHANGED_FILES+="$i " } } function adjust_X_display_manager { # global SUDO_OR_NOTHING CHANGED_FILES local BACKUP=$(tmpfile) DIRS=$($SUDO_OR_NOTHING find /etc/ -type d -name "?dm") if [[ -d /etc/X11/xinit ]]; then DIRS+=" /etc/X11/xinit/"; fi FILES=$([[ -n $DIRS ]] && $SUDO_OR_NOTHING find $DIRS -name "*rc" -o -name "*.conf") FILES=$(for i in $FILES; do grep -l "^[a-zA-Z0-9/_\-= ]*[-]nolisten tcp" $i; done) for i in $FILES; do apply_all_filters $i; done rm -f $BACKUP # A special case: gdm/gdm3 : if [[ -d /etc/gdm ]]; then $SUDO_OR_NOTHING touch /etc/gdm/custom.conf ensure_DisallowTCP_false_to_gdm_custom_dot_conf elif [[ -d /etc/gdm? ]]; then $SUDO_OR_NOTHING touch /etc/gdm?/custom.conf /etc/gdm?/daemon.conf ensure_DisallowTCP_false_to_gdm_custom_dot_conf /etc/gdm?/custom.conf ensure_DisallowTCP_false_to_gdm_custom_dot_conf /etc/gdm?/daemon.conf fi # Another special case: lightdm if [[ -d /etc/lightdm ]]; then $SUDO_OR_NOTHING touch /etc/lightdm/lightdm.conf ensure_xserver_allow_tcp_in_lightdm_dot_conf fi [[ -n $CHANGED_FILES ]] } if ps -A -o cmd | grep -q '^[a-zA-Z0-9/]*X.*[-]nolisten tcp'; then echo -e "\n---" echo "=============================================================" echo " Warning readme" echo " Warning readme" echo "=============================================================" echo "* Warning: your X server has been launched with the option '-nolisten tcp'" echo " => This option should be removed from your X display manager configuration." echo -n " Shall I try to fix it ([y]/n)? " read z if [[ $z != n && $z != N ]]; then if adjust_X_display_manager; then echo " Ok. File(s) changed: $CHANGED_FILES" echo " You must restart your X display manager for the changes to take effect." else echo " Sorry, no change performed: you must edit your configuration manually." fi fi else echo -e "\n* Your X server hasn't been launched with the option \ '-nolisten tcp' : good." fi # ============================================================= # Daemon information # ============================================================= echo "=============================================================" echo " Daemon information " echo "=============================================================" echo -e "* Before start Marionnet, you must start the daemon :" echo "sudo systemctl start marionnetdaemon.service" # ============================================================= # Install marionnet_kernels and filesystems # ============================================================= echo "=============================================================" echo " Downlading " echo "=============================================================" echo "* Downloading script marionnet_from_scratch : " wget http://www.marionnet.org/downloads/marionnet_from_scratch/marionnet_from_scratch echo "* Downlading and installing Marionnet kernels and filesystems (Linux \ distributions Debian Lenny, Mandriva, Pinocchio, etc.)" echo -e "Warning! this process may take several hours!" echo -e "* Command : \`./marionnet_from_scratch --download-only -m trunk \ --prefix /opt/marionnet\`" chmod +x ./marionnet_from_scratch ./marionnet_from_scratch --download-only -m trunk --prefix /opt/marionnet echo "* Post installation completed———\n\n\n" } post_remove() { echo -e "* Uninstallation process completed\n\n" echo -e "Post remove hook" echo -e "——————————————————————\n" echo "=============================================================" echo " Remove Marionnet kernels" echo "=============================================================" rm -Rf /usr/share/marionnet } # vim: ft=sh