Compare commits

..

1 Commits

Author SHA1 Message Date
Jephté Clain ca0d2e0882 préparer le support de %n 2016-11-28 08:23:43 +04:00
751 changed files with 56293 additions and 59058 deletions

4
.udir
View File

@ -16,10 +16,8 @@ rm_utools=
kvm_service= kvm_service=
# Faut-il installer le service openvz-fix-etchosts? # Faut-il installer le service openvz-fix-etchosts?
openvz_service= openvz_service=
# Faut-il installer le service kill-ssh-user-sessions?
ksus_service=
configure_variables=(dest uninst_utools rm_utools kvm_service openvz_service ksus_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.shared lib/bashrc.d/bash_completion.shared lib/init.d/kvm-stop-all legacy/sysinc/utools legacy/sysinc/system_caps legacy/sysinc/private/init) configure_dest_for=(bashrc profile lib/uinst/conf lib/uinst/rootconf lib/profile.d/nutools.shared lib/bashrc.d/bash_completion.shared 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) config_scripts=(lib/uinst/conf lib/uinst/system_caps.legacy)
install_profiles=true install_profiles=true

View File

@ -1,805 +1,3 @@
## Version 11.2.0 du 21/06/2024-20:34
* `21042e4` bug
* `e4176df` reginc: possibilité de renommer des fichiers
* `1787aa2` bug
* `d1f77aa` dkbuild: support dist none et tag LATEST
* `c2cfd77` bug
* `e7745c2` dk: support --plain-output
* `ce8f541` dkbuild: -g pour --profile
* `30594aa` maj distributions
* `2df175e` dkbuild: cosmetic
* `fbb05f8` support des versions AMUE
## Version 11.1.0 du 01/02/2024-20:59
* `8570d12` pff: les répertoires liés peuvent contenir des fichiers
* `5d6c6b4` synchroniser pff et nulib/pff
* `90bda71` pff: support des répertoires liés
* `7d7b88a` autoriser les feature branches qui commencent par wip/
* `5cc1826` dk et dkbuild: support .composer.yaml et setup_image
* `0bf0f48` dk: support ~/.dkbuild.env
* `b818e11` dkbuild: ajout de --plain
* `ad14de3` dkbuild: configuration profil prod par défaut
* `54a5b54` Sscreen: support des cas où screen n'est pas dans le PATH
* `5a06851` dkbuild: support profil par défaut
* `a855b04` dkbuild: les versions de profil sont ordonnées comme les versions de distribution
* `e531553` dkbuild: sans --all-profiles, ne build que dans le profil par défaut
* `db1467b` bug
* `3123d8e` dkbuild: mappings par défaut
* `d9b1485` charnière entre java 8 et java 11
* `744a3fa` dkbuild: indiquer si la version de Java demandée n'est pas trouvée
* `2803868` dkbuild: marquer plus d'action comme étant du build
* `4f7bc3f` dkbuild: bug avec -u seul
* `8cdc3cb` modifs.mineures sans commentaires
## Version 11.0.0 du 05/09/2023-14:29
* `ddfbc00` maj des images par défaut dk et dkbuild
* `e33f2a5` ajout registry privé
* `f245e17` image par défaut en prod
* `efe31b8` support java17
* `5cb4112` dkbuild: bug profil unitaire
* `f424f41` dkbuild: -u n'implique plus -b
* `e5a1473` dkbuild: implémenter -u
## Version 10.0.0 du 12/08/2023-21:06
* `bfdf9b5` support système sans python2
* `108215f` maj registry pour devel
* `6ddb870` dkbuild: support profil nu
* `c0b130f` dkbuild: support profil jclain
* `ae20e49` modifs.mineures sans commentaires
* `2e5101d` ajout de lgrep
* `cff4833` ajout de ldiff
* `9c6e7a8` renommer less1 en lless
* `e9d52d8` ajout de less1 pour lire des fichiers latin1
* `d3d86c6` cssh: forcer la désactivation du verrouillage de la session
* `b761cb6` Sscreen: désactiver verrouillage de la session
## Version 9.16.0 du 15/06/2023-15:28
* `f36be0d` uscrontab: s'assurer que USER est défini
* `63674ef` cosmetic
* `ee80091` cosmetic
## Version 9.15.0 du 14/06/2023-15:41
* `2a02307` update-nutools: prendre le dépôt public par défaut
* `27a82e4` ajouter les numéros de version des debian et ubuntu
* `92157de` regins: implémentation initiale
* `efe9fbb` dk: ajout de XX pour prune-cache
* `dc94b5c` dkbuild: bug avec les chemins
* `5e87665` dk: X supprimer aussi le cache
* `9c1a8e6` dk: composer.phar est cherché dans sbin/ aussi
* `81cefdc` regcp: activer support regexp-extended
* `c5796d6` modifs.mineures sans commentaires
* `6919352` maj du message de commit par défaut
* `7ba7d1c` pcxone: correction de l'url généré des dépôts git
* `9d75943` repoctl: correction de l'url généré des dépôts git
## Version 9.14.0 du 15/03/2023-17:48
* `3ecb127` support docker compose v2
* `432ab6f` dkbuild: composer et mvn ne sont lancés qu'en mode build
* `01c14bb` regcp: ajout de l'option -n
* `0913c2e` upassword: rendre configurable le nombre de blocs
* `61433fb` dkbuild: revert image par défaut pour javabuilder
* `e4e0a55` pff: support mode vcs offline
* `e08c66b` pff: support des archives sh de l'amue
* `0d11932` dkbuild: corriger l'image javabuilder par défaut
* `3ead1f3` dkbuild: utiliser automatiquement l'image si nécessaire pour composer ou maven
* `93de256` ajout de regcp et regmv
* `5e33a36` rendre cohérent les en-têtes des scripts
* `9e13515` ajout exemple .dkbuild.env
* `c9e8110` dkbuild: corriger calcul des tags
* `c671cb3` dkbuild: fin support tag & last version
* `1a764f1` dkbuild: début support tag & last version
* `027f9b8` dkbuild: ajout de from_glob()
* `2293239` maj doc
* `9fc07bb` dkbuild: ajout build add-tags=
* `7b15f94` dkbuild: support préfixe et suffixe pour version
* `f2cfaee` dkbuild: calculer extract automatiquement
* `c36b8fb` dkbuild: corriger le support des paramètres sans argument
* `68a42d0` dkbuild: maj templates
* `306e77f` dkbuild: calcul de la version à partir d'un fichier ou d'un chemin
* `b006bb4` Maj des fichiers
* `6963d41` uproject: push -f force le push
* `9665d5a` cx-conndev: maj doc
* `137dfa9` repoctl, uproject: ne plus enlever le suffixe .git
* `440d2aa` upassword: maj nombre de blocs par défaut
* `f4047a3` ipaddr: forcer la sortie couleur
* `af1bdd3` Maj des fichiers
* `85e77e4` dkbuild: corriger le calcul de la dernière version d'une distribution
* `a56ec0e` dkbuild: améliorer clean
* `d6e78b9` dkbuild: maj messages debug
* `1699cc5` dkbuild: les fichiers d'environnement par défaut ont l'extension .env
* `2ae8406` maj doc dkbuild
* `1db7d08` maj doc cx-shelldev
* `aba08c2` maj update-nutools
* `e83b6d1` possibilité de choisir l'adresse IP
* `af9096d` ajouter le template fichier vide
* `89f0c09` typo
* `fb434c2` bug parse_date
* `f7ab14f` dkbuild: implémentation initiale
* `f46812f` cx-conndev: maj doc
## Version 9.13.0 du 07/02/2022-22:20
* `06686d9` pff: support nettoyage wsdl/
* `9a018a6` pdev: ajout de --check
* `a932a1a` la branche par défaut est master en prod
* `cb09f4d` maj template yaml
* `f895222` foreach: rendre -g et -S compatibles
* `4f7bcbc` maj template CSS
* `5cdd93d` upassword: réintégrer password wom
* `7030b87` dk: ajouter mvn_action=install
* `8a682ed` upassword: changer le générateur aléatoire
* `a85cdf6` Maj des fichiers
* `d75783b` dmcerts: cosmetic
* `11e6021` dmcerts: certificat client avec la même durée que le CA
* `938307c` ajout dmcerts
* `8b49084` typo
* `98c1ac8` ajouter le support de bullseye
* `28d42b0` authftp: support des mots de passe avec des caractères spéciaux
* `dfdfd59` sélectionner java 1.6 par défaut pour worun
* `6af0359` pff: ajout de la commande normalisée new_cmd_amue_clean_libs
* `b3a44d0` pff: bug
* `111463a` pff: ajout AUTO_CMDS et NEW_CMDS, supprimer MKDIRS
* `fe839f4` woinst: bug
* `ba8e1a1` upasword: ajout des mot de passe javamonitor de webobjects
* `a75b91e` network: utiliser 127.0.1.1 pour dhcp
* `dfb5fc3` maj ulib/redhat
* `40c9cb9` supprimer docker/ qui est obsolète
* `580e20b` supprimer nulib de la distribution de nutools
* `da28d8b` pff: changer le format des fichiers de version
## Version 9.12.0 du 29/03/2021-09:41
* `3d54e37` pff: bug origext
* `4607f0f` possibilité de spécifier compat bash_completion si pas debian
* `4bf4f6d` authftp: info pour host key verification failed
* `47e0583` forcer l'utilisation de python2
* `026b849` dmctl: support de l'import de plusieurs machines avec -l
* `31e43da` dk: support de 'system' comme alias de 'none' pour COMPOSER_PHP et MAVEN_JAVA
* `b191552` dk: bug dans le mapping par défaut dans le profil test
* `1d4c4b4` dk: support COMPOSER_PHP=none
* `b3983ed` dk: support des mappings d'hôtes
* `543d2d2` dk: mvn est aussi un frontend pour lancer java
* `f1a9c7a` dk: début support projets maven
* `ad44a1c` dk: support build dans une image pour les projets composer
## Version 9.11.0 du 11/12/2020-15:43
* `01e940b` repoctl: permettre create -u
* `e453ed2` maj doc
* `434a8bc` compileAndGo: support java 11
## Version 9.10.0 du 12/11/2020-23:05
* `24d0519` dk: support merge .shared_env et .machine_env
* `45c40d7` dk: support de --pull
* `c921d2a` pff: support de NOUPSTREAM
* `edf956f` dk: BRANCH peut aussi être un ^COMMIT
* `85842f3` renommer start-screen en Sscreen
* `e395720` maj doc
* `4603b1a` bug
* `a91542b` maj .gitattributes par défaut
* `51c4c33` support sélection java 11
* `82a7952` dm: support des aliases pour ssh aussi
* `d1d32de` dk: bug avec update-devel
* `037cb1a` maj template sql
* `04d037f` support rhel8 / ol8
* `725ba6d` cssh: donner un nom à la session
## Version 9.9.0 du 21/09/2020-18:08
* `2ec6c21` support gros doigt de python2 sur les systèmes modernes
* `bc1a740` bug
* `ada594a` dm: support des aliases
* `856c948` repoctl: ajout de update-origin
* `cc1b45d` support de l'option -u
* `28ceb74` cosmetic
* `751e372` bug
* `c5e1536` support de la définition des aliases et des profils dans les répertoires de cluster
* `14beb13` dk: support minimal maven
* `f474657` dk: ajout de COMPOSER_ARGS
* `1097975` cosmetic
* `bb7a4fc` foreach: ajout de l'option -S
* `e0e6178` dk: support de la sélection d'un service et de la machine sur laquelle tourne un service
* `07bea2c` cx-conndev: support klean
* `7254661` dk: support du nommage du répertoire pour le checkout
* `fb285e0` ne vérifier conndev.php que si c'est nécessaire
## Version 9.8.0 du 28/04/2020-16:42
* `e2b2f49` dk: vérifier que le répertoire destination existe avant rsync
* `c147a0c` dk: possibilité de spécifier les options de rsync
## Version 9.7.0 du 17/04/2020-10:20
* `f4f9b69` dk: bug avec la synchro d'un fichier
* `74190f7` dk: par défaut, les suffixes courants sont supprimés
* `9fad992` dk: support répertoire/fichier source
* `1d7e2d0` bug
* `7268cec` pff: workaround pour certaines erreurs de packaging
* `aa26966` dk: support build args avec la syntaxe NAME=VALUE
* `f7b3f90` dk: augmenter la largeur de la colonne node
* `1c4c1c3` dmctl: l'option -a supporte les répertoires
* `ccf3c67` dk: aliases de filtres
* `1b12cee` dk: afficher un warning si le profil n'est pas défini pour une machine
* `45976f4` dk: sta affiche le statut pour tous les services
* `1960c0c` dk: implémenter status
* `4f206d7` dk: frontend plus 'transparent'
* `d666859` dk: supprimer avec image:tag si possible
* `4ee346b` maj chemin ip
* `c9796b2` ipaddr: frontend pour ip addr
* `668eec1` dmctl: possibilité d'importer toutes les machines d'un répertoire
## Version 9.6.0 du 24/02/2020-09:13
* `b7492fc` dk: ajout de l'option -e
* `08c081a` modification pour support des valeurs spéciales (ne sont pas synchronisées) dans LDAP
* `98129cd` passer par un script annexe pour cssh
* `99c0ccd` dk: support de PHP_VERSION_MAX
## Version 9.5.0 du 28/01/2020-14:06
* `640a2b1` maj doc
## Version 9.4.4 du 27/01/2020-08:48
* `300935c` bug
## Version 9.4.3 du 24/01/2020-13:02
* `4ba6909` ajouter le support de buster pour la completion
## Version 9.4.2 du 24/01/2020-08:52
* `fd5b787` dk: bug
* `ad18983` maj de l'image par défaut
* `c33ff4c` ajouter le support de buster
* `247b449` dk: maj doc
* `28f4d39` dk: support de COMPOSER_PHP
* `f28df52` maj image composer
## Version 9.4.1 du 20/01/2020-14:46
* `6f01bac` dk: si la commande est inconnue, la transmettre à docker
* `175f6ed` cssh: traiter le cas où screen n'est pas disponible
* `73db728` umail: possibilité de spécifier le type de body
* `5fc55cc` dk: support des fonctions de nettoyage par profil
* `21274af` dk: APPS peut avoir une valeur dépendante du profil
* `f7f8889` support des filtres avec wildcards
* `747c563` repoctl: divers bugs
* `4fdd23c` dk: support limité de podman
* `5457228` dk: support des aliases pour les mappings pff
* `a55f9c4` dk: ajout de get-profile
* `ac7efad` dk: possibilité de forcer la suppression des images
* `5284838` typo
* `d5c5162` dk: dans build.env, une variable peut en mentionner une autre
* `f7d036a` repoctl: cosmetic
* `87b8d5b` Intégration de la branche update-repoctl
* `0866bbd` finaliser edit et implémenter get
* `8daf4ec` début implémentation edit
* `ef1c8f2` utiliser dk composer, et ne pas utiliser de container par défaut
* `269379f` dk: rendre le code overridable
* `aae3703` bug avec traitement des variables de docker-machine -u
* `f875093` dk: par défaut, forcer l'utilisation de la machine locale pour dk composer
* `c202a27` dk: support COMPOSER_SETUP et COMPOSER_CMD
* `921caa1` dk: le shell est lancé en root
* `ce98445` dk: support de composer shell
* `2b5ed18` dk: ajouter un frontend pour composer
* `29c54e7` dmctl: import/export de docker machines
* `de53bae` Intégration de la branche add-repoctl
* `600b824` support limité de pcrone et pclone
* `914f635` implémentation initiale de create, list, delete
* `a774497` squelette
* `5a444a6` dk: support pff
* `425e8a5` dk: maj format ps
* `52c3d7a` dk: ps, ls et rm prennent des filtres. ajout de pull
* `d5f8fa4` cx-updatedev: ajout de l'option -g
* `5fe5137` dk: support de COMPOSER_ACTION et sqlmig NOFIX
* `74cf35b` typo
* `0468623` alias pour docer-machine
* `3dfe542` dk: support de scripts génériques
* `488a257` délai pour éviter les maj intempestives d'eclipse
* `13ce5b8` dk: tagger aussi avec la distribution
* `d03b04f` dk: ajouter automatiquement le suffixe -$DIST à la version
* `6879491` maj doc
* `7fad363` cssh: compat avec les vieilles versionsd de linux
* `f65dda6` bug
* `bc7eebc` ajouter --with-registry-auth à dk update
* `8af50f4` nettoyage de logs webobjects
* `458ccd3` dk: support de certaines options pour dk run
* `c97bc6a` dk: support de la commande run
* `ae70f66` synchro des dépendances uniquement pour le type composer
* `f508dae` support des mises à jour en mode devel
* `60a4c73` cx-conndev: ajouter l'option -d
* `85ac283` cx-conndev: renommer l'option en --mysql-cmd
* `80db462` cx-conndev: ajout de l'option --cmd
* `4400ba7` ajout de ensure-vip
* `ae7ffeb` cx-updatedev: remplacer --ru par -w, --ud, --ur en fonction des besoins
* `9bfd515` dk -c est auto-complete friendly
* `a5a41d9` dk: support de fichiers compose non défaut
* `7e5859e` bug
* `b342960` bug
* `c44d1d3` dk: par défaut, ne pas ajouter le profil au nom de projet
* `aa4eb4a` cx-updatedev: ajout des mises à jour récursives
## Version 9.4.0 du 05/06/2019-10:15
* `fb96852` Intégration de la branche dk-deploy
* `386fc0d` implémenter service, update, scale
* `c2f43e6` optimiser l'utilisation de docker-machine
* `8cb3b2f` ajouter la commande deploy
* `5967541` cx-updatedev: ajouter l'option -j
* `d79e218` dk: support de push pour docker-compose
* `ccbfff4` dk: simplifier la gestion du nommage des services
* `50dee34` dk: support de build d'un service en particulier
* `99d5069` bug
* `a825f3b` bug
* `8c143e1` foreach: ajout de --cc
* `7e26ae1` foreach: ajout des raccourcis -G et -C
* `cbb34ec` cx-conndev: afficher les erreurs
* `7524a28` cosmetic
* `9b03dcd` cx-updatedev: ajout de -i et -u
* `c7eca6a` cx-updatedev: ajout des options -l et -c
* `8b4067a` bug
* `3971dca` scripts pour gérer projets composer
* `c66eee1` scripts pour gérer projets composer
* `7c135fa` fconv, fnconv: support de sed
* `72c3512` dk: bug dans la détection du type de projet
* `0891e89` sqlmig: corriger la lecture des paramètres
* `d197fc0` sqlmig: support de l'importation directe des fichiers csv
* `d028c47` dk: maj doc et support d'origine de profil
* `b068a12` dk: maj doc et support de branche de profil
* `d7c981d` dk: afficher l'adresse ip
* `7ec5381` dk: renommer service en systemd-unit
## Version 9.3.0 du 02/04/2019-16:03
* `6a03853` ajout de update-apps en natif
* `6462bec` dk: ajouter exec, maj doc
* `7a728a9` dk: stop, logs et down acceptent maintenant un argument
* `df788f6` support mariadb
* `edaaec1` bug
* `41089f7` dk: ajout de l'action bs
* `af2b74f` sqlmig: init crée aussi 02grants.sql
## Version 9.2.0 du 08/12/2018-11:58
* `71bb5aa` bug
* `44b1954` dk: s'assurer que docker-compose et docker existent quand on crée le service
* `d70825c` dk: bug dans la définition du service
* `45d912d` EnsureVM: être en mode shared par défaut
* `3292686` EnsureVM: ne plus chercher à décharger les modules par défaut
## Version 9.1.0 du 22/11/2018-15:40
* `ba29496` dk: génération d'un service systemd
* `f72dd86` option -n pour pcrone le clone pas le dépôt nouvellement créé
* `01325d0` sqlmig: support chemin config/sqlmig et bug avec csv_null
* `45da726` dk: ajout de l'option --fake pour afficher les commandes
* `dcb637e` dk: support de --no-cache pour docker-compose build
* `9c6f606` Intégration de la branche update-pcrone
* `764dd53` maj prefixe et meilleur affichage des erreurs
* `307fa48` dk: option -j pour désactiver le cache
* `45c6422` profils pour docker-machine
* `a9004fa` dk: PROFILE est exporté
## Version 9.0.0 du 15/11/2018-09:40
* `af969e4` maj de l'url source de nutools
## Version 8.3.0 du 15/11/2018-09:32
* `7ff32ca` dk brd honore les scripts de build
* `3293d09` support docker-machine use
* `e6be47e` ajouter de nouveaux formats pour parse_date
* `1151b5c` latin1compat gère les points de suspension
* `2f86786` ajouter le template pour yaml
## Version 8.2.0 du 02/11/2018-15:06
* `7583ded` Intégration de la branche update-pff
* `96c146e` ajout de l'option NOMERGES pour ne pas tenter de fusionner avec git des fichiers binaires
* `4f7cb90` dk: support de .compose.env pour le nom du projet
* `9d991e2` pcrone: possibilité de créer des dépôts gogs
* `e3ba580` dk: corriger push
* `48c662b` gérer les tags autrement. ajouter push
* `566f1d7` tailor.py: possibilité de modifier les préréglages par les options
* `f34b63a` bug
* `2873638` afficher le profil courant
## Version 8.1.0 du 28/09/2018-08:39
* `e74480c` dk: action build par défaut
* `56b18a4` dk: rendre overridable VERSION
* `ed180b5` dk pour faciliter l'utilisation de docker
* `4ad84c0` sqlmig: ajout de la restauration de la base test à partir d'une copie de la prod
* `a5be8d8` maj gitignore initial
* `19267dd` utempl: support du datage automatique des fichiers
## Version 8.0.0 du 21/07/2018-10:21
* `a60f23a` maj version ulib
* `6cfb62b` sqlmig: ignorer les opérations de maintenance
* `305a180` bug
* `6184fde` tailor.py: avec le preset php, traiter \n
* `7676c76` tailor.py: ajouter l'analyse de php fatal error
* `775bc8e` tailor.py: préréglages pour apache et php
* `d620760` sqlmig: support des préfixes alphanumériques pour les fichiers csv
* `fe0e271` maj doc
* `300d42a` cosmetic
* `16114f5` maj doc
* `827dd14` sqlmig: l'option -f supporte plusieurs fichiers
* `e78ec7f` sqlmig: support des préfixes avec '.' pour les conversions csv --> sql
* `0ae44bd` maj scripts docker
* `1a2f6c4` maj docker
* `cdd152f` maj docker
* `04e37db` docker: ajout run
* `75385a7` cosmetic
* `c1d98a0` interpréteur interactif sous docker
* `ba2c806` image docker
* `e621a56` sqlmig: possibilité de spécifier csv_null pour la conversion des fichiers csv
* `6f1b8b4` mysqlloadcsv: bug avec les valeurs de la forme 00+
* `a88c24e` sqlmig: ajout de l'option --connect
* `bad6c48` sqlmig: corriger le suivi des maj admin
* `4b85c93` sqlmig: support des suffixes pour les noms de base de données
* `9600fb8` sqlmig: bug avec option conflictuelle
* `7181725` sqlmig: ajout de l'option --update-one
* `6a6b2a5` sqlmig: mode fake pour afficher les opérations qui doivent être faites
* `e0d6910` nulib: afficher les lignes d'action
* `c7286d1` nulib: corriger l'affichage du menu
* `4d2bf89` settings pour projet eclipse
* `0bbcef6` nulib: génération d'une table
* `51f4e92` ajouter projet pydev pour nulib
* `8b8cffd` mysqlloadcsv: insérer les valeurs dans une transaction
* `d413790` ulib/web: possibilité d'avoir un container non fluid pour menu
* `6e142b7` bug
* `1a3550e` nulib/web: ajout de redirect() et set_profile(). améliorer la lisibilité des arguments
* `c58a6cc` sqlmig: ne pas utiliser truncate par défaut
* `7bc3af2` sqlmig: conversion automatique des fichiers *.csv en *.sql
* `4c43b01` sqlmig: mode dépendant du profil
* `174c087` sqlmig: support des fichiers spécifique au mode devel
* `e493b49` sqlmig: support des profils
* `66e1674` pff: support de DISTTYPE
* `f1dca50` sqlmig: support des mises à jour administratives
* `b5e2417` création de sqlmig pour gérer les mises à jour sur une base de données
* `7f503ae` pff: utiliser git diff pour la colorisation
* `96449de` base: page_maybe() affiche les codes couleurs
* `6e45dfe` pff: bug avec filtres
* `60f3e4d` Intégration de la branche nulib-experiment
* `a3c5ffb` maj logo univ2017
* `4535b67` support deploydb et pffprofile
* `7356c1d` déploiement d'application webpyapp
* `1c3c07f` début d'implémentation nulib
* `db57d79` mysqlloadcsv: support de l'option --prefix
* `a4e758e` pff: afficher la version du projet
* `777bb1f` Intégration de la branche update-pff
* `9c86a6f` début du support de la variable PROTECTS
* `f9d3f90` après Commit, vérifier qu'il n'y a pas encore des marques de conflit
* `fa6e87a` possibilité de spécifier merge_strategy pour les conflits
* `5f68f3e` l'utilisateur doit faire Commit ou Abort. sinon lui demander son choix
* `33b7dba` chrono.py: ajouter le bouton pause
* `49df321` uinst: support des exclusions pour chmod et chown
* `daafe41` pcrone: créer les fichiers .gitignore et .gitattributes
* `3c8b6f8` norm_properties: supprimer les espaces de fin
* `045885c` les fichiers properties sont parfois considérés comme binaires
* `1b1589e` pff: ne pousser que si un remote est défini pour la branche
* `13440e2` pff: support des filtres à l'intégration
* `ee3b583` pff: support du paramètre MKDIRS
* `56972a6` toinst: ajouter l'option --ct
* `952b4ed` pff: raccourcis pour abort() et done()
* `51109be` pff: forcer le mode des fichiers du profil Base parce que git n'enregistre pas les autorisations
* `82c3669` pff: les fichiers du profil Base sont en lecture seule
* `2fa28d5` pff: honorer l'ordre de .pff.conf pour le premier profil
* `af006c4` pff: sélectionner le premier profil par défaut
* `e20757b` Intégration de la branche update-pff
* `cb21c53` finaliser l'implémentation de patch_cmd()
* `04f2f91` intervertir les options -a et -b. en effet, -a est susceptible d'être plus utilisé et est plus naturel
* `4bc8108` corriger l'affichage de diff_cmd()
* `7299aeb` suite implémentation patch_cmd()
* `eee9a65` support de l'édition dans le profil ALL et rajouter les raccourcis -P, -T, -A
* `6b33929` début d'implémentation de patch_cmd()
* `2b1ad2b` implémenter l'option -p avec edit_cmd()
* `a0752e9` maj doc
* `ad30399` Intégration de la branche update-pu
* `7408760` finaliser l'implémentation
* `1ec281d` début d'implémentation
* `5d828c4` pff: créer automatiquement le profil Common
* `9481cad` pff: bug avec l'intégration de fichier origines locaux
* `f17dcca` maj des logos de l'université
* `a61452c` pff: enregistrer les profils définis et les créer sans confirmation si nécessaire
* `86963ec` pff: cosmetic
* `9eaed33` pff -d: ajout de --list-names pour afficher seulement les noms de fichiers
* `70165cb` pff: ajout de --diff et --infos -l
* `ed0659f` pff: améliorer l'affichage de pff --infos
* `f0ae5ae` Intégration de la branche update-pff
* `9a37329` utiliser le profil Common par défaut
* `6f6fc74` maj doc
* `7954e7f` pff: support des projets pff déployés avec toinst
* `ab535b7` toinst: exclure le répertoire des profils pff
* `625f93d` Intégration de la branche add-pff
* `4a8c5d1` completion automatique
* `151e083` multiconf: ajout de conf_update()
* `7c86854` maj du prompt
* `20d083b` implémentation initiale
* `4a46cd3` maj sqlcsv
* `bdd859c` bug avec l'utilisation de gensub()
* `bda961f` update-nutools: support de l'option --devel
* `f35e9e8` ufile: ajouter le mode local uniquement
* `bc4c8cb` Intégration de la branche ufile-named-rules
* `be4985f` possibilité de choisir la réponse par défaut pour copy_update_ask et conf_install
* `0e6f55a` support des variables
* `191d3c2` ufile: support des règles nommées
## Version 7.4.0 du 20/12/2017-19:01
* `48e4359` sqlcsv: possibilité de spécifier le chemin de chargement des drivers jdbc
* `a7e6228` ufile: par défaut -c ne charge que le fichier spécifié
* `0b59583` support de quelques combinaisons de diacritiques
* `4f520db` authftp: support préliminaire de --sftp
* `4f11cc4` ufile: possibilité d'écraser les fichiers sans confirmation
## Version 7.3.0 du 19/10/2017-12:12
* `72d7d15` maj version ulib
* `9fb19b4` ulib/multiconf: améliorer conf_install()
* `6c3ae24` openurl: supprimer la sortie erreur pour cacher les warnings GTK
* `528a281` em: supprimer la sortie d'erreur par défaut. rendre configurable la géométrie
* `489b31d` moiso: améliorer l'ergonomie pour le démontage
* `7bd0a95` ufile: support des pattern regex
* `6130c2f` chrono.py: 0 est équivalent à la chaine vide
* `9c5b46b` pyulib: ajouter ShConfig
* `f31f5f7` corriger un problème de compilation sur OL6
* `ab8ede8` awk: support du format dd/mm/yy
* `312c7dc` ajouter des fonctions pour simplifier le check de la version de l'os et l'installation de paquets
* `5bf55e5` bug
* `b6ff411` maj doc uscrontab
## Version 7.2.0 du 26/09/2017-17:01
* `1e576da` multiconf: rajouter conf_upgrade() dans conf_auto()
* `eeef48d` Intégration de la branche update-config
* `ea45055` implémentation simplifiée avec conf_upgrade()
* `efc60b3` description des modifications
* `36eec4a` Intégration de la branche update-ufile
* `2afffef` ne pas implémenter la recherche automatique de fichier de configuration
* `6ec37f6` ufile: implémenter l'option -r
* `6e8c200` maj TODO
* `cf629e6` uscrontab: support des oneshot vars
* `a66c0c2` uscrontab: ajout des options -@, -H, -M
* `52e838e` uwatch: ajouter les options -w et -p pour attendre la disparition d'un fichier ou d'un processus
* `8ad2e4c` lftp ne supporte pas l'utilisation des guillemets
* `7fb81a0` désactiver la vérification du certificat par défaut
* `dbc3daa` multiconf: bug
* `aff1c15` multiconf: support des variables de type path et compatibilité avec bash 4.3
* `8e17fb1` Intégration de la branche add-multiconf
* `a916180` ajouter conf_install pour installer les fichiers de configuration dans un répertoire standardisé
* `0372a5c` ufile charge les fichiers de ~/etc/ufile.d/
* `7d1ec90` simplifier l'API
* `c988692` fin implémentation
* `72e0c36` maj doc
* `f472501` squelette initial
## Version 7.1.0 du 10/09/2017-19:20
* `f131e21` uwatch: ajout de l'option -r
* `d99718e` cosmetic
* `1aee0cb` maj sqlcsv
## Version 7.0.0 du 25/08/2017-15:53
* `e4f154e` uawk: possibilité de lancer les versions locale-aware
* `ef00e07` bug
* `377ca5e` implémenter awkcsv2fsv. corriger un bug avec les outils qui utilisaient cawkrun à l'intérieur d'une fonction l*
* `2f448d5` ussh: problèmes de compatibilité
* `2cc2411` bug potentiel
* `65bd363` webpyapp: réorganiser les fichiers pour supporter des librairies locales
* `0b39b23` webpyapp: les variables de server.conf sont configurables
* `d1a1d4d` webpyapp: cosmetic
* `46fbec7` webpyapp: bootstrap facilité des sessions
* `c541958` webpyapp: support du mode développement
* `e2ea2ea` ufile: ajout de --force-cp
## Version 6.7.0 du 19/07/2017-15:45
* `1b92275` apacheconfig: support d'un script post-update.sh
* `70fedc2` webpyapp: support de bootstrapcss
* `eca8c11` webpyapp: installation du service
* `ce52d25` support de l'activation de services systemd uniquement
* `a76d28e` webpy: chargement automatique de la configuration depuis server.conf
* `070f5bf` début de template webpyapp
* `3f46414` web.py: ajout de la fonction _utf8plaintext()
* `335ca05` compatibilité avec les vieilles versions de bash
* `0471785` support de stretch pour la completion
* `c659159` corriger le calcul de la version de tomcat à sélectionner
* `e3344f5` bug
* `f663e59` pdev: ajout de l'option -n
* `796898b` apacheconfig: destdir n'est peut-être pas spécifié
* `4f99397` apacheconfig: mettre à jour le dépôt avant de charger la configuration
* `80ae9d7` apacheconfig -up met à jour le dépôt avant le déploiement
* `2a6cd4d` javaproperties: support de l'échappement de : et =
## Version 6.6.0 du 10/06/2017-11:22
* `302986d` maj dépot jclain.fr en repos.ct
## Version 6.5.0 du 30/05/2017-17:12
* `f9f0ffc` toinst: les options -r et -B ne requièrent pas que la webapp source existe
* `d4591df` rtoinst: ne pas copier les fichiers de VCS lors du déploiement
* `bef927c` umirror: ajouter les options -g et -n pour faciliter le téléchargement des livraisons APOGEE
* `5d3f576` upassword: nouvelles options -m et -n pour la gestion des salts
## Version 6.4.0 du 05/05/2017-16:50
* `c25160c` fndate: maj doc et améliorations ergonomiques
* `d5f4ae2` pclone: filtrer les projets de type wildcard
* `f8f731e` support de la complétion pour rwoinst -w
* `e4b7714` tailor.py et chrono.py: améliorer l'affichage de l'aide
* `6f1d5e5` Intégration de la branche rwoinst-updates
* `4aaded5` support des répertoires source maven et de l'interrogation de deploy pour: profil, déploiement des resources web, variables bounce, notag, exec, dbconfig, dbconfigmap
* `f20cc48` rwoinst: ajouter l'option -w qui peut être spécifiée en parallèle de -h pour déployer les resources web vers un serveur différent
* `9e4ccae` woinst: support des préfixes dans les variables
* `8f9ddb5` uinst.sh et woinst.sh: améliorer la comptabilité
* `e01cabb` makeself: retourner le code d'erreur même avec un auto-extractible temporaire
* `8482d61` pclone: ajouter l'option --master
* `a264b3e` pclone: implémenter le clonage récursif avec -r ainsi que les options -n et -u
* `262048f` ufile: possibilité de classer vers plusieurs destinations
* `8c22012` ufile: copier en local sans utiliser scp si possible
* `dec100b` ufile: support du classement par scp
* `c82c908` ufile: support des inclusions, d'un fichier de configuration alternatif
* `d535df3` ufile: le code de retour de renamef peut annuler une règle
* `0365c54` améliorer l'ergonomie de ruinst, rwoinst, toinst: pas la peine de confirmer le répertoire courant s'il est déployé sur un hôte
* `8ce9821` fndate: améliorer l'ergonomie de l'option -@
* `5b0f13d` ufile: changer la sémantique de renamef
* `fec6b2f` pu: support du scenario ou la branche de feature distante a été supprimée
* `151433b` ufile: ajout des options --list et --edit
* `a99f313` ufile: classement automatique de fichiers
* `540e718` base.core: qwc supporte les classes de caractères
* `78e0a8e` cosmetic
* `027b416` ppath2() est plus approprié dans certaines circonstances
* `c034115` revert 9d8b32bcd118ca9194b2d134e51a078d16b1c18d: la correction du bug était incorrecte
* `1dbe02f` Intégration de la branche tomcat-deploy
* `2394edf` toinst: implémenter la sauvegarde
* `fc467cb` finaliser le support de .toinst.conf et traiter les options --exclude, --protect et --rsync-option
* `9d8b32b` parse_args: bug avec la fonction reset
* `9084e7e` début du support de .toinst.conf
* `a84775c` support des options --wamap et --protect depuis la configuration locale de déploiement
* `3bbabbf` deploy: support des options --of, --df, --lf
* `c1a536b` deploy: support des options -old pour afficher des informations supplémentaires
* `2daf190` quelques améliorations dont support du profil de déploiement
* `0b46830` implémenter toinst et rtoinst
* `836c933` maj doc ruinst et désactiver déploiement de clé par rwoinst
* `2991e63` deploy: requête récursive par défaut
* `52bb0d5` base.core: ajout de la fonction echo_setv2() pendant de echo_seta2()
* `bab9c50` tailor.py: suivre un fichier est optionnel
* `4593ad8` ajout de tailor.py: affichage d'un fichier en mettant en surbrillance certains patterns
## Version 6.3.1 du 06/04/2017-22:34
* `b3e6ff6` cgilsxml.py: maj doc
* `ee2e411` cgilsxml.py: bug
## Version 6.3.0 du 04/04/2017-04:04
* `2fb17f7` implémenter dumpcsv --awk-map
* `42c6fa6` ne pas activer git-ssh.userconf par défaut
* `5061d4b` bug dans les règles par défaut de mssh
* `14c5667` mssh: portage générique de mfssh pour choisir l'exécutable ssh en fonction du réseau source et destination
* `a2480ec` apacheconfig: *.conf matche aussi *.ssl.conf et *-certs.conf
* `95aa12f` Intégration de la branche update-apacheconfig
* `f233ae1` support de l'option -p pour traiter les ligne de la forme <VirtualBox *:PORT>#*ip:IP
* `f908e1c` support de SITE_IP
* `999fb7f` bug
* `37a2dce` apacheconfig -K: support de plus de patterns pour le fichier modèle
* `ab4148c` cgilsxml.py: nouvelles options --first-spec et all-specs
## Version 6.2.0 du 13/03/2017-11:27
* `4a7b14b` ajouter un argument force à testupdated et testnewer
* `8a6678c` ruinst et rwoinst: piloter l'interaction distante à partir du paramétrage local
* `e9b574d` rwoinst: intégrer des fonctionnalités de ruinst; support préliminaire de deploy
* `2561f67` ruinst: utiliser la configuration ruinst par défaut pour deploy
* `38f21aa` ruinst: support de deploy pour calculer l'hôte pour le déploiement
* `d5846ba` deploy: possibilité de filtrer les variables à afficher. en cas d'échec, afficher false pour faciliter l'utilisation avec eval()
* `8fa58e2` quelques corrections sur deploy
* `20df6c4` support du depot deploy
* `3a24e83` régression dans set_array_cmd()
* `31fb39d` réorganiser certaines fonctions
* `528d579` ajout des fonctions seta(), _seta(), echo_seta()
* `a43359c` maj doc
* `2177e6a` cesser d'utiliser des fonctions obsolètes
* `9a777b3` cosmetic
* `a5fcf78` ajout de evali()
* `af3bb37` ajout de evals()
* `fbad986` corriger un problème potentiel avec should_quote()
* `f570438` bug avec recho -n; maj doc
* `3d1b826` cosmetic
* `e800376` cosmetic
* `0805f4f` SVirtualBox: ajout de l'option -r pour relancer avec restauration du snapshot
* `225060c` utempl/www: correction des options et modification cosmétique
* `ad88c99` Intégration de la branche update-templates
* `532d21d` support de la génération de pages html avec bootstrap
* `c52031b` maj de la description
* `ca4de19` Intégration de la branche update-apacheconfig
* `02f52af` afficher un menu si plusieurs répertoires de templates sont disponibles
* `6192c0a` description des modifications à apporter
* `f2b6381` SVirtualBox: démarrer en mode separate par défaut
* `7a38535` support des hôtes de l'université
* `b6b7fa9` uscrontab: support de l'option -G pour les tests
* `e58ff74` maj du template pour runs
## Version 6.1.0 du 13/02/2017-17:06
* `748c2f7` Intégration de la branche update-network
* `367acfe` marquer les fichiers à ignorer pour les projets dépendants
* `ad19121` ipcalc: utiliser ip route au lieu de route
* `feb00bc` support de libvirt sur jessie
* `fa3d3b4` début de réorganisation des fonctions
* `b266663` uproject push: support des options -abt avec des arguments
* `286d1fe` pcrone: support des dépôt en http
* `67f29dd` ulib/sysinfos: implémenter dump_sysinfos, unsupported_system, require_sysinfos
* `a8fa722` ulib/runs: quelques corrections mineures
* `e9e4e6a` correction mineure avec les options de yum
* `e5f0df2` ulib/sysinfos: support de oracle linux; correction d'un bug pour macosx
* `27a2ab0` pyulib: ajouter l'argument nocopy=False à seqof() pour éviter des bugs subtils
* `11b87fd` ajout de netconfig: gestion des interfaces réseaux
* `87edaad` Intégration de la branche better-umountr
* `83d6db3` auto-complétion pour umountr
* `f34f32a` support des options --[no-]recursive et --[no-]poweroff
* `a7ee78f` description branche
* `35a55f0` ajout du script create-user, pour créer un utilisateur sudoer et lui installer une clé publique ssh
## Version 6.0.1 du 30/12/2016-18:39
* `e79658e` maj de la doc
## Version 6.0.0 du 30/12/2016-18:26
* `a7767f7` Intégration de la branche better-apacheconfig
* `683d5df` pour simplifier le débuggage, set -x est désactivé pour les fonction urequire(), parse_args() et awkdef()
* `ed1633a` module template: support de variables supplémentaires avec TEMPLATE_USER_VARS et de la description des variables dans le fichier de configuration
* `b920641` l'installation distante de modules uinst par rruns se fait par défaut sans confirmation
* `fd9105f` bug dans le module base.num: 'is*num -' était vrai
* `6366256` module ipcalc: ajout de ipcalc_network()
* `fbc1a5c` mise à jour du module debian
* `e3cd3ce` diverses modification de apacheconfig et apache.tools
* `c552d2d` corriger le module python ulib.ext.xpath
* `62a59e5` kill-ssh-user-sessions.service: laisser un peu de temps pour que le client soit notifié
* `4b7d4f4` ajouter une option pour installer le service kill-ssh-user-sessions
* `c95d1cd` ajouter un service pour tuer les sessions ssh lors de l'arrêt de la machine
* `4e1e5a4` ruinst: tracer la collecte d'informations sur l'hôte distant
* `5aa60a3` désactiver la création du lien pour xpathtool.py, qui ne fonctionne qu'à partir de lib/ulib/support
* `6a4e6a7` foreach: ajouter une syntaxe alternative pour lister directement les éléments
* `24a8839` update-nutools: possibilité de cloner la branche develop avec l'option --develop
* `24812c1` initialiser PYTHONIOENCODING pour faciliter l'exécution de scripts python
* `390233a` modification pour afficher l'aide même si certains outils requis sont absents
* `2425cbe` maj de l'arborescence de la doc
* `96b1866` prel: support du fichier .prel-noauto pour interdire les releases automatiques
* `b278b17` prel: mise à jour de la commande par défaut pour les dépendances
* `9983e49` pver: support des aliases D et P pour .pver-map
* `e37cc8f` pver et prel utilisent -p par défaut pour le support maven
* `2980d15` pver supporte la gestion des versions maven
* `190519d` pxs ne requière plus la présence du remote origin
* `4a4094c` déplacement de is_defined() et is_array() dans base.core
* `d735b7b` ulib: strops: ajout des opération mid et repl
* `8d486dc` ulib: ajouter la fonction strops
* `db24c70` ulib: ajout de la fonction is_array()
* `3ccd4ed` apacheconfig: ne pas chercher à utiliser site-certs.conf s'il n'y a pas les variables @@{cert,key,ca}@@
* `b9dc5ca` bug dans apacheconfig
* `b4ade73` TODO de branche
* `44fe622` chrono.py: chronomètre graphique
* `2a6d089` ulib/base: implémenter ask_any()
* `94615de` conversion de CHANGES.txt en CHANGES.md
* `d2a56d6` prel: ajout de l'option --uc pour convertir CHANGES.txt en CHANGES.md
* `f3ba5e3` prel: générer un fichier CHANGES.md par défaut avec une syntaxe un peu différente
* `40babfe` sqlcsv: l'option -l supporte une url jdbc, et la recherche de sqlcsv.properties se fait dans tous les répertoires parent jusqu'à $HOME
## Version 5.3.0 du 28/09/2016-23:31 ## Version 5.3.0 du 28/09/2016-23:31
* `5c466d8` ldif et ldap: match des suffixes sans tenir compte de la casse. modrdn prend un nouvel argument SUFFIX * `5c466d8` ldif et ldap: match des suffixes sans tenir compte de la casse. modrdn prend un nouvel argument SUFFIX

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire service urequire DEFAULTS service
function display_help() { function display_help() {
uecho "$scriptname: s'assurer que les services sont lancés pour un type de virtualisation uecho "$scriptname: s'assurer que les services sont lancés pour un type de virtualisation
@ -17,7 +17,7 @@ function ensure_kvm() {
# sont chargés, et que le service libvirt-bin est démarré # sont chargés, et que le service libvirt-bin est démarré
local module modified local module modified
if [ -z "$check_only" -a -n "$exclusive" ]; then if [ -z "$check_only" ]; then
# Vérifier que les modules vbox* sont déchargés # Vérifier que les modules vbox* sont déchargés
for module in vboxpci vboxnetadp vboxnetflt vboxdrv; do for module in vboxpci vboxnetadp vboxnetflt vboxdrv; do
if lsmod | quietgrep "$module"; then if lsmod | quietgrep "$module"; then
@ -54,24 +54,19 @@ function ensure_kvm() {
[ -n "$modified" ] && sleep 1 [ -n "$modified" ] && sleep 1
service= service=
function __guess_service() { if check_sysinfos -d redhatlike; then
for i in libvirtd libvirtd-bin; do for i in libvirtd libvirtd-bin; do
[ -f "/etc/init.d/$i" ] && { [ -f "/etc/init.d/$i" ] && {
service="$i" service="$i"
break break
} }
done done
}
if check_sysinfos -d redhatlike; then
__guess_service
elif check_sysinfos -d debian -v jessie+; then
__guess_service
elif check_sysinfos -d debianlike; then elif check_sysinfos -d debianlike; then
service=libvirt-bin service=libvirt-bin
fi fi
if [ -n "$service" ]; then if [ -n "$service" ]; then
# s'assurer que le service tourne # s'assurer que le service tourne
service "$service" startm service libvirt-bin startm
else else
return 0 return 0
fi fi
@ -82,7 +77,7 @@ function ensure_virtualbox() {
# sont chargés, et que le service vboxdrv est démarré # sont chargés, et que le service vboxdrv est démarré
local module modified local module modified
if [ -z "$check_only" -a -n "$exclusive" ]; then if [ -z "$check_only" ]; then
# Vérifier que kvm{,_intel,_amd} ne sont pas chargés # Vérifier que kvm{,_intel,_amd} ne sont pas chargés
for module in kvm_intel kvm_amd kvm; do for module in kvm_intel kvm_amd kvm; do
if lsmod | quietgrep "$module"; then if lsmod | quietgrep "$module"; then
@ -117,12 +112,9 @@ function ensure_virtualbox() {
} }
check_only= check_only=
exclusive=
parse_opts + "${PRETTYOPTS[@]}" \ parse_opts + "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-c,--check-only,--check check_only=1 \ -c,--check-only,--check check_only=1 \
-x,--exclusive exclusive=1 \
-s,--shared exclusive= \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
run_as_root "$@" run_as_root "$@"

View File

@ -1,61 +0,0 @@
# nutools
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](doc/ulib.md))
et une librairie de modules python réutilisables (pyulib)
## Installation
~~~sh
git clone https://git.univ-reunion.fr/modules/nutools
git checkout develop
cd nutools
./uinst -y
~~~
Dans l'exemple ci-dessous, on installe la branche develop, pour avoir toujours
la dernière version des outils.
Pour mettre à jour, il suffit de mettre à jour le dépôt et de relancer
l'installation
~~~sh
cd nutools
git pull
./uinst -y
~~~
Alternative, il est possible de demander à nutools à se mettre à jour avec la
dernière version
~~~sh
update-nutools --develop
~~~
## 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](doc/tools/uinst): Déploiement local
* [mkusfx](doc/tools/mkusfx): Faire une archive auto-installable avec uinst
* [ruinst](doc/tools/ruinst): Déploiement distant avec uinst
* [runs](doc/tools/runs): Lancer un script avec le protocole RUNS
* [rruns](doc/tools/rruns): Déploiement distant avec runs
* Librairie réutilisable de scripts shell
* [uinc](doc/tools/uinc): Dépliage des inclusions dans un fichier
* [ulibsync](doc/tools/ulibsync): Faire une copie locale pour un projet de ulib et/ou pyulib
* Autres outils
* [udir](doc/tools/udir): Gestion des paramètres d'un répertoire. Ces paramètres sont entre
autres utilisés par uinst et uinc.
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

4
SKvm
View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire virsh urequire DEFAULTS virsh
function display_help() { function display_help() {
uecho "$scriptname: lancer une machine virtuelle kvm uecho "$scriptname: lancer une machine virtuelle kvm

View File

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS
function display_help() { function display_help() {
uecho "$scriptname: lancer une machine virtuelle VirtualBox uecho "$scriptname: lancer une machine virtuelle VirtualBox
@ -9,38 +10,19 @@ USAGE
$scriptname [options] vmName $scriptname [options] vmName
OPTIONS OPTIONS
-n, --nop -n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés -l Lister les machines virtuelles
-l, --list -s Démarrer la machine virtuelle (par défaut)
Lister les machines virtuelles
-s, --start
Démarrer la machine virtuelle. C'est l'action par défaut.
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
affiché affiché
-x, --gui -b Démarrer la VM sans interface graphique. Cette option n'est valide
-b, --headless qu'avec -s
--separate -k Arrêter la machine virtuelle (par ACPI)
Ces options ne sont valides qu'avec -s et permettent de spécifier le -p Mettre en veille la machine virtuelle (par ACPI)
type de démarrage: 'gui' permet d'afficher une fenêtre complète dans -H Arrêter sauvagement la machine virtuelle
laquelle l'accélération graphique est supportée, headless démarre la -R Redémarrer sauvagement la machine virtuelle
machine en tâche de fond, et separate affiche une fenêtre qui attaque la -S Enregistrer l'état de la machine virtuelle
machine démarrée en tâche de fond. --separate est l'option par défaut. -g Afficher le gestionnaire de machines virtuelle"
-k, -t, --stop
Arrêter la machine virtuelle. Les options -p, -H, -R, -S et -r
permettent de spécifier le type d'arrêt de la machine virtuelle
-p, --sleep
Mettre en veille la machine virtuelle (par ACPI)
-H, --poweroff
Arrêter sauvagement la machine virtuelle
-R, --reset
Redémarrer sauvagement la machine virtuelle
-S, --savestate
Enregistrer l'état de la machine virtuelle
-r, --rrestart
Arrêter la machine, restaurer l'état du dernier snapshot puis la
relancer.
-g, --gui
Afficher le gestionnaire de machines virtuelle"
} }
function build_arrays() { function build_arrays() {
@ -80,24 +62,20 @@ function start_virtualbox() {
} }
action=start action=start
type=separate
stopaction=acpipowerbutton stopaction=acpipowerbutton
restore= headless=
parse_opts + "${PRETTYOPTS[@]}" \ parse_opts + "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-n,--nop action=nop \ -n action=nop \
-l,--list action=list \ -l,--list action=list \
-s,--start action=start \ -s,--start action=start \
-x,--gui type=gui \ -b,--background,--headless headless=1 \
-b,--background,--headless type=headless \
--separate type=separate \
-k,-t,--stop '$action=stop; stopaction=acpipowerbutton' \ -k,-t,--stop '$action=stop; stopaction=acpipowerbutton' \
-p,--sleep '$action=stop; stopaction=acpisleepbutton' \ -p,--sleep '$action=stop; stopaction=acpisleepbutton' \
-H,--poweroff '$action=stop; stopaction=poweroff' \ -H '$action=stop; stopaction=poweroff' \
-R,--reset '$action=stop; stopaction=reset' \ -R '$action=stop; stopaction=reset' \
-S,--savestate '$action=stop; stopaction=savestate' \ -S '$action=stop; stopaction=savestate' \
-r,--rrestart '$action=stop; restore=1' \ -g action=gui \
-g,--gui action=gui \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
"$scriptdir/EnsureVM" virtualbox || die "$scriptdir/EnsureVM" virtualbox || die
@ -132,8 +110,8 @@ $(array_join rvms "
fi fi
if [ -n "$vm" ]; then if [ -n "$vm" ]; then
estep "Démarrage de $vm de type $type" estep "Démarrage de $vm${headless:+ en tâche de fond}"
VBoxManage -q startvm --type "$type" "$vm" "$@" VBoxManage -q startvm ${headless:+--type headless} "$vm" "$@"
else else
ewarn "Aucune VM à démarrer n'a été trouvée" ewarn "Aucune VM à démarrer n'a été trouvée"
fi fi
@ -142,23 +120,10 @@ elif [ "$action" == stop ]; then
if [ -z "$vm" -a "${rvms[*]}" ]; then if [ -z "$vm" -a "${rvms[*]}" ]; then
select_vm rvms vm "Choisissez la VM à arrêter avec la méthode $stopaction" select_vm rvms vm "Choisissez la VM à arrêter avec la méthode $stopaction"
fi fi
[ -n "$vm" ] || die
estep "Arrêt de $vm avec la méthode $stopaction" if [ -n "$vm" ]; then
VBoxManage -q controlvm "$vm" "$stopaction" || die estep "Arrêt de $vm avec la méthode $stopaction"
if [ -n "$restore" ]; then VBoxManage -q controlvm "$vm" "$stopaction"
ebegin "Attente de l'arrêt"
while true; do
build_arrays
array_contains svms "$vm" && break
edot 0
sleep 1
done
eend
estep "Restauration du snapshot"
VBoxManage -q snapshot "$vm" restorecurrent || die
estep "Démarrage"
VBoxManage -q startvm --type "$type" "$vm"
fi fi
elif [ "$action" == gui ]; then elif [ "$action" == gui ]; then

86
Sscreen
View File

@ -1,86 +0,0 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# désactiver le verrouillage
export LOCKPRG=/bin/true
COULEUR_NORMALE=$'\e[0m'
COULEUR_ROUGE=$'\e[31;1m'
COULEUR_VERTE=$'\e[32;1m'
COULEUR_JAUNE=$'\e[33;1m'
COULEUR_BLEUE=$'\e[34;1m'
COULEUR_BLANCHE=$'\e[37;1m'
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
# Si screen pas installé, ne rien faire
local dir screen="$(which screen 2>/dev/null)"
if [ -z "$screen" ]; then
for dir in /usr/local/bin /opt/bin /usr/bin /bin; do
if [ -x "$dir/screen" ]; then
screen="$dir/screen"
PATH="$PATH:$dir"
break
fi
done
fi
if [ -z "$screen" ]; then
echo "${COULEUR_JAUNE}WARNING${COULEUR_NORMALE} screen introuvable. une session bash classique sera lancée"
exec /bin/bash -l
fi
# corriger TERM pour les vieilles versions de Linux
case "$TERM" in
xterm*) TERM=xterm;;
screen*) TERM=screen;;
esac
export TERM
local msgprefix
local screens count
local session_name="nutools-$USER"
screens="$(LANG=C screen -ls | grep -Ei "${session_name}.*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 -S "$session_name"
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 -S "$session_name"
else
exec /bin/bash -l
fi
}
if [ $# -gt 0 ]; then
# lancer les commandes fournies avant de lancer SCREEN
"$@"
fi
__auto_screen

View File

@ -1,10 +1,3 @@
# TODO # TODO
dkbuild
* setversion peut prendre la version depuis la branche git d'un dépôt
* un argument permettrait de spécifier comment la version est calculée à
partir du dépôt
* si cela a du sens, une commande setlatest qui permet de désigner quelle
distribution/version est la dernière
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -1 +1 @@
11.2.0 5.3.0

2
_root
View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/ulib" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire base urequire base
function display_help() { function display_help() {

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire template apache.tools urequire DEFAULTS template apache.tools
apacheconfig_initvars apacheconfig_initvars
function display_help() { function display_help() {
@ -16,19 +16,6 @@ OPTIONS
Créer un nouveau répertoire de configuration pour un hôte Créer un nouveau répertoire de configuration pour un hôte
-d, --destdir DESTDIR[=$TEMPLATECTL_NAME] -d, --destdir DESTDIR[=$TEMPLATECTL_NAME]
Nom du répertoire local de configuration. Nom du répertoire local de configuration.
-f,--full
--partial
Indiquer respectivement que la configuration est complète ou partielle.
Avec la configuration complète, le serveur peut être complètement
configuré avec tous les fichiers présents. Avec la configuration
partielle, uniquement les informations spécifiques à un service en
particulier sont disponibles.
Cette option est utilisée avec --create. Par défaut, la configuration
est partielle.
Pour le moment, la seule différence est que --full crée un fichier de
configuration nommé .apacheconfig alors que --partial crée un fichier
nommé apacheconfig.conf qui est visible et donc découvrable et éditable
plus facilement
-t, --template [OPT] -t, --template [OPT]
Gérer les fichiers du répertoire local avec templatectl. La valeur de Gérer les fichiers du répertoire local avec templatectl. La valeur de
@ -59,23 +46,9 @@ OPTIONS
Lors du déploiement de la configuration, les valeurs des variables Lors du déploiement de la configuration, les valeurs des variables
dynamiques sont remplacées dans les fichiers destination. dynamiques sont remplacées dans les fichiers destination.
Les arguments qui restent sont passés tels quels à apache_autoconf Les arguments qui restent sont passés tels quels à apache_autoconf
-p, --pull
Faire 'git pull' avant --update
-F, --fix-ip
Corriger les lignes de la forme '<VirtualHost *:PORT>#*ip:IP' et les
remplacer par '<VirtualHost IP:PORT>'
Cela permet de déployer une version de production des fichiers de
configuration.
-N, --network-config
Mettre aussi à jour la configuration réseau.
--no-post-update
Ne pas lancer le script post-update.sh après le déploiement s'il existe.
Le script est lancé avec les mêmes arguments que apacheconfig_deploy()
la fonction définie dans le module apache.tools
-r, --certsdir CERTSDIR -r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à Spécifier le cas échéant le répertoire contenant les certificats à
déployer. Cet argument est requis si le répertoire certsconf/ existe, déployer. Cet argument est requis si le répertoire certsconf/ existe.
sauf si les certificats sont déjà déployés.
--localhosts --localhosts
Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe
@ -90,48 +63,24 @@ OPTIONS
-S, --one-site SITE -S, --one-site SITE
Ne déployer que le fichier de site spécifié. Cette option est utilisée Ne déployer que le fichier de site spécifié. Cette option est utilisée
avec --deploy ou --localhosts et est utile pour le développement et les avec --deploy ou --localhosts et est utile pour le développement et les
tests. tests."
-k, --new-site HOST.TLD
Créer une définition pour un nouveau site à partir des fichiers du
répertoires templates/
-K, --new-site-templatedir TEMPLATEDIR
Spécifier le répertoire source pour les templates de site utilisés par
l'option --new-site. Par défaut, utiliser le répertoire templates/ situé
dans le répertoire de configuration.
Si TEMPLATEDIR est un nom simple sans séparateur de chemin '/' et qu'un
répertoire templates/TEMPLATEDIR existe, alors prendre ce répertoire-là
comme source.
--new-site-force
Avec --new-site, utiliser le nom d'hôte fourni même s'il n'est pas
pleinement qualifié"
} }
action= action=
destdir= destdir=
nohideconfig=auto nohideconfig=
templateopt= templateopt=
FULLCONF=
pull=
fixip=
netconf=
no_post_update=
aac_certsdir= aac_certsdir=
bits= bits=
oneconf= oneconf=
onemodule= onemodule=
onesite= onesite=
site_host=
site_templdir=
site_force=
args=( args=(
--help '$exit_with display_help' --help '$exit_with display_help'
-c,--create action=create -c,--create action=create
-d:,--destdir: destdir= -d:,--destdir: destdir=
--no-hideconfig nohideconfig=1 --no-hideconfig nohideconfig=1
--hideconfig nohideconfig= --hideconfig nohideconfig=
-f,--full FULLCONF=1
--partial FULLCONF=
-t::,--template:: '$set@ templateopt; action=template' -t::,--template:: '$set@ templateopt; action=template'
--help-template '$templateopt=-help; action=template' --help-template '$templateopt=-help; action=template'
-l,--list '$templateopt=l; action=template' -l,--list '$templateopt=l; action=template'
@ -147,36 +96,15 @@ args=(
-8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie' -8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
--bits: bits= --bits: bits=
-u,--update,--deploy action=deploy -u,--update,--deploy action=deploy
-p,--pull pull=1
-F,--fix-ip fixip=1
-N,--network-config netconf=1
--no-post-update no_post_update=1
-r:,--certsdir: aac_certsdir= -r:,--certsdir: aac_certsdir=
--localhosts action=localhosts --localhosts action=localhosts
-C:,--one-conf: oneconf= -C:,--one-conf: oneconf=
-M:,--one-module: onemodule= -M:,--one-module: onemodule=
-S:,--one-site: onesite= -S:,--one-site: onesite=
-k:,--new-site: '$action=new-site; set@ site_host'
-K:,--new-site-templatedir: site_templdir=
--new-site-force site_force=
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
if [ "$nohideconfig" == auto ]; then apacheconfig_loadconf "$destdir" || die
[ -n "$FULLCONF" ] && nohideconfig= || nohideconfig=1
fi
if [ -n "$pull" ]; then
estep "Mise à jour du dépôt"
if [ -n "$destdir" ]; then
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
(cd "$destdir" && git pull) || die
else
git pull || die
fi
fi
apacheconfig_loadconf "$destdir" "$nohideconfig" || die
apacheconfig_sysinfos "$sysname" "$sysdist" "$sysver" "$bits" apacheconfig_sysinfos "$sysname" "$sysdist" "$sysver" "$bits"
################################################################################ ################################################################################
@ -200,7 +128,7 @@ if [ "$action" == create ]; then
ask_yesno "Le fichier $(ppath "$config") sera écrasé. Voulez-vous continuer?" O || die ask_yesno "Le fichier $(ppath "$config") sera écrasé. Voulez-vous continuer?" O || die
rm -f "$config" || die rm -f "$config" || die
fi fi
templatectl -d "$destdir" --config "$config" ${nohideconfig:+--no-hide-config} --no-load-vars -m --write-vars templatectl -d "$destdir" --config "$config" --no-load-vars -m --write-vars
################################################################################ ################################################################################
elif [ "$action" == template ]; then elif [ "$action" == template ]; then
@ -214,11 +142,7 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
[ -d "$destdir" ] || die "$destdir: répertoire introuvable" [ -d "$destdir" ] || die "$destdir: répertoire introuvable"
args=( args=(
-d "$destdir" --$action -d "$destdir" --$action ${aac_certsdir:+-r "$aac_certsdir"}
${fixip:+--fix-ip}
${netconf:+--network-config}
${no_post_update:+--no-post-update}
${aac_certsdir:+-r "$aac_certsdir"}
${oneconf:+--one-conf "$oneconf"} ${oneconf:+--one-conf "$oneconf"}
${onemodule:+--one-module "$onemodule"} ${onemodule:+--one-module "$onemodule"}
${onesite:+--one-site "$onesite"} ${onesite:+--one-site "$onesite"}
@ -236,179 +160,11 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
apacheconfig_deploy \ apacheconfig_deploy \
"$destdir" "$aac_certsdir" \ "$destdir" "$aac_certsdir" \
"$config" "$oneconf" "$onemodule" "$onesite" \ "$config" "$oneconf" "$onemodule" "$onesite" \
"$custom_sysinfos" "$sysname" "$sysdist" "$sysver" "$bits" \ "$custom_sysinfos" "$sysname" "$sysdist" "$sysver" "$bits" || die
"$netconf" "$fixip" "$no_post_update" || die
eend eend
elif [ "$action" == localhosts ]; then elif [ "$action" == localhosts ]; then
etitle "Mise à jour de /etc/hosts" etitle "Mise à jour de /etc/hosts"
apacheconfig_localhosts "$destdir" "$aac_certsdir" "$onesite" || die apacheconfig_deploy_localhosts "$destdir" "$aac_certsdir" "$onesite" || die
eend eend
fi fi
################################################################################
elif [ "$action" == new-site ]; then
host="$site_host"
templdir="$site_templdir"
if [ -z "$templdir" -a -d "$destdir/templates" ]; then
# si on ne précise pas le template à utiliser, alors afficher
# éventuellement un menu si plusieurs templates sont disponibles
templdirs=()
if [ -n "$(list_all "$destdir/templates" "*SITE*")" ]; then
array_add templdirs templates
templdir=templates
fi
array_from_lines stempldirs "$(list_dirs "$destdir/templates" | grep -v SITE)"
for stempldir in "${stempldirs[@]}"; do
if [ -n "$(list_all "$destdir/templates/$stempldir" "*SITE*")" ]; then
array_add templdirs "templates/$stempldir"
[ -n "$templdir" ] || templdir="templates/$stempldir"
fi
done
if [ ${#templdirs[*]} -gt 1 ]; then
simple_menu templdir templdirs -t "Choix du répertoire des modèles" -m "Veuillez choisir le modèle à utiliser"
fi
templdir="$destdir/$templdir"
fi
if [[ "$templdir" != */* ]] && [ -d "$destdir/templates/$templdir" ]; then
templdir="$destdir/templates/$templdir"
elif [ -z "$templdir" ]; then
templdir="$destdir/templates"
fi
[ -d "$templdir" ] || die "$templdir: répertoire introuvable"
force="$site_force"
clrtempl=
ssltempl=
certstempl=
wwwtempl=
array_from_lines clrtempls "$(list_files "$templdir" "*SITE*.conf")"
array_from_lines ssltempls "$(list_files "$templdir" "*SITE*.ssl.conf")"
array_from_lines certstempls "$(list_files "$templdir" "*SITE*-certs.conf")"
for xtempl in "${ssltempls[@]}" "${certstempls[@]}"; do
array_del clrtempls "$xtempl"
done
[ ${#clrtempls[*]} -gt 0 ] && clrtempl="${clrtempls[0]}"
[ ${#ssltempls[*]} -gt 0 ] && ssltempl="${ssltempls[0]}"
[ ${#certstempls[*]} -gt 0 ] && certstempl="${certstempls[0]}"
array_from_lines wwwtempls "$(list_dirs "$templdir" "*SITE*")"
[ ${#wwwtempls[*]} -gt 0 ] && wwwtempl="${wwwtempls[0]}"
found=
for i in "$clrtempl" "$ssltempl" "$certstempl" "$wwwtempl"; do
[ -n "$i" ] && { found=1; break; }
done
[ -n "$found" ] || die "Aucun template disponible"
if [ -z "$force" ] && [[ "$host" != *.* ]]; then
die "$host n'est pas un nom d'hôte pleinement qualifié"
fi
hostip=
for i in "$clrtempl" "$ssltempl"; do
[ -n "$i" -a -f "$templdir/$i" ] || continue
quietgrep SITE_IP "$templdir/$i" && { hostip=1; break; }
done
if [ -n "$hostip" ]; then
# Il y a un champ SITE_IP, il faut demander à l'utilisateur l'adresse ip
# correspondante
[[ "$host" == *.* ]] && hostdomain="${host#*.}" || hostdomain=
pri=
hostip=
i=0
while [ $i -lt ${#PUBDOMAINS[*]} ]; do
if [ "${PUBDOMAINS[$i]}" == "$hostdomain" ]; then
pri="$VSPREFIX${host%$hostdomain}${PRIDOMAINS[$i]}"
resolv_ips ips "$pri"
if [ -n "$ips" ]; then
hostip="${ips[0]}"
break
fi
fi
i=$(($i + 1))
done
if [ -z "$hostip" ]; then
pri="$VSPREFIX$host"
resolv_ips ips "$pri"
[ -n "$ips" ] && hostip="${ips[0]}"
fi
if [ -n "$pri" -a -n "$hostip" ]; then
enote "Correspondance automatique $host --> $pri"
read_value "Veuillez confirmer l'adresse IP d'écoute" hostip "$hostip" N
else
enote "Vous devez saisir l'adresse IP privée correspondant à $host"
read_value "Veuillez entrer l'adresse IP *privée* d'écoute" hostip "" N
fi
[ -n "$hostip" ] || ewarn "Vous avez choisi de ne pas spécifier d'adresse IP d'écoute. Il faudra corriger manuellement les fichiers générés"
fi
etitle "$host"
hostname="${host%%.*}"
clrconf="${clrtempl/SITE/$hostname}"
sslconf="${ssltempl/SITE/$hostname}"
certsconf="${certstempl/SITE/$hostname}"
wwwdir="${wwwtempl/SITE/$hostname}"
mkdir -p "$destdir/certsconf"
mkdir -p "$destdir/sites"
sedscript=
[ -n "$hostip" ] && sedscript="$sedscript
s/SITE_IP/$hostip/g"
sedscript="$sedscript
s/SITE.TLD/$host/g
s/SITE/$hostname/g"
if [ -z "$clrtempl" ]; then
:
elif [ ! -f "$templdir/$clrtempl" ]; then
ewarn "Le fichier $(ppath "$templdir/$clrtempl") n'existe pas. La copie ne sera pas complète"
elif [ -f "$destdir/sites/$clrconf" ]; then
ewarn "Le fichier sites/$clrconf existe déjà. Il ne sera pas écrasé."
else
estep "sites/$clrconf"
sed "$sedscript" "$templdir/$clrtempl" >"$destdir/sites/$clrconf" || die
fi
if [ -z "$ssltempl" ]; then
:
elif [ ! -f "$templdir/$ssltempl" ]; then
ewarn "Le fichier $(ppath "$templdir/$ssltempl") n'existe pas. La copie ne sera pas complète"
elif [ -f "$destdir/sites/$sslconf" ]; then
ewarn "Le fichier sites/$sslconf existe déjà. Il ne sera pas écrasé."
else
estep "sites/$sslconf"
sed "$sedscript" "$templdir/$ssltempl" >"$destdir/sites/$sslconf" || die
fi
if [ -z "$certstempl" ]; then
:
elif [ ! -f "$templdir/$certstempl" ]; then
ewarn "Le fichier $(ppath "$templdir/$certstempl") n'existe pas. La copie ne sera pas complète"
elif [ -f "$destdir/certsconf/$certsconf" ]; then
ewarn "Le fichier certsconf/$certsconf exite déjà. Il ne sera pas écrasé."
else
estep "certsconf/$certsconf"
sed "$sedscript" "$templdir/$certstempl" >"$destdir/certsconf/$certsconf" || die
fi
if [ -z "$wwwtempl" ]; then
:
elif [ ! -d "$templdir/$wwwtempl" ]; then
ewarn "Le répertoire $(ppath "$templdir/$wwwtempl") n'existe pas. La copie ne sera pas complète"
elif [ -d "$destdir/$wwwdir" ]; then
ewarn "Le répertoire $wwwdir existe déjà. Il ne sera pas écrasé."
else
estep "$wwwdir"
cpdirnovcs "$templdir/$wwwtempl" "$destdir/$wwwdir" || die
sed -i "$sedscript" "$destdir/$wwwdir/.udir" || die
fi
eend
if [ -n "$wwwtempl" ]; then
eimportant "Ne pas oublier le cas échéant de mettre à jour HTDMAPPINGS dans $(ppath "$config") e.g.
HTDMAPPINGS=($wwwdir)"
fi
fi fi

40
authftp
View File

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS
function display_help() { function display_help() {
uecho "$scriptname: Se connecter sur un site FTP authentifié uecho "$scriptname: Se connecter sur un site FTP authentifié
@ -27,11 +28,6 @@ OPTIONS
--tls --tls
Indiquer que la connexion se fera en TLS. Implique --lftp puisque ncftp Indiquer que la connexion se fera en TLS. Implique --lftp puisque ncftp
ne le supporte pas. ne le supporte pas.
--verify-certificate
Avec la connexion --tls, forcer la vérification du certificat, qui est
désactivée par défaut.
--sftp
Indiquer que la connexion se fait via SFTP. Implique --lftp --noproxy
note: A cause d'une limitation de lftp, ce n'est pas possible de se connecter 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 automatiquement avec lftp si le mot de passe contient une virgule. A cause de la
@ -39,14 +35,6 @@ 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 @" avec un mot de passe qui contient le caractère @"
} }
function hostkeyfailed_apropos() {
eecho "\
------------------------------------------------------------------------------------
Si le message 'Host key verification failed' apparait, lancer la commande suivante:
ssh -o StrictHostKeyChecking=no -o BatchMode=yes $1
------------------------------------------------------------------------------------"
}
AUTHFTP_PROXY_DISABLED=1 # par défaut, ne pas utiliser le proxy AUTHFTP_PROXY_DISABLED=1 # par défaut, ne pas utiliser le proxy
set_defaults proxy set_defaults proxy
set_defaults authftp set_defaults authftp
@ -55,8 +43,6 @@ noproxy="$AUTHFTP_PROXY_DISABLED"
lftp= lftp=
options=() options=()
tls= tls=
verify_certificate=no
sftp=
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-p,--proxy noproxy= \ -p,--proxy noproxy= \
@ -64,8 +50,6 @@ parse_opts "${PRETTYOPTS[@]}" \
-l,--lftp lftp=1 \ -l,--lftp lftp=1 \
-o:,--option: options \ -o:,--option: options \
--tls tls=1 \ --tls tls=1 \
--verify-certificate verify_certificate=yes \
--sftp sftp=1 \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
[ -n "$noproxy" -o -n "$AUTHFTP_PROXY_HOST" ] || die "AUTHFTP_PROXY_HOST doit être défini" [ -n "$noproxy" -o -n "$AUTHFTP_PROXY_HOST" ] || die "AUTHFTP_PROXY_HOST doit être défini"
@ -78,27 +62,13 @@ 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 mot de passe" password "$3"
read_value -i "Entrez le chemin" path "$4" N read_value -i "Entrez le chemin" path "$4" N
[ -n "$tls" -o -n "$sftp" ] && lftp=1 [ -n "$tls" ] && lftp=1
[ -n "$sftp" ] && noproxy=1
if [ -n "$lftp" ]; then if [ -n "$lftp" ]; then
if [ -n "$noproxy" ]; then if [ -n "$noproxy" ]; then
export LFTP_PASSWORD="$password" exec lftp -u "$login,$password" "${options[@]}" "ftp://$host/$path"
if [ -n "$sftp" ]; then
url="sftp://$host/$path"
hostkeyfailed_apropos "$login@$host"
else
url="ftp://$host/$path"
fi
exec lftp "${options[@]}" -e "\
set ssl:verify-certificate $verify_certificate
open -u $login --env-password $url"
else else
export LFTP_PASSWORD="${password}@${my_password}" exec lftp -u "${login}@${my_login}@${host},${password}@${my_password}" "${options[@]}" "ftp://$AUTHFTP_PROXY_HOST/$path"
url="ftp://$AUTHFTP_PROXY_HOST/$path"
exec lftp "${options[@]}" -e "\
set ssl:verify-certificate $verify_certificate
open -u ${login}@${my_login}@${host} --env-password $url"
fi fi
else else
if [ -n "$noproxy" ]; then if [ -n "$noproxy" ]; then

3
caturl
View File

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS
function display_help() { function display_help() {
uecho "$scriptname: Afficher une url uecho "$scriptname: Afficher une url

179
chrono.py
View File

@ -1,4 +1,4 @@
#!/usr/bin/env python2 #!/usr/bin/env python
# -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
u"""Afficher un chronomètre""" u"""Afficher un chronomètre"""
@ -32,12 +32,6 @@ def playSound(name=None):
def isnum(i): def isnum(i):
return type(i) in (IntType, LongType) return type(i) in (IntType, LongType)
RE_NUM = re.compile(r'\d+$')
def numof(s):
if isnum(s): return s
elif s is None: return None
elif RE_NUM.match(str(s)) is not None: return int(str(s))
else: return s
DEFAULT_TIMEOUT = '5' DEFAULT_TIMEOUT = '5'
@ -83,24 +77,13 @@ def parse_timeout(s):
return h * 3600 + m * 60 + s return h * 3600 + m * 60 + s
class Chrono: class Chrono:
MODE_MINUTEUR = 'M'
MODE_CHRONOMETRE = 'C'
STATE_STARTED = 'started'
STATE_PAUSED = 'paused'
STATE_STOPPED = 'stopped'
ZERO = None
state = None
mode = None
timeout = None timeout = None
elapsed = None
date_start = None date_start = None
max_elapsed = None date_end = None
initial = None initial = None
started = None
def __init__(self, timeout=None, start=False): def __init__(self, timeout=None, start=False):
self.ZERO = self.__delta(0)
self.set_timeout(timeout) self.set_timeout(timeout)
if start: self.start() if start: self.start()
@ -116,76 +99,37 @@ class Chrono:
return Timedelta(seconds=timeout) return Timedelta(seconds=timeout)
def set_timeout(self, timeout=None): def set_timeout(self, timeout=None):
if timeout == '': timeout = None
if timeout is not None and not isnum(timeout): if timeout is not None and not isnum(timeout):
tmp = parse_desthour(str(timeout)) tmp = parse_desthour(str(timeout))
if tmp is None: tmp = parse_timeout(timeout) if tmp is None: tmp = parse_timeout(timeout)
if tmp is None: tmp = int(timeout) * 60 if tmp is None: tmp = int(timeout) * 60
timeout = tmp timeout = tmp
if timeout == 0: timeout = None
self.timeout = timeout self.timeout = timeout
self.elapsed = self.ZERO if timeout is None: self.initial = '00:00'
self.state = self.STATE_STOPPED else: self.initial = self.__format(self.__delta(timeout))
if timeout is None:
self.mode = self.MODE_CHRONOMETRE
self.initial = self.__format(self.ZERO)
else:
self.mode = self.MODE_MINUTEUR
self.max_elapsed = self.__delta(timeout)
self.initial = self.__format(self.max_elapsed)
def is_chronometre(self):
return self.mode == self.MODE_CHRONOMETRE
def is_minuteur(self):
return self.mode == self.MODE_MINUTEUR
def get_elapsed(self):
if self.date_start is None: return self.ZERO
delta = Datetime.today() - self.date_start
return self.elapsed + delta
def start(self, timeout=None): def start(self, timeout=None):
if timeout is None: timeout = self.timeout if timeout is None: timeout = self.timeout
self.elapsed = self.ZERO
self.date_start = Datetime.today() self.date_start = Datetime.today()
self.state = self.STATE_STARTED if timeout is None: self.date_end = None
else: self.date_end = self.date_start + self.__delta(timeout)
def is_started(self): self.started = True
return self.state == self.STATE_STARTED
def pause(self):
if self.state == self.STATE_PAUSED:
self.date_start = Datetime.today()
self.state = self.STATE_STARTED
else:
self.elapsed = self.get_elapsed()
self.state = self.STATE_PAUSED
def is_paused(self):
return self.state == self.STATE_PAUSED
def stop(self): def stop(self):
self.elapsed = self.get_elapsed() self.started = False
self.state = self.STATE_STOPPED
def is_stopped(self): def is_started(self):
return self.state == self.STATE_STOPPED return self.started
def is_end(self): def is_end(self):
if not self.is_started(): return False return self.started and self.date_end is not None and Datetime.today() >= self.date_end
if not self.is_minuteur(): return False
elapsed = self.get_elapsed()
return elapsed >= self.max_elapsed
def __repr__(self): def __repr__(self):
elapsed = self.get_elapsed() if self.is_started() else self.elapsed now = Datetime.today()
if self.is_minuteur(): if self.date_end is None: delta = now - self.date_start
delta = self.max_elapsed - elapsed elif now > self.date_end: delta = Timedelta()
if delta < self.ZERO: delta = self.ZERO else: delta = self.date_end - now
return self.__format(delta) return self.__format(delta)
else:
return self.__format(elapsed)
def run_chronometre(timeout=None, autostart=False): def run_chronometre(timeout=None, autostart=False):
from Tkinter import Tk, Toplevel, Frame, Label, Entry, Button from Tkinter import Tk, Toplevel, Frame, Label, Entry, Button
@ -265,9 +209,11 @@ def run_chronometre(timeout=None, autostart=False):
class Application(Frame): class Application(Frame):
root = None root = None
chrono = None chrono = None
stop = None
def __init__(self, timeout=None, autostart=False, **kw): def __init__(self, timeout=None, autostart=False, **kw):
self.chrono = Chrono(timeout) self.chrono = Chrono(timeout)
self.stop = False
root = Tk() root = Tk()
root.title("Chronomètre") root.title("Chronomètre")
@ -275,8 +221,6 @@ def run_chronometre(timeout=None, autostart=False):
root.rowconfigure(0, weight=1) root.rowconfigure(0, weight=1)
root.bind("c", lambda event: self.do_config()) root.bind("c", lambda event: self.do_config())
root.bind("s", lambda event: self.do_start()) root.bind("s", lambda event: self.do_start())
root.bind("p", lambda event: self.do_pause())
root.bind("<space>", lambda event: self.do_pause())
root.bind("q", lambda event: self.quit()) root.bind("q", lambda event: self.quit())
self.root = root self.root = root
@ -284,22 +228,19 @@ def run_chronometre(timeout=None, autostart=False):
Frame.__init__(self, **kw) Frame.__init__(self, **kw)
self.TIME = Label(self, width=10, height=2, text=self.chrono.initial, padx=30, pady=10, font=('Helvetica', 18, "normal")) self.TIME = Label(self, width=10, height=2, text=self.chrono.initial, padx=30, pady=10, font=('Helvetica', 18, "normal"))
self.START = Button(self, text="Start", command=self.do_start) self.START = Button(self, text="Démarrer", command=self.do_start)
self.PAUSE = Button(self, text="Pause", command=self.do_pause, state="disabled")
self.CONFIG = Button(self, text="Config", command=self.do_config) self.CONFIG = Button(self, text="Config", command=self.do_config)
self.QUIT = Button(self, text="Quit", command=self.quit) self.QUIT = Button(self, text="Quitter", command=self.quit)
self.grid(column=0, row=0, sticky='nsew') self.grid(column=0, row=0, sticky='nsew')
self.TIME.grid(column=0, row=0, columnspan=4, sticky='nsew') self.TIME.grid(column=0, row=0, columnspan=3, sticky='nsew')
self.START.grid(column=0, row=1, sticky='ew') self.START.grid(column=0, row=1, sticky='ew')
self.PAUSE.grid(column=1, row=1, sticky='ew') self.CONFIG.grid(column=1, row=1, sticky='ew')
self.CONFIG.grid(column=2, row=1, sticky='ew') self.QUIT.grid(column=2, row=1, sticky='ew')
self.QUIT.grid(column=3, row=1, sticky='ew')
self.columnconfigure(0, weight=2) self.columnconfigure(0, weight=2)
self.columnconfigure(1, weight=2) self.columnconfigure(1, weight=1)
self.columnconfigure(2, weight=1) self.columnconfigure(2, weight=2)
self.columnconfigure(3, weight=1)
self.rowconfigure(0, weight=1) self.rowconfigure(0, weight=1)
if autostart: self.do_start() if autostart: self.do_start()
@ -314,27 +255,15 @@ def run_chronometre(timeout=None, autostart=False):
self.root.after(300, self.update_time) self.root.after(300, self.update_time)
def do_start(self): def do_start(self):
self.PAUSE.configure(state="normal", text="Pause")
self.START.configure(text="reStart")
self.chrono.start() self.chrono.start()
self.update_time() self.update_time()
def do_pause(self):
self.chrono.pause()
if self.chrono.is_paused():
self.PAUSE.configure(text="unPause")
else:
self.PAUSE.configure(text="Pause")
self.update_time()
def do_config(self): def do_config(self):
chrono = self.chrono chrono = self.chrono
chrono.stop() chrono.stop()
config = Config(self.root) config = Config(self.root)
if config.have_result: if config.have_result:
try: try:
self.PAUSE.configure(text="Pause", state="disabled")
self.START.configure(text="Start")
chrono.set_timeout(config.result) chrono.set_timeout(config.result)
self.TIME.configure(text=chrono.initial) self.TIME.configure(text=chrono.initial)
except: except:
@ -344,55 +273,26 @@ def run_chronometre(timeout=None, autostart=False):
Application(timeout, autostart).mainloop() Application(timeout, autostart).mainloop()
if __name__ == '__main__': if __name__ == '__main__':
from argparse import ArgumentParser, HelpFormatter from argparse import ArgumentParser, RawTextHelpFormatter
if sys.argv[1:2] == ['--compat']:
# Avec l'argument --compat, désactiver la classe FancyHelpFormatter qui
# se base sur une API non documentée
sys.argv = sys.argv[0:1] + sys.argv[2:]
FancyHelpFormatter = HelpFormatter
else:
class FancyHelpFormatter(HelpFormatter):
"""Comme HelpFormatter, mais ne touche pas aux lignes qui commencent par les
caractères '>>>'. Cela permet de mixer du texte formaté et du texte non
formaté.
"""
def _fill_text(self, text, width, indent):
return ''.join([indent + line for line in text.splitlines(True)])
def _split_lines(self, text, width):
lines = ['']
for line in text.splitlines():
if line.startswith('>>>'):
lines.append(line)
lines.append('')
else:
lines[-1] += '\n' + line
lines = filter(None, lines)
texts = []
for line in lines:
if line.startswith('>>>'):
texts.append(line[3:])
else:
texts.extend(super(FancyHelpFormatter, self)._split_lines(line, width))
return texts
AP = ArgumentParser( AP = ArgumentParser(
formatter_class=RawTextHelpFormatter,
usage=u"%(prog)s [options] [TIMEOUT]", usage=u"%(prog)s [options] [TIMEOUT]",
description=u"Afficher un chronomètre", description=u"Afficher un chronomètre",
epilog=u"Si TIMEOUT est spécifié, par défaut le décompte démarre automatiquement.", epilog=u"Si TIMEOUT est spécifié, par défaut le décompte démarre automatiquement."
formatter_class=FancyHelpFormatter,
) )
AP.set_defaults(autostart=None, timeout=None) AP.set_defaults(autostart=None, timeout=None)
AP.add_argument('timeout', metavar='TIMEOUT', nargs='?', AP.add_argument('timeout', metavar='TIMEOUT', nargs='?',
help=u"""\ help=u"""\
>>> '' (valeur vide) (valeur vide)
chronomètre qui démarre à 0:00 et ne s'arrête pas chronomètre qui démarre à 0:00 et ne s'arrête pas
>>> 'H:M:S' (heures:minutes:secondes) H:M:S (heures:minutes:secondes)
>>> ou 'M:S' (minutes:secondes) ou M:S (minutes:secondes)
>>> ou 'M' (minutes) ou M (minutes)
minuteur qui démarre à H:M:S et fait un décompte jusqu'à 0:00. A la fin minuteur qui démarre à H:M:S et fait un décompte jusqu'à 0:00. A la fin
du décompte, une sonnerie retentit. du décompte, une sonnerie retentit.
>>> '@H[:M[:S]]' @H[:M[:S]]
minuteur qui fonctionne comme précédemment, sauf qu'on spécifie l'heure minuteur qui fonctionne comme précédemment, sauf qu'on spécifie l'heure
d'arrivée, et que la durée est calculée automatiquement""") d'arrivée, et que la durée est calculée automatiquement""")
AP.add_argument('-n', '--no-autostart', dest='autostart', action='store_false', AP.add_argument('-n', '--no-autostart', dest='autostart', action='store_false',
help=u"Ne pas démarrer automatiquement le décompte même si TIMEOUT est spécifié.") help=u"Ne pas démarrer automatiquement le décompte même si TIMEOUT est spécifié.")
AP.add_argument('-s', '--autostart', dest='autostart', action='store_true', AP.add_argument('-s', '--autostart', dest='autostart', action='store_true',
@ -405,6 +305,7 @@ d'arrivée, et que la durée est calculée automatiquement""")
timeout = o.timeout timeout = o.timeout
if timeout is None: timeout = DEFAULT_TIMEOUT if timeout is None: timeout = DEFAULT_TIMEOUT
elif timeout == '': timeout = None
o.timeout = timeout o.timeout = timeout
run_chronometre(o.timeout, o.autostart) run_chronometre(o.timeout, o.autostart)

View File

@ -411,7 +411,7 @@ javac* | jikes*)
fi fi
[[ ! -z "${execute:="${compilerDir}java -cp $cacheDir${classPath:+:$classPath} $mainClass"}" ]] [[ ! -z "${execute:="${compilerDir}java -cp $cacheDir${classPath:+:$classPath} $mainClass"}" ]]
# Prepare to tell javac to compile for the latest language version it supports # Prepare to tell javac to compile for the latest language version it supports
sourceVersion="-source $(${compilerDir}java -version 2>&1 | sed -n '1{s/.*"\(.*\)".*/\1/; s/^1\.//; s/\..*//; p}')" sourceVersion="-source $(${compilerDir}java -version 2>&1 | sed -n '1s,[^"]*"\([1-9][1-9]*\.[1-9][1-9]*\).*,\1,p')"
;; ;;
jikes*) jikes*)
if [[ -z "$classPath" && -z "$compilerArgs" && -z "$CLASSPATH" ]] ; then if [[ -z "$classPath" && -z "$compilerArgs" && -z "$CLASSPATH" ]] ; then

View File

@ -1,172 +0,0 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
function display_help() {
uecho "$scriptname: créer un utilisateur sudoer et lui installer une clé publique ssh
USAGE
$scriptname user [-p pubkey]
OPTIONS
-p, --pkfile PKFILE
Installer la clé publique ssh contenue dans le fichier spécifié. Par
défaut, prendre le fichier ~/.ssh/id_rsa.pub de l'utilisateur courant.
-s, --pkstring PUBKEY
Installer la clé publique ssh spécifiée. Cette option avancée n'est pas
utilisée en temps normal. Elle a la priorité sur l'option --pkfile
-l, --luser
Ne pas donner à l'utilisateur le droit de sudoer.
-h, --host [USER@]HOST
Créer l'utilisateur sur l'hôte distant spécifié. Si l'utilisateur
distant n'est pas root, il doit être sudoer.
-T, --tmproot TMPROOT
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
/var/tmp. Cette option est utile pour certains serveurs, qui ont un /tmp
minuscule.
-S, --ssh SSH
Spécifier le programme à utiliser pour la connection par ssh."
}
function create_user() {
# Créer le user, si nécessaire
# retourner vrai si le user a été créé, faux si ce n'était pas nécessaire
local user="$1" password="$2"
[ -z "$(getent passwd "$user")" ] || return 1
estep "Creation de l'utilisateur $user..."
useradd -s /bin/bash -m "$user"
[ -n "$password" ] || return 0
if ! (echo "$password" | passwd --stdin "$user" 2>/dev/null); then
echo "$user:$password" | chpasswd
fi
return 0
}
function init_sudoer() {
local user="$1"
local TAB=$'\t'
if [ -d /etc/sudoers.d ]; then
if [ ! -f "/etc/sudoers.d/$user" ]; then
estep "Ajout de $user comme sudoer dans /etc/sudoers.d/$user"
echo "$user${TAB}ALL=(ALL) NOPASSWD: ALL" >"/etc/sudoers.d/$user"
chmod 440 "/etc/sudoers.d/$user"
fi
elif [ -f /etc/sudoers ]; then
if ! grep -q "^$user" /etc/sudoers; then
estep "Ajout de user comme sudoer dans /etc/sudoers..."
echo "$user${TAB}ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers
fi
fi
}
function install_pubkeys() {
# Installer la clé $1 pour l'utilisateur $2
# $1 peut contenir autant de clés que nécessaire, une par ligne
local user="$1" pubkeys="$2"
local homedir="$(eval "echo ~$user")"
[ -d "$homedir" ] || return
local sshdir="$homedir/.ssh"
if [ ! -d "$sshdir" ]; then
mkdir -p "$sshdir"
chmod 700 "$sshdir"
chown -R "$user:" "$sshdir"
fi
local ak="$sshdir/authorized_keys"
if [ ! -f "$ak" ]; then
touch "$ak"
chown "$user:" "$ak"
fi
local -a pks
local pk
array_from_lines pks "$pubkeys"
for pk in "${pks[@]}"; do
if ! grep -q "$pk" "$ak"; then
estep "Installation de la clé ${pk:0:20}... pour $user"
echo "$pk" >>"$ak"
fi
done
}
pkfile=
pkstring=
luser=
host=
tmproot=
SSH=
args=(
--help '$exit_with display_help'
-p:,--pkfile: pkfile=
-s:,--pkstring: pkstring=
-l,--luser luser=1
-h:,-H:,--host: host=
-T:,--tmproot: tmproot=
-S:,--ssh: SSH=
)
parse_args "$@"; set -- "${args[@]}"
user="$1"
[ -n "$user" ] || die "Vous devez spécifier l'utilisateur à créer"
if [ -z "$pkstring" ]; then
if [ -z "$pkfile" ]; then
if [ -f ~/.ssh/id_rsa.pub ]; then pkfile=~/.ssh/id_rsa.pub
elif [ -f ~/.ssh/id_dsa.pub ]; then pkfile=~/.ssh/id_dsa.pub
fi
fi
if [ -f "$pkfile" ]; then pkstring="$(<"$pkfile")"
elif [ -n "$pkfile" ]; then die "$pkfile: fichier introuvable"
fi
fi
if [ -z "$host" ]; then
# déploiement local
run_as_root ${pkstring:+-s "$pkstring"} ${luser:+-l} "$user"
create_user "$user"
[ -z "$luser" ] && init_sudoer "$user"
[ -n "$pkstring" ] && install_pubkeys "$user" "$pkstring"
exit 0
else
# déploiement distant
if [ -n "$host" ]; then
splituserhost "$host" remoteuser host
[ -n "$remoteuser" ] || remoteuser=root
fi
if [ -n "$SSH" ]; then
ssh=("$SSH" -o StrictHostKeyChecking=no -o ConnectTimeout=2 -qt)
scp=(scp -S "$SSH" -o StrictHostKeyChecking=no -o ConnectTimeout=2 -q)
else
ssh=(ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 -qt)
scp=(scp -o StrictHostKeyChecking=no -o ConnectTimeout=2 -q)
fi
ac_set_tmpdir workdir
mkdir "$workdir/lib"
ulibsync "$workdir/lib"
cp "$script" "$workdir"
echo "#!/bin/bash
$(qvals "./$scriptname" ${pkstring:+-s "$pkstring"} ${luser:+-l} "$user")" >"$workdir/do_remote"
chmod +x "$workdir/do_remote"
ac_set_tmpfile archive
archivename="$(basename "$archive")"
"$scriptdir/mkusfx" --tmp-archive --bare -o "$archive" "$workdir" ./do_remote || die
estep "Copie du script sur $remoteuser@$host"
"${scp[@]}" "$archive" "$remoteuser@$host:" || die
estep "Exécution du script"
"${ssh[@]}" "$remoteuser@$host" "\
__estack=$(qval "$__estack")
__tlevel=$(qval "$__tlevel")
export __estack __tlevel
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"})"
r=$?
ac_clean "$workdir"
exit $r
fi

65
cssh
View File

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS
function display_help() { function display_help() {
uecho "$scriptname: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant uecho "$scriptname: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant
@ -22,19 +23,55 @@ vars="$("$scriptdir/ussh" --parse "$@")" || die
eval "$vars" eval "$vars"
[ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter" [ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter"
[ ${#args[*]} -gt 0 ] && cmd="$(qvals "${args[@]}"); " || cmd= cmd="'$(quoted_args "${args[@]}")
cmd="$cmd "'
export LOCKPRG=/bin/true; $(<"$scriptdir/Sscreen")" function __ask() {
cmd="'${cmd//\'/\'\\\'\'}'" 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
'\'
for host in "${hosts[@]}"; do for host in "${hosts[@]}"; do
"$ssh" \ ${exec:+exec} "$ssh" "${options[@]}" -t "$host" -- /bin/bash -c "$cmd"
"${options[@]}" -qt "$host" -- \
"export LOCKPRG=/bin/true; [ -x /usr/local/nutools/Sscreen ] && exec /usr/local/nutools/Sscreen $(qvals "${args[@]}") || exit 123"
if [ $? -eq 123 ]; then
# pas de Sscreen en face, le faire à la main
${exec:+exec} \
"$ssh" "${options[@]}" -t "$host" -- \
/bin/bash -c "$cmd"
fi
done done

View File

@ -1,124 +0,0 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
[ -n "$COMPOSE_V1" ] && DOCKER_COMPOSE=(docker-compose) || DOCKER_COMPOSE=(docker compose)
function display_help() {
uecho "$scriptname: se connecter à la base MySQL
USAGE
$scriptname [DATABASE]
$scriptname -d [-uUSER [-pPASSWORD]] DATABASES... >backup.sql
$scriptname -c [-uUSER [-pPASSWORD]] <backup.sql
OPTIONS
--compose-v1
Forcer l'utilisation de docker-compose v1
-h, -s, --service SERVICE
Spécifier le nom du service. La valeur par défaut est db
-i, --ipnum IPNUM
Si le service est dans plusieurs réseaux, sélectionner le numéro du
réseau à attaquer en commençant à 1 (la liste sera affichée si cette
option n'est pas spécifiée)
-c, --mysql-cmd
Lancer 'mysql -hSERVICE_IP' avec les arguments supplémentaires fournis
sur la ligne de commande
-d, --mysqldump-cmd
Lancer 'mysqldump --databases --add-drop-database -hSERVICE_IP' avec
les arguments supplémentaires fournis sur la ligne de commande
-k, --klean
Lancer la commande 'klean' dans le container spécifié (supprime toutes
les données et relance le container)
-u, --user USER
-p, --password PASSWORD
Paramètres supplémentaires utilisés uniquement avec les options -c et -d"
}
service=db
ipnum=
mysql_cmd=
mysqldump_cmd=
klean=
user=
password=
args=(
--help '$exit_with display_help'
--compose-v1 '$DOCKER_COMPOSE=(docker-compose)'
-h:,-s:,--service: service=
-i:,--ipnum: ipnum=
-c,--mysql-cmd mysql_cmd=1
-d,--mysqldump-cmd mysqldump_cmd=1
-k,--klean klean=1
-u:,--user: user=
-p:,--password: password=
)
parse_args "$@"; set -- "${args[@]}"
[ -n "$service" ] || die "Vous devez spécifier le nom du service"
found=
first=1
while true; do
if [ -f composer.json ]; then
found=1
break
fi
first=
cd ..
if [ "$(pwd)" == "$HOME" ]; then
die "Cette commande ne peut être lancée que depuis un projet Composer"
fi
done
if [ -z "$first" ]; then
enote "Le répertoire du projet est $(ppath . ~)"
fi
###
function die_not_found() { die "$service: service introuvable. vérifiez que le projet est actuellement up"; }
setx cid="${DOCKER_COMPOSE[@]}" ps -q "$service" 2>/dev/null || die_not_found
[ -n "$cid" ] || die_not_found
edebug "$service id: $cid"
function die_not_found() { die "$service: $cid: ip introuvable"; }
setx ip=docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}},{{end}}' "$cid" || die_not_found
[ -n "$ip" ] || die_not_found
ipdesc="${ip%,}"
if [ -z "$ipnum" ] && [[ "$ipdesc" == *,* ]]; then
enote "Le service est accessible sur plusieurs adresses ip: $ipdesc"
enote "Pensez à spécifier l'option -i pour désigner l'adresse à utiliser (-i1 pour la première, -i2 pour la seconde, etc.)"
fi
if [ -n "$ipnum" ]; then
let ipnum=ipnum-1
while [ $ipnum -gt 0 ]; do
ip="${ip#*,}"
let ipnum=ipnum-1
done
fi
ip="${ip%%,*}"
[ -n "$ip" ] || die_not_found
edebug "$service ip: $ip"
if [ -n "$mysql_cmd" ]; then
mysql -h"$ip" ${user:+-u"$user"} ${password:+-p"$password"} "$@"
elif [ -n "$mysqldump_cmd" ]; then
mysqldump --databases --add-drop-database -h"$ip" ${user:+-u"$user"} ${password:+-p"$password"} "$@"
elif [ -n "$klean" ]; then
estep "klean"
docker exec "$cid" klean
estep "wait 10sec..."
sleep 10
estep "start"
"${DOCKER_COMPOSE[@]}" start "$service"
else
[ -f bin/conndev.php ] || die "Impossible de trouver le script compagnon conndev.php"
mysql_cmd="$(php bin/conndev.php "$ip" "$@")"
edebug "mysql_cmd: $mysql_cmd"
eval "$mysql_cmd"
fi

View File

@ -1,60 +0,0 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
[ -n "$COMPOSE_V1" ] && DOCKER_COMPOSE=(docker-compose) || DOCKER_COMPOSE=(docker compose)
function display_help() {
uecho "$scriptname: ouvrir un shell dans le container
USAGE
$scriptname [CMD...]
OPTIONS
--compose-v1
Forcer l'utilisation de docker-compose v1
-h, -s, --service SERVICE
Spécifier le nom du service sur lequel ouvrir le shell
-d, --db
équivalent à -s db
-w, --web
équivalent à -s web (c'est la valeur par défaut)"
}
service=web
args=(
--help '$exit_with display_help'
--compose-v1 '$DOCKER_COMPOSE=(docker-compose)'
-h:,-s:,--service: service=
-d,--db service=db
-w,--web service=web
)
parse_args "$@"; set -- "${args[@]}"
[ -n "$service" ] || die "Vous devez spécifier le nom du service"
found=
first=1
while true; do
if [ -f composer.json ]; then
found=1
break
fi
first=
cd ..
if [ "$(pwd)" == "$HOME" ]; then
die "Cette commande ne peut être lancée que depuis un projet Composer"
fi
done
if [ -z "$first" ]; then
enote "Le répertoire du projet est $(ppath . ~)"
fi
###
setx cid="${DOCKER_COMPOSE[@]}" ps -q "$service" 2>/dev/null || die "$service: service introuvable"
cmd=("$@")
[ ${#cmd[*]} -gt 0 ] || cmd=(bash)
"${DOCKER_COMPOSE[@]}" exec "$service" "${cmd[@]}"

View File

@ -1,282 +0,0 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
function display_help() {
uecho "$scriptname: mettre à jour un module ur/* ou lib/* sans utiliser composer
ça permet de faire du développement plus rapidement sans utiliser les dépôts de
type path
USAGE
$scriptname modules...
OPTIONS
-n, --fake
Afficher simplement ce qui serait fait
-q, --quiet
Ne pas lancer rsync en mode verbose
-g, --no-wait
Ne pas attendre avant de faire git commit
--rsync
Mettre à jour les répertoires dans vendor/ qui ne sont pas des liens
symboliques à partir des projets dépendants correspondants. Les liens
symboliques créés avec --link sont ignorés. C'est l'option par défaut.
-l, --link
Transformer les clones de dépôts dans vendor/ en liens symboliques vers
les projets dépendants correpondants.
-k, --copy
Transformer les liens symboliques dans vendor/ en copies des projets
dépendants correspondants. Les répertoires qui ne sont pas des liens
symboliques sont ignorés.
Cette option peut être considérée comme le contraire de --link
-i, --install
Supprimer les répertoires des projets dépendants dans vendor/, qu'il
s'agisse de liens symboliques ou de répertoires normaux, puis les faire
recréer par 'composer i'
Celà permet de ramener le projet à l'état original.
-j, --reinstall-link
Supprimer les répertoires des projets dépendants dans vendor/ s'il
s'agit de liens symboliques, puis les faire recréer par 'composer i'
Cette variante est plus rapide que --install puisqu'on ne cherche pas à
tout recréer.
-u, --update
Supprimer les répertoires des projets dépendants dans vendor/, qu'il
s'agisse de liens symboliques ou de répertoires normaux, puis les faire
recréer par 'composer u'
Celà permet de mettre à jour le projet sans les erreurs qui résultent
des modifications faites par les autres actions.
-w, --update-commit
Mettre à jour le projet avec --update puis enregistrer les modifications
éventuelles dans git
--ud, --update-deps
Mettre à jour les projets dépendants avec --update-commit avant de
mettre à jour le projet courant.
--ur, --update-recursive
Mettre à jour de façon récursive tous les projets dépendants.
NB: les modifications dans les projets dépendants seront automatiquement
enregistrées dans git."
}
fake=
verbose=1
nowait=
action=rsync
args=(
--help '$exit_with display_help'
-d:,--project-dir: projdir=
-n,--fake fake=1
-q,--quiet verbose=
-g,--no-wait nowait=1
-l,--link action=link
-k,--copy action=copy
-i,--install action=install
-j,--reinstall-link action=reinstall-link
-u,--update action=update
-w,--update-commit action=update-commit
--ud,--update-deps action=update-deps
--ur,--update-recursive action=update-recursive
)
parse_args "$@"; set -- "${args[@]}"
if [ -d "$projdir" ]; then
cd "$projdir"
elif [ -e "$projdir" ]; then
die "$projdir: répertoire introuvable"
fi
found=
first=1
while true; do
if [ -f composer.json ]; then
found=1
break
fi
first=
cd ..
if [ "$(pwd)" == "$HOME" ]; then
die "Cette commande ne peut être lancée que depuis un projet Composer"
fi
done
if [ -z "$first" ]; then
enote "Le répertoire du projet est $(ppath . ~)"
fi
if [ "$action" == update-deps -o "$action" == update-recursive ]; then
# avec update-deps et update-recursive, tous les modules doivent être
# considérés
set --
fi
###
if [ $# -eq 0 ]; then
setx -a ms=list_dirs vendor "ur/*" "lib/*"
set -- "${ms[@]}"
fi
function check_module() {
[ -d "../$m" ] || die "$m: module introuvable"
}
function update_with_rsync() {
local -a rsync_args
rsync_args=(
-a ${fake:+-n} ${verbose:+-v}
--delete
-f "- /.git/"
-f "- /vendor/"
"../$m/" "vendor/$p"
)
rsync "${rsync_args[@]}"
}
deps=()
modules=()
for m in "$@"; do
m="${m#vendor/}" # pour permettre de spécifier le chemin directement
m="${m//\//-}"
case "$m" in
ur-*|lib-*) ;;
*) m="ur-$m";;
esac
modules+=("$m")
p="${m//-/\/}"
check_module
case "$action" in
rsync)
# Action par défaut: ignorer les liens et synchroniser les copies
if [ ! -L "vendor/$p" ]; then
etitle "$m"
update_with_rsync
eend
fi
;;
link)
# Ignorer les liens et transformer les copies en liens
if [ ! -L "vendor/$p" ]; then
link="$m"
path="/project/vendor/$p"
path="${path%/*}"
while [ -n "$path" ]; do
link="../$link"
path="${path%/*}"
done
etitle "$m"
estep "suppr. vendor/$p"
rm -rf "vendor/$p"
mkdirof "vendor/$p"
estep "vendor/$p --> $link"
ln -s "$link" "vendor/$p"
eend
fi
;;
copy)
# Transformer les liens en copie et les synchroniser
etitle "$m"
if [ -L "vendor/$p" ]; then
estep "suppr. vendor/$p"
rm -f "vendor/$p"
fi
update_with_rsync
eend
;;
install)
# Supprimer les liens et répertoires...
etitle "$m"
if [ -e "vendor/$p" ]; then
estep "suppr. vendor/$p"
rm -rf "vendor/$p"
fi
array_add deps "$p"
eend
;;
reinstall-link)
# Supprimer les liens uniquement...
etitle "$m"
if [ -L "vendor/$p" ]; then
estep "suppr. vendor/$p"
rm -f "vendor/$p"
fi
array_add deps "$p"
eend
;;
update|update-commit|update-deps|update-recursive)
# Supprimer les liens et répertoires...
etitle "$m"
if [ -e "vendor/$p" ]; then
estep "suppr. vendor/$p"
rm -rf "vendor/$p"
fi
array_add deps "$p"
eend
;;
*) die "$action: action inconnue";;
esac
done
case "$action" in
install|reinstall-link)
# ... puis installer les dépendances
estep "Installation des dépendances"
"$scriptdir/dk" ci || die
;;
update|update-commit)
# ... puis mettre à jour les dépendances
estep "Mise à jour des dépendances"
"$scriptdir/dk" cu "${deps[@]}" || die
if [ "$action" == update-commit ]; then
if [ -z "$nowait" ]; then
# laisser le temps à @$*! d'eclipse qui met à jour automatiquement le projet...
estep "Attendre 10 secondes avant git commit"
sleep 10
fi
estep "Enregistrement dans git"
pci -A "maj deps"
fi
;;
update-deps)
# mettre à jour les dépendances directes
for m in "${modules[@]}"; do
etitle "Mise à jour projet dépendant: $m"
"$script" -d "../$m" -w
eend
done
estep "Mise à jour des dépendances"
"$scriptdir/dk" cu || die
if [ -z "$nowait" ]; then
# laisser le temps à @$*! d'eclipse qui met à jour automatiquement le projet...
estep "Attendre 10 secondes avant git commit"
sleep 10
fi
estep "Enregistrement dans git"
pci -A "maj deps"
;;
update-recursive)
# mettre à jour les dépendances de façon récursive
for m in "${modules[@]}"; do
etitle "Mise à jour récursive: $m"
"$script" -d "../$m" --ur
eend
done
estep "Mise à jour des dépendances"
"$scriptdir/dk" cu || die
if [ -z "$nowait" ]; then
# laisser le temps à @$*! d'eclipse qui met à jour automatiquement le projet...
estep "Attendre 10 secondes avant git commit"
sleep 10
fi
estep "Enregistrement dans git"
pci -A "maj deps"
;;
esac

3080
dk

File diff suppressed because it is too large Load Diff

3251
dkbuild

File diff suppressed because it is too large Load Diff

132
dmcerts
View File

@ -1,132 +0,0 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
urequire install
function display_help() {
uecho "$scriptname: gérer les certificats de docker-machine
Les certificats créés par docker-machine ont une durée trop courte à mon goût.
Ce script permet de les recréer avec une durée de 30 ans pour le CA et le
certificat client, et de 10 ans pour chaque machine
USAGE
$scriptname [host]"
}
args=(
--help '$exit_with display_help'
)
parse_args "$@"; set -- "${args[@]}"
dmdir="$HOME/.docker/machine"
cadir="$dmdir/dmcerts"
cakey="$cadir/dmca.key"
cacsr="$cadir/dmca.csr"
cacrt="$cadir/dmca.crt"
cacrl="$cadir/dmca.crl"
if [ ! -d "$cadir" ]; then
enote "Le répertoire $cadir va être créé. Ne faites cela que si c'est la première fois. Sinon, récupérez le répertoire déjà créé par ailleurs"
ask_yesno "Voulez-vous continuer?" N || die
mkdir "$cadir"
chmod 700 "$cadir"
mkdir "$cadir"/{openssl,newcerts}
touch "$cadir/index.txt"
echo 01 >"$cadir/serial"
for src in "$scriptdir"/lib/dmcerts_openssl_*.cnf; do
dest="$cadir/openssl/${src#$scriptdir/lib/dmcerts_openssl_}"
cp "$src" "$dest"
done
sed -i "s/^dir = .*/dir = ${cadir//\//\\\/}/" "$cadir/openssl/"*.cnf
openssl req -config "$cadir/openssl/ca.cnf" -batch -new -nodes -keyout "$cakey" -out "$cacsr" &&
openssl ca -config "$cadir/openssl/ca.cnf" -batch -notext -out "$cacrt" -days 10950 -keyfile "$cakey" -selfsign -extensions v3_ca -infiles "$cacsr" &&
openssl ca -config "$cadir/openssl/ca.cnf" -batch -gencrl -out "$cacrl" ||
die "Une erreur s'est produite. Veuillez supprimer $cadir et recommencer"
fi
clientkey="$cadir/dmclient.key"
clientcsr="$cadir/dmclient.csr"
clientcrt="$cadir/dmclient.crt"
clientcnf="$cadir/openssl/client.cnf"
if [ ! -f "$clientcrt" ]; then
#sed -i "s/^dir = .*/dir = ${cadir//\//\\\/}/" "$clientcnf"
subj="/countryName=FR/stateOrProvinceName=La Reunion/localityName=Sainte Clotilde/organizationName=jclain/CN=dmclient/"
openssl req -config "$clientcnf" -batch -new -nodes -subj "$subj" -keyout "$clientkey" -out "$clientcsr" &&
openssl ca -config "$clientcnf" -batch -keyfile "$cakey" -notext -out "$clientcrt" -infiles "$clientcsr" &&
chmod 644 "$clientcrt" &&
chmod 600 "$clientkey" &&
rm -f "$clientcsr" ||
die "Une erreur s'est produite pendant la génération du certificat client"
fi
estep "Vérification certificats locaux"
copy_update "$cacrt" "$dmdir/certs/ca.pem"
copy_update "$cakey" "$dmdir/certs/ca-key.pem"
copy_update "$clientcrt" "$dmdir/certs/cert.pem"
copy_update "$clientkey" "$dmdir/certs/key.pem"
first=1
for host in "$@"; do
if [ -n "$first" ]; then
servercnf="$cadir/openssl/server.cnf"
#sed -i "s/^dir = .*/dir = ${cadir//\//\\\/}/" "$servercnf"
else
first=
fi
etitle "$host"
machine="${host%%.*}"
machinedir="$dmdir/machines/$machine"
if [ ! -d "$machinedir" ]; then
eerror "$machine: machine inexistante"
fi
serverkey="${machine}-server.key"
servercsr="${machine}-server.csr"
servercrt="${machine}-server.crt"
if [ ! -f "$servercrt" ]; then
subj="/countryName=FR/stateOrProvinceName=La Reunion/localityName=Sainte Clotilde/organizationName=jclain/CN=dmserver-$host/"
sans="DNS:$host,DNS:localhost"
sed -i "s/^subjectAltName = .*/subjectAltName = $sans/" "$servercnf"
openssl req -config "$servercnf" -batch -new -nodes -subj "$subj" -keyout "$serverkey" -out "$servercsr" &&
openssl ca -config "$servercnf" -batch -keyfile "$cakey" -notext -out "$servercrt" -infiles "$servercsr" &&
chmod 644 "$servercrt" &&
chmod 600 "$serverkey" &&
rm -f "$servercsr" ||
die "Une erreur s'est produite pendant la génération du certificat serveur"
fi
estep "machine: $machine"
ask_yesno "Voulez-vous remplacer les certificats distants et locaux?" O || continue
estep "Copie distante"
scp "$cacrt" "root@$host:/etc/docker/ca.pem" || die
scp "$servercrt" "root@$host:/etc/docker/server.pem" || die
scp "$serverkey" "root@$host:/etc/docker/server-key.pem" || die
estep "Redémarrage docker distant"
ssh "root@$host" "service docker restart" || die
estep "Copie locale"
copy_update "$cacrt" "$machinedir/ca.pem"
copy_update "$cakey" "$machinedir/ca-key.pem"
copy_update "$clientcrt" "$machinedir/cert.pem"
copy_update "$clientkey" "$machinedir/key.pem"
copy_update "$servercrt" "$machinedir/server.pem"
copy_update "$serverkey" "$machinedir/server-key.pem"
estep "Test de l'accès au serveur"
setx env=docker-machine env "$machine" || die
eval "$env"
echo "$machine docker version: $(docker system info -f '{{.ServerVersion}}')"
estep "Suppression des fichiers temporaires"
rm -f "$servercrt" "$serverkey"
done
enote "N'oubliez pas de re-exporter les docker-machines qui ont été regénérées"

160
dmctl
View File

@ -1,160 +0,0 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
function display_help() {
uecho "$scriptname: import/exporter une docker-machine
USAGE
$scriptname -d NAME
$scriptname -l ARCHIVE
$scriptname -a ARCHIVEs...
OPTIONS
-d, --dump
Exporter la machine
-l, --load
Importer la machine à partir de l'archive spécifiée
-a, --load-all
Importer toutes les machines depuis le répertoire spécifié"
}
function dump_machine() {
local name srcdir workdir destdir archive i
name="$1"
[ -n "$name" ] || die "Vous devez spécifier le nom de la machine"
srcdir="$HOME/.docker/machine/machines/$name"
[ -d "$srcdir" ] || die "$name: nom de machine incorrect"
ac_set_tmpdir workdir
destdir="$workdir/$name"
archive="${name}-machine.tar.gz"
estep "Copie des fichiers"
cp -r "$srcdir" "$workdir" || die
for i in ca-key.pem ca.pem key.pem cert.pem; do
[ -f "$destdir/$i" ] || {
cp "$HOME/.docker/machine/certs/$i" "$destdir" || die
}
done
estep "Correction des chemins"
sed -i "\
s|$HOME/.docker/machine|DOCKER_MACHINE_HOME|g
s|DOCKER_MACHINE_HOME/certs/|DOCKER_MACHINE_HOME/machines/$name/|g
" "$destdir/config.json" || die
estep "Génération de $archive"
tar czf "$archive" -C "$workdir" "$name" || die
ac_clean "$workdir"
}
function load_machine() {
local archive archivename destdir machinedir origdir workdir srcdir
archive="$1"
[ -n "$archive" ] || die "Vous devez spécifier l'archive à importer"
setx archivename=basename -- "$archive"
if [[ "$archivename" == *-machine.tar.gz ]]; then
name="${archivename%-machine.tar.gz}"
else
die "$archive: n'est pas une archive docker-machine"
fi
destdir="$HOME/.docker/machine/machines"
machinedir="$destdir/$name"
origdir="$HOME/${name}-machine.orig"
if [ -d "$machinedir" ]; then
if [ -n "$NOCLOBBER" ]; then
ewarn "$name: cette machine existe déjà"
return
else
ewarn "$name: une machine du même nom existe déjà"
ask_yesno "Voulez-vous l'écraser?" N || die
[ -d "$origdir" ] && rm -rf "$origdir"
mv "$machinedir" "$origdir"
fi
fi
ac_set_tmpdir workdir
srcdir="$workdir/$name"
estep "Extraction de l'archive"
tar xzf "$archive" -C "$workdir"
[ -d "$srcdir" ] || die "L'archive n'est pas pour la machine $name"
estep "Corriger les chemins"
sed -i "\
s|DOCKER_MACHINE_HOME|$HOME/.docker/machine|g
" "$srcdir/config.json" || die
estep "Installation de la machine"
mkdir -p "$destdir"
mv "$srcdir" "$destdir"
if [ -d "$origdir" ]; then
enote "Une fois que la machine aura été testée, vous pouvez supprimer ce répertoire:
$origdir"
fi
ac_clean "$workdir"
}
# faut-il ignorer les machines existantes
NOCLOBBER=
action=
args=(
--help '$exit_with display_help'
-d,--dump,-x,--export,-s,--save action=dump
-l,--load,-i,--import action=load
-a,--all,--load-all,--import-all action=loadall
)
parse_args "$@"; set -- "${args[@]}"
if [ -z "$action" ]; then
case "$1" in
d|dump|x|export|s|save) action=dump; shift;;
l|load|i|import) action=load; shift;;
a|all|loadall|importall) action=loadall; shift;;
*) die "Vous devez spécifier l'action à effectuer";;
esac
fi
case "$action" in
dump)
dump_machine "$1"
;;
load)
for archive in "$@"; do
etitle "$archive"
load_machine "$archive"
eend
done
;;
loadall)
[ $# -gt 0 ] || set -- .
archives=()
for file in "$@"; do
if [ -d "$file" ]; then
NOCLOBBER=1
array_lsfiles files "$file" "*-machine.tar.gz"
array_extend archives files
else
archives+=("$file")
fi
done
for archive in "${archives[@]}"; do
etitle "$archive"
load_machine "$archive"
eend
done
;;
esac

25
doc/DefaultTiddlers.twp Normal file
View File

@ -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]]

16
doc/EnsureVM.twp Normal file
View File

@ -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)
}}}

46
doc/Main.twp Normal file
View File

@ -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.

25
doc/MainMenu.twp Normal file
View File

@ -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]]

40
doc/SKvm.twp Normal file
View File

@ -0,0 +1,40 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:19
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: SKvm
{{{
SKvm: lancer une machine virtuelle kvm
USAGE
SKvm [options] vmName
SKvm {-l|-A|-g}
OPTIONS
-n, --check
Ne rien faire excepté s'assurer que les modules kvm sont chargés
-u, --user
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, --list
Lister les machines virtuelles
-s, --start
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, --stop
Arrêter la machine virtuelle
-H, --destroy
Arrêter sauvagement la machine virtuelle
-r, --restart
Redémarrer la machine virtuelle
-S, --managed-save
Enregistrer l'état de la machine virtuelle
-A, --stop-all
Arrêter toutes les machines virtuelles qui tournent actuellement
-g, --gui
Afficher le gestionnaire de machines virtuelle
}}}

25
doc/SVirtualBox.md Normal file
View File

@ -0,0 +1,25 @@
# 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é
-b Démarrer la VM sans interface graphique. Cette option n'est valide
qu'avec -s
-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
~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

29
doc/SVirtualBox.twp Normal file
View File

@ -0,0 +1,29 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:19
##@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é
-b Démarrer la VM sans interface graphique. Cette option n'est valide
qu'avec -s
-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
}}}

25
doc/SiteSubtitle.twp Normal file
View File

@ -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

25
doc/SiteTitle.twp Normal file
View File

@ -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

25
doc/SiteUrl.twp Normal file
View File

@ -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

12
doc/_root.twp Normal file
View File

@ -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é
}}}

View File

@ -12,19 +12,6 @@ OPTIONS
Créer un nouveau répertoire de configuration pour un hôte Créer un nouveau répertoire de configuration pour un hôte
-d, --destdir DESTDIR[=apacheconfig] -d, --destdir DESTDIR[=apacheconfig]
Nom du répertoire local de configuration. Nom du répertoire local de configuration.
-f,--full
--partial
Indiquer respectivement que la configuration est complète ou partielle.
Avec la configuration complète, le serveur peut être complètement
configuré avec tous les fichiers présents. Avec la configuration
partielle, uniquement les informations spécifiques à un service en
particulier sont disponibles.
Cette option est utilisée avec --create. Par défaut, la configuration
est partielle.
Pour le moment, la seule différence est que --full crée un fichier de
configuration nommé .apacheconfig alors que --partial crée un fichier
nommé apacheconfig.conf qui est visible et donc découvrable et éditable
plus facilement
-t, --template [OPT] -t, --template [OPT]
Gérer les fichiers du répertoire local avec templatectl. La valeur de Gérer les fichiers du répertoire local avec templatectl. La valeur de
@ -55,12 +42,9 @@ OPTIONS
Lors du déploiement de la configuration, les valeurs des variables Lors du déploiement de la configuration, les valeurs des variables
dynamiques sont remplacées dans les fichiers destination. dynamiques sont remplacées dans les fichiers destination.
Les arguments qui restent sont passés tels quels à apache_autoconf Les arguments qui restent sont passés tels quels à apache_autoconf
-N, --network-config
Mettre aussi à jour la configuration réseau.
-r, --certsdir CERTSDIR -r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à Spécifier le cas échéant le répertoire contenant les certificats à
déployer. Cet argument est requis si le répertoire certsconf/ existe, déployer. Cet argument est requis si le répertoire certsconf/ existe.
sauf si les certificats sont déjà déployés.
--localhosts --localhosts
Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe
@ -76,20 +60,6 @@ OPTIONS
Ne déployer que le fichier de site spécifié. Cette option est utilisée Ne déployer que le fichier de site spécifié. Cette option est utilisée
avec --deploy ou --localhosts et est utile pour le développement et les avec --deploy ou --localhosts et est utile pour le développement et les
tests. tests.
-k, --new-site HOST.TLD
Créer une définition pour un nouveau site à partir des fichiers du
répertoires templates/
-K, --new-site-templatedir TEMPLATEDIR
Spécifier le répertoire source pour les templates de site utilisés par
l'option --new-site. Par défaut, utiliser le répertoire templates/ situé
dans le répertoire de configuration.
Si TEMPLATEDIR est un nom simple sans séparateur de chemin '/' et qu'un
répertoire templates/TEMPLATEDIR existe, alors prendre ce répertoire-là
comme source.
--new-site-force
Avec --new-site, utiliser le nom d'hôte fourni même s'il n'est pas
pleinement qualifié
~~~ ~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

69
doc/apacheconfig.twp Normal file
View File

@ -0,0 +1,69 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: apacheconfig
{{{
apacheconfig: Gérer la configuration d'un serveur web apache
USAGE
apacheconfig -c
apacheconfig -t -- args...
OPTIONS
-c, --create
Créer un nouveau répertoire de configuration pour un hôte
-d, --destdir DESTDIR[=apacheconfig]
Nom du répertoire local de configuration.
-t, --template [OPT]
Gérer les fichiers du répertoire local avec templatectl. La valeur de
cette option est utilisée comme argument court pour l'invocation de
templatectl, e.g
apacheconfig -tm args
est équivalent à
templatectl -m args
Les arguments qui restent sont passés tels quels à templatectl
Les options courantes de templatectl -l, -v, -m, -L sont disponibles
directement
--help-template
Afficher l'aide concernent la gestion des templates.
Equivalent à -t -- --help
-h, --host HOST
Spécifier l'hôte. Equivalent à -v host=HOST
--sysname SYSNAME
--sysdist SYSDIST
-s, --sysver SYSVER
Spécifier la distribution pour laquelle synchroniser le template. Par
défaut, choisir les valeurs correspondantes au système courant.
Les options -7 et -8 sont des aliases respectivement pour -s wheezy et
-s jessie, parce que les fichiers par défaut ont changé à partir de
debian jessie.
-u, --update, --deploy
Mettre à jour la configuration système à partir du répertoire local.
Lors du déploiement de la configuration, les valeurs des variables
dynamiques sont remplacées dans les fichiers destination.
Les arguments qui restent sont passés tels quels à apache_autoconf
-r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à
déployer. Cet argument est requis si le répertoire certsconf/ existe.
--localhosts
Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe
.local mentionnés dans les fichiers de site. Cette option est utile pour
le développement et les tests.
-C, --one-conf CONF
Ne déployer que le fichier de configuration spécifié. Cette option est
utilisée avec --deploy et est utile pour le développement et les tests.
-M, --one-module MODULE
Ne déployer que le fichier de module spécifié. Cette option est utilisée
avec --deploy et est utile pour le développement et les tests.
-S, --one-site SITE
Ne déployer que le fichier de site spécifié. Cette option est utilisée
avec --deploy ou --localhosts et est utile pour le développement et les
tests.
}}}

39
doc/authftp.twp Normal file
View File

@ -0,0 +1,39 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: authftp
{{{
authftp: 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
authftp [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.
authftp -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.
--tls
Indiquer que la connexion se fera en TLS. Implique --lftp puisque ncftp
ne le supporte pas.
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 @
}}}

20
doc/caturl.twp Normal file
View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 13/05/2016 09:36
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: caturl
{{{
caturl: Afficher une url
USAGE
caturl <file.url|file.desktop|URL>
OPTIONS
-c, --check
Vérifier que le fichier est valide
-g, --get
Attaquer l'url spécifiée avec curl
}}}

11
doc/compileAndGo.twp Normal file
View File

@ -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
}}}

18
doc/cssh.twp Normal file
View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: cssh
{{{
cssh: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant
USAGE
cssh [user@]host [options]
En principe, hormis l'argument user@host, il ne faudrait spécifier que des
options. Dans le cas où d'autres arguments seraient spécifiés, les meilleurs
efforts sont faits pour lancer ces commandes avant screen.
}}}

35
doc/doinplace.twp Normal file
View File

@ -0,0 +1,35 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: doinplace
{{{
doinplace: filtrer en place un fichier à travers une suite de commandes
USAGE
doinplace FILE COMMAND [ARGS...]
Si on utilise une commande avec des options, penser à utliser '--' pour séparer
les options de ce script des options de la commande
En plus des commandes systèmes, il est possible d'utiliser toute fonction de
nutools qui effectue des traitement sur un flux comme stripnl, filter_empty,
merge_contlines, filter_comment, filter_conf, etc. Les fonctions nl2lf, nl2crlf,
nl2cr, latin1compat et noaccents sont aussi disponibles par convenance.
OPTIONS
-p, --evalp
Evaluer la commande avec evalp(), ce qui permet de chainer plusieurs
commandes en les séparant par //. Cette option est automatiquement
activée si ce script est lancé avec le nom doinplacex
-g, --ignore-error, --replace-always
Normalement, le fichier n'est pas remplacé si la commande retourne une
erreur. Avec cette option, le fichier est remplacé quel que soit le code
de retour de la commande. A utiliser par exemple avec des commandes
comme grep qui peuvent retourner FAUX s'ils ne trouvent pas le motif.
Cette option est automatiquement activée si ce script est lancé avec le
nom doinplacef
}}}

30
doc/dumpclients.twp Normal file
View File

@ -0,0 +1,30 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: dumpclients
{{{
dumpclients: afficher les connexions TCP entrantes sur un port
USAGE
dumpclients [options] port
OPTIONS
-4, --only-tcp
-6, --only-tcp6
Se limiter au protocole spécifié. Par défaut, afficher toutes les
connexions, qu'elles soient en IPv4 ou en IPv6
-a, --all
Afficher tous les sockets, y compris les ports d'écoute. Par défaut,
seules les sockets ouvertes sont affichées.
-n, --numeric
Afficher uniquement les adresses IP au lieu du nom d'hôte.
-z, --allow-no-port
Ne pas exiger que le port soit spécifié
--show none,ip,port,state
Spécifier d'afficher comme informations supplémentaire: rien, l'adresse
ip, le port et/ou l'état. Par défaut, afficher le port et l'état.
}}}

View File

@ -13,7 +13,6 @@ read the main documentation for these command-line arguments.
Initialization options: Initialization options:
--batch do not do interactive display; implies -q --batch do not do interactive display; implies -q
--chdir DIR change to directory DIR
--daemon start a server in the background --daemon start a server in the background
--debug-init enable Emacs Lisp debugger for init file --debug-init enable Emacs Lisp debugger for init file
--display, -d DISPLAY use X server DISPLAY --display, -d DISPLAY use X server DISPLAY
@ -21,11 +20,9 @@ Initialization options:
--no-init-file, -q load neither ~/.emacs nor default.el --no-init-file, -q load neither ~/.emacs nor default.el
--no-shared-memory, -nl do not use shared memory --no-shared-memory, -nl do not use shared memory
--no-site-file do not load site-start.el --no-site-file do not load site-start.el
--no-site-lisp, -nsl do not add site-lisp directories to load-path
--no-splash do not display a splash screen on startup --no-splash do not display a splash screen on startup
--no-window-system, -nw do not communicate with X, ignoring $DISPLAY --no-window-system, -nw do not communicate with X, ignoring $DISPLAY
--quick, -Q equivalent to: --quick, -Q equivalent to -q --no-site-file --no-splash
-q --no-site-file --no-site-lisp --no-splash
--script FILE run FILE as an Emacs Lisp script --script FILE run FILE as an Emacs Lisp script
--terminal, -t DEVICE use DEVICE for terminal I/O --terminal, -t DEVICE use DEVICE for terminal I/O
--user, -u USER load ~USER/.emacs instead of your own --user, -u USER load ~USER/.emacs instead of your own
@ -35,7 +32,7 @@ Action options:
FILE visit FILE using find-file FILE visit FILE using find-file
+LINE go to line LINE in next FILE +LINE go to line LINE in next FILE
+LINE:COLUMN go to line LINE, column COLUMN, in next FILE +LINE:COLUMN go to line LINE, column COLUMN, in next FILE
--directory, -L DIR prepend DIR to load-path (with :DIR, append DIR) --directory, -L DIR add DIR to variable load-path
--eval EXPR evaluate Emacs Lisp expression EXPR --eval EXPR evaluate Emacs Lisp expression EXPR
--execute EXPR evaluate Emacs Lisp expression EXPR --execute EXPR evaluate Emacs Lisp expression EXPR
--file FILE visit FILE using find-file --file FILE visit FILE using find-file
@ -54,14 +51,14 @@ Display options:
--border-color, -bd COLOR main border color --border-color, -bd COLOR main border color
--border-width, -bw WIDTH width of main border --border-width, -bw WIDTH width of main border
--color, --color=MODE override color mode for character terminals; --color, --color=MODE override color mode for character terminals;
MODE defaults to `auto', and MODE defaults to `auto', and can also
can also be `never', `always', be `never', `auto', `always',
or a mode name like `ansi8' or a mode name like `ansi8'
--cursor-color, -cr COLOR color of the Emacs cursor indicating point --cursor-color, -cr COLOR color of the Emacs cursor indicating point
--font, -fn FONT default font; must be fixed-width --font, -fn FONT default font; must be fixed-width
--foreground-color, -fg COLOR window foreground color --foreground-color, -fg COLOR window foreground color
--fullheight, -fh make the first frame high as the screen --fullheight, -fh make the first frame high as the screen
--fullscreen, -fs make the first frame fullscreen --fullscreen, -fs make first frame fullscreen
--fullwidth, -fw make the first frame wide as the screen --fullwidth, -fw make the first frame wide as the screen
--maximized, -mm make the first frame maximized --maximized, -mm make the first frame maximized
--geometry, -g GEOMETRY window geometry --geometry, -g GEOMETRY window geometry
@ -85,7 +82,7 @@ example, -batch as well as --batch. You can use any unambiguous
abbreviation for a --option. abbreviation for a --option.
Various environment variables and window system resources also affect Various environment variables and window system resources also affect
the operation of Emacs. See the main documentation. Emacs' operation. See the main documentation.
Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs
section of the Emacs manual or the file BUGS. section of the Emacs manual or the file BUGS.

95
doc/em.twp Normal file
View File

@ -0,0 +1,95 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: em
{{{
Usage: /usr/bin/emacs [OPTION-OR-FILENAME]...
Run Emacs, the extensible, customizable, self-documenting real-time
display editor. The recommended way to start Emacs for normal editing
is with no options at all.
Run M-x info RET m emacs RET m emacs invocation RET inside Emacs to
read the main documentation for these command-line arguments.
Initialization options:
--batch do not do interactive display; implies -q
--daemon start a server in the background
--debug-init enable Emacs Lisp debugger for init file
--display, -d DISPLAY use X server DISPLAY
--no-desktop do not load a saved desktop
--no-init-file, -q load neither ~/.emacs nor default.el
--no-shared-memory, -nl do not use shared memory
--no-site-file do not load site-start.el
--no-splash do not display a splash screen on startup
--no-window-system, -nw do not communicate with X, ignoring $DISPLAY
--quick, -Q equivalent to -q --no-site-file --no-splash
--script FILE run FILE as an Emacs Lisp script
--terminal, -t DEVICE use DEVICE for terminal I/O
--user, -u USER load ~USER/.emacs instead of your own
Action options:
FILE visit FILE using find-file
+LINE go to line LINE in next FILE
+LINE:COLUMN go to line LINE, column COLUMN, in next FILE
--directory, -L DIR add DIR to variable load-path
--eval EXPR evaluate Emacs Lisp expression EXPR
--execute EXPR evaluate Emacs Lisp expression EXPR
--file FILE visit FILE using find-file
--find-file FILE visit FILE using find-file
--funcall, -f FUNC call Emacs Lisp function FUNC with no arguments
--insert FILE insert contents of FILE into current buffer
--kill exit without asking for confirmation
--load, -l FILE load Emacs Lisp FILE using the load function
--visit FILE visit FILE using find-file
Display options:
--background-color, -bg COLOR window background color
--basic-display, -D disable many display features;
used for debugging Emacs
--border-color, -bd COLOR main border color
--border-width, -bw WIDTH width of main border
--color, --color=MODE override color mode for character terminals;
MODE defaults to `auto', and can also
be `never', `auto', `always',
or a mode name like `ansi8'
--cursor-color, -cr COLOR color of the Emacs cursor indicating point
--font, -fn FONT default font; must be fixed-width
--foreground-color, -fg COLOR window foreground color
--fullheight, -fh make the first frame high as the screen
--fullscreen, -fs make first frame fullscreen
--fullwidth, -fw make the first frame wide as the screen
--maximized, -mm make the first frame maximized
--geometry, -g GEOMETRY window geometry
--no-bitmap-icon, -nbi do not use picture of gnu for Emacs icon
--iconic start Emacs in iconified state
--internal-border, -ib WIDTH width between text and main border
--line-spacing, -lsp PIXELS additional space to put between lines
--mouse-color, -ms COLOR mouse cursor color in Emacs window
--name NAME title for initial Emacs frame
--no-blinking-cursor, -nbc disable blinking cursor
--reverse-video, -r, -rv switch foreground and background
--title, -T TITLE title for initial Emacs frame
--vertical-scroll-bars, -vb enable vertical scroll bars
--xrm XRESOURCES set additional X resources
--parent-id XID set parent window
--help display this help and exit
--version output version information and exit
You can generally also specify long option names with a single -; for
example, -batch as well as --batch. You can use any unambiguous
abbreviation for a --option.
Various environment variables and window system resources also affect
Emacs' operation. See the main documentation.
Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs
section of the Emacs manual or the file BUGS.
}}}

64
doc/fconv.twp Normal file
View File

@ -0,0 +1,64 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: fconv
{{{
fconv: convertir un fichier ou les fichiers d'un répertoire
USAGE
fconv -f FILE [cmds...]
fconv FILE [cmds...]
Une ou plusieurs commandes peuvent être spécifiées, séparées par //
La commande par défaut est 'lf'
Si des commandes utilisant des options sont utilisées, penser à séparer les
options de fconv avec --
OPTIONS
-N, --detect-always
Pour la commande conv, ne pas optimiser le calcul de l'encoding. Cette
option n'est valide que si src_enc n'est pas spécifié. On assume que
tous les fichiers n'ont pas le même encoding: l'encoding src_enc est
donc recalculé à chaque fois.
-r, --reverse
Pour la commande conv, inverser src_enc et dest_enc, qui doivent être
tous les deux spécifiés.
-f, --file FILE
Spécifier le fichier ou le répertoire concerné par la conversion. Les
aliases -d et --dir sont aussi reconnus.
Si cette option n'est pas spécifiée, le premier argument est considéré
comme le nom du fichier ou du répertoire à convertir. Par défaut,
convertir l'entrée standard.
Si un répertoire est spécifié, tous les fichiers de ce répertoire et de
ses sous-répertoires sont recherchés de façon récursive, sans limite de
profondeur. Ensuite, chacun de ces fichiers est converti.
--show-cmd
Afficher la commande qui serait exécutée
COMMANDES
c, conv dest_enc [src_enc]
Convertir le fichier dans un autre encoding.
dest_enc est l'encoding destination. Il doit être spécifié.
src_enc est l'encoding source. S'il n'est pas spécifié ou vaut 'detect',
il est autodétecté.
U, utf8 [src_enc]
Equivalent à conv utf8 src_enc
L, latin1 [src_enc]
Equivalent à conv latin1 src_enc
lf
crlf
cr
Convertir respectivement les caractères de fin de ligne en LF, CR/LF ou CR
lc, latin1compat
Transformer certains caratères UTF-8 en équivalents qui existent en Latin1
na, noaccents
Transformer les caractères accentués en caractères non accentués
sort [-u]
Trier le fichier avec la commande sort. Attention! Il ne faut utiliser
que les options de sort qui agissent sur un flux e.g. -u pour trier les
lignes de façon unique.
}}}

58
doc/fnconv.twp Normal file
View File

@ -0,0 +1,58 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: fnconv
{{{
fnconv: renommer un fichier ou les fichiers d'un répertoire
USAGE
fnconv -f FILE [cmds...]
fnconv FILE [cmds...]
Une ou plusieurs commandes peuvent être spécifiées, séparées //
La commande par défaut est 'fixcase'
OPTIONS
-N, --detect-always
Pour la commande conv, ne pas optimiser le calcul de l'encoding. Cette
option n'est valide que si src_enc n'est pas spécifié. On assume que
tous les fichiers n'ont pas le même encoding: l'encoding src_enc est
donc recalculé à chaque fois.
-r, --reverse
Pour la commande conv, inverser src_enc et dest_enc, qui doivent être
tous les deux spécifiés.
-f, --file FILE
Spécifier le fichier ou le répertoire concerné par le renommage. Les
aliases -d et --dir sont aussi reconnus.
Si cette option n'est pas spécifiée, le premier argument est considéré
comme le nom du fichier ou du répertoire à renommer.
Si un répertoire est spécifié, le traitement est appliqué à tous les
fichiers et répertoires de façon récursive, sans limite de profondeur.
--show-cmd
Afficher la commande qui serait exécutée
COMMANDES
C, conv dest_enc [src_enc]
Convertir le nom du fichier dans un autre encoding.
dest_enc est l'encoding destination. Il doit être spécifié.
src_enc est l'encoding source. S'il n'est pas spécifié ou vaut 'detect',
il est autodétecté.
U, utf8 [src_enc]
Equivalent à conv utf8 src_enc
L, latin1 [src_enc]
Equivalent à conv latin1 src_enc
lc, latin1compat
Transformer certains caratères UTF-8 en équivalents qui existent en Latin1
na, noaccents
Transformer les caractères accentués en caractères non accentués
l, lowercase
Transfomer le nom en minuscule
u, uppercase
Transformer le nom en majuscule
f, fixcase
Transformer le nom en minuscule s'il est entièrement en majuscule
}}}

14
doc/geturl.twp Normal file
View File

@ -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]
}}}

35
doc/index.md Normal file
View File

@ -0,0 +1,35 @@
# 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.
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

86
doc/mkRewriteRules.twp Normal file
View File

@ -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.
}}}

25
doc/mkiso.twp Normal file
View File

@ -0,0 +1,25 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@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
-V, --volume
Nom du volume. Par défaut, prendre le nom de base du répertoire
d'origine. La taille est de 32 caractères max.
-A, --application
Description de l'application qui est sur l'image créée. Par défaut,
prendre le nom de base du répertoire d'origine. La taille est de 128
caractères max.
}}}

20
doc/mkurl.twp Normal file
View File

@ -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
}}}

35
doc/mkusfx.twp Normal file
View File

@ -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
}}}

30
doc/mocifs.twp Normal file
View File

@ -0,0 +1,30 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: mocifs
{{{
mocifs: Monter un partage Windows/Samba/CIFS
USAGE
mocifs [user@]host[/path] [mountpoint]
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
Les options -M et -U permettent de modifier le comportement par défaut.
OPTIONS
-M
Forcer le montage
-U
Forcer le démontage
-o OPTIONS
Ajouter les options spécifiées à la commande de montage mount.cifs
-u USERNAME
-p PASSWORD
-c USERNAME:PASSWORD
Spécifier les credentials à utiliser pour la connexion
}}}

44
doc/modav.twp Normal file
View File

@ -0,0 +1,44 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: modav
{{{
modav: Monter un répertoire sur un hôte distant avec davfs
USAGE
modav http[s]://host[/path] [mountpoint]
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
Les options -M et -U permettent de modifier le comportement par défaut.
OPTIONS
-M
Forcer le montage
-U
Forcer le démontage
-o OPTIONS
Ajouter les options spécifiées à la commande de montage
-u USERNAME
-p PASSWORD
-c USERNAME:PASSWORD
Si les credentials à utiliser ne sont pas configuré dans le fichier
/etc/davfs2/secrets, cette option permet de les spécifier. Si cette
option est utilisée, il est possible de rajouter
ask_auth 0
dans le fichier /etc/davfs2/davfs2.conf pour éviter le conflit qui se
produit quand des informations sont demandées interactivement. C'est le
cas par exemple si une connexion en https est faite et que la chaine de
certification n'est pas configurée. Pour mémoire, cela se fait avec
servercert myCAs.pem
dans le fichier /etc/davfs2/davfs2.conf
Bien entendu, il est préférable de configurer les credentials dans le
fichier /etc/davfs2/secrets avec la syntaxe
url username password
ou
mountpoint username password
}}}

24
doc/moiso.twp Normal file
View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: moiso
{{{
moiso: Monter une image ISO
USAGE
moiso image.iso [mountpoint]
Par défaut, l'image iso est montée sur un répertoire avec le même nom de base.
Si l'image est déjà montée, elle est démontée. Les options -m et -u permettent
de modifier le comportement par défaut.
OPTIONS
-m
Forcer le montage
-u
Forcer le démontage
}}}

33
doc/mossh.twp Normal file
View File

@ -0,0 +1,33 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: mossh
{{{
mossh: Monter un répertoire sur un hôte distant avec sshfs
USAGE
mossh [user@]host[:/path] [mountpoint]
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
Les options -M et -U permettent de modifier le comportement par défaut.
OPTIONS
-M
Forcer le montage
-U
Forcer le démontage
-o OPTIONS
Ajouter les options spécifiées à la commande de montage
-s
Equivalent à -o allow_other ou -o allow_root selon que l'on est root ou
non
-u USER
Spécifier le user pour la connexion distante, s'il n'est pas possible de
le spécifier dans l'url. En cas de conflit, la valeur dans l'url est
prioritaire par rapport à cette option.
}}}

69
doc/mysqlcsv.twp Normal file
View File

@ -0,0 +1,69 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: mysqlcsv
{{{
mysqlcsv: Faire une requête MySQL et formater la sortie pour traitement avec awkcsv
USAGE
mysqlcsv [query [db]] [-- mysql options]
query est la requête sql à exécuter. Si query n'est pas spécifiée, la(les)
requête(s) sql sont prises sur l'entrée standard, ou depuis un fichier
si l'option -f est spécifiée.
db est le nom de la base de données. Cette argument n'est lu que si le nom
de la base de donnée n'est ni spécifié dans le fichier de configuration,
ni spécifié avec l'option -D
OPTIONS
-h, --host HOST
-P, --port PORT
-u, --user USER
-pPASSWORD
-D, --database DATABASE
Informations de connexion à la base de données
-C, --config CONFIG
Prendre les informations de connexion depuis le fichier spécifié.
Le fichier doit être de la forme
host=HOST
#post=3306
user=USER
password=PASS
#database=DB
#query=QUERY
Les variables port, database et query sont facultatives.
Les valeurs définies dans ce fichier sont prioritaires par rapport à
celles qui auraient été spécifiées sur la ligne de commande.
Utiliser password=--NOT-SET-- s'il faut se connecter sans mot de passe
Cette option peut être utilisée plusieurs fois, auquel cas les fichiers
sont chargés dans l'ordre.
--profile PROFILE
La variable $PROFILE est définie avec la valeur spécifiée avant de
sourcer les fichiers de configuration. Cela permet d'avoir des fichiers
de configuration qui calculent dynamiquement les paramètres en fonction
de la valeur du profil.
-N, --no-headers
Ne pas afficher les en-têtes
-c, --force
Continuer le traitement même en cas d'erreur
-r, --raw
Ne pas autoriser mysql à mettre en échappement certaines valeurs
retournées par le serveur. Par défaut, les transformations suivantes
sont effectuées:
newline --> \n
tab --> \t
nul --> \0
\ --> \\
-n, --nulls
Transformer dans le flux en sortie les valeurs NULL en chaines vides
-f, --input INPUT
Lire la requête depuis le fichier input au lieu de le lire depuis la
ligne de commande ou l'entrée standard. Ne pas spécifier cette option
ou utiliser '-' pour lire depuis l'entrée standard.
Cette option est ignorée si la requête est spécifiée parmi les
arguments.
}}}

112
doc/mysqlloadcsv.twp Normal file
View File

@ -0,0 +1,112 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: mysqlloadcsv
{{{
mysqlloadcsv: Charger une table MySQL avec un fichier csv
USAGE
mysqlloadcsv [db.]table [fields...] [-- mysql options]
db est le nom de la base de données
table est le nom de la table à charger
fields est la liste des colonnes. Si cette valeur est spécifiée, il faudra
peut-être utiliser l'option -s pour ignorer le cas échéant la ligne des
en-têtes dans le fichier en entrée. Sinon, les colonnes à utiliser sont
calculées à partir du fichier en entrée.
Dans les données en entrées, qui doivent être en UTF8, les conversions suivantes
sont effectuées par MySQL:
\0 --> <caractère NUL>
\b --> <backspace>
\n --> <newline>
\r --> <carriage return>
\t --> <tab>
\Z --> Ctrl+Z
\N --> NULL
OPTIONS
-h, --host host
-P, --port port
-u, --user user
-ppassword
Informations de connexion à la base de données
-C, --config CONFIG
Prendre les informations de connexion depuis le fichier spécifié.
Le fichier doit être de la forme
host=HOST.TLD
#post=3306
user=USER
password=PASS
#dbtable=DB.TABLE
#fields=(FIELDS...)
# Il est possible aussi de spécifier DB et TABLE séparément:
#database=DB
#table=TABLE
Les variables port, dbtable et fields sont facultatives.
Les valeurs définies dans ce fichier sont prioritaires par rapport à
celles qui auraient été spécifiées sur la ligne de commande.
Utiliser password=--NOT-SET-- s'il faut se connecter sans mot de passe
Cette option peut être utilisée plusieurs fois, auquel cas les fichiers
sont chargés dans l'ordre.
--profile PROFILE
La variable $PROFILE est définie avec la valeur spécifiée avant de
sourcer les fichiers de configuration. Cela permet d'avoir des fichiers
de configuration qui calculent dynamiquement les paramètres en fonction
de la valeur du profil.
-f, --input INPUT
Fichier en entrée. Ne pas spécifier cette option ou utiliser '-' pour
lire depuis l'entrée standard.
-d, --auto-dbtable DB
Spécifier la base de données avec laquelle se connecter. De plus, si le
nom de la table n'est pas spécifié, prendre par défaut le nom de base du
fichier spécifié avec l'option -f
-s, --skip-lines NBLINES
Nombre de lignes à sauter dans le fichier en entrée
-n, --fake
Ne pas effectuer l'opération. Afficher simplement la commande SQL.
--run
Forcer le lancement de l'opération. Utiliser cette option avec -A pour
créer la table avec les paramètres analysés.
-T, --truncate
Vider la table avant d'effectuer le chargement
-L, --load-data
Charger les données avec la commande 'load data local'. C'est l'option
par défaut. Le fichier est transmis tel quel à MySQL.
-I, --insert-data
Charger les données en générant des commandes 'insert into'. L'effet est
en principe le même avec l'option -L (sauf que certains formats de date
exotiques seront correctement importés). Cette option peut aussi être
utilisée avec l'option -n pour générer une liste de commande à corriger
et/ou adapter.
-U, -k, --update-data KEY
Au lieu de charger de nouvelles données, essayer de mettre à jour la
table. KEY est le nom de la colonne qui est utilisée comme clé. Toutes
les autres colonnes sont les nouvelles données à mettre à jour. Si
aucune ligne ne correspond à une clé donnée, la mise à jour pour cette
ligne est ignorée.
Note: utiliser les options -T et -U ensemble n'a pas de sens, mais -T
est quand même honoré.
-Z, --null-value VALUE
Avec les options -I et -U, considérer que NULL est représenté par la
chaine spécifiée. Par défaut, utiliser \N
-z, --null-is-empty
Avec les options -I et -U, considérer que NULL est représenté par la
chaine vide. Cette option est équivalente à -Z ''
-t, --types [DEFAULT_TYPE,]FIELD:TYPE,...
Spécifier pour chaque champ mentionné le type de donnée à forcer. Le
type 'auto' signifie que le type est autodétecté. C'est la valeur par
défaut. Les autres types valides sont 'str', 'int' et 'date'
Cette option est ignorée avec l'option -L
-A, --analyse
Analyser les données et afficher une requête pour créer une table qui
pourrait contenir ces données.
Cette option implique --fake et affiche simplement la commande SQL.
Pour lancer la commande SQL générée, il faut ajouter l'option --run
APRES cette option
}}}

11
doc/noerr.twp Normal file
View File

@ -0,0 +1,11 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: noerr
{{{
noerr: lancer une commande en supprimant la sortie d'erreur
}}}

11
doc/noerror.twp Normal file
View File

@ -0,0 +1,11 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: noerror
{{{
noerror: lancer une commande en masquant son code de retour. le code de retour est toujours 0
}}}

11
doc/noout.twp Normal file
View File

@ -0,0 +1,11 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: noout
{{{
noout: lancer une commande en supprimant la sortie standard
}}}

17829
doc/nutools.html Normal file

File diff suppressed because one or more lines are too long

38
doc/nutools.twp Normal file
View File

@ -0,0 +1,38 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: nutools
{{{
nutools: configurer ou afficher des informations sur nutools
USAGE
nutools [VERSION]
OPTIONS
-C, --configure
Faire la configuration pour l'utilisateur courant en appelant uenv -u
Avec cette option, l'option -l (ou --local-profiles) est aussi reconnue
et est passée directement à uenv
-v, --version
Afficher la version de nutools installée. C'est l'option par défaut
-c, --check
Calculer si la version installée correspond à la version spécifiée
-o, --oper OPERATOR
Spécifier l'opérateur à utiliser avec l'option --check (par défaut,
utiliser l'opérateur ge, qui permet de vérifier si la version minimum
spécifiée est installée)
--eq
--ne
--lt
--le
--gt
--ge
--same
--diff
Ces options sont des raccourcis. L'option '--OP' est équivalente à
'--check --op OP'
}}}

14
doc/openurl.twp Normal file
View File

@ -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>
}}}

90
doc/pdev.twp Normal file
View File

@ -0,0 +1,90 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: pdev
{{{
pdev: basculer sur une branche de développement
USAGE
pdev [FEATURE [SOURCE]]
pdev -m|-l|-d [FEATURE]
- Vérifier l'existence de la branche develop. La créer si nécessaire en la
basant sur [origin/]master.
- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un
commit ou un stash.
- Si FEATURE est spécifié, et si on n'est pas déjà sur cette branche, basculer
vers cette nouvelle branche. S'il s'agit d'une nouvelle branche, la baser sur
la branche SOURCE, qui vaut par défaut develop
- Si FEATURE n'est pas spécifié, basculer sur develop s'il s'agit de la seule
solution, sinon afficher un menu pour choisir la branche de destination.
OPTIONS
-C, --projdir PROJDIR
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
on travaille dans le répertoire courant et on laisse git trouver le
répertoire de base du projet. Avec cette option, le répertoire courant
est modifié avant de lancer les commandes git.
-O, --origin ORIGIN
Spécifier le nom de l'origine. Par défaut, utiliser 'origin'
-o, --offline
En cas de création d'une branche, ne pas pousser vers l'origine; ne pas
tenter le cas échéant de traquer la branche dans l'origine; ne pas
supprimer une branche dans l'origine. Cette option est automatiquement
activée si la variable UTOOLS_VCS_OFFLINE est définie.
--online
Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online
--sync
Faire un certain nombre d'opération pour 'corriger' le dépôt local: pour
chacune des branches distantes, vérifier qu'il existe une branche locale
qui la traque, et pour chaque feature branche locale, vérifier qu'il
existe une branche distante associée. Cette option nécessite --online
-s, --squash COMMIT_MSG
Si la branche actuelle est une feature branch, la merger comme un seul
commit avec le message COMMIT_MSG dans develop puis la supprimer. Puis
basculer sur la branche develop.
Cette option ne devrait pas être utilisée avec -k, puisque bien que les
modifications soient mergées, la branche elle-même n'est pas considérée
comme mergée. Les résultats sont donc indéfinis si la branche est mergée
à plusieurs reprises.
-b, --rebase
Si la branche actuelle est une feature branch, lancer 'git rebase -i'
sur la feature branch. Cela permet de réordonner les commits pour
nettoyer l'historique avant de fusionner la branche avec -m
Cette option devrait le cas échéant être utilisée immédiatement avant -m
ou alors il faut forcer le push et communiquer avec l'équipe sur le fait
que la branche de feature a été rebasée.
-m, --merge
Si la branche actuelle est une feature branch, la merger dans develop
puis la supprimer. Puis basculer sur la branche develop.
--merge-log
Ajouter un résumé des modifications sur la feature branch en ajoutant le
log en une ligne de chaque commit dans le message du merge. Cette option
n'est en principe pas nécessaire puisque 'prel -um' intègre la liste des
commits dans CHANGES.txt
-k, --keep
Avec l'option -m, ne pas supprimer une feature branch après l'avoir
fusionnée dans develop. Cela permet d'intégrer les modifications petit à
petit.
--delete
Supprimer une feature branch, à condition qu'elle aie déjà été
entièrement fusionnée dans la branch develop
--force-delete
Supprimer une feature branch, même si elle n'a pas encore été fusionnée
dans la branche develop
-l, --log
-d, --diff
Afficher les modifications entre deux branches. L'option --log affiche
les modifications dans l'ordre alors que --diff affiche les différences
sous forme de diff. Les deux options peuvent être combinées et ont
l'effet de 'git log -p'
La branche comparée, s'il elle n'est pas spécifiée, est par défaut la
branche courante. S'il s'agit d'une feature branch, elle est comparée à
develop. S'il s'agit de la branche develop, elle est comparée à master.
}}}

View File

@ -67,15 +67,15 @@ OPTIONS
fichier VERSION.txt avec pver. Utiliser cette option si la mise à jour fichier VERSION.txt avec pver. Utiliser cette option si la mise à jour
du numéro de version doit être faite d'une manière particulière. du numéro de version doit être faite d'une manière particulière.
-e, --edit -e, --edit
Editer le fichier CHANGES.md autogénéré par les options -u -w ou un Editer le fichier CHANGES.txt autogénéré par -u -w
fichier CHANGES.txt existant. Cette option est surtout utile si -m est Cette option est surtout utile si -m est utilisé avec -u, pour donner la
utilisé avec -u, pour donner la possibilité de corriger la liste des possibilité de corriger la liste des modifications avant leur
modifications avant leur enregistrement définitif. enregistrement définitif.
-m, --merge -m, --merge
Si la branche actuelle est une branche de release, ou s'il existe une Si la branche actuelle est une branche de release, ou s'il existe une
branche de release, la merger dans master, puis dans develop, puis la branche de release, la merger dans master, puis dans develop, puis la
supprimer. A l'issu de cette opération, rester sur la branche develop. supprimer. Puis basculer sur la branche master.
S'il n'existe pas de branche de release, proposer de fusionner les S'il n'existe pas de branche de release, proposer de fusionner les
modifications de la branche develop dans la branche master, sans modifications de la branche develop dans la branche master, sans
préparer de branche de release au préalable. préparer de branche de release au préalable.
@ -89,17 +89,13 @@ OPTIONS
-s, --summary -s, --summary
Afficher la liste des différences entre la branche develop et la branche Afficher la liste des différences entre la branche develop et la branche
master, comme elle serait générée par les options -u -w pour le fichier master, comme elle serait générée par les options -u -w pour le fichier
CHANGES.txt (la syntaxe pour CHANGES.md est légèrement différente) CHANGES.txt
-l, --log -l, --log
Afficher les modifications actuellement effectuée dans la branche de Afficher les modifications actuellement effectuée dans la branche de
release par rapport à develop. release par rapport à develop.
-d, --diff -d, --diff
Afficher les modifications actuellement effectuée dans la branche de Afficher les modifications actuellement effectuée dans la branche de
release par rapport à develop, sous forme de diff. release par rapport à develop, sous forme de diff.
OPTIONS AVANCEES
--uc, --upgrade-changes
Convertir un fichier CHANGES.txt en CHANGES.md
~~~ ~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

105
doc/prel.twp Normal file
View File

@ -0,0 +1,105 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: prel
{{{
prel: basculer sur une branche de release
USAGE
prel -u [SOURCE]
prel -c [RELEASE [SOURCE]]
prel -m|-l|-d [RELEASE]
- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un
commit ou un stash.
- Avec l'option -c, s'il existe une branche de release, proposer de basculer
vers elle ou sur la branche master. Sinon, basculer sur la branche master.
- Avec l'option -u, proposer ou fixer une branche de release à créer. Si elle
existe déjà, basculer vers elle. Sinon, la créer en la basant sur SOURCE, qui
vaut par défaut develop
OPTIONS
-C, --projdir PROJDIR
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
on travaille dans le répertoire courant et on laisse git trouver le
répertoire de base du projet. Avec cette option, le répertoire courant
est modifié avant de lancer les commandes git.
-O, --origin ORIGIN
Spécifier le nom de l'origine. Par défaut, utiliser 'origin'
-o, --offline
En cas de création d'une branche, ne pas pousser vers l'origine; ne pas
tenter le cas échéant de traquer la branche dans l'origine; ne pas
supprimer une branche dans l'origine. Cette option est automatiquement
activée si la variable UTOOLS_VCS_OFFLINE est définie.
--online
Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online
-c, --checkout
Basculer vers une branche de release existante. C'est l'option par
défaut. Si aucune branche de release n'existe, basculer vers master
-u, --update
Préparer une nouvelle release. Utiliser une des options -x, -z ou -p
pour spécifier le type de release à préparer. Si la branche qui serait
créée pour le type de release existe déjà, basculer vers cette branche.
S'il faut la créer, la baser sur la branche SOURCE, qui vaut par défaut
develop
--menu
-x, --major
-z, --minor
-p, --patchlevel
Utilisé avec l'option -u, soit afficher un menu pour choisir la version
de la nouvelle release (par défaut), soit préparer respectivement une
release majeure, mineure, ou pour correction de bug.
-v-OPT
Avec l'option -u, spécifier une option de pver permettant de choisir la
version de la nouvelle release. Les options supportées sont -v, -l, -a,
-b, -r et -R. Par exemple, si la version actuelle sur la branche master
est 0.2.3, les options '-uz -v-lbeta' permettent de préparer la release
0.3.0-beta
En principe, cette option n'a pas à être utilisée, puisque dans une
branche de release, on peut faire vivre les versions de pré-release
jusqu'à la release finale. Ainsi, la branche de release est nommée
d'après la version finale, mais le projet peut recevoir une version de
pré-release incrémentale.
-w, --write
Si une nouvelle branche est créée avec -u, mettre à jour le fichier
VERSION.txt avec pver. C'est l'option par défaut.
-n, --no-write
Si une nouvelle branche est créée avec -u, NE PAS mettre à jour le
fichier VERSION.txt avec pver. Utiliser cette option si la mise à jour
du numéro de version doit être faite d'une manière particulière.
-e, --edit
Editer le fichier CHANGES.txt autogénéré par -u -w
Cette option est surtout utile si -m est utilisé avec -u, pour donner la
possibilité de corriger la liste des modifications avant leur
enregistrement définitif.
-m, --merge
Si la branche actuelle est une branche de release, ou s'il existe une
branche de release, la merger dans master, puis dans develop, puis la
supprimer. Puis basculer sur la branche master.
S'il n'existe pas de branche de release, proposer de fusionner les
modifications de la branche develop dans la branche master, sans
préparer de branche de release au préalable.
--delete
Supprimer une branche de release, à condition qu'elle aie déjà été
entièrement fusionnée dans la branch master
--force-delete
Supprimer une branche de release, même si elle n'a pas encore été
fusionnée dans la branche master
-s, --summary
Afficher la liste des différences entre la branche develop et la branche
master, comme elle serait générée par les options -u -w pour le fichier
CHANGES.txt
-l, --log
Afficher les modifications actuellement effectuée dans la branche de
release par rapport à develop.
-d, --diff
Afficher les modifications actuellement effectuée dans la branche de
release par rapport à develop, sous forme de diff.
}}}

98
doc/pver.md Normal file
View File

@ -0,0 +1,98 @@
# pver
~~~
pver: gérer des numéros de version selon les règles du versionage sémantique v2.0.0 (http://semver.org/)
USAGE
pver [options]
OPTIONS
-f, --file VERSIONFILE
Gérer le numéro de version se trouvant dans le fichier spécifié. Le
fichier est créé si nécessaire. C'est l'option par défaut si un fichier
nommé VERSION.txt se trouve dans le répertoire courant.
-e, --maven POMFILE
Gérer le numéro de version se trouvant dans le fichier pom.xml spécifié.
Le fichier DOIT exister. C'est l'option par défaut si un fichier nommé
pom.xml se trouve dans le répertoire courant.
-F, --file-string VERSIONFILE
Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui
vaut par défaut VERSION.txt)
-g, --git-string [branch:]VERSIONFILE
Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui
vaut par défaut VERSION.txt) dans la branche BRANCH (qui vaut par défaut
master) du dépôt git situé dans le répertoire courant.
-s, --string VERSION
Prendre pour valeur de départ le numéro de version spécifié
--show
Afficher le numéro de version. C'est l'action par défaut
--allow-empty
Supporter que la version puisse ne pas être spécifiée ni trouvée. Dans
ce cas, ne pas assumer que la version effective est 0.0.0
Avec --show et --update, ne rien afficher si la version est vide.
--check
Vérifier que le numéro de version est conforme aux règles du versionage
sémantique
--convert
--no-convert
Activer (resp. désactiver) la conversion automatique. Par défaut, si la
version est au format classique 'x.z[.p]-rDD/MM/YYYY', elle est
convertie automatiquement au format sémantique x.z.p+rYYYYMMDD
--eq VERSION
--ne VERSION
--lt VERSION
--le VERSION
--gt VERSION
--ge VERSION
--same VERSION
--diff VERSION
Comparer avec la version spécifiée. Les opérateurs --eq, --ne, --lt,
--le, --gt, et --ge ignorent l'identifiant de build (comme le demande la
règle du versionage sémantique). Les opérateurs --same et --diff
comparent aussi les identifiants de build.
-v, --set-version VERSION
Spécifier un nouveau numéro de version qui écrase la valeur actuelle.
Cette option ne devrait pas être utilisée en temps normal parce que cela
va contre les règles du versionage sémantique.
--prel
Spécifier un nouveau numéro de version qui écrase la valeur actuelle. Le
numéro de version est obtenu à partir du nom de la branche git courante,
qui doit être de la forme release-VERSION
-u, --update
Mettre à jour le numéro de version.
--menu
Afficher un menu permettant de choisir le composant de la version à
incrémenter
-x, --major
Augmenter le numéro de version majeure
-z, --minor
Augmenter le numéro de version mineure. C'est la valeur par défaut.
-p, --patchlevel
Augmenter le numéro de patch
-l, --prelease ID
Spécifier un identifiant de pré-release, à ajouter au numéro de version.
-a, --alpha
-b, --beta
-r, --rc
Spécifier une pré-release de type alpha, beta, ou rc. Si la version est
déjà dans ce type, augmenter la dernière valeur numérique des composants
de l'identifiant, e.g. alpha deviant alpha.1, beta-1.2 devient beta-1.3,
rc1 devient rc2
XXX ces fonctions ne sont pas encore implémentées
-R, --final, --release
Supprimer l'identifiant de prérelease
-m, --metadata ID
Spécifier un identifiant de build, à ajouter au numéro de version.
-M, --vcs-metadata
Spécifier l'identifiant à partir de la révision actuelle dans le
gestionnaire de version. Note: pour le moment, seul git est supporté.
--add-metadata ID
Ajouter l'identifiant spécifié à la valeur actuelle, au lieu de la
remplacer. Séparer l'identifiant de la valeur précédente avec un '.'
~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

102
doc/pver.twp Normal file
View File

@ -0,0 +1,102 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: pver
{{{
pver: gérer des numéros de version selon les règles du versionage sémantique v2.0.0 (http://semver.org/)
USAGE
pver [options]
OPTIONS
-f, --file VERSIONFILE
Gérer le numéro de version se trouvant dans le fichier spécifié. Le
fichier est créé si nécessaire. C'est l'option par défaut si un fichier
nommé VERSION.txt se trouve dans le répertoire courant.
-e, --maven POMFILE
Gérer le numéro de version se trouvant dans le fichier pom.xml spécifié.
Le fichier DOIT exister. C'est l'option par défaut si un fichier nommé
pom.xml se trouve dans le répertoire courant.
-F, --file-string VERSIONFILE
Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui
vaut par défaut VERSION.txt)
-g, --git-string [branch:]VERSIONFILE
Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui
vaut par défaut VERSION.txt) dans la branche BRANCH (qui vaut par défaut
master) du dépôt git situé dans le répertoire courant.
-s, --string VERSION
Prendre pour valeur de départ le numéro de version spécifié
--show
Afficher le numéro de version. C'est l'action par défaut
--allow-empty
Supporter que la version puisse ne pas être spécifiée ni trouvée. Dans
ce cas, ne pas assumer que la version effective est 0.0.0
Avec --show et --update, ne rien afficher si la version est vide.
--check
Vérifier que le numéro de version est conforme aux règles du versionage
sémantique
--convert
--no-convert
Activer (resp. désactiver) la conversion automatique. Par défaut, si la
version est au format classique 'x.z[.p]-rDD/MM/YYYY', elle est
convertie automatiquement au format sémantique x.z.p+rYYYYMMDD
--eq VERSION
--ne VERSION
--lt VERSION
--le VERSION
--gt VERSION
--ge VERSION
--same VERSION
--diff VERSION
Comparer avec la version spécifiée. Les opérateurs --eq, --ne, --lt,
--le, --gt, et --ge ignorent l'identifiant de build (comme le demande la
règle du versionage sémantique). Les opérateurs --same et --diff
comparent aussi les identifiants de build.
-v, --set-version VERSION
Spécifier un nouveau numéro de version qui écrase la valeur actuelle.
Cette option ne devrait pas être utilisée en temps normal parce que cela
va contre les règles du versionage sémantique.
--prel
Spécifier un nouveau numéro de version qui écrase la valeur actuelle. Le
numéro de version est obtenu à partir du nom de la branche git courante,
qui doit être de la forme release-VERSION
-u, --update
Mettre à jour le numéro de version.
--menu
Afficher un menu permettant de choisir le composant de la version à
incrémenter
-x, --major
Augmenter le numéro de version majeure
-z, --minor
Augmenter le numéro de version mineure. C'est la valeur par défaut.
-p, --patchlevel
Augmenter le numéro de patch
-l, --prelease ID
Spécifier un identifiant de pré-release, à ajouter au numéro de version.
-a, --alpha
-b, --beta
-r, --rc
Spécifier une pré-release de type alpha, beta, ou rc. Si la version est
déjà dans ce type, augmenter la dernière valeur numérique des composants
de l'identifiant, e.g. alpha deviant alpha.1, beta-1.2 devient beta-1.3,
rc1 devient rc2
XXX ces fonctions ne sont pas encore implémentées
-R, --final, --release
Supprimer l'identifiant de prérelease
-m, --metadata ID
Spécifier un identifiant de build, à ajouter au numéro de version.
-M, --vcs-metadata
Spécifier l'identifiant à partir de la révision actuelle dans le
gestionnaire de version. Note: pour le moment, seul git est supporté.
--add-metadata ID
Ajouter l'identifiant spécifié à la valeur actuelle, au lieu de la
remplacer. Séparer l'identifiant de la valeur précédente avec un '.'
}}}

24
doc/pz.twp Normal file
View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:18
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: pz
{{{
pz: faire une archive du projet
USAGE
pz
OPTIONS
-C, --projdir PROJDIR
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
on travaille dans le répertoire courant et on laisse git trouver le
répertoire de base du projet. Avec cette option, le répertoire courant
est modifié avant de lancer les commandes git.
-d, --destdir DESTDIR
Spécifier le répertoire dans lequel générer l'archive. Par défaut,
prendre le répertoire parent du répertoire de base du dépôt.
}}}

Some files were not shown because too many files have changed in this diff Show More