importation initiale dans git
This commit is contained in:
commit
39f9ee159c
|
@ -0,0 +1,60 @@
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
gendefault
|
||||||
|
|
||||||
|
etitle "Documentation de ulib"
|
||||||
|
array_from_lines ulibnames "$(list_files ulib)"
|
||||||
|
# faire les pages
|
||||||
|
for ulibname in "${ulibnames[@]}"; do
|
||||||
|
awkrun <"ulib/$ulibname" 'BEGIN {
|
||||||
|
in_func = 0
|
||||||
|
dump_doc = 0
|
||||||
|
dumped_doc = 0
|
||||||
|
print
|
||||||
|
}
|
||||||
|
!in_func && $0 ~ /^function / {
|
||||||
|
if (match($0, /function +([^ ]+)\(\)/, vs)) {
|
||||||
|
funcname = vs[1]
|
||||||
|
if (funcname !~ /^_/) {
|
||||||
|
in_func = 1
|
||||||
|
dump_doc = 1
|
||||||
|
dumped_doc = 0
|
||||||
|
print "==== " funcname " ===="
|
||||||
|
if ($0 ~ /}$/) {
|
||||||
|
in_func = 0
|
||||||
|
dump_doc = 0
|
||||||
|
dumped_doc = 0
|
||||||
|
}
|
||||||
|
next
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
in_func && dump_doc && $0 !~ /^ *#/ {
|
||||||
|
dump_doc = 0
|
||||||
|
}
|
||||||
|
in_func && dump_doc && $0 ~ /^ *#/ {
|
||||||
|
if (!dumped_doc) print "<code>"
|
||||||
|
gsub(/^ *#+/, "")
|
||||||
|
print
|
||||||
|
dumped_doc = 1
|
||||||
|
}
|
||||||
|
in_func && $0 ~ /}$/ {
|
||||||
|
if (dumped_doc) print "</code>"
|
||||||
|
in_func = 0
|
||||||
|
dump_doc = 0
|
||||||
|
dumped_doc = 0
|
||||||
|
}
|
||||||
|
END { if (in_func) print "</code>" }
|
||||||
|
' | setpage "$ulibname" ulib
|
||||||
|
done
|
||||||
|
eend
|
||||||
|
|
||||||
|
# faire l'entête
|
||||||
|
addpage start <<EOF
|
||||||
|
==== Librairies ulib ====
|
||||||
|
EOF
|
||||||
|
for ulibname in "${ulibnames[@]}"; do
|
||||||
|
addpage start <<EOF
|
||||||
|
* [[${ns}ulib:$ulibname]]
|
||||||
|
EOF
|
||||||
|
done
|
|
@ -0,0 +1,31 @@
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# Utiliser 'udir --help-vars' pour une description de la signification des
|
||||||
|
# variables suivantes:
|
||||||
|
udir_desc="Outils divers pour linux/macosx, et librairies pour bash"
|
||||||
|
udir_note=""
|
||||||
|
udir_types=("uinst")
|
||||||
|
uinc=true
|
||||||
|
uinc_options=()
|
||||||
|
uinc_args=(ucrontab reptyr.cgo ulib/ulibsh ulib/support/install-pubkeys.sh lib/uinst/system_caps.legacy)
|
||||||
|
# Faut-il désinstaller les fichiers de configuration de utools?
|
||||||
|
uninst_utools=
|
||||||
|
# Faut-il supprimer /usr/local/utools?
|
||||||
|
rm_utools=
|
||||||
|
# Faut-il installer le service kvm-stop-all?
|
||||||
|
kvm_service=
|
||||||
|
# Faut-il installer le service openvz-fix-etchosts?
|
||||||
|
openvz_service=
|
||||||
|
configure_variables=(dest uninst_utools rm_utools kvm_service openvz_service)
|
||||||
|
configure_dest_for=(bashrc profile lib/uinst/conf lib/uinst/rootconf lib/profile.d/nutools lib/init.d/kvm-stop-all legacy/sysinc/utools legacy/sysinc/system_caps legacy/sysinc/private/init)
|
||||||
|
config_scripts=(lib/uinst/conf lib/uinst/system_caps.legacy)
|
||||||
|
install_profiles=true
|
||||||
|
profiledir=lib/profile.d
|
||||||
|
bashrcdir=lib/bashrc.d
|
||||||
|
defaultdir=lib/default
|
||||||
|
copy_files=true
|
||||||
|
destdir=/usr/local
|
||||||
|
srcdir=.
|
||||||
|
files=()
|
||||||
|
owner=root:
|
||||||
|
modes=(u=rwX,g=rX,o=rX)
|
||||||
|
root_scripts=(lib/uinst/rootconf)
|
|
@ -0,0 +1,111 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: s'assurer que les services sont lancés pour un type de virtualisation
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname type
|
||||||
|
|
||||||
|
Les types supportés sont virtualbox et kvm (par défaut)"
|
||||||
|
}
|
||||||
|
|
||||||
|
source "$(dirname "$0")/ulib/ulib" &&
|
||||||
|
urequire DEFAULTS service ||
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
function ensure_kvm() {
|
||||||
|
# S'assurer que les modules VirtualBox sont déchargés et que les modules kvm
|
||||||
|
# sont chargés, et que le service libvirt-bin est démarré
|
||||||
|
local module modified
|
||||||
|
|
||||||
|
# Vérifier que les modules vbox* sont déchargés
|
||||||
|
for module in vboxpci vboxnetadp vboxnetflt vboxdrv; do
|
||||||
|
if lsmod | quietgrep "$module"; then
|
||||||
|
eecho "-$module"
|
||||||
|
rmmod "$module" || return 1
|
||||||
|
modified=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Vérifier que kvm{,_intel,_amd} sont chargés
|
||||||
|
if grep -q ^flags.*\\\<vmx\\\> /proc/cpuinfo; then
|
||||||
|
module=kvm_intel
|
||||||
|
elif grep -q ^flags.*\\\<svm\\\> /proc/cpuinfo; then
|
||||||
|
module=kvm_amd
|
||||||
|
else
|
||||||
|
module=
|
||||||
|
fi
|
||||||
|
if [ -n "$module" ]; then
|
||||||
|
for module in kvm $module; do
|
||||||
|
if ! lsmod | quietgrep "$module"; then
|
||||||
|
eecho "+$module"
|
||||||
|
modprobe "$module" || return 1
|
||||||
|
modified=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -n "$modified" ] && sleep 1
|
||||||
|
|
||||||
|
service=
|
||||||
|
if check_sysinfos -d redhatlike; then
|
||||||
|
for i in libvirtd libvirtd-bin; do
|
||||||
|
[ -f "/etc/init.d/$i" ] && {
|
||||||
|
service="$i"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
done
|
||||||
|
elif check_sysinfos -d debianlike; then
|
||||||
|
service=libvirt-bin
|
||||||
|
fi
|
||||||
|
if [ -n "$service" ]; then
|
||||||
|
# s'assurer que le service tourne
|
||||||
|
service libvirt-bin startm
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function ensure_virtualbox() {
|
||||||
|
# S'assurer que les modules kvm sont déchargés, que les modules VirtualBox
|
||||||
|
# sont chargés, et que le service vboxdrv est démarré
|
||||||
|
local module modified
|
||||||
|
|
||||||
|
# Vérifier que kvm{,_intel,_amd} ne sont pas chargés
|
||||||
|
for module in kvm_intel kvm_amd kvm; do
|
||||||
|
if lsmod | quietgrep "$module"; then
|
||||||
|
eecho "-$module"
|
||||||
|
rmmod "$module" || return 1
|
||||||
|
modified=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Vérifier que les modules vbox* sont chargés
|
||||||
|
[ -f /lib/modules/`uname -r`/updates/dkms/vboxpci.ko ] &&
|
||||||
|
vboxmodules=(vboxnetflt vboxnetadp vboxpci vboxdrv) ||
|
||||||
|
vboxmodules=(vboxnetflt vboxnetadp vboxdrv)
|
||||||
|
for module in "${vboxmodules[@]}"; do
|
||||||
|
if ! lsmod | quietgrep "$module"; then
|
||||||
|
eecho "+$module"
|
||||||
|
modprobe "$module" || return 1
|
||||||
|
modified=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
[ -n "$modified" ] && sleep 1
|
||||||
|
|
||||||
|
# s'assurer que le service tourne
|
||||||
|
service vboxdrv startm
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_opts + "${PRETTYOPTS[@]}" \
|
||||||
|
--help '$exit_with display_help' \
|
||||||
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
run_as_root "$@"
|
||||||
|
|
||||||
|
case "${1:-kvm}" in
|
||||||
|
k|kvm) ensure_kvm;;
|
||||||
|
v|vbox|virtualbox) ensure_virtualbox;;
|
||||||
|
esac
|
|
@ -0,0 +1,189 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: lancer une machine virtuelle kvm
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname [options] vmName
|
||||||
|
$scriptname {-l|-A|-g}
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-n Ne rien faire excepté s'assurer que les modules kvm sont chargés
|
||||||
|
-u Lancer l'opération avec les droits de l'utilisateur courant. Par défaut,
|
||||||
|
ce script tente d'acquérir les droits de root.
|
||||||
|
-l Lister les machines virtuelles
|
||||||
|
-s Démarrer la machine virtuelle (par défaut)
|
||||||
|
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||||
|
affiché
|
||||||
|
-k Arrêter la machine virtuelle
|
||||||
|
-H Arrêter sauvagement la machine virtuelle
|
||||||
|
-r Redémarrer la machine virtuelle
|
||||||
|
-S Enregistrer l'état de la machine virtuelle
|
||||||
|
-A Arrêter toutes les machines virtuelles qui tournent actuellement
|
||||||
|
-g Afficher le gestionnaire de machines virtuelle"
|
||||||
|
}
|
||||||
|
|
||||||
|
source "$(dirname "$0")/ulib/ulib" &&
|
||||||
|
urequire DEFAULTS virsh ||
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
function build_arrays() {
|
||||||
|
# Construire les listes avms, rvms, svms
|
||||||
|
# rvms: les vms qui tournent
|
||||||
|
# avms: toutes les vms
|
||||||
|
# svms: les vms qui sont arrêtées
|
||||||
|
rvms=()
|
||||||
|
eval "$(virsh_list | awk '{print $2}' | sort | sed 's/^/array_add rvms /g')"
|
||||||
|
avms=()
|
||||||
|
eval "$(virsh_list --all | awk '{print $2}' | sort | sed 's/^/array_add avms /g')"
|
||||||
|
svms=()
|
||||||
|
for avm in "${avms[@]}"; do
|
||||||
|
array_contains rvms "$avm" || array_add svms "$avm"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_numeric() {
|
||||||
|
[ -n "$1" -a -z "${1//[0-9]/}" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
function select_vm() {
|
||||||
|
# Afficher un menu pour sélectionner la machine virtuelle
|
||||||
|
simple_menu "${2:-vm}" "${1:-avms}" \
|
||||||
|
-t "Machines virtuelles" \
|
||||||
|
-m "${3:-Choisissez la VM}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_virtmanager() {
|
||||||
|
# Lancer le gestionnaire de machines virtuelles
|
||||||
|
# Les mesures prises le sont pour compatibilité avec Fedora, si la commande
|
||||||
|
# est lancée depuis le menu. En effet, toutes les processus fils sont tués
|
||||||
|
# s'ils ne sont pas détachés avant la fin de la commande du menu. Le délai
|
||||||
|
# est donc pour laisser le temps à virt-manager de s'initialiser.
|
||||||
|
nohup >/dev/null 2>&1 virt-manager &
|
||||||
|
sleep 3
|
||||||
|
}
|
||||||
|
|
||||||
|
sudo=1
|
||||||
|
action=start
|
||||||
|
stopaction=shutdown
|
||||||
|
parse_opts + "${PRETTYOPTS[@]}" \
|
||||||
|
--help '$exit_with display_help' \
|
||||||
|
-u,--user sudo= \
|
||||||
|
-n action=nop \
|
||||||
|
-l,--list action=list \
|
||||||
|
-s,--start action=start \
|
||||||
|
-k,-t,--stop '$action=stop; stopaction=shutdown' \
|
||||||
|
-H '$action=stop; stopaction=destroy' \
|
||||||
|
-r,--restart '$action=stop; stopaction=reboot' \
|
||||||
|
-S '$action=stop; stopaction=managedsave' \
|
||||||
|
-A,--stopall,--stop-all action=stopall \
|
||||||
|
-g action=gui \
|
||||||
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
if ! is_root && [ -n "$sudo" ]; then
|
||||||
|
# reconstruire la ligne de commande
|
||||||
|
case "$action" in
|
||||||
|
nop) opt=-n;;
|
||||||
|
list) opt=-l;;
|
||||||
|
start) opt=-s;;
|
||||||
|
stop)
|
||||||
|
case "$stopaction" in
|
||||||
|
shutdown) opt=-k;;
|
||||||
|
destroy) opt=-H;;
|
||||||
|
reboot) opt=-r;;
|
||||||
|
managedsave) opt=-S;;
|
||||||
|
*) opt=-k;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
stopall) opt=--stopall;;
|
||||||
|
gui) opt=-g;;
|
||||||
|
esac
|
||||||
|
run_as_root "$opt" "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$scriptdir/EnsureVM" kvm || die
|
||||||
|
[ "$action" == "nop" ] && exit 0
|
||||||
|
|
||||||
|
build_arrays
|
||||||
|
|
||||||
|
vm="$1"; shift
|
||||||
|
if [ -n "$vm" ]; then
|
||||||
|
if ! array_contains avms "$vm" && is_numeric "$vm"; then
|
||||||
|
vm=$(($vm - 1))
|
||||||
|
vm="${avms[$vm]}"
|
||||||
|
enote "Sélection de la VM $vm"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$action" == list ]; then
|
||||||
|
for avm in "${avms[@]}"; do
|
||||||
|
if array_contains rvms "$avm"; then
|
||||||
|
avm="$(get_color @ g)$avm [running]$(get_color z)"
|
||||||
|
fi
|
||||||
|
echo "$avm$state"
|
||||||
|
done
|
||||||
|
|
||||||
|
elif [ "$action" == start ]; then
|
||||||
|
if [ -z "$vm" -a -n "${svms[*]}" ]; then
|
||||||
|
[ -n "${rvms[*]}" ] &&
|
||||||
|
einfo "Les machines virtuelles suivantes sont déjà démarrées:
|
||||||
|
$(array_join rvms "
|
||||||
|
" "" " ")" #"
|
||||||
|
select_vm svms vm "Choisissez la VM à démarrer"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$vm" ]; then
|
||||||
|
virsh start "$vm" "$@"
|
||||||
|
else
|
||||||
|
ewarn "Aucune VM à démarrer n'a été trouvée"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "$action" == stop ]; then
|
||||||
|
if [ -z "$vm" -a "${rvms[*]}" ]; then
|
||||||
|
select_vm rvms vm "Choisissez la VM à arrêter avec la méthode $stopaction"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$vm" ]; then
|
||||||
|
virsh "$stopaction" "$vm"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "$action" == stopall ]; then
|
||||||
|
# Arrêter toutes les machines virtuelles. Au bout de 10 minutes maximum,
|
||||||
|
# forcer l'arrêt de toutes celles qui restent
|
||||||
|
estep "Arrêt de toutes les machines virtuelles"
|
||||||
|
for vm in "${rvms[@]}"; do
|
||||||
|
virsh shutdown "$vm"
|
||||||
|
done
|
||||||
|
|
||||||
|
# laisser 10 secondes pour l'arrêt initial
|
||||||
|
estep "Attente de l'arrêt des machines..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# Puis attendre au maximum 10 minutes pour l'arrêt de toutes les machines
|
||||||
|
max=10
|
||||||
|
all_stopped=
|
||||||
|
while [ $max -gt 0 ]; do
|
||||||
|
build_arrays
|
||||||
|
if [ -z "${rvms[*]}" ]; then
|
||||||
|
all_stopped=1
|
||||||
|
break
|
||||||
|
else
|
||||||
|
einfo "Il y a encore ${#rvms[*]} machine(s) en fonctionnement. Attente de $max minute(s)..."
|
||||||
|
sleep 60
|
||||||
|
max=$(($max - 1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Puis forcer l'arrêt des machines
|
||||||
|
if [ -z "$all_stopped" ]; then
|
||||||
|
build_arrays
|
||||||
|
eattention "Forçage de l'arrêt des machines ${rvms[*]}"
|
||||||
|
for vm in "${rvms[@]}"; do
|
||||||
|
virsh destroy "$vm"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "$action" == gui ]; then
|
||||||
|
start_virtmanager
|
||||||
|
fi
|
|
@ -0,0 +1,127 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: lancer une machine virtuelle VirtualBox
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname [options] vmName
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||||
|
-l Lister les machines virtuelles
|
||||||
|
-s Démarrer la machine virtuelle (par défaut)
|
||||||
|
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||||
|
affiché
|
||||||
|
-k Arrêter la machine virtuelle (par ACPI)
|
||||||
|
-p Mettre en veille la machine virtuelle (par ACPI)
|
||||||
|
-H Arrêter sauvagement la machine virtuelle
|
||||||
|
-R Redémarrer sauvagement la machine virtuelle
|
||||||
|
-S Enregistrer l'état de la machine virtuelle
|
||||||
|
-g Afficher le gestionnaire de machines virtuelle"
|
||||||
|
}
|
||||||
|
|
||||||
|
source "$(dirname "$0")/ulib/ulib" &&
|
||||||
|
urequire DEFAULTS ||
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
function build_arrays() {
|
||||||
|
# Construire les listes avms, rvms, svms
|
||||||
|
# rvms: les vms qui tournent
|
||||||
|
# avms: toutes les vms
|
||||||
|
# svms: les vms qui sont arrêtées
|
||||||
|
rvms=()
|
||||||
|
eval "$(VBoxManage -q list runningvms | sort | sed 's/^/array_add rvms /g')"
|
||||||
|
avms=()
|
||||||
|
eval "$(VBoxManage -q list vms | sort | sed 's/^/array_add avms /g')"
|
||||||
|
svms=()
|
||||||
|
for avm in "${avms[@]}"; do
|
||||||
|
array_contains rvms "$avm" || array_add svms "$avm"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_numeric() {
|
||||||
|
[ -n "$1" -a -z "${1//[0-9]/}" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
function select_vm() {
|
||||||
|
# Afficher un menu pour sélectionner la machine virtuelle
|
||||||
|
simple_menu "${2:-vm}" "${1:-avms}" \
|
||||||
|
-t "Machines virtuelles" \
|
||||||
|
-m "${3:-Choisissez la VM}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_virtualbox() {
|
||||||
|
# Lancer le gestionnaire de machines virtuelles
|
||||||
|
# Les mesures prises le sont pour compatibilité avec Fedora, si la commande
|
||||||
|
# est lancée depuis le menu. En effet, toutes les processus fils sont tués
|
||||||
|
# s'ils ne sont pas détachés avant la fin de la commande du menu. Le délai
|
||||||
|
# est donc pour laisser le temps à VirtualBox de s'initialiser.
|
||||||
|
nohup >/dev/null 2>&1 VirtualBox &
|
||||||
|
sleep 3
|
||||||
|
}
|
||||||
|
|
||||||
|
action=start
|
||||||
|
stopaction=acpipowerbutton
|
||||||
|
parse_opts + "${PRETTYOPTS[@]}" \
|
||||||
|
--help '$exit_with display_help' \
|
||||||
|
-n action=nop \
|
||||||
|
-l,--list action=list \
|
||||||
|
-s,--start action=start \
|
||||||
|
-k,-t,--stop '$action=stop; stopaction=acpipowerbutton' \
|
||||||
|
-p,--sleep '$action=stop; stopaction=acpisleepbutton' \
|
||||||
|
-H '$action=stop; stopaction=poweroff' \
|
||||||
|
-R '$action=stop; stopaction=reset' \
|
||||||
|
-S '$action=stop; stopaction=savestate' \
|
||||||
|
-g action=gui \
|
||||||
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
"$scriptdir/EnsureVM" virtualbox || die
|
||||||
|
[ "$action" == "nop" ] && exit 0
|
||||||
|
|
||||||
|
build_arrays
|
||||||
|
|
||||||
|
vm="$1"; shift
|
||||||
|
if [ -n "$vm" ]; then
|
||||||
|
if ! array_contains avms "$vm" && is_numeric "$vm"; then
|
||||||
|
vm=$(($vm - 1))
|
||||||
|
vm="${avms[$vm]}"
|
||||||
|
enote "Sélection de la VM $vm"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$action" == list ]; then
|
||||||
|
for avm in "${avms[@]}"; do
|
||||||
|
if array_contains rvms "$avm"; then
|
||||||
|
avm="$(get_color @ g)$avm [running]$(get_color z)"
|
||||||
|
fi
|
||||||
|
echo "$avm$state"
|
||||||
|
done
|
||||||
|
|
||||||
|
elif [ "$action" == start ]; then
|
||||||
|
if [ -z "$vm" -a -n "${svms[*]}" ]; then
|
||||||
|
[ -n "${rvms[*]}" ] &&
|
||||||
|
einfo "Les machines virtuelles suivantes sont déjà démarées:
|
||||||
|
$(array_join rvms "
|
||||||
|
" "" " ")" #"
|
||||||
|
select_vm svms vm "Choisissez la VM à démarrer"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$vm" ]; then
|
||||||
|
VBoxManage -q startvm "$vm" "$@"
|
||||||
|
else
|
||||||
|
ewarn "Aucune VM à démarrer n'a été trouvée"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "$action" == stop ]; then
|
||||||
|
if [ -z "$vm" -a "${rvms[*]}" ]; then
|
||||||
|
select_vm rvms vm "Choisissez la VM à arrêter avec la méthode $stopaction"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$vm" ]; then
|
||||||
|
VBoxManage -q controlvm "$vm" "$stopaction"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "$action" == gui ]; then
|
||||||
|
start_virtualbox
|
||||||
|
fi
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: devenir l'utilisateur root, avec 'sudo' si possible, ou 'su' si
|
||||||
|
'sudo' n'est pas installé"
|
||||||
|
}
|
||||||
|
|
||||||
|
source "$(dirname "$0")/ulib/ulib" &&
|
||||||
|
urequire base ||
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
parse_opts "${PRETTYOPTS[@]}" \
|
||||||
|
--help '$exit_with display_help' \
|
||||||
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
user="$scriptname"
|
||||||
|
if [ "${user#_}" != "$user" ]; then
|
||||||
|
user="${user:1}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if is_yes "$UTOOLS_USES_SU" || ! progexists sudo; then
|
||||||
|
eecho "Entrez le mot de passe de $user"
|
||||||
|
exec su - "$user"
|
||||||
|
else
|
||||||
|
eecho "Si demandé, entrez le mot de passe de $USER"
|
||||||
|
exec sudo su - "$user"
|
||||||
|
fi
|
|
@ -0,0 +1,74 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: Se connecter sur un site FTP authentifié
|
||||||
|
Ce script nécessite ncftp. Il est conçu pour faciliter l'accès à des sites FTP
|
||||||
|
s'il est requis d'y accéder par un proxy FTP pour les connexion authentifiées.
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname [options] host login password [path]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-p, --proxy
|
||||||
|
-n, --noproxy
|
||||||
|
Forcer l'utilisation, resp. ne pas utiliser, le proxy FTP (i.e. faire la
|
||||||
|
connexion directement)
|
||||||
|
-l, --lftp
|
||||||
|
Se connecter avec lftp au lieu de ncftp. Le fonctionnement n'est pas
|
||||||
|
garanti si l'on utilise un proxy FTP.
|
||||||
|
-o OPTION
|
||||||
|
Ajouter une option à la commande lancée. Si l'option prend un argument,
|
||||||
|
il faut doubler l'option -o, e.g.
|
||||||
|
$scriptname -l -o -e -o 'mirror remote local' host login pass
|
||||||
|
Dans cet exemple, l'option -e de lftp est utilisée pour faire un miroir
|
||||||
|
local du répertoire remote.
|
||||||
|
|
||||||
|
note: A cause d'une limitation de lftp, ce n'est pas possible de se connecter
|
||||||
|
automatiquement avec lftp si le mot de passe contient une virgule. A cause de la
|
||||||
|
façon dont le proxy ftp est configuré, il n'est pas possible de se connecter
|
||||||
|
avec un mot de passe qui contient le caractère @"
|
||||||
|
}
|
||||||
|
|
||||||
|
source "$(dirname "$0")/ulib/ulib" &&
|
||||||
|
urequire DEFAULTS ||
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
AUTHFTP_PROXY_DISABLED=1 # par défaut, ne pas utiliser le proxy
|
||||||
|
set_defaults proxy
|
||||||
|
set_defaults authftp
|
||||||
|
|
||||||
|
noproxy="$AUTHFTP_PROXY_DISABLED"
|
||||||
|
lftp=
|
||||||
|
options=()
|
||||||
|
parse_opts "${PRETTYOPTS[@]}" \
|
||||||
|
--help '$exit_with display_help' \
|
||||||
|
-p,--proxy noproxy= \
|
||||||
|
-n,--noproxy noproxy=1 \
|
||||||
|
-l,--lftp lftp=1 \
|
||||||
|
-o:,--option: options \
|
||||||
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
[ -n "$noproxy" -o -n "$AUTHFTP_PROXY_HOST" ] || die "AUTHFTP_PROXY_HOST doit être défini"
|
||||||
|
|
||||||
|
my_login="$PROXY_LOGIN"
|
||||||
|
my_password="$PROXY_PASSWORD"
|
||||||
|
|
||||||
|
read_value -i "Entrez le nom de l'hôte" host "$1"
|
||||||
|
read_value -i "Entrez l'identifiant de connexion" login "$2"
|
||||||
|
read_value -i "Entrez le mot de passe" password "$3"
|
||||||
|
read_value -i "Entrez le chemin" path "$4" N
|
||||||
|
|
||||||
|
if [ -n "$lftp" ]; then
|
||||||
|
if [ -n "$noproxy" ]; then
|
||||||
|
exec lftp -u "$login,$password" "${options[@]}" "ftp://$host/$path"
|
||||||
|
else
|
||||||
|
exec lftp -u "${login}@${my_login}@${host},${password}@${my_password}" "${options[@]}" "ftp://$AUTHFTP_PROXY_HOST/$path"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ -n "$noproxy" ]; then
|
||||||
|
exec ncftp -u "$login" -p "$password" "${options[@]}" "ftp://$host/$path"
|
||||||
|
else
|
||||||
|
exec ncftp -u "${login}@${my_login}@${host}" -p "${password}@${my_password}" "${options[@]}" "ftp://$AUTHFTP_PROXY_HOST/$path"
|
||||||
|
fi
|
||||||
|
fi
|
|
@ -0,0 +1,6 @@
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function uprovide() { :; }
|
||||||
|
source @@dest@@/ulib/uenv || return
|
||||||
|
__uenv_source_dirs @@dest@@/bashrc.d "$HOME/etc/bashrc.d"
|
||||||
|
__uenv_cleanup
|
|
@ -0,0 +1,81 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: Afficher une url
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname <file.url|file.desktop|URL>"
|
||||||
|
}
|
||||||
|
|
||||||
|
source "$(dirname "$0")/ulib/ulib" &&
|
||||||
|
urequire DEFAULTS ||
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
parse_opts "${PRETTYOPTS[@]}" \
|
||||||
|
--help '$exit_with display_help' \
|
||||||
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
function findurl() {
|
||||||
|
echo "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
URL="$1"
|
||||||
|
URLFILE=
|
||||||
|
|
||||||
|
if [ -z "$URL" ]; then
|
||||||
|
# Essayer de trouver une fichier homepage.{url,desktop} dans le répertoire
|
||||||
|
# courant
|
||||||
|
URLFILE="$(findurl homepage)"
|
||||||
|
[ -f "$URLFILE" ] || die "Il faut spécifier l'url à ouvrir"
|
||||||
|
elif [ -d "$URL" ]; then
|
||||||
|
# répertoire dans lequel se trouve éventuellement un fichier
|
||||||
|
# homepage.{url,desktop}
|
||||||
|
URLFILE="$(findurl "$URL/homepage")"
|
||||||
|
if [ -f "$URLFILE" ]; then
|
||||||
|
# un fichier d'url valide
|
||||||
|
:
|
||||||
|
else
|
||||||
|
# un répertoire local à ouvrir
|
||||||
|
URLFILE=
|
||||||
|
URL="file://$(abspath "$URL")"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
URLFILE="$(findurl "$URL")"
|
||||||
|
if [ -f "$URLFILE" ]; then
|
||||||
|
# un fichier d'url valide
|
||||||
|
:
|
||||||
|
else
|
||||||
|
if [ -f "$URL" ]; then
|
||||||
|
# un fichier local à ouvrir
|
||||||
|
URL="file://$(abspath "$URL")"
|
||||||
|
else
|
||||||
|
# on assume que c'est une url standard
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$URLFILE" ]; then
|
||||||
|
# lire l'url dans un fichier
|
||||||
|
if [ "${URLFILE%.url}" != "$URL" ]; then
|
||||||
|
# raccourci vers une url de windows
|
||||||
|
URL="$(<"$URLFILE" awk 'BEGIN { type = 0; URL = "" }
|
||||||
|
tolower($0) == "[internetshortcut]" { type = type + 1 }
|
||||||
|
/[uU][rR][lL]=/ { URL = substr($0, 5) }
|
||||||
|
END { if (type == 1) print URL }
|
||||||
|
')"
|
||||||
|
[ -n "$URL" ] || die "$URLFILE: ne contient pas d'URL"
|
||||||
|
elif [ "${URLFILE%.desktop}" != "$URL" ]; then
|
||||||
|
# raccourci vers une url de XDG
|
||||||
|
URL="$(<"$URLFILE" awk 'BEGIN { type = 0; URL = "" }
|
||||||
|
tolower($0) == "[desktop entry]" { type = type + 1 }
|
||||||
|
/Type=Link/ { type = type + 1 }
|
||||||
|
/[uU][rR][lL]=/ { URL = substr($0, 5) }
|
||||||
|
END { if (type == 2) print URL }
|
||||||
|
')"
|
||||||
|
[ -n "$URL" ] || die "$URLFILE: ne contient pas d'URL"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$URL"
|
|
@ -0,0 +1,625 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# See notice of copyright and license at end.
|
||||||
|
|
||||||
|
# If you use this program for a #! script, please include the following
|
||||||
|
# as the second line of the script:
|
||||||
|
# See http://Yost.com/computers/compileAndGo
|
||||||
|
|
||||||
|
# Bug: doesn't recompile if invoked file is a symlink. Fixed?
|
||||||
|
# Needs a call to realpath.
|
||||||
|
|
||||||
|
## Bug: The following fails for the cg command after fixing it to work for compileAndGo
|
||||||
|
# Something about evaluation order of the variables in the source header.
|
||||||
|
# compiler = gcc
|
||||||
|
# compilerArgs = -O2 -o $cacheDir/$executableFilename $cacheDir/$sourceFilename
|
||||||
|
|
||||||
|
if [ $# == 1 -a "$1" == --help ]; then
|
||||||
|
echo "compileAndGo: see http://Yost.com/computers/compileAndGo"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# The #! compileAndGo script that invoked us.
|
||||||
|
# If $0 is a symlink, this is the invoked name, not the symlink referent name
|
||||||
|
typeset -r commandFile="$1"
|
||||||
|
|
||||||
|
pathOfDirPartOfExecPath() {
|
||||||
|
if [[ -h "$1" ]] ; then
|
||||||
|
local lsout="$(ls -l "$1")"
|
||||||
|
local referent="${lsout#* -> }"
|
||||||
|
pathOfDirPartOfExecPath "$referent"
|
||||||
|
elif [[ -d "${1%/*}" ]] ; then
|
||||||
|
echo "${1%/*}"
|
||||||
|
else
|
||||||
|
echo .
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
typeset -r commandDir="$(pathOfDirPartOfExecPath "$0")/"
|
||||||
|
# If $0 is a symlink, this is the invoked name, not the symlink referent name
|
||||||
|
|
||||||
|
ourName=${0##*/}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
extensionToLanguage() {
|
||||||
|
case "$1" in
|
||||||
|
js)
|
||||||
|
echo javascript
|
||||||
|
;;
|
||||||
|
java)
|
||||||
|
echo java
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
echo c
|
||||||
|
;;
|
||||||
|
cp | cpp | C | cxx | cc)
|
||||||
|
echo c++
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
languageToCompiler() {
|
||||||
|
case "$1" in
|
||||||
|
javascript)
|
||||||
|
echo jsc
|
||||||
|
;;
|
||||||
|
java)
|
||||||
|
echo javac
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
if [[ -x /usr/bin/gcc ]] ; then
|
||||||
|
echo /usr/bin/gcc
|
||||||
|
else
|
||||||
|
echo /usr/bin/cc
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
c++)
|
||||||
|
echo /usr/bin/g++
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
echo2() {
|
||||||
|
# This works for sh, ksh, and bash, but not zsh.
|
||||||
|
echo "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
echoVariables() {
|
||||||
|
echo 1>&2 $1
|
||||||
|
if [[ ! $ourName == cg ]] ; then
|
||||||
|
# Echo all but the builtins.
|
||||||
|
echo 1>&2 "$(
|
||||||
|
eval "$(
|
||||||
|
echo "$cmdSetters" \
|
||||||
|
| grep -v 'commandBasename
|
||||||
|
commandDir
|
||||||
|
sourceFilename
|
||||||
|
language
|
||||||
|
mainClass
|
||||||
|
executableFilename
|
||||||
|
compilerDir
|
||||||
|
classPath
|
||||||
|
compilerArgs
|
||||||
|
linkerArgs
|
||||||
|
execute
|
||||||
|
firstArgIsCommandName
|
||||||
|
verbose' \
|
||||||
|
| sed "
|
||||||
|
s,^eval,echo,
|
||||||
|
s,=, = ,
|
||||||
|
s,',,g
|
||||||
|
"
|
||||||
|
)" \
|
||||||
|
| sed "
|
||||||
|
s,= ,= ',
|
||||||
|
s,$,',
|
||||||
|
"
|
||||||
|
)"
|
||||||
|
else
|
||||||
|
echo 1>&2 commandName = "$commandName"
|
||||||
|
echo 1>&2 compiler = "$compiler"
|
||||||
|
fi
|
||||||
|
# Echo the builtins.
|
||||||
|
echo 1>&2 commandBasename = "$commandBasename"
|
||||||
|
echo 1>&2 commandDir = "$commandDir"
|
||||||
|
echo 1>&2 sourceFilename = "$sourceFilename"
|
||||||
|
echo 1>&2 language = "$language"
|
||||||
|
echo 1>&2 mainClass = "$mainClass"
|
||||||
|
echo 1>&2 executableFilename = "$executableFilename"
|
||||||
|
echo 1>&2 compilerDir = "$compilerDir"
|
||||||
|
echo 1>&2 classPath = "$classPath"
|
||||||
|
echo 1>&2 compilerArgs = "$compilerArgs"
|
||||||
|
echo 1>&2 linkerArgs = "$linkerArgs"
|
||||||
|
echo 1>&2 execute = "$execute"
|
||||||
|
echo 1>&2 firstArgIsCommandName = "$firstArgIsCommandName"
|
||||||
|
echo 1>&2 verbose = "$verbose"
|
||||||
|
}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# If we use zsh, we could do this:
|
||||||
|
# zmodload zsh/stat
|
||||||
|
# stat -F "%Y-%m-%d_%H-%M-%S" +mtime .
|
||||||
|
|
||||||
|
ls-linux() {
|
||||||
|
# 11742 2005-07-28 11:54:01.000000000
|
||||||
|
(
|
||||||
|
ls -dl --full-time --time-style=full-iso "$1" \
|
||||||
|
| sed 's,.*[0-9] \([12][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\) \([0-9][0-9]\):\([0-9][0-9]\):\([0-9][0-9]\).[0-9]* .*,\1.\2-\3-\4,'
|
||||||
|
) 2> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
ls-oldlinux() {
|
||||||
|
# 11742 Tue Mar 01 17:22:50 2005
|
||||||
|
(
|
||||||
|
ls -dl --full-time "$1" \
|
||||||
|
| sed 's,.*[0-9] ... \(...\) \([0-9][0-9]\) \([0-9][0-9]\):\([0-9][0-9]\):\([0-9][0-9]\) \([12][0-9][0-9][0-9]\) .*,\4-\1-\2.\3-\5-\6,'
|
||||||
|
) 2> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
ls-bsd() {
|
||||||
|
# 11742 Jul 28 12:38:31 2005
|
||||||
|
(
|
||||||
|
ls -dlT "$1" \
|
||||||
|
| awk '
|
||||||
|
BEGIN {
|
||||||
|
months["Jan"] = "01" ; months["Feb"] = "02" ; months["Mar"] = "03"
|
||||||
|
months["Apr"] = "04" ; months["May"] = "05" ; months["Jun"] = "06"
|
||||||
|
months["Jul"] = "07" ; months["Aug"] = "08" ; months["Sep"] = "09"
|
||||||
|
months["Oct"] = "10" ; months["Nov"] = "11" ; months["Dec"] = "12"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
month = sprintf(months[$6]) ; day = $7 ; time = $8 ; year = $9 # What about Europe?
|
||||||
|
gsub(":", "-", time)
|
||||||
|
date = year "-" month "-" day "_" time
|
||||||
|
print date
|
||||||
|
}
|
||||||
|
'
|
||||||
|
) 2> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
sourceInput=
|
||||||
|
case $ourName in
|
||||||
|
cg)
|
||||||
|
# Invoked as cg
|
||||||
|
if [[ $# == 0 ]] ; then
|
||||||
|
echo 1>&2 "Usage: cg sourcefile.<extension> [ args ... ]"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
sourceInput="$1"
|
||||||
|
export commandName=${commandFile##*/}
|
||||||
|
commandBasename="${commandName%.*}"
|
||||||
|
commandExtension="${commandFile##*.}"
|
||||||
|
sourceFilename=$commandName
|
||||||
|
language=$(extensionToLanguage $commandExtension)
|
||||||
|
compiler=$(languageToCompiler $language)
|
||||||
|
;;
|
||||||
|
cgs)
|
||||||
|
sourceInput=/dev/stdin
|
||||||
|
export commandName=$ourName
|
||||||
|
commandBasename=$commandName
|
||||||
|
compilerOpt="$1"
|
||||||
|
case "$compilerOpt" in
|
||||||
|
-jsc)
|
||||||
|
sourceFileName=$commandName.js
|
||||||
|
;;
|
||||||
|
-javac | -gcj | -jikes)
|
||||||
|
shift
|
||||||
|
export commandName=$1
|
||||||
|
commandBasename=$commandName
|
||||||
|
sourceFileName=$commandName.java
|
||||||
|
;;
|
||||||
|
-gcc | -c99 | -c89 | -cc)
|
||||||
|
sourceFileName=$commandName.c
|
||||||
|
;;
|
||||||
|
-g++)
|
||||||
|
sourceFileName=$commandName.cp
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
echo 1>&2 cgs: missing compiler option
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo 1>&2 cgs: unknown compiler option: "$compilerOpt"
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
compiler=${compilerOpt/-/}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
sourceInput=
|
||||||
|
# Invoked as compileAndGo
|
||||||
|
# Collect the variable declarations at the top of $commmandFile.
|
||||||
|
declarations="$(
|
||||||
|
sed -n '
|
||||||
|
s,^[ ]*,,
|
||||||
|
/^!#$/q
|
||||||
|
/^compileAndGo/q
|
||||||
|
/^[ ]*#/d
|
||||||
|
s,^commandName,export commandName,
|
||||||
|
/^echo[ ]/{
|
||||||
|
s/$/ ;/p
|
||||||
|
d
|
||||||
|
}
|
||||||
|
s,\$\({*commandBasename\),\\$\1,g
|
||||||
|
s,\$\({*commandDir\),\\$\1,g
|
||||||
|
s,\$\({*sourceFilename\),\\$\1,g
|
||||||
|
s,\$\({*language\),\\$\1,g
|
||||||
|
s,\$\({*mainClass\),\\$\1,g
|
||||||
|
s,\$\({*executableFilename\),\\$\1,g
|
||||||
|
s,\$\({*compilerDir\),\\$\1,g
|
||||||
|
s,\$\({*classPath\),\\$\1,g
|
||||||
|
s,\$\({*compilerArgs\),\\$\1,g
|
||||||
|
s,\$\({*linkerArgs\),\\$\1,g
|
||||||
|
s,\$\({*execute\),\\$\1,g
|
||||||
|
s,\$\({*cacheDir\),\\$\1,g
|
||||||
|
s,\$\({*firstArgIsCommandName\),\\$\1,g
|
||||||
|
s,[ ]*=[ ]*,=",
|
||||||
|
s,$," ;,
|
||||||
|
p
|
||||||
|
' "$commandFile"
|
||||||
|
)"
|
||||||
|
eval $declarations
|
||||||
|
[[ ! -z ${commandName:="${1##*/}"} ]]
|
||||||
|
commandBasename="${commandName%.*}"
|
||||||
|
if (( 0$verbose >= 5 )) ; then
|
||||||
|
echo 1>&2 \=== Declarations
|
||||||
|
echo 1>&2 "$declarations"
|
||||||
|
fi
|
||||||
|
if [[ -z "$compiler" ]] ; then
|
||||||
|
if [[ -z "$language" ]] ; then
|
||||||
|
echo 1>&2 compileAndGo: compiler or language must be set
|
||||||
|
trouble=true
|
||||||
|
fi
|
||||||
|
compiler=$(languageToCompiler $language)
|
||||||
|
fi
|
||||||
|
if [[ ! -z "$trouble" ]] ; then
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Collect the source code
|
||||||
|
|
||||||
|
newsed() {
|
||||||
|
local arg
|
||||||
|
if sed --regex-extended < /dev/null >& /dev/null ; then
|
||||||
|
arg=--regex-extended
|
||||||
|
else
|
||||||
|
arg=-E
|
||||||
|
fi
|
||||||
|
sed $arg "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$sourceInput" in
|
||||||
|
/dev/stdin)
|
||||||
|
# from stdin
|
||||||
|
sourceCode=$(cat)
|
||||||
|
;;
|
||||||
|
'')
|
||||||
|
# from the end of $commandFile
|
||||||
|
sourceCode=$(
|
||||||
|
newsed '
|
||||||
|
1,/^(!#|[ ]*compileAndGo)/s,.*,,
|
||||||
|
' "$commandFile"
|
||||||
|
)
|
||||||
|
if [[ -z "$sourceCode" ]] ; then
|
||||||
|
echo 1>&2 "$commandName: Missing '#!compileAndGo' line before source code starts."
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# from the filename as first argument
|
||||||
|
sourceCode=$(cat $1)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Construct the cacheDir variable.
|
||||||
|
|
||||||
|
abi=$(uname -sm)
|
||||||
|
abi=${abi// /-}
|
||||||
|
|
||||||
|
# Why must I use `` instead of $() here?
|
||||||
|
id=`
|
||||||
|
case "$sourceInput" in
|
||||||
|
/dev/stdin)
|
||||||
|
local tmp=($(echo "$sourceCode" | cksum))
|
||||||
|
echo ${tmp[0]}${tmp[1]}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case "$abi" in
|
||||||
|
Linux* | CYGWIN*)
|
||||||
|
ls-linux "$1" \
|
||||||
|
|| ls-oldlinux "$1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ls-bsd "$1" \
|
||||||
|
|| ls-linux "$1" \
|
||||||
|
|| ls-oldlinux "$1"
|
||||||
|
;;
|
||||||
|
esac \
|
||||||
|
|| (
|
||||||
|
local tmp=($(echo "$sourceCode" | cksum))
|
||||||
|
echo ${tmp[0]}${tmp[1]}
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
`
|
||||||
|
compilerPath=$(type -p "$compiler" 2> /dev/null) || compilerPath=$compiler
|
||||||
|
realHOME=$(eval 'echo ~'$(whoami))
|
||||||
|
|
||||||
|
if [[ -x $realHOME/Library/Caches ]] ; then
|
||||||
|
# Mac OS X
|
||||||
|
cacheDirRoot=$realHOME/Library/Caches/CompileAndGo
|
||||||
|
else
|
||||||
|
cacheDirRoot=$realHOME/.compileAndGo
|
||||||
|
fi
|
||||||
|
cacheDirParent=$cacheDirRoot/${commandName}
|
||||||
|
cacheDir=$cacheDirParent/$abi/${id}_${compilerPath//\//-}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Apply defaults and then set the variables again.
|
||||||
|
|
||||||
|
compilerName=${compiler##*/}
|
||||||
|
|
||||||
|
# Some settings common among different compiler groups:
|
||||||
|
case $compilerName in
|
||||||
|
javac* | jikes*)
|
||||||
|
[[ ! -z ${mainClass:="$commandBasename"} ]]
|
||||||
|
[[ ! -z ${sourceFilename:="${mainClass}.java"} ]]
|
||||||
|
;;
|
||||||
|
gcj*)
|
||||||
|
[[ ! -z ${mainClass:="$commandBasename"} ]]
|
||||||
|
[[ ! -z ${sourceFilename:="${mainClass}.java"} ]]
|
||||||
|
[[ ! -z ${executableFilename:="$commandBasename"} ]]
|
||||||
|
[[ ! -z ${execute:="PATH=$cacheDir:$PATH $executableFilename"} ]]
|
||||||
|
;;
|
||||||
|
gcc* | g++* | c89* | c99*)
|
||||||
|
[[ ! -z ${executableFilename:="$commandBasename"} ]]
|
||||||
|
[[ ! -z ${execute:="PATH=$cacheDir:$PATH $executableFilename"} ]]
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $compilerName in
|
||||||
|
jsc*)
|
||||||
|
[[ ! -z ${mainClass:="$commandBasename"} ]]
|
||||||
|
[[ ! -z ${sourceFilename:="${mainClass}.js"} ]]
|
||||||
|
[[ ! -z ${executableFilename:="${mainClass}.class"} ]]
|
||||||
|
[[ ! -z "${execute:="${javaBinDir}java -cp $cacheDir${classPath:+:$classPath} $mainClass"}" ]]
|
||||||
|
[[ ! -z "${compilerArgs:="-o $executableFilename $cacheDir/$sourceFilename"}" ]]
|
||||||
|
compileCmd="java -cp $cacheDir${classPath:+:$classPath} org.mozilla.javascript.tools.jsc.Main $compilerArgs"
|
||||||
|
;;
|
||||||
|
javac* | jikes*)
|
||||||
|
[[ ! -z ${executableFilename:="${mainClass}.class"} ]]
|
||||||
|
sourceVersion=
|
||||||
|
case $compilerName in
|
||||||
|
javac*)
|
||||||
|
if [[ $compilerName == $compiler ]] ; then
|
||||||
|
compilerDir=
|
||||||
|
else
|
||||||
|
compilerDir=${compiler%/*}/
|
||||||
|
fi
|
||||||
|
[[ ! -z "${execute:="${compilerDir}java -cp $cacheDir${classPath:+:$classPath} $mainClass"}" ]]
|
||||||
|
# Prepare to tell javac to compile for the latest language version it supports
|
||||||
|
sourceVersion="-source $(${compilerDir}java -version 2>&1 | sed -n '1s,[^"]*"\([1-9][1-9]*\.[1-9][1-9]*\).*,\1,p')"
|
||||||
|
;;
|
||||||
|
jikes*)
|
||||||
|
if [[ -z "$classPath" && -z "$compilerArgs" && -z "$CLASSPATH" ]] ; then
|
||||||
|
# Mac: export CLASSPATH=/System/Library/Frameworks/JavaVM.framework/Classes/classes.jar
|
||||||
|
echo 1>&2 compileAndGo: for jikes, if neither classPath nor CLASSPATH are set, compilerArgs must be set.
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
[[ ! -z "${execute:="java -cp $cacheDir${classPath:+:$classPath} $mainClass"}" ]]
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
[[ ! -z "${compilerArgs:="$sourceVersion -d $cacheDir -sourcepath . ${classPath:+-classpath $classPath} $cacheDir/$sourceFilename"}" ]]
|
||||||
|
compileCmd="$compiler $compilerArgs"
|
||||||
|
;;
|
||||||
|
gcj*)
|
||||||
|
[[ ! -z ${compilerArgs:="--main=$mainClass -o $cacheDir/$commandBasename $cacheDir/$sourceFilename"} ]]
|
||||||
|
compileCmd="$compiler $compilerArgs $linkerArgs"
|
||||||
|
;;
|
||||||
|
gcc* | g++* | c89* | c99* | clang | clang++)
|
||||||
|
case $compilerName in
|
||||||
|
cc* | gcc* | c89* | c99* | clang)
|
||||||
|
[[ ! -z ${sourceFilename:="${commandName}.c"} ]]
|
||||||
|
;;
|
||||||
|
g++* | clang++)
|
||||||
|
[[ ! -z ${sourceFilename:="${commandName}.cp"} ]]
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
[[ ! -z ${compilerArgs:="-O2 -o $cacheDir/$executableFilename $cacheDir/$sourceFilename"} ]]
|
||||||
|
compileCmd="$compiler $compilerArgs $linkerArgs"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Set the variables
|
||||||
|
|
||||||
|
if [[ ! $ourName == cg ]] ; then
|
||||||
|
vars=$(
|
||||||
|
echo "$declarations" \
|
||||||
|
| sed -n 's,\([^=]*\)=.*,\1,p'
|
||||||
|
)
|
||||||
|
cmdSetters=$(
|
||||||
|
for x in $vars
|
||||||
|
do
|
||||||
|
echo eval "'"${x}='"'$(eval echo \$$x)'"'"'"
|
||||||
|
done
|
||||||
|
)
|
||||||
|
eval "$cmdSetters"
|
||||||
|
fi
|
||||||
|
if (( 0$verbose >= 3 )) ; then
|
||||||
|
echoVariables "=== the variables before defaults"
|
||||||
|
fi
|
||||||
|
if [[ $ourName == cg ]] ; then
|
||||||
|
if (( 0$verbose >= 4 )) ; then
|
||||||
|
echo 1>&2 \=== eval command to set variables
|
||||||
|
echo2 1>&2 eval "$cmdSetters"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Check that all the required variables are set.
|
||||||
|
for x in sourceFilename executableFilename compilerArgs execute
|
||||||
|
do
|
||||||
|
eval 'if [ -z "'\$$x'" ] ; then trouble=true ; fi'
|
||||||
|
done
|
||||||
|
if [[ ! -z "$trouble" ]] ; then echo 1>&2 compileAndGo: unknown compiler setting "$compiler" ; exit 2 ; fi
|
||||||
|
for x in sourceFilename executableFilename compilerArgs execute
|
||||||
|
do
|
||||||
|
eval 'if [ -z "'\$$x'" ] ; then echo 1>&2 compileAndGo: $x must be set ; fi'
|
||||||
|
done
|
||||||
|
if [[ ! -z "$trouble" ]] ; then exit 2 ; fi
|
||||||
|
|
||||||
|
[[ ! -z ${firstArgIsCommandName:=false} ]]
|
||||||
|
[[ ! -z ${verbose:=0} ]]
|
||||||
|
|
||||||
|
eval "$cmdSetters"
|
||||||
|
|
||||||
|
if (( 0$verbose >= 3 )) ; then
|
||||||
|
echoVariables "=== the variables after defaults"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#set -x
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Compile if necessary
|
||||||
|
|
||||||
|
# shorthand
|
||||||
|
cachedExecutable=$cacheDir/$executableFilename
|
||||||
|
|
||||||
|
# The security precautions go like this:
|
||||||
|
# The executable and the folder in which it resides are
|
||||||
|
# * owned by user
|
||||||
|
# * 700 permissions (rwx------)
|
||||||
|
# The important facts are:
|
||||||
|
# * Only the user or root can chmod a file or folder owned by him.
|
||||||
|
# * Only the user or root can write into a file or folder that is 700.
|
||||||
|
# * Only root can chown a file or folder to the user.
|
||||||
|
# so only the user or root can construct a suitable file in the suitable
|
||||||
|
# folder. No one else can. That's about as good as it can get on unix.
|
||||||
|
# The attack would be limited to finding some existing folder containing
|
||||||
|
# an executable of the correct name, both owned by the user and 700,
|
||||||
|
# then moving the folder into the appropriate path.
|
||||||
|
# The implementation should be expanded to require that all folders from
|
||||||
|
# $cacheDir through $cacheDirParent must be owned by user and be 700.
|
||||||
|
if [[ ! -O $cachedExecutable ]] ; then
|
||||||
|
if [[ -e $cachedExecutable ]] ; then
|
||||||
|
echo 1>&2 "$commandName: Aborting because $cachedExecutable exists,"
|
||||||
|
echo 1>&2 "$commandName: and you don't own it."
|
||||||
|
echo 1>&2 "$commandName: This is a possible security violation."
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Try to make it harder for others to tamper with our cache.
|
||||||
|
umask 077
|
||||||
|
# Insist that $cacheDirParent is a directory and is owned by the user.
|
||||||
|
if [[ -d $cacheDirParent ]] ; then
|
||||||
|
if [[ ! -O $cacheDirParent ]] ; then
|
||||||
|
echo 1>&2 "$commandName: Aborting because $cacheDirParent/ exists, and you don't own it."
|
||||||
|
echo 1>&2 "$commandName: This is a security risk."
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
chmod 700 $cacheDirParent
|
||||||
|
else
|
||||||
|
mkdir -p $cacheDirParent
|
||||||
|
echo > $cacheDirParent/../README "See http://Yost.com/computers/compileAndGo"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p $cacheDir
|
||||||
|
|
||||||
|
# Compile the source.
|
||||||
|
if (( 0$verbose == 1 )) ; then
|
||||||
|
echo 1>&2 "[ $commandName: compiling. ]"
|
||||||
|
elif (( 0$verbose >= 2 )) ; then
|
||||||
|
echo -n 1>&2 "[ "
|
||||||
|
echo2 -n 1>&2 "$compileCmd"
|
||||||
|
echo 1>&2 " ]"
|
||||||
|
fi
|
||||||
|
echo "$sourceCode" > $cacheDir/$sourceFilename
|
||||||
|
eval $compileCmd
|
||||||
|
|
||||||
|
# Make a canonical name we can look at to determine access time.
|
||||||
|
ln -f $cachedExecutable $cacheDir/.executable
|
||||||
|
fi
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Execute the built program.
|
||||||
|
|
||||||
|
if [[ "$firstArgIsCommandName" != true ]] ; then
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( 0$verbose >= 2 )) ; then
|
||||||
|
echo -n 1>&2 "[ "
|
||||||
|
echo2 -n 1>&2 $execute "$@"
|
||||||
|
echo 1>&2 " ]"
|
||||||
|
fi
|
||||||
|
eval "$execute"' "$@"'
|
||||||
|
status=$?
|
||||||
|
|
||||||
|
if [[ true ]] ; then
|
||||||
|
# Run a background task to clean the cache occasionally.
|
||||||
|
(
|
||||||
|
# Check every this-many days.
|
||||||
|
checkInterval="-mtime -7"
|
||||||
|
# Max number of days a version cam be unused and not be removed.
|
||||||
|
maxAge="-atime +14"
|
||||||
|
# Every $checkInterval days, remove stuff not used in $maxAge days.
|
||||||
|
stamp=$(nice -n 20 find $cacheDirRoot -maxdepth 1 -name .timestamp $checkInterval)
|
||||||
|
if [[ ! -z "$stamp" ]] ; then
|
||||||
|
# Too soon
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
nice -n 20 touch $cacheDirRoot/.timestamp
|
||||||
|
# Remove dirs of executable versions not accessed in the last $maxAge days.
|
||||||
|
candidates=$(nice -n 20 find $cacheDirRoot -mindepth 3 -name .executable $maxAge)
|
||||||
|
if [[ ! -z "$candidates" ]] ; then
|
||||||
|
#echo "$candidates"
|
||||||
|
echo "$candidates" \
|
||||||
|
| nice -n 20 sed 's,/.executable,,' \
|
||||||
|
| nice -n 20 xargs rm -rf
|
||||||
|
fi
|
||||||
|
) \
|
||||||
|
> /dev/null 2>&1 \
|
||||||
|
&
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit $status
|
||||||
|
|
||||||
|
# Copyright 2005-2010 Dave Yost <Dave@Yost.com>
|
||||||
|
# All rights reserved.
|
||||||
|
# This version is
|
||||||
|
# compileAndGo 5.0 2010-11-06
|
||||||
|
# which at time of this publication can be found at:
|
||||||
|
# http://Yost.com/computers/compileAndGo
|
||||||
|
# Redistribution and use in the form of source code or derivative data built
|
||||||
|
# from the source code, with or without modification, are permitted provided
|
||||||
|
# that the following conditions are met:
|
||||||
|
# 1. THE USER AGREES THAT THERE IS NO WARRANTY.
|
||||||
|
# 2. If and only if appropriate, the above phrase "This version is" must be
|
||||||
|
# followed by the phrase "a modified form of" or "extracted from" or
|
||||||
|
# "extracted and modified from".
|
||||||
|
# 3. Redistributions of source code must retain this notice intact.
|
||||||
|
# 4. Redistributions in the form of derivative data built from the source
|
||||||
|
# code must reproduce this notice intact in the documentation and/or other
|
||||||
|
# materials provided with the distribution, and each file in the derivative
|
||||||
|
# data must reproduce any Yost.com URI included in the original distribution.
|
||||||
|
# 5. Neither the name of Dave Yost nor the names of its contributors may be
|
||||||
|
# used to endorse or promote products derived from this software without
|
||||||
|
# specific prior written permission.
|
||||||
|
# 6. Written permission by the author is required for redistribution as part
|
||||||
|
# of a commercial product.
|
||||||
|
# This notice comprises all text from "Copyright" above through the end of
|
||||||
|
# this sentence.
|
|
@ -0,0 +1,80 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname [user@]host [options]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
note: les options de ssh doivent se trouver *APRES* [user@]host, pour simplifier
|
||||||
|
leur analyse.
|
||||||
|
L'option -t de ssh est forcée, pour permettre la connexion par screen
|
||||||
|
Les options suivantes doivent se trouver *AVANT* le premier argument:
|
||||||
|
-S SSH
|
||||||
|
Spécifier l'exécutable à utiliser pour lancer ssh."
|
||||||
|
}
|
||||||
|
|
||||||
|
source "$(dirname "$0")/ulib/ulib" &&
|
||||||
|
urequire DEFAULTS ||
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
ssh=
|
||||||
|
parse_opts + "${PRETTYOPTS[@]}" \
|
||||||
|
--help '$exit_with display_help' \
|
||||||
|
-S:,--ssh ssh= \
|
||||||
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
userhost="$1"; shift
|
||||||
|
[ -n "$userhost" ] || die "Vous devez spécifier l'hôte sur lequel faire la connexion"
|
||||||
|
|
||||||
|
[ -n "$ssh" ] || ssh=ssh
|
||||||
|
|
||||||
|
exec "$ssh" -t "$@" "$userhost" /bin/bash -c \''
|
||||||
|
function __ask() {
|
||||||
|
local r
|
||||||
|
read -p "$1" -t 2 r
|
||||||
|
[ $? -gt 128 -o -z "$r" -o "$r" == "o" -o "$r" == "O" -o "$r" == "y" -o "$r" == "Y" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
function __auto_screen() {
|
||||||
|
# Si on est déjà dans screen, ne rien faire
|
||||||
|
[ -z "$STY" ] || return
|
||||||
|
|
||||||
|
local msgprefix
|
||||||
|
local screens count
|
||||||
|
|
||||||
|
screens="$(LANG=C screen -ls | grep -Ei "attached|detached")"
|
||||||
|
if [ -n "$screens" ]; then
|
||||||
|
count="$(echo "$screens" | wc -l)"
|
||||||
|
else
|
||||||
|
count=0
|
||||||
|
fi
|
||||||
|
if [ $count -gt 0 ]; then
|
||||||
|
if [ $count -eq 1 ]; then
|
||||||
|
msgprefix="Il y a '"$COULEUR_BLEUE"'1 session screen en cours'"$COULEUR_NORMALE"'
|
||||||
|
Cette session"
|
||||||
|
else
|
||||||
|
msgprefix="Il y a '"$COULEUR_ROUGE"'$count sessions screen en cours'"$COULEUR_NORMALE"':
|
||||||
|
$screens
|
||||||
|
La première session"
|
||||||
|
fi
|
||||||
|
if __ask "
|
||||||
|
$msgprefix sera reconnectée automatiquent dans 2 secondes
|
||||||
|
Voulez-vous reconnecter la session screen? [On] "; then
|
||||||
|
exec screen -q -s -/bin/bash -xRR
|
||||||
|
else
|
||||||
|
exec /bin/bash -l
|
||||||
|
fi
|
||||||
|
elif __ask "
|
||||||
|
Une '"$COULEUR_VERTE"'nouvelle session screen'"$COULEUR_NORMALE"' sera lancée automatiquement dans 2 secondes
|
||||||
|
Voulez-vous lancer une session screen? [On] "; then
|
||||||
|
exec screen -q -s -/bin/bash -RR
|
||||||
|
else
|
||||||
|
exec /bin/bash -l
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
__auto_screen
|
||||||
|
'\'
|
|
@ -0,0 +1,6 @@
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# Utiliser 'udir --help-vars' pour une description de la signification des
|
||||||
|
# variables suivantes:
|
||||||
|
udir_desc=""
|
||||||
|
udir_note=""
|
||||||
|
udir_types=(wikidir)
|
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# Pense-bête:
|
||||||
|
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||||
|
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||||
|
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||||
|
# [[external|http://site.com]] ---- {{monospace}}
|
||||||
|
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||||
|
# * dotlist ** sublist # numlist ## sublist
|
||||||
|
# {{{ |caption|c [img[title|filename]]
|
||||||
|
# pre text |!header|!header|h [img[filename]]
|
||||||
|
# }}} |cell|cell| [img[title|filename][link]]
|
||||||
|
# <<< |>|colspan| [img[filename][link]]
|
||||||
|
# blockquote |rowspan|one| [<img[filename]]
|
||||||
|
# <<< |~|two| [>img[filename]]
|
||||||
|
# >quote1 |left| right|
|
||||||
|
# >>quote2 |>| center |
|
||||||
|
# >>>quote3
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 09/03/2012 05:08
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: DefaultTiddlers
|
||||||
|
|
||||||
|
[[Main]]
|
|
@ -0,0 +1,16 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:19
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: EnsureVM
|
||||||
|
|
||||||
|
{{{
|
||||||
|
EnsureVM: s'assurer que les services sont lancés pour un type de virtualisation
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
EnsureVM type
|
||||||
|
|
||||||
|
Les types supportés sont virtualbox et kvm (par défaut)
|
||||||
|
}}}
|
|
@ -0,0 +1,46 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# Pense-bête:
|
||||||
|
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||||
|
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||||
|
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||||
|
# [[external|http://site.com]] ---- {{monospace}}
|
||||||
|
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||||
|
# * dotlist ** sublist # numlist ## sublist
|
||||||
|
# {{{ |caption|c [img[title|filename]]
|
||||||
|
# pre text |!header|!header|h [img[filename]]
|
||||||
|
# }}} |cell|cell| [img[title|filename][link]]
|
||||||
|
# <<< |>|colspan| [img[filename][link]]
|
||||||
|
# blockquote |rowspan|one| [<img[filename]]
|
||||||
|
# <<< |~|two| [>img[filename]]
|
||||||
|
# >quote1 |left| right|
|
||||||
|
# >>quote2 |>| center |
|
||||||
|
# >>>quote3
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 09/03/2012 05:08
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: Main
|
||||||
|
|
||||||
|
!Présentation
|
||||||
|
nutools est un ensemble d'utilitaires pour faciliter l'utililisation des Unixes, en particulier Linux, mais aussi MacOS X et Cygwin.
|
||||||
|
C'est aussi une librairie de scripts shell réutilisables ([[ulib]]) et une librairie de modules python réutilisables (pyulib)
|
||||||
|
|
||||||
|
!Prérequis
|
||||||
|
Python >= 2.3 et GNU Awk sont requis pour que toutes les fonctionnalités soient supportées.
|
||||||
|
* Sous Linux, lors de l'installation du package, les meilleurs efforts sont fait pour que ces packages soient installés.
|
||||||
|
* Sous MacOSX, il faut installer manuellement Fink, DarwinPorts ou Homebrew
|
||||||
|
|
||||||
|
! Outils
|
||||||
|
Chaque outil contient une aide intégrée. Il suffit de lancer l'outil avec l'argument {{{--help}}} pour avoir une aide détaillée.
|
||||||
|
* Déploiement d'un répertoire ou d'une archive
|
||||||
|
** [[uinst]]: Déploiement local
|
||||||
|
** [[mkusfx]]: Faire une archive auto-installable avec uinst
|
||||||
|
** [[ruinst]]: Déploiement distant avec uinst
|
||||||
|
** [[runs]]: Lancer un script avec le protocole RUNS
|
||||||
|
** [[rruns]]: Déploiement distant avec runs
|
||||||
|
* Librairie réutilisable de scripts shell
|
||||||
|
** [[uinc]]: Dépliage des inclusions dans un fichier
|
||||||
|
** [[ulibsync]]: Faire une copie locale pour un projet de ulib et/ou pyulib
|
||||||
|
* Autres outils
|
||||||
|
** [[udir]]: Gestion des paramètres d'un répertoire. Ces paramètres sont entre autres utilisés par uinst et uinc.
|
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# Pense-bête:
|
||||||
|
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||||
|
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||||
|
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||||
|
# [[external|http://site.com]] ---- {{monospace}}
|
||||||
|
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||||
|
# * dotlist ** sublist # numlist ## sublist
|
||||||
|
# {{{ |caption|c [img[title|filename]]
|
||||||
|
# pre text |!header|!header|h [img[filename]]
|
||||||
|
# }}} |cell|cell| [img[title|filename][link]]
|
||||||
|
# <<< |>|colspan| [img[filename][link]]
|
||||||
|
# blockquote |rowspan|one| [<img[filename]]
|
||||||
|
# <<< |~|two| [>img[filename]]
|
||||||
|
# >quote1 |left| right|
|
||||||
|
# >>quote2 |>| center |
|
||||||
|
# >>>quote3
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 09/03/2012 05:08
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: MainMenu
|
||||||
|
|
||||||
|
[[GettingStarted]]
|
|
@ -0,0 +1,152 @@
|
||||||
|
# -*- coding: utf-8 mode: text -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
Les scripts RUNS sont des scripts servant à déployer certains services ou à
|
||||||
|
faire certaines opérations.
|
||||||
|
|
||||||
|
runs diffère un peu de uinst, qui est orienté copie de fichiers et configuration
|
||||||
|
d'une arborescence. Avec runs, chaque script fait une seule opération, en
|
||||||
|
utilisant éventuellement certains fichiers disponibles dans le répertoire du
|
||||||
|
script.
|
||||||
|
|
||||||
|
RUNSPATH contient une liste de répertoires qu'il faut initialiser avec la
|
||||||
|
commande 'runs --init'. L'arborescence est de la forme:
|
||||||
|
|
||||||
|
runsdir
|
||||||
|
+- scripts
|
||||||
|
| \_ SCRIPTS...
|
||||||
|
+- hosts
|
||||||
|
| \_ HOSTS...
|
||||||
|
| + runs.conf
|
||||||
|
| + sysinfos.conf
|
||||||
|
| + default
|
||||||
|
| \_ SCRIPTS...
|
||||||
|
\_ DOMAINS...
|
||||||
|
\_ HOSTS...
|
||||||
|
+ runs.conf
|
||||||
|
+ sysinfos.conf
|
||||||
|
+ default
|
||||||
|
\_ SCRIPTS...
|
||||||
|
|
||||||
|
Le répertoire scripts contient les scripts généraux.
|
||||||
|
|
||||||
|
SCRIPTS correspondant aux fichiers de scripts, qui n'ont pas de contrainte sur
|
||||||
|
la façon de les nommer. HOSTS correspond aux répertoires d'hôtes, qui peuvent
|
||||||
|
contenir des fichiers de configuration ou d'autres scripts. DOMAINS correspond
|
||||||
|
aux domaines de hôtes pleinement qualifiés. Ces répertoire contiennent des
|
||||||
|
répertoires d'hôtes.
|
||||||
|
|
||||||
|
Le répertoire hosts contient des configuration pour des hôtes sans domaine. Les
|
||||||
|
hôtes pleinements qualifiés sont classés par domaine, puis par nom d'hôte. Par
|
||||||
|
exemple, si on cherche un script ou un fichier de configuration pour l'hôte
|
||||||
|
'medusa.univ.run', il sera d'abord cherché dans 'runsdir/univ.run/medusa' puis
|
||||||
|
dans 'runsdir/hosts/medusa'
|
||||||
|
|
||||||
|
Le fichier runs.conf contient des configuration qui sont partagées par tous les
|
||||||
|
scripts qui sont dans l'arborescence en-dessous. Ce fichier est au format CONF
|
||||||
|
(cf. ci-dessous).
|
||||||
|
|
||||||
|
Le fichier sysinfos.conf contient si nécessaire la configuration du système pour
|
||||||
|
l'hôte, pour les scripts qui doivent faire des préparations en local en fonction
|
||||||
|
du système distant. Ce fichier peut-être initialisé avec la configuration
|
||||||
|
affichée par le script usysinfos
|
||||||
|
|
||||||
|
Le fichier default contient la recette par défaut pour la configuration de
|
||||||
|
l'hôte. Il s'agit d'une suite de lignes de la forme:
|
||||||
|
|
||||||
|
script [params]
|
||||||
|
[params]
|
||||||
|
...
|
||||||
|
|
||||||
|
params correspond aux arguments de la fonction var. Chaque ligne indentée sous
|
||||||
|
le nom du script correspond à une invocation différente de var. Par exemple,
|
||||||
|
avec cette commande:
|
||||||
|
|
||||||
|
script name=value arr0+=value0 arr1-=value1
|
||||||
|
arr2 value21 value22
|
||||||
|
|
||||||
|
Le script 'script' est lancé avec la configuration de variable suivante:
|
||||||
|
name=value, rajouter value0 au tableau arr0, enlever value1 au tableau arr1, et
|
||||||
|
initialiser le tableau arr2 avec les valeur value21 et value22
|
||||||
|
|
||||||
|
Un script est composé de deux sections: CONF et SCRIPT, séparés par la ligne
|
||||||
|
'script:'. La forme d'un script est donc:
|
||||||
|
|
||||||
|
CONF
|
||||||
|
script:
|
||||||
|
SCRIPT
|
||||||
|
|
||||||
|
Les deux sections sont écrites dans le langage de script bash.
|
||||||
|
|
||||||
|
Format de la section CONF
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Dans cette section, les fonctions notamment disponibles sont: desc, conf, var,
|
||||||
|
out, ref, sysinfos
|
||||||
|
|
||||||
|
desc DESC
|
||||||
|
Donner la description du script, à afficher avec 'runs --info'
|
||||||
|
|
||||||
|
conf flags...
|
||||||
|
Activer certains flags. Les valeurs possible sont:
|
||||||
|
root -- ce script requière d'être lancé avec l'utilisateur root
|
||||||
|
local -- dans le cas d'un déploiement distant, ce script doit être lancé
|
||||||
|
uniquement en local
|
||||||
|
|
||||||
|
after scriptpaths...
|
||||||
|
Requérir que dans une même session, ce script soit lancé après tous les
|
||||||
|
scripts mentionnés
|
||||||
|
|
||||||
|
after -r scriptpath [args...]
|
||||||
|
Si le script spécifié a déjà été lancé dans la session en cours, ne rien
|
||||||
|
faire. Sinon, lancer le script spécifié avec les arguments spécifiés avant
|
||||||
|
de lancer le script en cours.
|
||||||
|
|
||||||
|
after -rr scriptpath [args...]
|
||||||
|
Lancer de façon inconditionnelle le script spécifié avec les arguments
|
||||||
|
spécifiés avant de lancer le script en cours.
|
||||||
|
|
||||||
|
var name=value
|
||||||
|
Initialiser la variable name à la valeur value
|
||||||
|
|
||||||
|
var array+=value
|
||||||
|
Ajouter la valeur value au tableau array
|
||||||
|
|
||||||
|
var array-=value
|
||||||
|
Enlever la valeur value du tableau array
|
||||||
|
|
||||||
|
var array value0 value1... valueN
|
||||||
|
Initialiser le tableau array avec la valeur (value0 value1...valueN)
|
||||||
|
|
||||||
|
out name[=file]
|
||||||
|
Créer un fichier temporaire nommé file dans un espace partagé, et mettre son
|
||||||
|
chemin absolu dans la variable name.
|
||||||
|
|
||||||
|
ref [-r] name[=file]
|
||||||
|
Mettre dans la variable name le chemin absolu vers le fichier file, cherché
|
||||||
|
d'abord dans le répertoire du script, puis dans le répertoire partagé, et
|
||||||
|
enfin dans RUNSPATH. Si le fichier n'est trouvé nulle part, le chemin est
|
||||||
|
relatif au répertoire partagé.
|
||||||
|
Avec l'option -r, le fichier est requis: le script s'arrête si le fichier
|
||||||
|
référencé n'est pas trouvé.
|
||||||
|
|
||||||
|
Format de la section SCRIPT
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Cette section peut contenir n'importe quelle script. Par défaut, les librairies
|
||||||
|
DEFAULTS et runs sont chargées. Mais il est possible avec urequire de charger
|
||||||
|
d'autres librairies, notamment uinst ou uinc.
|
||||||
|
|
||||||
|
Les fonctions suivantes sont disponibles: shouldrun, setdone, resetdone.
|
||||||
|
|
||||||
|
shouldrun [subsystem [value]]
|
||||||
|
Tester si le script (ou l'opération subsystem du script) doit être
|
||||||
|
lancée. Tant que la fonction 'setdone' n'est pas lancée, cette fonction
|
||||||
|
retourne vrai.
|
||||||
|
|
||||||
|
setdone [subsystem [value]]
|
||||||
|
Spécifier que le script (ou l'opération subsystem du script) a été lancée
|
||||||
|
correctement.
|
||||||
|
|
||||||
|
resetdone [subsystem]
|
||||||
|
Réinitialiser les informations concernant l'état d'installation du script ou
|
||||||
|
de l'opération subsystem du script.
|
|
@ -0,0 +1,30 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: SKvm
|
||||||
|
|
||||||
|
{{{
|
||||||
|
SKvm: lancer une machine virtuelle kvm
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
SKvm [options] vmName
|
||||||
|
SKvm {-l|-A|-g}
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-n Ne rien faire excepté s'assurer que les modules kvm sont chargés
|
||||||
|
-u Lancer l'opération avec les droits de l'utilisateur courant. Par défaut,
|
||||||
|
ce script tente d'acquérir les droits de root.
|
||||||
|
-l Lister les machines virtuelles
|
||||||
|
-s Démarrer la machine virtuelle (par défaut)
|
||||||
|
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||||
|
affiché
|
||||||
|
-k Arrêter la machine virtuelle
|
||||||
|
-H Arrêter sauvagement la machine virtuelle
|
||||||
|
-r Redémarrer la machine virtuelle
|
||||||
|
-S Enregistrer l'état de la machine virtuelle
|
||||||
|
-A Arrêter toutes les machines virtuelles qui tournent actuellement
|
||||||
|
-g Afficher le gestionnaire de machines virtuelle
|
||||||
|
}}}
|
|
@ -0,0 +1,27 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: SVirtualBox
|
||||||
|
|
||||||
|
{{{
|
||||||
|
SVirtualBox: lancer une machine virtuelle VirtualBox
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
SVirtualBox [options] vmName
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||||
|
-l Lister les machines virtuelles
|
||||||
|
-s Démarrer la machine virtuelle (par défaut)
|
||||||
|
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||||
|
affiché
|
||||||
|
-k Arrêter la machine virtuelle (par ACPI)
|
||||||
|
-p Mettre en veille la machine virtuelle (par ACPI)
|
||||||
|
-H Arrêter sauvagement la machine virtuelle
|
||||||
|
-R Redémarrer sauvagement la machine virtuelle
|
||||||
|
-S Enregistrer l'état de la machine virtuelle
|
||||||
|
-g Afficher le gestionnaire de machines virtuelle
|
||||||
|
}}}
|
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# Pense-bête:
|
||||||
|
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||||
|
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||||
|
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||||
|
# [[external|http://site.com]] ---- {{monospace}}
|
||||||
|
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||||
|
# * dotlist ** sublist # numlist ## sublist
|
||||||
|
# {{{ |caption|c [img[title|filename]]
|
||||||
|
# pre text |!header|!header|h [img[filename]]
|
||||||
|
# }}} |cell|cell| [img[title|filename][link]]
|
||||||
|
# <<< |>|colspan| [img[filename][link]]
|
||||||
|
# blockquote |rowspan|one| [<img[filename]]
|
||||||
|
# <<< |~|two| [>img[filename]]
|
||||||
|
# >quote1 |left| right|
|
||||||
|
# >>quote2 |>| center |
|
||||||
|
# >>>quote3
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 09/03/2012 05:08
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: SiteSubtitle
|
||||||
|
|
||||||
|
Outils divers pour linux/macosx, et librairies pour bash
|
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# Pense-bête:
|
||||||
|
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||||
|
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||||
|
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||||
|
# [[external|http://site.com]] ---- {{monospace}}
|
||||||
|
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||||
|
# * dotlist ** sublist # numlist ## sublist
|
||||||
|
# {{{ |caption|c [img[title|filename]]
|
||||||
|
# pre text |!header|!header|h [img[filename]]
|
||||||
|
# }}} |cell|cell| [img[title|filename][link]]
|
||||||
|
# <<< |>|colspan| [img[filename][link]]
|
||||||
|
# blockquote |rowspan|one| [<img[filename]]
|
||||||
|
# <<< |~|two| [>img[filename]]
|
||||||
|
# >quote1 |left| right|
|
||||||
|
# >>quote2 |>| center |
|
||||||
|
# >>>quote3
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 09/03/2012 05:08
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: SiteTitle
|
||||||
|
|
||||||
|
nutools
|
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# Pense-bête:
|
||||||
|
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||||
|
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||||
|
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||||
|
# [[external|http://site.com]] ---- {{monospace}}
|
||||||
|
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||||
|
# * dotlist ** sublist # numlist ## sublist
|
||||||
|
# {{{ |caption|c [img[title|filename]]
|
||||||
|
# pre text |!header|!header|h [img[filename]]
|
||||||
|
# }}} |cell|cell| [img[title|filename][link]]
|
||||||
|
# <<< |>|colspan| [img[filename][link]]
|
||||||
|
# blockquote |rowspan|one| [<img[filename]]
|
||||||
|
# <<< |~|two| [>img[filename]]
|
||||||
|
# >quote1 |left| right|
|
||||||
|
# >>quote2 |>| center |
|
||||||
|
# >>>quote3
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 09/03/2012 05:08
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: SiteUrl
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: _root
|
||||||
|
|
||||||
|
{{{
|
||||||
|
_root: devenir l'utilisateur root, avec 'sudo' si possible, ou 'su' si
|
||||||
|
'sudo' n'est pas installé
|
||||||
|
}}}
|
|
@ -0,0 +1,18 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:19
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: authftp
|
||||||
|
|
||||||
|
{{{
|
||||||
|
authftp: Se connecter avec ncftp sur un site FTP authentifié
|
||||||
|
Ce script est conçu pour les sites qui utilisent un proxy FTP pour les connexion
|
||||||
|
authentifiées.
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
authftp [options] host login password [path]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
}}}
|
|
@ -0,0 +1,14 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:19
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: caturl
|
||||||
|
|
||||||
|
{{{
|
||||||
|
caturl: Afficher une url
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
caturl <file.url|file.desktop|URL>
|
||||||
|
}}}
|
|
@ -0,0 +1,11 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:19
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: compileAndGo
|
||||||
|
|
||||||
|
{{{
|
||||||
|
compileAndGo: see http://Yost.com/computers/compileAndGo
|
||||||
|
}}}
|
|
@ -0,0 +1,27 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:19
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: fconv
|
||||||
|
|
||||||
|
{{{
|
||||||
|
fconv: convertir des fichiers dans un autre encoding
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
fconv [-f src_enc] [ -t dest_enc] [/path/to/file]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-f from
|
||||||
|
Encoding source. Si n'est pas spécifié ou vaut 'detect', l'encoding est
|
||||||
|
autodétecté.
|
||||||
|
-t to
|
||||||
|
Encoding destination. Doit être spécifié.
|
||||||
|
Cas particulier: si to vaut 'lf' ou 'crlf', from est ignoré, et seuls
|
||||||
|
les caractères de fin de lignes sont convertis.
|
||||||
|
-N Ne pas optimiser le calcul de l'encoding. Cette option n'est valide que
|
||||||
|
si -f n'est pas spécifié. On assume que tous les noms de fichiers n'ont
|
||||||
|
pas le même encoding. L'encoding from est donc recalculé à chaque fois.
|
||||||
|
-r inverser from et to, qui doivent être tous les deux spécifiés.
|
||||||
|
}}}
|
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:19
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: fnconv
|
||||||
|
|
||||||
|
{{{
|
||||||
|
fnconv: renommer des fichiers en changeant leur encoding
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
fnconv [-f src_enc] [ -t dest_enc] [/path/to/file]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-f from
|
||||||
|
Encoding source. Si n'est pas spécifié ou vaut 'detect', l'encoding est
|
||||||
|
autodétecté.
|
||||||
|
-t to
|
||||||
|
Encoding destination. Doit être spécifié.
|
||||||
|
-N Ne pas optimiser le calcul de l'encoding. Cette option n'est valide que
|
||||||
|
si -f n'est pas spécifié. On assume que tous les noms de fichiers n'ont
|
||||||
|
pas le même encoding. L'encoding from est donc recalculé à chaque fois.
|
||||||
|
-r inverser from et to, qui doivent être tous les deux spécifiés.
|
||||||
|
}}}
|
|
@ -0,0 +1,14 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:19
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: geturl
|
||||||
|
|
||||||
|
{{{
|
||||||
|
geturl: Télécharger un fichier avec wget ou curl
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
geturl <file.url|file.desktop|URL> [wget options]
|
||||||
|
}}}
|
|
@ -0,0 +1,86 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:19
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: mkRewriteRules
|
||||||
|
|
||||||
|
{{{
|
||||||
|
mkRewriteRules: Créer un fichier de redirections pour Apache à partir d'un certain
|
||||||
|
nombre de règles
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
mkRewriteRules -f rewrite.rules [-o RewriteRules.conf] [-w RewriteRules.html] host
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-p Générer les directives <Proxy...> et tenir compte de proxy_acls
|
||||||
|
Par défaut, le champ proxy_acls est ignoré
|
||||||
|
|
||||||
|
FORMAT des règles de mapping
|
||||||
|
============================
|
||||||
|
|
||||||
|
Les commentaires commencent par le signe "#"
|
||||||
|
Les règles sont de la forme:
|
||||||
|
src:dest:host:suffix:OPTS:prot:proxy_acls
|
||||||
|
^prefix
|
||||||
|
=literal
|
||||||
|
|
||||||
|
prot vaut par défaut http. Il peut valoir aussi https
|
||||||
|
|
||||||
|
Si dest ou suffix se terminent par $, on est en mode NO_SLASH
|
||||||
|
En mode NO_SLASH, si src se termine par $, on est en mode NO_TRAIL
|
||||||
|
|
||||||
|
* Si dest est de la forme Application.woa
|
||||||
|
En mode NO_SLASH, on génère
|
||||||
|
RewriteRule ^/src(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]$1 [L,OPTS]
|
||||||
|
En mode NO_SLASH+NO_TRAIL, on génère
|
||||||
|
RewriteRule ^/src [prot://host]/cgi-bin/WebObjects/dest[/suffix] [L,OPTS]
|
||||||
|
En mode normal, on génère
|
||||||
|
RewriteRule ^/src$ /src/
|
||||||
|
RewriteRule ^/src/(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]/$1 [L,OPTS]
|
||||||
|
|
||||||
|
* Si dest n'est pas de la forme Application.woa
|
||||||
|
En mode NO_SLASH, on génère
|
||||||
|
RewriteRule ^/src(.*) [prot://host]/dest[/suffix]$1 [L,OPTS]
|
||||||
|
En mode NO_SLASH+NO_TRAIL, on génère
|
||||||
|
RewriteRule ^/src [prot://host]/dest[/suffix] [L,OPTS]
|
||||||
|
En mode normal, on génère
|
||||||
|
RewriteRule ^/src$ /src/
|
||||||
|
RewriteRule ^/src/(.*) /dest[/suffix]/$1 [L,OPTS]
|
||||||
|
|
||||||
|
Si une règle est précédée d'une ou plusieurs lignes de la forme "^prefix",
|
||||||
|
ces lignes sont copiées avant chacune des commandes RewriteRule générées
|
||||||
|
pour une règle. Ceci permet d'ajouter des conditions avec RewriteCond pour
|
||||||
|
une règle. e.g.
|
||||||
|
^RewriteCond %{REMOTE_ADDR} 10\..*
|
||||||
|
src:dest.woa
|
||||||
|
qui génère:
|
||||||
|
RewriteCond %{REMOTE_ADDR} 10\..*
|
||||||
|
RewriteRule ^/src$ /src/
|
||||||
|
RewriteCond %{REMOTE_ADDR} 10\..*
|
||||||
|
RewriteRule ^/src/(.*) /cgi-bin/WebObjects/dest.woa/$1 [L]
|
||||||
|
|
||||||
|
Une ligne de la forme "=literal" est recopiée sans modifications (sans le "=")
|
||||||
|
dans le fichier de sortie.
|
||||||
|
|
||||||
|
proxy_acls est utilisé si l'option -p est spécifiée et OPTS contient P (comme
|
||||||
|
proxy), ou si le mode de réécriture requière l'utilisation d'un proxy.
|
||||||
|
|
||||||
|
* Avec la valeur "None", aucune directive <Proxy> n'est générée
|
||||||
|
* Si aucune valeur n'est spécifiée, la directive suivante est générée:
|
||||||
|
<Proxy $URL>
|
||||||
|
AddDefaultCharset off
|
||||||
|
Order Deny,Allow
|
||||||
|
Allow from all
|
||||||
|
</Proxy>
|
||||||
|
* Si une valeur est spécifiée, la directive suivante est générée:
|
||||||
|
<Proxy $URL>
|
||||||
|
AddDefaultCharset off
|
||||||
|
Order Allow,Deny
|
||||||
|
Allow from $proxy_acls
|
||||||
|
</Proxy>
|
||||||
|
|
||||||
|
Dans les exemples donnés ci-dessus, $URL est l'url générée par la réécriture,
|
||||||
|
et $proxy_acls la valeur du champ proxy_acls spécifiée ci-dessus.
|
||||||
|
}}}
|
|
@ -0,0 +1,18 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:19
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: mkiso
|
||||||
|
|
||||||
|
{{{
|
||||||
|
mkiso: créer une image iso d'un répertoire
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
mkiso [options] srcdir [dest.iso]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-M, --hfs
|
||||||
|
créer une image hybride ISO/HFS
|
||||||
|
}}}
|
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: mkurl
|
||||||
|
|
||||||
|
{{{
|
||||||
|
mkurl: Enregistrer une url dans un fichier raccourci
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
mkurl <url> [output]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
Par défaut, l'url est enregistrée dans un fichier homepage.url
|
||||||
|
Mais il est possible de spécifier un fichier avec l'extension .url pour un
|
||||||
|
raccourci utilisable aussi sous Windows, ou avec l'extension .desktop pour
|
||||||
|
compatibilité avec le standard XDG
|
||||||
|
}}}
|
|
@ -0,0 +1,35 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: mkusfx
|
||||||
|
|
||||||
|
{{{
|
||||||
|
mkusfx: Créer une archive auto-extractible qui installe son contenu avec uinst
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
mkusfx [options] [--bare] src cmd...
|
||||||
|
mkusfx [options] [--uinst] src
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
--bare
|
||||||
|
Installer le contenu de l'archive en lançant la commande 'cmd...' avec
|
||||||
|
le répertoire courant étant le contenu de l'archive. Typiquement, ce
|
||||||
|
sera une commande de forme './script', où script est un fichier situé à
|
||||||
|
la racine de l'archive
|
||||||
|
Dans ce mode d'installation, l'option --self-contained est ignorée.
|
||||||
|
--uinst
|
||||||
|
Installer le contenu de l'archive avec uinst (par défaut)
|
||||||
|
-o dest
|
||||||
|
Spécifier le fichier de sortie. Par défaut, il s'agit de
|
||||||
|
${src}-installer.run
|
||||||
|
--tmp-archive
|
||||||
|
Spécifier qu'il s'agit d'une archive temporaire. Cette archive
|
||||||
|
s'auto-détruit après utilisation.
|
||||||
|
--self-contained
|
||||||
|
Spécifier que l'archive doit pouvoir s'installer même sur un système sur
|
||||||
|
lequel nutools n'est pas installé. Cette archive contiendra une copie
|
||||||
|
locale de ulib et uinst.sh
|
||||||
|
}}}
|
|
@ -0,0 +1,14 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: openurl
|
||||||
|
|
||||||
|
{{{
|
||||||
|
openurl: Ouvrir une URL dans un navigateur
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
openurl <file.url|file.desktop|URL>
|
||||||
|
}}}
|
|
@ -0,0 +1,16 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: rmtildes
|
||||||
|
|
||||||
|
{{{
|
||||||
|
rmtildes: supprimer les fichiers *~ dans le répertoire courant
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
rmtildes [dir [glob]]
|
||||||
|
|
||||||
|
Par défaut, dir==. et glob==*~
|
||||||
|
}}}
|
|
@ -0,0 +1,62 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 30/03/2012 04:42
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: rruns
|
||||||
|
|
||||||
|
{{{
|
||||||
|
rruns: Déploiement distant avec runs
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
rruns [-H host] [-T tmproot] rscriptname name=value...
|
||||||
|
rruns [-H host] [-T tmproot] @recipe name=value...
|
||||||
|
rruns [-H host] [-T tmproot] -f rscript name=value...
|
||||||
|
rruns [-H host] [-T tmproot] -r recipe name=value...
|
||||||
|
|
||||||
|
Lancer ce script sans argument (hors options) est équivalent à le lancer avec
|
||||||
|
l'argument @default
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-C Ne pas faire le déploiement. Configurer uniquement la connexion par clé
|
||||||
|
sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir
|
||||||
|
se connecter par mot de passe pour configurer la connexion par clé.
|
||||||
|
Si l'on veut configurer la connexion par clé pour le user root, mais que
|
||||||
|
ce n'est pas possible de se connecter par mot de passe avec le user root
|
||||||
|
sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant,
|
||||||
|
il est possible de faire la configuration avec '--configure root'. La
|
||||||
|
commande serait alors
|
||||||
|
rruns -H user@host --configure root
|
||||||
|
-T tmproot
|
||||||
|
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
|
||||||
|
un /tmp minuscule de 16 Mo.
|
||||||
|
-S ssh
|
||||||
|
Spécifier le programme à utiliser pour la connection par ssh.
|
||||||
|
-H host
|
||||||
|
Spécifier un hôte distant sur lequel faire le déploiement. Plusieurs
|
||||||
|
options -H peuvent être spécifiées, ou alors on peut séparer plusieurs
|
||||||
|
hôtes par ':', e.g. -H host1:host2
|
||||||
|
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||||
|
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||||
|
user@host, e.g -H jclain@host
|
||||||
|
-f RSCRIPT
|
||||||
|
Lancer le script individuel spécifié au lieu de chercher dans les
|
||||||
|
répertoires $RUNS{SCRIPTS,HOSTS}PATH
|
||||||
|
-r RECIPE
|
||||||
|
Lancer les scripts spécifiés dans le fichier de recettes individuel
|
||||||
|
spécifié.
|
||||||
|
-z Forcer la réinstallation des scripts qui se basent sur shouldrun/setdone
|
||||||
|
-o OUTPUT
|
||||||
|
Générer l'archive à lancer sur l'hôte distant au lieu de faire le
|
||||||
|
déploiement. Si plusieurs hôtes sont spécifiés, OUTPUT est considéré
|
||||||
|
comme un nom de base auquel est ajouté le nom de l'hôte sur lequel
|
||||||
|
l'archive doit être déployée.
|
||||||
|
--sysinfos
|
||||||
|
Après un déploiement réussi sur l'hôte distant, inscrire si ce n'est
|
||||||
|
déjà fait le résultat de la commande usysinfos dans le fichier
|
||||||
|
sysinfos.conf du répertoire d'hôte.
|
||||||
|
Cette option est automatiquement activée si ce script est lancé sans
|
||||||
|
argument (hors options).
|
||||||
|
}}}
|
|
@ -0,0 +1,38 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ruinst
|
||||||
|
|
||||||
|
{{{
|
||||||
|
ruinst: Déploiement distant avec uinst
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
ruinst [-H host] [-T tmproot] <file|archive|dir> [-- options de uinst]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-C Ne pas faire le déploiement. Configurer uniquement la connexion par clé
|
||||||
|
sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir
|
||||||
|
se connecter par mot de passe pour configurer la connexion par clé.
|
||||||
|
Si l'on veut configurer la connexion par clé pour le user root, mais que
|
||||||
|
ce n'est pas possible de se connecter par mot de passe avec le user root
|
||||||
|
sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant,
|
||||||
|
il est possible de faire la configuration avec '--configure root'. La
|
||||||
|
commande serait alors
|
||||||
|
ruinst -H user@host --configure root
|
||||||
|
-T tmproot
|
||||||
|
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
|
||||||
|
un /tmp minuscule de 16 Mo.
|
||||||
|
-S ssh
|
||||||
|
Spécifier le programme à utiliser pour la connection par ssh.
|
||||||
|
-H host
|
||||||
|
Spécifier un hôte distant sur lequel faire le déploiement. Plusieurs
|
||||||
|
options -H peuvent être spécifiées, ou alors on peut séparer plusieurs
|
||||||
|
hôtes par ':', e.g. -H host1:host2
|
||||||
|
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||||
|
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||||
|
user@host, e.g -H user@host
|
||||||
|
}}}
|
|
@ -0,0 +1,60 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 30/03/2012 04:42
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: runs
|
||||||
|
|
||||||
|
{{{
|
||||||
|
runs: Lancer un script avec le protocole runs
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
runs [options] rscriptname name=value...
|
||||||
|
runs [options] @recipe name=value...
|
||||||
|
runs [options] -f rscript name=value...
|
||||||
|
runs [options] -r recipe name=value...
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
Configuration
|
||||||
|
--init
|
||||||
|
Créer le répertoire d'hôte correspondant à l'hôte courant ou à l'hôte
|
||||||
|
spécifié avec l'option -h
|
||||||
|
--sysinfos DATA
|
||||||
|
Avec l'option --init, initialiser le fichier sysinfos.conf avec DATA, si
|
||||||
|
le fichier n'a pas déjà été provisionné. Sans cette option, un fichier
|
||||||
|
vide avec des commentaires est créé à la place.
|
||||||
|
--create RSCRIPT
|
||||||
|
Créer un modèle de script avec le nom donné.
|
||||||
|
Avec l'option -h, le script est créé dans le répertoire d'hôte
|
||||||
|
correspondant à l'hôte spécifié
|
||||||
|
|
||||||
|
Gestion des scripts
|
||||||
|
-s Forcer l'exécution du script avec l'utilisateur root si ce n'est pas
|
||||||
|
déjà le cas
|
||||||
|
-f RSCRIPT
|
||||||
|
Lancer le script individuel spécifié au lieu de chercher dans les
|
||||||
|
répertoires de $RUNSSCRIPTSPATH
|
||||||
|
-r RECIPE
|
||||||
|
Lancer les scripts spécifiés dans le fichier de recettes individuel
|
||||||
|
spécifié.
|
||||||
|
-h HOSTNAME[.DOMAIN]
|
||||||
|
Spécifier que les scripts sont destinés à être lancés sur l'hôte
|
||||||
|
spécifié. Les scripts sont alors aussi cherchés dans les répertoires
|
||||||
|
{$RUNSHOSTSPATH}/$hostname.$domain (par défaut) et
|
||||||
|
{$RUNSHOSTSPATH}/$domain/$hostname (le cas échéant)
|
||||||
|
L'option --host est équivalente, sauf que son argument est facultatif et
|
||||||
|
que sa valeur par défaut est l'hôte courant, soit melee
|
||||||
|
--list
|
||||||
|
Afficher la liste des scripts qui sont disponibles. Avec l'option -h,
|
||||||
|
inclure aussi les scripts spécifiques à cet hôte.
|
||||||
|
Avec cette option, les arguments supplémentaires agissent comme des
|
||||||
|
filtres (regexp utilisée avec l'opérateur == de la commande [[). Les
|
||||||
|
noms des scripts doivent valider au moins un filtre.
|
||||||
|
--info
|
||||||
|
Afficher la la description du script et la valeur de chaque variable
|
||||||
|
définies
|
||||||
|
--desc-only
|
||||||
|
Afficher seulement la description du script
|
||||||
|
-z Forcer la réinstallation des scripts qui se basent sur shouldrun/setdone
|
||||||
|
}}}
|
|
@ -0,0 +1,38 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: rwoinst
|
||||||
|
|
||||||
|
{{{
|
||||||
|
rwoinst: Déploiement distant avec woinst
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
rwoinst [-H host] [-T tmproot] <file|archive|dir>... [-- options de woinst]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-C Ne pas faire le déploiement. Configurer uniquement la connexion par clé
|
||||||
|
sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir
|
||||||
|
se connecter par mot de passe pour configurer la connexion par clé.
|
||||||
|
Si l'on veut configurer la connexion par clé pour le user root, mais que
|
||||||
|
ce n'est pas possible de se connecter par mot de passe avec le user root
|
||||||
|
sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant,
|
||||||
|
il est possible de faire la configuration avec '--configure root'. La
|
||||||
|
commande serait alors
|
||||||
|
rwoinst -H user@host --configure root
|
||||||
|
-T tmproot
|
||||||
|
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
|
||||||
|
un /tmp minuscule de 16 Mo.
|
||||||
|
-S ssh
|
||||||
|
Spécifier le programme à utiliser pour la connection par ssh.
|
||||||
|
-H host
|
||||||
|
Spécifier un hôte distant sur lequel faire le déploiement. Plusieurs
|
||||||
|
options -H peuvent être spécifiées, ou alors on peut séparer plusieurs
|
||||||
|
hôtes par ':', e.g. -H host1:host2
|
||||||
|
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||||
|
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||||
|
user@host, e.g -H user@host
|
||||||
|
}}}
|
|
@ -0,0 +1,39 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: twsync
|
||||||
|
|
||||||
|
{{{
|
||||||
|
twsync: synchroniser un répertoire de wiki avec un tiddlywiki
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
twsync [options]
|
||||||
|
|
||||||
|
Un répertoire de wiki est un répertoire où chaque page est contenu dans un
|
||||||
|
fichier avec l'extension .twp
|
||||||
|
Un tiddlywiki est un fichier html contenant le code de TiddlyWiki et les données
|
||||||
|
associées.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-d wikidir
|
||||||
|
-f wikifile
|
||||||
|
Spécifier le répertoire de wiki et le tiddlywiki à traiter. Par défaut,
|
||||||
|
il s'agit de wiki.html dans le répertoire courant.
|
||||||
|
-u Importer les pages de wikidir dans le tiddlywiki. Utiliser cette action
|
||||||
|
quand les pages de wikidir sont modifiées et qu'il faut mettre à jour le
|
||||||
|
tiddlywiki.
|
||||||
|
Il s'agit de l'action par défaut
|
||||||
|
--force
|
||||||
|
Forcer l'importation des pages même si les tiddlers correspondant sont
|
||||||
|
plus récents dans le tiddlywiki
|
||||||
|
Forcer aussi la regénération de wikifile même si aucune modification n'a
|
||||||
|
été détectée
|
||||||
|
-e Exporter les tiddlers du tiddlywiki vers wikidir. Utiliser cette action
|
||||||
|
quand le tiddlywiki a été modifié, et qu'il faut synchroniser wikidir
|
||||||
|
avec les dernières modifications.
|
||||||
|
-U Mettre à jour le fichier wikifile avec la dernière version de tiddlywiki
|
||||||
|
située dans ~/wop/modules/nutools/lib/tiddlywiki/empty.html
|
||||||
|
}}}
|
|
@ -0,0 +1,24 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ubackup
|
||||||
|
|
||||||
|
{{{
|
||||||
|
ubackup: faire une sauvegarde des fichiers
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
ubackup [options]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-l Lister les profils de sauvegarde disponibles.
|
||||||
|
-p Spécifier le profil de sauvegarde à effectuer. Par défaut, toutes les
|
||||||
|
sauvegardes sont effectuées.
|
||||||
|
-u USER
|
||||||
|
Faire le sauvegarde pour l'utilisateur $USER. Cette option n'est valide
|
||||||
|
que pour l'utilisateur root.
|
||||||
|
-n Afficher ce qui doit être fait plutôt que de le faire
|
||||||
|
-H Arrêter la machine après une sauvegarde REUSSIE.
|
||||||
|
}}}
|
|
@ -0,0 +1,51 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: uconf
|
||||||
|
|
||||||
|
{{{
|
||||||
|
uconf: Activer ou désactiver un paramètre dans un fichier de configuration
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
uconf [options] config name[=value]...
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-e Activer le paramètre (par défaut). Si le paramètre existe, mais est
|
||||||
|
commenté, il est décommenté. Si une valeur est spécifiée pour le
|
||||||
|
paramètre, le paramètre est modifié dans le fichier en conséquence.
|
||||||
|
-q Cette option s'utilise avec l'option -e et le type shell. Elle permet
|
||||||
|
de s'assurer que les valeurs ayant des espaces et/ou des caractères
|
||||||
|
spéciaux sont quotées
|
||||||
|
-d Désactiver le paramètre. Le paramètre est commenté s'il existe dans le
|
||||||
|
fichier
|
||||||
|
-a Ajouter une valeur à la variable, ou un paramètre avec cette valeur
|
||||||
|
(suivant le type de fichier de configuration)
|
||||||
|
-A Ajouter une valeur au tableau, ou un paramètre avec cette valeur
|
||||||
|
(suivant le type de fichier de configuration)
|
||||||
|
-t TYPE
|
||||||
|
Type de fichier de configuration. TYPE peut être sh (par défaut), apache
|
||||||
|
ou mysql.
|
||||||
|
shell
|
||||||
|
les paramètres sont de la forme 'name=value', et les commentaires
|
||||||
|
débutent par '#'. Ce type peut être utilisé pour tous les fichiers
|
||||||
|
ayant ces caractéristiques, dont les fichiers de script shell
|
||||||
|
apache
|
||||||
|
les paramètres sont de la forme 'name value', et les commentaires
|
||||||
|
débutent par '#'. Ce type peut être utilisé pour tous les fichiers
|
||||||
|
ayant ces caractéristiques, dont les fichiers de configuration
|
||||||
|
apache
|
||||||
|
mysql, php
|
||||||
|
les paramètres sont dans des sections nommées de la forme [section],
|
||||||
|
sont de la forme 'name=value', et les commentaires débutent par '#'
|
||||||
|
ou ';'
|
||||||
|
Ce type peut être utilisé pour tous les fichiers ayant ces
|
||||||
|
caractéristiques, dont les fichiers de configuration de mysql et de
|
||||||
|
php. Avec ce type, la section est obligatoire.
|
||||||
|
-s SECTION
|
||||||
|
Avec le type mysql, préciser la section dans laquelle inscrire le
|
||||||
|
paramètre. Attention! La section DOIT exister, elle n'est pas créée
|
||||||
|
automatiquement.
|
||||||
|
}}}
|
|
@ -0,0 +1,90 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ucrontab
|
||||||
|
|
||||||
|
{{{
|
||||||
|
ucrontab: Ajouter/Supprimer une ligne dans crontab
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
ucrontab [options] ctline
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-a Ajouter la ligne dans le fichier crontab (par défaut)
|
||||||
|
-r Enlever la ligne dans le fichier crontab
|
||||||
|
-u user
|
||||||
|
Spécifier l'utilisateur pour lequel on modifie crontab. Par défaut,
|
||||||
|
modifier le crontab de root
|
||||||
|
-H host:hosts...
|
||||||
|
Modifier le crontab sur les hôtes distants spécifiés. Avec l'hôte '.' ou
|
||||||
|
'localhost', la modification est faite sur l'hôte local
|
||||||
|
Si l'action est -a, un script 'undo-ucrontab.sh' est créé dans le
|
||||||
|
répertoire courant, qui annule la planification. Il est possible de
|
||||||
|
lancer ce script le lendemain pour enlever les planifications
|
||||||
|
installées.
|
||||||
|
ctline
|
||||||
|
Ligne de crontab de la forme 'minutes hours days months dows command'
|
||||||
|
Si la ligne est de la forme halt[@hh:mm], la commande 'shutdown -h now'
|
||||||
|
est planifiée pour le LENDEMAIN à hh:mm. si hh:mm n'est pas spécifié,
|
||||||
|
l'arrêt est planifié pour 7:00
|
||||||
|
-t hh:mm
|
||||||
|
Ignorer la partie 'minutes hours days months dows' de ctline, et la
|
||||||
|
remplacer par une planification à hh:mm le LENDEMAIN.
|
||||||
|
--dom dayOfMonth
|
||||||
|
--month month
|
||||||
|
Spécifier respectivement le jour du mois et le mois (1-12) auquel faire
|
||||||
|
la planification. Par défaut, les planifications sont effectuées pour le
|
||||||
|
LENDEMAIN. Il est conseillé de spécifier les deux arguments si le jour
|
||||||
|
doit être fixé.
|
||||||
|
-s cmdfile
|
||||||
|
Spécifier un fichier, dont le contenu est utilisé pour générer le script
|
||||||
|
qui est planifié. Le fichier doit contenir l'ensemble des commandes à
|
||||||
|
exécuter. Le script est modifié pour s'autodétruire à la fin de son
|
||||||
|
exécution. Si ce comportement n'est pas souhaité, il faut rajouter la
|
||||||
|
commande 'exit 0' à la fin.
|
||||||
|
-S cmd
|
||||||
|
Comme -s, mais spécifier le contenu du fichier directement sur la ligne
|
||||||
|
de commande.
|
||||||
|
-f hostsfile
|
||||||
|
Spécifier un fichier qui contient la liste des hôtes sur lesquels faire
|
||||||
|
les planifications.
|
||||||
|
Les options -s, -S, -H, -d, -n sont ignorées. L'option --add est valide
|
||||||
|
jusqu'au premier @group du fichier. Voici le format de ce fichier:
|
||||||
|
|
||||||
|
Un groupe d'hôte débute par une ligne de la forme '@group:adelay:gdelay'
|
||||||
|
- adelay est le nombre de minutes à laisser passer entre les hôtes du
|
||||||
|
groupe (par défaut 1)
|
||||||
|
- gdelay est le nombre de minutes à laisser passer après le traitement
|
||||||
|
du groupe (par défaut 15)
|
||||||
|
Les autres lignes sont des hôtes sur lequels planifier l'opération, de
|
||||||
|
la forme 'host:cmd'
|
||||||
|
- host est un nom d'hôte pleinement qualifié, sur lequel il est possible
|
||||||
|
de se connecter par clé.
|
||||||
|
- cmd est une description de la commande à lancer pour effectuer
|
||||||
|
l'opération planifiée. Utiliser la syntaxe '<script' pour prendre le
|
||||||
|
contenu du fichier de script spécifié. Le script est copié dans un
|
||||||
|
fichier temporaire sur l'hôte, et se supprime après son
|
||||||
|
lancement. Sinon, la commande spécifiée est utilisée telle quelle. Si
|
||||||
|
cmd n'est pas spécifié, prendre la commande par défaut donnée par
|
||||||
|
ctline
|
||||||
|
Les lignes vides et commençant par '#' sont ignorées
|
||||||
|
La commande '@include:file' permet d'inclure un autre fichier
|
||||||
|
|
||||||
|
-d Activer l'incrémentation automatique des heures de planification entre
|
||||||
|
chaque hôte. Ceci permet par exemple de planifier l'arrêt d'un certain
|
||||||
|
nombre de machines dans un ordre précis, en horaire décalé.
|
||||||
|
Cette option est activée par défaut si ctline==halt[@time]
|
||||||
|
-n Désactiver l'incrémentation automatique des heures de planification.
|
||||||
|
--add ADELAY
|
||||||
|
Spécifier le nombre de minutes entre chaque hôte pour l'incrémentation
|
||||||
|
automatique des heures de planification. Par défaut, il y a 1 minute
|
||||||
|
entre chaque hôte.
|
||||||
|
--us undo-script
|
||||||
|
Spécifier le nom du script qui annule la planification. Utiliser ""
|
||||||
|
pour désactiver cette fonctionnalité.
|
||||||
|
--fake
|
||||||
|
Afficher simplement les modifications qui doivent être effectuées.
|
||||||
|
}}}
|
|
@ -0,0 +1,38 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: udir
|
||||||
|
|
||||||
|
{{{
|
||||||
|
udir: gérer les variables de répertoire
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
udir [options] [dir [name=value...]]
|
||||||
|
|
||||||
|
Par défaut, mettre à jour les variables du répertoire avec les définitions
|
||||||
|
données. Attention! Les définitions sont insérées *telles quelles* dans le
|
||||||
|
fichier. Par exemple, pour définir une variable qui contient des espaces,
|
||||||
|
on pourra faire:
|
||||||
|
udir /path/to/dir 'var="value with spaces"'
|
||||||
|
pour définir un tableau:
|
||||||
|
udir /path/to/dir 'array=(first second)'
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-i Afficher la description du répertoire. C'est l'action par défaut si ce
|
||||||
|
script est lancé *sans argument*
|
||||||
|
-d Afficher toutes les variables définies pour le répertoire 'dir'.
|
||||||
|
-x 'cmds;...'
|
||||||
|
Exécuter les commandes dans le contexte des variables définies pour le
|
||||||
|
répertoire.
|
||||||
|
-e Editer les variables du répertoire
|
||||||
|
--local-vars
|
||||||
|
Avec -d, ajouter des directives 'local' aux définitions de variables
|
||||||
|
-A Avec -d et -x, considérer les variables de tous les répertoires parents
|
||||||
|
jusqu'à la racine. Pour ne considérer que les variables du répertoire
|
||||||
|
spécifié (par défaut), utiliser --local-only
|
||||||
|
--help-vars
|
||||||
|
Afficher une descriptions des variables spécifiques aux outils de utools
|
||||||
|
}}}
|
|
@ -0,0 +1,32 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: uenv
|
||||||
|
|
||||||
|
{{{
|
||||||
|
uenv: Mettre à jour la configuration de l'environnement
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
uenv [-u [projdirs...]]
|
||||||
|
|
||||||
|
Cette commande met à jour l'ordre de chargement des fichiers de configuration
|
||||||
|
dans ~/etc/{profile.d,bashrc.d}. Elle est donc utile si ces fichiers ont été
|
||||||
|
modifiés manuellement, ou si un fichier a été ajouté manuellement.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
HOME=/path/to/homedir
|
||||||
|
Spécifier le chemin vers ~
|
||||||
|
Cette option doit être placée avant les valeurs projdirs.
|
||||||
|
-u Installer ou mettre à jour les fichiers de profil des projets spécifiés:
|
||||||
|
Les fichiers ~/.profile, ~/.bash_profile et ~/.bashrc sont vérifiés et
|
||||||
|
corriger automatiquement pour inclure les fichiers de nutools.
|
||||||
|
Ensuite, les fichiers de profil sont copié dans les répertoires
|
||||||
|
~/etc/{profile.d,bashrc.d,default}
|
||||||
|
Les projets spécifiés *doivent* être configurés avec uinst -C, et
|
||||||
|
définir la valeur install_profiles=true dans leur fichier .udir
|
||||||
|
Si aucun projet n'est spécifié, prendre les fichiers de profil de
|
||||||
|
nutools.
|
||||||
|
}}}
|
|
@ -0,0 +1,47 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: uinc.sh
|
||||||
|
|
||||||
|
{{{
|
||||||
|
uinc.py: Plier/déplier des inclusions dans un fichier
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
uinc.py [[options] dest...]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-f Plier les inclusions
|
||||||
|
-u Déplier les inclusions (par défaut)
|
||||||
|
-@ Forcer le caractère '@' pour le pliage/dépliage
|
||||||
|
-* Forcer le caractère '*' pour le pliage/dépliage
|
||||||
|
--auto
|
||||||
|
Activer la recherche automatique de paramètres (par défaut)
|
||||||
|
--noauto
|
||||||
|
Désactiver la recherche automatique de paramètres
|
||||||
|
-I SPEC
|
||||||
|
Spécifier des fichiers à inclure dans les répertoires spécifiés
|
||||||
|
-X SPEC
|
||||||
|
Spécifier des fichiers à exclure dans les répertoires spécifiés
|
||||||
|
--refdir REFDIR
|
||||||
|
Spécifier le répertoire de référence. Soit un répertoire DEST spécifié
|
||||||
|
dans les arguments. Si un fichier à inclure *n'est pas* un fils du
|
||||||
|
répertoire DEST, l'emplacement effectif du fichier est calculé en
|
||||||
|
faisant comme si DEST==REFDIR.
|
||||||
|
Par exemple, soit DEST=/dest/path et REFDIR=/refdir/path. Si le fichier
|
||||||
|
/dest/path/file inclue le fichier ../inc, alors c'est le fichier
|
||||||
|
/refdir/inc qui est considéré.
|
||||||
|
Ceci permet de traiter les inclusions dans une copie temporaire d'un
|
||||||
|
répertoire, dans le cas où les fichier font référence à d'autres
|
||||||
|
fichiers situés relativement à l'emplacement original.
|
||||||
|
|
||||||
|
Les spécifications de fichiers sont de types glob: ils peuvent contenir les
|
||||||
|
wildcards * et ?. Ils supportent en plus la chaine '**' qui signifie n'importe
|
||||||
|
quelle profondeur de répertoire. 'dir/' est équivalent à 'dir/**' et signifie
|
||||||
|
tous les fichiers situés dans l'arborescence à partir de dir.
|
||||||
|
|
||||||
|
La variable UINCPATH contient une liste de répertoires qui sont consultés pour
|
||||||
|
trouver les fichiers à inclure.
|
||||||
|
}}}
|
|
@ -0,0 +1,47 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: uinc
|
||||||
|
|
||||||
|
{{{
|
||||||
|
uinc.py: Plier/déplier des inclusions dans un fichier
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
uinc.py [[options] dest...]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-f Plier les inclusions
|
||||||
|
-u Déplier les inclusions (par défaut)
|
||||||
|
-@ Forcer le caractère '@' pour le pliage/dépliage
|
||||||
|
-* Forcer le caractère '*' pour le pliage/dépliage
|
||||||
|
--auto
|
||||||
|
Activer la recherche automatique de paramètres (par défaut)
|
||||||
|
--noauto
|
||||||
|
Désactiver la recherche automatique de paramètres
|
||||||
|
-I SPEC
|
||||||
|
Spécifier des fichiers à inclure dans les répertoires spécifiés
|
||||||
|
-X SPEC
|
||||||
|
Spécifier des fichiers à exclure dans les répertoires spécifiés
|
||||||
|
--refdir REFDIR
|
||||||
|
Spécifier le répertoire de référence. Soit un répertoire DEST spécifié
|
||||||
|
dans les arguments. Si un fichier à inclure *n'est pas* un fils du
|
||||||
|
répertoire DEST, l'emplacement effectif du fichier est calculé en
|
||||||
|
faisant comme si DEST==REFDIR.
|
||||||
|
Par exemple, soit DEST=/dest/path et REFDIR=/refdir/path. Si le fichier
|
||||||
|
/dest/path/file inclue le fichier ../inc, alors c'est le fichier
|
||||||
|
/refdir/inc qui est considéré.
|
||||||
|
Ceci permet de traiter les inclusions dans une copie temporaire d'un
|
||||||
|
répertoire, dans le cas où les fichier font référence à d'autres
|
||||||
|
fichiers situés relativement à l'emplacement original.
|
||||||
|
|
||||||
|
Les spécifications de fichiers sont de types glob: ils peuvent contenir les
|
||||||
|
wildcards * et ?. Ils supportent en plus la chaine '**' qui signifie n'importe
|
||||||
|
quelle profondeur de répertoire. 'dir/' est équivalent à 'dir/**' et signifie
|
||||||
|
tous les fichiers situés dans l'arborescence à partir de dir.
|
||||||
|
|
||||||
|
La variable UINCPATH contient une liste de répertoires qui sont consultés pour
|
||||||
|
trouver les fichiers à inclure.
|
||||||
|
}}}
|
|
@ -0,0 +1,38 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: uinst.sh
|
||||||
|
|
||||||
|
{{{
|
||||||
|
uinst.sh: Déployer en local un fichier, une archive, ou un répertoire
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
uinst.sh [options] <file|archive|dir>
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
var=value
|
||||||
|
Spécifier la valeur d'une variable ou d'un préfixe, plutôt que de
|
||||||
|
laisser uprefix l'autodétecter. Utiliser 'uprefix -l' pour avoir une
|
||||||
|
liste de préfixes valides. Utiliser 'udir --help-vars' pour avoir une
|
||||||
|
liste de variables valides pour uinst.sh.
|
||||||
|
-d /path/to/destdir
|
||||||
|
Spécifier le répertoire destination. Equivalent à l'option
|
||||||
|
destdir="/path/to/destdir"
|
||||||
|
-a (par défaut) Si la source n'est pas spécifiée, déterminer le répertoire
|
||||||
|
à déployer automatiquement.
|
||||||
|
--no-auto
|
||||||
|
Ne pas déterminer automatiquement le répertoire à déployer.
|
||||||
|
--prefix
|
||||||
|
(par défaut) Corriger les chemins srcdir et destdir qui commencent par
|
||||||
|
des préfixes valides. Utiliser 'uprefix -l' pour avoir une liste de
|
||||||
|
préfixes valides.
|
||||||
|
--no-prefix
|
||||||
|
Ne jamais corriger un chemin.
|
||||||
|
--include-vcs
|
||||||
|
Inclure les fichiers de VCS dans les fichiers copiés. Par défaut, les
|
||||||
|
fichiers de VCS sont exclus.
|
||||||
|
-C Configurer un répertoire pour le déploiement avec uinst
|
||||||
|
}}}
|
|
@ -0,0 +1,38 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: uinst
|
||||||
|
|
||||||
|
{{{
|
||||||
|
uinst: Déployer en local un fichier, une archive, ou un répertoire
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
uinst [options] <file|archive|dir>
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
var=value
|
||||||
|
Spécifier la valeur d'une variable ou d'un préfixe, plutôt que de
|
||||||
|
laisser uprefix l'autodétecter. Utiliser 'uprefix -l' pour avoir une
|
||||||
|
liste de préfixes valides. Utiliser 'udir --help-vars' pour avoir une
|
||||||
|
liste de variables valides pour uinst.
|
||||||
|
-d /path/to/destdir
|
||||||
|
Spécifier le répertoire destination. Equivalent à l'option
|
||||||
|
destdir="/path/to/destdir"
|
||||||
|
-a (par défaut) Si la source n'est pas spécifiée, déterminer le répertoire
|
||||||
|
à déployer automatiquement.
|
||||||
|
--no-auto
|
||||||
|
Ne pas déterminer automatiquement le répertoire à déployer.
|
||||||
|
--prefix
|
||||||
|
(par défaut) Corriger les chemins srcdir et destdir qui commencent par
|
||||||
|
des préfixes valides. Utiliser 'uprefix -l' pour avoir une liste de
|
||||||
|
préfixes valides.
|
||||||
|
--no-prefix
|
||||||
|
Ne jamais corriger un chemin.
|
||||||
|
--include-vcs
|
||||||
|
Inclure les fichiers de VCS dans les fichiers copiés. Par défaut, les
|
||||||
|
fichiers de VCS sont exclus.
|
||||||
|
-C Configurer un répertoire pour le déploiement avec uinst
|
||||||
|
}}}
|
|
@ -0,0 +1,28 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ujava
|
||||||
|
|
||||||
|
{{{
|
||||||
|
ujava: Lancer un script après avoir sélectionné une version de java
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
ujava [options] version [args...]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-b, --bits 32|64|auto
|
||||||
|
Sélectionner une version 32 ou 64 bits de java
|
||||||
|
-e, --exact
|
||||||
|
Sélectionner la version *exacte* de java demandée, au lieu de la version
|
||||||
|
minimum correspondant à la version demandée.
|
||||||
|
Si la version requise de java n'est pas trouvée, retourner avec le code
|
||||||
|
d'erreur 254.
|
||||||
|
|
||||||
|
La version de java attendue peut-être exprimée de l'une des façons suivantes:
|
||||||
|
1.4 1.4+ 1.5 1.5+ 1.6 1.6+ 1.7 1.7+
|
||||||
|
Si args n'est pas spécifié, un shell est lancé dans lequel les variables
|
||||||
|
JAVA_HOME, JAVA, JAVAC et PATH sont mis à jour.
|
||||||
|
}}}
|
|
@ -0,0 +1,219 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: uldap
|
||||||
|
|
||||||
|
{{{
|
||||||
|
uldap: Shell pour accéder à un serveur ldap
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
uldap [options]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-C profile
|
||||||
|
Sélectionner un profil de connexion. Par défaut, si l'option -H n'est
|
||||||
|
pas spécifiée, le premier profil est sélectionné.
|
||||||
|
-x Ne pas tenter de faire une connexion sur le profil par défaut si aucun
|
||||||
|
profil n'est sélectionné.
|
||||||
|
-f script
|
||||||
|
Lire les commandes depuis le script spécifié.
|
||||||
|
-n Avec un script donné en ligne de commande ou lu depuis un fichier, ne pas
|
||||||
|
ajouter automatiquement la commande print à la fin
|
||||||
|
-i Si un script est spécifié, passer en mode interactif après l'exécution
|
||||||
|
du script.
|
||||||
|
-e Forcer l'arrêt du script si une erreur se produit. C'est l'option par
|
||||||
|
défaut pour un script spécifié avec -f.
|
||||||
|
-l input.ldif
|
||||||
|
Charger le fichier input.ldif comme espace de travail initial
|
||||||
|
-H ldapuri
|
||||||
|
-D binddn
|
||||||
|
-w password
|
||||||
|
-b searchbase
|
||||||
|
-v var=value
|
||||||
|
|
||||||
|
COMMANDES
|
||||||
|
$ cmd
|
||||||
|
Passer directement une commande au shell.
|
||||||
|
set [options] [var=value...]
|
||||||
|
Changer des options ou des variables. set sans argument affiche la liste
|
||||||
|
des variables définies.
|
||||||
|
[set] plain
|
||||||
|
Passer en mode 'plain': indiquer que l'espace de travail contient des
|
||||||
|
données brutes. Les pré-traitements et post-traitements (uncut_on_load,
|
||||||
|
decode_on_load, encode_on_save, cut_on_save) ne sont pas appliqués sur
|
||||||
|
cet espace de travail
|
||||||
|
[set] ldif
|
||||||
|
Passer en mode 'ldif': indiquer que l'espace de travail contient des
|
||||||
|
données ldif. Les pré-traitements et post-traitements sont appliqués
|
||||||
|
normalement sur cet espace de travail
|
||||||
|
[set] append
|
||||||
|
Pour certaines opérations, spécifier si le résultat de la *prochaine*
|
||||||
|
opération remplace le contenu de l'espace de travail courant (par
|
||||||
|
défaut), ou si le résultat est ajouté à la fin.
|
||||||
|
last
|
||||||
|
Afficher en mode édition la dernière commande. Cette commande n'est
|
||||||
|
fonctionnelle qu'avec une version de bash >=4.x
|
||||||
|
profile name
|
||||||
|
Choisir le profil 'name'. Equivalent à 'set profile=name'. Sans
|
||||||
|
argument, afficher la liste des profils valides.
|
||||||
|
auth anonymous|binddn [password]
|
||||||
|
Spécifier le compte à utiliser pour se connecter. Equivalent à
|
||||||
|
'set binddn=binddn; set password=password'
|
||||||
|
clear [-k]
|
||||||
|
Vider l'espace de travail et passer en mode 'plain'.
|
||||||
|
Avec l'option -k, supprimer aussi tout l'historique d'annulation.
|
||||||
|
load [-k] input
|
||||||
|
Charger un fichier dans l'espace de travail. Si l'extension du fichier
|
||||||
|
est .ldif, passer en mode 'ldif'
|
||||||
|
En mode append, rajouter le contenu du fichier à l'espace de travail,
|
||||||
|
puis repasser en mode replace.
|
||||||
|
Le code de retour est 0 si le fichier a été chargé, 1 sinon.
|
||||||
|
save [-a] output
|
||||||
|
Sauvegarder l'espace de travail dans un fichier.
|
||||||
|
Avec l'option -a, rajouter au fichier au lieu de l'écraser
|
||||||
|
print
|
||||||
|
Afficher l'espace de travail
|
||||||
|
alias a=rdn...
|
||||||
|
Définir un alias pour la commande cd. 'a' est l'alias, 'rdn' est le dn
|
||||||
|
correspondant, exprimé par rapport à $suffix. Sans argument, afficher
|
||||||
|
la liste des aliases définis.
|
||||||
|
cd rdn
|
||||||
|
Changer searchbase. Par défaut, il s'agit d'un rdn relatif à $searchbase
|
||||||
|
- Certains aliases sont supportés: .. pour l'objet parent, ~ pour
|
||||||
|
$suffix, / pour la racine. 'cd' sans argument équivaut à 'cd ~'
|
||||||
|
- Si le dn commence par '~/', il s'agit d'un rdn relatif à $suffix.
|
||||||
|
- Si le dn commence par /, searchbase reçoit la valeur rdn sans
|
||||||
|
modifications (sauf bien sûr enlever le '/' de tête si nécessaire). Il
|
||||||
|
faut alors que ce soit un dn absolu.
|
||||||
|
ls [-b searchbase] [filter [attrs...]]
|
||||||
|
search [-b searchbase] [filter [attrs...]]
|
||||||
|
Utiliser ldapsearch pour faire la recherche, et copier le résultat dans
|
||||||
|
l'espace de travail. 'ls' est équivalent à 'search -s one'. Si ce n'est
|
||||||
|
pas déjà le cas, passer en mode 'ldif'.
|
||||||
|
L'option -b prend une valeur avec la même syntaxe que la commande cd,
|
||||||
|
sauf que les alias ne sont pas supportés. En particulier, la valeur est
|
||||||
|
relative au $searchbase courant. Pour faire une recherche par rapport à
|
||||||
|
$suffix, il faut utiliser la syntaxe ~/searchbase.
|
||||||
|
En mode append, rajouter le résultat de la recherche à l'espace de
|
||||||
|
travail, puis repasser en mode replace.
|
||||||
|
Le code de retour est 1 si aucun enregistrement n'a été trouvé, sinon
|
||||||
|
le code de retour est celui de la commande ldapsearch.
|
||||||
|
cut Couper les lignes trop longues. Cette action est en principe effectuée
|
||||||
|
automatiquement lors de la sauvegarde. Il n'est pas conseillé
|
||||||
|
d'appliquer des méthodes de transformation après avoir utilisé cette
|
||||||
|
action.
|
||||||
|
uncut
|
||||||
|
Fusionner les lignes coupées. Cette action est en principe effectuée
|
||||||
|
automatiquement lors du chargement ou après la recherche.
|
||||||
|
encode [attrs...]
|
||||||
|
Encoder en base64 les valeurs des attributs mentionnés.
|
||||||
|
decode [attrs...]
|
||||||
|
Décoder les valeurs des attributs mentionnés si nécessaire (c'est à dire
|
||||||
|
s'ils sont encodés en base64)
|
||||||
|
keepattr attrs...
|
||||||
|
Garder uniquement les lignes des attributs mentionnés. Ensuite,
|
||||||
|
supprimer les objets ayant uniquement la ligne dn: (en d'autres termes,
|
||||||
|
keepattr sans argument supprime *tout* l'espace de travail)
|
||||||
|
keepval attr patterns...
|
||||||
|
Pour l'attribut attr, garder uniquement les lignes pour lesquelles les
|
||||||
|
valeurs correspondent aux expressions régulières. Les autres attributs
|
||||||
|
ne sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la
|
||||||
|
ligne dn:
|
||||||
|
exclude attrs...
|
||||||
|
Supprimer les lignes des attributs mentionnés. Ensuite, supprimer les
|
||||||
|
objets ayant uniquement la ligne dn:
|
||||||
|
excludeval attr patterns...
|
||||||
|
Pour l'attribut attr, supprimer les lignes pour lesquelles les
|
||||||
|
valeurs correspondent aux expressions régulières. Les autres attributs
|
||||||
|
ne sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la
|
||||||
|
ligne dn:
|
||||||
|
setval attr values...
|
||||||
|
Remplacer toutes les valeurs de l'attribut attr par les valeurs
|
||||||
|
spécifiées.
|
||||||
|
addval attr values...
|
||||||
|
Ajouter un nouvel attribut avec les valeurs spécifiées. Si l'attribut
|
||||||
|
existe déjà, les nouvelles valeurs sont ajoutées à la fin.
|
||||||
|
sed args
|
||||||
|
Modifier l'espace de travail avec le résultat de la commande sed.
|
||||||
|
note: aucun argument n'est filtré, mais il ne faut pas utiliser les
|
||||||
|
options de sed qui provoquent la modification en place du fichier,
|
||||||
|
comme par exemple l'option -i
|
||||||
|
awk args
|
||||||
|
Modifier l'espace de travail avec le résultat de la commande awk.
|
||||||
|
grep args
|
||||||
|
Modifier l'espace de travail avec le résultat de la commande grep.
|
||||||
|
format [options] attrs...
|
||||||
|
Formater l'espace de travail en données tabulaires, et passer en mode
|
||||||
|
'plain'.
|
||||||
|
--show-headers
|
||||||
|
Afficher les en-têtes
|
||||||
|
-F FSEP
|
||||||
|
Spécifier le séparateur pour les attributs. Par défaut, il s'agit du
|
||||||
|
caractère de tabulation.
|
||||||
|
-R VSEP
|
||||||
|
Spécifier le séparateur pour les valeurs des attributs. Par défaut, il
|
||||||
|
s'agit du point-virgule ';'
|
||||||
|
-e Retourner les valeurs comme des variables shell. Les options -F et -R
|
||||||
|
sont ignorées. Les attributs multivalués sont écrits sous forme de
|
||||||
|
tableaux. Par exemple:
|
||||||
|
attributes=('mail' 'givenName')
|
||||||
|
index=0
|
||||||
|
mail='user@domain.fr'
|
||||||
|
givenName=('peter' 'gabriel')
|
||||||
|
--bc
|
||||||
|
Dans le mode -e, spécifier une commande à insérer avant le premier
|
||||||
|
enregistrement. Quand cette commande est lancée, index==-1
|
||||||
|
-c Dans le mode -e, spécifier une commande à insérer après chaque
|
||||||
|
enregistrement
|
||||||
|
--ec
|
||||||
|
Dans le mode -e, spécifier une commande à insérer après le dernier
|
||||||
|
enregistrement
|
||||||
|
sort [args]
|
||||||
|
Modifier l'espace de travail avec le résultat de la commande sort.
|
||||||
|
edit
|
||||||
|
Lancer un éditeur pour modifier l'espace de travail.
|
||||||
|
diff [options]
|
||||||
|
Afficher les différences entre l'espace de travail et la version
|
||||||
|
précédente
|
||||||
|
ifok cmd
|
||||||
|
iferror cmd
|
||||||
|
Si le dernier code de retour est 0 (resp. !=0), lancer la commande cmd
|
||||||
|
skip n
|
||||||
|
Sauter les n prochaines commandes. A utiliser avec ifok et iferror
|
||||||
|
undo
|
||||||
|
Annuler la dernière modification effectuée sur l'espace de travail
|
||||||
|
|
||||||
|
Les directives suivantes prennent le contenu de l'espace de travail, et le
|
||||||
|
transforment en une suite de commandes de modifications pour ldapmodify:
|
||||||
|
|
||||||
|
A Créer un objet de toutes pièces avec les attributs donnés et leurs
|
||||||
|
valeurs.
|
||||||
|
a Ajouter les valeurs spécifiée à l'attribut
|
||||||
|
r Remplacer les valeurs de l'attribut par celles spécifiées
|
||||||
|
d Supprimer les valeurs spécifiées de l'attribut
|
||||||
|
D Supprimer l'attribut
|
||||||
|
delentry
|
||||||
|
Supprimer l'objet
|
||||||
|
ldapmodify
|
||||||
|
Utiliser ldapmodify pour modifier les objets sur le serveur. Il faut
|
||||||
|
utiliser au préalable l'une des méthodes de transformation parmi A, a,
|
||||||
|
r, d, D, delentry.
|
||||||
|
Le code de retour est celui de la commande ldapmodify.
|
||||||
|
ldapadd
|
||||||
|
Utiliser ldapadd pour créer les objets situés dans l'espace de travail.
|
||||||
|
Le code de retour est celui de la commande ldapadd.
|
||||||
|
ldapdelete
|
||||||
|
Utiliser ldapdelete pour supprimer la liste des dns situés dans l'espace
|
||||||
|
de travail.
|
||||||
|
Le code de retour est celui de la commande ldapdelete.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- les expressions régulières sont celles reconnues par awk.
|
||||||
|
- pour spécifier plusieurs actions sur une même ligne, les séparer par //
|
||||||
|
- le code de retour est 0 si ok, 255 si une erreur s'est produite (erreur de
|
||||||
|
syntaxe, de connexion, de lecture/écriture de fichier, etc.). sinon, les
|
||||||
|
opérations ldap{search,modify,delete,add} ont leur code de retour respectifs
|
||||||
|
}}}
|
|
@ -0,0 +1,49 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 02/06/2012 09:54
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib
|
||||||
|
|
||||||
|
!Liste des librairies de ulib
|
||||||
|
* [[ulib/apache]]
|
||||||
|
* [[ulib/base]]
|
||||||
|
* [[ulib/bash]]
|
||||||
|
* [[ulib/compat]]
|
||||||
|
* [[ulib/conf]]
|
||||||
|
* [[ulib/crontab]]
|
||||||
|
* [[ulib/debian]]
|
||||||
|
* [[ulib/DEFAULTS]]
|
||||||
|
* [[ulib/install]]
|
||||||
|
* [[ulib/ipcalc]]
|
||||||
|
* [[ulib/java]]
|
||||||
|
* [[ulib/javaproperties]]
|
||||||
|
* [[ulib/ldap]]
|
||||||
|
* [[ulib/ldif]]
|
||||||
|
* [[ulib/legacy]]
|
||||||
|
* [[ulib/macosx]]
|
||||||
|
* [[ulib/mkcrypt]]
|
||||||
|
* [[ulib/modeline]]
|
||||||
|
* [[ulib/network-manager-service]]
|
||||||
|
* [[ulib/pkg]]
|
||||||
|
* [[ulib/prefixes]]
|
||||||
|
* [[ulib/pretty]]
|
||||||
|
* [[ulib/runs]]
|
||||||
|
* [[ulib/service]]
|
||||||
|
* [[ulib/sysinfos]]
|
||||||
|
* [[ulib/tiddlywiki]]
|
||||||
|
* [[ulib/udir]]
|
||||||
|
* [[ulib/uenv]]
|
||||||
|
* [[ulib/uenv_update]]
|
||||||
|
* [[ulib/uinc]]
|
||||||
|
* [[ulib/uinst]]
|
||||||
|
* [[ulib/ulib]]
|
||||||
|
* [[ulib/ulibsh]]
|
||||||
|
* [[ulib/vcs]]
|
||||||
|
* [[ulib/virsh]]
|
||||||
|
* [[ulib/webobjects]]
|
||||||
|
* [[ulib/woinst]]
|
||||||
|
* [[ulib/wondermonitor]]
|
||||||
|
* [[ulib/wosign]]
|
||||||
|
* [[ulib/wotaskd]]
|
|
@ -0,0 +1,8 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/DEFAULTS
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/apache
|
||||||
|
|
||||||
|
!! {{{get_default_apachebin_prefix}}}
|
||||||
|
!! {{{get_default_apacheversion_prefix}}}
|
||||||
|
!! {{{get_default_apachectl_prefix}}}
|
||||||
|
!! {{{get_default_apachelogdir_prefix}}}
|
||||||
|
!! {{{get_default_apachesslcertsdir_prefix}}}
|
||||||
|
!! {{{get_default_apachesslkeysdir_prefix}}}
|
||||||
|
!! {{{get_default_apacheconfdir_prefix}}}
|
||||||
|
!! {{{get_default_apacheconf_prefix}}}
|
||||||
|
!! {{{get_default_apacheavsitesdir_prefix}}}
|
||||||
|
!! {{{get_default_apachesitesdir_prefix}}}
|
||||||
|
!! {{{get_default_htdocsdir_prefix}}}
|
||||||
|
!! {{{get_default_cgibindir_prefix}}}
|
||||||
|
!! {{{compute_apache_prefixes}}}
|
||||||
|
!! {{{recompute_apache_prefixes}}}
|
||||||
|
!! {{{get_APACHEBIN_prefix}}}
|
||||||
|
!! {{{get_APACHEVERSION_prefix}}}
|
||||||
|
!! {{{get_APACHECTL_prefix}}}
|
||||||
|
!! {{{get_APACHELOGDIR_prefix}}}
|
||||||
|
!! {{{get_APACHESSLCERTSDIR_prefix}}}
|
||||||
|
!! {{{get_APACHESSLKEYSDIR_prefix}}}
|
||||||
|
!! {{{get_APACHECONFDIR_prefix}}}
|
||||||
|
!! {{{get_APACHECONF_prefix}}}
|
||||||
|
!! {{{get_APACHEAVSITESDIR_prefix}}}
|
||||||
|
!! {{{get_APACHESITESDIR_prefix}}}
|
||||||
|
!! {{{get_HTDOCSDIR_prefix}}}
|
||||||
|
!! {{{get_CGIBINDIR_prefix}}}
|
||||||
|
!! {{{apache_resolvecert}}}
|
||||||
|
{{{
|
||||||
|
Calculer l'emplacement des certificats correspondant aux arguments $1 et
|
||||||
|
$2 (qui correspondent aux options --conf et --dir de apache_addcert()),
|
||||||
|
puis initialiser les variables $3(=cert), $4(=key) et $5(=ca)
|
||||||
|
}}}
|
||||||
|
!! {{{apache_addcert}}}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,8 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/bash
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/compat
|
||||||
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/conf
|
||||||
|
|
||||||
|
!! {{{conf_enable}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, activer les paramètres $2..*
|
||||||
|
Chaque argument de cette fonction correspond à une directive du fichier de
|
||||||
|
configuration et doit être de la forme name[=value]
|
||||||
|
Dans tous les cas, toutes les directives de ce nom sont recherchées et
|
||||||
|
décommentées. Si value est précisée, les directives sont mises à jour. Si
|
||||||
|
la directive ne figure pas dans le fichier, elle y est rajoutée à la fin
|
||||||
|
avec la valeur spécifiée.
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
}}}
|
||||||
|
!! {{{conf_enableq}}}
|
||||||
|
{{{
|
||||||
|
Comme conf_enable(), mais s'assure que les valeurs sont quotées dans le
|
||||||
|
fichier. Ceci permet de stocker des valeurs avec des espaces ou des
|
||||||
|
caractères spéciaux.
|
||||||
|
}}}
|
||||||
|
!! {{{conf_disable}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, désactiver les paramètres $2..*
|
||||||
|
Chaque argument de cette fonction correspond à une directive du fichier de
|
||||||
|
configuration et doit être de la forme name[=value]
|
||||||
|
Toutes les directives de ce noms sont recherchées et commentées. La valeur
|
||||||
|
si elle est spécifiée, est ignorée. Si la directive ne figure pas dans le
|
||||||
|
fichier, c'est un NOP.
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
}}}
|
||||||
|
!! {{{conf_append}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, augmenter les valeurs des variables
|
||||||
|
correspondant aux paramètres $2..*
|
||||||
|
Chaque argument de cette fonction correspond à une variable du fichier de
|
||||||
|
configuration, et doit être de la forme name=value
|
||||||
|
Une ligne 'name="${name:+$name:}$value"' est générée à la fin du fichier
|
||||||
|
de configuration.
|
||||||
|
Par défaut, le séparateur CONF_APPEND_SEP vaut ':', mais il est possible
|
||||||
|
de changer cette valeur, de façon globale
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
}}}
|
||||||
|
!! {{{conf_array_append}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, augmenter les valeurs des variables
|
||||||
|
de tableau correspondant aux paramètres $2..*
|
||||||
|
Chaque argument de cette fonction correspond à une variable du fichier de
|
||||||
|
configuration, et doit être de la forme name=value
|
||||||
|
Une ligne name=("${name[@]}" "$value") est générée à la fin du fichier de
|
||||||
|
configuration
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
}}}
|
||||||
|
!! {{{conf_check}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, tester si tous les paramètres $2..*
|
||||||
|
sont présents.
|
||||||
|
Chaque argument de cette fonction correspond à une variable du fichier de
|
||||||
|
configuration, et doit être de la forme name[=value]
|
||||||
|
Si une valeur est spécifiée, vérifier que le fichier contient la valeur
|
||||||
|
correspondante. Sinon, tester uniquement la présence de la directive.
|
||||||
|
}}}
|
||||||
|
!! {{{aconf_enable}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, activer les paramètres $2..*
|
||||||
|
Chaque argument de cette fonction correspond à une directive du fichier de
|
||||||
|
configuration et doit être de la forme name[=value]
|
||||||
|
Toutes les directives de ce nom sont recherchées et décommentées, et la
|
||||||
|
valeur mise à jour. Si la directive ne figure pas dans le fichier, elle y
|
||||||
|
est rajoutée à la fin. A cause du mode opératoire, cette fonction ne
|
||||||
|
convient pas pour les directives dont le nom peut apparaitre plusieurs
|
||||||
|
fois dans le fichier
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
}}}
|
||||||
|
!! {{{aconf_disable}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, désactiver les paramètres $2..*
|
||||||
|
Chaque argument de cette fonction correspond à une directive du fichier de
|
||||||
|
configuration et doit être de la forme name[=value]
|
||||||
|
Si la valeur est précisée, la directive correspondant à ce nom et cette
|
||||||
|
valeur est recherchée et commentée. Sinon, toutes les directives de ce
|
||||||
|
noms sont recherchées et commentées. Si la directive ne figure pas dans le
|
||||||
|
fichier, c'est un NOP.
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
}}}
|
||||||
|
!! {{{aconf_append}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, ajouter des directives correspondant
|
||||||
|
aux paramètres $2..*
|
||||||
|
Chaque argument de cette fonction correspond à une directive du fichier de
|
||||||
|
configuration et doit être de la forme name=value
|
||||||
|
Une ligne '$name $value' est ajoutée à la fin du fichier de configuration
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
}}}
|
||||||
|
!! {{{aconf_array_append}}}
|
||||||
|
!! {{{aconf_check}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, tester si tous les paramètres $2..*
|
||||||
|
sont présents.
|
||||||
|
Chaque argument de cette fonction correspond à une variable du fichier de
|
||||||
|
configuration, et doit être de la forme name[=value]
|
||||||
|
Si une valeur est spécifiée, vérifier que le fichier contient la valeur
|
||||||
|
correspondante. Sinon, tester uniquement la présence de la directive.
|
||||||
|
}}}
|
||||||
|
!! {{{mconf_enable}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, activer les paramètres $3..* de la
|
||||||
|
section $2
|
||||||
|
Chaque argument de cette fonction correspond à une directive du fichier de
|
||||||
|
configuration et doit être de la forme name[=value]
|
||||||
|
Toutes les directives de ce nom sont recherchées et décommentées, et la
|
||||||
|
valeur mise à jour. Si la directive ne figure pas dans le fichier, elle y
|
||||||
|
est rajoutée à la fin. A cause du mode opératoire, cette fonction ne
|
||||||
|
convient pas pour les directives dont le nom peut apparaitre plusieurs
|
||||||
|
fois dans le fichier
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
Cette fonction nécessite gawk
|
||||||
|
}}}
|
||||||
|
!! {{{mconf_disable}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, désactiver les paramètres $3..* de la
|
||||||
|
section $2.
|
||||||
|
Chaque argument de cette fonction correspond à une directive du fichier de
|
||||||
|
configuration et doit être de la forme name[=value]
|
||||||
|
Si la valeur est précisée, la directive correspondant à ce nom et cette
|
||||||
|
valeur est recherchée et commentée. Sinon, toutes les directives de ce
|
||||||
|
noms sont recherchées et commentées. Si la directive ne figure pas dans le
|
||||||
|
fichier, c'est un NOP.
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
Cette fonction nécessite gawk
|
||||||
|
}}}
|
||||||
|
!! {{{mconf_append}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, ajouter des directives correspondant
|
||||||
|
aux paramètres $3..* dans la section $2
|
||||||
|
Chaque argument de cette fonction correspond à une directive du fichier de
|
||||||
|
configuration et doit être de la forme name=value
|
||||||
|
Une ligne '$name = $value' est ajoutée à la fin de la section, qui est
|
||||||
|
créée si nécessaire à la fin du fichier de configuration
|
||||||
|
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||||
|
Cette fonction nécessite gawk
|
||||||
|
}}}
|
||||||
|
!! {{{mconf_array_append}}}
|
||||||
|
!! {{{mconf_check}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier de configuration $1, tester si tous les paramètres $3..*
|
||||||
|
sont présents dans la section $2
|
||||||
|
Chaque argument de cette fonction correspond à une variable du fichier de
|
||||||
|
configuration, et doit être de la forme name[=value]
|
||||||
|
Si une valeur est spécifiée, vérifier que le fichier contient la valeur
|
||||||
|
correspondante. Sinon, tester uniquement la présence de la directive.
|
||||||
|
Cette fonction nécessite gawk
|
||||||
|
}}}
|
|
@ -0,0 +1,10 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/crontab
|
||||||
|
|
||||||
|
!! {{{add_to_crontab}}}
|
||||||
|
!! {{{remove_from_crontab}}}
|
|
@ -0,0 +1,49 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 30/03/2012 04:43
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/debian
|
||||||
|
|
||||||
|
!! {{{pkg_check}}}
|
||||||
|
{{{
|
||||||
|
Vérifier que les packages sont installés sur le système
|
||||||
|
}}}
|
||||||
|
!! {{{pkg_update}}}
|
||||||
|
{{{
|
||||||
|
Mettre à jour la liste des packages silencieusement sans confirmation
|
||||||
|
}}}
|
||||||
|
!! {{{pkg_upgrade}}}
|
||||||
|
{{{
|
||||||
|
Mettre à jour la liste des packages silencieusement sans confirmation
|
||||||
|
}}}
|
||||||
|
!! {{{pkg_install}}}
|
||||||
|
{{{
|
||||||
|
Installer les packages silencieusement et sans confirmation
|
||||||
|
}}}
|
||||||
|
!! {{{pkg_installm}}}
|
||||||
|
{{{
|
||||||
|
Installer les packages silencieusement et sans confirmation
|
||||||
|
Retourner 0 si au moins un des packages a été installé. Sinon, les
|
||||||
|
packages n'ont pas été instllés, soit parce qu'ils sont déjà installé,
|
||||||
|
soit parce qu'il y a eu une erreur.
|
||||||
|
}}}
|
||||||
|
!! {{{service_disable}}}
|
||||||
|
{{{
|
||||||
|
Désactiver le service $1 pour qu'il ne se lance pas automatiquement au
|
||||||
|
démarrage
|
||||||
|
}}}
|
||||||
|
!! {{{service_enable}}}
|
||||||
|
{{{
|
||||||
|
Activer le service $1 pour qu'il se lance automatiquement au démarrage
|
||||||
|
}}}
|
||||||
|
!! {{{create_bridge}}}
|
||||||
|
{{{
|
||||||
|
Créer un nouveau pont nommé $1 avec les paramètres $2
|
||||||
|
Si $2 est vide, sa valeur par défaut est
|
||||||
|
bridge_ports none
|
||||||
|
bridge_stp off
|
||||||
|
bridge_fd 2
|
||||||
|
bridge_maxwait 0
|
||||||
|
}}}
|
|
@ -0,0 +1,44 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/install
|
||||||
|
|
||||||
|
!! {{{ensure_exists}}}
|
||||||
|
{{{
|
||||||
|
créer le fichier vide "$1" s'il n'existe pas déjà. retourner vrai si le
|
||||||
|
fichier a été créé sans erreur
|
||||||
|
}}}
|
||||||
|
!! {{{copy_replace}}}
|
||||||
|
{{{
|
||||||
|
Copier de façon inconditionnelle le fichier $1 vers le fichier $2
|
||||||
|
}}}
|
||||||
|
!! {{{copy_new}}}
|
||||||
|
{{{
|
||||||
|
copier le fichier "$1" vers le fichier "$2"
|
||||||
|
Ne pas écraser le fichier destination s'il existe déjà
|
||||||
|
Retourner vrai si le fichier a été copié sans erreur
|
||||||
|
}}}
|
||||||
|
!! {{{copy_update}}}
|
||||||
|
{{{
|
||||||
|
copier le fichier "$1" vers le fichier "$2", si $2 n'existe pas, ou si $1
|
||||||
|
a été modifié par rapport à $2.
|
||||||
|
Retourner vrai si le fichier a été copié sans erreur.
|
||||||
|
}}}
|
||||||
|
!! {{{copy_update_ask}}}
|
||||||
|
{{{
|
||||||
|
Copier ou mettre à jour le fichier $1 vers le fichier $2.
|
||||||
|
Si le fichier existe déjà, la différence est affichée, et une confirmation
|
||||||
|
est demandée pour l'écrasement du fichier.
|
||||||
|
Retourner vrai si le fichier a été copié sans erreur.
|
||||||
|
}}}
|
||||||
|
!! {{{copy_tree}}}
|
||||||
|
{{{
|
||||||
|
Copier de façon inconditionnelle l'arborescence $1 dans l'arborescence $2
|
||||||
|
}}}
|
||||||
|
!! {{{link_new}}}
|
||||||
|
{{{
|
||||||
|
S'il $2 n'existe pas, créer le lien symbolique $2 pointant vers $1
|
||||||
|
}}}
|
|
@ -0,0 +1,54 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/ipcalc
|
||||||
|
|
||||||
|
!! {{{get_random_kvm_macaddr}}}
|
||||||
|
{{{
|
||||||
|
Obtenir une adresse mac au hasard commençant par 52:54:00 pour KVM
|
||||||
|
}}}
|
||||||
|
!! {{{ipcalc_splitipmask}}}
|
||||||
|
{{{
|
||||||
|
Découper $1 de la forme ip[/mask] entre l'adresse ip, qui est placé dans
|
||||||
|
la variable $2(=ip) et le masque, qui est placée dans la variable
|
||||||
|
$3(=mask)
|
||||||
|
}}}
|
||||||
|
!! {{{ipcalc_checkip}}}
|
||||||
|
{{{
|
||||||
|
Vérifier l'adresse ip $1 pour voir si elle est valide. Si l'adresse est
|
||||||
|
valide, l'afficher. Sinon, retourner 1
|
||||||
|
}}}
|
||||||
|
!! {{{ipcalc_checkmask}}}
|
||||||
|
{{{
|
||||||
|
vérifier le masque de sous-réseau $1 pour voir si elle est valide. Si oui,
|
||||||
|
afficher le suffixe (0, 8, 16, 24, 32) associé. Sinon retourner 1
|
||||||
|
}}}
|
||||||
|
!! {{{ipcalc_broadcast}}}
|
||||||
|
{{{
|
||||||
|
Calculer l'adresse de broadcast correspondant à l'adresse ip $1. Le masque
|
||||||
|
de sous-réseau peut-être indiqué dans l'adresse ip avec le suffixe /n ou
|
||||||
|
/x.x.x.x ou donné dans l'argument $2. Seuls les suffixes 0, 8, 16, 24, 32
|
||||||
|
sont supportés.
|
||||||
|
Retourner 1 si un erreur s'est produite, par exemple si l'adresse ou le
|
||||||
|
suffixe sont invalides ou non supportés.
|
||||||
|
}}}
|
||||||
|
!! {{{ipcalc_gateway}}}
|
||||||
|
{{{
|
||||||
|
Calculer l'adresse du gateway correspondant à l'adresse ip $1, en
|
||||||
|
considérant que le gateway est la première adresse du réseau. Le masque de
|
||||||
|
sous-réseau peut-être indiqué dans l'adresse ip avec le suffixe /n ou
|
||||||
|
/x.x.x.x ou donné dans l'argument $2. Seuls les suffixes 0, 8, 16, 24, 32
|
||||||
|
sont supportés.
|
||||||
|
Retourner 1 si un erreur s'est produite, par exemple si l'adresse ou le
|
||||||
|
suffixe sont invalides ou non supportés.
|
||||||
|
}}}
|
||||||
|
!! {{{ipcalc_match}}}
|
||||||
|
{{{
|
||||||
|
Vérifier si l'adresse $1 correspond au modèle $2, e.g.:
|
||||||
|
ipcalc_match 10.75.0.23 10/8 --> TRUE
|
||||||
|
ipcalc_match 10.75.0.23 10.75.0.0/24 --> TRUE
|
||||||
|
ipcalc_match 10.75.0.23 10.75.0.28 --> FALSE
|
||||||
|
}}}
|
|
@ -0,0 +1,29 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/java
|
||||||
|
|
||||||
|
!! {{{select_java}}}
|
||||||
|
{{{
|
||||||
|
sélectionner la version *minimum* de java correspondant à $1
|
||||||
|
$1== 1.3|1.3+|1.4|1.4+|1.5|1.5+|1.6|1.6+|1.7|1.7+
|
||||||
|
Si $2 est défini, il peut s'agit de 32 ou 64 selon que l'on requière la
|
||||||
|
version 32bits ou 64 bits
|
||||||
|
}}}
|
||||||
|
!! {{{select_java_exact}}}
|
||||||
|
{{{
|
||||||
|
sélectionner la version *exacte* de javac correspondant à $1
|
||||||
|
$1== 1.3|1.4|1.5|1.6|1.7 pour une correspondance exacte
|
||||||
|
$1== 1.3+|1.4+|1.5+|1.6+|1.7+ pour une version minimum
|
||||||
|
Si $2 est défini, il peut s'agit de 32 ou 64 selon que l'on requière la
|
||||||
|
version 32bits ou 64 bits
|
||||||
|
}}}
|
||||||
|
!! {{{get_default_javahome_prefix}}}
|
||||||
|
!! {{{get_javaextensions_prefix}}}
|
||||||
|
!! {{{compute_java_prefixes}}}
|
||||||
|
!! {{{recompute_java_prefixes}}}
|
||||||
|
!! {{{get_JAVA_HOME_prefix}}}
|
||||||
|
!! {{{get_JAVAEXTENSIONS_prefix}}}
|
|
@ -0,0 +1,28 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/javaproperties
|
||||||
|
|
||||||
|
!! {{{read_property}}}
|
||||||
|
{{{
|
||||||
|
Lire la propriété $2 dans le fichier $1, et placer la valeur dans la
|
||||||
|
variable $3. Si la propriété n'existe pas, prendre la valeur par défaut
|
||||||
|
$4. Si $3=="", elle est construite à partir de $2 en remplaçant les '.'
|
||||||
|
par '_'
|
||||||
|
Retourner 1 si une erreur s'est produite (par exemple si le fichier
|
||||||
|
n'existe pas ou n'est pas accessible en lecture)
|
||||||
|
}}}
|
||||||
|
!! {{{write_property}}}
|
||||||
|
{{{
|
||||||
|
Ecrire la propriété $2 dans le fichier $1 avec la valeur $3.
|
||||||
|
Retourner 1 si une erreur s'est produite (par exemple si le fichier
|
||||||
|
n'existe pas ou n'est pas accessible en écriture)
|
||||||
|
}}}
|
||||||
|
!! {{{write_properties}}}
|
||||||
|
{{{
|
||||||
|
Ecrire les propriétés $2..* dans le fichier $1. Les propriétés sont de la
|
||||||
|
forme "name=value"
|
||||||
|
}}}
|
|
@ -0,0 +1,66 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/ldap
|
||||||
|
|
||||||
|
!! {{{get_default_ldapconfdir_prefix}}}
|
||||||
|
{{{
|
||||||
|
Calculer et afficher la valeur par défaut de LDAPCONFDIR, ou une chaine
|
||||||
|
vide si l'on n'a pas pu le détecter automatiquement.
|
||||||
|
}}}
|
||||||
|
!! {{{get_default_ldapowner_prefix}}}
|
||||||
|
{{{
|
||||||
|
Calculer et afficher la valeur par défaut de LDAPOWNER, ou une chaine
|
||||||
|
vide si l'on n'a pas pu le détecter automatiquement.
|
||||||
|
}}}
|
||||||
|
!! {{{compute_ldap_prefixes}}}
|
||||||
|
!! {{{recompute_ldap_prefixes}}}
|
||||||
|
!! {{{get_LDAPCONFDIR_prefix}}}
|
||||||
|
!! {{{get_LDAPOWNER_prefix}}}
|
||||||
|
!! {{{split_ldapuri}}}
|
||||||
|
{{{
|
||||||
|
spliter le ldapuri $1 en $2(=proto), $3(=host) et $4(=port)
|
||||||
|
}}}
|
||||||
|
!! {{{get_suffixes}}}
|
||||||
|
{{{
|
||||||
|
obtenir les suffixes de connexion du serveur avec l'uri $1, un par ligne
|
||||||
|
retourner 1 si la valeur n'a pas pu être obtenue
|
||||||
|
}}}
|
||||||
|
!! {{{get_suffix}}}
|
||||||
|
{{{
|
||||||
|
obtenir le *premier* suffixe du serveur avec l'uri $1
|
||||||
|
retourner 1 si la valeur n'a pas pu être obtenue
|
||||||
|
}}}
|
||||||
|
!! {{{reldn}}}
|
||||||
|
!! {{{absdn}}}
|
||||||
|
{{{
|
||||||
|
obtenir le dn absolu correspondant au dn $1, le dn de base étant
|
||||||
|
$2(=$SUFFIX)
|
||||||
|
}}}
|
||||||
|
!! {{{subof}}}
|
||||||
|
{{{
|
||||||
|
tester si le dn absolu $1 est $2 ou un enfant de $2
|
||||||
|
}}}
|
||||||
|
!! {{{rabsdn}}}
|
||||||
|
{{{
|
||||||
|
comme absdn, mais tient compte de la valeur de $3(=$SEARCHBASE)
|
||||||
|
Si le dn commence par "~/", le dn est relatif à $2(=$SUFFIX)
|
||||||
|
Si le dn commence par "/", le dn est absolu
|
||||||
|
Sinon, le dn est relatif à $3
|
||||||
|
}}}
|
||||||
|
!! {{{pdn}}}
|
||||||
|
{{{
|
||||||
|
corriger pour *affichage* un dn *absolu*. pour la racine "", afficher
|
||||||
|
'/'. pour $2(=$SUFFIX), afficher '~'. sinon, afficher le dn relativement à
|
||||||
|
$2
|
||||||
|
}}}
|
||||||
|
!! {{{filter_slapdconf}}}
|
||||||
|
{{{
|
||||||
|
Traiter un fichier de configuration slapd.conf en fusionnant les lignes
|
||||||
|
qui sont découpées. Ceci permet de faire des traitements sur le contenu.
|
||||||
|
Ce filtre s'utilisera normalement avec filter_conf, e.g.:
|
||||||
|
<slapd.conf filter_slapdconf | filter_conf >result.conf
|
||||||
|
}}}
|
|
@ -0,0 +1,60 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 02/06/2012 09:54
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/ldif
|
||||||
|
|
||||||
|
!! {{{def_match_attr}}}
|
||||||
|
!! {{{def_match_value}}}
|
||||||
|
!! {{{uncut_lines}}}
|
||||||
|
{{{
|
||||||
|
reformer les lignes qui sont coupées
|
||||||
|
}}}
|
||||||
|
!! {{{cut_lines}}}
|
||||||
|
{{{
|
||||||
|
couper les lignes trop longues
|
||||||
|
}}}
|
||||||
|
!! {{{ensure_complete_objects}}}
|
||||||
|
{{{
|
||||||
|
S'assurer que le ldif ne contient que des objets complets (éliminant ainsi
|
||||||
|
les groupes ayant seulement dn:)
|
||||||
|
}}}
|
||||||
|
!! {{{delete_marked_objects}}}
|
||||||
|
{{{
|
||||||
|
Supprimer les objets marqués avec --DELETE--:
|
||||||
|
}}}
|
||||||
|
!! {{{dump_ldif}}}
|
||||||
|
!! {{{tl_addattr}}}
|
||||||
|
!! {{{tl_modifyattr}}}
|
||||||
|
!! {{{tl_deleteattr}}}
|
||||||
|
!! {{{tl_deleteentry}}}
|
||||||
|
!! {{{tl_keepattr}}}
|
||||||
|
!! {{{tl_keepval}}}
|
||||||
|
!! {{{tl_excludeattr}}}
|
||||||
|
!! {{{tl_excludeval}}}
|
||||||
|
!! {{{tl_keepvalentry}}}
|
||||||
|
!! {{{tl_excludevalentry}}}
|
||||||
|
!! {{{tl_replval}}}
|
||||||
|
!! {{{tl_addval}}}
|
||||||
|
!! {{{tl_decode}}}
|
||||||
|
!! {{{tl_encode}}}
|
||||||
|
!! {{{tl_format}}}
|
||||||
|
!! {{{dump_headers}}}
|
||||||
|
!! {{{get_transform_cmd}}}
|
||||||
|
{{{
|
||||||
|
Créer une liste de commandes bash à évaluer en fonction des arguments: une
|
||||||
|
suite de commandes séparées par //
|
||||||
|
Les variables suivantes peuvent être définies en entrée:
|
||||||
|
_T_inputfile:
|
||||||
|
Si cette variable est non vide, lire à partir du fichier $_T_inputfile
|
||||||
|
au lieu de stdin
|
||||||
|
_T_uncut_before:
|
||||||
|
faut-il fusionner automatiquement les lignes *avant* de lancer les
|
||||||
|
commandes.
|
||||||
|
_T_cut_after:
|
||||||
|
faut-il découper automatiquement les lignes *après* avoir lancé les
|
||||||
|
commandes.
|
||||||
|
}}}
|
||||||
|
!! {{{transform}}}
|
|
@ -0,0 +1,50 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/legacy
|
||||||
|
|
||||||
|
!! {{{file_get_vars}}}
|
||||||
|
{{{
|
||||||
|
lire les variables dans un fichier
|
||||||
|
}}}
|
||||||
|
!! {{{file_set_vars}}}
|
||||||
|
{{{
|
||||||
|
écrire les variables dans un fichier. Le fichier *doit exister*
|
||||||
|
}}}
|
||||||
|
!! {{{write_all_remaining_vars}}}
|
||||||
|
!! {{{file_get_properties}}}
|
||||||
|
{{{
|
||||||
|
lire les propriétés d'un fichier de propriété java ou xml
|
||||||
|
}}}
|
||||||
|
!! {{{file_set_properties}}}
|
||||||
|
{{{
|
||||||
|
écrire les propriétés d'un fichier de propriété java ou xml
|
||||||
|
}}}
|
||||||
|
!! {{{file_get_java_properties}}}
|
||||||
|
{{{
|
||||||
|
lire les propriétés d'un fichier de propriétés java. note: les noms de
|
||||||
|
propriété java peuvent contenir le caractère "." mais pas les noms de
|
||||||
|
variable bash. La conversion est faite automatiquement. Par exemple::
|
||||||
|
file_get_properties build.properties path.to.package "default value"
|
||||||
|
charge la valeur de la propriété dans la variable path_to_package
|
||||||
|
}}}
|
||||||
|
!! {{{file_set_java_properties}}}
|
||||||
|
{{{
|
||||||
|
écrire des propriétés dans un fichier de propriétés java.
|
||||||
|
}}}
|
||||||
|
!! {{{write_all_remaining_vars}}}
|
||||||
|
!! {{{file_get_xml_properties}}}
|
||||||
|
{{{
|
||||||
|
lire les propriétés d'un fichier de propriétés xml. Limitation: les
|
||||||
|
propriétés ne doivent pas être continuées sur plusieurs lignes. Les
|
||||||
|
propriétés doivent être écrites sous la forme::
|
||||||
|
<propname>propvalue</propname>
|
||||||
|
}}}
|
||||||
|
!! {{{file_set_xml_properties}}}
|
||||||
|
{{{
|
||||||
|
écrire des propriétés dans un fichier de propriétés java.
|
||||||
|
}}}
|
||||||
|
!! {{{write_all_remaining_vars}}}
|
|
@ -0,0 +1,24 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 02/06/2012 09:54
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/macosx
|
||||||
|
|
||||||
|
!! {{{local_shellfix}}}
|
||||||
|
{{{
|
||||||
|
Modifier le compte local $1 pour qu'il utilise bash au lieu de sh
|
||||||
|
}}}
|
||||||
|
!! {{{local_usercheck}}}
|
||||||
|
{{{
|
||||||
|
Vérifier si le user local $1 existe
|
||||||
|
}}}
|
||||||
|
!! {{{local_useradd}}}
|
||||||
|
{{{
|
||||||
|
Créer le user local $1
|
||||||
|
USAGE: local_useradd username [gecos [passwd]]
|
||||||
|
OPTIONS
|
||||||
|
-s Créer l'utilisateur avec les droits d'administrateur
|
||||||
|
-m Créer le home directory
|
||||||
|
}}}
|
|
@ -0,0 +1,9 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/mkcrypt
|
||||||
|
|
||||||
|
!! {{{mkcrypt}}}
|
|
@ -0,0 +1,10 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/modeline
|
||||||
|
|
||||||
|
!! {{{printml}}}
|
||||||
|
!! {{{addml}}}
|
|
@ -0,0 +1,18 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/network-manager-service
|
||||||
|
|
||||||
|
!! {{{SERVICE_OVERRIDE_network_manager_stopx}}}
|
||||||
|
{{{
|
||||||
|
désactiver network-manager avant de l'arrêter, ce qui permet de s'assurer
|
||||||
|
que chaque chaque connexion est arrêtée proprement
|
||||||
|
}}}
|
||||||
|
!! {{{SERVICE_OVERRIDE_network_manager_startx}}}
|
||||||
|
{{{
|
||||||
|
cette fonction est le pendant de stopx: penser à relancer network-manager
|
||||||
|
après avoir démarré le service
|
||||||
|
}}}
|
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/pkg
|
||||||
|
|
||||||
|
!! {{{pkg_check}}}
|
||||||
|
{{{
|
||||||
|
Vérifier que les packages sont installés sur le système
|
||||||
|
Retourner 123 si le système n'est pas supporté, et donc qu'aucune commande
|
||||||
|
d'installation de package n'est disponible.
|
||||||
|
}}}
|
||||||
|
!! {{{pkg_install}}}
|
||||||
|
{{{
|
||||||
|
Installer les packages sans confirmation
|
||||||
|
Retourner 123 si le système n'est pas supporté, et donc qu'aucune commande
|
||||||
|
d'installation de package n'est disponible.
|
||||||
|
}}}
|
|
@ -0,0 +1,13 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/prefixes
|
||||||
|
|
||||||
|
!! {{{get_USER_prefix}}}
|
||||||
|
!! {{{get_HOME_prefix}}}
|
||||||
|
!! {{{expand_prefix}}}
|
||||||
|
!! {{{list_prefixes}}}
|
||||||
|
!! {{{dump_prefixes}}}
|
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/pretty
|
||||||
|
|
||||||
|
!! {{{get_color}}}
|
||||||
|
!! {{{set_verbosity}}}
|
||||||
|
!! {{{set_interaction}}}
|
||||||
|
!! {{{show_error}}}
|
||||||
|
!! {{{show_warn}}}
|
||||||
|
!! {{{show_info}}}
|
||||||
|
!! {{{show_debug}}}
|
||||||
|
!! {{{check_verbosity}}}
|
||||||
|
!! {{{get_verbosity_option}}}
|
||||||
|
!! {{{check_interaction}}}
|
||||||
|
!! {{{get_interaction_option}}}
|
|
@ -0,0 +1,213 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 02/06/2012 09:54
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/runs
|
||||||
|
|
||||||
|
!! {{{runs_initdir}}}
|
||||||
|
{{{
|
||||||
|
Initialiser le répertoire d'hôte. $1 est un nom d'hôte pleinement
|
||||||
|
qualifié, et les fichiers sont créés dans le premier répertoire de
|
||||||
|
RUNSHOSTSDIRS qui convient: si un fichier .udir existe avec un tableau
|
||||||
|
runs_domains qui contient le domaine de l'hôte spécifié, alors c'est ce
|
||||||
|
répertoire qui est sélectionné. Sinon, on prend le premier répertoire de
|
||||||
|
RUNSHOSTSDIRS.
|
||||||
|
$2 spécifie si le fichier doit être créé avec de l'aide (yes) ou avec le
|
||||||
|
script minimum (no)
|
||||||
|
$3 est le contenu à placer dans le fichier sysinfos.conf, s'il n'a pas
|
||||||
|
déjà été provisionné.
|
||||||
|
Il faut lancer __runs_setpath avant d'utiliser cette fonction et
|
||||||
|
RUNSHOSTDIRS ne doit pas être vide
|
||||||
|
}}}
|
||||||
|
!! {{{runs_create_rscript}}}
|
||||||
|
{{{
|
||||||
|
Créer un modèle de script. Si $2 est spécifié, c'est un nom d'hôte
|
||||||
|
pleinement qualifié. Le répertoire d'hôte correspondant *doit* exister.
|
||||||
|
$3 spécifie si le fichier doit être créé avec de l'aide (yes) ou avec le
|
||||||
|
script minimum (no)
|
||||||
|
Si $2!="", il faut lancer __runs_setpath avant d'utiliser cette fonction
|
||||||
|
et RUNSHOSTDIRS ne doit pas être vide
|
||||||
|
Le chemin du nouveau script est ajouté au tableau new_rscripts
|
||||||
|
}}}
|
||||||
|
!! {{{runs_unsupported_system}}}
|
||||||
|
{{{
|
||||||
|
Afficher un message d'erreur indiquant que le système actuel n'est pas
|
||||||
|
supporté, et quitter le script
|
||||||
|
}}}
|
||||||
|
!! {{{runs_require_sysinfos}}}
|
||||||
|
{{{
|
||||||
|
Vérifier le système actuel avec check_sysinfos(), et afficher un message
|
||||||
|
d'erreur avec runs_unsupported_system() s'il ne correspond pas à la
|
||||||
|
requête
|
||||||
|
}}}
|
||||||
|
!! {{{runs_find_host}}}
|
||||||
|
!! {{{runs_add_domain}}}
|
||||||
|
{{{
|
||||||
|
Si $1 est nom d'hôte pleinement qualifié, retourner cette valeur
|
||||||
|
Sinon, lui rajouter le domaine RUNSDOMAIN
|
||||||
|
}}}
|
||||||
|
!! {{{runs_find_hostfile}}}
|
||||||
|
{{{
|
||||||
|
Trouver et afficher le fichier d'hôte $1 dans les répertoires du tableau
|
||||||
|
$3(=RUNSHOSTSDIRS), pour l'hôte $2(=$RUNSHOST). Retourner 0 en cas de
|
||||||
|
succès, 1 en cas d'échec.
|
||||||
|
Si host=$2 est une valeur non vide, la recherche est effectuée dans
|
||||||
|
{$RUNSHOSTSDIRS}/$host et {$RUNSHOSTSDIRS}/$domain/$hostname. Sinon,
|
||||||
|
retourner 1, car il faut spécifier un nom d'hôte.
|
||||||
|
}}}
|
||||||
|
!! {{{runs_find_datafile}}}
|
||||||
|
{{{
|
||||||
|
Trouver et afficher le fichier de données $1 dans le répertoire $3 s'il
|
||||||
|
est non vide puis dans les répertoires des tableaux $4(=RUNSSCRIPTSDIRS),
|
||||||
|
$5(=RUNSMODULESDIRS) et $6(=RUNSHOSTSDIRS), pour l'hôte
|
||||||
|
$2(=$RUNSHOST). Retourner 0 en cas de succès, 1 en cas d'échec.
|
||||||
|
- D'abord, si $1 *n'est pas* de la forme "./path" ou "../path", chercher
|
||||||
|
dans $3.
|
||||||
|
- Puis si l'hôte est spécifié, chercher dans {$RUNSHOSTSDIRS}/$host et
|
||||||
|
{$RUNSHOSTSDIRS}/$domain/$hostname.
|
||||||
|
- Puis chercher dans {$RUNSSCRIPTSDIRS} puis {$RUNSMODULESDIRS}.
|
||||||
|
- Puis, si $1 est de la forme "./path" ou "../path", chercher dans $3.
|
||||||
|
- Sinon, retourner 1
|
||||||
|
}}}
|
||||||
|
!! {{{runs_initvars}}}
|
||||||
|
{{{
|
||||||
|
Initialiser les variables RUNSDIR, RUNSSCRIPT, RUNSDIRPATH,
|
||||||
|
RUNSSCRIPTPATH, RUNSSCRIPTDIR et RUNSSCRIPTNAME pour le script $1.
|
||||||
|
Les valeurs sont initialisées comme suit:
|
||||||
|
RUNSSCRIPT="$(abspath "$1")"
|
||||||
|
RUNSDIR="$2" (le répertoire de $RUNS*PATH dans lequel a été trouvé le
|
||||||
|
script)
|
||||||
|
Si $3!="", RUNSDIRPATH="$3" et RUNSSCRIPTPATH="$4"
|
||||||
|
Sinon, RUNSDIRPATH="$RUNSSCRIPTDIR" et RUNSSCRIPTPATH="$RUNSSCRIPTNAME"
|
||||||
|
}}}
|
||||||
|
!! {{{runs_find_scriptfile}}}
|
||||||
|
{{{
|
||||||
|
Trouver sans l'afficher le script $1 dans les répertoires des tableaux
|
||||||
|
$3(=RUNSSCRIPTSDIRS), $4(=RUNSMODULESDIRS) et $5(=RUNSHOSTSDIRS), en
|
||||||
|
considérant que le script sera lancé sur l'hôte $2(=$RUNSHOST), et
|
||||||
|
initialiser les variables RUNSDIR, RUNSSCRIPT, RUNSSCRIPTDIR,
|
||||||
|
RUNSSCRIPTNAME, RUNSDIRPATH et RUNSSCRIPTPATH. Retourner 0 en cas de
|
||||||
|
succès, 1 en cas d'échec.
|
||||||
|
RUNSDIR est le répertoire dans lequel a été trouvé le script (parmi les
|
||||||
|
valeurs fournies dans les tableaux RUNSSCRIPTSDIRS, RUNSMODULESDIRS,
|
||||||
|
RUNSHOSTSDIRS), RUNSDIRPATH est le répertoire à partir duquel est exprimé
|
||||||
|
le chemin du script (i.e RUNSDIRPATH + RUNSSCRIPTPATH == RUNSSCRIPT),
|
||||||
|
RUNSSCRIPT contient le chemin absolu vers le script, RUNSSCRIPTPATH
|
||||||
|
contient le chemin du script dans RUNSDIRPATH, RUNSSCRIPTDIR le répertoire
|
||||||
|
du script, et RUNSSCRIPTNAME le nom du script.
|
||||||
|
D'abord, si l'hôte est spécifié, chercher dans {$RUNSHOSTSDIRS}/$host et
|
||||||
|
{$RUNSHOSTSDIRS}/$domain/$hostname. Puis chercher dans {$RUNSSCRIPTSDIRS}
|
||||||
|
}}}
|
||||||
|
!! {{{runs_find_scriptfile_reverse}}}
|
||||||
|
{{{
|
||||||
|
Soit le fichier de script $1, exprimée de façon absolue, trouver le
|
||||||
|
fichier parmi les tableaux $3(=RUNSSCRIPTSDIRS), $4(=RUNSMODULESDIRS)
|
||||||
|
et $5(=RUNSHOSTSDIRS), en considérant que le script sera lancé sur l'hôte
|
||||||
|
$2(=$RUNSHOST), puis initialiser les variables RUNSDIR, RUNSSCRIPT,
|
||||||
|
RUNSSCRIPTDIR, RUNSSCRIPTNAME, RUNSDIRPATH et RUNSSCRIPTPATH. Retourner 0
|
||||||
|
en cas de succès, 1 en cas d'échec.
|
||||||
|
}}}
|
||||||
|
!! {{{runs_rscript}}}
|
||||||
|
{{{
|
||||||
|
Lancer le fichier $1 comme un script avec les arguments $2..$*. Retourner
|
||||||
|
la valeur de retour du script.
|
||||||
|
}}}
|
||||||
|
!! {{{runs_recipe}}}
|
||||||
|
{{{
|
||||||
|
Lancer les scripts de la recette contenue dans le fichier $1. Arrêter au
|
||||||
|
premier script qui est en erreur
|
||||||
|
}}}
|
||||||
|
!! {{{runs_rscriptpath}}}
|
||||||
|
{{{
|
||||||
|
Lancer le script $1 avec les arguments $2..$*. Le script est cherché dans
|
||||||
|
les répertoires de RUNSSCRIPTSPATH. Retourner 123 si le script n'est pas
|
||||||
|
trouvé, sinon retourner la valeur de retour du script.
|
||||||
|
}}}
|
||||||
|
!! {{{runs_recipepath}}}
|
||||||
|
{{{
|
||||||
|
Lancer la recette $1. Le fichier de recette est cherché dans les
|
||||||
|
répertoires de RUNSSCRIPTSPATH. Retourner 123 si le fichier de recette n'a
|
||||||
|
pas été trouvé, sinon retourner la valeur de retour de runs_recipe()
|
||||||
|
}}}
|
||||||
|
!! {{{runs_init}}}
|
||||||
|
!! {{{runs_initdomains}}}
|
||||||
|
{{{
|
||||||
|
Si ce n'est pas déjà le cas, initialiser RUNSDOMAINS en fonction de
|
||||||
|
/etc/resolv.conf
|
||||||
|
}}}
|
||||||
|
!! {{{runs_inithost}}}
|
||||||
|
!! {{{runs_initsysinfos}}}
|
||||||
|
!! {{{runs_initworkdir}}}
|
||||||
|
!! {{{runs_after_export}}}
|
||||||
|
{{{
|
||||||
|
après l'export, initialiser varsfile avec les valeurs qu'il faut garder
|
||||||
|
entre le déploiement local et le déploiement distant.
|
||||||
|
}}}
|
||||||
|
!! {{{runs_check_runsscript}}}
|
||||||
|
!! {{{runs_var}}}
|
||||||
|
{{{
|
||||||
|
Initialiser les variables selon les directives données en ligne de
|
||||||
|
commande.
|
||||||
|
Les arguments peuvent être une suite de définitions de la forme
|
||||||
|
'scalar=value', 'scalar!=name', 'array+=value', 'array-=value' ou
|
||||||
|
'array@=name'.
|
||||||
|
Sinon, le *dernier* argument peut-être de l'une des formes suivantes:
|
||||||
|
'array value0 [value1...]' pour initialiser un tableau,
|
||||||
|
'array+ value0 [value1...]' pour ajouter des valeurs à un tableau,
|
||||||
|
'array- value0 [value1...]' pour enlever des valeurs à un tableau.
|
||||||
|
Les formes 'scalar!=value' et 'array@=value' sont des indirections et
|
||||||
|
permettent d'initialiser la variable avec la valeur d'une autre
|
||||||
|
variable. L'avantage est que la résolution de la valeur est faite
|
||||||
|
uniquement lors de l'appel de cette fonction, ce qui est utile avec des
|
||||||
|
fonction comme 'after -r'
|
||||||
|
}}}
|
||||||
|
!! {{{runs_conf}}}
|
||||||
|
{{{
|
||||||
|
Activer les flags $*
|
||||||
|
}}}
|
||||||
|
!! {{{runs_set_lang}}}
|
||||||
|
{{{
|
||||||
|
Charger la valeur de LANG depuis l'environnement. La variable LANG est
|
||||||
|
initialisée
|
||||||
|
}}}
|
||||||
|
!! {{{runs_set_proxy}}}
|
||||||
|
{{{
|
||||||
|
Charger la valeur du proxy depuis l'environnement. Les variables
|
||||||
|
http_proxy, ftp_proxy et no_proxy sont initialisées
|
||||||
|
}}}
|
||||||
|
!! {{{runs_check_confs}}}
|
||||||
|
{{{
|
||||||
|
Vérifier l'état courant par rapport aux flags
|
||||||
|
}}}
|
||||||
|
!! {{{runs_after}}}
|
||||||
|
{{{
|
||||||
|
Vérifier que ce script est lancé après le scriptpath $1, par rapport à
|
||||||
|
RUNSSTORY
|
||||||
|
}}}
|
||||||
|
!! {{{runs_clvars}}}
|
||||||
|
{{{
|
||||||
|
Traiter les spécifications de variables données en ligne de commande ou
|
||||||
|
dans un fichier de recettes
|
||||||
|
}}}
|
||||||
|
!! {{{runs_indvars}}}
|
||||||
|
{{{
|
||||||
|
Résoudre les valeurs effectives des variables qui sont des indirections
|
||||||
|
}}}
|
||||||
|
!! {{{runs_clvars_cmd}}}
|
||||||
|
{{{
|
||||||
|
écrire la ligne de recette correspondant au script $1 et aux variables
|
||||||
|
$2..$*
|
||||||
|
}}}
|
||||||
|
!! {{{runs_loadconfs}}}
|
||||||
|
!! {{{runs_clearvars}}}
|
||||||
|
!! {{{runs_action_desc}}}
|
||||||
|
!! {{{runs_action_dump}}}
|
||||||
|
!! {{{runs_action_run}}}
|
||||||
|
!! {{{runs_action_export}}}
|
||||||
|
!! {{{shouldrun}}}
|
||||||
|
!! {{{checkdone}}}
|
||||||
|
!! {{{requiredone}}}
|
||||||
|
!! {{{setdone}}}
|
||||||
|
!! {{{resetdone}}}
|
|
@ -0,0 +1,33 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/service
|
||||||
|
|
||||||
|
!! {{{service}}}
|
||||||
|
!! {{{service_start}}}
|
||||||
|
{{{
|
||||||
|
démarrer le service $1 de façon inconditionnelle
|
||||||
|
}}}
|
||||||
|
!! {{{service_startm}}}
|
||||||
|
{{{
|
||||||
|
démarrer le service $1 s'il n'est pas déjà démarré
|
||||||
|
}}}
|
||||||
|
!! {{{service_stop}}}
|
||||||
|
{{{
|
||||||
|
arrêter le service $1 de façon inconditionnelle
|
||||||
|
}}}
|
||||||
|
!! {{{service_stopm}}}
|
||||||
|
{{{
|
||||||
|
arrêter le service $1 s'il n'est pas déjà arrêté
|
||||||
|
}}}
|
||||||
|
!! {{{service_reload}}}
|
||||||
|
{{{
|
||||||
|
recharger le service $1
|
||||||
|
}}}
|
||||||
|
!! {{{service_status}}}
|
||||||
|
{{{
|
||||||
|
tester/afficher le status du service $1
|
||||||
|
}}}
|
|
@ -0,0 +1,36 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/sysinfos
|
||||||
|
|
||||||
|
!! {{{ensure_sysinfos}}}
|
||||||
|
{{{
|
||||||
|
Essayer de déterminer les valeurs des variables $1(=SYSNAME), $2(=SYSDIST)
|
||||||
|
et $3(=SYSVER) en fonction des valeurs des autres. Cette fonction est à
|
||||||
|
utiliser quand on récupère cette information de la part de l'utilisateur,
|
||||||
|
et qu'il faut compléter
|
||||||
|
}}}
|
||||||
|
!! {{{check_sysinfos}}}
|
||||||
|
{{{
|
||||||
|
Tester si le système courant ($MYSYSNAME, $MYSYSDIST, $MYSYSVER, $MYBITS)
|
||||||
|
correspond à au moins un des arguments.
|
||||||
|
Les options -s, -d, -v, -b permettent respectivement de vérifier le
|
||||||
|
système, la distribution, la version et le nombre de bits. Il est possible
|
||||||
|
de spécifier plusieurs tests à effectuer, e.g.:
|
||||||
|
check_sysinfos -d debian ubuntu -b 64
|
||||||
|
pour tester si l'on est sur une distribution debian ou ubuntu *et* sur un
|
||||||
|
système 64 bits
|
||||||
|
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
|
||||||
|
spécifiée. Attention, à cause d'une limitation de l'implémentation, il
|
||||||
|
faut alors impérativement filtrer aussi sur la distribution, e.g:
|
||||||
|
check_sysinfo -d debian -v lenny+
|
||||||
|
pour tester si on est en lenny ou en squeeze.
|
||||||
|
De même, l'option -d accepte aussi de suffixer la valeur avec + ou -, mais
|
||||||
|
cela n'a actuellement de sens qu'avec les version de MacOS X. Il faut
|
||||||
|
aussi impérativement filtrer sur le système, e.g:
|
||||||
|
check_sysinfos -s macosx -d 10.5+
|
||||||
|
}}}
|
|
@ -0,0 +1,115 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/tiddlywiki
|
||||||
|
|
||||||
|
!! {{{twget_version}}}
|
||||||
|
{{{
|
||||||
|
lire le numéro de version dans le fichier $1
|
||||||
|
}}}
|
||||||
|
!! {{{twdump_header}}}
|
||||||
|
{{{
|
||||||
|
lire et afficher le contenu avant-storeArea du tiddlywiki $1
|
||||||
|
}}}
|
||||||
|
!! {{{twdump_footer}}}
|
||||||
|
{{{
|
||||||
|
lire et afficher le contenu après-storeArea du tiddlywiki $1
|
||||||
|
}}}
|
||||||
|
!! {{{twdump_storeArea}}}
|
||||||
|
{{{
|
||||||
|
lire et afficher le storeArea dans le tiddlywiki $1
|
||||||
|
}}}
|
||||||
|
!! {{{twreplace_storeArea}}}
|
||||||
|
{{{
|
||||||
|
dans le tiddlywiki $1, remplacer le storeArea par le fichier $2 (par défaut, lu sur stdin)
|
||||||
|
}}}
|
||||||
|
!! {{{twupgrade}}}
|
||||||
|
{{{
|
||||||
|
mettre à jour le tiddlywiki $1 sur la base du tiddlywiki plus récent $2
|
||||||
|
}}}
|
||||||
|
!! {{{twdate_curtwp}}}
|
||||||
|
{{{
|
||||||
|
obtenir la date courante dans le format "dd/mm/YYYY HH:MM" exprimée dans
|
||||||
|
l'heure locale
|
||||||
|
$1 est éventuellement la date exprimée en nombre de secondes depuis
|
||||||
|
l'epoch, exprimée dans l'heure locale
|
||||||
|
}}}
|
||||||
|
!! {{{twdate_tid2twp}}}
|
||||||
|
{{{
|
||||||
|
Transformer $1, une date de la forme "YYYYmmddHHMM" exprimée dans le
|
||||||
|
timezone UTC en une chaine "dd/mm/YYYY HH:MM" exprimée dans l'heure locale
|
||||||
|
Si $1 n'est pas dans le bon format, ne rien afficher
|
||||||
|
}}}
|
||||||
|
!! {{{twdate_curtid}}}
|
||||||
|
{{{
|
||||||
|
obtenir la date courante dans le format "YYYYmmddHHMM" exprimée dans le
|
||||||
|
timezone UTC
|
||||||
|
$1 est éventuellement la date exprimée en nombre de secondes depuis
|
||||||
|
l'epoch, exprimée dans l'heure locale
|
||||||
|
}}}
|
||||||
|
!! {{{twdate_twp2tid}}}
|
||||||
|
{{{
|
||||||
|
Transformer $1, une date de la forme "dd/mm/YYYY HH:MM" exprimée en heure
|
||||||
|
locale en une chaine "YYYYmmddHHMM" exprimée dans le timezone UTC
|
||||||
|
Si $1 n'est pas dans le bon format, ne rien afficher
|
||||||
|
}}}
|
||||||
|
!! {{{twdump_tiddlers}}}
|
||||||
|
{{{
|
||||||
|
dumper les tiddlers du fichier $1 généré avec twdump_storeArea() sous
|
||||||
|
forme d'une liste d'appel de fonction '__tiddler_data title creator
|
||||||
|
modifier created modified tags changecount content'
|
||||||
|
Les arguments de la fonction sont les valeurs brutes du tiddler, qui ont
|
||||||
|
simplement été corrigées avec unquote_html()
|
||||||
|
}}}
|
||||||
|
!! {{{dump_tiddler}}}
|
||||||
|
!! {{{twdump_twpage}}}
|
||||||
|
{{{
|
||||||
|
Dumper le contenu de la twpage $1 sous forme d'un appel à une function
|
||||||
|
'__twpage_data title creator modifier created modified tags changecount
|
||||||
|
content'
|
||||||
|
Les arguments de la fonction sont les valeurs brutes de la twpage, sauf
|
||||||
|
que le champ modified contient toujours la date de dernière modification
|
||||||
|
du fichier.
|
||||||
|
}}}
|
||||||
|
!! {{{twwrite_tiddler}}}
|
||||||
|
{{{
|
||||||
|
Ecrire sur STDOUT le tiddler correspondant aux paramètres sont spécifiés
|
||||||
|
sur la ligne de commande. Les arguments sont les valeurs brutes prises de
|
||||||
|
la twpage, telles qu'elles sont générées par twdump_twpage()
|
||||||
|
}}}
|
||||||
|
!! {{{twcheck_twpage_modified}}}
|
||||||
|
{{{
|
||||||
|
Vérifier si la twpage $1 peut être écrasée par un tiddler dont la date de
|
||||||
|
modification est $2, de format "YYYYmmddHHMM" exprimée dans le timezone
|
||||||
|
UTC
|
||||||
|
C'est le cas si le fichier $1 n'existe pas, ou a une date de modification
|
||||||
|
antérieure à $2
|
||||||
|
}}}
|
||||||
|
!! {{{twcheck_twpage_newtwpage}}}
|
||||||
|
{{{
|
||||||
|
Vérifier si la twpage $1 peut être écrasée par la twpage $2
|
||||||
|
C'est le cas si le fichier $1 n'existe pas, ou a une date de modification
|
||||||
|
antérieure à $2
|
||||||
|
}}}
|
||||||
|
!! {{{twwrite_twpage}}}
|
||||||
|
{{{
|
||||||
|
Ecrire dans le répertoire courant le fichier correspondant au tiddler dont
|
||||||
|
les paramètres sont spécifiés sur la ligne de commande. Les arguments sont
|
||||||
|
les valeurs brutes prises du tiddler, telles qu'elles sont générées par
|
||||||
|
twdump_tiddlers()
|
||||||
|
Retourner 0 si le fichier a été écrasé, 1 s'il n'a pas été écrasé parce
|
||||||
|
qu'il n'a pas été modifié, 2 s'il n'a pas été écrasé parce qu'il est plus
|
||||||
|
récent.
|
||||||
|
Si TW_VERBOSE=1, afficher un message informatif lors de l'export
|
||||||
|
}}}
|
||||||
|
!! {{{export_to_twpages}}}
|
||||||
|
{{{
|
||||||
|
Exporter tous les tiddlers du tiddlywiki $1 dans le répertoire $2
|
||||||
|
}}}
|
||||||
|
!! {{{import_from_twpages}}}
|
||||||
|
{{{
|
||||||
|
Remplacer les tiddlers du tiddlywiki $1 par les twpages du répertoire $2
|
||||||
|
}}}
|
|
@ -0,0 +1,61 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/udir
|
||||||
|
|
||||||
|
!! {{{udir_check}}}
|
||||||
|
{{{
|
||||||
|
Vérifier si le fichier $1 existe
|
||||||
|
Si $1 est un répertoire, prendre $1/.udir
|
||||||
|
}}}
|
||||||
|
!! {{{udir_create_maybe}}}
|
||||||
|
{{{
|
||||||
|
Si le fichier $1 n'existe pas, le créer comme un template .udir
|
||||||
|
Si $1 est un répertoire, prendre $1/.udir
|
||||||
|
}}}
|
||||||
|
!! {{{udir_dump}}}
|
||||||
|
{{{
|
||||||
|
Dumper toutes les variables définies pour le fichier $1
|
||||||
|
Si $1 est un répertoire, prendre $1/.udir
|
||||||
|
}}}
|
||||||
|
!! {{{udir_eval}}}
|
||||||
|
{{{
|
||||||
|
Evaluer la commande "$2..$*" dans le contexte des variables définies pour
|
||||||
|
le répertoire $1. La commande est évaluée dans un sous-shell pour ne pas
|
||||||
|
polluer l'espace de noms courant.
|
||||||
|
}}}
|
||||||
|
!! {{{udir_dump_all}}}
|
||||||
|
{{{
|
||||||
|
Dumper toutes les variables définies pour le répertoire $1 et *tous ses
|
||||||
|
parents* jusqu'à la racine
|
||||||
|
}}}
|
||||||
|
!! {{{udir_eval_all}}}
|
||||||
|
{{{
|
||||||
|
Evaluer la commande "$2..$*" dans le contexte des variables définies pour
|
||||||
|
le répertoire $1 et *tous ses parents* jusqu'à la racine
|
||||||
|
}}}
|
||||||
|
!! {{{udir_parse}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier $1, lire les noms des variables
|
||||||
|
Si $1 est un répertoire, prendre $1/.udir
|
||||||
|
Les noms des variables sont placés dans le tableau $2(=UDIR_VARS), et les noms
|
||||||
|
des tableaux sont placés dans le tableau $3(=UDIR_ARRAYS)
|
||||||
|
note: les regex qui sont entre "" au lieu de // le sont à cause d'un bug
|
||||||
|
de awk sous macosx
|
||||||
|
}}}
|
||||||
|
!! {{{udir_update}}}
|
||||||
|
{{{
|
||||||
|
Dans le fichier $1, mettre à jour les variables $2..*
|
||||||
|
Si $1 est un répertoire, prendre $1/.udir
|
||||||
|
Chaque argument de cette fonction est de la forme name[=value]
|
||||||
|
Si value n'est pas précisée, la variable obtient une valeur nulle
|
||||||
|
(i.e. var=)
|
||||||
|
Si la variable ne figure pas dans le fichier, elle est rajoutée à la fin
|
||||||
|
du fichier.
|
||||||
|
Cette fonction nécessite gawk.
|
||||||
|
}}}
|
||||||
|
!! {{{write_unseen}}}
|
||||||
|
!! {{{udir_edit}}}
|
|
@ -0,0 +1,8 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/uenv
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/uenv_update
|
||||||
|
|
||||||
|
!! {{{uenv_update_dir}}}
|
||||||
|
{{{
|
||||||
|
Mettre à jour l'ordre de chargement pour le répertoire $1 qui contient des
|
||||||
|
fichiers de profil pour le shell. L'ordre dans lequel le fichiers de
|
||||||
|
profil doivent être chargé est écrit dans le fichier $1/.source_in_order
|
||||||
|
Si $2 est spécifié, il s'agit d'un fichier temporaire utilisé pour les
|
||||||
|
calculs de l'ordre des chargements.
|
||||||
|
$3(=$1) est le répertoire de destination. Si $1 est un répertoire de
|
||||||
|
préparation temporaire, on peut spécifier grâce à $3 quel est le
|
||||||
|
répertoire final après préparation.
|
||||||
|
}}}
|
||||||
|
!! {{{uenv_set_destdirs}}}
|
||||||
|
!! {{{uenv_sourced_in}}}
|
||||||
|
{{{
|
||||||
|
vérifier que l'un des fichiers $2..$* est sourcé dans $1
|
||||||
|
}}}
|
||||||
|
!! {{{uenv_configure_profiles}}}
|
||||||
|
!! {{{uenv_install_profiles}}}
|
|
@ -0,0 +1,9 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/uinc
|
||||||
|
|
||||||
|
!! {{{uinc}}}
|
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/uinst
|
||||||
|
|
||||||
|
!! {{{uinst}}}
|
||||||
|
{{{
|
||||||
|
lancer uinst en déclarant les variables locales, de façon à ne pas polluer
|
||||||
|
l'environnement de l'appelant.
|
||||||
|
}}}
|
||||||
|
!! {{{uinst_nolocal}}}
|
||||||
|
{{{
|
||||||
|
Interface en mode ligne de commande pour uinst. Appeler cette fonction
|
||||||
|
avec les paramètres de la ligne de commande, e.g.:
|
||||||
|
uinst_clui "$@"
|
||||||
|
}}}
|
|
@ -0,0 +1,33 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/ulib
|
||||||
|
|
||||||
|
!! {{{eerror}}}
|
||||||
|
!! {{{die}}}
|
||||||
|
!! {{{uprovided}}}
|
||||||
|
{{{
|
||||||
|
Tester si la ulibrairie $1 a déjà été chargé par urequire
|
||||||
|
}}}
|
||||||
|
!! {{{uprovide}}}
|
||||||
|
{{{
|
||||||
|
Spécifier que la ulibrairie $1 a été sourcée, ou prétendre que c'est le
|
||||||
|
cas.
|
||||||
|
}}}
|
||||||
|
!! {{{urequire}}}
|
||||||
|
{{{
|
||||||
|
Sourcer un fichier recherché dans ULIBDIRS
|
||||||
|
Si le fichier est DEFAULTS, charger base, pretty, sysinfos et compat à la
|
||||||
|
place
|
||||||
|
}}}
|
||||||
|
!! {{{ulib_add}}}
|
||||||
|
{{{
|
||||||
|
Ajouter $1 au chemin de recherche de urequire
|
||||||
|
}}}
|
||||||
|
!! {{{ulib_sync}}}
|
||||||
|
{{{
|
||||||
|
Synchroniser les librairies ulib dans le répertoire $1
|
||||||
|
}}}
|
|
@ -0,0 +1,15 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/ulibsh
|
||||||
|
|
||||||
|
!! {{{eerror}}}
|
||||||
|
!! {{{die}}}
|
||||||
|
!! {{{uprovided}}}
|
||||||
|
!! {{{uprovide}}}
|
||||||
|
!! {{{urequire}}}
|
||||||
|
!! {{{ulib_add}}}
|
||||||
|
!! {{{ulib_sync}}}
|
|
@ -0,0 +1,89 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/vcs
|
||||||
|
|
||||||
|
!! {{{vcs_getvcs_help}}}
|
||||||
|
!! {{{vcs_getvcs}}}
|
||||||
|
!! {{{vcs_getroot_help}}}
|
||||||
|
!! {{{vcs_getroot}}}
|
||||||
|
!! {{{vcs_getrepos_help}}}
|
||||||
|
!! {{{vcs_getrepos}}}
|
||||||
|
!! {{{vcs_geturl_help}}}
|
||||||
|
!! {{{vcs_geturl}}}
|
||||||
|
!! {{{vcs_vcs_help}}}
|
||||||
|
!! {{{vcs_vcs}}}
|
||||||
|
!! {{{vcs_add_help}}}
|
||||||
|
!! {{{vcs_add}}}
|
||||||
|
{{{
|
||||||
|
le répertoire de référence est le répertoire du premier fichier ajouté
|
||||||
|
}}}
|
||||||
|
!! {{{vcs_remove_help}}}
|
||||||
|
!! {{{vcs_remove}}}
|
||||||
|
{{{
|
||||||
|
le répertoire de référence est le répertoire du premier fichier supprimé
|
||||||
|
}}}
|
||||||
|
!! {{{vcs_copy_help}}}
|
||||||
|
!! {{{vcs_copy}}}
|
||||||
|
{{{
|
||||||
|
le répertoire de référence est le répertoire de destination
|
||||||
|
}}}
|
||||||
|
!! {{{vcs_move_help}}}
|
||||||
|
!! {{{vcs_move}}}
|
||||||
|
{{{
|
||||||
|
le répertoire de référence est le répertoire de destination
|
||||||
|
}}}
|
||||||
|
!! {{{vcs_mkdir_help}}}
|
||||||
|
!! {{{vcs_mkdir}}}
|
||||||
|
{{{
|
||||||
|
le répertoire de référence est le répertoire du premier répertoire créé
|
||||||
|
}}}
|
||||||
|
!! {{{vcs_commit_help}}}
|
||||||
|
!! {{{vcs_commit}}}
|
||||||
|
!! {{{vcs_status_help}}}
|
||||||
|
!! {{{vcs_status}}}
|
||||||
|
!! {{{vcs_update_help}}}
|
||||||
|
!! {{{vcs_update}}}
|
||||||
|
!! {{{vcs_diff_help}}}
|
||||||
|
!! {{{vcs_diff}}}
|
||||||
|
!! {{{vcs_tag_help}}}
|
||||||
|
!! {{{vcs_tag}}}
|
||||||
|
!! {{{git_getrepos}}}
|
||||||
|
!! {{{git_geturl}}}
|
||||||
|
!! {{{git_add}}}
|
||||||
|
!! {{{git_remove}}}
|
||||||
|
!! {{{git_copy}}}
|
||||||
|
!! {{{git_move}}}
|
||||||
|
!! {{{git_mkdir}}}
|
||||||
|
!! {{{git_commit}}}
|
||||||
|
!! {{{git_status}}}
|
||||||
|
!! {{{git_update}}}
|
||||||
|
!! {{{git_diff}}}
|
||||||
|
!! {{{git_tag}}}
|
||||||
|
!! {{{svn_getrepos}}}
|
||||||
|
!! {{{svn_geturl}}}
|
||||||
|
!! {{{svn_add}}}
|
||||||
|
!! {{{svn_remove}}}
|
||||||
|
!! {{{svn_copy}}}
|
||||||
|
!! {{{svn_move}}}
|
||||||
|
!! {{{svn_mkdir}}}
|
||||||
|
!! {{{svn_commit}}}
|
||||||
|
!! {{{svn_status}}}
|
||||||
|
!! {{{svn_update}}}
|
||||||
|
!! {{{svn_diff}}}
|
||||||
|
!! {{{svn_tag}}}
|
||||||
|
!! {{{cvs_getrepos}}}
|
||||||
|
!! {{{cvs_geturl}}}
|
||||||
|
!! {{{cvs_add}}}
|
||||||
|
!! {{{cvs_remove}}}
|
||||||
|
!! {{{cvs_copy}}}
|
||||||
|
!! {{{cvs_move}}}
|
||||||
|
!! {{{cvs_mkdir}}}
|
||||||
|
!! {{{cvs_commit}}}
|
||||||
|
!! {{{cvs_status}}}
|
||||||
|
!! {{{cvs_update}}}
|
||||||
|
!! {{{cvs_diff}}}
|
||||||
|
!! {{{cvs_tag}}}
|
|
@ -0,0 +1,22 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 30/03/2012 04:43
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/virsh
|
||||||
|
|
||||||
|
!! {{{virsh_filter}}}
|
||||||
|
{{{
|
||||||
|
filtrer une sortie liste de virsh. En pratique, ne prendre que les lignes
|
||||||
|
non vides à partir de la ligne "----*"
|
||||||
|
}}}
|
||||||
|
!! {{{virsh_list}}}
|
||||||
|
!! {{{virsh_pool_list}}}
|
||||||
|
!! {{{guess_vm_type}}}
|
||||||
|
{{{
|
||||||
|
Afficher hn, kvm, vmware, virtualbox ou openvz suivant que l'on est
|
||||||
|
*probablement* respectivement sur une machine physique, une machine
|
||||||
|
virtuelle kvm, vmware, virtualbox, openvz
|
||||||
|
XXX pour le moment, seuls openvz, kvm et hn sont supportés
|
||||||
|
}}}
|
|
@ -0,0 +1,180 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/webobjects
|
||||||
|
|
||||||
|
!! {{{compute_webobjects_prefixes}}}
|
||||||
|
!! {{{recompute_webobjects_prefixes}}}
|
||||||
|
!! {{{get_NEXT_ROOT_prefix}}}
|
||||||
|
!! {{{get_WOROOT_prefix}}}
|
||||||
|
!! {{{get_LOCALROOT_prefix}}}
|
||||||
|
!! {{{get_SYSTEMFRAMEWORKS_prefix}}}
|
||||||
|
!! {{{get_WOEXTENSIONS_prefix}}}
|
||||||
|
!! {{{get_WOFRAMEWORKS_prefix}}}
|
||||||
|
!! {{{get_WOAPPLICATIONS_prefix}}}
|
||||||
|
!! {{{get_WOCONFIGURATION_prefix}}}
|
||||||
|
!! {{{get_WOAUTOSTART_prefix}}}
|
||||||
|
!! {{{get_WOLOGS_prefix}}}
|
||||||
|
!! {{{get_WOVERSION_prefix}}}
|
||||||
|
!! {{{is_wobundle}}}
|
||||||
|
{{{
|
||||||
|
Tester si $1 a un nom de bundle valide, c'est à dire avec l'extension .woa
|
||||||
|
ou .framework
|
||||||
|
}}}
|
||||||
|
!! {{{is_woappdir}}}
|
||||||
|
{{{
|
||||||
|
Tester si $1 est un répertoire d'application webobjects. Le test est
|
||||||
|
effectué sur le contenu du bundle, pas sur le nom (utiliser is_wobundle()
|
||||||
|
pour cela)
|
||||||
|
}}}
|
||||||
|
!! {{{is_wofwkdir}}}
|
||||||
|
{{{
|
||||||
|
Tester si $1 est un répertoire de framework webobjects. Le test est
|
||||||
|
effectué sur le contenu du bundle, pas sur le nom (utiliser is_wobundle()
|
||||||
|
pour cela)
|
||||||
|
}}}
|
||||||
|
!! {{{get_app_winclspth}}}
|
||||||
|
{{{
|
||||||
|
calculer la valeur de Contents/Windows/CLSSPATH.txt pour l'application $1
|
||||||
|
}}}
|
||||||
|
!! {{{get_infofile}}}
|
||||||
|
{{{
|
||||||
|
Obtenir le chemin vers le fichier Info.plist dans le répertoire de
|
||||||
|
resource du bundle $1
|
||||||
|
}}}
|
||||||
|
!! {{{read_infofile}}}
|
||||||
|
{{{
|
||||||
|
Lire la version et le numéro de release dans le fichier $1 (chemin vers
|
||||||
|
Info.plist) et les placer dans les variables $2(=version) et $3(=release)
|
||||||
|
Retourner 1 si un erreur s'est produite, par exemple si le fichier $1
|
||||||
|
n'existe pas ou n'est pas accessible en lecture
|
||||||
|
}}}
|
||||||
|
!! {{{write_infofile}}}
|
||||||
|
{{{
|
||||||
|
Ecrire $2 (la version) et $3 (le numéro de release) dans le fichier $1
|
||||||
|
(chemin vers Info.plist)
|
||||||
|
Retourner 1 si un erreur s'est produite, par exemple si le fichier $1
|
||||||
|
n'existe pas
|
||||||
|
}}}
|
||||||
|
!! {{{get_jawotoolsfile}}}
|
||||||
|
{{{
|
||||||
|
Obtenir le chemin vers le fichier jawotools.properties dans le bundle $1
|
||||||
|
}}}
|
||||||
|
!! {{{read_jawotoolsfile}}}
|
||||||
|
{{{
|
||||||
|
lire le fichier de propriété $1 et placer les valeurs dans les variables
|
||||||
|
$2(=version), $3(=releaseDate), $4(=description)
|
||||||
|
}}}
|
||||||
|
!! {{{save_jawotoolsfile}}}
|
||||||
|
{{{
|
||||||
|
écrire le fichier de propriété $1 avec les valeurs version ($2),
|
||||||
|
releaseDate ($3) et description ($4)
|
||||||
|
}}}
|
||||||
|
!! {{{get_versionfile}}}
|
||||||
|
{{{
|
||||||
|
Obtenir le chemin vers le fichier VERSION.txt dans le répertoire de
|
||||||
|
resource du bundle $1
|
||||||
|
}}}
|
||||||
|
!! {{{get_configfile}}}
|
||||||
|
{{{
|
||||||
|
obtenir le chemin vers le fichier de configuration du répertoire de
|
||||||
|
resource du bundle
|
||||||
|
$1=bundle ou resdir (appdir/Contents/Resources ou fwkdir/Resources)
|
||||||
|
}}}
|
||||||
|
!! {{{searchreplace_classpath}}}
|
||||||
|
{{{
|
||||||
|
Dans les fichiers classpath de l'application $1, remplacer $2 par $3. Si
|
||||||
|
$3 est vide, la ligne est supprimée
|
||||||
|
}}}
|
||||||
|
!! {{{dump_jars}}}
|
||||||
|
{{{
|
||||||
|
Afficher les jars des frameworks utilisés par l'application $1
|
||||||
|
}}}
|
||||||
|
!! {{{dump_frameworks}}}
|
||||||
|
{{{
|
||||||
|
Afficher les frameworks utilisés par l'application $1
|
||||||
|
}}}
|
||||||
|
!! {{{remove_framework}}}
|
||||||
|
{{{
|
||||||
|
supprimer le framework $2 (nom de base) des fichiers de classpath du
|
||||||
|
bundle d'application $1
|
||||||
|
}}}
|
||||||
|
!! {{{add_framework}}}
|
||||||
|
{{{
|
||||||
|
s'il n'y existe pas déjà, ajouter le framework $2 (nom de base ou chemin
|
||||||
|
absolu) aux fichiers de classpath du bundle d'application $1
|
||||||
|
}}}
|
||||||
|
!! {{{fix_jars_case}}}
|
||||||
|
{{{
|
||||||
|
Vérifier que la casse des jars de tous les frameworks utilisés par
|
||||||
|
l'application $1 est conforme au système de fichier
|
||||||
|
}}}
|
||||||
|
!! {{{verifix_bundle}}}
|
||||||
|
{{{
|
||||||
|
vérifier et corriger le bundle $1. Pour une application, on vérifie que le
|
||||||
|
script est exécutable. Pour un framework, on vérifie que le framework est
|
||||||
|
conforme au modèle des framework générés par WebObjects.
|
||||||
|
}}}
|
||||||
|
!! {{{compute_fapps}}}
|
||||||
|
{{{
|
||||||
|
Placer dans le tableau $1(=fappnames) la liste des noms de bundle
|
||||||
|
d'applications qui dépendent du framework $2
|
||||||
|
Cette opération est faite à partir des informations sur le système de
|
||||||
|
fichier. Elle ne peut donc concerner qu'une installation locale.
|
||||||
|
}}}
|
||||||
|
!! {{{woraurl}}}
|
||||||
|
{{{
|
||||||
|
Faire une requête avec la méthode $1 sur l'url $2 avec le payload $3 (par
|
||||||
|
exemple pour la méthode POST). la réponse est disponible dans le fichier
|
||||||
|
$WORAURL_DATA, $4(=http_code) contient le code de réponse.
|
||||||
|
Retourner 0 en cas de succès, ou une valeur différente de zéro si un
|
||||||
|
erreur se produit (typiquement, 3 pour une erreur du serveur, 1 pour une
|
||||||
|
réponse applicative, comme par exemple si l'application n'existe pas)
|
||||||
|
Les codes de réponse 2xx et 417 sont des succès
|
||||||
|
Les autres codes (à priori 4xx ou 5xx) sont des erreurs
|
||||||
|
note: le code 417 est utilisé par le moniteur pour répondre "Non", par
|
||||||
|
opposition à 200 utilisé pour répondre "OUI"
|
||||||
|
}}}
|
||||||
|
!! {{{wogeturl}}}
|
||||||
|
!! {{{splitins}}}
|
||||||
|
{{{
|
||||||
|
Analyser le nom $1, qui peut être de forme '', 'Name.woa',
|
||||||
|
'Name.framework', 'App' ou 'Instance-N' (où N est un nombre), et
|
||||||
|
initialiser les variables $2(=type) et $3(=name)
|
||||||
|
Si $1=="", type=all et name=""
|
||||||
|
Si $1==Name.woa, type=woa et name=Name.woa
|
||||||
|
Si $1==Name.framework, type=fwk et name=Name.framework
|
||||||
|
Si $1==App, type=app et name=App
|
||||||
|
si $1==App-N, type=ins et name=App-N
|
||||||
|
}}}
|
||||||
|
!! {{{create_wodirs_maybe}}}
|
||||||
|
!! {{{check_autostart}}}
|
||||||
|
{{{
|
||||||
|
vérifier la présence du fichier $WOAUTOSTART. Si ce n'est pas le cas, le
|
||||||
|
créer avec le contenu du tableau $1
|
||||||
|
}}}
|
||||||
|
!! {{{get_autostart_order}}}
|
||||||
|
{{{
|
||||||
|
Initialiser le tableau $1 avec la liste donnée dans le fichier
|
||||||
|
$WOAUTOSTART
|
||||||
|
}}}
|
||||||
|
!! {{{apply_autostart_order}}}
|
||||||
|
{{{
|
||||||
|
Réordonner les valeurs $3..* selon la liste donnée dans le tableau $2,
|
||||||
|
puis placer le résultat dans le tableau $1. $2 doit être construit avec
|
||||||
|
get_autostart_order(). Si $2 n'est pas spécifié, la liste est construite
|
||||||
|
localement.
|
||||||
|
Si le tableau contient des lignes de délai @N, replacer les délais après
|
||||||
|
les applications appropriées
|
||||||
|
}}}
|
||||||
|
!! {{{wotaskd_stop}}}
|
||||||
|
!! {{{wotaskd_start}}}
|
||||||
|
!! {{{javamonitor_stop}}}
|
||||||
|
!! {{{womonitor_stop}}}
|
||||||
|
!! {{{javamonitor_start}}}
|
||||||
|
!! {{{womonitor_start}}}
|
||||||
|
!! {{{woservices_stop}}}
|
||||||
|
!! {{{woservices_start}}}
|
|
@ -0,0 +1,12 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/woinst
|
||||||
|
|
||||||
|
!! {{{date2version}}}
|
||||||
|
!! {{{woconf}}}
|
||||||
|
!! {{{wotag}}}
|
||||||
|
!! {{{woinst}}}
|
|
@ -0,0 +1,219 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/wondermonitor
|
||||||
|
|
||||||
|
!! {{{wom__statistics}}}
|
||||||
|
{{{
|
||||||
|
Afficher les statistiques pour le serveur $1, avec éventuellement le mot
|
||||||
|
de passe $2
|
||||||
|
}}}
|
||||||
|
!! {{{wom__info}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et afficher des informations sur l'application $1 (par défaut, all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom__info_filter}}}
|
||||||
|
{{{
|
||||||
|
filtrer le résultat de wom__info en ne gardant que les tags
|
||||||
|
name, state, activeSessions, autoRecover, deaths, host, port
|
||||||
|
}}}
|
||||||
|
!! {{{wom_info}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $3, avec éventuellement le mot de passe
|
||||||
|
$4, et initialiser le tableau $1 avec une liste de valeurs quotés de la
|
||||||
|
forme:
|
||||||
|
"'name' 'state' 'activeSessions' 'autoRecover' 'deaths' 'host' 'port'"
|
||||||
|
concernant l'application $2 (par défaut, toutes les applications). Notez
|
||||||
|
qu'il y a une ligne par instance d'application
|
||||||
|
Ces valeurs peuvent être utilisées comme arguments d'une fonction. par
|
||||||
|
exemple:
|
||||||
|
wom_info appinfos "" host pw
|
||||||
|
for args in "${appinfos[@]}"; do
|
||||||
|
eval "userfunc $args"
|
||||||
|
done
|
||||||
|
}}}
|
||||||
|
!! {{{wom_getValidAndRunning}}}
|
||||||
|
{{{
|
||||||
|
Placer la liste des applications valides dans le tableau $1(=valid_apps)
|
||||||
|
et la liste des applications qui tournent dans le tableau
|
||||||
|
$2=(running_apps), en contactant le moniteur sur l'hôte $3, avec
|
||||||
|
éventuellement le mot de passe $4.
|
||||||
|
}}}
|
||||||
|
!! {{{show_appinfo}}}
|
||||||
|
{{{
|
||||||
|
Afficher des informations sur une application. Les arguments doivent être
|
||||||
|
le résultat de la fonction wom_info()
|
||||||
|
}}}
|
||||||
|
!! {{{wom_running}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et tester si l'application $1 (par défaut, all) tourne actuellement
|
||||||
|
}}}
|
||||||
|
!! {{{wom_start}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et démarrer l'application $1 (par défaut, all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom_stopped}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et tester si l'application $1 (par défaut, all) est actuellement arrêtée
|
||||||
|
}}}
|
||||||
|
!! {{{wom_stop}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et arrêter l'application $1 (par défaut, all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom_forceQuit}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et forcer l'arrêt de l'application $1 (par défaut, all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom_turnScheduledOn}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et activer le flag scheduled sur l'application $1 (par défaut, all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom_turnScheduledOff}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et désactiver le flag scheduled sur l'application $1 (par défaut, all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom_turnRefuseNewSessionOn}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et activer le flag refuseNewSession sur l'application $1 (par défaut,
|
||||||
|
all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom_turnRefuseNewSessionOff}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et désactiver le flag refuseNewSession sur l'application $1 (par
|
||||||
|
défaut, all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom_turnAutoRecoverOn}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et activer le flag autoRecover sur l'application $1 (par défaut, all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom_turnAutoRecoverOff}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et désactiver le flag autoRecover sur l'application $1 (par défaut,
|
||||||
|
all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom_bounce}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et redémarrer l'application $1 (par défaut, all) en mode bounce
|
||||||
|
}}}
|
||||||
|
!! {{{wom_clearDeaths}}}
|
||||||
|
{{{
|
||||||
|
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3, et effacer le compte des morts suspectes pour l'application $1 (par
|
||||||
|
défaut, all)
|
||||||
|
}}}
|
||||||
|
!! {{{wom__getApplications}}}
|
||||||
|
{{{
|
||||||
|
Obtenir des information sur la définition de l'application $1 (ou de
|
||||||
|
toutes les applications si $1=="") en contactant le moniteur sur l'hôte $2
|
||||||
|
avec éventuellement le mot de passe $3. Le résultat est un flux xml,
|
||||||
|
chaque application étant défini dans un tag <MApplications>. Si un erreur
|
||||||
|
se produit, l'erreur est dans un tag <Strings>
|
||||||
|
}}}
|
||||||
|
!! {{{wom__getApplications_filter}}}
|
||||||
|
{{{
|
||||||
|
filtrer le résultat de wom__getApplications en ne gardant que les tags
|
||||||
|
name, unixPath, macPath, winPath
|
||||||
|
}}}
|
||||||
|
!! {{{wom_getApplications}}}
|
||||||
|
{{{
|
||||||
|
Obtenir la liste des applications définies en contactant le moniteur sur
|
||||||
|
l'hôte $3 avec éventuellement le mot de passe $4, et initialiser le
|
||||||
|
tableau $1 avec une liste de valeurs quotées de la forme:
|
||||||
|
"'name' 'unixPath' 'macPath' 'winPath'"
|
||||||
|
concernant l'application $2 (par défaut, toutes les applications)
|
||||||
|
Ces valeurs peuvent être utilisées comme arguments d'une fonction. par
|
||||||
|
exemple:
|
||||||
|
wom_getApplications appinfos "" host pw
|
||||||
|
for args in "${appinfos[@]}"; do
|
||||||
|
eval "userfunc $args"
|
||||||
|
done
|
||||||
|
}}}
|
||||||
|
!! {{{wom_addApplication}}}
|
||||||
|
{{{
|
||||||
|
Ajouter une application nommée $1 en contactant le moniteur sur l'hôte $2,
|
||||||
|
avec éventuellement le mot de passe $3.
|
||||||
|
Soit le nom Name, par défaut l'exécutable se trouve dans
|
||||||
|
WOAPPLICATIONS/Name.woa/Name et les logs dans /var/log/WebObjects, et le
|
||||||
|
flag autoRecover est activé
|
||||||
|
XXX supporter la possibilité de modifier les valeurs par défaut
|
||||||
|
}}}
|
||||||
|
!! {{{wom_addInstance}}}
|
||||||
|
{{{
|
||||||
|
Ajouter une instance sur localhost pour l'application nommée $1 en
|
||||||
|
contactant le moniteur sur l'hôte $2, avec éventuellement le mot de passe
|
||||||
|
$3.
|
||||||
|
XXX supporter la possibilité de modifier les valeurs par défaut
|
||||||
|
}}}
|
||||||
|
!! {{{check_compute_apps_localhost}}}
|
||||||
|
{{{
|
||||||
|
si les arguments de compute_apps contiennent des bundles de framework, il
|
||||||
|
faut avoir accès au système de fichier local. vérifier si l'un des
|
||||||
|
arguments $2..* est un framework. si c'est le cas, vérifier que l'hôte $1
|
||||||
|
est localhost.
|
||||||
|
retourner 0 si c'est ok, 1 s'il y a des frameworks et que host n'est pas
|
||||||
|
localhost
|
||||||
|
}}}
|
||||||
|
!! {{{compute_apps}}}
|
||||||
|
{{{
|
||||||
|
Remplir le tableau $1(=apps) avec la liste des applications correspondant
|
||||||
|
aux arguments $3...*
|
||||||
|
Un bundle de framework (Name.framework) est remplacé par la liste des
|
||||||
|
bundles d'applications qui dépendent de ce framework. Cette information
|
||||||
|
est obtenue en consultant le système de fichier local.
|
||||||
|
Un bundle d'application est remplacé par la liste des applications qui
|
||||||
|
sont définies pour ce bundle. Cette information est obtenue en consultant
|
||||||
|
le tableau généré par wom_getApplications(), dont le nom est $2
|
||||||
|
Les arguments de la forme @N sont ignorés, ils correspondent à des délais
|
||||||
|
à respecter lors du démarrage de l'application
|
||||||
|
}}}
|
||||||
|
!! {{{get_error_msg}}}
|
||||||
|
!! {{{start_apps}}}
|
||||||
|
{{{
|
||||||
|
Démarrer les applications $3..$* en contactant le moniteur sur l'hôte $1
|
||||||
|
avec le mot de passe éventuel $2
|
||||||
|
Les variables globales enable_autorecover et force_enable_autorecover
|
||||||
|
permettent respectivement d'activer l'autoRecover après le démarrage de
|
||||||
|
l'application et de forcer l'activation de l'autoRecover même si
|
||||||
|
l'instance tournait déjà.
|
||||||
|
Un argument de la forme @N provoque une attente de N secondes. Ceci permet
|
||||||
|
de placer un temps d'attente entre le démarrage de certaines applications.
|
||||||
|
}}}
|
||||||
|
!! {{{stop_apps}}}
|
||||||
|
{{{
|
||||||
|
Arrêter les applications $3..$* en contactant le moniteur sur l'hôte $1
|
||||||
|
avec le mot de passe éventuel $2
|
||||||
|
Les variables globales disable_autorecover et force_disable_autorecover
|
||||||
|
permettent respectivement de désactiver l'autoRecover après l'arrêt de
|
||||||
|
l'application et de forcer la désactivation de l'autoRecover même si
|
||||||
|
l'instance ne tournait pas.
|
||||||
|
L'option {-a ARRAY} permet de remplir ARRAY avec la liste des applications
|
||||||
|
qui ont été effectivement arrêtées. Cette option si elle est spécifiée
|
||||||
|
doit être en premier
|
||||||
|
Pour compatibilité avec start_apps, les arguments de la forme @N sont
|
||||||
|
ignorés. Il n'y a pas de temps d'attente entre les applications lors de
|
||||||
|
l'arrêt.
|
||||||
|
}}}
|
||||||
|
!! {{{bounce_apps}}}
|
||||||
|
{{{
|
||||||
|
Redémarrer les applications $3..$* en mode bounce en contactant le
|
||||||
|
moniteur sur l'hôte $1 avec le mot de passe éventuel $2
|
||||||
|
Pour compatibilité avec start_apps, les arguments de la forme @N sont
|
||||||
|
ignorés. Il n'y a pas de temps d'attente entre les applications lors du
|
||||||
|
redémarrage.
|
||||||
|
}}}
|
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/wosign
|
||||||
|
|
||||||
|
!! {{{wosign_setup_maybe}}}
|
||||||
|
!! {{{wosign_jar}}}
|
||||||
|
!! {{{wosignable}}}
|
||||||
|
!! {{{wosign}}}
|
||||||
|
{{{
|
||||||
|
Signer un bundle, les jars d'un répertoire, ou un jar
|
||||||
|
L'option -f force la resignature des jars d'un répertoire ou d'un
|
||||||
|
bundle. Elle force aussi la signature d'un jar, même s'il semble qu'il
|
||||||
|
soit la version signée d'un autre jar
|
||||||
|
on présuppose que wosignable a retourné true
|
||||||
|
}}}
|
|
@ -0,0 +1,12 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:15
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulib/wotaskd
|
||||||
|
|
||||||
|
!! {{{wot_config}}}
|
||||||
|
{{{
|
||||||
|
Afficher la configuration de wotaskd
|
||||||
|
}}}
|
|
@ -0,0 +1,23 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulibshell
|
||||||
|
|
||||||
|
{{{
|
||||||
|
ulibshell: Lancer un shell après avoir chargé des modules de ulib
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
ulibshell [options] [args...]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-r module
|
||||||
|
Spécifier un module à charger avec urequire. Plusieurs modules peuvent
|
||||||
|
être spécifiés en les séparant par ':'
|
||||||
|
|
||||||
|
Un shell est lancé dans lequel les modules spécifiés sont chargés. Par défaut,
|
||||||
|
seul le module DEFAULTS est chargé. Les arguments sont passés inchangés au
|
||||||
|
shell.
|
||||||
|
}}}
|
|
@ -0,0 +1,18 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: ulibsync
|
||||||
|
|
||||||
|
{{{
|
||||||
|
ulibsync: Copier les librairies ulib et/ou pyulib
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
ulibsync [options] destdir
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-u Copier ulib
|
||||||
|
-p Copier pyulib
|
||||||
|
}}}
|
|
@ -0,0 +1,29 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: umatch
|
||||||
|
|
||||||
|
{{{
|
||||||
|
umatch: Afficher le résultat d'une recherche par regexp
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
umatch [options] <regexp>
|
||||||
|
|
||||||
|
Chaque ligne de stdin est matchée pas rapport à l'expression regulière avec la
|
||||||
|
syntaxe de awk. S'il y a correspondance, afficher soit toute l'expression
|
||||||
|
matchée, soit chaque groupe s'il y a des expressions parenthésées, chacun des
|
||||||
|
groupes étant séparé par le caractère sep.
|
||||||
|
|
||||||
|
regexp peut avoir l'une des valeurs suivantes, qui correspondent à des
|
||||||
|
expressions régulières prédéfinies:
|
||||||
|
|
||||||
|
ip --> [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-F sep
|
||||||
|
Spécifier le caractère séparateur s'il y a des champs multiples. Par
|
||||||
|
défaut, utiliser le caractère ':'
|
||||||
|
}}}
|
|
@ -0,0 +1,17 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: umirror
|
||||||
|
|
||||||
|
{{{
|
||||||
|
umirror: faire un miroir d'un site web
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
umirror [options] url [wget_options]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-l Convertir les liens pour consultation locale
|
||||||
|
}}}
|
|
@ -0,0 +1,157 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
source "$(dirname "$0")/../ulib/ulib" &&
|
||||||
|
urequire DEFAULTS ||
|
||||||
|
exit 1
|
||||||
|
OENC="$UTF8"
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
local OENC="$UTF8"
|
||||||
|
uecho "$scriptname: Mettre à jour la documentation pour les outils de nutools
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname [options]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-t Ne générer la documentation que pour les outils
|
||||||
|
-l Ne générer la documentation que pour ulib
|
||||||
|
-s Synchroniser avec nutools.html après la génération de la documentation
|
||||||
|
Par défaut, la documentation est (re)générée pour les outils et pour ulib"
|
||||||
|
}
|
||||||
|
|
||||||
|
function dump_content() {
|
||||||
|
local twpage="$1" content="$2"
|
||||||
|
if [ -f "$twpage" ]; then
|
||||||
|
awk '
|
||||||
|
BEGIN { dump = 0 }
|
||||||
|
!dump && ($0 == "" || $0 ~ /^[^#]/) { dump = 1 }
|
||||||
|
dump { print }' <"$twpage" >"$content"
|
||||||
|
else
|
||||||
|
>"$content"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function write_twpage() {
|
||||||
|
local oldcontent="$1" title="$2" newcontent="$3" twpage="$4"
|
||||||
|
if testdiff "$oldcontent" "$newcontent"; then
|
||||||
|
local created="$(date +"%d/%m/%Y %H:%M")"
|
||||||
|
echo "# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: $USER
|
||||||
|
##@created: $created
|
||||||
|
##@modifier: $USER
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: $title" >"$twpage"
|
||||||
|
cat "$newcontent" >>"$twpage"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
auto=1
|
||||||
|
tools=
|
||||||
|
ulib=
|
||||||
|
sync=
|
||||||
|
force=
|
||||||
|
parse_opts "${PRETTYOPTS[@]}" \
|
||||||
|
--help '$exit_with display_help' \
|
||||||
|
-t '$auto=; tools=1' \
|
||||||
|
-l '$auto=; ulib=1' \
|
||||||
|
-s '$auto=; sync=1' \
|
||||||
|
--force force=1 \
|
||||||
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
[ -n "$auto" ] && {
|
||||||
|
tools=1
|
||||||
|
ulib=1
|
||||||
|
sync=1
|
||||||
|
}
|
||||||
|
ac_set_tmpfile oldcontent
|
||||||
|
ac_set_tmpfile newcontent
|
||||||
|
cd "$scriptdir"
|
||||||
|
|
||||||
|
if [ -n "$tools" ]; then
|
||||||
|
if [ -n "$*" ]; then
|
||||||
|
cmds=("$@")
|
||||||
|
else
|
||||||
|
array_lsfiles cmds ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
for cmd in "${cmds[@]}"; do
|
||||||
|
cmdname="$(basename "$cmd")"
|
||||||
|
twpage="$cmdname.twp"
|
||||||
|
[ -x "$cmd" ] || continue
|
||||||
|
estep "$cmdname"
|
||||||
|
|
||||||
|
dump_content "$twpage" "$oldcontent"
|
||||||
|
echo "
|
||||||
|
{{{
|
||||||
|
$("$cmd" --help)
|
||||||
|
}}}" >"$newcontent"
|
||||||
|
|
||||||
|
write_twpage "$oldcontent" "$cmdname" "$newcontent" "$twpage"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$ulib" ]; then
|
||||||
|
array_from_lines ulibnames "$(list_files ../ulib)"
|
||||||
|
# faire l'entête
|
||||||
|
dump_content ulib.twp "$oldcontent"
|
||||||
|
echo "
|
||||||
|
!Liste des librairies de ulib" >"$newcontent"
|
||||||
|
for ulibname in "${ulibnames[@]}"; do
|
||||||
|
echo "* [[ulib/$ulibname]]" >>"$newcontent"
|
||||||
|
done
|
||||||
|
write_twpage "$oldcontent" ulib "$newcontent" ulib.twp
|
||||||
|
# faire les pages
|
||||||
|
for ulibname in "${ulibnames[@]}"; do
|
||||||
|
ulib="../ulib/$ulibname"
|
||||||
|
twpage="ulib_$ulibname.twp"
|
||||||
|
title="ulib/$ulibname"
|
||||||
|
dump_content "$twpage" "$oldcontent"
|
||||||
|
awkrun 'BEGIN {
|
||||||
|
in_func = 0
|
||||||
|
dump_doc = 0
|
||||||
|
dumped_doc = 0
|
||||||
|
print
|
||||||
|
}
|
||||||
|
!in_func && $0 ~ /^function / {
|
||||||
|
if (match($0, /function +([^ ]+)\(\)/, vs)) {
|
||||||
|
funcname = vs[1]
|
||||||
|
if (funcname !~ /^_/) {
|
||||||
|
in_func = 1
|
||||||
|
dump_doc = 1
|
||||||
|
dumped_doc = 0
|
||||||
|
print "!! {{{" funcname "}}}"
|
||||||
|
if ($0 ~ /}$/) {
|
||||||
|
in_func = 0
|
||||||
|
dump_doc = 0
|
||||||
|
dumped_doc = 0
|
||||||
|
}
|
||||||
|
next
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
in_func && dump_doc && $0 !~ /^ *#/ {
|
||||||
|
dump_doc = 0
|
||||||
|
}
|
||||||
|
in_func && dump_doc && $0 ~ /^ *#/ {
|
||||||
|
if (!dumped_doc) print "{{{"
|
||||||
|
gsub(/^ *#+ */, "")
|
||||||
|
print
|
||||||
|
dumped_doc = 1
|
||||||
|
}
|
||||||
|
in_func && $0 ~ /}$/ {
|
||||||
|
if (dumped_doc) print "}}}"
|
||||||
|
in_func = 0
|
||||||
|
dump_doc = 0
|
||||||
|
dumped_doc = 0
|
||||||
|
}
|
||||||
|
END { if (in_func) print "}}}" }
|
||||||
|
' <"$ulib" >"$newcontent"
|
||||||
|
write_twpage "$oldcontent" "$title" "$newcontent" "$twpage"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$sync" ]; then
|
||||||
|
../twsync ${force:+--force}
|
||||||
|
fi
|
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: uprefix
|
||||||
|
|
||||||
|
{{{
|
||||||
|
uprefix: Afficher les préfixes valides pour uinst
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
uprefix -l|--dump|prefix...
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-l Afficher la liste des préfixes valides
|
||||||
|
--dump
|
||||||
|
Afficher la liste des préfixes valides et leurs valeurs
|
||||||
|
prefix
|
||||||
|
Afficher la valeur du préfixe spécifié
|
||||||
|
}}}
|
|
@ -0,0 +1,75 @@
|
||||||
|
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@creator: jclain
|
||||||
|
##@created: 15/03/2012 22:20
|
||||||
|
##@modifier: jclain
|
||||||
|
##@changecount: 1
|
||||||
|
##@tags:
|
||||||
|
##@title: uproject
|
||||||
|
|
||||||
|
{{{
|
||||||
|
uproject: Outil pour gérer des projets
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
uproject cmd [args]
|
||||||
|
|
||||||
|
COMMANDS
|
||||||
|
getvcs [dir]
|
||||||
|
Afficher le type de VCS pour dir.
|
||||||
|
getroot [dir]
|
||||||
|
Si dir est un répertoire versionné, retourner le répertoire racine du
|
||||||
|
projet versionné.
|
||||||
|
getrepos [dir]
|
||||||
|
Si dir est un répertoire versionné, retourner l'url du repository du
|
||||||
|
projet versionné.
|
||||||
|
geturl [dir]
|
||||||
|
Si dir est un répertoire versionné, retourner son url dans le
|
||||||
|
repository.
|
||||||
|
fold [dir]
|
||||||
|
unfold [dir]
|
||||||
|
Utiliser uinc pour défaire (resp. refaire) toutes les inclusions des
|
||||||
|
fichiers de dir. Cela ne fonctionne que si un fichier .uir est configuré
|
||||||
|
à la racine du projet avec inc=true (ou un fichier .uinst.conf avec
|
||||||
|
update_inc=true
|
||||||
|
vcs [args]
|
||||||
|
Appeler le gestionnaire de gestion approprié avec les arguments donnés.
|
||||||
|
add files...
|
||||||
|
Ajouter les fichiers files dans le gestionnaire de version.
|
||||||
|
remove files...
|
||||||
|
Supprimer les fichiers versionnés files.
|
||||||
|
copy from to
|
||||||
|
Copier le fichier versionné from vers le fichier to.
|
||||||
|
move from to
|
||||||
|
Renommer le fichier versionné from vers le fichier to.
|
||||||
|
mkdir dir
|
||||||
|
Créer un nouveau répertoire versionné.
|
||||||
|
commit message [files...]
|
||||||
|
Enregistrer les modifications (par défaut sur tous les fichiers
|
||||||
|
modifiés) avec le commentaire message.
|
||||||
|
status
|
||||||
|
Afficher l'état des fichiers versionnés et non versionnés.
|
||||||
|
update [-x]
|
||||||
|
Mettre à jour la copie locale avec la copie sur le serveur.
|
||||||
|
-x Ne pas mettre à jour les références externes (si appliquable)
|
||||||
|
diff [options]
|
||||||
|
Afficher les différences.
|
||||||
|
-l Afficher les différences non commitées (par défaut)
|
||||||
|
-c Afficher les différences en passe d'être commitées (si appliquable)
|
||||||
|
-r REV
|
||||||
|
Afficher les différences depuis la révision REV.
|
||||||
|
-R Afficher les modifications effectuées depuis la dernière release.
|
||||||
|
printml [-t TYPE]
|
||||||
|
Afficher le modeline pour un fichier du type spécifié
|
||||||
|
addml [-t TYPE] file
|
||||||
|
Ajouter un modele pour le fichier spécifié, s'il n'en a pas déjà un.
|
||||||
|
Si nécessaire, forcer le type du fichier au lieu de l'autodétecter
|
||||||
|
new [options] file [template options]
|
||||||
|
Créer un nouveau fichier à partir d'un modèle.
|
||||||
|
Avant le nom du fichier, les options suivantes sont valides:
|
||||||
|
-t TEMPLATE
|
||||||
|
Spécifier le modèle de fichier à utiliser. Par défaut, le modèle
|
||||||
|
à utiliser est déduit de l'extension ou du nom du fichier.
|
||||||
|
-e Editer le fichier après l'avoir créé.
|
||||||
|
Après le nom du fichier, toutes les options sont spécifiques au modèle
|
||||||
|
utilisé pour créer le nouveau fichier. Utiliser l'option --help pour
|
||||||
|
avoir une description des options disponibles.
|
||||||
|
}}}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue