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