Compare commits

..

2 Commits

Author SHA1 Message Date
Jephté Clain 627e54a1e9 maj doc 2017-03-01 18:03:10 +04:00
Jephté Clain 9c40aa38f3 description des modifications à implémenter 2017-03-01 17:53:10 +04:00
398 changed files with 46395 additions and 52759 deletions

View File

@ -1,745 +1,3 @@
## Version 11.3.0 du 24/09/2024-16:02
* `625d5f1` bug mineur
* `e308202` dkbuild: améliorer from_glob()
* `5c03184` lgrep, lless: modifier la doc pour ne parler que d'un fichier
## 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 ## Version 6.1.0 du 13/02/2017-17:06
* `748c2f7` Intégration de la branche update-network * `748c2f7` Intégration de la branche update-network

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
@ -82,7 +82,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 +117,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

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

16
TODO.md
View File

@ -1,10 +1,14 @@
# TODO # TODO
dkbuild * supporter pour pdev/prel une convention de nommage différente: la branche
* setversion peut prendre la version depuis la branche git d'un dépôt master est utilisée pour le développement, et une branche spécifique release
* un argument permettrait de spécifier comment la version est calculée à est utilisée pour faire les releases. Cela permet de faciliter la
partir du dépôt collaboration sur github, puisque les gens vont par défaut faire des
* si cela a du sens, une commande setlatest qui permet de désigner quelle pull-requests basés sur la branche master.
distribution/version est la dernière
implémentation: dans chaque fonction qui gère un dépôt, avec la valeur par
défaut `GIT_AUTO_REPO_TYPE=1` on calcule automatiquement le type de dépôt,
mais on supporte aussi le mode `GIT_AUTO_REPO_TYPE=` et dans ce cas
l'information est globale.
-*- 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.3.0 6.1.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() {
@ -59,19 +59,8 @@ 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 -N, --network-config
Mettre aussi à jour la configuration réseau. 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,
@ -112,10 +101,7 @@ destdir=
nohideconfig=auto nohideconfig=auto
templateopt= templateopt=
FULLCONF= FULLCONF=
pull=
fixip=
netconf= netconf=
no_post_update=
aac_certsdir= aac_certsdir=
bits= bits=
oneconf= oneconf=
@ -147,10 +133,7 @@ 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 -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=
@ -166,16 +149,6 @@ if [ "$nohideconfig" == auto ]; then
[ -n "$FULLCONF" ] && nohideconfig= || nohideconfig=1 [ -n "$FULLCONF" ] && nohideconfig= || nohideconfig=1
fi 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_loadconf "$destdir" "$nohideconfig" || die
apacheconfig_sysinfos "$sysname" "$sysdist" "$sysver" "$bits" apacheconfig_sysinfos "$sysname" "$sysdist" "$sysver" "$bits"
@ -215,9 +188,7 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
args=( args=(
-d "$destdir" --$action -d "$destdir" --$action
${fixip:+--fix-ip}
${netconf:+--network-config} ${netconf:+--network-config}
${no_post_update:+--no-post-update}
${aac_certsdir:+-r "$aac_certsdir"} ${aac_certsdir:+-r "$aac_certsdir"}
${oneconf:+--one-conf "$oneconf"} ${oneconf:+--one-conf "$oneconf"}
${onemodule:+--one-module "$onemodule"} ${onemodule:+--one-module "$onemodule"}
@ -237,11 +208,11 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
"$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" \
"$netconf" "$fixip" "$no_post_update" || die "$netconf" || 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
@ -283,17 +254,14 @@ elif [ "$action" == new-site ]; then
ssltempl= ssltempl=
certstempl= certstempl=
wwwtempl= wwwtempl=
array_from_lines clrtempls "$(list_files "$templdir" "*SITE*.conf")" array_from_lines templs "$(list_files "$templdir" "*SITE.conf")"
array_from_lines ssltempls "$(list_files "$templdir" "*SITE*.ssl.conf")" [ ${#templs[*]} -gt 0 ] && clrtempl="${templs[0]}"
array_from_lines certstempls "$(list_files "$templdir" "*SITE*-certs.conf")" array_from_lines templs "$(list_files "$templdir" "*SITE.ssl.conf")"
for xtempl in "${ssltempls[@]}" "${certstempls[@]}"; do [ ${#templs[*]} -gt 0 ] && ssltempl="${templs[0]}"
array_del clrtempls "$xtempl" array_from_lines templs "$(list_files "$templdir" "*SITE-certs.conf")"
done [ ${#templs[*]} -gt 0 ] && certstempl="${templs[0]}"
[ ${#clrtempls[*]} -gt 0 ] && clrtempl="${clrtempls[0]}" array_from_lines templs "$(list_dirs "$templdir" "*SITE")"
[ ${#ssltempls[*]} -gt 0 ] && ssltempl="${ssltempls[0]}" [ ${#templs[*]} -gt 0 ] && wwwtempl="${templs[0]}"
[ ${#certstempls[*]} -gt 0 ] && certstempl="${certstempls[0]}"
array_from_lines wwwtempls "$(list_dirs "$templdir" "*SITE*")"
[ ${#wwwtempls[*]} -gt 0 ] && wwwtempl="${wwwtempls[0]}"
found= found=
for i in "$clrtempl" "$ssltempl" "$certstempl" "$wwwtempl"; do for i in "$clrtempl" "$ssltempl" "$certstempl" "$wwwtempl"; do
@ -305,44 +273,6 @@ elif [ "$action" == new-site ]; then
die "$host n'est pas un nom d'hôte pleinement qualifié" die "$host n'est pas un nom d'hôte pleinement qualifié"
fi 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" etitle "$host"
hostname="${host%%.*}" hostname="${host%%.*}"
clrconf="${clrtempl/SITE/$hostname}" clrconf="${clrtempl/SITE/$hostname}"
@ -353,10 +283,7 @@ elif [ "$action" == new-site ]; then
mkdir -p "$destdir/certsconf" mkdir -p "$destdir/certsconf"
mkdir -p "$destdir/sites" mkdir -p "$destdir/sites"
sedscript= sedscript="\
[ -n "$hostip" ] && sedscript="$sedscript
s/SITE_IP/$hostip/g"
sedscript="$sedscript
s/SITE.TLD/$host/g s/SITE.TLD/$host/g
s/SITE/$hostname/g" s/SITE/$hostname/g"

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,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: créer un utilisateur sudoer et lui installer une clé publique ssh uecho "$scriptname: créer un utilisateur sudoer et lui installer une clé publique ssh
@ -160,11 +161,11 @@ $(qvals "./$scriptname" ${pkstring:+-s "$pkstring"} ${luser:+-l} "$user")" >"$wo
estep "Exécution du script" estep "Exécution du script"
"${ssh[@]}" "$remoteuser@$host" "\ "${ssh[@]}" "$remoteuser@$host" "\
__estack=$(qval "$__estack") __estack=$(quoted_arg "$__estack")
__tlevel=$(qval "$__tlevel") __tlevel=$(quoted_arg "$__tlevel")
export __estack __tlevel export __estack __tlevel
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG ${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"})" }$(quoted_args "./$archivename" ${tmproot:+--tmproot "$tmproot"})"
r=$? r=$?
ac_clean "$workdir" ac_clean "$workdir"

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

3255
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

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](tools/uinst): Déploiement local
* [mkusfx](tools/mkusfx): Faire une archive auto-installable avec uinst
* [ruinst](tools/ruinst): Déploiement distant avec uinst
* [runs](tools/runs): Lancer un script avec le protocole RUNS
* [rruns](tools/rruns): Déploiement distant avec runs
* Librairie réutilisable de scripts shell
* [uinc](tools/uinc): Dépliage des inclusions dans un fichier
* [ulibsync](tools/ulibsync): Faire une copie locale pour un projet de ulib et/ou pyulib
* Autres outils
* [udir](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

17829
doc/nutools.html Normal file

File diff suppressed because one or more lines are too long

View File

@ -7,38 +7,19 @@ USAGE
SVirtualBox [options] vmName SVirtualBox [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
~~~ ~~~
-*- 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,29 +0,0 @@
# create-user
~~~
create-user: créer un utilisateur sudoer et lui installer une clé publique ssh
USAGE
create-user 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.
~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -1,45 +0,0 @@
# netconfig
~~~
netconfig: gérer la configuration du réseau
USAGE
netconfig -c network.conf
netconfig [iface:]ip[/suffix]...
OPTIONS
-P, --partial
Activer le mode de configuration partielle. C'est la valeur par défaut.
Dans ce mode, la configuration courante n'est pas modifiée. Seules de
nouvelles adresses ips sont configurées le cas échéant.
-F, --full
Activer le mode de configuration complète. Dans ce mode, le nom d'hôte
ainsi que toutes les interfaces, pont et adresses sont configurés.
-z, --reset
En mode full, recréer le fichier /etc/network/interfaces au lieu
d'essayer de le mettre à jour.
-l, --inline
Prendre la configuration depuis la ligne de commande. C'est la valeur
par défaut, sauf si un fichier network.conf existe dans le répertoire
courant.
Dans ce mode, chaque argument est une spécification d'adresse IP à
configurer. Les autres paramètres i.e les ponts, le nom d'hôte et le
contenu du fichier /etc/networks sont spécifiés avec les options -b,
-h et -e
-c, --config CONFIG
Spécifier le fichier de configuration à utiliser pour la configuration
du réseau. Cette option est automatiquement activée si le répertoire
courant contient un fichier network.conf
-w, --write
Ecrire la configuration actuelle dans le fichier network.conf
Note: comme ce script demande les droits de root, le fichier sera écrit
avec le propriétaire root.
-b, --bridge BR:IFACES
En mode inline, spécifier une liste de ponts à configurer.
-h, --host HOST
En mode inline, spécifier le nom d'hôte pleinement qualifié
-e, --etc-networks CONTENT
Spécifier un contenu pour remplacer le fichier /etc/networks
~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -6,24 +6,13 @@ umountr: démonter un système de fichier récursivement
USAGE USAGE
umountr mountpoint umountr mountpoint
Démonter tous les systèmes de fichiers qui sont montés en-dessous de mountpoint
puis démonter mountpoint. Démonter aussi tous les systèmes de fichiers
bind-montés à partir d'un sous-répertoire de mountpoint.
OPTION OPTION
-c, --continuous -c, --continuous
Continuer même en cas d'erreur Continuer même en cas d'erreur
-r, --recursive
-1, --no-recursive
Spécifier le type de démontage:
Avec -1, un démontage simple est effectué, comme avec umount. Ce type de
démontage est automatiquement sélectionné pour les systèmes de fichier
montés sous le répertoire /media
Avec -r, le démontage est récursif: tous les systèmes de fichiers qui
sont montés en-dessous de mountpoint sont démontés puis mountpoint est
démonté. Tous les systèmes de fichiers bind-montés à partir d'un sous-
répertoire de mountpoint sont démontés aussi.
-o, --poweroff
-k, --no-poweroff
Après avoir démonté le système de fichier mountpoint, éteindre le
périphérique qui y correspond. --poweroff est automatiquement activé
pour les systèmes de fichier montés sous le répertoire /media
~~~ ~~~
-*- 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

@ -56,13 +56,11 @@ COMMANDS
-R Afficher les modifications effectuées depuis la dernière release. -R Afficher les modifications effectuées depuis la dernière release.
clone git@host:path/to/repo [destdir] clone git@host:path/to/repo [destdir]
clone http://host/gituser/path/to/repo [destdir]
Cloner un dépôt distant. Basculer sur la branche develop si elle existe. Cloner un dépôt distant. Basculer sur la branche develop si elle existe.
Initialiser git annex si le dépôt contient des fichiers annexés. Initialiser git annex si le dépôt contient des fichiers annexés.
Récupérer aussi ces fichiers avec 'git annex get' Récupérer aussi ces fichiers avec 'git annex get'
crone git@host:path/to/repo [destdir] crone git@host:path/to/repo [destdir]
crone http://host/gituser/path/to/repo [destdir]
Créer un dépôt distant sur gitolite, puis le cloner Créer un dépôt distant sur gitolite, puis le cloner
develop develop

View File

@ -283,12 +283,6 @@ OPTIONS AVANCEES
référence. Il faut respecter le format, sinon les résultats ne sont pas référence. Il faut respecter le format, sinon les résultats ne sont pas
garantis. Le mieux est de reprendre le résultat de l'option --show-ctnow garantis. Le mieux est de reprendre le résultat de l'option --show-ctnow
en le modifiant un peu si nécessaire. en le modifiant un peu si nécessaire.
-G, --any-ctnow
Pour le développement ou des tests, lancer toutes les commandes dans
l'ordre sans tenir compte de l'heure de référence. Cette commande ne
devrait pas être utilisée en temps normal, mais elle existe pour
simplifier les tests avec --show-ctnow + --force-ctnow dans les cas
simples.
~~~ ~~~
-*- 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

@ -77,9 +77,8 @@ syntaxe 'setx -a array=cmd args...' est supportée aussi
~~~ ~~~
Implémenter une syntaxe lisible et naturelle permettant d'enchainer des Implémenter une syntaxe lisible et naturelle permettant d'enchainer des
traitements sur une valeur. Par exemple, la commande traitements sur une valeur. Par exemple, la commande
evalx cmd1 [args1...] // cmd2 [args2...] // cmd3 [args3...] evalx cmd1... // cmd2... // cmd3...
est équivalente à la commande affiche le résultat de la commande "$(cmd3 $(cmd2 $(cmd1)))"
cmd3 args3 "$(cmd2 args2 "$(cmd1 args1)")"
Retourner le dernier code d'erreur non nul, ou 0 si toutes les commandes se Retourner le dernier code d'erreur non nul, ou 0 si toutes les commandes se
sont exécutées sans erreur. sont exécutées sans erreur.
~~~ ~~~
@ -93,7 +92,7 @@ Implémenter une syntaxe alternative permettant d'enchainer des traitements sur
un flux de données. Par exemple, la commande un flux de données. Par exemple, la commande
evalp cmd1... // cmd2... // cmd3... evalp cmd1... // cmd2... // cmd3...
affiche le résultat de la commande "$(cmd1 | cmd2 | cmd3)" affiche le résultat de la commande "$(cmd1 | cmd2 | cmd3)"
Typiquement, cette fonction permet de faciliter la *construction* d'un Typiquement, cette fonction permet de faciliter la construction d'un
enchainement de commandes par programme, ou de faciliter l'utilisation de la enchainement de commandes par programme, ou de faciliter l'utilisation de la
fonction setx() pour récupérer le résultat d'un enchainement. Dans les autres fonction setx() pour récupérer le résultat d'un enchainement. Dans les autres
cas, il est plus simple et naturel d'écrire les enchainements avec la syntaxe cas, il est plus simple et naturel d'écrire les enchainements avec la syntaxe

View File

@ -13,9 +13,5 @@ retourner vrai si $1 est une valeur numérique entière positive
retourner vrai si $1 est une valeur numérique réelle (positive ou négative) retourner vrai si $1 est une valeur numérique réelle (positive ou négative)
le séparateur décimal peut être . ou , le séparateur décimal peut être . ou ,
~~~ ~~~
## `evali`
~~~
Evaluer une expression numérique
~~~
-*- 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

@ -2,27 +2,27 @@
## `straddp` ## `straddp`
~~~ ~~~
ajouter le préfixe $1 à $2..* ajouter le préfixe $1 à $2*
~~~ ~~~
## `strdelp` ## `strdelp`
~~~ ~~~
enlever le préfixe $1 à $2..* enlever le préfixe $1 à $2*
~~~ ~~~
## `strdelp2` ## `strdelp2`
~~~ ~~~
enlever le préfixe $1 le plus long à $2..* enlever le préfixe $1 le plus long à $2*
~~~ ~~~
## `stradds` ## `stradds`
~~~ ~~~
ajouter le suffixe $1 à $2..* ajouter le suffixe $1 à $2*
~~~ ~~~
## `strdels` ## `strdels`
~~~ ~~~
enlever le suffixe $1 à $2..* enlever le suffixe $1 à $2*
~~~ ~~~
## `strdels2` ## `strdels2`
~~~ ~~~
enlever le suffixe le plus long $1 à $2..* enlever le suffixe le plus long $1 à $2*
~~~ ~~~
## `strlower` ## `strlower`
~~~ ~~~
@ -52,14 +52,14 @@ majuscule
~~~ ~~~
## `strmid` ## `strmid`
~~~ ~~~
Afficher la plage $1 de la valeur $2..*. La plage peut être d'une des formes Afficher la plage $1 de la valeur $2*. La plage peut être d'une des formes
'start', '[start]:length'. Si start est négatif, le compte est effectué à 'start', '[start]:length'. Si start est négatif, le compte est effectué à
partir de la fin de la chaine. Si length est négatif, il est rajouté à la partir de la fin de la chaine. Si length est négatif, il est rajouté à la
longueur de la chaine à partir de start longueur de la chaine à partir de start
~~~ ~~~
## `strrepl` ## `strrepl`
~~~ ~~~
Remplacer dans la valeur $3..* le motif $1 par la chaine $2. $1 peut commencer Remplacer dans la valeur $3* le motif $1 par la chaine $2. $1 peut commencer
par l'un des caractères /, #, % pour indiquer le type de recherche par l'un des caractères /, #, % pour indiquer le type de recherche
~~~ ~~~
## `strops` ## `strops`
@ -122,46 +122,5 @@ Tester si la chaine $1 commence par le wildcard $2
~~~ ~~~
Tester si la chaine $1 se termine par le wildcard $2 Tester si la chaine $1 se termine par le wildcard $2
~~~ ~~~
## `strsplitf`
~~~
Cette fonction doit être appelée avec N arguments (avec N>1). Elle analyse et
découpe l'argument $N comme avec une ligne de commande du shell. Ensuite, elle
appelle la fonction $1 avec les arguments de $2 à ${N-1}, suivi des arguments
obtenus lors de l'analyse de l'argument $N. Par exemple, la commande suivante:
strsplitf cmd arg1 "long arg2" "arg3 'long arg4'"
est équivalente à:
cmd arg1 "long arg2" arg3 "long arg4"
Retourner le code 127 si la fonction à appeler n'est pas spécifiée. Retourner
le code 126 si une erreur s'est produite lors de l'analyse de l'argument $N
~~~
## `strecho`
## `strqvals`
~~~
Afficher chaque argument à part avec des quotes. A chainer avec strsplitf()
~~~
## `strqlines`
~~~
Afficher chaque ligne des fichiers spécifiés comme un argument. A chainer avec
strsplitf()
~~~
## `strqarray`
~~~
Afficher chaque valeur des tableaux $@ comme un argument. A chainer avec
strsplitf()
~~~
## `evals`
~~~
Enchainer des traitements sur des chaines de caractères, comme pour la fonction
evalx(). Il y a cependant quelques différences:
- Seules certains fonctions spécifiques peuvent être utilisées: elles sont
reconnaissables à leur préfixe 'str'. En effet, lors de l'utilisation d'une
commande par evals(), le préfixe 'str' est systématiquement ajouté.
- La fonction strsplitf() est traitée de façon particulière pour lancer une
commande avec le préfixe 'str'
Ainsi, la commande suivante:
evals cmd1 // splitf cmd2
est équivalente à la commande:
strplitf strcmd2 "$(strcmd1)"
~~~
-*- 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

@ -13,9 +13,9 @@ Retourner 0 si une modification a été faite dans le fichier, 1 sinon
~~~ ~~~
## `conf_enableq` ## `conf_enableq`
~~~ ~~~
Comme conf_enable(), mais s'assure que les valeurs sont quotées si Comme conf_enable(), mais s'assure que les valeurs sont quotées dans le
nécessaire dans le fichier. Ceci permet de stocker des valeurs avec des fichier. Ceci permet de stocker des valeurs avec des espaces ou des
espaces ou des caractères spéciaux. caractères spéciaux.
~~~ ~~~
## `conf_disable` ## `conf_disable`
~~~ ~~~

View File

@ -38,6 +38,60 @@ démarrage
~~~ ~~~
Activer le service $1 pour qu'il se lance automatiquement au démarrage Activer le service $1 pour qu'il se lance automatiquement au démarrage
~~~ ~~~
## `network_parse_confbr`
~~~
network_parse_confbr "$confbr" br ifaces
~~~
## `network_format_confbr`
~~~
network_format_confbr "$br" ifaces --> "br:ifaces"
~~~
## `network_parse_confip`
~~~
network_parse_confip "$confip" iface gateway ipsuffixes
~~~
## `network_parse_ipsuffix`
~~~
network_parse_ipsuffix "$ipsuffix" ip suffix
~~~
## `network_format_confip`
~~~
network_format_confip "$iface" "$gateway" ipsuffixes --> "iface//gateway:ipsuffixes"
~~~
## `network_format_ipsuffix`
~~~
network_format_ipsuffix "$ip" "$suffix" --> "ip/suffix"
~~~
## `network_fix_confbrs`
~~~
normaliser le tableau $1(=confbrs): fusionner les doublons
~~~
## `network_fix_confips`
~~~
normaliser le tableau $1(=confips): fusionner les doublons, spécifier le
suffixe /24 par défaut, etc. $2 est le cas échéant l'interface associée
aux adresses ip non qualifiées
~~~
## `network_fix_mainiface`
~~~
A partir des valeurs des tableaux $1(=confbrs) et $2(=confips), et de
l'interface principale $3, déterminer l'interface principale. Si $3 est
spécifié, c'est la valeur sélectionnée. Sinon, si un bridge existe, c'est
le premier bridge qui est sélectionné. Sinon, la première interface est
sélectionnée. Sinon, on prend eth0.
Ensuite, réorganiser les tableaux de façon que confips[0] devienne la
configuration ip de l'interface principale.
~~~
## `network_fix_confs`
## `network_set_confbrs`
~~~
initialiser $1(=confbrs) avec l'état des bridges sur le système courant
~~~
## `network_set_confips`
~~~
initialiser le tableau $1(=confips) avec l'état des interfaces sur le
système courant
~~~
## `network_interfaces_check_confbr` ## `network_interfaces_check_confbr`
~~~ ~~~
Vérifier que la configuration du bridge $1, dont les membres sont les Vérifier que la configuration du bridge $1, dont les membres sont les
@ -81,6 +135,9 @@ $3(=confips)
~~~ ~~~
## `network_fix_hostname` ## `network_fix_hostname`
## `network_fix_mailname` ## `network_fix_mailname`
## `network_fix_exim4`
## `network_fix_postfix`
## `network_fix_hosts`
## `network_config` ## `network_config`
~~~ ~~~
(Re)configurer le réseau sur l'hôte courant. Des efforts sont faits pour (Re)configurer le réseau sur l'hôte courant. Des efforts sont faits pour

View File

@ -73,62 +73,5 @@ Si $1 *semble* déjà être un nom d'hôte pleinement qualifié, l'afficher tel
quel. Sinon utiliser ipcalc_fqdn() pour afficher le nom d'hôte pleinement quel. Sinon utiliser ipcalc_fqdn() pour afficher le nom d'hôte pleinement
qualifié correspondant. qualifié correspondant.
~~~ ~~~
## `network_parse_confbr`
~~~
network_parse_confbr "$confbr" br ifaces
~~~
## `network_format_confbr`
~~~
network_format_confbr "$br" ifaces --> "br:ifaces"
~~~
## `network_parse_confip`
~~~
network_parse_confip "$confip" iface gateway ipsuffixes
~~~
## `network_parse_ipsuffix`
~~~
network_parse_ipsuffix "$ipsuffix" ip suffix
~~~
## `network_format_confip`
~~~
network_format_confip "$iface" "$gateway" ipsuffixes --> "iface//gateway:ipsuffixes"
~~~
## `network_format_ipsuffix`
~~~
network_format_ipsuffix "$ip" "$suffix" --> "ip/suffix"
~~~
## `network_fix_confbrs`
~~~
normaliser le tableau $1(=confbrs): fusionner les doublons
~~~
## `network_fix_confips`
~~~
normaliser le tableau $1(=confips): fusionner les doublons, spécifier le
suffixe /24 par défaut, etc. $2 est le cas échéant l'interface associée
aux adresses ip non qualifiées
~~~
## `network_fix_mainiface`
~~~
A partir des valeurs des tableaux $1(=confbrs) et $2(=confips), et de
l'interface principale $3, déterminer l'interface principale. Si $3 est
spécifié, c'est la valeur sélectionnée. Sinon, si un bridge existe, c'est
le premier bridge qui est sélectionné. Sinon, la première interface est
sélectionnée. Sinon, on prend eth0.
Ensuite, réorganiser les tableaux de façon que confips[0] devienne la
configuration ip de l'interface principale.
~~~
## `network_fix_confs`
## `network_set_confbrs`
~~~
initialiser $1(=confbrs) avec l'état des bridges sur le système courant
~~~
## `network_set_confips`
~~~
initialiser le tableau $1(=confips) avec l'état des interfaces sur le
système courant
~~~
## `network_fix_exim4`
## `network_fix_postfix`
## `network_fix_hosts`
-*- 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

@ -32,6 +32,9 @@ démarrage
~~~ ~~~
Activer le service $1 pour qu'il se lance automatiquement au démarrage Activer le service $1 pour qu'il se lance automatiquement au démarrage
~~~ ~~~
## `network_fix_hostname` ## `create_bridge`
~~~
Créer un nouveau pont nommé $1 avec les paramètres $2
~~~
-*- 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

@ -11,11 +11,6 @@ et $3(=SYSVER) en fonction des valeurs des autres. Cette fonction est à
utiliser quand on récupère cette information de la part de l'utilisateur, utiliser quand on récupère cette information de la part de l'utilisateur,
et qu'il faut compléter et qu'il faut compléter
~~~ ~~~
## `dump_sysinfos`
~~~
Afficher les valeurs de SYSNAME, SYSDIST, SYSVER qui décrivent le système
actuel
~~~
## `get_sysinfos_desc` ## `get_sysinfos_desc`
~~~ ~~~
Afficher une chaine de la forme SYSNAME/SYSDIST/SYSVER qui décrit le Afficher une chaine de la forme SYSNAME/SYSDIST/SYSVER qui décrit le
@ -51,16 +46,6 @@ cela n'a actuellement de sens qu'avec les version de MacOS X. Il faut
aussi impérativement filtrer sur le système, e.g: aussi impérativement filtrer sur le système, e.g:
check_sysinfos -s macosx -d 10.5+ check_sysinfos -s macosx -d 10.5+
~~~ ~~~
## `unsupported_system`
~~~
Afficher un message d'erreur indiquant que le système actuel n'est pas
supporté, et quitter le script
~~~
## `require_sysinfos`
~~~
Vérifier le système actuel avec check_sysinfos(), et afficher un message
d'erreur avec unsupported_system() s'il ne correspond pas à la requête
~~~
## `on_debian` ## `on_debian`
~~~ ~~~
Tester si on est sur debian. charger le module debian si c'est le cas. Tester si on est sur debian. charger le module debian si c'est le cas.

View File

@ -11,7 +11,7 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
exit 0 exit 0
fi fi
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,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 les connexions TCP entrantes sur un port uecho "$scriptname: afficher les connexions TCP entrantes sur un port

10
em
View File

@ -1,19 +1,13 @@
#!/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
: "${EM_GEOMETRY:=150x50+0+67}" "${EM_STDERR:=}" EMACS_GEOMETRY=150x50+0+67
# Essayer avec emacs # Essayer avec emacs
emacs="$(which emacs 2>/dev/null)" emacs="$(which emacs 2>/dev/null)"
if [ -x "$emacs" ]; then if [ -x "$emacs" ]; then
if [ -n "$DISPLAY" ]; then if [ -n "$DISPLAY" ]; then
if [ -n "$EM_STDERR" ]; then exec "$emacs" -g "$EMACS_GEOMETRY" "$@" &
# ne pas supprimer la sortie erreur
exec "$emacs" -g "$EM_GEOMETRY" "$@" &
else
# supprimer la sortie d'erreur. les warnings de GTK sont horripilants
exec "$emacs" -g "$EM_GEOMETRY" "$@" 2>/dev/null &
fi
exit 0 exit 0
else else
exec "$emacs" -nw "$@" exec "$emacs" -nw "$@"

View File

@ -1,122 +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 ipcalc
function display_help() {
uecho "$scriptname: s'assurer que l'hôte courant a l'adresse IP spécifiée
USAGE
$scriptname IPs...
NB: ce script ne supporte que la modification d'interfaces qui ne sont pas des
bridges. il est conçu avant tout pour utilisation sur un serveur, pas un poste
de travail.
OPTIONS
-i, --ignore-iface IFACE
Ajouter une interface à la liste des interfaces à ignorer. Si cette
option est utilisée, la liste par défaut n'est pas utilisée, sauf si
l'option -d est utilisée aussi.
-d, --defaults
Ajouter les valeurs suivantes à liste des interfaces à ignorer:
${DEFAULT_IGNORE_IFACES[*]}
Cette option est automatiquement activée si l'option -i n'est pas
utilisée
-n, --fake
Afficher simplement les modification à effectuer"
}
DEFAULT_IGNORE_IFACES=(
"docker*"
"br-*"
"veth*"
)
DEFAULT_PROFILES=(prod test devel)
ignore_ifaces=()
fake=
args=(
--help '$exit_with display_help'
-i:,--ignore-iface: ignore_ifaces
-d,--defaults '$array_extend ignore_ifaces DEFAULT_IGNORE_IFACES'
-n,--fake fake=1
)
parse_args "$@"; set -- "${args[@]}"
require_debian
for vip in "$@"; do
[ "${vip%/*}" != "$vip" ] || vip="$vip/32"
vips+=("$vip")
done
array_fix_paths ignore_ifaces
[ ${#ignore_ifaces[*]} -gt 0 ] || ignore_ifaces=("${DEFAULT_IGNORE_IFACES[@]}")
if [ -n "$fake" ]; then
set_verbosity --debug
__NETWORK_DEVEL_SHOW_MODIFS=1
__DEBIAN_NETWORK_DEVEL_SHOW_MODIFS=1
fi
################################################################################
# réimplémentation "corrigée" de network_config_partial()
nifile="$__DEBIAN_NETWORK_INTERFACES"
network_set_confips
network_set_confbrs
tmpconfips=()
for confip in "${confips[@]}"; do
network_parse_confip "$confip" iface gateway ipsuffixes
continue=
for ignore_iface in "${ignore_ifaces[@]}"; do
if eval "[[ \"\$iface\" == $(qwc "$ignore_iface") ]]"; then
continue=1
break
fi
done
[ -n "$continue" ] && continue
tmpconfips+=("$confip")
network_parse_ipsuffix "${ipsuffixes[0]}" mainip suffix
for vip in "${vips[@]}"; do
if [ "${vip%.*}" == "${mainip%.*}" ]; then
tmpconfips+=("$iface:$vip")
fi
done
done
confips=("${tmpconfips[@]}")
confbrs=()
network_fix_confs
network_config "" confips confbrs || exit 0
# des modifications ont eu lieu, tenter de configurer les nouvelles adresses
# d'abord calculer les adresses ips qui sont activées
network_set_confips
for confip in "${confips[@]}"; do
network_parse_confip "$confip" iface gateway ipsuffixes
for ipsuffix in "${ipsuffixes[@]}"; do
network_parse_ipsuffix "$ipsuffix" ip suffix
array_addu ips "$ip"
done
done
# puis lister les commandes correspondant aux adresses ips non activées
array_from_lines ups "$(awkrun <"$nifile" -f ips[@] '
$1 == "up" && $2 == "ip" && $3 == "addr" && $4 == "add" {
ip = $5; sub(/(\/[0-9.]+)?$/, "", ip) # enlever suffixe
if (! in_array(ip, ips)) {
$1 = ""
print
}
}')"
if [ ${#ups[*]} -gt 0 ]; then
etitle "Configuration des nouvelles adresses"
for up in "${ups[@]}"; do
estep "$up"
eval "$up"
done
eend
fi

7
fconv
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: convertir un fichier ou les fichiers d'un répertoire uecho "$scriptname: convertir un fichier ou les fichiers d'un répertoire
@ -53,8 +54,6 @@ COMMANDES
Transformer certains caratères UTF-8 en équivalents qui existent en Latin1 Transformer certains caratères UTF-8 en équivalents qui existent en Latin1
na, noaccents na, noaccents
Transformer les caractères accentués en caractères non accentués Transformer les caractères accentués en caractères non accentués
[sed] s/from/to/opts
Filtrer avec l'expression régulière de sed 's/from/to/opts'
sort [-u] sort [-u]
Trier le fichier avec la commande sort. Attention! Il ne faut utiliser 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 que les options de sort qui agissent sur un flux e.g. -u pour trier les
@ -152,8 +151,6 @@ function parse_cmd() {
cr) echo _nl2cr;; cr) echo _nl2cr;;
latin1compat|lc) echo _latin1compat;; latin1compat|lc) echo _latin1compat;;
noaccents|na|fixchars|fc) echo _noaccents;; noaccents|na|fixchars|fc) echo _noaccents;;
s/*) qvals sed "$cmd" "$@";;
sed) qvals sed "$@";;
sort) qvals sort "$@";; sort) qvals sort "$@";;
*) *)
echo "$cmd: commande invalide" echo "$cmd: commande invalide"

9
fnconv
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: renommer un fichier ou les fichiers d'un répertoire uecho "$scriptname: renommer un fichier ou les fichiers d'un répertoire
@ -50,9 +51,7 @@ COMMANDES
u, uppercase u, uppercase
Transformer le nom en majuscule Transformer le nom en majuscule
f, fixcase f, fixcase
Transformer le nom en minuscule s'il est entièrement en majuscule Transformer le nom en minuscule s'il est entièrement en majuscule"
[sed] s/from/to/opts
Renommer le fichier avec l'expression régulière de sed 's/from/to/opts'"
} }
function _lowercase() { function _lowercase() {
@ -164,8 +163,6 @@ function parse_cmd() {
lowercase|lower|l) echo _lowercase;; lowercase|lower|l) echo _lowercase;;
uppercase|upper|u) echo _uppercase;; uppercase|upper|u) echo _uppercase;;
fixcase|fix|f) echo _fixcase;; fixcase|fix|f) echo _fixcase;;
s/*) qvals sed "$cmd" "$@";;
sed) qvals sed "$@";;
*) *)
echo "$cmd: commande invalide" echo "$cmd: commande invalide"
return 1 return 1

64
fndate
View File

@ -11,7 +11,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
exit 0 exit 0
fi fi
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: manipuler des noms de fichier pour les dater uecho "$scriptname: manipuler des noms de fichier pour les dater
@ -59,17 +60,9 @@ OPTIONS
PLACEHOLDER vaut ~~. Si le nom spécifié ne contient pas le PLACEHOLDER, PLACEHOLDER vaut ~~. Si le nom spécifié ne contient pas le PLACEHOLDER,
il est placé au début. il est placé au début.
-@, --force-date DATE -@, --force-date DATE
Si une date du format attendu est déjà présente dans le nom du fichier, Dans le nom spécifié, si la date est déjà présente, forcer son
forcer son remplacement par la valeur spécifiée. Par défaut, le fichier remplacement par la valeur spécifiée. Par défaut, le fichier n'est pas
n'est pas modifié si la date est déjà présente. modifié si la date est déjà présente.
Si le premier ou le dernier argument de ce script ressemblent à une date
(ie. d/m[/y] ou @d[/m[/y]]) et qu'aucun fichier de ce nom n'existe dans
le répertoire courant, activer automatiquement cette option, sauf si
l'option --no-auto-force-date est spécifiée aussi. Ainsi, les commandes
suivantes sont équivalentes:
$scriptname -@ d/m/y file
$scriptname d/m/y file
$scriptname file @d/m/y
-F, --format FORMAT -F, --format FORMAT
Spécifier le format de la date à insérer dans le nom du fichier. Par Spécifier le format de la date à insérer dans le nom du fichier. Par
défaut, FORMAT vaut 'YYMMDD-' défaut, FORMAT vaut 'YYMMDD-'
@ -233,9 +226,7 @@ dcopy) action=copy;;
dmove) action=move;; dmove) action=move;;
dcmd) action=cmd;; dcmd) action=cmd;;
esac esac
cmd_quiet=
placeholder= placeholder=
auto_force_date=1
force_date= force_date=
format= format=
autof= autof=
@ -248,9 +239,7 @@ parse_opts "${PRETTYOPTS[@]}" \
-m,--move action=move \ -m,--move action=move \
-c,--cmd action=cmd \ -c,--cmd action=cmd \
--string action=string \ --string action=string \
--cmd-quiet cmd_quiet=1 \
-P:,--placeholder: placeholder= \ -P:,--placeholder: placeholder= \
--no-auto-force-date auto_force_date= \
-@:,--force-date: force_date= \ -@:,--force-date: force_date= \
-F:,--format: format= \ -F:,--format: format= \
-s,--short '$format=YYMMDD; autof=1' \ -s,--short '$format=YYMMDD; autof=1' \
@ -258,27 +247,6 @@ parse_opts "${PRETTYOPTS[@]}" \
--autof autof=1 \ --autof autof=1 \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
if [ -z "$force_date" -a -n "$auto_force_date" ]; then
# si le premier ou le dernier argument ressemblent à une date
f="$1"; f2="${f#@}"
if [[ "$f" == */* ]] && [ -z "${f//[0-9\/]}" -a ! -e "$f" ]; then
force_date="$f"
shift
elif [[ "$f" == @* ]] && [ -z "${f2//[0-9\/]}" -a ! -e "$f2" ]; then
force_date="$f2"
shift
elif [ $# -gt 1 ]; then
l="${@:$#}"; l2="${l#@}"
if [[ "$l" == */* ]] && [ -z "${l//[0-9\/]}" -a ! -e "$l" ]; then
force_date="$l"
set -- "${@:1:$(($# - 1))}"
elif [[ "$l" == @* ]] && [ -z "${l2//[0-9\/]}" -a ! -e "$l2" ]; then
force_date="$l2"
set -- "${@:1:$(($# - 1))}"
fi
fi
fi
[ -n "$create" ] || create=file [ -n "$create" ] || create=file
[ -n "$placeholder" ] || placeholder="~~" [ -n "$placeholder" ] || placeholder="~~"
[ -n "$force_date" ] && setx force_date=parse_date "$force_date" [ -n "$force_date" ] && setx force_date=parse_date "$force_date"
@ -294,7 +262,7 @@ if [ "$action" == cmd ]; then
found= found=
for arg in "$@"; do for arg in "$@"; do
if have_ph "$arg"; then if have_ph "$arg"; then
[ -z "$cmd_quiet" ] && check_interaction -c && evalx qvals "${args[@]}" "$arg" // estepi "Commande:" check_interaction -c && evalx qvals "${args[@]}" "$arg" // estepi "Commande:"
setx arg=replace_ph "$arg" "$force_date" setx arg=replace_ph "$arg" "$force_date"
read_value "Veuillez confirmer le nom" arg "$arg" read_value "Veuillez confirmer le nom" arg "$arg"
found=1 found=1
@ -361,24 +329,14 @@ elif [ "$action" == create ]; then
setx dir=dirname -- "$src" setx dir=dirname -- "$src"
setx srcname=basename -- "$src" setx srcname=basename -- "$src"
if [ -e "$src" ]; then if [ -e "$src" ]; then
estep "Renommage de $(ppath "$src")"
setx destname=replace_ph "$srcname" "$force_date" setx destname=replace_ph "$srcname" "$force_date"
setx dest=abspath "$dir/$destname" setx dest=abspath "$dir/$destname"
confirm_do=1 [ "$src" != "$dest" ] || ewarn "La source et la destination sont identiques"
if [ "$src" == "$dest" ]; then read_value "Veuillez confirmer le nom" destname "$destname"
if [ -n "$force_date" ]; then
ewarn "La source et la destination sont identiques"
else
estepi "$(ppath "$src"): aucun renommage nécessaire"
confirm_do=
fi
fi
if [ -n "$confirm_do" ]; then
estep "Renommage de $(ppath "$src")"
read_value "Veuillez confirmer le nom" destname "$destname"
setx dest=abspath "$dir/$destname" setx dest=abspath "$dir/$destname"
[ "$src" != "$dest" ] && mv -i "$src" "$dir/$destname" [ "$src" != "$dest" ] && mv -i "$src" "$dir/$destname"
fi
else else
setx destname=replace_ph "$srcname" "$force_date" setx destname=replace_ph "$srcname" "$force_date"
setx dest=abspath "$dir/$destname" setx dest=abspath "$dir/$destname"

75
foreach
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 commande pour un ensemble d'arguments uecho "$scriptname: lancer une commande pour un ensemble d'arguments
@ -73,23 +74,10 @@ OPTIONS
Si l'expansion est désactivée, il faut protéger le caractère \$ pour Si l'expansion est désactivée, il faut protéger le caractère \$ pour
qu'il soit traité, e.g, avec les examples ci-dessus: qu'il soit traité, e.g, avec les examples ci-dessus:
$scriptname -n '*.c' 'cp \"\$item\" dest/dir' $scriptname -n '*.c' 'cp \"\$item\" dest/dir'
--title -t, --title
--pt, --parent-title --no-title
--nt, --no-title
Afficher (resp. ne pas afficher) chaque correspondance avant de lancer Afficher (resp. ne pas afficher) chaque correspondance avant de lancer
la commande. Par défaut, l'affichage est effectué. la commande. Par défaut, l'affichage est effectué."
Avec --parent-title, pour chaque correspondance afficher plutôt le
répertoire parent (valide uniquement avec l'option -p)
-S, --git-status
Equivalent à spécifier la commande 'git status --p'
Utiliser par exemple avec -g, -G ou -C
-G, --git-projects
Equivalent à '--ptitle -p */.git --' e.g '$scriptname -G git pull' pour
mettre à jour les dépôts situés dans un répertoire
-C, --composer-projects
Equivalent à '--ptitle -p */composer.json --'
--cc, --composer-cmd
Equivalent à '--ptitle -p */composer.json -- dk composer'"
} }
basedir= basedir=
@ -97,9 +85,7 @@ match=auto
changedir= changedir=
parentdir= parentdir=
expand=1 expand=1
title=auto title=1
command=
shortcut=
args=(+ args=(+
--help '$exit_with display_help' --help '$exit_with display_help'
-b:,--basedir: basedir= -b:,--basedir: basedir=
@ -111,47 +97,18 @@ args=(+
-s,--string match=string -s,--string match=string
-x,--expand expand=1 -x,--expand expand=1
-n,--no-expand expand= -n,--no-expand expand=
--title title=1 -t,--title title=1
--pt,--parent-title title=p --no-title title=
--nt,--no-title title=
-S,--git-status command=git-status-p
-G,--git-projects shortcut=git
-C,--composer-projects shortcut=composer
--cc,--composer-cmd shortcut=composer-cmd
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
case "$command" in
git-status-p)
if [ -n "$shortcut" ]; then
set -- git status --p "$@"
else
set -- "$@" -- git status --p
fi
;;
esac
case "$shortcut" in
git)
set -- */.git -- "$@"
parentdir=1
[ "$title" == auto ] && title=p
;;
composer)
set -- */composer.json -- "$@"
parentdir=1
[ "$title" == auto ] && title=p
;;
composer-cmd)
set -- */composer.json -- "$scriptdir/dk" composer "$@"
parentdir=1
[ "$title" == auto ] && title=p
;;
esac
if [ "$match" == auto ]; then if [ "$match" == auto ]; then
[ -n "$changedir" ] && match=dir || match=all if [ -n "$changedir" ]; then
match=dir
else
match=all
fi
fi fi
[ "$title" == auto ] && title=1
alt_syntax= alt_syntax=
for sep in "$@"; do for sep in "$@"; do
@ -218,11 +175,7 @@ fi
[ -n "$title" ] && einfo "${#items[@]} correspondance(s) trouvée(s)" [ -n "$title" ] && einfo "${#items[@]} correspondance(s) trouvée(s)"
let index=0 let index=0
for item in "${items[@]}"; do for item in "${items[@]}"; do
if [ -n "$parentdir" -a "$title" == p ]; then [ -n "$title" ] && etitle "$item"
etitle "$(dirname -- "$item")"
elif [ -n "$title" ]; then
etitle "$item"
fi
i="$item" i="$item"
setx file=abspath "$item" setx file=abspath "$item"
setx dir=dirname -- "$file" setx dir=dirname -- "$file"

3
geturl
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: Télécharger un fichier avec wget ou curl uecho "$scriptname: Télécharger un fichier avec wget ou curl

28
ipaddr
View File

@ -1,28 +0,0 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# frontend pour 'ip addr' qui formatte l'affichage pour prendre moins de place
if [ -x /usr/bin/ip ]; then IP=/usr/bin/ip
elif [ -x /bin/ip ]; then IP=/bin/ip
else IP=ip
fi
if [ -n "IPADDR_COLOR" ]; then isatty=1
else tty -s <&1 && isatty=1 || isatty=
fi
"$IP" addr "$@" | awk -v isatty="$isatty" '
isatty && $0 ~ /^[0-9]/ {
$0 = gensub(/: ([^:]+):/, ": \x1B[32m\\1\x1B[0m:", 1)
}
isatty && $1 == "inet" {
$0 = gensub(/inet ([^ ]+) /, "inet \x1B[34m\\1\x1B[0m ", 1)
}
{
if ($1 == "inet" || $1 == "inet6") {
printf "%s -- ", $0
getline
sub(/^ +/, "")
}
}
{ print }'

33
ldiff
View File

@ -1,33 +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: frontend de diff pour comparer deux fichiers encodés en latin1
USAGE
$scriptname [options] Lfile Rfile
OPTIONS
-u, -U, --unified N
-w, --ignore-all-space
-B, --ignore-blank-lines
options de diff qui sont reprises telles quelles"
}
diffopts=()
args=(
--help '$exit_with display_help'
-u '$diffopts+=(-u)'
-U:,--unified: '$diffopts+=(-U "$value_")'
-w,--ignore-all-space '$diffopts+=(-w)'
-B,--ignore-blank-lines '$diffopts+=(-B)'
)
parse_args "$@"; set -- "${args[@]}"
Lfile="$1"
Rfile="$2"
[ -n "$Lfile" -a -n "$Rfile" ] || die "vous devez spécifier les deux fichiers"
[ -d "$Lfile" -o -d "$Rfile" ] && die "il faut absolument comparer deux fichiers"
diff "${diffopts[@]}" <(iconv -f latin1 -t utf-8 "$Lfile") <(iconv -f latin1 -t utf-8 "$Rfile")

View File

@ -224,7 +224,7 @@ found_element && $0 ~ /<\/element/ {
local instance notfirst= local instance notfirst=
for instance in "$@"; do for instance in "$@"; do
script="$script${notfirst:+|| }name == $(qawk "$instance")" script="$script${notfirst:+|| }name == \"$(quote_awk "$instance")\""
notfirst=1 notfirst=1
done done
script="$script"') { script="$script"') {
@ -304,7 +304,7 @@ found_element && $0 ~ /<\/element/ {
local instance notfirst= local instance notfirst=
for instance in "$@"; do for instance in "$@"; do
script="$script${notfirst:+|| }name == $(qawk "$instance")" script="$script${notfirst:+|| }name == \"$(quote_awk "$instance")\""
notfirst=1 notfirst=1
done done
script="$script"') { script="$script"') {

41
lgrep
View File

@ -1,41 +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: frontend de grep pour chercher dans un fichier encodé en latin1
USAGE
$scriptname [options] FILE
OPTIONS
options de grep qui sont reprises telles quelles"
}
grepopts=()
args=(
--help '$exit_with display_help'
-E,--extended-regexp '$grepopts+=(-E)'
-F,--fixed-strings '$grepopts+=(-F)'
-G,--basic-regexp '$grepopts+=(-G)'
-P,--perl-regexp '$grepopts+=(-P)'
-i,--ignore-case '$grepopts+=(-i)'
-v,--invert-match '$grepopts+=(-v)'
-L,--files-without-match '$grepopts+=(-L)'
-l,--files-with-matches '$grepopts+=(-l)'
-q,--quiet,--silent '$grepopts+=(-q)'
-s,--no-messages '$grepopts+=(-s)'
-H,--with-filename '$grepopts+=(-H)'
-h,--no-filename '$grepopts+=(-h)'
-a,--text '$grepopts+=(-a)'
-r,--recursive '$grepopts+=(-r)'
-R,--dereference-recursive '$grepopts+=(-R)'
)
parse_args "$@"; set -- "${args[@]}"
pattern="$1"
args=("${@:2}")
#XXX ajouter le support de -r, -h, -H, notamment si ${args[@]} contient un
# répertoire
iconv -f latin1 -t utf-8 "${args[@]}" | grep "${grepopts[@]}" "$pattern"

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"""%(scriptname)s: afficher le hash SHA-1 d'un fichier exprimé en base 36 u"""%(scriptname)s: afficher le hash SHA-1 d'un fichier exprimé en base 36

View File

@ -4,25 +4,22 @@
if [ -n "$UTOOLS_BASH_COMPLETION" ]; then if [ -n "$UTOOLS_BASH_COMPLETION" ]; then
function __bash_completion_enabled() { return 1; } function __bash_completion_enabled() { return 1; }
function __bash_completion_module_enabled() { return 1; } function __bash_completion_module_enabled() { return 1; }
_file= if [ -f /etc/debian_version ]; then
if [ -n "$UTOOLS_BASH_COMPLETION_COMPAT" ]; then
_file="@@dest@@/lib/ulib/$UTOOLS_BASH_COMPLETION_COMPAT/bash_completion"
elif [ -f /etc/debian_version ]; then
case "$(</etc/debian_version)" in case "$(</etc/debian_version)" in
6*|squeeze*) 6*|squeeze*)
# le code suivant n'est compatible qu'avec debian squeeze (plus # le code suivant n'est compatible qu'avec debian squeeze (plus
# exactement, avec bash 4.0) # exactement, avec bash 4.0)
_file="@@dest@@/lib/ulib/bash40/bash_completion" _file="@@dest@@/lib/ulib/bash40/bash_completion"
;; ;;
7*|wheezy*|8*|jessie*|9*|stretch*|10*|buster*) 7*|wheezy*|8*|jessie*)
# le code suivant n'est compatible qu'avec debian wheezy et # le code suivant n'est compatible qu'avec debian wheezy et
# supérieur (plus exactement, avec bash 4.1) # supérieur (plus exactement, avec bash 4.1)
_file="@@dest@@/lib/ulib/bash41/bash_completion" _file="@@dest@@/lib/ulib/bash41/bash_completion"
;; ;;
esac esac
[ -f "$_file" ] && source "$_file"
unset _file
fi fi
[ -f "$_file" ] && source "$_file"
unset _file
if __bash_completion_enabled; then if __bash_completion_enabled; then
for i in "@@dest@@/lib/completion.d/"*; do for i in "@@dest@@/lib/completion.d/"*; do
[ -f "$i" ] || continue [ -f "$i" ] || continue

View File

@ -1,54 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
if [ -n "$UTOOLS_DOCKER_ALIASES" ]; then
#if [ "$DOCKER_MACHINE_WRAPPED" == true ]; then
# alias dm=__docker_machine_wrapper
#else
# alias dm=docker-machine
#fi
function dm() {
case "$1" in
use|ssh)
if [ -n "$2" -a -f ~/etc/default/dk ]; then
# chercher les aliases éventuels
local cmd="$1"; shift
local machine="$1"; shift
machine="$(
CLUSTERDIRS=()
DM_ALIASES=()
source ~/etc/default/dk
for alias_machine in "${DM_ALIASES[@]}"; do
if [ "${alias_machine%%:*}" == "$machine" ]; then
echo "${alias_machine#*:}"
exit
fi
done
for clusterdir in "${CLUSTERDIRS[@]}"; do
if [ -f "$clusterdir/0config/configure.conf" ]; then
DM_ALIASES=()
source "$clusterdir/0config/configure.conf"
for alias_machine in "${DM_ALIASES[@]}"; do
if [ "${alias_machine%%:*}" == "$machine" ]; then
echo "${alias_machine#*:}"
exit
fi
done
fi
done
echo "$machine"
)"
set -- "$cmd" "$machine" "$@"
fi
;;
esac
if [ "$DOCKER_MACHINE_WRAPPED" == true ]; then
__docker_machine_wrapper "$@"
else
docker-machine "$@"
fi
}
if [ -n "$UTOOLS_BASH_COMPLETION" ]; then
complete -F _docker_machine dm
fi
fi

View File

@ -9,12 +9,8 @@
# Activer l'auto complétion de bash pour les outils de nutools # Activer l'auto complétion de bash pour les outils de nutools
#export UTOOLS_BASH_COMPLETION=1 #export UTOOLS_BASH_COMPLETION=1
#export UTOOLS_BASH_COMPLETION_COMPAT=bash41
# utools utilise su plutôt que sudo pour la fonction run_as_root et le script # utools utilise su plutôt que sudo pour la fonction run_as_root et le script
# _root. Par défaut, ce n'est le cas que si sudo n'est pas installé. Si sudo est # _root. Par défaut, ce n'est le cas que si sudo n'est pas installé. Si sudo est
# configuré, il est préférable de ne pas utiliser su. # configuré, il est préférable de ne pas utiliser su.
#export UTOOLS_USES_SU=false #export UTOOLS_USES_SU=false
# Activer les aliases pour l'utilisation de docker
#export UTOOLS_DOCKER_ALIASES=1

View File

@ -1,25 +1,17 @@
# -*- 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
function __nutools_host_completion() { function __nutools_host_completion() {
local cur prev; _get_comp_words_by_ref cur prev local cur prev
[ "$prev" == "-h" -o "$prev" == "-H" -o "$prev" == "--host" ] && _known_hosts_real "$cur" _get_comp_words_by_ref cur prev
return 0 if [ "$prev" == "-h" -o "$prev" == "-H" ]; then
}
function __nutools_whost_completion() {
local cur prev; _get_comp_words_by_ref cur prev
if [ "$prev" == "-h" -o "$prev" == "-H" -o "$prev" == "--host" ]; then
_known_hosts_real "$cur"
elif [ "$prev" == "-w" -o "$prev" == "--whost" ]; then
_known_hosts_real "$cur" _known_hosts_real "$cur"
fi fi
return 0
} }
complete -F __nutools_host_completion -o default uinst ruinst runs rruns rwoinst rtoinst complete -F __nutools_host_completion -o default uinst ruinst runs rruns
complete -F __nutools_whost_completion -o default rwoinst
if __bash_completion_module_enabled ssh; then if __bash_completion_module_enabled ssh; then
shopt -u hostcomplete shopt -u hostcomplete
complete -F _ssh ussh cssh mssh complete -F _ssh ussh cssh
fi fi
if __bash_completion_module_enabled umount; then if __bash_completion_module_enabled umount; then

View File

@ -4,12 +4,3 @@
#DEFAULT_ADMIN=supervision-gdrsi@listes.univ-reunion.fr #DEFAULT_ADMIN=supervision-gdrsi@listes.univ-reunion.fr
#DEFAULT_CERTSDIR=1507-renater #DEFAULT_CERTSDIR=1507-renater
#DEFAULT_CANAME=1507-DigiCertCA.crt #DEFAULT_CANAME=1507-DigiCertCA.crt
# Valeurs des domaines publics et privés ainsi que préfixe pour les adresses de
# service. Chaque élément du tableau PUBDOMAINS doit avoir un correspondant dans
# le tableau PRIDOMAINS.
# Avec la configuration par défaut suivante, on considère que l'adresse
# privée correspondant à HOST.univ-reunion.fr est vs-HOST.univ.run
#PUBDOMAINS=(univ-reunion.fr)
#PRIDOMAINS=(univ.run)
#VSPREFIX=vs-

View File

@ -1,4 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Emplacement où se trouve le dépôt source pour deploy
#DEPLOY_SRCDIR=~/wop/deploy

View File

@ -1,24 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Profil par défaut
#PROFILE=prod
# Aliases pour docker-machine
#DM_ALIASES=(alias:name)
# Profiles pour docker-machine
#DM_PROFILES=(name:profile...)
# Répertoires de gestion de cluster. Dans chacun de ces répertoires, le fichier
# 0config/configure.conf est sourcé à la recherche de définitions de profils et
# d'aliases
#CLUSTERDIRS=(~/wop/containers/*.univ.run)
# Répertoire de base par défaut des projets en mode devel
#DEFAULT_DEVEL_SRCDIR="$HOME/wop"
#COMPOSER_DEVEL_SRCDIR="$HOME/wop/php"
#MAVEN_DEVEL_SRCDIR="$HOME/wop/sn"
# Image à utiliser pour les builds
#DEFAULT_COMPOSER_IMAGE=pubdocker.univ-reunion.fr/image/php:d11
#DEFAULT_MAVEN_IMAGE=pubdocker.univ-reunion.fr/image/javabuilder:d11

View File

@ -1,23 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Réseaux
NETWORKS=(
ur # université de la réunion
ksct # ks.jclain.fr
)
ur_INCLUDES=(10/8)
ur_EXCLUDES=(10.42/16)
ur_DOMAINS=(univ.run univ-reunion.fr)
ksct_INCLUDES=(192.168.97/24)
ksct_EXCLUDES=()
ksct_DOMAINS=(ct)
# Règles de la forme FROM:TO:SSH
RULES=(
ksct:ksct:ssh
:ksct:kssh
ur::ssh
:ur:fssh
)

View File

@ -1,35 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Liste de préfixes permettant de taper le nom d'un dépôt plus rapidement e.g
# repoctl create g/ssi-php/myproj
# repoctl create v:modules/myproj
# sont équivalents à
# repoctl create https://git.univ-reunion.fr/ssi-php/myproj
# repoctl create git@vcs.univ.run:modules/myproj
# Le format est ALIAS=ACTUAL
#
# Ces définitions fonctionnent aussi pour tous les scripts qui utilisent
# repoctl, dont notamment pclone et pcrone
REPO_PREFIXES=(
s:=git@git.univ-reunion.fr:
g/=https://git.univ-reunion.fr/
v:=git@vcs.univ.run: av/=https://vcs.univ-reunion.fr/anongit/
p:=pgit@vcs.univ.run: ap/=https://pvcs.univ-reunion.fr/anongit/
j/=https://git.jclain.fr/
)
# Définitions des types de dépôt. Le format est NAME:TYPE:PREFIX
# * NAME est utilisé pour définir des configurations supplémentaires
# * TYPE peut valoir gitolite ou gogs (ou gitea qui est un alias de gogs). Le
# type par défaut est 'gitolite'
REPO_TYPES=(
ur:gitea:https://git.univ-reunion.fr/
jclain:gitea:https://git.jclain.fr/
)
# Configuration de l'accès à l'API gogs
# un nom de dépôt est de la forme user/repo. Si user != $GOGS_USER alors on crée
# dans une organisation
#ur_GOGS_URL=https://git.univ-reunion.fr
#ur_GOGS_USER="$USER"
#ur_GOGS_KEY=

View File

@ -1,11 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Mode par défaut: prod ou devel
#MODE=auto
# Répertoire des profils
#PROFILEDIR=/etc/sqlmig
# Mapping profil/mode
#prod_PROFILE_MODE=prod
#test_PROFILE_MODE=devel

View File

@ -1,8 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Règles pour le classement des fichiers. Chaque règle est de la forme
# pattern:destdir[:renamef]
RULES=()
# Règles nommées. Chaque règle est de la forme name:destdir[:renamef]
NRULES=()

View File

@ -1,20 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
default_profile "${DKBUILD_PROFILE:-prod}"
if profile jclain; then
setenv REGISTRY=docker.jclain.fr
setenv PRIVAREG=docker.jclain.fr
elif profile prod test; then
setenv REGISTRY=pubdocker.univ-reunion.fr
setenv PRIVAREG=pridocker.univ-reunion.fr
host_mappings=(
pridocker.univ-reunion.fr:10.85.1.56
pubdocker.univ-reunion.fr:10.85.1.57
repos.univ-reunion.fr:10.85.1.57
git.univ-reunion.fr:10.85.1.55
)
default docker host-mappings="${host_mappings[*]}"
elif profile devel; then
setenv REGISTRY=docker.devel.self
setenv PRIVAREG=docker.devel.self
fi

View File

@ -1 +0,0 @@
php

View File

@ -1,3 +0,0 @@
*.zip filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.tar.gz filter=lfs diff=lfs merge=lfs -text

View File

@ -1,2 +0,0 @@
.~lock*#
.*.swp

View File

@ -1,3 +0,0 @@
# -*- coding: utf-8 mode: dockerfile -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
FROM $REGISTRY/debian/min:$DIST
#RUN /debian/pkg i

View File

@ -1,2 +0,0 @@
/b/t/
**/.git/

View File

@ -1,3 +0,0 @@
/b/
/Dockerfile
# autogénéré

View File

@ -1,11 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setdists d11
# fichiers communs
copy ../common/ ./ gitignore=.
dockerfile "" Dockerfile.in sed="
s/\\\$REGISTRY/$REGISTRY/
s/\\\$DIST/$DIST/
"
build

View File

@ -1 +0,0 @@
../dkbuild.env

View File

@ -1,9 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
dists=(
d11
)
setdists "${dists[@]}"
if dist d11; then
include d11
fi

View File

@ -1,3 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setenv REGISTRY=pubdocker.univ-reunion.fr
setenv IMAGE=$REGISTRY/GROUP/NAME

View File

@ -1,3 +0,0 @@
/Dockerfile
.~lock*#
.*.swp

View File

@ -1,25 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
if profile prod; then
default checkout branch=master
elif profile test devel; then
default checkout branch=develop
fi
default composer image=$REGISTRY/image/phpbuilder:$DIST
## web ########################################################################
checkout https://git.univ-reunion.fr/sda-php/NAME-app b/web
composer b/web
dockerfile
# -*- coding: utf-8 mode: dockerfile -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
FROM $REGISTRY/image/apache-php-myiccas:$DIST
#RUN /debian/pkg i
#ENV MSMTP_ENABLE=1
#COPY b/web/config/msmtp /msmtp-config
COPY b/web/config/ssl /ssl-config
COPY b/web/config/apache /apache-config
COPY b/web/config/php /php-config
#COPY b/web/config/before-start-apache /
COPY b/web /var/www/app
build

View File

@ -1,4 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setenv REGISTRY=pubdocker.univ-reunion.fr
setenv IMAGE=$REGISTRY/GROUP/NAME
setenv DIST=d11

View File

@ -1,6 +0,0 @@
/docker-compose.yml
/docker-compose.*.yml
/web/Dockerfile
/db/Dockerfile
.~lock*#
.*.swp

View File

@ -1,37 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setprofiles prod test devel
if profile prod; then
default checkout branch=master
elif profile test devel; then
default checkout branch=develop
fi
default composer image=$REGISTRY/image/phpbuilder:$DIST
## web ########################################################################
checkout https://git.univ-reunion.fr/sda-php/NAME-app web/b/web
composer web/b/web
dockerfile context=web
# -*- coding: utf-8 mode: dockerfile -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
FROM $REGISTRY/image/apache-php-myiccas:$DIST
#RUN /debian/pkg i
#ENV MSMTP_ENABLE=1
#COPY b/web/config/msmtp /msmtp-config
COPY b/web/config/ssl /ssl-config
COPY b/web/config/apache /apache-config
COPY b/web/config/php /php-config
#COPY b/web/config/before-start-apache /
COPY b/web /var/www/app
## db #########################################################################
copy web/b/web/config/sqlmig db/config/mariadb/sqlmig
dockerfile context=db
# -*- coding: utf-8 mode: dockerfile -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
FROM $REGISTRY/image/mariadb:$DIST
COPY config/mariadb /mariadb-config

View File

@ -1,4 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setenv REGISTRY=pubdocker.univ-reunion.fr
setenv IMAGE=$REGISTRY/GROUP/NAME
setenv DIST=d11

View File

@ -1,12 +0,0 @@
# -*- coding: utf-8 mode: yaml -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8
version: "3.7"
services:
db:
image: $REGISTRY/devel/GROUP/NAME-db
web:
image: $REGISTRY/devel/GROUP/NAME-web
environment:
- APP_PROFILE=devel
- BASE_URL=http://NAME.self

View File

@ -1,14 +0,0 @@
# -*- coding: utf-8 mode: yaml -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8
version: "3.7"
services:
db:
image: $REGISTRY/GROUP/NAME-db
web:
image: $REGISTRY/GROUP/NAME-web
environment:
- APP_PROFILE=prod
- BASE_URL=https://NAME.univ-reunion.fr
extra_hosts:
- "casn.univ-reunion.fr:10.85.1.15"

View File

@ -1,14 +0,0 @@
# -*- coding: utf-8 mode: yaml -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8
version: "3.7"
services:
db:
image: $REGISTRY/test/GROUP/NAME-db
web:
image: $REGISTRY/test/GROUP/NAME-web
environment:
- APP_PROFILE=test
- BASE_URL=https://NAME-test.univ-reunion.fr
extra_hosts:
- "casn.univ-reunion.fr:10.85.1.15"

View File

@ -1,34 +0,0 @@
# -*- coding: utf-8 mode: yaml -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8
version: "3.7"
services:
db:
build: db
volumes:
- db-data:/var/lib/mysql
networks:
default:
aliases:
- NAMEdb
deploy:
update_config:
order: stop-first
web:
build: web
volumes:
- log-data:/var/log/apache2
- session-data:/var/lib/php/sessions
extra_hosts:
- "smtp.univ.run:10.82.70.46"
- "vs-apoprod-bdd.univ.run:10.82.91.11"
- "vs-apotest-bdd.univ.run:10.82.91.13"
- "vs-apodevp-bdd.univ.run:10.82.91.15"
deploy:
update_config:
order: start-first
volumes:
db-data:
log-data:
session-data:

View File

@ -1,8 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Description des templates de ce répertoire
TEMPLATES=(
[image]="Image générique basée sur debian"
[php]="Application web PHP"
[php_db]="Application web PHP avec base de données"
)

View File

@ -1,5 +0,0 @@
/Dockerfile
/src
/dest
/srcdir/
/destdir/

View File

@ -1,8 +0,0 @@
# tests
Lancer un test de cette façon
~~~sh
../../../dkbuild -j test-xxx
~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -1,2 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setenv REGISTRY=docker.jclain.fr

View File

@ -1,16 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
section "variables de build"
setarg A="arg A"
resetarg B="arg B"
info "A=${ARGS[A]}, B=${ARGS[B]}"
if [ "${ARGS[A]}" != x ]; then
note "\
Essayer de relancer avec
$(qvals dkbuild -j "$(relpath "$DKBUILD")" --arg A=x --arg B=y)
on ne devrait pas pouvoir modifier la valeur de B"
fi
# pas de build automatique
AUTOBUILD=

View File

@ -1,13 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setenv REGISTRY=pubdocker.univ-reunion.fr
setenv IMAGE=$REGISTRY/group/name
info "IMAGE=$IMAGE"
if [ "$REGISTRY" == pubdocker.univ-reunion.fr ]; then
note "\
Essayer de relancer avec
$(qvals dkbuild -j "$(relpath "$DKBUILD")" -c registry.env)
La valeur de IMAGE devrait changer"
fi
AUTOBUILD=

View File

@ -1,15 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
run rm -rf src dest srcdir destdir
run mkdir srcdir
genfile srcdir/src <<<"file"
run ln -s src srcdir/link
copy srcdir destdir
if run; then
[ -f destdir/src ] || die "destdir/src n'a pas été créé"
diff -qr srcdir destdir || die "srcdir et destdir ne sont pas identiques"
fi
AUTOBUILD=

View File

@ -1,13 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
run rm -rf src dest srcdir destdir
run mkdir srcdir
genfile srcdir/src <<<"file"
run ln -s src srcdir/link
genfile dest <<<"dest"
copy srcdir dest
info "on ne devrait pas arriver ici"
AUTOBUILD=

View File

@ -1,20 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setdists v1-d11 v2-d11 v1-d10
setenv IMAGE=dkbuild-tests/distversions
dockerfile
# -*- coding: utf-8 mode: dockerfile -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
FROM scratch
ENV var=$DIST-$VERSION
build
info "vérifier les images construites avec
dk ls dkbuild-tests/distversions
on devrait avoir les images suivantes:
dkbuild-tests/distversions:v1-d10
dkbuild-tests/distversions:d10 -> v1-d10
dkbuild-tests/distversions:v1-d11
dkbuild-tests/distversions:v2-d11
dkbuild-tests/distversions:d11 -> v2-d11
dkbuild-tests/distversions:latest -> v2-d11
"

View File

@ -1,14 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
run rm -rf src dest srcdir destdir
genfile src <<<"file"
run mkdir destdir
copy src destdir
if run; then
[ -f destdir/src ] || die "destdir/src n'a pas été créé"
diff -q src destdir/src || die "src et destdir/src ne sont pas identiques"
fi
AUTOBUILD=

View File

@ -1,13 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
run rm -rf src dest srcdir destdir
genfile src <<<"file"
copy src dest
if run; then
[ -f dest ] || die "dest n'a pas été créé"
diff -q src dest || die "src et dest ne sont pas identiques"
fi
AUTOBUILD=

View File

@ -1,27 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
run rm -rf src dest srcdir destdir
run mkdir srcdir
genfile srcdir/src <<<"file"
run ln -s src srcdir/link
run mkdir destdir
genfile destdir/.gitignore <<<"/a/"
copy srcdir destdir/a gitignore=destdir
copy srcdir destdir/b gitignore=destdir
if run; then
[ -f destdir/a/src ] || die "destdir/a/src n'a pas été créé"
[ -f destdir/b/src ] || die "destdir/b/src n'a pas été créé"
[ -L destdir/a/link ] || die "destdir/a/link n'a pas été créé"
[ -L destdir/b/link ] || die "destdir/b/link n'a pas été créé"
ignored="$(<destdir/.gitignore)"
expected="\
/a/
/b/link
/b/src"
[ "$ignored" == "$expected" ] || die "les fichiers n'ont pas été ignorés"
fi
AUTOBUILD=

View File

@ -1,13 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setdists d11 d10
setprofiles prod test
if dist LATEST; then
info "$DIST est la distribution la plus récente"
fi
if profile DEFAULT; then
info "$PROFILE est le profil par défaut"
fi
# pas de build automatique
AUTOBUILD=

View File

@ -1,10 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setdists v1-d11 v2-d11 v1-d10
if dist LATEST; then
info "$DIST est la distribution la plus récente"
fi
info "version=$VERSION"
# pas de build automatique
AUTOBUILD=

View File

@ -1,10 +0,0 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setprofiles v1-prod v2-prod test
if profile DEFAULT; then
info "$PROFILE est le profil par défaut"
fi
info "version=$VERSION"
# pas de build automatique
AUTOBUILD=

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