php-defaults/phpenmod

294 lines
7.2 KiB
Plaintext
Raw Normal View History

2015-07-13 17:21:48 +02:00
#!/bin/sh
#
# phpenmod - a PHP module manager for Debian
#
# Copyright 2013 Ondřej Surý <ondrej@sury.org>
#
# This program is licensed at your choice under the terms of the GNU General
# Public License version 2+ or under the terms of the PHP License 3.01.
#
# For GPL-2+:
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
#
# For PHP 3.01:
# This source file is subject to version 3.01 of the PHP license,
# that is bundled with this package in the file LICENSE, and is
# available through the world-wide-web at the following url:
# http://www.php.net/license/3_01.txt
# If you did not receive a copy of the PHP license and are unable to
# obtain it through the world-wide-web, please send a note to
# license@php.net so we can mail you a copy immediately.
#
set -ue
SCRIPT_NAME=${0##*/}
QUIET=no
NEED_RESTART=no
MAINT_MODE=no
. /usr/lib/php/php-helper
usage() {
[ -n "$@" ] && warning $@
echo "usage: ${SCRIPT_NAME} [ -v ALL|php_version ] [ -s ALL|sapi_name ] module_name [ module_name_2 ]"
exit 1
}
resolve_versions() {
local versions=$1
if [ "$versions" = "ALL" ]; then
versions=$(phpquery -V)
fi
echo $versions
}
resolve_sapis() {
local version=$1
local sapis=$2
if [ "$sapis" = "ALL" ]; then
sapis=$(phpquery -S -v $version)
fi
echo $sapis
}
enmods() {
local _versions="$1"
local _sapis="$2"
local mods="$3"
local register="$4"
local versions
local sapis
local version
local sapi
local mod
for mod in $mods; do
for version in $(resolve_versions "$versions"); do
for sapi in $(resolve_sapis $version "$sapis"); do
enmod_ret=0
enmod $version $sapi $mod || enmod_ret=$?
case $enmod_ret in
0)
NEED_RESTART=yes
record_state enabled $version $sapi $mod
;;
esac
done
done
if [ "$register" = "yes" ]; then
mod_registry register $mod
fi
done
}
dismods() {
local versions="$1"
local sapis="$2"
local mods="$3"
local register="$4"
local purge="$5"
local version
local sapi
local mod
for mod in $mods; do
for version in $(resolve_versions "$versions"); do
for sapi in $(resolve_sapis $version "$sapis"); do
local dismod_ret=0
dismod $version $sapi $mod $purge || dismod_ret=$?
case $dismod_ret in
0)
NEED_RESTART=yes
record_state disabled $version $sapi $mod
;;
esac
done
done
if [ "$purge" = "yes" ]; then
remove_state enabled $sapi $mod
remove_state disabled $sapi $mod
mod_registry unregister $mod
elif [ "$register" = "yes" ]; then
mod_registry unregister $mod
fi
done
}
enmod() {
local version=$1
local sapi=$2
local modname=$3
if ! module_exists $version $modname; then
warning "Module $modname ini file doesn't exist under /etc/php/${version}/mods-available"
return 1
fi
local priority=$(get_priority $version $sapi $modname)
local live_link=$(get_live_link $version $sapi $modname $priority)
local live_link_content=$(get_live_link_content $version $sapi $modname $priority)
local module_state=0
phpquery -q -v $version -s $sapi -m $modname || module_state=$?
case $module_state in
# module enabled, but re-enable the conf.d link just in case
0)
;;
# module not yet enabled
1)
;;
# module disabled by maintainer script
33)
;;
# module disabled by site administrator
# enable module only if not running in maintainer mode
32)
if [ "$MAINT_MODE" = "yes" ]; then
warning "Not enabling the ${modname} module for PHP ${version} ${sapi} SAPI since the module"
warning "was disabled by local administrator."
return 1
fi
;;
34)
warning "Not enabling the ${modname} module for PHP ${version} ${sapi} SAPI since module symlink"
warning "already exists in /etc/php/${version}/${sapi}/conf.d with different content."
return 1
;;
# fail if we get any different result
*)
warning "Unable to get module state, run phpquery -v $version -s $sapi -m $modname manually"
warning "and fix the module state."
return 1
esac
if [ -d "/etc/php/${version}/$sapi/conf.d" ]; then
if [ ! -h "${live_link}" ]; then
ln -s "${live_link_content}" "${live_link}"
fi
else
warning "Directory /etc/php/${version}/${sapi}/conf.d doesn't exist, not enabling the module"
return 1
fi
return 0
}
dismod() {
local version=$1
local sapi=$2
local modname=$3
local purge=$4
if ! module_exists $version $modname; then
if [ "$purge" = "no" ]; then
warning "Module $modname ini file doesn't exist under /etc/php/${version}/mods-available"
return 1
fi
fi
local priority=$(get_priority $version $sapi $modname)
local live_link=$(get_live_link $version $sapi $modname $priority)
local live_link_content=$(get_live_link_content $version $sapi $modname $priority)
local module_state=0
phpquery -q -v $version -s $sapi -m $modname || module_state=$?
case $module_state in
# module enabled
0)
;;
# module not enabled, but re-remove the link just in case
1|32|33)
;;
34)
warning "Not disabling module $modname for $sapi SAPI. The configuration was"
warning "modified by local administrator."
return 1
;;
# fail if we get any different result
*)
warning "Unable to get module state, run phpquery -v $version -s $sapi -m $modname manually"
warning "and fix the module state."
return 1
esac
if [ -d "/etc/php/$version/$sapi/conf.d" ]; then
if [ -h "$live_link" ]; then
rm -f "$live_link"
fi
fi
return 0
}
versions=
sapis=
register=no
purge=no
while getopts pfv:s:mqr opt; do
case $opt in
r) register=yes;;
v)
if [ "$versions" = "ALL" -o \( "$OPTARG" = "ALL" -a -n "$versions" \) ]; then
warning "You cannot specify ALL and individual versions"
usage
fi
versions="${versions}${versions:+ }$OPTARG"
;;
s)
if [ "$sapis" = "ALL" -o \( "$OPTARG" = "ALL" -a -n "$sapis" \) ]; then
warning "You cannot specify ALL and individual sapis"
usage
fi
sapis="${sapis}${sapis:+ }$OPTARG"
;;
m) MAINT_MODE=yes;;
p) purge=yes;;
q) QUIET=yes;;
\?) usage;;
esac
done
shift $(expr $OPTIND - 1)
mods=""
for mod in $@; do
mods="${mods}${mods:+ }${mod%%/*}"
done
if [ "$register" = "no" ]; then
sapis="${sapis:-ALL}"
if [ "$sapis" = "ALL" ]; then
register=yes
fi
fi
[ -z "$mods" ] && usage
case "${SCRIPT_NAME}" in
phpenmod)
enmods "$versions" "$sapis" "$mods" "$register"
;;
phpdismod)
dismods "$versions" "$sapis" "$mods" "$register" "$purge"
;;
*)
usage
;;
esac
exit 0