| #! /bin/sh |
| |
| # |
| # Laptop Mode Tools installer script |
| # ---------------------------------- |
| # |
| # You can configure this installer script by setting the following environment |
| # variables: |
| # |
| # DESTDIR = destination root directory. Leave empty for /. |
| # INIT_D = destination init.d directory. Set to "none" to disable the |
| # installation of init scripts. |
| # MAN_D = directory in which the manual pages are to be installed. This should |
| # be the base directory, e.g. /usr/local/man. |
| # INSTALL = command line for install program. By default, this is set to |
| # "install -o root -g root". |
| # |
| # These settings enable / disable support for power management hardware and |
| # daemons: |
| # |
| # ACPI=force / disabled / auto |
| # PMU=force / disabled / auto |
| # APM=force / disabled / auto |
| # |
| # For each of these settings, "force" means: install the files even if the |
| # system doesn't support the daemon. "disabled" means: never install the files, |
| # and "auto" means: autodetect if this power management method is supported. |
| # |
| |
| [ -z "$MAN_D" ] && MAN_D="/usr/man" |
| |
| if [ -z "$ACPI" ] ; then |
| ACPI=auto |
| [ -n "$DESTDIR" ] && ACPI=force |
| fi |
| if [ -z "$APM" ] ; then |
| APM=auto |
| [ -n "$DESTDIR" ] && APM=force |
| fi |
| if [ -z "$PMU" ] ; then |
| PMU=auto |
| [ -n "$DESTDIR" ] && PMU=force |
| fi |
| |
| if [ -z "$INIT_D" ] ; then |
| # Try non-link directories first, then try links. This helps if one of |
| # the locations is linked to another, which is the case on some distros. |
| if [ -d "$DESTDIR/etc/rc.d/init.d" -a ! -L "$DESTDIR/etc/rc.d/init.d" ] ; then |
| INIT_D="$DESTDIR/etc/rc.d/init.d" |
| elif [ -d "$DESTDIR/etc/rc.d" -a ! -L "$DESTDIR/etc/rc.d" -a ! -d "$DESTDIR/etc/rc.d/init.d" ] ; then |
| INIT_D="$DESTDIR/etc/rc.d" |
| elif [ -d "$DESTDIR/etc/init.d" -a ! -L "$DESTDIR/etc/init.d" ] ; then |
| INIT_D="$DESTDIR/etc/init.d" |
| elif [ -d "$DESTDIR/etc/rc.d/init.d" ] ; then |
| INIT_D="$DESTDIR/etc/rc.d/init.d" |
| elif [ -d "$DESTDIR/etc/rc.d" ] ; then |
| INIT_D="$DESTDIR/etc/rc.d" |
| elif [ -d "$DESTDIR/etc/init.d" ] ; then |
| INIT_D="$DESTDIR/etc/init.d" |
| elif [ -n "$DESTDIR" ] ; then |
| # We're going the package manager route -- make a guess, they |
| # will adapt it if needed. |
| INIT_D="$DESTDIR/etc/init.d" |
| else |
| echo "Cannot determine location of init scripts. Please modify install.sh." |
| exit 31 |
| fi |
| fi |
| |
| if [ "$INIT_D" != "none" ] ; then |
| if ( which invoke-rc.d > /dev/null ) ; then |
| # Debian uses invoke-rc.d |
| RCPROG=invoke-rc.d |
| INITSCRIPT=laptop-mode |
| elif ( which service > /dev/null ) ; then |
| # RedHat uses service |
| RCPROG=service |
| INITSCRIPT=laptop-mode |
| else |
| # Any other -- we start it ourselves. |
| RCPROG= |
| INITSCRIPT="$INIT_D/laptop-mode" |
| fi |
| fi |
| |
| if [ "`whoami`" != "root" -a -z "$DESTDIR" ] ; then |
| echo "You need to be root to install laptop mode tools." |
| exit 10 |
| fi |
| |
| if [ ! -f /proc/sys/vm/laptop_mode ] ; then |
| echo "Warning: the kernel you are running does not support laptop mode." |
| fi |
| |
| if [ "$INIT_D" != "none" -a -z "$DESTDIR" ] ; then |
| echo 'Stopping existing laptop mode service (if any).' |
| $RCPROG $INITSCRIPT stop |
| fi |
| |
| if [ -z "$INSTALL" ]; then |
| INSTALL="install -o root -g root" |
| fi |
| |
| $INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode" |
| $INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/batt-start" |
| $INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/batt-stop" |
| $INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/lm-ac-start" |
| $INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/lm-ac-stop" |
| $INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/nolm-ac-start" |
| $INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/nolm-ac-stop" |
| $INSTALL -d -m 755 "$DESTDIR/usr/share/laptop-mode-tools/modules" |
| $INSTALL -d -m 755 "$DESTDIR/usr/share/laptop-mode-tools/module-helpers" |
| $INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/conf.d" |
| $INSTALL -d -m 755 "$DESTDIR/etc/laptop-mode/modules" |
| $INSTALL -d -m 755 "$DESTDIR/usr/sbin" |
| $INSTALL -d -m 755 "$DESTDIR/$MAN_D/man8" |
| |
| ALREADY_EXISTED=0 |
| |
| if [ -f "$DESTDIR/etc/laptop-mode/laptop-mode.conf" ] ; then |
| echo "Not reinstalling configuration file: $DESTDIR/etc/laptop-mode/laptop-mode.conf exists." |
| ALREADY_EXISTED=1 |
| elif ( ! $INSTALL -m 644 etc/laptop-mode/laptop-mode.conf "$DESTDIR/etc/laptop-mode" ) ; then |
| echo "$0: Failed to install configuration file in $DESTDIR/etc/laptop-mode/laptop-mode.conf. Installation failed." |
| exit 12 |
| fi |
| |
| for CONF in etc/laptop-mode/conf.d/* ; do |
| if [ -f "$DESTDIR/$CONF" ] ; then |
| echo "Not reinstalling configuration file $DESTDIR/$CONF." |
| elif ( ! $INSTALL -m 644 "$CONF" "$DESTDIR/$CONF" ) ; then |
| echo "$0: Failed to install configuration file $DESTDIR/$CONF. Installation failed." |
| exit 12 |
| fi |
| done |
| |
| |
| if [ -f "$DESTDIR/etc/laptop-mode/lm-profiler.conf" ] ; then |
| echo "Configuration file $DESTDIR/etc/laptop-mode/lm-profiler.conf already exists." |
| elif ( ! $INSTALL -m 644 etc/laptop-mode/lm-profiler.conf "$DESTDIR/etc/laptop-mode" ) ; then |
| echo "$0: Failed to install configuration file in $DESTDIR/etc/laptop-mode/lm-profiler.conf. Installation failed." |
| exit 12 |
| fi |
| |
| if ( ! $INSTALL -m 755 usr/sbin/laptop_mode "$DESTDIR/usr/sbin" ) ; then |
| echo "$0: Failed to install $DESTDIR/usr/sbin/laptop_mode. Installation failed." |
| exit 11 |
| fi |
| |
| if ( ! $INSTALL -m 755 usr/sbin/lm-syslog-setup "$DESTDIR/usr/sbin" ) ; then |
| echo "$0: Failed to install $DESTDIR/usr/sbin/lm-syslog-setup. installation failed." |
| exit 25 |
| fi |
| |
| if ( ! $INSTALL -m 755 usr/sbin/lm-profiler "$DESTDIR/usr/sbin" ) ; then |
| echo "$0: Failed to install $DESTDIR/usr/sbin/lm-profiler. Installation failed." |
| exit 11 |
| fi |
| |
| if [ -f "$DESTDIR/usr/share/laptop-mode-tools/modules/core" ] ; then |
| if ( ! rm "$DESTDIR/usr/share/laptop-mode-tools/modules/core" ) ; then |
| echo "$0: Failed to install modules into /usr/share/laptop-mode-tools/modules. Installation failed." |
| exit 35 |
| fi |
| fi |
| |
| if ( ! $INSTALL -m 755 usr/share/laptop-mode-tools/modules/* "$DESTDIR/usr/share/laptop-mode-tools/modules" ) ; then |
| echo "$0: Failed to install modules into /usr/share/laptop-mode-tools/modules. Installation failed." |
| exit 26 |
| fi |
| |
| if ( ! $INSTALL -m 755 usr/share/laptop-mode-tools/module-helpers/* "$DESTDIR/usr/share/laptop-mode-tools/module-helpers" ) ; then |
| echo "$0: Failed to install module helpers into /usr/share/laptop-mode-tools/module-helpers. Installation failed." |
| exit 37 |
| fi |
| |
| if ( ! $INSTALL -m 744 man/* "$DESTDIR/$MAN_D/man8" ) ; then |
| echo "$0: Could not copy manual pages to $DESTDIR/$MAN_D/man8. Installation failed." |
| exit 23 |
| fi |
| |
| |
| # Install pm-utils hook only if pm-utils config dir is present, or force the |
| # install if we have a DESTDIR. |
| if [ -n "$DESTDIR" -o -d "$DESTDIR/usr/lib/pm-utils/sleep.d" ] ; then |
| if ( ! $INSTALL -D -m 755 usr/lib/pm-utils/sleep.d/99laptop-mode "$DESTDIR/usr/lib/pm-utils/sleep.d/99laptop-mode" ) ; then |
| echo "$0: Failed to install 99-laptop-mode into /usr/lib/pm-utils/sleep.d. Installation failed." |
| exit 36 |
| fi |
| fi |
| |
| |
| ACPI_DONE=0 |
| APM_DONE=0 |
| PMU_DONE=0 |
| |
| if [ "$ACPI" = "force" ] || [ "$ACPI" = "enabled" -a ! -d /proc/pmu -a -d "$DESTDIR/etc/acpi" ] ; then |
| $INSTALL -d -m 755 "$DESTDIR/etc/acpi/actions" |
| $INSTALL -d -m 755 "$DESTDIR/etc/acpi/events" |
| |
| # Remove the old action scripts, but not the old event files. Apparently, Gentoo handles |
| # its speedfreq using /etc/acpi/events/battery, and we were using that too. Simply removing |
| # the scripts and leaving the event files will hopefully cause acpid to notice that the |
| # files don't exist and leave it at that. |
| rm -f "$DESTDIR/etc/acpi/actions/battery.sh" "$DESTDIR/etc/acpi/actions/ac.sh" |
| |
| if ( ! $INSTALL -m 755 etc/acpi/actions/* "$DESTDIR/etc/acpi/actions" ) ; then |
| echo "$0: Failed to install ACPI action scripts in $DESTDIR/etc/acpi/actions. Installation failed." |
| exit 13 |
| fi |
| if ( ! $INSTALL -m 644 etc/acpi/events/* "$DESTDIR/etc/acpi/events" ) ; then |
| echo "$0: Failed to install ACPI event file in $DESTDIR/etc/acpi/events. Installation failed." |
| exit 14 |
| fi |
| if [ -z "$DESTDIR" ] ; then |
| killall -HUP acpid |
| fi |
| echo "Installed ACPI support." |
| ACPI_DONE=1 |
| fi |
| |
| if [ "$APM" = "force" ] || [ "$APM" = "enabled" -a ! -d /proc/pmu -a -d /etc/apm ] ; then |
| $INSTALL -d -m 755 "$DESTDIR/etc/apm/event.d" |
| if ( ! $INSTALL -m 755 etc/apm/event.d/* "$DESTDIR/etc/apm/event.d" ) ; then |
| echo "$0: Failed to install APM event script in $DESTDIR/etc/apm/event.d. Installation failed." |
| exit 15 |
| fi |
| echo "Installed APM support." |
| APM_DONE=1 |
| fi |
| |
| if [ "$PMU" = "force" ] || [ "$PMU" = "enabled" -a -d /proc/pmu -a -d /etc/power ] ; then |
| $INSTALL -d -m 755 "$DESTDIR/etc/power/event.d" |
| $INSTALL -d -m 755 "$DESTDIR/etc/power/scripts.d" |
| if ( ! $INSTALL -m 755 etc/power/scripts.d/laptop-mode "$DESTDIR/etc/power/scripts.d" ) ; then |
| echo "$0: Failed to install pbbuttonsd event script in $DESTDIR/etc/power/scripts.d. Installation failed." |
| exit 33 |
| fi |
| if ( ! ln -fs ../scripts.d/laptop-mode "$DESTDIR/etc/power/event.d" ) ; then |
| echo "$0: Failed to install pbbuttonsd event script in $DESTDIR/etc/power/event.d. Installation failed." |
| exit 34 |
| fi |
| if [ -f "$DESTDIR/etc/power/pwrctl" ] ; then |
| if ( ! grep pwrctl-local "$DESTDIR/etc/power/pwrctl" ) ; then |
| echo "WARNING: "$DESTDIR/etc/power/pwrctl" does not call pwrctl-local. Laptop mode will not start automatically when you use pmud." |
| fi |
| if [ ! -f "$DESTDIR/etc/power/pwrctl-local" ] ; then |
| echo >> "$DESTDIR/etc/power/pwrctl-local" |
| fi |
| if ( ! grep laptop_mode "$DESTDIR/etc/power/pwrctl-local" ) ; then |
| if (! grep -q "#\!" "$DESTDIR/etc/power/pwrctl-local" ); then |
| sed -i -e "1i\\#! /bin/sh" "$DESTDIR/etc/power/pwrctl-local" |
| fi |
| sed -i -e "2i\\/usr/bin/laptop_mode auto" "$DESTDIR/etc/power/pwrctl-local" |
| else |
| echo "/etc/power/pwrctl-local already seems to contain a laptop mode call. Not adding an extra one." |
| fi |
| fi |
| if [ -f "$DESTDIR/etc/apm/event.d/laptop-mode" -a -z "$DESTDIR" ] ; then |
| # This file interferes with the pbbuttonsd integration, |
| # because pbbuttonsd also emulates APM, so we have to |
| # remove it. |
| |
| # We don't do this when DESTDIR != "", because that means we're |
| # doing an install for a package manager. |
| rm "$DESTDIR/etc/apm/event.d/laptop-mode" |
| fi |
| echo "Installed PMU (pmud/pbbuttonsd) support." |
| PMU_DONE=1 |
| fi |
| |
| if [ $APM_DONE -eq 0 -a $ACPI_DONE -eq 0 -a $PMU_DONE -eq 0 ] ; then |
| echo "ACPI/APM/PMU support was not installed. Laptop mode will not start automatically." |
| echo "Install either acpid, apmd, pbbuttonsd or pmud (depending on what your laptop supports) and reinstall." |
| fi |
| |
| if [ "$INIT_D" != "none" ] ; then |
| if [ -d "$INIT_D" -o -n "$DESTDIR" ] ; then |
| $INSTALL -d -m 755 "$INIT_D" |
| if ( ! $INSTALL -m 755 etc/init.d/laptop-mode "$INIT_D" ) ; then |
| echo "$0: failed to install init script in $INIT_D. Installation failed." |
| exit 16 |
| fi |
| if [ -f "$DESTDIR/etc/rcS.d/S99laptop_mode" ] ; then |
| # Old symlink. |
| rm "$DESTDIR/etc/rcS.d/S99laptop-mode" |
| fi |
| if [ -z "$DESTDIR" ] ; then |
| if ( which update-rc.d > /dev/null ) ; then |
| update-rc.d -f laptop-mode remove |
| if ( ! update-rc.d laptop-mode defaults 99 ) ; then |
| echo "$0: update-rc.d failed, laptop mode will not be initialized at bootup." |
| exit 17 |
| fi |
| elif ( which chkconfig > /dev/null ) ; then |
| if ( ! chkconfig laptop-mode on ) ; then |
| echo "$0: chkconfig failed, laptop mode will not be initialized at bootup." |
| exit 30 |
| fi |
| fi |
| else |
| # Package manager's route: don't install the init script for |
| # any particular runlevels. Since we don't have chkconfig or |
| # update-rc.d available, we can't know for sure how this should |
| # be done. |
| /bin/true |
| fi |
| else |
| echo "Directory $INIT_D not found: not installing script to initialize" |
| echo "laptop mode at boot time." |
| fi |
| |
| if [ -z "$DESTDIR" ] ;then |
| if ( ! $RCPROG $INITSCRIPT start ) ; then |
| echo "$0: Could not start laptop mode init script /etc/init.d/laptop-mode." |
| exit 24 |
| fi |
| fi |
| |
| # Check for acpid and restart if running |
| acpi_pid=`pidof acpid` |
| if [ ! -z $acpi_pid ]; then |
| echo "Reloading acpid daemon" |
| killall -SIGHUP acpid; |
| fi |
| |
| apm_pid=`pidof apmd` |
| if [ ! -z $apm_pid ]; then |
| echo "Reloading apmd daemon" |
| killall -SIGHUP apmd; |
| fi |
| |
| pbbuttonsd_pid=`pidof pbbuttonsd` |
| if [ ! -z $pbbuttonsd_pid ]; then |
| echo "Reloading pbbuttonsd daemon" |
| killall -SIGHUP pbbuttonsd; |
| fi |
| |
| pmud_pid=`pidof pmud` |
| if [ ! -z $pmud_pid ]; then |
| echo "Reloading pmud daemon" |
| killall -SIGHUP pmud; |
| fi |
| fi |
| |
| echo "Installation complete." |