Améliorer le déploiement uinst:rsync avec préfixes pour les hôtes distants

This commit is contained in:
Jephte CLAIN 2015-08-23 22:56:23 +04:00
parent 1e2e568bf7
commit dcb85ac759
9 changed files with 277 additions and 119 deletions

View File

@ -15,3 +15,11 @@ function compute_all_prefixes() {
compute_ldap_prefixes compute_ldap_prefixes
compute_crontab_prefixes compute_crontab_prefixes
} }
function recompute_all_prefixes() {
recompute_java_prefixes
recompute_webobjects_prefixes
recompute_apache_prefixes
recompute_ldap_prefixes
recompute_crontab_prefixes
}

View File

@ -6,6 +6,9 @@
uprovide apache uprovide apache
urequire base sysinfos urequire base sysinfos
# Si aucun chemin n'est trouvé, retourner la première valeur
APACHE_PREFIXES_CHECK_OR_FIRST=
function __apache_prefixes_checkdir() { function __apache_prefixes_checkdir() {
local dir local dir
for dir in "$@"; do for dir in "$@"; do
@ -14,6 +17,7 @@ function __apache_prefixes_checkdir() {
return 0 return 0
fi fi
done done
[ -n "$APACHE_PREFIXES_CHECK_OR_FIRST" -a -n "$1" ] && echo "$1"
return 1 return 1
} }
@ -25,6 +29,7 @@ function __apache_prefixes_checkfile() {
return 0 return 0
fi fi
done done
[ -n "$APACHE_PREFIXES_CHECK_OR_FIRST" -a -n "$1" ] && echo "$1"
return 1 return 1
} }
@ -36,6 +41,7 @@ function __apache_prefixes_checkexec() {
return 0 return 0
fi fi
done done
[ -n "$APACHE_PREFIXES_CHECK_OR_FIRST" -a -n "$1" ] && echo "$1"
return 1 return 1
} }
@ -133,7 +139,9 @@ function get_default_htdocsdir_prefix() {
if check_sysinfos -s darwin; then if check_sysinfos -s darwin; then
__apache_prefixes_checkdir /Library/WebServer/Documents __apache_prefixes_checkdir /Library/WebServer/Documents
elif check_sysinfos -s linux; then elif check_sysinfos -s linux; then
if check_sysinfos -d debianlike; then if check_sysinfos -d debian -v jessie+; then
__apache_prefixes_checkdir /var/www/html
elif check_sysinfos -d debianlike; then
__apache_prefixes_checkdir /var/www __apache_prefixes_checkdir /var/www
elif check_sysinfos -d redhatlike; then elif check_sysinfos -d redhatlike; then
__apache_prefixes_checkdir /var/www/html __apache_prefixes_checkdir /var/www/html
@ -175,13 +183,18 @@ function __compute_apache_prefixes() {
__apache_prefixes=1 __apache_prefixes=1
} }
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" APACHEBIN APACHEVERSION APACHECTL APACHELOGDIR APACHESSLCERTSDIR APACHESSLKEYSDIR APACHECONFDIR APACHECONF APACHEAVSITESDIR APACHESITESDIR HTDOCSDIR CGIBINDIR) APACHE_PREFIXES=(APACHEBIN APACHEVERSION APACHECTL APACHELOGDIR APACHESSLCERTSDIR APACHESSLKEYSDIR APACHECONFDIR APACHECONF APACHEAVSITESDIR APACHESITESDIR HTDOCSDIR CGIBINDIR)
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" "${APACHE_PREFIXES[@]}")
function compute_apache_prefixes() { function compute_apache_prefixes() {
__compute_apache_prefixes __compute_apache_prefixes
} }
function recompute_apache_prefixes() { function recompute_apache_prefixes() {
local v
for v in "${APACHE_PREFIXES[@]}"; do
eval "$v="
done
__apache_prefixes= __apache_prefixes=
__compute_apache_prefixes __compute_apache_prefixes
} }

View File

@ -305,13 +305,18 @@ function __compute_crontab_prefixes() {
__crontab_prefixes=1 __crontab_prefixes=1
} }
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" CRONTABDIR) CRONTAB_PREFIXES=(CRONTABDIR)
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" "${CRONTAB_PREFIXES[@]}")
function compute_crontab_prefixes() { function compute_crontab_prefixes() {
__compute_crontab_prefixes __compute_crontab_prefixes
} }
function recompute_crontab_prefixes() { function recompute_crontab_prefixes() {
local v
for v in "${CRONTAB_PREFIXES[@]}"; do
eval "$v="
done
__crontab_prefixes= __crontab_prefixes=
__compute_crontab_prefixes __compute_crontab_prefixes
} }

View File

@ -551,13 +551,18 @@ function __compute_java_prefixes() {
__java_prefixes=1 __java_prefixes=1
} }
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" JAVA_HOME JAVAEXTENSIONS) JAVA_PREFIXES=(JAVA_HOME JAVAEXTENSIONS)
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" "${JAVA_PREFIXES[@]}")
function compute_java_prefixes() { function compute_java_prefixes() {
__compute_java_prefixes __compute_java_prefixes
} }
function recompute_java_prefixes() { function recompute_java_prefixes() {
local v
for v in "${JAVA_PREFIXES[@]}"; do
eval "$v="
done
__java_prefixes= __java_prefixes=
__compute_java_prefixes __compute_java_prefixes
} }

View File

@ -46,13 +46,18 @@ function __compute_ldap_prefixes() {
__ldap_prefixes=1 __ldap_prefixes=1
} }
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" LDAPCONFDIR LDAPOWNER) LDAP_PREFIXES=(LDAPCONFDIR LDAPOWNER)
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" "${LDAP_PREFIXES[@]}")
function compute_ldap_prefixes() { function compute_ldap_prefixes() {
__compute_ldap_prefixes __compute_ldap_prefixes
} }
function recompute_ldap_prefixes() { function recompute_ldap_prefixes() {
local v
for v in "${LDAP_PREFIXES[@]}"; do
eval "$v="
done
__ldap_prefixes= __ldap_prefixes=
__compute_ldap_prefixes __compute_ldap_prefixes
} }

View File

@ -60,38 +60,81 @@ function __setup_ALL_SYSvars() {
__setup_ALL_SYSvars __setup_ALL_SYSvars
unset -f __setup_ALL_SYSvars unset -f __setup_ALL_SYSvars
MYSYSNAME=() function __compute_local_sysinfos_data() {
MYBITS= SYSINFOS_DATA=(
MYSYSDIST=() "$UNAME_SYSTEM"
MYSYSVER=() "$UNAME_MACHINE"
if [ "$UNAME_SYSTEM" == "Linux" ]; then "$([ -f /etc/debian_version ] && cat /etc/debian_version)"
case "$UNAME_MACHINE" in "$([ -f /etc/gentoo-release ] && cat /etc/gentoo-release)"
x86_64) "$([ -f /etc/redhat-release ] && cat /etc/redhat-release)"
MYSYSNAME=(linux64 linux) "$([ -f /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Resources/version.plist ] && cat /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Resources/version.plist)"
MYBITS=64 "$([ -f /System/Library/Frameworks/CoreServices.framework/Resources/version.plist ] && cat /System/Library/Frameworks/CoreServices.framework/Resources/version.plist)"
;; )
i386|i586|i686) }
MYSYSNAME=(linux32 linux) function __dump_remote_sysinfos_data() {
MYBITS=32 "${2:-ssh}" "$1" "\
;; uname -s
ppc) echo .----------------.
MYSYSNAME=(linuxppc32 linuxppc linux) uname -m
MYBITS=32 echo .----------------.
;; [ -f /etc/debian_version ] && cat /etc/debian_version
ppc64) echo .----------------.
MYSYSNAME=(linuxppc64 linuxppc linux) [ -f /etc/gentoo-release ] && cat /etc/gentoo-release
MYBITS=64 echo .----------------.
;; [ -f /etc/redhat-release ] && cat /etc/redhat-release
arm*) echo .----------------.
MYSYSNAME=(linuxarm linux) [ -f /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Resources/version.plist ] && cat /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Resources/version.plist
;; echo .----------------.
*) [ -f /System/Library/Frameworks/CoreServices.framework/Resources/version.plist ] && cat /System/Library/Frameworks/CoreServices.framework/Resources/version.plist
MYSYSNAME=(linux) echo .----------------."
;; }
esac function __build_sysinfos_data() {
awk '
BEGIN {
data = ""
have_data = 0
print "SYSINFOS_DATA=("
}
function read_data() {
if (have_data) data = data "\n"
else have_data = 1
data = data $0
}
function dump_data() {
gsub(/'\''/, "'\'\\\\\'\''", data)
print "'\''" data "'\''"
data = ""
have_data = 0
}
$0 == ".----------------." { dump_data(); next }
{ read_data() }
END {
dump_data()
print ")"
}
'
}
function __compute_sysinfos() {
# SYSINFOS_DATA doit être initialisé
local system="${SYSINFOS_DATA[0]}"
local machine="${SYSINFOS_DATA[1]}"
local debian_version="${SYSINFOS_DATA[2]}"
local gentoo_release="${SYSINFOS_DATA[3]}"
local redhat_release="${SYSINFOS_DATA[4]}"
local macosx_plist1="${SYSINFOS_DATA[5]}"
local macosx_plist2="${SYSINFOS_DATA[6]}"
if [ -f /etc/debian_version ]; then if [ "$system" == "Linux" ]; then
case "$(</etc/debian_version)" in case "$machine" in
x86_64) MYSYSNAME=(linux64 linux); MYBITS=64;;
i386|i586|i686) MYSYSNAME=(linux32 linux); MYBITS=32;;
ppc) MYSYSNAME=(linuxppc32 linuxppc linux); MYBITS=32;;
ppc64) MYSYSNAME=(linuxppc64 linuxppc linux); MYBITS=64;;
arm*) MYSYSNAME=(linuxarm linux);;
*) MYSYSNAME=(linux);;
esac
if [ -n "$debian_version" ]; then
case "$debian_version" in
9*|stretch*) MYSYSDIST=(debian debianlike); MYSYSVER=(stretch);; 9*|stretch*) MYSYSDIST=(debian debianlike); MYSYSVER=(stretch);;
8*|jessie*) MYSYSDIST=(debian debianlike); MYSYSVER=(jessie);; 8*|jessie*) MYSYSDIST=(debian debianlike); MYSYSVER=(jessie);;
7*|wheezy*) MYSYSDIST=(debian debianlike); MYSYSVER=(wheezy);; 7*|wheezy*) MYSYSDIST=(debian debianlike); MYSYSVER=(wheezy);;
@ -100,16 +143,16 @@ if [ "$UNAME_SYSTEM" == "Linux" ]; then
4*) MYSYSDIST=(debian debianlike); MYSYSVER=(etch);; 4*) MYSYSDIST=(debian debianlike); MYSYSVER=(etch);;
*) MYSYSDIST=(debianlike);; *) MYSYSDIST=(debianlike);;
esac esac
elif [ -f /etc/gentoo-release ]; then elif [ -n "$gentoo_release" ]; then
MYSYSDIST=(gentoo) MYSYSDIST=(gentoo)
elif [ -f /etc/redhat-release ]; then elif [ -n "$redhat_release" ]; then
case "$(</etc/redhat-release)" in case "$redhat_release" in
Fedora*) MYSYSDIST=(fedora redhatlike);; Fedora*) MYSYSDIST=(fedora redhatlike);;
Red*Hat*Enterprise*Linux*) MYSYSDIST=(rhel redhatlike);; Red*Hat*Enterprise*Linux*) MYSYSDIST=(rhel redhatlike);;
CentOS*) MYSYSDIST=(centos redhatlike);; CentOS*) MYSYSDIST=(centos redhatlike);;
*) MYSYSDIST=(redhatlike);; *) MYSYSDIST=(redhatlike);;
esac esac
case "$(</etc/redhat-release)" in case "$redhat_release" in
Fedora*14*) MYSYSVER=(fedora14);; Fedora*14*) MYSYSVER=(fedora14);;
Fedora*13*) MYSYSVER=(fedora13);; Fedora*13*) MYSYSVER=(fedora13);;
Fedora*12*) MYSYSVER=(fedora12);; Fedora*12*) MYSYSVER=(fedora12);;
@ -124,15 +167,14 @@ if [ "$UNAME_SYSTEM" == "Linux" ]; then
CentOS*release\ 4*) MYSYSVER=(centos4 redhat4);; CentOS*release\ 4*) MYSYSVER=(centos4 redhat4);;
esac esac
fi fi
elif [ "$UNAME_SYSTEM" == "Darwin" ]; then elif [ "$system" == "Darwin" ]; then
function get_macosx_version() { function get_macosx_version() {
local i local plist
for i in /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Resources/version.plist /System/Library/Frameworks/CoreServices.framework/Resources/version.plist; do for plist in "$@"; do
if [ -f "$i" ]; then [ -n "$plist" ] || continue
grep -A 1 CFBundleShortVersionString "$i" | grep string | sed 's/.*<string>//g echo "$plist" | grep -A 1 CFBundleShortVersionString | grep string | sed 's/.*<string>//g
s/<\/string>.*$//g' s/<\/string>.*$//g'
break break
fi
done done
} }
MYSYSNAME=(macosx darwin) MYSYSNAME=(macosx darwin)
@ -143,14 +185,35 @@ s/<\/string>.*$//g'
10.4*) MYSYSDIST=(tiger);; 10.4*) MYSYSDIST=(tiger);;
10.3*) MYSYSDIST=(panther);; 10.3*) MYSYSDIST=(panther);;
esac esac
fi fi
if [ -n "$UTOOLS_CHROOT" ]; then }
function compute_local_sysinfos() {
local SYSINFOS_DATA
__compute_local_sysinfos_data
__compute_sysinfos
if [ -n "$UTOOLS_CHROOT" ]; then
# Dans un chroot, il est possible de forcer les valeurs # Dans un chroot, il est possible de forcer les valeurs
[ -n "$UTOOLS_SYSNAME" ] && eval "MYSYSNAME=($UTOOLS_SYSNAME)" [ -n "$UTOOLS_SYSNAME" ] && eval "MYSYSNAME=($UTOOLS_SYSNAME)"
[ -n "$UTOOLS_BITS" ] && eval "MYBITS=$UTOOLS_BITS" [ -n "$UTOOLS_BITS" ] && eval "MYBITS=$UTOOLS_BITS"
[ -n "$UTOOLS_SYSDIST" ] && eval "MYSYSDIST=($UTOOLS_SYSDIST)" [ -n "$UTOOLS_SYSDIST" ] && eval "MYSYSDIST=($UTOOLS_SYSDIST)"
[ -n "$UTOOLS_SYSVER" ] && eval "MYSYSVER=($UTOOLS_SYSVER)" [ -n "$UTOOLS_SYSVER" ] && eval "MYSYSVER=($UTOOLS_SYSVER)"
fi fi
}
function compute_remote_sysinfos() {
local SYSINFOS_DATA
eval "$(__dump_remote_sysinfos_data "$@" | __build_sysinfos_data)"
__compute_sysinfos
}
SYSINFOSLOCALS="\
local -a MYSYSNAME MYSYSDIST MYSYSVER
local MYBITS"
MYSYSNAME=()
MYBITS=
MYSYSDIST=()
MYSYSVER=()
compute_local_sysinfos
function __get_sysdist_alias() { function __get_sysdist_alias() {
if ! array_contains ALL_SYSDISTS "$1"; then if ! array_contains ALL_SYSDISTS "$1"; then
@ -319,7 +382,10 @@ function check_sysinfos() {
if array_contains "$sysdistvar_" "$sysdist_"; then if array_contains "$sysdistvar_" "$sysdist_"; then
r_=0 r_=0
check_=skip check_=skip
break
elif [ "$sysdist_" == "$value_" ]; then elif [ "$sysdist_" == "$value_" ]; then
r_=0
check_=skip
break break
fi fi
done done
@ -358,7 +424,10 @@ function check_sysinfos() {
if array_contains "$sysvervar_" "$sysver_"; then if array_contains "$sysvervar_" "$sysver_"; then
r_=0 r_=0
check_=skip check_=skip
break
elif [ "$sysver_" == "$value_" ]; then elif [ "$sysver_" == "$value_" ]; then
r_=0
check_=skip
break break
fi fi
done done

View File

@ -48,8 +48,7 @@ function uinst() {
local workdir_excludes local workdir_excludes
local workdir_includes local workdir_includes
local copy_files local copy_files
local destdir local destdir destdir_override_userhost destdir_force_remote
local destdir_override_userhost
local srcdir local srcdir
local -a files local -a files
local owner local owner
@ -86,14 +85,24 @@ OPTIONS
effectué. Si host vaut '.', un déploiement local *sans passer par ssh* effectué. Si host vaut '.', un déploiement local *sans passer par ssh*
est effectué, comme si seul le chemin avait été spécifié. est effectué, comme si seul le chemin avait été spécifié.
Cette option initialise la valeur destdir_override_userhost Cette option initialise la valeur destdir_override_userhost
-a (par défaut) Si la source n'est pas spécifiée, déterminer le répertoire -S, --ssh ssh
à déployer automatiquement. Avec la méthode de déploiement uinst:rsync, spécifier le programme à
utiliser pour la connection par ssh. Cette option initialise la valeur
destdir_ssh
--force-remote
Avec la méthode de déploiement uinst:rsync, si un hôte est spécifié dans
la valeur de destdir, forcer le déploiement distant avec ssh+rsync, même
si l'hôte et l'utilisateur correspondent aux valeurs courantes. Cette
option initialise la valeur destdir_force_remote
-a, --auto
Si la source n'est pas spécifiée, déterminer le répertoire à déployer
automatiquement (c'est la valeur par défaut)
--no-auto --no-auto
Ne pas déterminer automatiquement le répertoire à déployer. Ne pas déterminer automatiquement le répertoire à déployer.
--prefix --prefix
(par défaut) Corriger les chemins srcdir et destdir qui commencent par Corriger les chemins srcdir et destdir qui commencent par des préfixes
des préfixes valides. Utiliser 'uprefix -l' pour avoir une liste de valides (c'est la valeur par défaut). Utiliser 'uprefix -l' pour avoir
préfixes valides. une liste de préfixes valides
--no-prefix --no-prefix
Ne jamais corriger un chemin. Ne jamais corriger un chemin.
--include-vcs --include-vcs
@ -141,6 +150,8 @@ OPTIONS
-m: '$__uinst_addvar modes "$value_"' \ -m: '$__uinst_addvar modes "$value_"' \
-d: '$__uinst_addvar destdir "$value_"' \ -d: '$__uinst_addvar destdir "$value_"' \
-h:,-H:,--host: '$__uinst_addvar destdir_override_userhost "$value_"' \ -h:,-H:,--host: '$__uinst_addvar destdir_override_userhost "$value_"' \
-S:,--ssh: '$__uinst_addvar destdir_ssh "$value_"' \
--force-remote '$__uinst_addvar destdir_force_remote 1' \
-a,--auto UINST_AUTOSRCDIR=1 \ -a,--auto UINST_AUTOSRCDIR=1 \
--no-auto UINST_AUTOSRCDIR= \ --no-auto UINST_AUTOSRCDIR= \
--prefix UINST_AUTOPREFIX=1 \ --prefix UINST_AUTOPREFIX=1 \
@ -207,6 +218,8 @@ function __uinst_init() {
copy_files='true' copy_files='true'
destdir='/usr/local' destdir='/usr/local'
destdir_override_userhost= destdir_override_userhost=
destdir_ssh=
destdir_force_remote=
srcdir='.' srcdir='.'
files='()' files='()'
owner='root:' owner='root:'
@ -385,7 +398,7 @@ Utilisez 'udir -e $(ppath "$srcdir")' pour modifier les paramètres."
function __uinst_defaultvars() { function __uinst_defaultvars() {
eval "$(array_join UINST_DEFAULTS ';')" eval "$(array_join UINST_DEFAULTS ';')"
UDIR_VARS=(uinc install_profiles profiledir bashrcdir defaultdir copy_files destdir destdir_override_userhost srcdir owner) UDIR_VARS=(uinc install_profiles profiledir bashrcdir defaultdir copy_files destdir destdir_override_userhost destdir_ssh destdir_force_remote srcdir owner)
UDIR_ARRAYS=(uinc_options uinc_args preconfig_scripts configure_variables configure_dest_for config_scripts workdir_rsync_options workdir_excludes workdir_includes files modes root_scripts) UDIR_ARRAYS=(uinc_options uinc_args preconfig_scripts configure_variables configure_dest_for config_scripts workdir_rsync_options workdir_excludes workdir_includes files modes root_scripts)
} }
@ -918,21 +931,56 @@ function __uinst_rsync() {
__uinst_setvar srcdir __uinst_setvar srcdir
# puis charger les valeurs de la ligne de commande # puis charger les valeurs de la ligne de commande
__uinst_setvars __uinst_setvars
# corriger éventuellement destdir # vérifier la destination
[ -n "$UINST_AUTOPREFIX" ] && destdir="$(expand_prefix "$destdir")" local __destdir_userhost __destdir_path __destdir_user __destdir_host
# si un hôte a été spécifié avec --host, utiliser cette valeur
if [ -n "$destdir_override_userhost" ]; then
splituserhost "$destdir_override_userhost" __override_user __override_host
splitfsep2 "$destdir" : __destdir_userhost __destdir_path splitfsep2 "$destdir" : __destdir_userhost __destdir_path
splituserhost "$__destdir_userhost" __destdir_user __destdir_host splituserhost "$__destdir_userhost" __destdir_user __destdir_host
# si un hôte a été spécifié avec --host, utiliser cette valeur
if [ -n "$destdir_override_userhost" ]; then
local __override_user __override_host
splituserhost "$destdir_override_userhost" __override_user __override_host
[ -n "$__override_user" ] || __override_user="$__destdir_user" [ -n "$__override_user" ] || __override_user="$__destdir_user"
if [ "$__override_host" != . ]; then if [ "$__override_host" == . ]; then
# déploiement distant # forcer déploiement local
destdir="${__override_user:+$__override_user@}$__override_host:$__destdir_path" __override_user=
else __override_host=
# déploiement local
destdir="$__destdir_path"
fi fi
__destdir_user="$__override_user"
__destdir_host="$__override_host"
fi
# vérifier s'il faut faire une copie distante ou locale
local __destdir_remote=
if [ -n "$__destdir_host" ]; then
if [ -n "$destdir_force_remote" ]; then
__destdir_remote=1
else
if [ "$__destdir_host" == localhost ]; then
:
elif [[ "$__destdir_host" == *.* ]]; then
[ "$__destdir_host" == "$MYHOST" ] || __destdir_remote=1
else
[ "$__destdir_host" == "$MYHOSTNAME" ] || __destdir_remote=1
fi
fi
if [ -z "$__destdir_remote" -a -n "$__destdir_user" ]; then
[ "$__destdir_user" == "$USER" ] || __destdir_remote=1
fi
fi
# corriger éventuellement destdir s'il contient un préfixe
if [ -n "$UINST_AUTOPREFIX" ] && has_prefix "$__destdir_path"; then
if [ -n "$__destdir_remote" ]; then
eval "$SYSINFOSLOCALS"
local APACHE_PREFIXES_CHECK_OR_FIRST=1
compute_remote_sysinfos "${__destdir_user:+$__destdir_user@}$__destdir_host" "$destdir_ssh"
recompute_all_prefixes
fi
__destdir_path="$(expand_prefix "$__destdir_path")"
fi
# valeur finale de destdir
if [ -n "$__destdir_remote" ]; then
destdir="${__destdir_user:+$__destdir_user@}$__destdir_host:$__destdir_path"
else
destdir="$__destdir_path"
fi fi
# les variables de configure_variables ne sont pas prises en compte. pas la # les variables de configure_variables ne sont pas prises en compte. pas la
# peine de les afficher # peine de les afficher
@ -952,7 +1000,7 @@ function __uinst_rsync() {
if [ -n "${files[*]}" ]; then if [ -n "${files[*]}" ]; then
srcdesc="$srcdesc/{$(array_join files ,)}" srcdesc="$srcdesc/{$(array_join files ,)}"
fi fi
if [[ "$destdir" == *:* ]]; then if [ -n "$__destdir_host" ]; then
ask_yesno "Synchroniser $srcdesc vers $(ppath "$destdir")?" O || return ask_yesno "Synchroniser $srcdesc vers $(ppath "$destdir")?" O || return
else else
ask_yesno "Synchroniser $srcdesc vers $(ppath "$destdir") sur $MYHOST?" O || return ask_yesno "Synchroniser $srcdesc vers $(ppath "$destdir") sur $MYHOST?" O || return
@ -960,10 +1008,9 @@ function __uinst_rsync() {
fi fi
cd "$srcdir" || return 1 cd "$srcdir" || return 1
local localsync=1 if [ -n "$__destdir_remote" ]; then
if [[ "$destdir" == *:* ]]; then
# Déploiement distant, on laisse rsync gérer # Déploiement distant, on laisse rsync gérer
localsync= :
else else
# Déploiement local. S'assurer que le répertoire de destination existe # Déploiement local. S'assurer que le répertoire de destination existe
mkdir -p "$destdir" || return 1 mkdir -p "$destdir" || return 1
@ -971,7 +1018,8 @@ function __uinst_rsync() {
local -a cmd tmp_files actual_files copied_files local -a cmd tmp_files actual_files copied_files
local file filename local file filename
cmd=(rsync "${force_rsync_options[@]}" "${rsync_options[@]}") local UTOOLS_USSH_RSYNC_SUPPORT=1; export UTOOLS_USSH_RSYNC_SUPPORT
cmd=(rsync ${destdir_ssh:+-e "$destdir_ssh"} "${force_rsync_options[@]}" "${rsync_options[@]}")
if [ -n "${files[*]}" ]; then if [ -n "${files[*]}" ]; then
for file in "${files[@]}"; do for file in "${files[@]}"; do
file="${file#/}" # les chemins sont toujours relatifs file="${file#/}" # les chemins sont toujours relatifs
@ -1000,7 +1048,7 @@ function __uinst_rsync() {
# Faire la synchro # Faire la synchro
"${cmd[@]}" "${cmd[@]}"
if [ -n "$localsync" ]; then if [ -z "$__destdir_remote" ]; then
if [ -n "$owner" -a -n "${copied_files[*]}" ]; then if [ -n "$owner" -a -n "${copied_files[*]}" ]; then
## Initialiser le propriétaire ## Initialiser le propriétaire
estep "Initialisation du propriétaire à $owner" estep "Initialisation du propriétaire à $owner"

View File

@ -40,13 +40,18 @@ function __compute_webobjects_prefixes() {
__webobjects_prefixes=1 __webobjects_prefixes=1
} }
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" NEXT_ROOT WOROOT LOCALROOT SYSTEMFRAMEWORKS WOEXTENSIONS WOFRAMEWORKS WOAPPLICATIONS WOCONFIGURATION WOAUTOSTART WOLOGS WOVERSION) WEBOBJECTS_PREFIXES=(NEXT_ROOT WOROOT LOCALROOT SYSTEMFRAMEWORKS WOEXTENSIONS WOFRAMEWORKS WOAPPLICATIONS WOCONFIGURATION WOAUTOSTART WOLOGS WOVERSION)
UTOOLS_PREFIXES=("${UTOOLS_PREFIXES[@]}" "${WEBOBJECTS_PREFIXES[@]}")
function compute_webobjects_prefixes() { function compute_webobjects_prefixes() {
__compute_webobjects_prefixes __compute_webobjects_prefixes
} }
function recompute_webobjects_prefixes() { function recompute_webobjects_prefixes() {
local v
for v in "${WEBOBJECTS_PREFIXES[@]}"; do
eval "$v="
done
__webobjects_prefixes= __webobjects_prefixes=
__compute_webobjects_prefixes __compute_webobjects_prefixes
} }

4
ruinst
View File

@ -30,7 +30,7 @@ OPTIONS
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
/var/tmp. Cette option est utile pour les vservers, qui ont par défaut /var/tmp. Cette option est utile pour les vservers, qui ont par défaut
un /tmp minuscule de 16 Mo. un /tmp minuscule de 16 Mo.
-S ssh -S, --ssh ssh
Spécifier le programme à utiliser pour la connection par ssh. Spécifier le programme à utiliser pour la connection par ssh.
-h hosts -h hosts
-h @hostsfile -h @hostsfile
@ -63,7 +63,7 @@ parse_opts "${PRETTYOPTS[@]}" \
--configure: '$set@ confuser;action=configure' \ --configure: '$set@ confuser;action=configure' \
--uses-su uses_su=1 \ --uses-su uses_su=1 \
-T:,--tmproot: tmproot= \ -T:,--tmproot: tmproot= \
-S: SSH= \ -S:,--ssh: SSH= \
--force-make-archive force_make_archive=1 \ --force-make-archive force_make_archive=1 \
-h:,-H:,--host: hosts \ -h:,-H:,--host: hosts \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"