Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
Jephté Clain | 627e54a1e9 | |
Jephté Clain | 9c40aa38f3 |
742
CHANGES.md
742
CHANGES.md
|
@ -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
|
||||
|
||||
* `748c2f7` Intégration de la branche update-network
|
||||
|
|
11
EnsureVM
11
EnsureVM
|
@ -1,7 +1,7 @@
|
|||
#!/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 service
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS service
|
||||
|
||||
function display_help() {
|
||||
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é
|
||||
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
|
||||
for module in vboxpci vboxnetadp vboxnetflt vboxdrv; do
|
||||
if lsmod | quietgrep "$module"; then
|
||||
|
@ -82,7 +82,7 @@ function ensure_virtualbox() {
|
|||
# sont chargés, et que le service vboxdrv est démarré
|
||||
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
|
||||
for module in kvm_intel kvm_amd kvm; do
|
||||
if lsmod | quietgrep "$module"; then
|
||||
|
@ -117,12 +117,9 @@ function ensure_virtualbox() {
|
|||
}
|
||||
|
||||
check_only=
|
||||
exclusive=
|
||||
parse_opts + "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
-c,--check-only,--check check_only=1 \
|
||||
-x,--exclusive exclusive=1 \
|
||||
-s,--shared exclusive= \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
run_as_root "$@"
|
||||
|
|
61
README.md
61
README.md
|
@ -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
4
SKvm
|
@ -1,7 +1,7 @@
|
|||
#!/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 virsh
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS virsh
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: lancer une machine virtuelle kvm
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: lancer une machine virtuelle VirtualBox
|
||||
|
|
86
Sscreen
86
Sscreen
|
@ -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
16
TODO.md
|
@ -1,10 +1,14 @@
|
|||
# TODO
|
||||
|
||||
dkbuild
|
||||
* setversion peut prendre la version depuis la branche git d'un dépôt
|
||||
* un argument permettrait de spécifier comment la version est calculée à
|
||||
partir du dépôt
|
||||
* si cela a du sens, une commande setlatest qui permet de désigner quelle
|
||||
distribution/version est la dernière
|
||||
* supporter pour pdev/prel une convention de nommage différente: la branche
|
||||
master est utilisée pour le développement, et une branche spécifique release
|
||||
est utilisée pour faire les releases. Cela permet de faciliter la
|
||||
collaboration sur github, puisque les gens vont par défaut faire des
|
||||
pull-requests basés sur la branche master.
|
||||
|
||||
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
|
|
@ -1 +1 @@
|
|||
11.3.0
|
||||
6.1.0
|
||||
|
|
2
_root
2
_root
|
@ -1,6 +1,6 @@
|
|||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname -- "$0")/lib/ulib/ulib" || exit 1
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire base
|
||||
|
||||
function display_help() {
|
||||
|
|
99
apacheconfig
99
apacheconfig
|
@ -1,7 +1,7 @@
|
|||
#!/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 template apache.tools
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS template apache.tools
|
||||
apacheconfig_initvars
|
||||
|
||||
function display_help() {
|
||||
|
@ -59,19 +59,8 @@ OPTIONS
|
|||
Lors du déploiement de la configuration, les valeurs des variables
|
||||
dynamiques sont remplacées dans les fichiers destination.
|
||||
Les arguments qui restent sont passés tels quels à apache_autoconf
|
||||
-p, --pull
|
||||
Faire 'git pull' avant --update
|
||||
-F, --fix-ip
|
||||
Corriger les lignes de la forme '<VirtualHost *:PORT>#*ip:IP' et les
|
||||
remplacer par '<VirtualHost IP:PORT>'
|
||||
Cela permet de déployer une version de production des fichiers de
|
||||
configuration.
|
||||
-N, --network-config
|
||||
Mettre aussi à jour la configuration réseau.
|
||||
--no-post-update
|
||||
Ne pas lancer le script post-update.sh après le déploiement s'il existe.
|
||||
Le script est lancé avec les mêmes arguments que apacheconfig_deploy()
|
||||
la fonction définie dans le module apache.tools
|
||||
-r, --certsdir CERTSDIR
|
||||
Spécifier le cas échéant le répertoire contenant les certificats à
|
||||
déployer. Cet argument est requis si le répertoire certsconf/ existe,
|
||||
|
@ -112,10 +101,7 @@ destdir=
|
|||
nohideconfig=auto
|
||||
templateopt=
|
||||
FULLCONF=
|
||||
pull=
|
||||
fixip=
|
||||
netconf=
|
||||
no_post_update=
|
||||
aac_certsdir=
|
||||
bits=
|
||||
oneconf=
|
||||
|
@ -147,10 +133,7 @@ args=(
|
|||
-8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
|
||||
--bits: bits=
|
||||
-u,--update,--deploy action=deploy
|
||||
-p,--pull pull=1
|
||||
-F,--fix-ip fixip=1
|
||||
-N,--network-config netconf=1
|
||||
--no-post-update no_post_update=1
|
||||
-r:,--certsdir: aac_certsdir=
|
||||
--localhosts action=localhosts
|
||||
-C:,--one-conf: oneconf=
|
||||
|
@ -166,16 +149,6 @@ if [ "$nohideconfig" == auto ]; then
|
|||
[ -n "$FULLCONF" ] && nohideconfig= || nohideconfig=1
|
||||
fi
|
||||
|
||||
if [ -n "$pull" ]; then
|
||||
estep "Mise à jour du dépôt"
|
||||
if [ -n "$destdir" ]; then
|
||||
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
|
||||
(cd "$destdir" && git pull) || die
|
||||
else
|
||||
git pull || die
|
||||
fi
|
||||
fi
|
||||
|
||||
apacheconfig_loadconf "$destdir" "$nohideconfig" || die
|
||||
apacheconfig_sysinfos "$sysname" "$sysdist" "$sysver" "$bits"
|
||||
|
||||
|
@ -215,9 +188,7 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
|
|||
|
||||
args=(
|
||||
-d "$destdir" --$action
|
||||
${fixip:+--fix-ip}
|
||||
${netconf:+--network-config}
|
||||
${no_post_update:+--no-post-update}
|
||||
${aac_certsdir:+-r "$aac_certsdir"}
|
||||
${oneconf:+--one-conf "$oneconf"}
|
||||
${onemodule:+--one-module "$onemodule"}
|
||||
|
@ -237,11 +208,11 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
|
|||
"$destdir" "$aac_certsdir" \
|
||||
"$config" "$oneconf" "$onemodule" "$onesite" \
|
||||
"$custom_sysinfos" "$sysname" "$sysdist" "$sysver" "$bits" \
|
||||
"$netconf" "$fixip" "$no_post_update" || die
|
||||
"$netconf" || die
|
||||
eend
|
||||
elif [ "$action" == localhosts ]; then
|
||||
etitle "Mise à jour de /etc/hosts"
|
||||
apacheconfig_localhosts "$destdir" "$aac_certsdir" "$onesite" || die
|
||||
apacheconfig_deploy_localhosts "$destdir" "$aac_certsdir" "$onesite" || die
|
||||
eend
|
||||
fi
|
||||
|
||||
|
@ -283,17 +254,14 @@ elif [ "$action" == new-site ]; then
|
|||
ssltempl=
|
||||
certstempl=
|
||||
wwwtempl=
|
||||
array_from_lines clrtempls "$(list_files "$templdir" "*SITE*.conf")"
|
||||
array_from_lines ssltempls "$(list_files "$templdir" "*SITE*.ssl.conf")"
|
||||
array_from_lines certstempls "$(list_files "$templdir" "*SITE*-certs.conf")"
|
||||
for xtempl in "${ssltempls[@]}" "${certstempls[@]}"; do
|
||||
array_del clrtempls "$xtempl"
|
||||
done
|
||||
[ ${#clrtempls[*]} -gt 0 ] && clrtempl="${clrtempls[0]}"
|
||||
[ ${#ssltempls[*]} -gt 0 ] && ssltempl="${ssltempls[0]}"
|
||||
[ ${#certstempls[*]} -gt 0 ] && certstempl="${certstempls[0]}"
|
||||
array_from_lines wwwtempls "$(list_dirs "$templdir" "*SITE*")"
|
||||
[ ${#wwwtempls[*]} -gt 0 ] && wwwtempl="${wwwtempls[0]}"
|
||||
array_from_lines templs "$(list_files "$templdir" "*SITE.conf")"
|
||||
[ ${#templs[*]} -gt 0 ] && clrtempl="${templs[0]}"
|
||||
array_from_lines templs "$(list_files "$templdir" "*SITE.ssl.conf")"
|
||||
[ ${#templs[*]} -gt 0 ] && ssltempl="${templs[0]}"
|
||||
array_from_lines templs "$(list_files "$templdir" "*SITE-certs.conf")"
|
||||
[ ${#templs[*]} -gt 0 ] && certstempl="${templs[0]}"
|
||||
array_from_lines templs "$(list_dirs "$templdir" "*SITE")"
|
||||
[ ${#templs[*]} -gt 0 ] && wwwtempl="${templs[0]}"
|
||||
|
||||
found=
|
||||
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é"
|
||||
fi
|
||||
|
||||
hostip=
|
||||
for i in "$clrtempl" "$ssltempl"; do
|
||||
[ -n "$i" -a -f "$templdir/$i" ] || continue
|
||||
quietgrep SITE_IP "$templdir/$i" && { hostip=1; break; }
|
||||
done
|
||||
if [ -n "$hostip" ]; then
|
||||
# Il y a un champ SITE_IP, il faut demander à l'utilisateur l'adresse ip
|
||||
# correspondante
|
||||
[[ "$host" == *.* ]] && hostdomain="${host#*.}" || hostdomain=
|
||||
pri=
|
||||
hostip=
|
||||
i=0
|
||||
while [ $i -lt ${#PUBDOMAINS[*]} ]; do
|
||||
if [ "${PUBDOMAINS[$i]}" == "$hostdomain" ]; then
|
||||
pri="$VSPREFIX${host%$hostdomain}${PRIDOMAINS[$i]}"
|
||||
resolv_ips ips "$pri"
|
||||
if [ -n "$ips" ]; then
|
||||
hostip="${ips[0]}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
i=$(($i + 1))
|
||||
done
|
||||
if [ -z "$hostip" ]; then
|
||||
pri="$VSPREFIX$host"
|
||||
resolv_ips ips "$pri"
|
||||
[ -n "$ips" ] && hostip="${ips[0]}"
|
||||
fi
|
||||
if [ -n "$pri" -a -n "$hostip" ]; then
|
||||
enote "Correspondance automatique $host --> $pri"
|
||||
read_value "Veuillez confirmer l'adresse IP d'écoute" hostip "$hostip" N
|
||||
else
|
||||
enote "Vous devez saisir l'adresse IP privée correspondant à $host"
|
||||
read_value "Veuillez entrer l'adresse IP *privée* d'écoute" hostip "" N
|
||||
fi
|
||||
[ -n "$hostip" ] || ewarn "Vous avez choisi de ne pas spécifier d'adresse IP d'écoute. Il faudra corriger manuellement les fichiers générés"
|
||||
fi
|
||||
|
||||
etitle "$host"
|
||||
hostname="${host%%.*}"
|
||||
clrconf="${clrtempl/SITE/$hostname}"
|
||||
|
@ -353,10 +283,7 @@ elif [ "$action" == new-site ]; then
|
|||
mkdir -p "$destdir/certsconf"
|
||||
mkdir -p "$destdir/sites"
|
||||
|
||||
sedscript=
|
||||
[ -n "$hostip" ] && sedscript="$sedscript
|
||||
s/SITE_IP/$hostip/g"
|
||||
sedscript="$sedscript
|
||||
sedscript="\
|
||||
s/SITE.TLD/$host/g
|
||||
s/SITE/$hostname/g"
|
||||
|
||||
|
|
40
authftp
40
authftp
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Se connecter sur un site FTP authentifié
|
||||
|
@ -27,11 +28,6 @@ OPTIONS
|
|||
--tls
|
||||
Indiquer que la connexion se fera en TLS. Implique --lftp puisque ncftp
|
||||
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
|
||||
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 @"
|
||||
}
|
||||
|
||||
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
|
||||
set_defaults proxy
|
||||
set_defaults authftp
|
||||
|
@ -55,8 +43,6 @@ noproxy="$AUTHFTP_PROXY_DISABLED"
|
|||
lftp=
|
||||
options=()
|
||||
tls=
|
||||
verify_certificate=no
|
||||
sftp=
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
-p,--proxy noproxy= \
|
||||
|
@ -64,8 +50,6 @@ parse_opts "${PRETTYOPTS[@]}" \
|
|||
-l,--lftp lftp=1 \
|
||||
-o:,--option: options \
|
||||
--tls tls=1 \
|
||||
--verify-certificate verify_certificate=yes \
|
||||
--sftp sftp=1 \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
[ -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 chemin" path "$4" N
|
||||
|
||||
[ -n "$tls" -o -n "$sftp" ] && lftp=1
|
||||
[ -n "$sftp" ] && noproxy=1
|
||||
[ -n "$tls" ] && lftp=1
|
||||
|
||||
if [ -n "$lftp" ]; then
|
||||
if [ -n "$noproxy" ]; then
|
||||
export LFTP_PASSWORD="$password"
|
||||
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"
|
||||
exec lftp -u "$login,$password" "${options[@]}" "ftp://$host/$path"
|
||||
else
|
||||
export LFTP_PASSWORD="${password}@${my_password}"
|
||||
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"
|
||||
exec lftp -u "${login}@${my_login}@${host},${password}@${my_password}" "${options[@]}" "ftp://$AUTHFTP_PROXY_HOST/$path"
|
||||
fi
|
||||
else
|
||||
if [ -n "$noproxy" ]; then
|
||||
|
|
3
caturl
3
caturl
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Afficher une url
|
||||
|
|
179
chrono.py
179
chrono.py
|
@ -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
|
||||
|
||||
u"""Afficher un chronomètre"""
|
||||
|
@ -32,12 +32,6 @@ def playSound(name=None):
|
|||
|
||||
def isnum(i):
|
||||
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'
|
||||
|
||||
|
@ -83,24 +77,13 @@ def parse_timeout(s):
|
|||
return h * 3600 + m * 60 + s
|
||||
|
||||
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
|
||||
elapsed = None
|
||||
date_start = None
|
||||
max_elapsed = None
|
||||
date_end = None
|
||||
initial = None
|
||||
started = None
|
||||
|
||||
def __init__(self, timeout=None, start=False):
|
||||
self.ZERO = self.__delta(0)
|
||||
self.set_timeout(timeout)
|
||||
if start: self.start()
|
||||
|
||||
|
@ -116,76 +99,37 @@ class Chrono:
|
|||
return Timedelta(seconds=timeout)
|
||||
|
||||
def set_timeout(self, timeout=None):
|
||||
if timeout == '': timeout = None
|
||||
if timeout is not None and not isnum(timeout):
|
||||
tmp = parse_desthour(str(timeout))
|
||||
if tmp is None: tmp = parse_timeout(timeout)
|
||||
if tmp is None: tmp = int(timeout) * 60
|
||||
timeout = tmp
|
||||
if timeout == 0: timeout = None
|
||||
self.timeout = timeout
|
||||
self.elapsed = self.ZERO
|
||||
self.state = self.STATE_STOPPED
|
||||
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
|
||||
if timeout is None: self.initial = '00:00'
|
||||
else: self.initial = self.__format(self.__delta(timeout))
|
||||
|
||||
def start(self, timeout=None):
|
||||
if timeout is None: timeout = self.timeout
|
||||
self.elapsed = self.ZERO
|
||||
self.date_start = Datetime.today()
|
||||
self.state = self.STATE_STARTED
|
||||
|
||||
def is_started(self):
|
||||
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
|
||||
if timeout is None: self.date_end = None
|
||||
else: self.date_end = self.date_start + self.__delta(timeout)
|
||||
self.started = True
|
||||
|
||||
def stop(self):
|
||||
self.elapsed = self.get_elapsed()
|
||||
self.state = self.STATE_STOPPED
|
||||
self.started = False
|
||||
|
||||
def is_stopped(self):
|
||||
return self.state == self.STATE_STOPPED
|
||||
def is_started(self):
|
||||
return self.started
|
||||
|
||||
def is_end(self):
|
||||
if not self.is_started(): return False
|
||||
if not self.is_minuteur(): return False
|
||||
elapsed = self.get_elapsed()
|
||||
return elapsed >= self.max_elapsed
|
||||
return self.started and self.date_end is not None and Datetime.today() >= self.date_end
|
||||
|
||||
def __repr__(self):
|
||||
elapsed = self.get_elapsed() if self.is_started() else self.elapsed
|
||||
if self.is_minuteur():
|
||||
delta = self.max_elapsed - elapsed
|
||||
if delta < self.ZERO: delta = self.ZERO
|
||||
return self.__format(delta)
|
||||
else:
|
||||
return self.__format(elapsed)
|
||||
now = Datetime.today()
|
||||
if self.date_end is None: delta = now - self.date_start
|
||||
elif now > self.date_end: delta = Timedelta()
|
||||
else: delta = self.date_end - now
|
||||
return self.__format(delta)
|
||||
|
||||
def run_chronometre(timeout=None, autostart=False):
|
||||
from Tkinter import Tk, Toplevel, Frame, Label, Entry, Button
|
||||
|
@ -265,9 +209,11 @@ def run_chronometre(timeout=None, autostart=False):
|
|||
class Application(Frame):
|
||||
root = None
|
||||
chrono = None
|
||||
stop = None
|
||||
|
||||
def __init__(self, timeout=None, autostart=False, **kw):
|
||||
self.chrono = Chrono(timeout)
|
||||
self.stop = False
|
||||
|
||||
root = Tk()
|
||||
root.title("Chronomètre")
|
||||
|
@ -275,8 +221,6 @@ def run_chronometre(timeout=None, autostart=False):
|
|||
root.rowconfigure(0, weight=1)
|
||||
root.bind("c", lambda event: self.do_config())
|
||||
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())
|
||||
self.root = root
|
||||
|
||||
|
@ -284,22 +228,19 @@ def run_chronometre(timeout=None, autostart=False):
|
|||
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.START = Button(self, text="Start", command=self.do_start)
|
||||
self.PAUSE = Button(self, text="Pause", command=self.do_pause, state="disabled")
|
||||
self.START = Button(self, text="Démarrer", command=self.do_start)
|
||||
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.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.PAUSE.grid(column=1, row=1, sticky='ew')
|
||||
self.CONFIG.grid(column=2, row=1, sticky='ew')
|
||||
self.QUIT.grid(column=3, row=1, sticky='ew')
|
||||
self.CONFIG.grid(column=1, row=1, sticky='ew')
|
||||
self.QUIT.grid(column=2, row=1, sticky='ew')
|
||||
|
||||
self.columnconfigure(0, weight=2)
|
||||
self.columnconfigure(1, weight=2)
|
||||
self.columnconfigure(2, weight=1)
|
||||
self.columnconfigure(3, weight=1)
|
||||
self.columnconfigure(1, weight=1)
|
||||
self.columnconfigure(2, weight=2)
|
||||
self.rowconfigure(0, weight=1)
|
||||
|
||||
if autostart: self.do_start()
|
||||
|
@ -314,27 +255,15 @@ def run_chronometre(timeout=None, autostart=False):
|
|||
self.root.after(300, self.update_time)
|
||||
|
||||
def do_start(self):
|
||||
self.PAUSE.configure(state="normal", text="Pause")
|
||||
self.START.configure(text="reStart")
|
||||
self.chrono.start()
|
||||
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):
|
||||
chrono = self.chrono
|
||||
chrono.stop()
|
||||
config = Config(self.root)
|
||||
if config.have_result:
|
||||
try:
|
||||
self.PAUSE.configure(text="Pause", state="disabled")
|
||||
self.START.configure(text="Start")
|
||||
chrono.set_timeout(config.result)
|
||||
self.TIME.configure(text=chrono.initial)
|
||||
except:
|
||||
|
@ -344,55 +273,26 @@ def run_chronometre(timeout=None, autostart=False):
|
|||
Application(timeout, autostart).mainloop()
|
||||
|
||||
if __name__ == '__main__':
|
||||
from argparse import ArgumentParser, HelpFormatter
|
||||
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
|
||||
from argparse import ArgumentParser, RawTextHelpFormatter
|
||||
AP = ArgumentParser(
|
||||
formatter_class=RawTextHelpFormatter,
|
||||
usage=u"%(prog)s [options] [TIMEOUT]",
|
||||
description=u"Afficher un chronomètre",
|
||||
epilog=u"Si TIMEOUT est spécifié, par défaut le décompte démarre automatiquement.",
|
||||
formatter_class=FancyHelpFormatter,
|
||||
epilog=u"Si TIMEOUT est spécifié, par défaut le décompte démarre automatiquement."
|
||||
)
|
||||
AP.set_defaults(autostart=None, timeout=None)
|
||||
AP.add_argument('timeout', metavar='TIMEOUT', nargs='?',
|
||||
help=u"""\
|
||||
>>> '' (valeur vide)
|
||||
chronomètre qui démarre à 0:00 et ne s'arrête pas
|
||||
>>> 'H:M:S' (heures:minutes:secondes)
|
||||
>>> ou 'M:S' (minutes:secondes)
|
||||
>>> ou 'M' (minutes)
|
||||
minuteur qui démarre à H:M:S et fait un décompte jusqu'à 0:00. A la fin
|
||||
du décompte, une sonnerie retentit.
|
||||
>>> '@H[:M[:S]]'
|
||||
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""")
|
||||
(valeur vide)
|
||||
chronomètre qui démarre à 0:00 et ne s'arrête pas
|
||||
H:M:S (heures:minutes:secondes)
|
||||
ou M:S (minutes:secondes)
|
||||
ou M (minutes)
|
||||
minuteur qui démarre à H:M:S et fait un décompte jusqu'à 0:00. A la fin
|
||||
du décompte, une sonnerie retentit.
|
||||
@H[:M[:S]]
|
||||
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""")
|
||||
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é.")
|
||||
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
|
||||
if timeout is None: timeout = DEFAULT_TIMEOUT
|
||||
elif timeout == '': timeout = None
|
||||
o.timeout = timeout
|
||||
|
||||
run_chronometre(o.timeout, o.autostart)
|
||||
|
|
|
@ -411,7 +411,7 @@ javac* | jikes*)
|
|||
fi
|
||||
[[ ! -z "${execute:="${compilerDir}java -cp $cacheDir${classPath:+:$classPath} $mainClass"}" ]]
|
||||
# Prepare to tell javac to compile for the latest language version it supports
|
||||
sourceVersion="-source $(${compilerDir}java -version 2>&1 | sed -n '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*)
|
||||
if [[ -z "$classPath" && -z "$compilerArgs" && -z "$CLASSPATH" ]] ; then
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
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"
|
||||
"${ssh[@]}" "$remoteuser@$host" "\
|
||||
__estack=$(qval "$__estack")
|
||||
__tlevel=$(qval "$__tlevel")
|
||||
__estack=$(quoted_arg "$__estack")
|
||||
__tlevel=$(quoted_arg "$__tlevel")
|
||||
export __estack __tlevel
|
||||
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
|
||||
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"})"
|
||||
}$(quoted_args "./$archivename" ${tmproot:+--tmproot "$tmproot"})"
|
||||
r=$?
|
||||
ac_clean "$workdir"
|
||||
|
||||
|
|
65
cssh
65
cssh
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
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"
|
||||
[ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter"
|
||||
|
||||
[ ${#args[*]} -gt 0 ] && cmd="$(qvals "${args[@]}"); " || cmd=
|
||||
cmd="$cmd
|
||||
export LOCKPRG=/bin/true; $(<"$scriptdir/Sscreen")"
|
||||
cmd="'${cmd//\'/\'\\\'\'}'"
|
||||
cmd="'$(quoted_args "${args[@]}")
|
||||
"'
|
||||
function __ask() {
|
||||
local r
|
||||
read -p "$1" -t 2 r
|
||||
[ $? -gt 128 -o -z "$r" -o "$r" == "o" -o "$r" == "O" -o "$r" == "y" -o "$r" == "Y" ]
|
||||
}
|
||||
|
||||
function __auto_screen() {
|
||||
# Si on est déjà dans screen, ne rien faire
|
||||
[ -z "$STY" ] || return
|
||||
|
||||
local msgprefix
|
||||
local screens count
|
||||
|
||||
screens="$(LANG=C screen -ls | grep -Ei "attached|detached")"
|
||||
if [ -n "$screens" ]; then
|
||||
count="$(echo "$screens" | wc -l)"
|
||||
else
|
||||
count=0
|
||||
fi
|
||||
if [ $count -gt 0 ]; then
|
||||
if [ $count -eq 1 ]; then
|
||||
msgprefix="Il y a '"$COULEUR_BLEUE"'1 session screen en cours'"$COULEUR_NORMALE"'
|
||||
Cette session"
|
||||
else
|
||||
msgprefix="Il y a '"$COULEUR_ROUGE"'$count sessions screen en cours'"$COULEUR_NORMALE"':
|
||||
$screens
|
||||
La première session"
|
||||
fi
|
||||
if __ask "
|
||||
$msgprefix sera reconnectée automatiquent dans 2 secondes
|
||||
Voulez-vous reconnecter la session screen? [On] "; then
|
||||
exec screen -q -s -/bin/bash -xRR
|
||||
else
|
||||
exec /bin/bash -l
|
||||
fi
|
||||
elif __ask "
|
||||
Une '"$COULEUR_VERTE"'nouvelle session screen'"$COULEUR_NORMALE"' sera lancée automatiquement dans 2 secondes
|
||||
Voulez-vous lancer une session screen? [On] "; then
|
||||
exec screen -q -s -/bin/bash -RR
|
||||
else
|
||||
exec /bin/bash -l
|
||||
fi
|
||||
}
|
||||
|
||||
__auto_screen
|
||||
'\'
|
||||
|
||||
for host in "${hosts[@]}"; do
|
||||
"$ssh" \
|
||||
"${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
|
||||
${exec:+exec} "$ssh" "${options[@]}" -t "$host" -- /bin/bash -c "$cmd"
|
||||
done
|
||||
|
|
124
cx-conndev
124
cx-conndev
|
@ -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
|
60
cx-shelldev
60
cx-shelldev
|
@ -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[@]}"
|
282
cx-updatedev
282
cx-updatedev
|
@ -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
|
132
dmcerts
132
dmcerts
|
@ -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
160
dmctl
|
@ -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
|
|
@ -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
|
File diff suppressed because one or more lines are too long
|
@ -7,38 +7,19 @@ USAGE
|
|||
SVirtualBox [options] vmName
|
||||
|
||||
OPTIONS
|
||||
-n, --nop
|
||||
Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l, --list
|
||||
Lister les machines virtuelles
|
||||
-s, --start
|
||||
Démarrer la machine virtuelle. C'est l'action par défaut.
|
||||
-n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l Lister les machines virtuelles
|
||||
-s Démarrer la machine virtuelle (par défaut)
|
||||
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||
affiché
|
||||
-x, --gui
|
||||
-b, --headless
|
||||
--separate
|
||||
Ces options ne sont valides qu'avec -s et permettent de spécifier le
|
||||
type de démarrage: 'gui' permet d'afficher une fenêtre complète dans
|
||||
laquelle l'accélération graphique est supportée, headless démarre la
|
||||
machine en tâche de fond, et separate affiche une fenêtre qui attaque la
|
||||
machine démarrée en tâche de fond. --separate est l'option par défaut.
|
||||
-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
|
||||
-b Démarrer la VM sans interface graphique. Cette option n'est valide
|
||||
qu'avec -s
|
||||
-k Arrêter la machine virtuelle (par ACPI)
|
||||
-p Mettre en veille la machine virtuelle (par ACPI)
|
||||
-H Arrêter sauvagement la machine virtuelle
|
||||
-R Redémarrer sauvagement la machine virtuelle
|
||||
-S Enregistrer l'état de la machine virtuelle
|
||||
-g Afficher le gestionnaire de machines virtuelle
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -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
|
|
@ -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
|
|
@ -6,24 +6,13 @@ umountr: démonter un système de fichier récursivement
|
|||
USAGE
|
||||
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
|
||||
-c, --continuous
|
||||
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
|
|
@ -56,13 +56,11 @@ COMMANDS
|
|||
-R Afficher les modifications effectuées depuis la dernière release.
|
||||
|
||||
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.
|
||||
Initialiser git annex si le dépôt contient des fichiers annexés.
|
||||
Récupérer aussi ces fichiers avec 'git annex get'
|
||||
|
||||
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
|
||||
|
||||
develop
|
||||
|
|
|
@ -283,12 +283,6 @@ OPTIONS AVANCEES
|
|||
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
|
||||
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
|
|
@ -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
|
||||
traitements sur une valeur. Par exemple, la commande
|
||||
evalx cmd1 [args1...] // cmd2 [args2...] // cmd3 [args3...]
|
||||
est équivalente à la commande
|
||||
cmd3 args3 "$(cmd2 args2 "$(cmd1 args1)")"
|
||||
evalx cmd1... // cmd2... // cmd3...
|
||||
affiche le résultat de la commande "$(cmd3 $(cmd2 $(cmd1)))"
|
||||
Retourner le dernier code d'erreur non nul, ou 0 si toutes les commandes se
|
||||
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
|
||||
evalp 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
|
||||
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
|
||||
|
|
|
@ -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)
|
||||
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
|
|
@ -2,27 +2,27 @@
|
|||
|
||||
## `straddp`
|
||||
~~~
|
||||
ajouter le préfixe $1 à $2..*
|
||||
ajouter le préfixe $1 à $2*
|
||||
~~~
|
||||
## `strdelp`
|
||||
~~~
|
||||
enlever le préfixe $1 à $2..*
|
||||
enlever le préfixe $1 à $2*
|
||||
~~~
|
||||
## `strdelp2`
|
||||
~~~
|
||||
enlever le préfixe $1 le plus long à $2..*
|
||||
enlever le préfixe $1 le plus long à $2*
|
||||
~~~
|
||||
## `stradds`
|
||||
~~~
|
||||
ajouter le suffixe $1 à $2..*
|
||||
ajouter le suffixe $1 à $2*
|
||||
~~~
|
||||
## `strdels`
|
||||
~~~
|
||||
enlever le suffixe $1 à $2..*
|
||||
enlever le suffixe $1 à $2*
|
||||
~~~
|
||||
## `strdels2`
|
||||
~~~
|
||||
enlever le suffixe le plus long $1 à $2..*
|
||||
enlever le suffixe le plus long $1 à $2*
|
||||
~~~
|
||||
## `strlower`
|
||||
~~~
|
||||
|
@ -52,14 +52,14 @@ majuscule
|
|||
~~~
|
||||
## `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é à
|
||||
partir de la fin de la chaine. Si length est négatif, il est rajouté à la
|
||||
longueur de la chaine à partir de start
|
||||
~~~
|
||||
## `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
|
||||
~~~
|
||||
## `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
|
||||
~~~
|
||||
## `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
|
|
@ -13,9 +13,9 @@ Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
|||
~~~
|
||||
## `conf_enableq`
|
||||
~~~
|
||||
Comme conf_enable(), mais s'assure que les valeurs sont quotées si
|
||||
nécessaire dans le fichier. Ceci permet de stocker des valeurs avec des
|
||||
espaces ou des caractères spéciaux.
|
||||
Comme conf_enable(), mais s'assure que les valeurs sont quotées dans le
|
||||
fichier. Ceci permet de stocker des valeurs avec des espaces ou des
|
||||
caractères spéciaux.
|
||||
~~~
|
||||
## `conf_disable`
|
||||
~~~
|
||||
|
|
|
@ -38,6 +38,60 @@ 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`
|
||||
~~~
|
||||
Vérifier que la configuration du bridge $1, dont les membres sont les
|
||||
|
@ -81,6 +135,9 @@ $3(=confips)
|
|||
~~~
|
||||
## `network_fix_hostname`
|
||||
## `network_fix_mailname`
|
||||
## `network_fix_exim4`
|
||||
## `network_fix_postfix`
|
||||
## `network_fix_hosts`
|
||||
## `network_config`
|
||||
~~~
|
||||
(Re)configurer le réseau sur l'hôte courant. Des efforts sont faits pour
|
||||
|
|
|
@ -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
|
||||
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
|
|
@ -32,6 +32,9 @@ 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
|
|
@ -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,
|
||||
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`
|
||||
~~~
|
||||
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:
|
||||
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`
|
||||
~~~
|
||||
Tester si on est sur debian. charger le module debian si c'est le cas.
|
||||
|
|
|
@ -11,7 +11,7 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
|||
exit 0
|
||||
fi
|
||||
|
||||
source "$(dirname -- "$0")/lib/ulib/ulib" || exit 1
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire base
|
||||
|
||||
function display_help() {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: afficher les connexions TCP entrantes sur un port
|
||||
|
|
10
em
10
em
|
@ -1,19 +1,13 @@
|
|||
#!/bin/bash
|
||||
# -*- 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
|
||||
emacs="$(which emacs 2>/dev/null)"
|
||||
if [ -x "$emacs" ]; then
|
||||
if [ -n "$DISPLAY" ]; then
|
||||
if [ -n "$EM_STDERR" ]; then
|
||||
# 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
|
||||
exec "$emacs" -g "$EMACS_GEOMETRY" "$@" &
|
||||
exit 0
|
||||
else
|
||||
exec "$emacs" -nw "$@"
|
||||
|
|
122
ensure-vip
122
ensure-vip
|
@ -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
7
fconv
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
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
|
||||
na, noaccents
|
||||
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]
|
||||
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
|
||||
|
@ -152,8 +151,6 @@ function parse_cmd() {
|
|||
cr) echo _nl2cr;;
|
||||
latin1compat|lc) echo _latin1compat;;
|
||||
noaccents|na|fixchars|fc) echo _noaccents;;
|
||||
s/*) qvals sed "$cmd" "$@";;
|
||||
sed) qvals sed "$@";;
|
||||
sort) qvals sort "$@";;
|
||||
*)
|
||||
echo "$cmd: commande invalide"
|
||||
|
|
9
fnconv
9
fnconv
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: renommer un fichier ou les fichiers d'un répertoire
|
||||
|
@ -50,9 +51,7 @@ COMMANDES
|
|||
u, uppercase
|
||||
Transformer le nom en majuscule
|
||||
f, fixcase
|
||||
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'"
|
||||
Transformer le nom en minuscule s'il est entièrement en majuscule"
|
||||
}
|
||||
|
||||
function _lowercase() {
|
||||
|
@ -164,8 +163,6 @@ function parse_cmd() {
|
|||
lowercase|lower|l) echo _lowercase;;
|
||||
uppercase|upper|u) echo _uppercase;;
|
||||
fixcase|fix|f) echo _fixcase;;
|
||||
s/*) qvals sed "$cmd" "$@";;
|
||||
sed) qvals sed "$@";;
|
||||
*)
|
||||
echo "$cmd: commande invalide"
|
||||
return 1
|
||||
|
|
64
fndate
64
fndate
|
@ -11,7 +11,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
|||
exit 0
|
||||
fi
|
||||
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
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,
|
||||
il est placé au début.
|
||||
-@, --force-date DATE
|
||||
Si une date du format attendu est déjà présente dans le nom du fichier,
|
||||
forcer son remplacement par la valeur spécifiée. Par défaut, le fichier
|
||||
n'est pas 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
|
||||
Dans le nom spécifié, si la date est déjà présente, forcer son
|
||||
remplacement par la valeur spécifiée. Par défaut, le fichier n'est pas
|
||||
modifié si la date est déjà présente.
|
||||
-F, --format FORMAT
|
||||
Spécifier le format de la date à insérer dans le nom du fichier. Par
|
||||
défaut, FORMAT vaut 'YYMMDD-'
|
||||
|
@ -233,9 +226,7 @@ dcopy) action=copy;;
|
|||
dmove) action=move;;
|
||||
dcmd) action=cmd;;
|
||||
esac
|
||||
cmd_quiet=
|
||||
placeholder=
|
||||
auto_force_date=1
|
||||
force_date=
|
||||
format=
|
||||
autof=
|
||||
|
@ -248,9 +239,7 @@ parse_opts "${PRETTYOPTS[@]}" \
|
|||
-m,--move action=move \
|
||||
-c,--cmd action=cmd \
|
||||
--string action=string \
|
||||
--cmd-quiet cmd_quiet=1 \
|
||||
-P:,--placeholder: placeholder= \
|
||||
--no-auto-force-date auto_force_date= \
|
||||
-@:,--force-date: force_date= \
|
||||
-F:,--format: format= \
|
||||
-s,--short '$format=YYMMDD; autof=1' \
|
||||
|
@ -258,27 +247,6 @@ parse_opts "${PRETTYOPTS[@]}" \
|
|||
--autof autof=1 \
|
||||
@ 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 "$placeholder" ] || placeholder="~~"
|
||||
[ -n "$force_date" ] && setx force_date=parse_date "$force_date"
|
||||
|
@ -294,7 +262,7 @@ if [ "$action" == cmd ]; then
|
|||
found=
|
||||
for arg in "$@"; do
|
||||
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"
|
||||
read_value "Veuillez confirmer le nom" arg "$arg"
|
||||
found=1
|
||||
|
@ -361,24 +329,14 @@ elif [ "$action" == create ]; then
|
|||
setx dir=dirname -- "$src"
|
||||
setx srcname=basename -- "$src"
|
||||
if [ -e "$src" ]; then
|
||||
estep "Renommage de $(ppath "$src")"
|
||||
setx destname=replace_ph "$srcname" "$force_date"
|
||||
setx dest=abspath "$dir/$destname"
|
||||
confirm_do=1
|
||||
if [ "$src" == "$dest" ]; then
|
||||
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"
|
||||
[ "$src" != "$dest" ] || ewarn "La source et la destination sont identiques"
|
||||
read_value "Veuillez confirmer le nom" destname "$destname"
|
||||
|
||||
setx dest=abspath "$dir/$destname"
|
||||
[ "$src" != "$dest" ] && mv -i "$src" "$dir/$destname"
|
||||
fi
|
||||
setx dest=abspath "$dir/$destname"
|
||||
[ "$src" != "$dest" ] && mv -i "$src" "$dir/$destname"
|
||||
else
|
||||
setx destname=replace_ph "$srcname" "$force_date"
|
||||
setx dest=abspath "$dir/$destname"
|
||||
|
|
75
foreach
75
foreach
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
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
|
||||
qu'il soit traité, e.g, avec les examples ci-dessus:
|
||||
$scriptname -n '*.c' 'cp \"\$item\" dest/dir'
|
||||
--title
|
||||
--pt, --parent-title
|
||||
--nt, --no-title
|
||||
-t, --title
|
||||
--no-title
|
||||
Afficher (resp. ne pas afficher) chaque correspondance avant de lancer
|
||||
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'"
|
||||
la commande. Par défaut, l'affichage est effectué."
|
||||
}
|
||||
|
||||
basedir=
|
||||
|
@ -97,9 +85,7 @@ match=auto
|
|||
changedir=
|
||||
parentdir=
|
||||
expand=1
|
||||
title=auto
|
||||
command=
|
||||
shortcut=
|
||||
title=1
|
||||
args=(+
|
||||
--help '$exit_with display_help'
|
||||
-b:,--basedir: basedir=
|
||||
|
@ -111,47 +97,18 @@ args=(+
|
|||
-s,--string match=string
|
||||
-x,--expand expand=1
|
||||
-n,--no-expand expand=
|
||||
--title title=1
|
||||
--pt,--parent-title title=p
|
||||
--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
|
||||
-t,--title title=1
|
||||
--no-title title=
|
||||
)
|
||||
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
|
||||
[ -n "$changedir" ] && match=dir || match=all
|
||||
if [ -n "$changedir" ]; then
|
||||
match=dir
|
||||
else
|
||||
match=all
|
||||
fi
|
||||
fi
|
||||
[ "$title" == auto ] && title=1
|
||||
|
||||
alt_syntax=
|
||||
for sep in "$@"; do
|
||||
|
@ -218,11 +175,7 @@ fi
|
|||
[ -n "$title" ] && einfo "${#items[@]} correspondance(s) trouvée(s)"
|
||||
let index=0
|
||||
for item in "${items[@]}"; do
|
||||
if [ -n "$parentdir" -a "$title" == p ]; then
|
||||
etitle "$(dirname -- "$item")"
|
||||
elif [ -n "$title" ]; then
|
||||
etitle "$item"
|
||||
fi
|
||||
[ -n "$title" ] && etitle "$item"
|
||||
i="$item"
|
||||
setx file=abspath "$item"
|
||||
setx dir=dirname -- "$file"
|
||||
|
|
3
geturl
3
geturl
|
@ -1,6 +1,7 @@
|
|||
#!/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
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Télécharger un fichier avec wget ou curl
|
||||
|
|
28
ipaddr
28
ipaddr
|
@ -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
33
ldiff
|
@ -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")
|
|
@ -224,7 +224,7 @@ found_element && $0 ~ /<\/element/ {
|
|||
|
||||
local instance notfirst=
|
||||
for instance in "$@"; do
|
||||
script="$script${notfirst:+|| }name == $(qawk "$instance")"
|
||||
script="$script${notfirst:+|| }name == \"$(quote_awk "$instance")\""
|
||||
notfirst=1
|
||||
done
|
||||
script="$script"') {
|
||||
|
@ -304,7 +304,7 @@ found_element && $0 ~ /<\/element/ {
|
|||
|
||||
local instance notfirst=
|
||||
for instance in "$@"; do
|
||||
script="$script${notfirst:+|| }name == $(qawk "$instance")"
|
||||
script="$script${notfirst:+|| }name == \"$(quote_awk "$instance")\""
|
||||
notfirst=1
|
||||
done
|
||||
script="$script"') {
|
||||
|
|
41
lgrep
41
lgrep
|
@ -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"
|
|
@ -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
|
||||
|
||||
u"""%(scriptname)s: afficher le hash SHA-1 d'un fichier exprimé en base 36
|
||||
|
|
|
@ -4,25 +4,22 @@
|
|||
if [ -n "$UTOOLS_BASH_COMPLETION" ]; then
|
||||
function __bash_completion_enabled() { return 1; }
|
||||
function __bash_completion_module_enabled() { return 1; }
|
||||
_file=
|
||||
if [ -n "$UTOOLS_BASH_COMPLETION_COMPAT" ]; then
|
||||
_file="@@dest@@/lib/ulib/$UTOOLS_BASH_COMPLETION_COMPAT/bash_completion"
|
||||
elif [ -f /etc/debian_version ]; then
|
||||
if [ -f /etc/debian_version ]; then
|
||||
case "$(</etc/debian_version)" in
|
||||
6*|squeeze*)
|
||||
# le code suivant n'est compatible qu'avec debian squeeze (plus
|
||||
# exactement, avec bash 4.0)
|
||||
_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
|
||||
# supérieur (plus exactement, avec bash 4.1)
|
||||
_file="@@dest@@/lib/ulib/bash41/bash_completion"
|
||||
;;
|
||||
esac
|
||||
[ -f "$_file" ] && source "$_file"
|
||||
unset _file
|
||||
fi
|
||||
[ -f "$_file" ] && source "$_file"
|
||||
unset _file
|
||||
if __bash_completion_enabled; then
|
||||
for i in "@@dest@@/lib/completion.d/"*; do
|
||||
[ -f "$i" ] || continue
|
||||
|
|
|
@ -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
|
|
@ -9,12 +9,8 @@
|
|||
|
||||
# Activer l'auto complétion de bash pour les outils de nutools
|
||||
#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
|
||||
# _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.
|
||||
#export UTOOLS_USES_SU=false
|
||||
|
||||
# Activer les aliases pour l'utilisation de docker
|
||||
#export UTOOLS_DOCKER_ALIASES=1
|
||||
|
|
|
@ -1,25 +1,17 @@
|
|||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
|
||||
function __nutools_host_completion() {
|
||||
local cur prev; _get_comp_words_by_ref cur prev
|
||||
[ "$prev" == "-h" -o "$prev" == "-H" -o "$prev" == "--host" ] && _known_hosts_real "$cur"
|
||||
return 0
|
||||
}
|
||||
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
|
||||
local cur prev
|
||||
_get_comp_words_by_ref cur prev
|
||||
if [ "$prev" == "-h" -o "$prev" == "-H" ]; then
|
||||
_known_hosts_real "$cur"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
complete -F __nutools_host_completion -o default uinst ruinst runs rruns rwoinst rtoinst
|
||||
complete -F __nutools_whost_completion -o default rwoinst
|
||||
complete -F __nutools_host_completion -o default uinst ruinst runs rruns
|
||||
|
||||
if __bash_completion_module_enabled ssh; then
|
||||
shopt -u hostcomplete
|
||||
complete -F _ssh ussh cssh mssh
|
||||
complete -F _ssh ussh cssh
|
||||
fi
|
||||
|
||||
if __bash_completion_module_enabled umount; then
|
||||
|
|
|
@ -4,12 +4,3 @@
|
|||
#DEFAULT_ADMIN=supervision-gdrsi@listes.univ-reunion.fr
|
||||
#DEFAULT_CERTSDIR=1507-renater
|
||||
#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-
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
)
|
|
@ -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=
|
|
@ -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
|
|
@ -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=()
|
|
@ -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
|
|
@ -1 +0,0 @@
|
|||
php
|
|
@ -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
|
|
@ -1,2 +0,0 @@
|
|||
.~lock*#
|
||||
.*.swp
|
|
@ -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
|
|
@ -1,2 +0,0 @@
|
|||
/b/t/
|
||||
**/.git/
|
|
@ -1,3 +0,0 @@
|
|||
/b/
|
||||
/Dockerfile
|
||||
# autogénéré
|
|
@ -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
|
|
@ -1 +0,0 @@
|
|||
../dkbuild.env
|
|
@ -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
|
|
@ -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
|
|
@ -1,3 +0,0 @@
|
|||
/Dockerfile
|
||||
.~lock*#
|
||||
.*.swp
|
|
@ -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
|
|
@ -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
|
|
@ -1,6 +0,0 @@
|
|||
/docker-compose.yml
|
||||
/docker-compose.*.yml
|
||||
/web/Dockerfile
|
||||
/db/Dockerfile
|
||||
.~lock*#
|
||||
.*.swp
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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"
|
|
@ -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"
|
|
@ -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:
|
|
@ -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"
|
||||
)
|
|
@ -1,5 +0,0 @@
|
|||
/Dockerfile
|
||||
/src
|
||||
/dest
|
||||
/srcdir/
|
||||
/destdir/
|
|
@ -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
|
|
@ -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
|
|
@ -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=
|
|
@ -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=
|
|
@ -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=
|
|
@ -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=
|
|
@ -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
|
||||
"
|
|
@ -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=
|
|
@ -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=
|
|
@ -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=
|
|
@ -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=
|
|
@ -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=
|
|
@ -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
Loading…
Reference in New Issue