#!/bin/sh # # php-helper - a PHP module manager for Debian # # Copyright 2013-2015 Ondřej Surý # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of # the Software, and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. warning() { echo "WARNING: ${@}" >&2 } remove_state() { local action=$1 local version=$2 local sapi=$3 local modname=$4 local state_dir="$(get_state_dir "$version" "$sapi")" rm -f "${state_dir}/${action}_by_admin/${modname}" rm -f "${state_dir}/${action}_by_maint/${modname}" return 0 } mod_registry() { local action=$1 local version=$2 local modname=$3 local registry_dir="$(get_registry_dir "$version")" local registry_file="${registry_dir}/${modname}" case $action in register) if [ ! -d "$registry_dir" ]; then mkdir -p "$registry_dir" fi touch "$registry_file" ;; unregister) rm -f "$registry_file" ;; status) if [ -e "$registry_file" ]; then return 0 else return 1 fi ;; *) return 1 ;; esac return 0 } record_state() { local action=$1 local version=$2 local sapi=$3 local modname=$4 local state_dir="$(get_state_dir "$version" $sapi)" local admin_state="${state_dir}/${action}_by_admin/$modname" local maint_state="${state_dir}/${action}_by_maint/$modname" if [ -e "$admin_state" ]; then return fi if [ -e "$maint_state" ]; then if [ "$MAINT_MODE" = "yes" ]; then return else rm "$maint_state" fi fi # cleanup previous state remove_state disabled "$version" "$sapi" "$modname" remove_state enabled "$version" "$sapi" "$modname" if [ "$MAINT_MODE" = "yes" ]; then mkdir -p "$(dirname $maint_state)" touch "$maint_state" else mkdir -p "$(dirname $admin_state)" touch "$admin_state" fi return 0 } output() { if [ "$QUIET" != "yes" ]; then echo "$@" fi } get_priority() { local version=$1 local sapi=$2 local modname=$3 local source_ini="/etc/php/${version}/mods-available/${modname}.ini" module_ret=0 module_exists "$version" "$modname" || module_ret=$? if [ "$module_ret" -eq 0 ]; then priority=$(sed -ne "s/^;[[:space:]]*priority[[:space:]]*=[[:space:]]*\([0-9]\+\)[[:space:]]*$/\\1/p; /^[0-9]\+$/q" "$source_ini") [ -z "$priority" ] && priority=20 echo "$priority" return 0 fi return $module_ret } get_live_link() { local version=$1 local sapi=$2 local modname=$3 local priority=$4 echo "/etc/php/${version}/${sapi}/conf.d/${priority}-${modname}.ini" } get_live_link_content() { local version=$1 local sapi=$2 local modname=$3 local priority=$4 echo "/etc/php/${version}/mods-available/${modname}.ini" } module_exists() { local version=$1 local modname=$2 local source_ini="/etc/php/${version}/mods-available/${modname}.ini" if [ ! -r "${source_ini}" ]; then return 1 fi return 0 } get_state_dir() { local version=$1 local sapi=$2 echo "/var/lib/php/modules/${version}/${sapi}" return 0 } get_registry_dir() { local version=$1 echo "/var/lib/php/modules/${version}/registry" return 0 } get_version_dir() { echo "/usr/lib/php" return 0 } get_sapi_dir() { local version=$1 echo "/usr/lib/php/${version}/sapi" return 0 } list_parts() { local dir=$1 local regex=${2:-} if [ -d "$dir" ]; then find "$dir" -mindepth 1 -maxdepth 1 \! \( -name '*.dpkg-old' -name '*.dpkg-new' -name '*.dpkg-dist' -name '*~' -name '*.bak' -name '*.ucf-old' -name '*.ucf-new' -name '*.ucf-dist' -name '*%' \) -printf '%f\n' return $? else return 1 fi } list_parts_regex() { local dir=$1 local regex=$2 if [ -d "$dir" ]; then find "$dir" -mindepth 1 -maxdepth 1 -regex "$regex" -printf '%f\n' return $? else return 1 fi }