Intégration de la branche release-2.24.0
This commit is contained in:
commit
ab76191789
10
CHANGES.txt
10
CHANGES.txt
|
@ -1,3 +1,13 @@
|
||||||
|
## Version 2.24.0 du 24/12/2015-09:58
|
||||||
|
|
||||||
|
b288cf2 apacheconfig: support des fichiers de confs --> /etc/apache2/cond.d sur debian wheezy-
|
||||||
|
2e3fe66 ussh: forcer l'allocation d'un tty avec --cc
|
||||||
|
58fa40c ussh: ajouter le support de uwatch
|
||||||
|
7bc63c5 maj doc uwatch
|
||||||
|
2d2754b ajout de uwatch pour afficher un compte
|
||||||
|
4376fff maj doc
|
||||||
|
bb176d7 maj du template pour runsconfig
|
||||||
|
|
||||||
## Version 2.23.1 du 15/12/2015-11:01
|
## Version 2.23.1 du 15/12/2015-11:01
|
||||||
|
|
||||||
d8d0cc8 cgilsxml: sélectionner automatiquement un groupe seul
|
d8d0cc8 cgilsxml: sélectionner automatiquement un groupe seul
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
2.23.1
|
2.24.0
|
||||||
|
|
|
@ -154,6 +154,7 @@ destdir=
|
||||||
nohideconfig=
|
nohideconfig=
|
||||||
templateopt=
|
templateopt=
|
||||||
aac_certsdir=
|
aac_certsdir=
|
||||||
|
bits=
|
||||||
oneconf=
|
oneconf=
|
||||||
onemodule=
|
onemodule=
|
||||||
onesite=
|
onesite=
|
||||||
|
@ -176,6 +177,7 @@ args=(
|
||||||
-6,--squeeze '$array_add TEMPLATECTL_VARS sysver=squeeze'
|
-6,--squeeze '$array_add TEMPLATECTL_VARS sysver=squeeze'
|
||||||
-7,--wheezy '$array_add TEMPLATECTL_VARS sysver=wheezy'
|
-7,--wheezy '$array_add TEMPLATECTL_VARS sysver=wheezy'
|
||||||
-8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
|
-8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
|
||||||
|
--bits: bits=
|
||||||
-u,--update,--deploy action=deploy
|
-u,--update,--deploy action=deploy
|
||||||
-r:,--certsdir: aac_certsdir=
|
-r:,--certsdir: aac_certsdir=
|
||||||
--localhosts action=localhosts
|
--localhosts action=localhosts
|
||||||
|
@ -192,15 +194,17 @@ templatectl_loadvars "$config" && modified=1
|
||||||
|
|
||||||
if [ -n "$sysname" -o -n "$sysdist" -o -n "$sysver" ]; then
|
if [ -n "$sysname" -o -n "$sysdist" -o -n "$sysver" ]; then
|
||||||
ensure_sysinfos sysname sysdist sysver
|
ensure_sysinfos sysname sysdist sysver
|
||||||
|
custom_sysinfos=1
|
||||||
else
|
else
|
||||||
sysname="$MYSYSNAME"
|
sysname="$MYSYSNAME"
|
||||||
sysdist="$MYSYSDIST"
|
sysdist="$MYSYSDIST"
|
||||||
sysver="$MYSYSVER"
|
sysver="$MYSYSVER"
|
||||||
|
bits="$MYBITS"
|
||||||
|
custom_sysinfos=
|
||||||
fi
|
fi
|
||||||
__template_set_var sysname "$sysname"
|
__template_set_var sysname "$sysname"
|
||||||
__template_set_var sysdist "$sysdist"
|
__template_set_var sysdist "$sysdist"
|
||||||
__template_set_var sysver "$sysver"
|
__template_set_var sysver "$sysver"
|
||||||
bits=
|
|
||||||
if check_sysinfos --vars sysname sysdist sysver bits -d debian -v jessie+; then
|
if check_sysinfos --vars sysname sysdist sysver bits -d debian -v jessie+; then
|
||||||
array_add TEMPLATECTL_SRCDIRS apacheconfig8
|
array_add TEMPLATECTL_SRCDIRS apacheconfig8
|
||||||
elif check_sysinfos --vars sysname sysdist sysver bits -d debian; then
|
elif check_sysinfos --vars sysname sysdist sysver bits -d debian; then
|
||||||
|
@ -248,6 +252,7 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
|
||||||
${oneconf:+--one-conf "$oneconf"}
|
${oneconf:+--one-conf "$oneconf"}
|
||||||
${onemodule:+--one-module "$onemodule"}
|
${onemodule:+--one-module "$onemodule"}
|
||||||
${onesite:+--one-site "$onesite"}
|
${onesite:+--one-site "$onesite"}
|
||||||
|
${custom_sysinfos:+--sysname "$sysname" --sysdist "$sysdist" --sysver "$sysver" --bits "$bits"}
|
||||||
)
|
)
|
||||||
for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
|
for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
|
||||||
array_add args -v "$__name=${!__name}"
|
array_add args -v "$__name=${!__name}"
|
||||||
|
@ -261,6 +266,7 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
|
||||||
--ignore "$(basename -- "$config")"
|
--ignore "$(basename -- "$config")"
|
||||||
${oneconf:+--one-conf "$(basename -- "$oneconf")"}
|
${oneconf:+--one-conf "$(basename -- "$oneconf")"}
|
||||||
${onemodule:+--one-module "$(basename -- "$onemodule")"}
|
${onemodule:+--one-module "$(basename -- "$onemodule")"}
|
||||||
|
${custom_sysinfos:+--sysname "$sysname" --sysdist "$sysdist" --sysver "$sysver" --bits "$bits"}
|
||||||
)
|
)
|
||||||
elif [ "$action" == localhosts ]; then
|
elif [ "$action" == localhosts ]; then
|
||||||
etitle "Mise à jour de /etc/hosts"
|
etitle "Mise à jour de /etc/hosts"
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
009009000
|
009010000
|
||||||
|
|
|
@ -156,7 +156,7 @@ OPTIONS
|
||||||
}
|
}
|
||||||
|
|
||||||
function __apache_autoconf_setup() {
|
function __apache_autoconf_setup() {
|
||||||
if ! check_sysinfos -s linux -d debian; then
|
if ! check_sysinfos --vars sysname sysdist sysver bits -s linux64 linux32 linux -d debian; then
|
||||||
eerror "apache_autoconf n'est supporté que sur Debian linux"
|
eerror "apache_autoconf n'est supporté que sur Debian linux"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -236,6 +236,8 @@ function apache_autoconf() {
|
||||||
local -a ignores
|
local -a ignores
|
||||||
local autoconfdir certsdir confdir confsdir oneconf modulesdir onemodule
|
local autoconfdir certsdir confdir confsdir oneconf modulesdir onemodule
|
||||||
local sitesdir onesite cgibindir wwwdir certsconfdir rrdir onecms
|
local sitesdir onesite cgibindir wwwdir certsconfdir rrdir onecms
|
||||||
|
local sysname sysdist sysver bits
|
||||||
|
local destconfsdir a2xconf
|
||||||
local restart=1
|
local restart=1
|
||||||
parse_opts "${PRETTYOPTS[@]}" \
|
parse_opts "${PRETTYOPTS[@]}" \
|
||||||
--help '$exit_with __display_apache_autoconf_help' \
|
--help '$exit_with __display_apache_autoconf_help' \
|
||||||
|
@ -252,9 +254,30 @@ function apache_autoconf() {
|
||||||
--certsconfdir: certsconfdir= \
|
--certsconfdir: certsconfdir= \
|
||||||
--rrdir: rrdir= \
|
--rrdir: rrdir= \
|
||||||
--no-restart restart= \
|
--no-restart restart= \
|
||||||
|
--sysname: sysname= \
|
||||||
|
--sysdist: sysdist= \
|
||||||
|
--sysver: sysver= \
|
||||||
|
-6,--squeeze sysver=squeeze \
|
||||||
|
-7,--wheezy sysver=wheezy \
|
||||||
|
-8,--jessie sysver=jessie \
|
||||||
|
--bits: bits= \
|
||||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
if [ -n "$sysname" -o -n "$sysdist" -o -n "$sysver" ]; then
|
||||||
|
ensure_sysinfos sysname sysdist sysver
|
||||||
|
else
|
||||||
|
sysname=("${MYSYSNAME[@]}")
|
||||||
|
sysdist=("${MYSYSDIST[@]}")
|
||||||
|
sysver=("${MYSYSVER[@]}")
|
||||||
|
bits="$MYBITS"
|
||||||
|
fi
|
||||||
__apache_autoconf_setup || return 1
|
__apache_autoconf_setup || return 1
|
||||||
|
if check_sysinfos --vars sysname sysdist sysver bits -d debian -v jessie+; then
|
||||||
|
destconfsdir="$APACHECONFDIR/conf-available"
|
||||||
|
a2xconf=1
|
||||||
|
elif check_sysinfos --vars sysname sysdist sysver bits -d debian; then
|
||||||
|
destconfsdir="$APACHECONFDIR/conf.d"
|
||||||
|
fi
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
autoconfdir="$1"; shift
|
autoconfdir="$1"; shift
|
||||||
|
@ -320,7 +343,7 @@ function apache_autoconf() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Gestion des configurations
|
# Gestion des configurations
|
||||||
if [ -d "$confsdir" -a \( -z "$onecms" -o "$oneconf" \) ]; then
|
if [ -d "$confsdir" -a \( -z "$onecms" -o -n "$oneconf" \) ]; then
|
||||||
local -a confs
|
local -a confs
|
||||||
local conf
|
local conf
|
||||||
etitle "Installation des configurations"
|
etitle "Installation des configurations"
|
||||||
|
@ -331,13 +354,13 @@ function apache_autoconf() {
|
||||||
estep "$conf"
|
estep "$conf"
|
||||||
__apache_autoconf_fillcopy \
|
__apache_autoconf_fillcopy \
|
||||||
"$confsdir/$conf" \
|
"$confsdir/$conf" \
|
||||||
"$APACHECONFDIR/conf-available/$conf" && modified=1
|
"$destconfsdir/$conf" && modified=1
|
||||||
done
|
done
|
||||||
eend
|
eend
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Gestion des modules
|
# Gestion des modules
|
||||||
if [ -d "$modulesdir" -a \( -z "$onecms" -o "$onemodule" \) ]; then
|
if [ -d "$modulesdir" -a \( -z "$onecms" -o -n "$onemodule" \) ]; then
|
||||||
local -a confs
|
local -a confs
|
||||||
local conf
|
local conf
|
||||||
etitle "Installation des configurations des modules"
|
etitle "Installation des configurations des modules"
|
||||||
|
@ -370,7 +393,7 @@ function apache_autoconf() {
|
||||||
|
|
||||||
# Sites
|
# Sites
|
||||||
local -a enablesites disablesites
|
local -a enablesites disablesites
|
||||||
if [ -d "$sitesdir" -a \( -z "$onecms" -o "$onesite" \) ]; then
|
if [ -d "$sitesdir" -a \( -z "$onecms" -o -n "$onesite" \) ]; then
|
||||||
local -a confs
|
local -a confs
|
||||||
local conf confname destconf certsconf
|
local conf confname destconf certsconf
|
||||||
etitle "Installation des sites"
|
etitle "Installation des sites"
|
||||||
|
@ -434,7 +457,7 @@ s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g
|
||||||
"$confdir/$conf" \
|
"$confdir/$conf" \
|
||||||
"$APACHECONFDIR/$conf" && modified=1
|
"$APACHECONFDIR/$conf" && modified=1
|
||||||
done
|
done
|
||||||
if [ -f "$confdir/confs.conf" ]; then
|
if [ -f "$confdir/confs.conf" -a -n "$a2xconf" ]; then
|
||||||
local -a confs
|
local -a confs
|
||||||
local conf
|
local conf
|
||||||
array_from_lines confs "$(<"$confdir/confs.conf" filter_conf)"
|
array_from_lines confs "$(<"$confdir/confs.conf" filter_conf)"
|
||||||
|
|
|
@ -337,6 +337,12 @@ function check_sysinfos() {
|
||||||
# check_sysinfos -d debian ubuntu -b 64
|
# check_sysinfos -d debian ubuntu -b 64
|
||||||
# pour tester si l'on est sur une distribution debian ou ubuntu *et* sur un
|
# pour tester si l'on est sur une distribution debian ou ubuntu *et* sur un
|
||||||
# système 64 bits
|
# système 64 bits
|
||||||
|
# Note: avec l'option --vars, il peut arriver que sysname, sysdist ou sysver
|
||||||
|
# ne soient pas des tableaux mais des variables scalaires, surtout si elles
|
||||||
|
# sont fournies par l'utilisateur. Il est conseillé dans ce cas de tester
|
||||||
|
# toutes les possibilités quand on vérifie une valeur, e.g.:
|
||||||
|
# check_sysinfos --vars sysname sysdist sysver bits -s linux64 linux32 linux
|
||||||
|
# pour tester si on est sur un système linux
|
||||||
# Avec l'option -v, il est possible de suffixer la valeur avec + ou - selon
|
# Avec l'option -v, il est possible de suffixer la valeur avec + ou - selon
|
||||||
# que l'on veut toutes les versions situées après ou avant la version
|
# que l'on veut toutes les versions situées après ou avant la version
|
||||||
# spécifiée. Attention, à cause d'une limitation de l'implémentation, il
|
# spécifiée. Attention, à cause d'une limitation de l'implémentation, il
|
||||||
|
|
|
@ -11,7 +11,7 @@ confs.conf
|
||||||
Si une configuration est de la forme -conf, elle est désactivée. Si une
|
Si une configuration est de la forme -conf, elle est désactivée. Si une
|
||||||
configuration est de la forme +conf, elle est activée. Cette syntaxe permet
|
configuration est de la forme +conf, elle est activée. Cette syntaxe permet
|
||||||
de supporter les configurations dont le nom commencerait par '-'
|
de supporter les configurations dont le nom commencerait par '-'
|
||||||
Ce fichier n'est supporté qu'à partir de debian jessie.
|
IMPORTANT: Ce fichier n'est supporté qu'à partir de debian jessie.
|
||||||
|
|
||||||
modules.conf
|
modules.conf
|
||||||
Liste des modules qu'il faut activer. Si un module existe mais n'est pas
|
Liste des modules qu'il faut activer. Si un module existe mais n'est pas
|
||||||
|
@ -30,8 +30,8 @@ confs/
|
||||||
Répertoire des configurations à installer. Les fichiers de ce répertoire
|
Répertoire des configurations à installer. Les fichiers de ce répertoire
|
||||||
sont de la forme CONF.conf et sont installés dans le répertoire
|
sont de la forme CONF.conf et sont installés dans le répertoire
|
||||||
/etc/apache2/conf-available. Il faut mentionner la configuration dans le
|
/etc/apache2/conf-available. Il faut mentionner la configuration dans le
|
||||||
fichier confs.con pour l'activer.
|
fichier confs.conf pour l'activer.
|
||||||
Ce répertoire n'est supporté qu'à partir de debian jessie.
|
IMPORTANT: Ce répertoire n'est supporté qu'à partir de debian jessie.
|
||||||
|
|
||||||
modules/
|
modules/
|
||||||
Répertoire des configurations de modules à installer. Les fichiers de ce
|
Répertoire des configurations de modules à installer. Les fichiers de ce
|
||||||
|
|
|
@ -14,8 +14,7 @@ OPTIONS
|
||||||
-c, --create
|
-c, --create
|
||||||
Créer un nouveau répertoire de configuration pour un hôte
|
Créer un nouveau répertoire de configuration pour un hôte
|
||||||
-d, --destdir DESTDIR[=$TEMPLATECTL_NAME]
|
-d, --destdir DESTDIR[=$TEMPLATECTL_NAME]
|
||||||
Nom du répertoire local de configuration. Utiliser 'apacheconfig' par
|
Nom du répertoire local de configuration.
|
||||||
défaut.
|
|
||||||
|
|
||||||
-t, --template [OPT]
|
-t, --template [OPT]
|
||||||
Gérer les fichiers du répertoire local avec templatectl. La valeur de
|
Gérer les fichiers du répertoire local avec templatectl. La valeur de
|
||||||
|
|
9
ussh
9
ussh
|
@ -66,6 +66,10 @@ Les options suivantes sont exclusives à ce script:
|
||||||
for host in "${hosts[@]}"; do
|
for host in "${hosts[@]}"; do
|
||||||
${exec:+exec} "$ssh" "${options[@]}" "$host" "${args[@]}"
|
${exec:+exec} "$ssh" "${options[@]}" "$host" "${args[@]}"
|
||||||
done'"
|
done'"
|
||||||
|
--cc
|
||||||
|
Assumer que nutools est installé sur l'hôte distant, et y lancer uwatch
|
||||||
|
avec l'option --cc, pour permettre de garder la connexion active dans le
|
||||||
|
cadre d'une redirection de port.
|
||||||
|
|
||||||
Si la variable UTOOLS_USSH_RSYNC_SUPPORT contient une valeur non vide, l'analyse
|
Si la variable UTOOLS_USSH_RSYNC_SUPPORT contient une valeur non vide, l'analyse
|
||||||
des arguments s'arrête à la première valeur qui n'est pas une option, afin de
|
des arguments s'arrête à la première valeur qui n'est pas une option, afin de
|
||||||
|
@ -272,6 +276,7 @@ remove=
|
||||||
remove_only=
|
remove_only=
|
||||||
exec=1
|
exec=1
|
||||||
parse=
|
parse=
|
||||||
|
uwatch=
|
||||||
parse_opts ${UTOOLS_USSH_RSYNC_SUPPORT:++} "${PRETTYOPTS[@]}" \
|
parse_opts ${UTOOLS_USSH_RSYNC_SUPPORT:++} "${PRETTYOPTS[@]}" \
|
||||||
--help '$exit_with display_help' \
|
--help '$exit_with display_help' \
|
||||||
-1,-2,-4,-6,-A,-a,-C,-f,-g,-K,-k,-M,-N,-n,-q,-s,-T,-t,-V,-v,-X,-x,-Y,-y '$__update_SSHOPTS "$option_"' \
|
-1,-2,-4,-6,-A,-a,-C,-f,-g,-K,-k,-M,-N,-n,-q,-s,-T,-t,-V,-v,-X,-x,-Y,-y '$__update_SSHOPTS "$option_"' \
|
||||||
|
@ -287,6 +292,7 @@ parse_opts ${UTOOLS_USSH_RSYNC_SUPPORT:++} "${PRETTYOPTS[@]}" \
|
||||||
--exec exec=1 \
|
--exec exec=1 \
|
||||||
--no-exec exec= \
|
--no-exec exec= \
|
||||||
--parse '$parse=1; remove=' \
|
--parse '$parse=1; remove=' \
|
||||||
|
--cc uwatch=1 \
|
||||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
if [ -n "$remove" ]; then
|
if [ -n "$remove" ]; then
|
||||||
|
@ -309,6 +315,9 @@ fi
|
||||||
[ -n "$SSH" ] || SSH=ssh
|
[ -n "$SSH" ] || SSH=ssh
|
||||||
if [ -n "$parse" ]; then
|
if [ -n "$parse" ]; then
|
||||||
show_vars "$@"
|
show_vars "$@"
|
||||||
|
elif [ -n "$uwatch" ]; then
|
||||||
|
__update_SSHOPTS -t
|
||||||
|
do_ssh "/usr/local/nutools/uwatch --cc"
|
||||||
else
|
else
|
||||||
do_ssh "$@"
|
do_ssh "$@"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: afficher l'heure
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname [options]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-t, --time
|
||||||
|
Afficher l'heure (par défaut)
|
||||||
|
-c, --count
|
||||||
|
Afficher le temps écoulé depuis le lancement de ce script
|
||||||
|
-u, --units
|
||||||
|
Avec l'option --count, afficher l'unité: sec., min. ou heures
|
||||||
|
-o, --offset NBSEC
|
||||||
|
Avec l'option --count, spécifier un nombre de secondes à partir duquel
|
||||||
|
compter
|
||||||
|
-s, --step NBSECS[=1]
|
||||||
|
Spécifier la période de rafraichissement de l'affichage
|
||||||
|
-a, --prefix PREFIX
|
||||||
|
Spécifier une chaine à afficher avant l'heure
|
||||||
|
-z, --suffix SUFFIX
|
||||||
|
Spécifier une chaine à afficher après l'heure
|
||||||
|
--cc
|
||||||
|
Equivalent à -c -s 5 -a 'Connecté sur \$MYHOST depuis ' -z '...'
|
||||||
|
Permet de garantir une activité sur une connexion SSH utilisée
|
||||||
|
uniquement pour faire une redirection de port"
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFAULT_STEP=1
|
||||||
|
|
||||||
|
what=time
|
||||||
|
units=
|
||||||
|
offset=
|
||||||
|
step=
|
||||||
|
prefix=
|
||||||
|
suffix=
|
||||||
|
args=(
|
||||||
|
--help '$exit_with display_help'
|
||||||
|
-t,--time what=time
|
||||||
|
-c,--count what=count
|
||||||
|
-u,--units units=1
|
||||||
|
-o:,--offset: offset=
|
||||||
|
-s:,--step: step=
|
||||||
|
-a:,--prefix: prefix=
|
||||||
|
-z:,--suffix: suffix=
|
||||||
|
--cc '$what=count; units=1; step=5; prefix="Connecté sur $MYHOST depuis "; suffix="..."'
|
||||||
|
)
|
||||||
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
|
[ -n "$step" ] || step="$DEFAULT_STEP"
|
||||||
|
setx start=date +%s
|
||||||
|
[ -n "$offset" ] && start=$(($start - $offset))
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
case "$what" in
|
||||||
|
time)
|
||||||
|
setx msg=date +%H:%M:%S
|
||||||
|
;;
|
||||||
|
count)
|
||||||
|
setx now=date +%s
|
||||||
|
TZ= setx msg=date -d "@$(($now - $start))" +%H:%M:%S
|
||||||
|
msg="${msg#00:}"; msg="${msg#00:}"
|
||||||
|
if [ -n "$units" ]; then
|
||||||
|
if [ ${#msg} -ge 8 ]; then msg="$msg heures"
|
||||||
|
elif [ ${#msg} -eq 5 ]; then msg="$msg min"
|
||||||
|
elif [ ${#msg} -eq 2 ]; then msg="${msg#0} sec"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
[ ${#msg} -eq 2 ] && msg="${msg#0}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo -n $'\e[1G\e[K'"$prefix$msg$suffix"
|
||||||
|
sleep "$step"
|
||||||
|
done
|
Loading…
Reference in New Issue