Compare commits
No commits in common. "master" and "9.12.0" have entirely different histories.
180
CHANGES.md
180
CHANGES.md
@ -1,183 +1,3 @@
|
|||||||
## Version 11.4.0 du 27/02/2025-08:44
|
|
||||||
|
|
||||||
* `7cc9629` modifs.mineures sans commentaires
|
|
||||||
* `df3986e` maj chemins registres
|
|
||||||
* `e674b31` améliorer la prise en charge de dkbuild imbriqué
|
|
||||||
* `7611760` paramètres par défaut pour dkbuild
|
|
||||||
* `056ae57` maj doc dkbuild -c
|
|
||||||
* `6f9ab14` support java 21
|
|
||||||
* `c9eaf7d` maj dkbuild.env par défaut
|
|
||||||
* `693f447` maj fichier dkbuild.env
|
|
||||||
* `6e23aae` maj config par défaut
|
|
||||||
|
|
||||||
## Version 11.3.1 du 31/12/2024-15:05
|
|
||||||
|
|
||||||
* `b9f264f` bug avec dkbuild -e
|
|
||||||
* `737179b` modifs.mineures sans commentaires
|
|
||||||
* `2687e72` support minimal runphp
|
|
||||||
|
|
||||||
## 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
|
## Version 9.12.0 du 29/03/2021-09:41
|
||||||
|
|
||||||
* `3d54e37` pff: bug origext
|
* `3d54e37` pff: bug origext
|
||||||
|
4
EnsureVM
4
EnsureVM
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
urequire service
|
urequire DEFAULTS service
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: s'assurer que les services sont lancés pour un type de virtualisation
|
uecho "$scriptname: s'assurer que les services sont lancés pour un type de virtualisation
|
||||||
|
4
SKvm
4
SKvm
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
urequire virsh
|
urequire DEFAULTS virsh
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: lancer une machine virtuelle kvm
|
uecho "$scriptname: lancer une machine virtuelle kvm
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: lancer une machine virtuelle VirtualBox
|
uecho "$scriptname: lancer une machine virtuelle VirtualBox
|
||||||
|
21
Sscreen
21
Sscreen
@ -1,9 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
# désactiver le verrouillage
|
|
||||||
export LOCKPRG=/bin/true
|
|
||||||
|
|
||||||
COULEUR_NORMALE=$'\e[0m'
|
COULEUR_NORMALE=$'\e[0m'
|
||||||
COULEUR_ROUGE=$'\e[31;1m'
|
COULEUR_ROUGE=$'\e[31;1m'
|
||||||
COULEUR_VERTE=$'\e[32;1m'
|
COULEUR_VERTE=$'\e[32;1m'
|
||||||
@ -18,25 +15,15 @@ function __ask() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function __auto_screen() {
|
function __auto_screen() {
|
||||||
# Si on est déjà dans screen, ne rien faire
|
|
||||||
[ -z "$STY" ] || return
|
|
||||||
|
|
||||||
# Si screen pas installé, ne rien faire
|
# Si screen pas installé, ne rien faire
|
||||||
local dir screen="$(which screen 2>/dev/null)"
|
if [ -z "$(which screen 2>/dev/null)" ]; then
|
||||||
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"
|
echo "${COULEUR_JAUNE}WARNING${COULEUR_NORMALE} screen introuvable. une session bash classique sera lancée"
|
||||||
exec /bin/bash -l
|
exec /bin/bash -l
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Si on est déjà dans screen, ne rien faire
|
||||||
|
[ -z "$STY" ] || return
|
||||||
|
|
||||||
# corriger TERM pour les vieilles versions de Linux
|
# corriger TERM pour les vieilles versions de Linux
|
||||||
case "$TERM" in
|
case "$TERM" in
|
||||||
xterm*) TERM=xterm;;
|
xterm*) TERM=xterm;;
|
||||||
|
22
TODO.md
22
TODO.md
@ -1,25 +1,3 @@
|
|||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
dkbuild
|
|
||||||
* setversion peut prendre la version depuis la branche git d'un dépôt
|
|
||||||
* un argument permettrait de spécifier comment la version est calculée à
|
|
||||||
partir du dépôt
|
|
||||||
* si cela a du sens, une commande setlatest qui permet de désigner quelle
|
|
||||||
distribution/version est la dernière
|
|
||||||
|
|
||||||
|
|
||||||
git push
|
|
||||||
* ajouter le support pour le mode DEBUG
|
|
||||||
~~~
|
|
||||||
export GIT_TRACE=1
|
|
||||||
export GIT_TRANSFER_TRACE=1
|
|
||||||
export GIT_CURL_VERBOSE=1
|
|
||||||
~~~
|
|
||||||
* ajouter le support http basique pour git lfs en cas de problème pour upload de certains fichiers
|
|
||||||
~~~
|
|
||||||
git config --add lfs.basictransfersonly true
|
|
||||||
~~~
|
|
||||||
ou le mettre dans un fichier .lfsconfig
|
|
||||||
cf https://github.com/git-lfs/git-lfs/blob/main/docs/man/git-lfs-config.adoc
|
|
||||||
|
|
||||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1 +1 @@
|
|||||||
11.4.0
|
9.12.0
|
||||||
|
2
_root
2
_root
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/ulib" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
urequire base
|
urequire base
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
urequire template apache.tools
|
urequire DEFAULTS template apache.tools
|
||||||
apacheconfig_initvars
|
apacheconfig_initvars
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
|
9
authftp
9
authftp
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: Se connecter sur un site FTP authentifié
|
uecho "$scriptname: Se connecter sur un site FTP authentifié
|
||||||
@ -83,7 +84,6 @@ read_value -i "Entrez le chemin" path "$4" N
|
|||||||
|
|
||||||
if [ -n "$lftp" ]; then
|
if [ -n "$lftp" ]; then
|
||||||
if [ -n "$noproxy" ]; then
|
if [ -n "$noproxy" ]; then
|
||||||
export LFTP_PASSWORD="$password"
|
|
||||||
if [ -n "$sftp" ]; then
|
if [ -n "$sftp" ]; then
|
||||||
url="sftp://$host/$path"
|
url="sftp://$host/$path"
|
||||||
hostkeyfailed_apropos "$login@$host"
|
hostkeyfailed_apropos "$login@$host"
|
||||||
@ -92,13 +92,12 @@ if [ -n "$lftp" ]; then
|
|||||||
fi
|
fi
|
||||||
exec lftp "${options[@]}" -e "\
|
exec lftp "${options[@]}" -e "\
|
||||||
set ssl:verify-certificate $verify_certificate
|
set ssl:verify-certificate $verify_certificate
|
||||||
open -u $login --env-password $url"
|
open -u $login,$password $url"
|
||||||
else
|
else
|
||||||
export LFTP_PASSWORD="${password}@${my_password}"
|
|
||||||
url="ftp://$AUTHFTP_PROXY_HOST/$path"
|
url="ftp://$AUTHFTP_PROXY_HOST/$path"
|
||||||
exec lftp "${options[@]}" -e "\
|
exec lftp "${options[@]}" -e "\
|
||||||
set ssl:verify-certificate $verify_certificate
|
set ssl:verify-certificate $verify_certificate
|
||||||
open -u ${login}@${my_login}@${host} --env-password $url"
|
open -u ${login}@${my_login}@${host},${password}@${my_password} $url"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [ -n "$noproxy" ]; then
|
if [ -n "$noproxy" ]; then
|
||||||
|
3
caturl
3
caturl
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: Afficher une url
|
uecho "$scriptname: Afficher une url
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: créer un utilisateur sudoer et lui installer une clé publique ssh
|
uecho "$scriptname: créer un utilisateur sudoer et lui installer une clé publique ssh
|
||||||
|
8
cssh
8
cssh
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant
|
uecho "$scriptname: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant
|
||||||
@ -23,14 +24,13 @@ eval "$vars"
|
|||||||
[ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter"
|
[ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter"
|
||||||
|
|
||||||
[ ${#args[*]} -gt 0 ] && cmd="$(qvals "${args[@]}"); " || cmd=
|
[ ${#args[*]} -gt 0 ] && cmd="$(qvals "${args[@]}"); " || cmd=
|
||||||
cmd="$cmd
|
cmd="$cmd$(<"$scriptdir/Sscreen")"
|
||||||
export LOCKPRG=/bin/true; $(<"$scriptdir/Sscreen")"
|
|
||||||
cmd="'${cmd//\'/\'\\\'\'}'"
|
cmd="'${cmd//\'/\'\\\'\'}'"
|
||||||
|
|
||||||
for host in "${hosts[@]}"; do
|
for host in "${hosts[@]}"; do
|
||||||
"$ssh" \
|
"$ssh" \
|
||||||
"${options[@]}" -qt "$host" -- \
|
"${options[@]}" -qt "$host" -- \
|
||||||
"export LOCKPRG=/bin/true; [ -x /usr/local/nutools/Sscreen ] && exec /usr/local/nutools/Sscreen $(qvals "${args[@]}") || exit 123"
|
"[ -x /usr/local/nutools/Sscreen ] && exec /usr/local/nutools/Sscreen $(qvals "${args[@]}") || exit 123"
|
||||||
if [ $? -eq 123 ]; then
|
if [ $? -eq 123 ]; then
|
||||||
# pas de Sscreen en face, le faire à la main
|
# pas de Sscreen en face, le faire à la main
|
||||||
${exec:+exec} \
|
${exec:+exec} \
|
||||||
|
37
cx-conndev
37
cx-conndev
@ -1,26 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
[ -n "$COMPOSE_V1" ] && DOCKER_COMPOSE=(docker-compose) || DOCKER_COMPOSE=(docker compose)
|
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: se connecter à la base MySQL
|
uecho "$scriptname: se connecter à la base MySQL
|
||||||
|
|
||||||
USAGE
|
USAGE
|
||||||
$scriptname [DATABASE]
|
$scriptname [DATABASE]
|
||||||
$scriptname -d [-uUSER [-pPASSWORD]] DATABASES... >backup.sql
|
$scriptname -c|-d [-uUSER [-pPASSWORD]] ...
|
||||||
$scriptname -c [-uUSER [-pPASSWORD]] <backup.sql
|
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
--compose-v1
|
|
||||||
Forcer l'utilisation de docker-compose v1
|
|
||||||
-h, -s, --service SERVICE
|
-h, -s, --service SERVICE
|
||||||
Spécifier le nom du service. La valeur par défaut est db
|
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
|
-c, --mysql-cmd
|
||||||
Lancer 'mysql -hSERVICE_IP' avec les arguments supplémentaires fournis
|
Lancer 'mysql -hSERVICE_IP' avec les arguments supplémentaires fournis
|
||||||
sur la ligne de commande
|
sur la ligne de commande
|
||||||
@ -36,7 +28,6 @@ OPTIONS
|
|||||||
}
|
}
|
||||||
|
|
||||||
service=db
|
service=db
|
||||||
ipnum=
|
|
||||||
mysql_cmd=
|
mysql_cmd=
|
||||||
mysqldump_cmd=
|
mysqldump_cmd=
|
||||||
klean=
|
klean=
|
||||||
@ -44,9 +35,7 @@ user=
|
|||||||
password=
|
password=
|
||||||
args=(
|
args=(
|
||||||
--help '$exit_with display_help'
|
--help '$exit_with display_help'
|
||||||
--compose-v1 '$DOCKER_COMPOSE=(docker-compose)'
|
|
||||||
-h:,-s:,--service: service=
|
-h:,-s:,--service: service=
|
||||||
-i:,--ipnum: ipnum=
|
|
||||||
-c,--mysql-cmd mysql_cmd=1
|
-c,--mysql-cmd mysql_cmd=1
|
||||||
-d,--mysqldump-cmd mysqldump_cmd=1
|
-d,--mysqldump-cmd mysqldump_cmd=1
|
||||||
-k,--klean klean=1
|
-k,--klean klean=1
|
||||||
@ -77,26 +66,12 @@ fi
|
|||||||
###
|
###
|
||||||
|
|
||||||
function die_not_found() { die "$service: service introuvable. vérifiez que le projet est actuellement up"; }
|
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
|
setx cid=docker-compose ps -q "$service" 2>/dev/null || die_not_found
|
||||||
[ -n "$cid" ] || die_not_found
|
[ -n "$cid" ] || die_not_found
|
||||||
edebug "$service id: $cid"
|
edebug "$service id: $cid"
|
||||||
|
|
||||||
function die_not_found() { die "$service: $cid: ip introuvable"; }
|
function die_not_found() { die "$service: $cid: ip introuvable"; }
|
||||||
setx ip=docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}},{{end}}' "$cid" || die_not_found
|
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
|
[ -n "$ip" ] || die_not_found
|
||||||
edebug "$service ip: $ip"
|
edebug "$service ip: $ip"
|
||||||
|
|
||||||
@ -112,7 +87,7 @@ elif [ -n "$klean" ]; then
|
|||||||
estep "wait 10sec..."
|
estep "wait 10sec..."
|
||||||
sleep 10
|
sleep 10
|
||||||
estep "start"
|
estep "start"
|
||||||
"${DOCKER_COMPOSE[@]}" start "$service"
|
docker-compose start "$service"
|
||||||
|
|
||||||
else
|
else
|
||||||
[ -f bin/conndev.php ] || die "Impossible de trouver le script compagnon conndev.php"
|
[ -f bin/conndev.php ] || die "Impossible de trouver le script compagnon conndev.php"
|
||||||
|
22
cx-shelldev
22
cx-shelldev
@ -1,33 +1,29 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
[ -n "$COMPOSE_V1" ] && DOCKER_COMPOSE=(docker-compose) || DOCKER_COMPOSE=(docker compose)
|
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: ouvrir un shell dans le container
|
uecho "$scriptname: ouvrir un shell dans le container
|
||||||
|
|
||||||
USAGE
|
USAGE
|
||||||
$scriptname [CMD...]
|
$scriptname [SHELL]
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
--compose-v1
|
|
||||||
Forcer l'utilisation de docker-compose v1
|
|
||||||
-h, -s, --service SERVICE
|
-h, -s, --service SERVICE
|
||||||
Spécifier le nom du service sur lequel ouvrir le shell
|
Spécifier le nom du service sur lequel ouvrir le shell
|
||||||
-d, --db
|
-d
|
||||||
équivalent à -s db
|
équivalent à -s db
|
||||||
-w, --web
|
-w
|
||||||
équivalent à -s web (c'est la valeur par défaut)"
|
équivalent à -s web (c'est la valeur par défaut)"
|
||||||
}
|
}
|
||||||
|
|
||||||
service=web
|
service=web
|
||||||
args=(
|
args=(
|
||||||
--help '$exit_with display_help'
|
--help '$exit_with display_help'
|
||||||
--compose-v1 '$DOCKER_COMPOSE=(docker-compose)'
|
|
||||||
-h:,-s:,--service: service=
|
-h:,-s:,--service: service=
|
||||||
-d,--db service=db
|
-d service=db
|
||||||
-w,--web service=web
|
-w service=web
|
||||||
)
|
)
|
||||||
parse_args "$@"; set -- "${args[@]}"
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
@ -52,9 +48,9 @@ fi
|
|||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
setx cid="${DOCKER_COMPOSE[@]}" ps -q "$service" 2>/dev/null || die "$service: service introuvable"
|
setx cid=docker-compose ps -q "$service" 2>/dev/null || die "$service: service introuvable"
|
||||||
|
|
||||||
cmd=("$@")
|
cmd=("$@")
|
||||||
[ ${#cmd[*]} -gt 0 ] || cmd=(bash)
|
[ ${#cmd[*]} -gt 0 ] || cmd=(bash)
|
||||||
|
|
||||||
"${DOCKER_COMPOSE[@]}" exec "$service" "${cmd[@]}"
|
docker-compose exec "$service" "${cmd[@]}"
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: mettre à jour un module ur/* ou lib/* sans utiliser composer
|
uecho "$scriptname: mettre à jour un module ur/* ou lib/* sans utiliser composer
|
||||||
|
238
dk
238
dk
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/auto" || exit 1
|
||||||
urequire pff json
|
urequire pff json
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
@ -179,9 +179,7 @@ COMMANDES
|
|||||||
sélectionner que les images correspondant au filtre qui ont le tag
|
sélectionner que les images correspondant au filtre qui ont le tag
|
||||||
spécifié.
|
spécifié.
|
||||||
X|prune
|
X|prune
|
||||||
XX|prune-cache
|
Supprimer les containers et les images inutilisées
|
||||||
Supprimer les containers, les images et avec prune-cache, les objets
|
|
||||||
caches inutilisées
|
|
||||||
|
|
||||||
composer|ci|cu|cr|cs [args...]
|
composer|ci|cu|cr|cs [args...]
|
||||||
Frontend pour lancer composer à l'intérieur d'un container.
|
Frontend pour lancer composer à l'intérieur d'un container.
|
||||||
@ -222,15 +220,14 @@ COMMANDES
|
|||||||
pour lancer l'image docker. La valeur par défaut est -u, ce qui force
|
pour lancer l'image docker. La valeur par défaut est -u, ce qui force
|
||||||
l'utilisation de l'instance docker locale.
|
l'utilisation de l'instance docker locale.
|
||||||
* COMPOSER_CMD -- Chemin vers l'exécutable composer. Par défaut,
|
* COMPOSER_CMD -- Chemin vers l'exécutable composer. Par défaut,
|
||||||
utiliser composer.phar s'il existe dans le répertoire du projet ou
|
utiliser composer.phar s'il existe dans le répertoire du projet. Sinon
|
||||||
dans un sous-répertoire sbin/. Sinon utiliser /usr/bin/composer
|
utiliser /usr/bin/composer
|
||||||
* COMPOSER_SETUP -- Liste de commandes à lancer pour configurer le
|
* COMPOSER_SETUP -- Liste de commandes à lancer pour configurer le
|
||||||
container. Dans ce cas, un container ayant pour base \$COMPOSER_IMAGE
|
container. Dans ce cas, un container ayant pour base \$COMPOSER_IMAGE
|
||||||
et nommé d'après le nom du projet est préparé et les commandes
|
et nommé d'après le nom du projet est préparé et les commandes
|
||||||
spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
|
spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
|
||||||
Ce paramétrage est utilisé pour par exemple installer certains
|
Ce paramétrage est utilisé pour par exemple installer certains
|
||||||
packages nécessaire au projet.
|
packages nécessaire au projet.
|
||||||
* COMPOSER_SETUP_IMAGE -- nom final de l'image pour COMPOSER_SETUP
|
|
||||||
La commande 'rshell' est une extension qui lance un shell bash au lieu
|
La commande 'rshell' est une extension qui lance un shell bash au lieu
|
||||||
de lancer la commande composer, ce qui permet de faire des opérations
|
de lancer la commande composer, ce qui permet de faire des opérations
|
||||||
plus complexes si le besoin s'en fait sentir. NB: le shell est lancé
|
plus complexes si le besoin s'en fait sentir. NB: le shell est lancé
|
||||||
@ -268,7 +265,6 @@ COMMANDES
|
|||||||
spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
|
spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
|
||||||
Ce paramétrage est utilisé pour par exemple installer certains
|
Ce paramétrage est utilisé pour par exemple installer certains
|
||||||
packages nécessaire au projet.
|
packages nécessaire au projet.
|
||||||
* MAVEN_SETUP_IMAGE -- nom final de l'image pour MAVEN_SETUP
|
|
||||||
La commande 'rshell' est une extension qui lance un shell bash au lieu
|
La commande 'rshell' est une extension qui lance un shell bash au lieu
|
||||||
de lancer la commande mvn, ce qui permet de faire des opérations
|
de lancer la commande mvn, ce qui permet de faire des opérations
|
||||||
plus complexes si le besoin s'en fait sentir. NB: le shell est lancé
|
plus complexes si le besoin s'en fait sentir. NB: le shell est lancé
|
||||||
@ -336,8 +332,6 @@ OPTIONS build
|
|||||||
deploy, by, bpy et update impliquent --stack
|
deploy, by, bpy et update impliquent --stack
|
||||||
-j, --no-cache
|
-j, --no-cache
|
||||||
Ne pas utiliser le cache lors du build
|
Ne pas utiliser le cache lors du build
|
||||||
--plain-output
|
|
||||||
Afficher la sortie complète des containers lors du build
|
|
||||||
-U, --pull
|
-U, --pull
|
||||||
Essayer de récupérer une version plus récente de l'image source
|
Essayer de récupérer une version plus récente de l'image source
|
||||||
-g, --ug, --no-update-apps
|
-g, --ug, --no-update-apps
|
||||||
@ -455,7 +449,7 @@ VARIABLES de update-apps.conf
|
|||||||
ORIGIN
|
ORIGIN
|
||||||
vaut 'origin' par défaut
|
vaut 'origin' par défaut
|
||||||
BRANCH
|
BRANCH
|
||||||
vaut par défaut 'master' dans le profil prod, 'develop' sinon
|
vaut 'develop' par défaut
|
||||||
Pour toutes les variables de type BRANCH, utiliser la syntaxe ^COMMIT
|
Pour toutes les variables de type BRANCH, utiliser la syntaxe ^COMMIT
|
||||||
pour ignorer ORIGIN et sélectionner un commit en particulier
|
pour ignorer ORIGIN et sélectionner un commit en particulier
|
||||||
TYPE
|
TYPE
|
||||||
@ -500,11 +494,9 @@ VARIABLES de update-apps.conf
|
|||||||
MAVEN_ACTION
|
MAVEN_ACTION
|
||||||
vaut 'package' par défaut. Indique ce qu'il faut faire pour un projet de
|
vaut 'package' par défaut. Indique ce qu'il faut faire pour un projet de
|
||||||
type 'maven' après avoir lancé les commandes de BEFORE_BUILD et avant
|
type 'maven' après avoir lancé les commandes de BEFORE_BUILD et avant
|
||||||
les commandes de AFTER_UPDATE. Les directives supportées sont:
|
les commandes de AFTER_UPDATE. Les directives supportées sont 'package'
|
||||||
- 'install' (alias de 'clean package install')
|
(alias de 'clean package'), 'package_only' qui ne lance pas de clean
|
||||||
- 'package' (alias de 'clean package')
|
avant le build, et 'none'
|
||||||
- 'package_only' qui ne lance pas de clean avant le build
|
|
||||||
- 'none' qui ne fait rien
|
|
||||||
MAVEN_ARGS
|
MAVEN_ARGS
|
||||||
options à utiliser avec la commande 'mvn \$MAVEN_ACTION'
|
options à utiliser avec la commande 'mvn \$MAVEN_ACTION'
|
||||||
|
|
||||||
@ -853,7 +845,8 @@ function build_update_apps() {
|
|||||||
DEFAULT_ORIGIN="$UPDATE_APPS_ORIGIN"
|
DEFAULT_ORIGIN="$UPDATE_APPS_ORIGIN"
|
||||||
[ -z "$DEFAULT_ORIGIN" ] && DEFAULT_ORIGIN=origin
|
[ -z "$DEFAULT_ORIGIN" ] && DEFAULT_ORIGIN=origin
|
||||||
DEFAULT_BRANCH="$UPDATE_APPS_BRANCH"
|
DEFAULT_BRANCH="$UPDATE_APPS_BRANCH"
|
||||||
[ -z "$DEFAULT_BRANCH" -a "$PROFILE" == prod ] && DEFAULT_BRANCH=master
|
#XXX à terme, ne déployer en prod que la branche master
|
||||||
|
[ -z "$DEFAULT_BRANCH" -a "$PROFILE" == prod ] && DEFAULT_BRANCH=develop #XXX master
|
||||||
[ -z "$DEFAULT_BRANCH" ] && DEFAULT_BRANCH=develop
|
[ -z "$DEFAULT_BRANCH" ] && DEFAULT_BRANCH=develop
|
||||||
CLEAN=
|
CLEAN=
|
||||||
APPS=()
|
APPS=()
|
||||||
@ -1087,10 +1080,10 @@ function build_update_apps() {
|
|||||||
estep "Type de dépôt: $TYPE"
|
estep "Type de dépôt: $TYPE"
|
||||||
if [ "$TYPE" == composer ]; then
|
if [ "$TYPE" == composer ]; then
|
||||||
local cvname cvvalue
|
local cvname cvvalue
|
||||||
local composer_php composer_php_max composer_image composer_cmd composer_setup composer_setup_image composer_action
|
local composer_php composer_php_max composer_image composer_cmd composer_setup composer_action
|
||||||
local -a composer_vars composer_args
|
local -a composer_vars composer_args
|
||||||
|
|
||||||
for cvname in composer_php composer_php_max composer_image composer_cmd composer_setup composer_setup_image; do
|
for cvname in composer_php composer_php_max composer_image composer_cmd composer_setup; do
|
||||||
cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
|
cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
|
||||||
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
||||||
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
||||||
@ -1126,10 +1119,10 @@ function build_update_apps() {
|
|||||||
fi
|
fi
|
||||||
elif [ "$TYPE" == maven ]; then
|
elif [ "$TYPE" == maven ]; then
|
||||||
local cvname cvvalue
|
local cvname cvvalue
|
||||||
local maven_java maven_image maven_cmd maven_setup maven_setup_image maven_action
|
local maven_java maven_image maven_cmd maven_setup maven_action
|
||||||
local -a maven_vars maven_args
|
local -a maven_vars maven_args
|
||||||
|
|
||||||
for cvname in maven_java maven_image maven_cmd maven_setup maven_setup_image; do
|
for cvname in maven_java maven_image maven_cmd maven_setup; do
|
||||||
cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
|
cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
|
||||||
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
||||||
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
||||||
@ -1150,16 +1143,15 @@ function build_update_apps() {
|
|||||||
|
|
||||||
if [ -z "$BUILD_UPDATE_DEVEL" ]; then
|
if [ -z "$BUILD_UPDATE_DEVEL" ]; then
|
||||||
case "$maven_action" in
|
case "$maven_action" in
|
||||||
install|"clean package install"|cpi|i) maven_action="clean package install";;
|
|
||||||
package|"clean package"|cp|p) maven_action="clean package";;
|
|
||||||
package_only|po) maven_action="package";;
|
package_only|po) maven_action="package";;
|
||||||
|
"clean package"|package|cp|p) maven_action="clean package";;
|
||||||
none|nop) maven_action=;;
|
none|nop) maven_action=;;
|
||||||
*) ewarn "$maven_action: action non standard. elle sera utilisée en l'état";;
|
*) ewarn "$maven_action: action invalide"; maven_action=;;
|
||||||
esac
|
esac
|
||||||
if [ -n "$maven_action" ]; then
|
if [ -n "$maven_action" ]; then
|
||||||
estep "Compilation du projet maven"
|
|
||||||
setx cwd=pwd
|
setx cwd=pwd
|
||||||
cd "$DEST"
|
cd "$DEST"
|
||||||
|
estep "Compilation du projet maven"
|
||||||
auto_maven "${maven_vars[@]}" $maven_action "${maven_args[@]}" || { eend; return 1; }
|
auto_maven "${maven_vars[@]}" $maven_action "${maven_args[@]}" || { eend; return 1; }
|
||||||
cd "$cwd"
|
cd "$cwd"
|
||||||
fi
|
fi
|
||||||
@ -1243,11 +1235,10 @@ function default_update_build_env() {
|
|||||||
function update_build_env() { default_update_build_env "$@"; }
|
function update_build_env() { default_update_build_env "$@"; }
|
||||||
|
|
||||||
function default_compose_build() {
|
function default_compose_build() {
|
||||||
${FAKE:+qvals} "${DOCKER_COMPOSE[@]}" \
|
${FAKE:+qvals} docker-compose \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
build \
|
build \
|
||||||
${NO_CACHE:+--no-cache} \
|
${NO_CACHE:+--no-cache} \
|
||||||
${PROGRESS:+--progress "$PROGRESS"} \
|
|
||||||
${PULL:+--pull} \
|
${PULL:+--pull} \
|
||||||
"${replace_build_args[@]}" "${build_args[@]}" \
|
"${replace_build_args[@]}" "${build_args[@]}" \
|
||||||
"$@"
|
"$@"
|
||||||
@ -1259,7 +1250,6 @@ function default_docker_build() {
|
|||||||
done
|
done
|
||||||
${FAKE:+qvals} "$DOCKER" build \
|
${FAKE:+qvals} "$DOCKER" build \
|
||||||
${NO_CACHE:+--no-cache} \
|
${NO_CACHE:+--no-cache} \
|
||||||
${PROGRESS:+--progress "$PROGRESS"} \
|
|
||||||
${PULL:+--pull} \
|
${PULL:+--pull} \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
"${replace_build_args[@]}" "${build_args[@]}" \
|
"${replace_build_args[@]}" "${build_args[@]}" \
|
||||||
@ -1309,14 +1299,13 @@ function auto_build() {
|
|||||||
done
|
done
|
||||||
${FAKE:+qvals} "$DOCKER" build \
|
${FAKE:+qvals} "$DOCKER" build \
|
||||||
${NO_CACHE:+--no-cache} \
|
${NO_CACHE:+--no-cache} \
|
||||||
${PROGRESS:+--progress "$PROGRESS"} \
|
|
||||||
${PULL:+--pull} \
|
${PULL:+--pull} \
|
||||||
"${replace_build_args[@]}" "$@"
|
"${replace_build_args[@]}" "$@"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function default_compose_push() {
|
function default_compose_push() {
|
||||||
${FAKE:+qvals} "${DOCKER_COMPOSE[@]}" \
|
${FAKE:+qvals} docker-compose \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
push \
|
push \
|
||||||
"$@"
|
"$@"
|
||||||
@ -1354,7 +1343,7 @@ function auto_push() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function default_compose_up() {
|
function default_compose_up() {
|
||||||
${FAKE:+qvals} "${DOCKER_COMPOSE[@]}" \
|
${FAKE:+qvals} docker-compose \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
up "${replace_run_args[@]}" "${run_args[@]}" \
|
up "${replace_run_args[@]}" "${run_args[@]}" \
|
||||||
"${replace_user_args[@]}" "${user_args[@]}" "$@"
|
"${replace_user_args[@]}" "${user_args[@]}" "$@"
|
||||||
@ -1388,7 +1377,7 @@ function auto_up() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function default_compose_stop() {
|
function default_compose_stop() {
|
||||||
${FAKE:+qvals} "${DOCKER_COMPOSE[@]}" \
|
${FAKE:+qvals} docker-compose \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
stop "${replace_stop_args[@]}" "${stop_args[@]}" \
|
stop "${replace_stop_args[@]}" "${stop_args[@]}" \
|
||||||
"$@"
|
"$@"
|
||||||
@ -1417,7 +1406,7 @@ function auto_stop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function default_compose_logs() {
|
function default_compose_logs() {
|
||||||
${FAKE:+qvals} "${DOCKER_COMPOSE[@]}" \
|
${FAKE:+qvals} docker-compose \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
logs "${replace_logs_args[@]}" "${logs_args[@]}" \
|
logs "${replace_logs_args[@]}" "${logs_args[@]}" \
|
||||||
"$@"
|
"$@"
|
||||||
@ -1448,7 +1437,7 @@ function auto_logs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function default_compose_down() {
|
function default_compose_down() {
|
||||||
${FAKE:+qvals} "${DOCKER_COMPOSE[@]}" \
|
${FAKE:+qvals} docker-compose \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
down "${replace_down_args[@]}" "${down_args[@]}" \
|
down "${replace_down_args[@]}" "${down_args[@]}" \
|
||||||
"$@"
|
"$@"
|
||||||
@ -1483,7 +1472,7 @@ function auto_down() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function default_compose_run() {
|
function default_compose_run() {
|
||||||
${FAKE:+qvals} "${DOCKER_COMPOSE[@]}" \
|
${FAKE:+qvals} docker-compose \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
run "${replace_run_args[@]}" "${run_args[@]}" \
|
run "${replace_run_args[@]}" "${run_args[@]}" \
|
||||||
"${replace_user_args[@]}" "${user_args[@]}" "$@"
|
"${replace_user_args[@]}" "${user_args[@]}" "$@"
|
||||||
@ -1554,7 +1543,7 @@ function auto_run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function default_compose_exec() {
|
function default_compose_exec() {
|
||||||
${FAKE:+qvals} "${DOCKER_COMPOSE[@]}" \
|
${FAKE:+qvals} docker-compose \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
exec "${replace_exec_args[@]}" "${exec_args[@]}" \
|
exec "${replace_exec_args[@]}" "${exec_args[@]}" \
|
||||||
"$@"
|
"$@"
|
||||||
@ -1768,7 +1757,7 @@ function auto_status() {
|
|||||||
function default_compose_show_ip() {
|
function default_compose_show_ip() {
|
||||||
local -a cmd cids; local cid
|
local -a cmd cids; local cid
|
||||||
cmd=(
|
cmd=(
|
||||||
"${DOCKER_COMPOSE[@]}"
|
docker-compose
|
||||||
"${replace_env_args[@]}" "${env_args[@]}"
|
"${replace_env_args[@]}" "${env_args[@]}"
|
||||||
ps -q "${replace_show_ip_args[@]}" "${show_ip_args[@]}"
|
ps -q "${replace_show_ip_args[@]}" "${show_ip_args[@]}"
|
||||||
"$@"
|
"$@"
|
||||||
@ -1804,38 +1793,21 @@ function auto_show_ip() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function default_compose_systemd_unit() {
|
function default_compose_systemd_unit() {
|
||||||
local -a docker_compose
|
local docker_compose="$(which docker-compose 2>/dev/null)"
|
||||||
if [ "${DOCKER_COMPOSE[0]}" == docker ]; then
|
if [ -z "$docker_compose" ]; then
|
||||||
# compose v2
|
if [ -x /usr/bin/docker-compose ]; then
|
||||||
local docker="$(which docker 2>/dev/null)"
|
docker_compose=/usr/bin/docker-compose
|
||||||
if [ -z "$docker" ]; then
|
elif [ -x /usr/local/bin/docker-compose ]; then
|
||||||
if [ -x /usr/bin/docker ]; then
|
docker_compose=/usr/local/bin/docker-compose
|
||||||
docker=/usr/bin/docker
|
else
|
||||||
elif [ -x /usr/local/bin/docker ]; then
|
die "Impossible de trouver docker-compose"
|
||||||
docker=/usr/local/bin/docker
|
|
||||||
else
|
|
||||||
die "Impossible de trouver docker"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
docker_compose=("$docker" compose)
|
|
||||||
else
|
|
||||||
# compose v1
|
|
||||||
docker_compose="$(which docker-compose 2>/dev/null)"
|
|
||||||
if [ -z "$docker_compose" ]; then
|
|
||||||
if [ -x /usr/bin/docker-compose ]; then
|
|
||||||
docker_compose=/usr/bin/docker-compose
|
|
||||||
elif [ -x /usr/local/bin/docker-compose ]; then
|
|
||||||
docker_compose=/usr/local/bin/docker-compose
|
|
||||||
else
|
|
||||||
die "Impossible de trouver docker-compose"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
setx startcmd=qvals "${docker_compose[@]}" \
|
setx startcmd=qvals "$docker_compose" \
|
||||||
"${replace_env_args[@]}" "${env_args[@]}" \
|
"${replace_env_args[@]}" "${env_args[@]}" \
|
||||||
up "${replace_run_args[@]}" "${run_args[@]}" \
|
up "${replace_run_args[@]}" "${run_args[@]}" \
|
||||||
"${replace_user_args[@]}" "${user_args[@]}" "$@"
|
"${replace_user_args[@]}" "${user_args[@]}" "$@"
|
||||||
setx stopcmd=qvals "${docker_compose[@]}" down
|
setx stopcmd=qvals "$docker_compose" down
|
||||||
}
|
}
|
||||||
function default_docker_systemd_unit() {
|
function default_docker_systemd_unit() {
|
||||||
local docker="$(which "$DOCKER" 2>/dev/null)"
|
local docker="$(which "$DOCKER" 2>/dev/null)"
|
||||||
@ -1949,7 +1921,6 @@ function default_local_composer() {
|
|||||||
*)
|
*)
|
||||||
if [ -n "$COMPOSER_CMD" ]; then :
|
if [ -n "$COMPOSER_CMD" ]; then :
|
||||||
elif [ -x composer.phar ]; then COMPOSER_CMD=./composer.phar
|
elif [ -x composer.phar ]; then COMPOSER_CMD=./composer.phar
|
||||||
elif [ -x sbin/composer.phar ]; then COMPOSER_CMD=./sbin/composer.phar
|
|
||||||
elif [ -x /usr/bin/composer ]; then COMPOSER_CMD=/usr/bin/composer
|
elif [ -x /usr/bin/composer ]; then COMPOSER_CMD=/usr/bin/composer
|
||||||
else
|
else
|
||||||
eerror "Impossible de trouver composer"
|
eerror "Impossible de trouver composer"
|
||||||
@ -1986,7 +1957,6 @@ function default_docker_composer() {
|
|||||||
-e group="$group"
|
-e group="$group"
|
||||||
-e projdir="$projdir"
|
-e projdir="$projdir"
|
||||||
-e setup="$COMPOSER_SETUP"
|
-e setup="$COMPOSER_SETUP"
|
||||||
-e setup_image="$COMPOSER_SETUP_IMAGE"
|
|
||||||
-e composer="$COMPOSER_CMD"
|
-e composer="$COMPOSER_CMD"
|
||||||
-e args="$args"
|
-e args="$args"
|
||||||
)
|
)
|
||||||
@ -2006,7 +1976,6 @@ echo "$group" >>/etc/group; group="${group%%:*}"
|
|||||||
cd "$projdir"
|
cd "$projdir"
|
||||||
if [ -n "$composer" ]; then :
|
if [ -n "$composer" ]; then :
|
||||||
elif [ -x composer.phar ]; then composer=./composer.phar
|
elif [ -x composer.phar ]; then composer=./composer.phar
|
||||||
elif [ -x sbin/composer.phar ]; then composer=./sbin/composer.phar
|
|
||||||
elif [ -x /usr/bin/composer ]; then composer=/usr/bin/composer
|
elif [ -x /usr/bin/composer ]; then composer=/usr/bin/composer
|
||||||
else
|
else
|
||||||
echo "ERROR: Impossible de trouver composer"
|
echo "ERROR: Impossible de trouver composer"
|
||||||
@ -2016,36 +1985,35 @@ fi
|
|||||||
|
|
||||||
if [ -n "$COMPOSER_SETUP" ]; then
|
if [ -n "$COMPOSER_SETUP" ]; then
|
||||||
# lancement dans un container docker à préparer
|
# lancement dans un container docker à préparer
|
||||||
local NAME setup_image project_name container_name dkid
|
local NAME project_name container_name dkid
|
||||||
if [ -f docker-compose.yml ]; then
|
if [ -f docker-compose.yml ]; then
|
||||||
compose_set_project_name set_container_name
|
compose_set_project_name set_container_name
|
||||||
else
|
else
|
||||||
NAME="$(basename -- "$(pwd)")"
|
NAME="$(basename -- "$(pwd)")"
|
||||||
docker_check_name set_container_name
|
docker_check_name set_container_name
|
||||||
fi
|
fi
|
||||||
setup_image="$COMPOSER_SETUP_IMAGE"
|
container_name="dk_composer_${container_name}"
|
||||||
[ -n "$setup_image" ] || setup_image="dk_composer_${container_name}_image"
|
|
||||||
|
|
||||||
# vérifier l'existence de l'image
|
# vérifier l'existence de l'image
|
||||||
setx dkid=docker image ls --format '{{.ID}}' "$setup_image"
|
setx dkid=docker image ls --format '{{.ID}}' "${container_name}_image"
|
||||||
|
|
||||||
# créer le container le cas échéant
|
# créer le container le cas échéant
|
||||||
if [ -z "$dkid" ]; then
|
if [ -z "$dkid" ]; then
|
||||||
estep "Création de l'image $setup_image à partir de $COMPOSER_IMAGE"
|
estep "Création du container $container_name avec l'image $COMPOSER_IMAGE"
|
||||||
cmd=(
|
cmd=(
|
||||||
"$DOCKER" create -it --name "${setup_image}_tmpct"
|
"$DOCKER" create -it --name "${container_name}_ct"
|
||||||
"${basecmd[@]}"
|
"${basecmd[@]}"
|
||||||
"$COMPOSER_IMAGE"
|
"$COMPOSER_IMAGE"
|
||||||
bash -c "$setupscript"
|
bash -c "$setupscript"
|
||||||
)
|
)
|
||||||
setx dkid="${cmd[@]}" || return 1
|
setx dkid="${cmd[@]}" || return 1
|
||||||
"$DOCKER" container start -ai "$dkid" || return 1
|
"$DOCKER" container start -ai "$dkid" || return 1
|
||||||
"$DOCKER" container commit "$dkid" "$setup_image" || return 1
|
"$DOCKER" container commit "$dkid" "${container_name}_image" || return 1
|
||||||
"$DOCKER" container rm "$dkid" || return 1
|
"$DOCKER" container rm "$dkid" || return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# prendre comme image le container créé
|
# prendre comme image le container créé
|
||||||
COMPOSER_IMAGE="$setup_image"
|
COMPOSER_IMAGE="${container_name}_image"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cmd=(
|
cmd=(
|
||||||
@ -2071,19 +2039,7 @@ function auto_composer() {
|
|||||||
local COMPOSER_MACHINE=-u
|
local COMPOSER_MACHINE=-u
|
||||||
local COMPOSER_CMD=
|
local COMPOSER_CMD=
|
||||||
local COMPOSER_SETUP=
|
local COMPOSER_SETUP=
|
||||||
local COMPOSER_SETUP_IMAGE=
|
[ -f .composer.conf ] && source ./.composer.conf
|
||||||
if [ -f .composer.yaml ]; then
|
|
||||||
local registry
|
|
||||||
eval "$(<.composer.yaml grep ^composer_ |
|
|
||||||
sed 's/^composer_php_min: /COMPOSER_PHP=/
|
|
||||||
s/^composer_php_max: /COMPOSER_PHP_MAX=/
|
|
||||||
s/^composer_registry: /registry=/
|
|
||||||
s/^composer_image: \(.*\)/COMPOSER_IMAGE="${registry:-$REGISTRY}\/\1"/
|
|
||||||
s/^composer_setup: /COMPOSER_SETUP=/
|
|
||||||
s/^composer_setup_image: /COMPOSER_SETUP_IMAGE=/')"
|
|
||||||
elif [ -f .composer.conf ]; then
|
|
||||||
source ./.composer.conf
|
|
||||||
fi
|
|
||||||
# les premiers arguments peuvent servir à redéfinir les variables
|
# les premiers arguments peuvent servir à redéfinir les variables
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
@ -2099,10 +2055,8 @@ function auto_composer() {
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
local use_runphp use_image
|
local use_image
|
||||||
if [ "$COMPOSER_PHP" == runphp ]; then
|
if [ "$COMPOSER_PHP" == force -o "$COMPOSER_PHP" == any ]; then
|
||||||
use_runphp=1
|
|
||||||
elif [ "$COMPOSER_PHP" == force -o "$COMPOSER_PHP" == any ]; then
|
|
||||||
use_image=1
|
use_image=1
|
||||||
elif [ "$COMPOSER_PHP" == none -o "$COMPOSER_PHP" == system ]; then
|
elif [ "$COMPOSER_PHP" == none -o "$COMPOSER_PHP" == system ]; then
|
||||||
COMPOSER_PHP=none
|
COMPOSER_PHP=none
|
||||||
@ -2123,7 +2077,7 @@ exit((PHP_VERSION_ID > $version)? 0: 1);
|
|||||||
*) ewarn "Erreur lors du lancement de PHP: est-il installé? Vous pouvez utiliser COMPOSER_PHP=any";;
|
*) ewarn "Erreur lors du lancement de PHP: est-il installé? Vous pouvez utiliser COMPOSER_PHP=any";;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
if [ -n "$use_runphp" -o -n "$use_image" -o "$COMPOSER_PHP" == none ]; then
|
if [ -n "$use_image" -o "$COMPOSER_PHP" == none ]; then
|
||||||
: # ok, on a déjà décidé
|
: # ok, on a déjà décidé
|
||||||
elif [ -z "$COMPOSER_PHP" ]; then
|
elif [ -z "$COMPOSER_PHP" ]; then
|
||||||
# pas de version minimum, tester simplement la valeur de COMPOSER_IMAGE
|
# pas de version minimum, tester simplement la valeur de COMPOSER_IMAGE
|
||||||
@ -2145,23 +2099,7 @@ exit((PHP_VERSION_ID < $version)? 0: 1);
|
|||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$use_runphp" ]; then
|
if [ -n "$use_image" ]; then
|
||||||
(
|
|
||||||
export PROJDIR="$(pwd)"
|
|
||||||
export RUNPHP_STANDALONE=
|
|
||||||
RUNPHP=; DIST=; REGISTRY=
|
|
||||||
if [ -f "$PROJDIR/.runphp.conf" ]; then
|
|
||||||
source "$PROJDIR/.runphp.conf"
|
|
||||||
[ -n "$RUNPHP" ] && exec "$PROJDIR/$RUNPHP" composer "$@"
|
|
||||||
elif [ -f "$PROJDIR/sbin/runphp" ]; then
|
|
||||||
exec "$PROJDIR/sbin/runphp" composer "$@"
|
|
||||||
elif [ -f "$PROJDIR/runphp" ]; then
|
|
||||||
exec "$PROJDIR/runphp" composer "$@"
|
|
||||||
fi
|
|
||||||
exec runphp composer "$@"
|
|
||||||
)
|
|
||||||
|
|
||||||
elif [ -n "$use_image" ]; then
|
|
||||||
[ "$COMPOSER_IMAGE" != none ] || die "Vous devez spécifier l'image à utiliser pour composer"
|
[ "$COMPOSER_IMAGE" != none ] || die "Vous devez spécifier l'image à utiliser pour composer"
|
||||||
|
|
||||||
local PREVIOUS_DOCKER_MACHINE_NAME="$DOCKER_MACHINE_NAME"
|
local PREVIOUS_DOCKER_MACHINE_NAME="$DOCKER_MACHINE_NAME"
|
||||||
@ -2243,7 +2181,6 @@ function default_docker_maven() {
|
|||||||
-e group="$group"
|
-e group="$group"
|
||||||
-e projdir="$projdir"
|
-e projdir="$projdir"
|
||||||
-e setup="$MAVEN_SETUP"
|
-e setup="$MAVEN_SETUP"
|
||||||
-e setup_image="$MAVEN_SETUP_IMAGE"
|
|
||||||
-e maven="$MAVEN_CMD"
|
-e maven="$MAVEN_CMD"
|
||||||
-e args="$args"
|
-e args="$args"
|
||||||
${MAVEN_JAVA:+-e JAVA="$MAVEN_JAVA"}
|
${MAVEN_JAVA:+-e JAVA="$MAVEN_JAVA"}
|
||||||
@ -2268,36 +2205,35 @@ cd "$projdir"
|
|||||||
|
|
||||||
if [ -n "$MAVEN_SETUP" ]; then
|
if [ -n "$MAVEN_SETUP" ]; then
|
||||||
# lancement dans un container docker à préparer
|
# lancement dans un container docker à préparer
|
||||||
local NAME setup_image project_name container_name dkid
|
local NAME project_name container_name dkid
|
||||||
if [ -f docker-compose.yml ]; then
|
if [ -f docker-compose.yml ]; then
|
||||||
compose_set_project_name set_container_name
|
compose_set_project_name set_container_name
|
||||||
else
|
else
|
||||||
NAME="$(basename -- "$(pwd)")"
|
NAME="$(basename -- "$(pwd)")"
|
||||||
docker_check_name set_container_name
|
docker_check_name set_container_name
|
||||||
fi
|
fi
|
||||||
setup_image="$MAVEN_SETUP_IMAGE"
|
container_name="dk_maven_${container_name}"
|
||||||
[ -n "$setup_image" ] || setup_image="dk_maven_${container_name}_image"
|
|
||||||
|
|
||||||
# vérifier l'existence de l'image
|
# vérifier l'existence de l'image
|
||||||
setx dkid=docker image ls --format '{{.ID}}' "$setup_image"
|
setx dkid=docker image ls --format '{{.ID}}' "${container_name}_image"
|
||||||
|
|
||||||
# créer le container le cas échéant
|
# créer le container le cas échéant
|
||||||
if [ -z "$dkid" ]; then
|
if [ -z "$dkid" ]; then
|
||||||
estep "Création de l'image $setup_image à partir de $MAVEN_IMAGE"
|
estep "Création du container $container_name avec l'image $MAVEN_IMAGE"
|
||||||
cmd=(
|
cmd=(
|
||||||
"$DOCKER" create -it --name "${setup_image}_tmpct"
|
"$DOCKER" create -it --name "${container_name}_ct"
|
||||||
"${basecmd[@]}"
|
"${basecmd[@]}"
|
||||||
"$MAVEN_IMAGE"
|
"$MAVEN_IMAGE"
|
||||||
bash -c "$setupscript"
|
bash -c "$setupscript"
|
||||||
)
|
)
|
||||||
setx dkid="${cmd[@]}" || return 1
|
setx dkid="${cmd[@]}" || return 1
|
||||||
"$DOCKER" container start -ai "$dkid" || return 1
|
"$DOCKER" container start -ai "$dkid" || return 1
|
||||||
"$DOCKER" container commit "$dkid" "$setup_image" || return 1
|
"$DOCKER" container commit "$dkid" "${container_name}_image" || return 1
|
||||||
"$DOCKER" container rm "$dkid" || return 1
|
"$DOCKER" container rm "$dkid" || return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# prendre comme image le container créé
|
# prendre comme image le container créé
|
||||||
MAVEN_IMAGE="$setup_image"
|
MAVEN_IMAGE="${container_name}_image"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cmd=(
|
cmd=(
|
||||||
@ -2322,7 +2258,6 @@ function auto_maven() {
|
|||||||
local MAVEN_MACHINE=-u
|
local MAVEN_MACHINE=-u
|
||||||
local MAVEN_CMD=
|
local MAVEN_CMD=
|
||||||
local MAVEN_SETUP=
|
local MAVEN_SETUP=
|
||||||
local MAVEN_SETUP_IMAGE=
|
|
||||||
[ -f .maven.conf ] && source ./.maven.conf
|
[ -f .maven.conf ] && source ./.maven.conf
|
||||||
# les premiers arguments peuvent servir à redéfinir les variables
|
# les premiers arguments peuvent servir à redéfinir les variables
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
@ -2453,8 +2388,7 @@ elif progexists podman; then DOCKER=podman
|
|||||||
else DOCKER=docker
|
else DOCKER=docker
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$COMPOSE_V1" ] && DOCKER_COMPOSE=(docker-compose) || DOCKER_COMPOSE=(docker compose)
|
DEFAULT_PROFILE=devel
|
||||||
|
|
||||||
PROFILE=
|
PROFILE=
|
||||||
DM_ALIASES=()
|
DM_ALIASES=()
|
||||||
DM_PROFILES=()
|
DM_PROFILES=()
|
||||||
@ -2462,55 +2396,19 @@ CLUSTERDIRS=()
|
|||||||
DEFAULT_DEVEL_SRCDIR="$HOME/wop"
|
DEFAULT_DEVEL_SRCDIR="$HOME/wop"
|
||||||
COMPOSER_DEVEL_SRCDIR="$HOME/wop/php"
|
COMPOSER_DEVEL_SRCDIR="$HOME/wop/php"
|
||||||
MAVEN_DEVEL_SRCDIR="$HOME/wop/sn"
|
MAVEN_DEVEL_SRCDIR="$HOME/wop/sn"
|
||||||
DEFAULT_COMPOSER_IMAGE=
|
DEFAULT_COMPOSER_IMAGE=docker.univ-reunion.fr/image/phpbuilder
|
||||||
DEFAULT_MAVEN_IMAGE=
|
DEFAULT_MAVEN_IMAGE=docker.univ-reunion.fr/image/javabuilder
|
||||||
DEFAULT_HOST_MAPPINGS=()
|
DEFAULT_HOST_MAPPINGS=()
|
||||||
|
prod_HOST_MAPPINGS=(
|
||||||
|
docker.univ-reunion.fr:10.82.70.154
|
||||||
|
repos.univ-reunion.fr:10.82.70.246
|
||||||
|
git.univ-reunion.fr:10.82.70.247
|
||||||
|
)
|
||||||
|
test_HOST_MAPPINGS=("${prod_HOST_MAPPINGS[@]}")
|
||||||
set_defaults dk
|
set_defaults dk
|
||||||
export PROFILE
|
export PROFILE
|
||||||
|
|
||||||
DEFAULT_PROFILE=devel
|
|
||||||
REGISTRY=
|
|
||||||
HOST_MAPPINGS=()
|
HOST_MAPPINGS=()
|
||||||
if [ -f ~/.dkbuild.env ]; then
|
|
||||||
function default_profile() {
|
|
||||||
DEFAULT_PROFILE="$1"
|
|
||||||
}
|
|
||||||
function profile() {
|
|
||||||
local profile
|
|
||||||
for profile in "$@"; do
|
|
||||||
[ "$profile" == "$DEFAULT_PROFILE" ] && return 0
|
|
||||||
done
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
function setenv() {
|
|
||||||
eval "export $1"
|
|
||||||
}
|
|
||||||
function default() {
|
|
||||||
local command="$1"; shift
|
|
||||||
local nv n v
|
|
||||||
case "$command" in
|
|
||||||
docker)
|
|
||||||
for nv in "$@"; do
|
|
||||||
[[ "$nv" == *=* ]] || continue
|
|
||||||
n="${nv%%=*}"
|
|
||||||
v="${nv#*=}"
|
|
||||||
case "$n" in
|
|
||||||
host-mappings)
|
|
||||||
read -a nv <<<"$v"
|
|
||||||
for v in "${ns[@]}"; do
|
|
||||||
HOST_MAPPINGS+=("$v")
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
source ~/.dkbuild.env
|
|
||||||
fi
|
|
||||||
[ -n "$REGISTRY" ] || REGISTRY=pubdocker.univ-reunion.fr
|
|
||||||
[ -n "$DEFAULT_COMPOSER_IMAGE" ] || DEFAULT_COMPOSER_IMAGE="$REGISTRY/image/php:d11"
|
|
||||||
[ -n "$DEFAULT_MAVEN_IMAGE" ] || DEFAULT_MAVEN_IMAGE="$REGISTRY/image/javabuilder:d11"
|
|
||||||
|
|
||||||
chdir=
|
chdir=
|
||||||
CONFIG=
|
CONFIG=
|
||||||
@ -2522,7 +2420,6 @@ FAKE=
|
|||||||
VARS=()
|
VARS=()
|
||||||
FORCE=
|
FORCE=
|
||||||
NO_CACHE=
|
NO_CACHE=
|
||||||
PROGRESS=
|
|
||||||
PULL=
|
PULL=
|
||||||
HOST=
|
HOST=
|
||||||
WITH_REGISTRY_AUTH=1
|
WITH_REGISTRY_AUTH=1
|
||||||
@ -2532,7 +2429,6 @@ update_apps_origin=
|
|||||||
update_apps_branch=
|
update_apps_branch=
|
||||||
args=(
|
args=(
|
||||||
--help '$exit_with display_help'
|
--help '$exit_with display_help'
|
||||||
--compose-v1 '$DOCKER_COMPOSE=(docker-compose)'
|
|
||||||
-d:,--chdir: chdir=
|
-d:,--chdir: chdir=
|
||||||
-c:,--config: CONFIG=
|
-c:,--config: CONFIG=
|
||||||
-p:,--profile: PROFILE=
|
-p:,--profile: PROFILE=
|
||||||
@ -2546,7 +2442,6 @@ args=(
|
|||||||
-e:,--build-arg:,--env: VARS
|
-e:,--build-arg:,--env: VARS
|
||||||
-f,--force FORCE=1
|
-f,--force FORCE=1
|
||||||
-j,--no-cache NO_CACHE=1
|
-j,--no-cache NO_CACHE=1
|
||||||
--plain-output PROGRESS=plain
|
|
||||||
-U,--pull PULL=1
|
-U,--pull PULL=1
|
||||||
-h:,--host: HOST=
|
-h:,--host: HOST=
|
||||||
-g,--ug,--no-update-apps update_apps_mode=b
|
-g,--ug,--no-update-apps update_apps_mode=b
|
||||||
@ -3023,11 +2918,6 @@ NR == 1 { print; next }
|
|||||||
"$DOCKER" container prune -f || die
|
"$DOCKER" container prune -f || die
|
||||||
"$DOCKER" image prune -f || die
|
"$DOCKER" image prune -f || die
|
||||||
;;
|
;;
|
||||||
XX|prune-cache)
|
|
||||||
"$DOCKER" container prune -f || die
|
|
||||||
"$DOCKER" image prune -f || die
|
|
||||||
"$DOCKER" builder prune -f || die
|
|
||||||
;;
|
|
||||||
composer|c|ci|cu|cr|cs)
|
composer|c|ci|cu|cr|cs)
|
||||||
build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch"
|
build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch"
|
||||||
[ -f .build.scripts.sh ] && source ./.build.scripts.sh
|
[ -f .build.scripts.sh ] && source ./.build.scripts.sh
|
||||||
|
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"
|
|
2
dmctl
2
dmctl
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source /etc/ulibauto || exit 1
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: import/exporter une docker-machine
|
uecho "$scriptname: import/exporter une docker-machine
|
||||||
|
1
docker/.dockerignore
Normal file
1
docker/.dockerignore
Normal file
@ -0,0 +1 @@
|
|||||||
|
/b/t/
|
2
docker/.gitignore
vendored
Normal file
2
docker/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/b/
|
||||||
|
/build.env.local
|
12
docker/Dockerfile
Normal file
12
docker/Dockerfile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
FROM ur/d9base
|
||||||
|
|
||||||
|
ARG date
|
||||||
|
ARG version
|
||||||
|
LABEL date=$date version=$version
|
||||||
|
|
||||||
|
ENV I=/install/nutools
|
||||||
|
COPY . $I
|
||||||
|
RUN $I/uinst -y $I && rm -rf $I
|
||||||
|
|
||||||
|
ENV PATH="$PATH:/usr/local/nutools"
|
||||||
|
CMD ["/bin/bash", "-il"]
|
72
docker/build
Executable file
72
docker/build
Executable file
@ -0,0 +1,72 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
source /etc/ulibauto || exit 1
|
||||||
|
|
||||||
|
function display_help() {
|
||||||
|
uecho "$scriptname: construire $NAME
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$scriptname [options]
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-b, --build
|
||||||
|
-n, --no-cache"
|
||||||
|
}
|
||||||
|
|
||||||
|
function do_prereqs() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
function do_build() {
|
||||||
|
local date; local -a args
|
||||||
|
setx date=date +%y%m%d
|
||||||
|
args=(
|
||||||
|
-f Dockerfile
|
||||||
|
-t $NAME:latest
|
||||||
|
--build-arg "date=$date"
|
||||||
|
${no_cache:+--no-cache}
|
||||||
|
)
|
||||||
|
|
||||||
|
etitle "Création de l'image docker $NAME" \
|
||||||
|
docker build "${args[@]}" "$CTXDIR"
|
||||||
|
}
|
||||||
|
function do_run() {
|
||||||
|
docker run -it --rm "$NAME"
|
||||||
|
}
|
||||||
|
|
||||||
|
cd "$scriptdir"
|
||||||
|
source ./build.env || die "Impossible de trouver build.env"
|
||||||
|
[ -f build.env.local ] && source build.env.local
|
||||||
|
|
||||||
|
auto=1
|
||||||
|
prereqs=
|
||||||
|
build=
|
||||||
|
no_cache=
|
||||||
|
run=
|
||||||
|
args=(
|
||||||
|
--help '$exit_with display_help'
|
||||||
|
--prereqs '$prereqs=1; auto='
|
||||||
|
-b,--build '$build=1; auto='
|
||||||
|
-n,--no-cache no_cache=1
|
||||||
|
-r,--run '$run=1; auto='
|
||||||
|
)
|
||||||
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
|
if [ -n "$prereqs" ]; then
|
||||||
|
build=
|
||||||
|
run=
|
||||||
|
elif [ -n "$auto" ]; then
|
||||||
|
build=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$prereqs" ]; then
|
||||||
|
do_prereqs "$@" || die
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$build" ]; then
|
||||||
|
do_build "$@" || die
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$run" ]; then
|
||||||
|
do_run "$@" || die
|
||||||
|
fi
|
||||||
|
|
15
docker/build.env
Normal file
15
docker/build.env
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
# Nom de l'image
|
||||||
|
NAME=ur/nutools
|
||||||
|
# Build context pour docker
|
||||||
|
CTXDIR=..
|
||||||
|
# Répertoire contenant les fichiers nécessaire au build
|
||||||
|
BUILDDIR=b
|
||||||
|
# Répertoire temporaire pour construire les fichiers de BUILDDIR. Ce répertoire
|
||||||
|
# n'est pas transmis au daemon docker
|
||||||
|
TRANSDIR=b/t
|
||||||
|
|
||||||
|
# Fonctions spécifiques
|
||||||
|
#function do_prereqs() { :; }
|
||||||
|
#function do_build() { :; }
|
||||||
|
#function do_run() { :; }
|
@ -11,7 +11,7 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
source "$(dirname -- "$0")/lib/ulib/ulib" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
urequire base
|
urequire base
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: afficher les connexions TCP entrantes sur un port
|
uecho "$scriptname: afficher les connexions TCP entrantes sur un port
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
urequire ipcalc
|
urequire DEFAULTS ipcalc
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: s'assurer que l'hôte courant a l'adresse IP spécifiée
|
uecho "$scriptname: s'assurer que l'hôte courant a l'adresse IP spécifiée
|
||||||
|
3
fconv
3
fconv
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: convertir un fichier ou les fichiers d'un répertoire
|
uecho "$scriptname: convertir un fichier ou les fichiers d'un répertoire
|
||||||
|
3
fnconv
3
fnconv
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: renommer un fichier ou les fichiers d'un répertoire
|
uecho "$scriptname: renommer un fichier ou les fichiers d'un répertoire
|
||||||
|
3
fndate
3
fndate
@ -11,7 +11,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: manipuler des noms de fichier pour les dater
|
uecho "$scriptname: manipuler des noms de fichier pour les dater
|
||||||
|
11
foreach
11
foreach
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: lancer une commande pour un ensemble d'arguments
|
uecho "$scriptname: lancer une commande pour un ensemble d'arguments
|
||||||
@ -82,7 +83,7 @@ OPTIONS
|
|||||||
répertoire parent (valide uniquement avec l'option -p)
|
répertoire parent (valide uniquement avec l'option -p)
|
||||||
-S, --git-status
|
-S, --git-status
|
||||||
Equivalent à spécifier la commande 'git status --p'
|
Equivalent à spécifier la commande 'git status --p'
|
||||||
Utiliser par exemple avec -g, -G ou -C
|
Utiliser avec -G ou -C
|
||||||
-G, --git-projects
|
-G, --git-projects
|
||||||
Equivalent à '--ptitle -p */.git --' e.g '$scriptname -G git pull' pour
|
Equivalent à '--ptitle -p */.git --' e.g '$scriptname -G git pull' pour
|
||||||
mettre à jour les dépôts situés dans un répertoire
|
mettre à jour les dépôts situés dans un répertoire
|
||||||
@ -123,11 +124,7 @@ parse_args "$@"; set -- "${args[@]}"
|
|||||||
|
|
||||||
case "$command" in
|
case "$command" in
|
||||||
git-status-p)
|
git-status-p)
|
||||||
if [ -n "$shortcut" ]; then
|
set -- git status --p "$@"
|
||||||
set -- git status --p "$@"
|
|
||||||
else
|
|
||||||
set -- "$@" -- git status --p
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
case "$shortcut" in
|
case "$shortcut" in
|
||||||
|
3
geturl
3
geturl
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||||
|
urequire DEFAULTS
|
||||||
|
|
||||||
function display_help() {
|
function display_help() {
|
||||||
uecho "$scriptname: Télécharger un fichier avec wget ou curl
|
uecho "$scriptname: Télécharger un fichier avec wget ou curl
|
||||||
|
4
ipaddr
4
ipaddr
@ -7,9 +7,7 @@ elif [ -x /bin/ip ]; then IP=/bin/ip
|
|||||||
else IP=ip
|
else IP=ip
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "IPADDR_COLOR" ]; then isatty=1
|
tty -s <&1 && isatty=1 || isatty=
|
||||||
else tty -s <&1 && isatty=1 || isatty=
|
|
||||||
fi
|
|
||||||
|
|
||||||
"$IP" addr "$@" | awk -v isatty="$isatty" '
|
"$IP" addr "$@" | awk -v isatty="$isatty" '
|
||||||
isatty && $0 ~ /^[0-9]/ {
|
isatty && $0 ~ /^[0-9]/ {
|
||||||
|
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")
|
|
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"
|
|
@ -20,5 +20,10 @@
|
|||||||
#MAVEN_DEVEL_SRCDIR="$HOME/wop/sn"
|
#MAVEN_DEVEL_SRCDIR="$HOME/wop/sn"
|
||||||
|
|
||||||
# Image à utiliser pour les builds
|
# Image à utiliser pour les builds
|
||||||
#DEFAULT_COMPOSER_IMAGE=pubdocker.univ-reunion.fr/image/php:d11
|
#DEFAULT_COMPOSER_IMAGE=docker.univ-reunion.fr/image/phpbuilder:d10
|
||||||
#DEFAULT_MAVEN_IMAGE=pubdocker.univ-reunion.fr/image/javabuilder:d11
|
#DEFAULT_MAVEN_IMAGE=docker.univ-reunion.fr/image/javabuilder:d10
|
||||||
|
|
||||||
|
# Mappings d'hôtes à activer pour les builds à base d'image
|
||||||
|
#DEFAULT_HOST_MAPPINGS=()
|
||||||
|
#prod_HOST_MAPPINGS=(docker.univ-reunion.fr:10.82.70.154 repos.univ-reunion.fr:10.82.70.246 git.univ-reunion.fr:10.82.70.247)
|
||||||
|
#test_HOST_MAPPINGS=("${prod_HOST_MAPPINGS}")
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
# Profil par défaut
|
|
||||||
#DKBUILD_PROFILE=prod
|
|
@ -1,31 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
default_profile "${DKBUILD_PROFILE:-prod}"
|
|
||||||
|
|
||||||
# Source des paquets et proxy
|
|
||||||
#setenv APT_PROXY=http://aptcache.devel.self:3142
|
|
||||||
#setenv APT_MIRROR=default
|
|
||||||
#setenv SEC_MIRROR=default
|
|
||||||
|
|
||||||
# Timezone du serveur
|
|
||||||
#setenv TIMEZONE=Indian/Reunion
|
|
||||||
|
|
||||||
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/rununiv
|
|
||||||
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 dist; then
|
|
||||||
setenv REGISTRY=pubdocker.univ-reunion.fr/dist
|
|
||||||
setenv PRIVAREG=pridocker.univ-reunion.fr
|
|
||||||
elif profile devel; then
|
|
||||||
setenv REGISTRY=docker.devel.self/rununiv
|
|
||||||
setenv PRIVAREG=docker.devel.self
|
|
||||||
fi
|
|
@ -1 +0,0 @@
|
|||||||
php
|
|
3
lib/dkbuild/templates/image/.gitattributes
vendored
3
lib/dkbuild/templates/image/.gitattributes
vendored
@ -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
|
|
2
lib/dkbuild/templates/image/.gitignore
vendored
2
lib/dkbuild/templates/image/.gitignore
vendored
@ -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/
|
|
3
lib/dkbuild/templates/image/d11/.gitignore
vendored
3
lib/dkbuild/templates/image/d11/.gitignore
vendored
@ -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
|
|
3
lib/dkbuild/templates/php/.gitignore
vendored
3
lib/dkbuild/templates/php/.gitignore
vendored
@ -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
|
|
6
lib/dkbuild/templates/php_db/.gitignore
vendored
6
lib/dkbuild/templates/php_db/.gitignore
vendored
@ -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"
|
|
||||||
)
|
|
5
lib/dkbuild/tests/.gitignore
vendored
5
lib/dkbuild/tests/.gitignore
vendored
@ -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,8 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
if runb; then
|
|
||||||
qvals dkbuild -c "${DKBUILD_CONFIGS[0]}" "${DKBUILD_CMD_ARGS[@]}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# pas de build automatique
|
|
||||||
AUTOBUILD=
|
|
@ -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=
|
|
@ -1,16 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
if machine fast5; then
|
|
||||||
setprofiles prod
|
|
||||||
elif machine fast4; then
|
|
||||||
setprofiles test
|
|
||||||
else
|
|
||||||
setprofiles devel test prod
|
|
||||||
fi
|
|
||||||
|
|
||||||
if run; then
|
|
||||||
echo "PROFILE=$PROFILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# pas de build automatique
|
|
||||||
AUTOBUILD=
|
|
@ -1,16 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
section "première section"
|
|
||||||
note "une note"
|
|
||||||
info "une première info"
|
|
||||||
info "une deuxième info"
|
|
||||||
debug "message de debug"
|
|
||||||
|
|
||||||
section "deuxième section"
|
|
||||||
note "une note"
|
|
||||||
info "une première info"
|
|
||||||
info "une deuxième info"
|
|
||||||
debug "message de debug"
|
|
||||||
|
|
||||||
# pas de build automatique
|
|
||||||
AUTOBUILD=
|
|
@ -1,8 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
setenv IMAGE=dkbuild-tests/tags0
|
|
||||||
|
|
||||||
dockerfile
|
|
||||||
# -*- coding: utf-8 mode: dockerfile -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
FROM scratch
|
|
||||||
ENV var=empty
|
|
||||||
build
|
|
@ -1,9 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
setprofiles v1-prod v2-prod
|
|
||||||
setenv IMAGE=dkbuild-tests/tags1
|
|
||||||
|
|
||||||
dockerfile
|
|
||||||
# -*- coding: utf-8 mode: dockerfile -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
FROM scratch
|
|
||||||
ENV var=empty
|
|
||||||
build
|
|
@ -1,16 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
section "variables d'environnement"
|
|
||||||
setenv A="env A"
|
|
||||||
resetenv B="env B"
|
|
||||||
|
|
||||||
info "A=$A, B=$B"
|
|
||||||
if [ "$A" != x ]; then
|
|
||||||
note "\
|
|
||||||
Essayer de relancer avec
|
|
||||||
$(qvals "$0" -j "$(relpath "$DKBUILD")" -e A=x -e B=y)
|
|
||||||
on ne devrait pas pouvoir modifier la valeur de B"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# pas de build automatique
|
|
||||||
AUTOBUILD=
|
|
@ -1,15 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
setenv dne=1
|
|
||||||
setenv de=
|
|
||||||
|
|
||||||
info "dne=$dne de=$de"
|
|
||||||
if [ -n "$dne" -o -z "$de" ]; then
|
|
||||||
note "\
|
|
||||||
Relancer avec
|
|
||||||
$(qvals "$0" -j "$(relpath "$DKBUILD")" -e dne= -e de=1)
|
|
||||||
pour vérifier qu'on peut changer la valeur avec les options en ligne de commande"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# pas de build automatique
|
|
||||||
AUTOBUILD=
|
|
@ -1,106 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
[ca]
|
|
||||||
default_ca = dmca
|
|
||||||
|
|
||||||
[dmca]
|
|
||||||
dir = @@cadir@@
|
|
||||||
certs = $dir/certs
|
|
||||||
crl_dir = $dir/crl
|
|
||||||
database = $dir/index.txt
|
|
||||||
unique_subject = no
|
|
||||||
new_certs_dir = $dir/newcerts
|
|
||||||
|
|
||||||
certificate = $dir/dmca.crt
|
|
||||||
serial = $dir/serial
|
|
||||||
crl = $dir/dmca.crl
|
|
||||||
private_key = $dir/dmca.key
|
|
||||||
RANDFILE = $dir/private/.rand
|
|
||||||
|
|
||||||
x509_extensions = usr_cert
|
|
||||||
|
|
||||||
name_opt = ca_default
|
|
||||||
cert_opt = ca_default
|
|
||||||
|
|
||||||
default_days = 10950
|
|
||||||
default_crl_days = 30
|
|
||||||
default_md = sha256
|
|
||||||
preserve = no
|
|
||||||
|
|
||||||
policy = policy_match
|
|
||||||
|
|
||||||
[policy_match]
|
|
||||||
countryName = match
|
|
||||||
stateOrProvinceName = match
|
|
||||||
organizationName = match
|
|
||||||
organizationalUnitName = optional
|
|
||||||
commonName = supplied
|
|
||||||
emailAddress = optional
|
|
||||||
|
|
||||||
[req]
|
|
||||||
default_bits = 2048
|
|
||||||
default_md = sha256
|
|
||||||
default_keyfile = privkey.pem
|
|
||||||
distinguished_name = req_distinguished_name
|
|
||||||
attributes = req_attributes
|
|
||||||
x509_extensions = v3_ca
|
|
||||||
string_mask = utf8only
|
|
||||||
|
|
||||||
[req_distinguished_name]
|
|
||||||
countryName = Country Name (2 letter code)
|
|
||||||
countryName_default = FR
|
|
||||||
countryName_min = 2
|
|
||||||
countryName_max = 2
|
|
||||||
|
|
||||||
stateOrProvinceName = State or Province Name (full name)
|
|
||||||
stateOrProvinceName_default = La Reunion
|
|
||||||
|
|
||||||
localityName = Locality Name (eg, city)
|
|
||||||
localityName_default = Sainte-Clotilde
|
|
||||||
|
|
||||||
0.organizationName = Organization Name (eg, company)
|
|
||||||
0.organizationName_default = jclain
|
|
||||||
|
|
||||||
organizationalUnitName = Organizational Unit Name (eg, section)
|
|
||||||
organizationalUnitName_default =
|
|
||||||
|
|
||||||
commonName = Common Name (eg, your name or your server\'s hostname)
|
|
||||||
commonName_default = dmca
|
|
||||||
commonName_max = 64
|
|
||||||
|
|
||||||
emailAddress = Email Address
|
|
||||||
emailAddress_default = jephte.clain@univ-reunion.fr
|
|
||||||
emailAddress_max = 64
|
|
||||||
|
|
||||||
[req_attributes]
|
|
||||||
challengePassword = A challenge password
|
|
||||||
challengePassword_min = 4
|
|
||||||
challengePassword_max = 20
|
|
||||||
|
|
||||||
unstructuredName = dmca
|
|
||||||
|
|
||||||
[usr_cert]
|
|
||||||
|
|
||||||
basicConstraints=CA:FALSE
|
|
||||||
|
|
||||||
nsComment = "dmca certificate"
|
|
||||||
|
|
||||||
subjectKeyIdentifier=hash
|
|
||||||
authorityKeyIdentifier=keyid,issuer:always
|
|
||||||
|
|
||||||
[v3_req]
|
|
||||||
|
|
||||||
basicConstraints = CA:FALSE
|
|
||||||
keyUsage = nonRepudiation,digitalSignature,keyEncipherment
|
|
||||||
|
|
||||||
[v3_ca]
|
|
||||||
|
|
||||||
#subjectKeyIdentifier=hash
|
|
||||||
#authorityKeyIdentifier=keyid:always,issuer
|
|
||||||
basicConstraints = critical,CA:true
|
|
||||||
keyUsage = critical,keyCertSign,digitalSignature,keyEncipherment,keyAgreement
|
|
||||||
|
|
||||||
[crl_ext]
|
|
||||||
|
|
||||||
#issuerAltName=issuer:copy
|
|
||||||
authorityKeyIdentifier=keyid:always
|
|
@ -1,99 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
[ca]
|
|
||||||
default_ca = dmca
|
|
||||||
|
|
||||||
[dmca]
|
|
||||||
dir = @@cadir@@
|
|
||||||
certs = $dir/certs
|
|
||||||
crl_dir = $dir/crl
|
|
||||||
database = $dir/index.txt
|
|
||||||
unique_subject = no
|
|
||||||
new_certs_dir = $dir/newcerts
|
|
||||||
|
|
||||||
certificate = $dir/dmca.crt
|
|
||||||
serial = $dir/serial
|
|
||||||
crl = $dir/dmca.crl
|
|
||||||
private_key = $dir/dmca.key
|
|
||||||
RANDFILE = $dir/private/.rand
|
|
||||||
|
|
||||||
x509_extensions = usr_ext
|
|
||||||
|
|
||||||
name_opt = ca_default
|
|
||||||
cert_opt = ca_default
|
|
||||||
|
|
||||||
copy_extensions = copy
|
|
||||||
|
|
||||||
default_days = 10950
|
|
||||||
default_crl_days = 30
|
|
||||||
default_md = sha256
|
|
||||||
preserve = no
|
|
||||||
|
|
||||||
policy = policy_match
|
|
||||||
|
|
||||||
[policy_match]
|
|
||||||
#countryName = match
|
|
||||||
#stateOrProvinceName = match
|
|
||||||
#organizationName = match
|
|
||||||
countryName = supplied
|
|
||||||
stateOrProvinceName = supplied
|
|
||||||
organizationName = supplied
|
|
||||||
organizationalUnitName = optional
|
|
||||||
commonName = supplied
|
|
||||||
emailAddress = optional
|
|
||||||
|
|
||||||
[req]
|
|
||||||
default_bits = 2048
|
|
||||||
default_md = sha256
|
|
||||||
default_keyfile = privkey.pem
|
|
||||||
distinguished_name = req_distinguished_name
|
|
||||||
attributes = req_attributes
|
|
||||||
x509_extensions = usr_ext
|
|
||||||
string_mask = utf8only
|
|
||||||
|
|
||||||
#input_password = secret
|
|
||||||
#output_password = secret
|
|
||||||
|
|
||||||
[req_distinguished_name]
|
|
||||||
countryName = Country Name (2 letter code)
|
|
||||||
countryName_default = FR
|
|
||||||
countryName_min = 2
|
|
||||||
countryName_max = 2
|
|
||||||
|
|
||||||
stateOrProvinceName = State or Province Name (full name)
|
|
||||||
stateOrProvinceName_default = La Reunion
|
|
||||||
|
|
||||||
localityName = Locality Name (eg, city)
|
|
||||||
localityName_default = Sainte-Clotilde
|
|
||||||
|
|
||||||
0.organizationName = Organization Name (eg, company)
|
|
||||||
0.organizationName_default = jclain
|
|
||||||
|
|
||||||
organizationalUnitName = Organizational Unit Name (eg, section)
|
|
||||||
organizationalUnitName_default =
|
|
||||||
|
|
||||||
commonName = Common Name (eg, your name or your server\'s hostname)
|
|
||||||
commonName_max = 64
|
|
||||||
|
|
||||||
emailAddress = Email Address
|
|
||||||
emailAddress_max = 64
|
|
||||||
|
|
||||||
[req_attributes]
|
|
||||||
challengePassword = A challenge password
|
|
||||||
challengePassword_min = 4
|
|
||||||
challengePassword_max = 20
|
|
||||||
|
|
||||||
unstructuredName = jclain
|
|
||||||
|
|
||||||
[usr_ext]
|
|
||||||
|
|
||||||
basicConstraints=critical,CA:FALSE
|
|
||||||
#subjectKeyIdentifier=hash
|
|
||||||
#authorityKeyIdentifier=keyid,issuer:always
|
|
||||||
keyUsage = critical,digitalSignature
|
|
||||||
extendedKeyUsage = clientAuth
|
|
||||||
|
|
||||||
[crl_ext]
|
|
||||||
|
|
||||||
#issuerAltName=issuer:copy
|
|
||||||
authorityKeyIdentifier=keyid:always
|
|
@ -1,101 +0,0 @@
|
|||||||
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
||||||
|
|
||||||
[ca]
|
|
||||||
default_ca = dmca
|
|
||||||
|
|
||||||
[dmca]
|
|
||||||
dir = @@cadir@@
|
|
||||||
certs = $dir/certs
|
|
||||||
crl_dir = $dir/crl
|
|
||||||
database = $dir/index.txt
|
|
||||||
unique_subject = no
|
|
||||||
new_certs_dir = $dir/newcerts
|
|
||||||
|
|
||||||
certificate = $dir/dmca.crt
|
|
||||||
serial = $dir/serial
|
|
||||||
crl = $dir/dmca.crl
|
|
||||||
private_key = $dir/dmca.key
|
|
||||||
RANDFILE = $dir/private/.rand
|
|
||||||
|
|
||||||
x509_extensions = usr_ext
|
|
||||||
|
|
||||||
name_opt = ca_default
|
|
||||||
cert_opt = ca_default
|
|
||||||
|
|
||||||
copy_extensions = copy
|
|
||||||
|
|
||||||
default_days = 3650
|
|
||||||
default_crl_days = 30
|
|
||||||
default_md = sha256
|
|
||||||
preserve = no
|
|
||||||
|
|
||||||
policy = policy_match
|
|
||||||
|
|
||||||
[policy_match]
|
|
||||||
#countryName = match
|
|
||||||
#stateOrProvinceName = match
|
|
||||||
#organizationName = match
|
|
||||||
countryName = supplied
|
|
||||||
stateOrProvinceName = supplied
|
|
||||||
organizationName = supplied
|
|
||||||
organizationalUnitName = optional
|
|
||||||
commonName = supplied
|
|
||||||
emailAddress = optional
|
|
||||||
|
|
||||||
[req]
|
|
||||||
default_bits = 2048
|
|
||||||
default_md = sha256
|
|
||||||
default_keyfile = privkey.pem
|
|
||||||
distinguished_name = req_distinguished_name
|
|
||||||
attributes = req_attributes
|
|
||||||
x509_extensions = usr_ext
|
|
||||||
string_mask = utf8only
|
|
||||||
|
|
||||||
#input_password = secret
|
|
||||||
#output_password = secret
|
|
||||||
|
|
||||||
[req_distinguished_name]
|
|
||||||
countryName = Country Name (2 letter code)
|
|
||||||
countryName_default = FR
|
|
||||||
countryName_min = 2
|
|
||||||
countryName_max = 2
|
|
||||||
|
|
||||||
stateOrProvinceName = State or Province Name (full name)
|
|
||||||
stateOrProvinceName_default = La Reunion
|
|
||||||
|
|
||||||
localityName = Locality Name (eg, city)
|
|
||||||
localityName_default = Sainte-Clotilde
|
|
||||||
|
|
||||||
0.organizationName = Organization Name (eg, company)
|
|
||||||
0.organizationName_default = jclain
|
|
||||||
|
|
||||||
organizationalUnitName = Organizational Unit Name (eg, section)
|
|
||||||
organizationalUnitName_default =
|
|
||||||
|
|
||||||
commonName = Common Name (eg, your name or your server\'s hostname)
|
|
||||||
commonName_max = 64
|
|
||||||
|
|
||||||
emailAddress = Email Address
|
|
||||||
emailAddress_max = 64
|
|
||||||
|
|
||||||
[req_attributes]
|
|
||||||
challengePassword = A challenge password
|
|
||||||
challengePassword_min = 4
|
|
||||||
challengePassword_max = 20
|
|
||||||
|
|
||||||
unstructuredName = jclain
|
|
||||||
|
|
||||||
[usr_ext]
|
|
||||||
|
|
||||||
basicConstraints = critical,CA:FALSE
|
|
||||||
#subjectKeyIdentifier=hash
|
|
||||||
#authorityKeyIdentifier=keyid,issuer:always
|
|
||||||
keyUsage = critical,digitalSignature,keyEncipherment,keyAgreement
|
|
||||||
extendedKeyUsage = serverAuth
|
|
||||||
|
|
||||||
subjectAltName = DNS:localhost
|
|
||||||
|
|
||||||
[crl_ext]
|
|
||||||
|
|
||||||
#issuerAltName=issuer:copy
|
|
||||||
authorityKeyIdentifier=keyid:always
|
|
0
lib/nulib/.gitignore
vendored
Normal file
0
lib/nulib/.gitignore
vendored
Normal file
17
lib/nulib/.project
Normal file
17
lib/nulib/.project
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>nulib</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.python.pydev.PyDevBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.python.pydev.pythonNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
8
lib/nulib/.pydevproject
Normal file
8
lib/nulib/.pydevproject
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<?eclipse-pydev version="1.0"?><pydev_project>
|
||||||
|
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
|
||||||
|
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
|
||||||
|
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
|
||||||
|
<path>/${PROJECT_DIR_NAME}/python</path>
|
||||||
|
</pydev_pathproperty>
|
||||||
|
</pydev_project>
|
5
lib/nulib/.settings/org.eclipse.core.resources.prefs
Normal file
5
lib/nulib/.settings/org.eclipse.core.resources.prefs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding//python/nulib/web/bootstrap.py=utf-8
|
||||||
|
encoding//python/nulib/web/model.py=utf-8
|
||||||
|
encoding//python/nulib/web/ui.py=utf-8
|
||||||
|
encoding/<project>=UTF-8
|
2
lib/nulib/.settings/org.eclipse.core.runtime.prefs
Normal file
2
lib/nulib/.settings/org.eclipse.core.runtime.prefs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
line.separator=\n
|
4
lib/nulib/MANIFEST.in
Normal file
4
lib/nulib/MANIFEST.in
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
global-include *
|
||||||
|
global-exclude *.pyc
|
||||||
|
exclude MANIFEST
|
||||||
|
prune dist
|
180
lib/nulib/TODO.md
Normal file
180
lib/nulib/TODO.md
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
# TODO
|
||||||
|
|
||||||
|
## Améliorer rtoinst
|
||||||
|
|
||||||
|
ajouter le support de pffprofile pour deploydb
|
||||||
|
|
||||||
|
## Refaire/repenser les fonctions evalX
|
||||||
|
|
||||||
|
dans chaque exemple, on affiche l'invocation de evalX suivi de l'équivalent en
|
||||||
|
syntaxe standard
|
||||||
|
|
||||||
|
- evala permet de traiter des tableaux
|
||||||
|
~~~
|
||||||
|
evala with array // add a b c
|
||||||
|
array=("${array[@]}" a b c)
|
||||||
|
~~~
|
||||||
|
les fonctions à utiliser pour le traitement sont configurées avec des
|
||||||
|
variables spéciales. par exemple, on peut indiquer que la commande add
|
||||||
|
ci-dessus est en réalité gérée par la fonction array_add et que c'est une
|
||||||
|
commande de type modify qui prend en premier argument le nom du tableau:
|
||||||
|
~~~
|
||||||
|
__evala_add_func=array_add
|
||||||
|
__evala_add_type=m
|
||||||
|
__evala_add_arg=first
|
||||||
|
~~~
|
||||||
|
en fonction du type de fonction, les arguments supplémentaires supportés sont
|
||||||
|
différents. par défaut, la fonction à utiliser est du même nom que la
|
||||||
|
commande, est du type scalar, et prend comme argument @
|
||||||
|
Ainsi les deux commandes suivantes sont équivalentes:
|
||||||
|
~~~
|
||||||
|
evala with array // echo
|
||||||
|
echo "${array[@]}"
|
||||||
|
~~~
|
||||||
|
et assument les définitions suivantes:
|
||||||
|
~~~
|
||||||
|
__evala_echo_func=echo
|
||||||
|
__evala_echo_type=s
|
||||||
|
__evala_echo_arg=@
|
||||||
|
~~~
|
||||||
|
|
||||||
|
- evalx permet d'utiliser toutes ces fonctions ensemble
|
||||||
|
~~~
|
||||||
|
evalx seq 5 //p grep -v 3 //a prepend prefix // append suffix //c echo
|
||||||
|
array=($(seq 5 | grep -v 3)); array=(prefix "${array[@]}"); array=("${array[@]}" suffix); echo "${array[@]}"
|
||||||
|
|
||||||
|
# à partir du mode evala, on peut exécuter directement les arguments du
|
||||||
|
# tableau comme une commande en terminant par //c
|
||||||
|
evalx -a with array // prepend echo //c
|
||||||
|
array=(echo "${array[@]}"); "${array[@]}"
|
||||||
|
~~~
|
||||||
|
evalx commence par défaut en mode evalc. il est possible avec les options -i,
|
||||||
|
-s, -a, -c, -p, -m de forcer respectivement evali, evals, evala, evalc, evalp,
|
||||||
|
evalm
|
||||||
|
|
||||||
|
- Il faudra réfléchir à comment sortir du mode evalm pour utilisation avec
|
||||||
|
evalx. ou alors on part du principe que evalm est toujours en fin de chaine.
|
||||||
|
|
||||||
|
## Faire la fonction cmdx
|
||||||
|
|
||||||
|
cmdx permet de lancer une commande avec les arguments qui sont générés par
|
||||||
|
evalx. cmdx commence par défaut en mode evalm. Par exemple, les deux commandes
|
||||||
|
suivantes sont équivalentes:
|
||||||
|
~~~
|
||||||
|
cmdx etitle //"Copie de " basename "$src" //" vers " ppath "$dest"
|
||||||
|
etitle "Copie de $(basename "$src") vers $(ppath "$dest")"
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Comme pour evalx, les options -i, -s, -a, -c, -p, -m permettent de forcer
|
||||||
|
respectivement les modes evali, evals, evala, evalc, evalp, evalm. Par exemple
|
||||||
|
les deux commandes suivantes sont équivalentes:
|
||||||
|
~~~
|
||||||
|
cmdx -c echo a // b
|
||||||
|
echo "$(b "$(a)")"
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Faire la fonction checkx
|
||||||
|
|
||||||
|
checkx permet de tester le résultat d'une commande evalx. elle s'utilise de
|
||||||
|
cette manière:
|
||||||
|
~~~
|
||||||
|
checkx cmds... OP VALUE
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Les opérateurs sont de la forme:
|
||||||
|
~~~
|
||||||
|
is -n|notempty
|
||||||
|
is -z|empty
|
||||||
|
is ok
|
||||||
|
is ko
|
||||||
|
== value
|
||||||
|
!= value
|
||||||
|
etc.
|
||||||
|
~~~
|
||||||
|
|
||||||
|
checkx remplace testx avec une syntaxe plus naturelle. si aucun script
|
||||||
|
n'utilise les fonctions testx, peut-être peut-on simplement supprimer les
|
||||||
|
fonctions testx et renommer checkx en testx
|
||||||
|
|
||||||
|
Comme pour evalx, les options -i, -s, -a, -c, -p, -m permettent de forcer
|
||||||
|
respectivement les modes evali, evals, evala, evalc, evalp, evalm. Par exemple
|
||||||
|
les deux commandes suivantes sont équivalentes:
|
||||||
|
~~~
|
||||||
|
checkx -p a // b == c
|
||||||
|
[ "$(evalp a // b)" == c ]
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Les commande suivantes sont équivalentes deux à deux:
|
||||||
|
~~~
|
||||||
|
checkx cmd is -z
|
||||||
|
[ -z "$(evalx cmd)" ]
|
||||||
|
|
||||||
|
checkx cmd is ok
|
||||||
|
evalx cmd; [ $? -eq 0 ]
|
||||||
|
|
||||||
|
checkx cmd is ko
|
||||||
|
evalx cmd; [ $? -ne 0 ]
|
||||||
|
|
||||||
|
checkx cmd == value
|
||||||
|
[ "$(evalx cmd)" == value ]
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Faire la fonction storex
|
||||||
|
|
||||||
|
storex permet de mettre le résultat d'une fonction evalx dans une variable ou de
|
||||||
|
l'ajouter à un tableau. l'idée est d'avoir la même syntaxe que checkx. je ne
|
||||||
|
suis pas encore tout à fait sûr que ce soit une bonne chose.
|
||||||
|
|
||||||
|
Les commande suivantes sont équivalentes deux à deux:
|
||||||
|
~~~
|
||||||
|
storex cmd to var
|
||||||
|
var="$(evalx cmd)"
|
||||||
|
|
||||||
|
storex cmd to var
|
||||||
|
setx var=cmd
|
||||||
|
|
||||||
|
storex -a cmd to array
|
||||||
|
array_add array "$(evalx cmd)"
|
||||||
|
|
||||||
|
storex -r cmd from array
|
||||||
|
array_del array "$(evalx cmd)"
|
||||||
|
~~~
|
||||||
|
|
||||||
|
syntaxes alternatives
|
||||||
|
~~~
|
||||||
|
storex cmd to var
|
||||||
|
addx cmd to array
|
||||||
|
removex cmd from array
|
||||||
|
~~~
|
||||||
|
|
||||||
|
alternatives
|
||||||
|
~~~
|
||||||
|
setx var=cmd
|
||||||
|
evalx cmd // array_add array
|
||||||
|
evalx cmd // array_del array
|
||||||
|
~~~
|
||||||
|
|
||||||
|
note: il ne semble pas nécessaire au vu de l'alternative d'implémenter storex,
|
||||||
|
addx, removex.
|
||||||
|
|
||||||
|
par contre, il faut corriger un bug d'evalc: la dernière commande doit être
|
||||||
|
exécutée telle quelle. en effet,
|
||||||
|
~~~
|
||||||
|
evalc a // b
|
||||||
|
~~~
|
||||||
|
devrait être équivalent à
|
||||||
|
~~~
|
||||||
|
b "$(a)"
|
||||||
|
~~~
|
||||||
|
mais en fait c'est plutôt
|
||||||
|
~~~
|
||||||
|
echo "$(b "$(a)")"
|
||||||
|
~~~
|
||||||
|
et ça pose problème, notamment si b initialise des variables, etc.
|
||||||
|
|
||||||
|
## Fonctions diverses
|
||||||
|
|
||||||
|
`retcode cmd`
|
||||||
|
: affiche le code de retour de cmd. équivalent à `cmd; echo $?`
|
||||||
|
|
||||||
|
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
4
lib/nulib/awk/base
Normal file
4
lib/nulib/awk/base
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
@include "base.core"
|
||||||
|
@include "base.array"
|
||||||
|
@include "base.date"
|
157
lib/nulib/awk/base.array
Normal file
157
lib/nulib/awk/base.array
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function mkindices(values, indices, i, j) {
|
||||||
|
array_new(indices)
|
||||||
|
j = 1
|
||||||
|
for (i in values) {
|
||||||
|
indices[j++] = int(i)
|
||||||
|
}
|
||||||
|
return asort(indices)
|
||||||
|
}
|
||||||
|
function array_new(dest) {
|
||||||
|
dest[0] = 0 # forcer awk à considérer dest comme un tableau
|
||||||
|
delete dest
|
||||||
|
}
|
||||||
|
function array_newsize(dest, size, i) {
|
||||||
|
dest[0] = 0 # forcer awk à considérer dest comme un tableau
|
||||||
|
delete dest
|
||||||
|
size = int(size)
|
||||||
|
for (i = 1; i <= size; i++) {
|
||||||
|
dest[i] = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function array_len(values, count, i) {
|
||||||
|
# length(array) a un bug sur awk 3.1.5
|
||||||
|
# cette version est plus lente mais fonctionne toujours
|
||||||
|
count = 0
|
||||||
|
for (i in values) {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
function array_copy(dest, src, count, indices, i) {
|
||||||
|
array_new(dest)
|
||||||
|
count = mkindices(src, indices)
|
||||||
|
for (i = 1; i <= count; i++) {
|
||||||
|
dest[indices[i]] = src[indices[i]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function array_getlastindex(src, count, indices) {
|
||||||
|
count = mkindices(src, indices)
|
||||||
|
if (count == 0) return 0
|
||||||
|
return indices[count]
|
||||||
|
}
|
||||||
|
function array_add(dest, value, lastindex) {
|
||||||
|
lastindex = array_getlastindex(dest)
|
||||||
|
dest[lastindex + 1] = value
|
||||||
|
}
|
||||||
|
function array_deli(dest, i, l) {
|
||||||
|
i = int(i)
|
||||||
|
if (i == 0) return
|
||||||
|
l = array_len(dest)
|
||||||
|
while (i < l) {
|
||||||
|
dest[i] = dest[i + 1]
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
delete dest[l]
|
||||||
|
}
|
||||||
|
function array_del(dest, value, ignoreCase, i) {
|
||||||
|
do {
|
||||||
|
i = key_index(value, dest, ignoreCase)
|
||||||
|
if (i != 0) array_deli(dest, i)
|
||||||
|
} while (i != 0)
|
||||||
|
}
|
||||||
|
function array_extend(dest, src, count, lastindex, indices, i) {
|
||||||
|
lastindex = array_getlastindex(dest)
|
||||||
|
count = mkindices(src, indices)
|
||||||
|
for (i = 1; i <= count; i++) {
|
||||||
|
dest[lastindex + i] = src[indices[i]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function array_fill(dest, i) {
|
||||||
|
array_new(dest)
|
||||||
|
for (i = 1; i <= NF; i++) {
|
||||||
|
dest[i] = $i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function array_getline(src, count, indices, i, j) {
|
||||||
|
$0 = ""
|
||||||
|
count = mkindices(src, indices)
|
||||||
|
for (i = 1; i <= count; i++) {
|
||||||
|
j = indices[i]
|
||||||
|
$j = src[j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function array_appendline(src, count, indices, i, nf, j) {
|
||||||
|
count = mkindices(src, indices)
|
||||||
|
nf = NF
|
||||||
|
for (i = 1; i <= count; i++) {
|
||||||
|
j = nf + indices[i]
|
||||||
|
$j = src[indices[i]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function in_array(value, values, ignoreCase, i) {
|
||||||
|
if (ignoreCase) {
|
||||||
|
value = tolower(value)
|
||||||
|
for (i in values) {
|
||||||
|
if (tolower(values[i]) == value) return 1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i in values) {
|
||||||
|
if (values[i] == value) return 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
function key_index(value, values, ignoreCase, i) {
|
||||||
|
if (ignoreCase) {
|
||||||
|
value = tolower(value)
|
||||||
|
for (i in values) {
|
||||||
|
if (tolower(values[i]) == value) return int(i)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i in values) {
|
||||||
|
if (values[i] == value) return int(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
function array2s(values, prefix, sep, suffix, noindices, first, i, s) {
|
||||||
|
if (!prefix) prefix = "["
|
||||||
|
if (!sep) sep = ", "
|
||||||
|
if (!suffix) suffix = "]"
|
||||||
|
s = prefix
|
||||||
|
first = 1
|
||||||
|
for (i in values) {
|
||||||
|
if (first) first = 0
|
||||||
|
else s = s sep
|
||||||
|
if (!noindices) s = s "[" i "]="
|
||||||
|
s = s values[i]
|
||||||
|
}
|
||||||
|
s = s suffix
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function array2so(values, prefix, sep, suffix, noindices, count, indices, i, s) {
|
||||||
|
if (!prefix) prefix = "["
|
||||||
|
if (!sep) sep = ", "
|
||||||
|
if (!suffix) suffix = "]"
|
||||||
|
s = prefix
|
||||||
|
count = mkindices(values, indices)
|
||||||
|
for (i = 1; i <= count; i++) {
|
||||||
|
if (i > 1) s = s sep
|
||||||
|
if (!noindices) s = s "[" indices[i] "]="
|
||||||
|
s = s values[indices[i]]
|
||||||
|
}
|
||||||
|
s = s suffix
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function array_join(values, sep, prefix, suffix, count, indices, i, s) {
|
||||||
|
s = prefix
|
||||||
|
count = mkindices(values, indices)
|
||||||
|
for (i = 1; i <= count; i++) {
|
||||||
|
if (i > 1) s = s sep
|
||||||
|
s = s values[indices[i]]
|
||||||
|
}
|
||||||
|
s = s suffix
|
||||||
|
return s
|
||||||
|
}
|
141
lib/nulib/awk/base.core
Normal file
141
lib/nulib/awk/base.core
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function num(s) {
|
||||||
|
if (s ~ /^[0-9]+$/) return int(s)
|
||||||
|
else return s
|
||||||
|
}
|
||||||
|
function ord(s, i) {
|
||||||
|
s = substr(s, 1, 1)
|
||||||
|
i = index(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", s)
|
||||||
|
if (i != 0) i += 32 - 1
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
function hex(i, s) {
|
||||||
|
s = sprintf("%x", i)
|
||||||
|
if (length(s) < 2) s = "0" s
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function qhtml(s) {
|
||||||
|
gsub(/&/, "\\&", s)
|
||||||
|
gsub(/"/, "\\"", s)
|
||||||
|
gsub(/>/, "\\>", s)
|
||||||
|
gsub(/</, "\\<", s)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function unquote_html(s) {
|
||||||
|
gsub(/</, "<", s)
|
||||||
|
gsub(/>/, ">", s)
|
||||||
|
gsub(/"/, "\"", s)
|
||||||
|
gsub(/&/, "\\&", s)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function qawk(s) {
|
||||||
|
gsub(/\\/, "\\\\", s)
|
||||||
|
gsub(/"/, "\\\"", s)
|
||||||
|
gsub(/\n/, "\\n", s)
|
||||||
|
return "\"" s "\""
|
||||||
|
}
|
||||||
|
function qval(s) {
|
||||||
|
gsub(/'/, "'\\''", s)
|
||||||
|
return "'" s "'"
|
||||||
|
}
|
||||||
|
function sqval(s) {
|
||||||
|
return " " qval(s)
|
||||||
|
}
|
||||||
|
function qvals( i, line) {
|
||||||
|
line = ""
|
||||||
|
for (i = 1; i <= NF; i++) {
|
||||||
|
if (i > 1) line = line " "
|
||||||
|
line = line qval($i)
|
||||||
|
}
|
||||||
|
return line
|
||||||
|
}
|
||||||
|
function sqvals() {
|
||||||
|
return " " qvals()
|
||||||
|
}
|
||||||
|
function qarr(values, prefix, i, count, line) {
|
||||||
|
line = prefix
|
||||||
|
count = array_len(values)
|
||||||
|
for (i = 1; i <= count; i++) {
|
||||||
|
if (i > 1 || line != "") line = line " "
|
||||||
|
line = line qval(values[i])
|
||||||
|
}
|
||||||
|
return line
|
||||||
|
}
|
||||||
|
function qregexp(s) {
|
||||||
|
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function qsubrepl(s) {
|
||||||
|
gsub(/\\/, "\\\\", s)
|
||||||
|
gsub(/&/, "\\\\&", s)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function qgrep(s) {
|
||||||
|
gsub(/[[\\.^$*]/, "\\\\&", s)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function qegrep(s) {
|
||||||
|
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function qsql(s, suffix) {
|
||||||
|
gsub(/'/, "''", s)
|
||||||
|
return "'" s "'" (suffix != ""? " " suffix: "")
|
||||||
|
}
|
||||||
|
function cqsql(s, suffix) {
|
||||||
|
return "," qsql(s, suffix)
|
||||||
|
}
|
||||||
|
function unquote_mysqlcsv(s) {
|
||||||
|
gsub(/\\n/, "\n", s)
|
||||||
|
gsub(/\\t/, "\t", s)
|
||||||
|
gsub(/\\0/, "\0", s)
|
||||||
|
gsub(/\\\\/, "\\", s)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
function sval(s) {
|
||||||
|
if (s == "") return s
|
||||||
|
else return " " s
|
||||||
|
}
|
||||||
|
function cval(s, suffix) {
|
||||||
|
suffix = suffix != ""? " " suffix: ""
|
||||||
|
if (s == "") return s
|
||||||
|
else return "," s suffix
|
||||||
|
}
|
||||||
|
|
||||||
|
function printto(s, output) {
|
||||||
|
if (output == "") {
|
||||||
|
print s
|
||||||
|
} else if (output ~ /^>>/) {
|
||||||
|
sub(/^>>/, "", output)
|
||||||
|
print s >>output
|
||||||
|
} else if (output ~ /^>/) {
|
||||||
|
sub(/^>/, "", output)
|
||||||
|
print s >output
|
||||||
|
} else if (output ~ /^\|&/) {
|
||||||
|
sub(/^\|&/, "", output)
|
||||||
|
print s |&output
|
||||||
|
} else if (output ~ /^\|/) {
|
||||||
|
sub(/^\|/, "", output)
|
||||||
|
print s |output
|
||||||
|
} else {
|
||||||
|
print s >output
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function find_line(input, field, value, orig, line) {
|
||||||
|
orig = $0
|
||||||
|
line = ""
|
||||||
|
while ((getline <input) > 0) {
|
||||||
|
if ($field == value) {
|
||||||
|
line = $0
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(input)
|
||||||
|
$0 = orig
|
||||||
|
return line
|
||||||
|
}
|
||||||
|
function merge_line(input, field, key, line) {
|
||||||
|
line = find_line(input, field, $key)
|
||||||
|
if (line != "") $0 = $0 FS line
|
||||||
|
}
|
52
lib/nulib/awk/base.date
Normal file
52
lib/nulib/awk/base.date
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function date__parse_fr(date, parts, y, m, d) {
|
||||||
|
if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9][0-9][0-9])/, parts)) {
|
||||||
|
y = int(parts[3])
|
||||||
|
m = int(parts[2])
|
||||||
|
d = int(parts[1])
|
||||||
|
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d))
|
||||||
|
} else if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9])/, parts)) {
|
||||||
|
basey = int(strftime("%Y")); basey = basey - basey % 100
|
||||||
|
y = basey + int(parts[3])
|
||||||
|
m = int(parts[2])
|
||||||
|
d = int(parts[1])
|
||||||
|
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d))
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
function date__parse_mysql(date, parts, y, m, d) {
|
||||||
|
if (match(date, /([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])/, parts)) {
|
||||||
|
y = int(parts[1])
|
||||||
|
m = int(parts[2])
|
||||||
|
d = int(parts[3])
|
||||||
|
return mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d))
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
function date__parse_any(date, serial) {
|
||||||
|
serial = date__parse_fr(date)
|
||||||
|
if (serial == -1) serial = date__parse_mysql(date)
|
||||||
|
return serial
|
||||||
|
}
|
||||||
|
function date_serial(date) {
|
||||||
|
return date__parse_any(date)
|
||||||
|
}
|
||||||
|
function date_parse(date, serial) {
|
||||||
|
serial = date__parse_any(date)
|
||||||
|
if (serial == -1) return date
|
||||||
|
return strftime("%d/%m/%Y", serial)
|
||||||
|
}
|
||||||
|
function date_monday(date, serial, dow) {
|
||||||
|
serial = date__parse_any(date)
|
||||||
|
if (serial == -1) return date
|
||||||
|
dow = strftime("%u", serial)
|
||||||
|
serial -= (dow - 1) * 86400
|
||||||
|
return strftime("%d/%m/%Y", serial)
|
||||||
|
}
|
||||||
|
function date_add(date, nbdays, serial) {
|
||||||
|
serial = date__parse_any(date)
|
||||||
|
if (serial == -1) return date
|
||||||
|
serial += nbdays * 86400
|
||||||
|
return strftime("%d/%m/%Y", serial)
|
||||||
|
}
|
201
lib/nulib/awk/csv
Normal file
201
lib/nulib/awk/csv
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
@include "base.core"
|
||||||
|
@include "base.array"
|
||||||
|
|
||||||
|
function csv__parse_quoted(line, destl, colsep, qchar, echar, pos, tmpl, nextc, resl) {
|
||||||
|
line = substr(line, 2)
|
||||||
|
resl = ""
|
||||||
|
while (1) {
|
||||||
|
pos = index(line, qchar)
|
||||||
|
if (pos == 0) {
|
||||||
|
# chaine mal terminee
|
||||||
|
resl = resl line
|
||||||
|
destl[0] = ""
|
||||||
|
destl[1] = 0
|
||||||
|
return resl
|
||||||
|
}
|
||||||
|
if (echar != "" && pos > 1) {
|
||||||
|
# tenir compte du fait qu"un caratère peut être mis en échappement
|
||||||
|
prevc = substr(line, pos - 1, 1)
|
||||||
|
quotec = substr(line, pos, 1)
|
||||||
|
nextc = substr(line, pos + 1, 1)
|
||||||
|
if (prevc == echar) {
|
||||||
|
# qchar en échappement
|
||||||
|
tmpl = substr(line, 1, pos - 2)
|
||||||
|
resl = resl tmpl quotec
|
||||||
|
line = substr(line, pos + 1)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
tmpl = substr(line, 1, pos - 1)
|
||||||
|
if (nextc == colsep || nextc == "") {
|
||||||
|
# fin de champ ou fin de ligne
|
||||||
|
resl = resl tmpl
|
||||||
|
destl[0] = substr(line, pos + 2)
|
||||||
|
destl[1] = nextc == colsep
|
||||||
|
return resl
|
||||||
|
} else {
|
||||||
|
# erreur de syntaxe: guillemet non mis en échappement
|
||||||
|
# ignorer cette erreur et prendre le guillemet quand meme
|
||||||
|
resl = resl tmpl quotec
|
||||||
|
line = substr(line, pos + 1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
# pas d"échappement pour qchar. il est éventuellement doublé
|
||||||
|
tmpl = substr(line, 1, pos - 1)
|
||||||
|
quotec = substr(line, pos, 1)
|
||||||
|
nextc = substr(line, pos + 1, 1)
|
||||||
|
if (nextc == colsep || nextc == "") {
|
||||||
|
# fin de champ ou fin de ligne
|
||||||
|
resl = resl tmpl
|
||||||
|
destl[0] = substr(line, pos + 2)
|
||||||
|
destl[1] = nextc == colsep
|
||||||
|
return resl
|
||||||
|
} else if (nextc == qchar) {
|
||||||
|
# qchar en echappement
|
||||||
|
resl = resl tmpl quotec
|
||||||
|
line = substr(line, pos + 2)
|
||||||
|
} else {
|
||||||
|
# erreur de syntaxe: guillemet non mis en échappement
|
||||||
|
# ignorer cette erreur et prendre le guillemet quand meme
|
||||||
|
resl = resl tmpl quotec
|
||||||
|
line = substr(line, pos + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function csv__parse_unquoted(line, destl, colsep, qchar, echar, pos) {
|
||||||
|
pos = index(line, colsep)
|
||||||
|
if (pos == 0) {
|
||||||
|
destl[0] = ""
|
||||||
|
destl[1] = 0
|
||||||
|
return line
|
||||||
|
} else {
|
||||||
|
destl[0] = substr(line, pos + 1)
|
||||||
|
destl[1] = 1
|
||||||
|
return substr(line, 1, pos - 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function csv__array_parse(fields, line, nbfields, colsep, qchar, echar, shouldparse, destl, i) {
|
||||||
|
array_new(fields)
|
||||||
|
array_new(destl)
|
||||||
|
i = 1
|
||||||
|
shouldparse = 0
|
||||||
|
# shouldparse permet de gérer le cas où un champ vide est en fin de ligne.
|
||||||
|
# en effet, après "," il faut toujours parser, même si line==""
|
||||||
|
while (shouldparse || line != "") {
|
||||||
|
if (index(line, qchar) == 1) {
|
||||||
|
value = csv__parse_quoted(line, destl, colsep, qchar, echar)
|
||||||
|
line = destl[0]
|
||||||
|
shouldparse = destl[1]
|
||||||
|
} else {
|
||||||
|
value = csv__parse_unquoted(line, destl, colsep, qchar, echar)
|
||||||
|
line = destl[0]
|
||||||
|
shouldparse = destl[1]
|
||||||
|
}
|
||||||
|
fields[i] = value
|
||||||
|
i = i + 1
|
||||||
|
}
|
||||||
|
if (nbfields) {
|
||||||
|
nbfields = int(nbfields)
|
||||||
|
i = array_len(fields)
|
||||||
|
while (i < nbfields) {
|
||||||
|
i++
|
||||||
|
fields[i] = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return array_len(fields)
|
||||||
|
}
|
||||||
|
BEGIN {
|
||||||
|
DEFAULT_COLSEP = ","
|
||||||
|
DEFAULT_QCHAR = "\""
|
||||||
|
DEFAULT_ECHAR = ""
|
||||||
|
}
|
||||||
|
function array_parsecsv2(fields, line, nbfields, colsep, qchar, echar) {
|
||||||
|
return csv__array_parse(fields, line, nbfields, colsep, qchar, echar)
|
||||||
|
}
|
||||||
|
function array_parsecsv(fields, line, nbfields, colsep, qchar, echar) {
|
||||||
|
if (colsep == "") colsep = DEFAULT_COLSEP
|
||||||
|
if (qchar == "") qchar = DEFAULT_QCHAR
|
||||||
|
if (echar == "") echar = DEFAULT_ECHAR
|
||||||
|
return csv__array_parse(fields, line, nbfields, colsep, qchar, echar)
|
||||||
|
}
|
||||||
|
function parsecsv(line, fields) {
|
||||||
|
array_parsecsv(fields, line)
|
||||||
|
array_getline(fields)
|
||||||
|
return NF
|
||||||
|
}
|
||||||
|
function getlinecsv(file, fields) {
|
||||||
|
if (file) {
|
||||||
|
getline <file
|
||||||
|
} else {
|
||||||
|
getline
|
||||||
|
}
|
||||||
|
return parsecsv($0)
|
||||||
|
}
|
||||||
|
function csv__should_quote(s) {
|
||||||
|
if (s ~ /^[[:blank:][:cntrl:][:space:]]/) return 1
|
||||||
|
if (s ~ /[[:blank:][:cntrl:][:space:]]$/) return 1
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
function array_formatcsv2(fields, colsep, mvsep, qchar, echar, count, indices, line, i, value) {
|
||||||
|
line = ""
|
||||||
|
count = mkindices(fields, indices)
|
||||||
|
for (i = 1; i <= count; i++) {
|
||||||
|
value = fields[indices[i]]
|
||||||
|
if (i > 1) line = line colsep
|
||||||
|
if (qchar != "" && index(value, qchar) != 0) {
|
||||||
|
if (echar != "") gsub(qchar, quote_subrepl(echar) "&", value);
|
||||||
|
else gsub(qchar, "&&", value);
|
||||||
|
}
|
||||||
|
if (qchar != "" && (index(value, mvsep) != 0 || index(value, colsep) != 0 || index(value, qchar) != 0 || csv__should_quote(value))) {
|
||||||
|
line = line qchar value qchar
|
||||||
|
} else {
|
||||||
|
line = line value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return line
|
||||||
|
}
|
||||||
|
function array_formatcsv(fields) {
|
||||||
|
return array_formatcsv2(fields, ",", ";", "\"", "")
|
||||||
|
}
|
||||||
|
function array_printcsv(fields, output) {
|
||||||
|
printto(array_formatcsv(fields), output)
|
||||||
|
}
|
||||||
|
function get_formatcsv( fields) {
|
||||||
|
array_fill(fields)
|
||||||
|
return array_formatcsv(fields)
|
||||||
|
}
|
||||||
|
function formatcsv() {
|
||||||
|
$0 = get_formatcsv()
|
||||||
|
}
|
||||||
|
function printcsv(output, fields) {
|
||||||
|
array_fill(fields)
|
||||||
|
array_printcsv(fields, output)
|
||||||
|
}
|
||||||
|
function array_findcsv(fields, input, field, value, nbfields, orig, found, i) {
|
||||||
|
array_new(orig)
|
||||||
|
array_fill(orig)
|
||||||
|
array_new(fields)
|
||||||
|
found = 0
|
||||||
|
while ((getline <input) > 0) {
|
||||||
|
array_parsecsv(fields, $0, nbfields)
|
||||||
|
if (fields[field] == value) {
|
||||||
|
found = 1
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(input)
|
||||||
|
array_getline(orig)
|
||||||
|
if (!found) {
|
||||||
|
delete fields
|
||||||
|
if (nbfields) {
|
||||||
|
nbfields = int(nbfields)
|
||||||
|
i = array_len(fields)
|
||||||
|
while (i < nbfields) {
|
||||||
|
i++
|
||||||
|
fields[i] = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return found
|
||||||
|
}
|
57
lib/nulib/awk/enc.base64
Normal file
57
lib/nulib/awk/enc.base64
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
function base64__and(var, x, l_res, l_i) {
|
||||||
|
l_res = 0;
|
||||||
|
for (l_i = 0; l_i < 8; l_i++){
|
||||||
|
if (var%2 == 1 && x%2 == 1) l_res = l_res/2 + 128;
|
||||||
|
else l_res /= 2;
|
||||||
|
var = int(var/2);
|
||||||
|
x = int(x/2);
|
||||||
|
}
|
||||||
|
return l_res;
|
||||||
|
}
|
||||||
|
# Rotate bytevalue left x times
|
||||||
|
function base64__lshift(var, x) {
|
||||||
|
while(x > 0){
|
||||||
|
var *= 2;
|
||||||
|
x--;
|
||||||
|
}
|
||||||
|
return var;
|
||||||
|
}
|
||||||
|
# Rotate bytevalue right x times
|
||||||
|
function base64__rshift(var, x) {
|
||||||
|
while(x > 0){
|
||||||
|
var = int(var/2);
|
||||||
|
x--;
|
||||||
|
}
|
||||||
|
return var;
|
||||||
|
}
|
||||||
|
BEGIN {
|
||||||
|
BASE64__BYTES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
||||||
|
}
|
||||||
|
function b64decode(src, result, base1, base2, base3, base4) {
|
||||||
|
result = ""
|
||||||
|
while (length(src) > 0) {
|
||||||
|
# Specify byte values
|
||||||
|
base1 = substr(src, 1, 1)
|
||||||
|
base2 = substr(src, 2, 1)
|
||||||
|
base3 = substr(src, 3, 1); if (base3 == "") base3 = "="
|
||||||
|
base4 = substr(src, 4, 1); if (base4 == "") base4 = "="
|
||||||
|
# Now find numerical position in BASE64 string
|
||||||
|
byte1 = index(BASE64__BYTES, base1) - 1
|
||||||
|
if (byte1 < 0) byte1 = 0
|
||||||
|
byte2 = index(BASE64__BYTES, base2) - 1
|
||||||
|
if (byte2 < 0) byte2 = 0
|
||||||
|
byte3 = index(BASE64__BYTES, base3) - 1
|
||||||
|
if (byte3 < 0) byte3 = 0
|
||||||
|
byte4 = index(BASE64__BYTES, base4) - 1
|
||||||
|
if (byte4 < 0) byte4 = 0
|
||||||
|
# Reconstruct ASCII string
|
||||||
|
result = result sprintf( "%c", base64__lshift(base64__and(byte1, 63), 2) + base64__rshift(base64__and(byte2, 48), 4) )
|
||||||
|
if (base3 != "=") result = result sprintf( "%c", base64__lshift(base64__and(byte2, 15), 4) + base64__rshift(base64__and(byte3, 60), 2) )
|
||||||
|
if (base4 != "=") result = result sprintf( "%c", base64__lshift(base64__and(byte3, 3), 6) + byte4 )
|
||||||
|
# Decrease incoming string with 4
|
||||||
|
src = substr(src, 5)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
21
lib/nulib/bash/base
Normal file
21
lib/nulib/bash/base
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@cooked nocomments
|
||||||
|
# shim pour les fonctions de nulib.sh au cas où ce module n'est pas chargée
|
||||||
|
if [ -z "$NULIBDIR" -o "$NULIBDIR" != "$NULIBINIT" ]; then
|
||||||
|
function module:() { :; }
|
||||||
|
function function:() { :; }
|
||||||
|
function require:() { :; }
|
||||||
|
function import:() { :; }
|
||||||
|
fi
|
||||||
|
##@include base.init
|
||||||
|
##@include base.core
|
||||||
|
##@include base.str
|
||||||
|
##@include base.arr
|
||||||
|
##@include base.io
|
||||||
|
##@include base.eval
|
||||||
|
##@include base.split
|
||||||
|
##@include base.path
|
||||||
|
##@include base.args
|
||||||
|
module: base base_ "Chargement de tous les modules base.*"
|
||||||
|
NULIB_RECURSIVE_IMPORT=1
|
||||||
|
require: base.init base.core base.str base.arr base.io base.eval base.split base.path base.args
|
176
lib/nulib/bash/base.args
Normal file
176
lib/nulib/bash/base.args
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@cooked nocomments
|
||||||
|
module: base.args base_ "Fonctions de base: analyse d'arguments"
|
||||||
|
require: base.arr
|
||||||
|
|
||||||
|
function: base_myargs_local "Afficher des commandes pour rendre locales des variables utilisées par base_myargs()
|
||||||
|
|
||||||
|
Cela permet d'utiliser base_myargs() à l'intérieur d'une fonction. Par défaut, la génération automatique de l'autocomplete est désactivée."
|
||||||
|
function base_myargs_local() {
|
||||||
|
# par défaut, désactiver génération de autocomplete
|
||||||
|
echo "local NULIB_ARGS_HELP_DESC NULIB_ARGS_HELP_USAGE NULIB_ARGS_HELP_OPTIONS args"
|
||||||
|
echo "local NULIB_ARGS_DISABLE_AC=1"
|
||||||
|
echo "local NULIB_ARGS_ONERROR_RETURN=1"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_myargs: "Débuter la description des arguments reconnus par ce script.
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
: \$1 est un résumé de l'objet de ce script
|
||||||
|
: \$2 est le nom du script s'il est différent de \$MYNAME
|
||||||
|
|
||||||
|
Le mode opératoire est généralement le suivant:
|
||||||
|
~~~
|
||||||
|
myargs:
|
||||||
|
desc \"faire un traitement\"
|
||||||
|
usage \"MYNAME [options] <args>\"
|
||||||
|
arg -o:,--output:file output= \"spécifier le fichier destination\"
|
||||||
|
arg -h:,--host:host hosts+ \"spécifier les hôtes concernés\"
|
||||||
|
arg -c,--count count=1
|
||||||
|
parse \"\$@\"; set -- \"\${args[@]}\"
|
||||||
|
~~~"
|
||||||
|
function base_myargs:() {
|
||||||
|
NULIB_ARGS_HELP_DESC=
|
||||||
|
NULIB_ARGS_HELP_USAGE=
|
||||||
|
NULIB_ARGS_HELP_OPTIONS=()
|
||||||
|
args=()
|
||||||
|
function desc() { base_myargs_desc "$@"; }
|
||||||
|
function usage() { base_myargs_usage "$@"; }
|
||||||
|
function arg() { base_myargs_add "$@"; }
|
||||||
|
function parse() { base_myargs_parse "$@"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_myargs_desc ""
|
||||||
|
function base_myargs_desc() {
|
||||||
|
NULIB_ARGS_HELP_DESC="$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_myargs_usage ""
|
||||||
|
function base_myargs_usage() {
|
||||||
|
NULIB_ARGS_HELP_USAGE="$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_myargs_add "Ajouter une définition d'option
|
||||||
|
|
||||||
|
Syntaxes
|
||||||
|
: base_arg MODE
|
||||||
|
: base_arg [MODE] -OPTIONS ACTION DESC
|
||||||
|
: base_arg [MODE] VARIABLE DESC
|
||||||
|
|
||||||
|
MODE peut être l'un des caractères '+', '-', '%' et a un effet sur l'analyse
|
||||||
|
entière de la ligne de commande
|
||||||
|
* Les caractères '+' et '-' influent sur la méthode d'analyse. Par défaut, les
|
||||||
|
options sont valides n'importe où sur la ligne de commande. Avec '+',
|
||||||
|
l'analyse s'arrête au premier argument qui n'est pas une option. Avec '-', les
|
||||||
|
options sont valides n'importe ou sur la ligne de commande, mais les arguments
|
||||||
|
ne sont pas réordonnés, et apparaissent dans l'ordre de leur mention.
|
||||||
|
* Le caractère '%' demande que toutes les variables mentionnées à partir de ce
|
||||||
|
moment soient initialisées. Elle sont garanties d'être vides.
|
||||||
|
|
||||||
|
Avec la première syntaxe, on définit précisément l'option. Deux formes sont
|
||||||
|
supportées. La forme détermine le type d'action
|
||||||
|
* Avec la forme '-OPT VAR[=VALUE]', OPT est une description d'option, VAR un nom
|
||||||
|
de variable à mettre à jour, et VALUE une valeur éventuelle pour les options
|
||||||
|
sans argument. Si plusieurs options sont mentionnées, séparées par des
|
||||||
|
virgules, alors tous les options partagent les mêmes paramètres.
|
||||||
|
|
||||||
|
OPT peut être de la forme '-o' ou '--longopt' pour des options sans arguments.
|
||||||
|
Dans ce cas, VAR obtient le nombre de fois que l'option est mentionnée (vide
|
||||||
|
pour aucune mention, '1' pour une seule mention, etc.), sauf si on utilise la
|
||||||
|
forme VAR=VALUE, auquel cas la variable obtient la valeur VALUE, et le nombre
|
||||||
|
d'occurences de l'option n'est pas compté.
|
||||||
|
|
||||||
|
Pour faciliter la lecture:
|
||||||
|
* '--longopt .' est équivalent à '--longopt longopt'
|
||||||
|
* '--longopt: .' est équivalent à '--longopt: longopt='
|
||||||
|
|
||||||
|
Avec les formes '-o:' et '--longopt:', l'option prend un argument obligatoire.
|
||||||
|
Avec les formes '-o::' et '--longopt::', l'option prend un argument facultatif
|
||||||
|
(dans ce cas, la valeur de l'option sur la ligne de commande doit
|
||||||
|
obligatoirement être collée à l'option.)
|
||||||
|
|
||||||
|
Si ces options sont mentionnées plusieurs fois sur la ligne de commande, alors
|
||||||
|
la variable de destination est un tableau qui contient toutes les valeurs. Le
|
||||||
|
traitement de la valeur d'une variable dépend de la forme utilisée.
|
||||||
|
* Avec une option sans argument, le comportement est celui décrit ci-dessus.
|
||||||
|
* Avec une option qui prend des arguments, la forme '-o: VAR' considère que
|
||||||
|
VAR est un tableau qui contiendra toutes les valeurs mentionnées dans les
|
||||||
|
options. Avec la forme '-o: VAR=', la variable n'est pas un tableau et
|
||||||
|
contient toujours la dernière valeur spécifiée.
|
||||||
|
* Dans la forme 'opt \$cmd', la commande cmd est executée avec eval *dès* que
|
||||||
|
l'option est rencontrée. La variable option_ contient l'option, e.g. '-o' ou
|
||||||
|
'--longopt'. Le cas échéant, la variable value_ contient la valeur de
|
||||||
|
l'option. La fonction 'set@ NAME' met à jour la variable NAME, soit en lui
|
||||||
|
donnant la valeur \$value_, soit en l'incrémentant, suivant le type d'option.
|
||||||
|
La fonction 'inc@ NAME' incrémente la variable NAME, 'res@ NAME [VALUE]'
|
||||||
|
initialise la variable à la valeur VALUE, 'add@ NAME [VALUE]' ajoute VALUE à
|
||||||
|
la fin du tableau NAME. Par défaut, VALUE vaut \$value_
|
||||||
|
|
||||||
|
Avec la deuxième syntaxe, l'option est déterminée sur la base du nom de la
|
||||||
|
variable.
|
||||||
|
* Une variable de la forme 'sansarg' est pour une option simple qui ne prend pas
|
||||||
|
d'argument
|
||||||
|
* Une variable de la forme 'avecarg=[default-value]' est pour une option qui
|
||||||
|
prend un argument.
|
||||||
|
L'option générée est une option longue. En l'occurence, les options générées
|
||||||
|
sont respectivement '--sansarg' et '--avecarg:'
|
||||||
|
Les variables et les options sont toujours en minuscule. Pour les variables, le
|
||||||
|
caractère '-' est remplacé par '_'. Si une option contient une lettre en
|
||||||
|
majuscule, l'option courte correspondante à cette lettre sera aussi reconnue.
|
||||||
|
|
||||||
|
"
|
||||||
|
function base_myargs_add() {
|
||||||
|
# description des options
|
||||||
|
base_array_add args "${@:1:2}"
|
||||||
|
# puis construire la description de l'option pour l'aide
|
||||||
|
local -a os; local o odesc
|
||||||
|
base_array_split os "$1" ,
|
||||||
|
for o in "${os[@]}"; do
|
||||||
|
o="${o%%:*}"
|
||||||
|
[ -n "$odesc" ] && odesc="$odesc, "
|
||||||
|
odesc="$odesc$o"
|
||||||
|
done
|
||||||
|
for o in "${os[@]}"; do
|
||||||
|
if [[ "$o" == *:* ]]; then
|
||||||
|
if [ "${2#\$}" != "$2" ]; then
|
||||||
|
o=ARG
|
||||||
|
else
|
||||||
|
o="${2%%=*}"
|
||||||
|
o="${o^^}"
|
||||||
|
fi
|
||||||
|
[ -n "$odesc" ] && odesc="$odesc "
|
||||||
|
odesc="$odesc$o"
|
||||||
|
fi
|
||||||
|
break
|
||||||
|
done
|
||||||
|
base_array_add NULIB_ARGS_HELP_OPTIONS "$odesc"
|
||||||
|
[ -n "$3" ] && base_array_add NULIB_ARGS_HELP_OPTIONS "$3"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_myargs_show_help ""
|
||||||
|
function base_myargs_show_help() {
|
||||||
|
local help="$MYNAME"
|
||||||
|
[ -n "$NULIB_ARGS_HELP_DESC" ] && help="$help: $NULIB_ARGS_HELP_DESC"
|
||||||
|
[ -n "$NULIB_ARGS_HELP_USAGE" ] && help="$help
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
$NULIB_ARGS_HELP_USAGE"
|
||||||
|
[ ${#NULIB_ARGS_HELP_OPTIONS[*]} -gt 0 ] && help="$help
|
||||||
|
|
||||||
|
OPTIONS"
|
||||||
|
echo "$help"
|
||||||
|
for help in "${NULIB_ARGS_HELP_OPTIONS[@]}"; do
|
||||||
|
echo "$help"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_myargs_parse ""
|
||||||
|
function base_myargs_parse() {
|
||||||
|
[ -z "$NULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local NULIB_ARGS_SET_X=1; }
|
||||||
|
local r=0
|
||||||
|
if ! parse_opts "${PRETTYOPTS[@]}" "${args[@]}" @ args -- "$@"; then
|
||||||
|
edie "$args"
|
||||||
|
r=$?
|
||||||
|
fi
|
||||||
|
[ -n "$NULIB_ARGS_SET_X" ] && set -x; return $r
|
||||||
|
}
|
361
lib/nulib/bash/base.arr
Normal file
361
lib/nulib/bash/base.arr
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
##@cooked nocomments
|
||||||
|
module: base.arr base_ "Fonctions de base: gestion des variables tableaux"
|
||||||
|
require: base.core base.str
|
||||||
|
|
||||||
|
function: base_array_count "retourner le nombre d'éléments du tableau \$1"
|
||||||
|
function base_array_count() {
|
||||||
|
eval "echo \${#$1[*]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_isempty "tester si le tableau \$1 est vide"
|
||||||
|
function base_array_isempty() {
|
||||||
|
eval "[ \${#$1[*]} -eq 0 ]"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_new "créer un tableau vide dans la variable \$1"
|
||||||
|
function base_array_new() {
|
||||||
|
eval "$1=()"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_copy "copier le contenu du tableau \$2 dans le tableau \$1"
|
||||||
|
function base_array_copy() {
|
||||||
|
eval "$1=(\"\${$2[@]}\")"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_add "ajouter les valeurs \$2..@ à la fin du tableau \$1"
|
||||||
|
function base_array_add() {
|
||||||
|
local __aa_a="$1"; shift
|
||||||
|
eval "$__aa_a=(\"\${$__aa_a[@]}\" \"\$@\")"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_ins "insérer les valeurs \$2..@ au début du tableau \$1"
|
||||||
|
function base_array_ins() {
|
||||||
|
local __aa_a="$1"; shift
|
||||||
|
eval "$__aa_a=(\"\$@\" \"\${$__aa_a[@]}\")"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_del "supprimer *les* valeurs \$2 du tableau \$1"
|
||||||
|
function base_array_del() {
|
||||||
|
local __ad_v
|
||||||
|
local -a __ad_vs
|
||||||
|
eval '
|
||||||
|
for __ad_v in "${'"$1"'[@]}"; do
|
||||||
|
if [ "$__ad_v" != "$2" ]; then
|
||||||
|
__ad_vs=("${__ad_vs[@]}" "$__ad_v")
|
||||||
|
fi
|
||||||
|
done'
|
||||||
|
base_array_copy "$1" __ad_vs
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_addu "ajouter la valeur \$2 au tableau \$1, si la valeur n'y est pas déjà
|
||||||
|
|
||||||
|
Retourner vrai si la valeur a été ajoutée"
|
||||||
|
function base_array_addu() {
|
||||||
|
local __as_v
|
||||||
|
eval '
|
||||||
|
for __as_v in "${'"$1"'[@]}"; do
|
||||||
|
[ "$__as_v" == "$2" ] && return 1
|
||||||
|
done'
|
||||||
|
base_array_add "$1" "$2"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_insu "insérer la valeur \$2 au début du tableau tableau \$1, si la valeur n'y est pas déjà
|
||||||
|
|
||||||
|
Retourner vrai si la valeur a été ajoutée."
|
||||||
|
function base_array_insu() {
|
||||||
|
local __as_v
|
||||||
|
eval '
|
||||||
|
for __as_v in "${'"$1"'[@]}"; do
|
||||||
|
[ "$__as_v" == "$2" ] && return 1
|
||||||
|
done'
|
||||||
|
base_array_ins "$1" "$2"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_fillrange "Initialiser le tableau \$1 avec les nombres de \$2(=1) à \$3(=10) avec un step de \$4(=1)"
|
||||||
|
function base_array_fillrange() {
|
||||||
|
local -a __af_vs
|
||||||
|
local __af_i="${2:-1}" __af_to="${3:-10}" __af_step="${4:-1}"
|
||||||
|
while [ "$__af_i" -le "$__af_to" ]; do
|
||||||
|
__af_vs=("${__af_vs[@]}" "$__af_i")
|
||||||
|
__af_i=$(($__af_i + $__af_step))
|
||||||
|
done
|
||||||
|
base_array_copy "$1" __af_vs
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_eq "tester l'égalité des tableaux \$1 et \$2"
|
||||||
|
function base_array_eq() {
|
||||||
|
local -a __ae_a1 __ae_a2
|
||||||
|
base_array_copy __ae_a1 "$1"
|
||||||
|
base_array_copy __ae_a2 "$2"
|
||||||
|
[ ${#__ae_a1[*]} -eq ${#__ae_a2[*]} ] || return 1
|
||||||
|
local __ae_v __ae_i=0
|
||||||
|
for __ae_v in "${__ae_a1[@]}"; do
|
||||||
|
[ "$__ae_v" == "${__ae_a2[$__ae_i]}" ] || return 1
|
||||||
|
__ae_i=$(($__ae_i + 1))
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_contains "tester si le tableau \$1 contient la valeur \$2"
|
||||||
|
function base_array_contains() {
|
||||||
|
local __ac_v
|
||||||
|
eval '
|
||||||
|
for __ac_v in "${'"$1"'[@]}"; do
|
||||||
|
[ "$__ac_v" == "$2" ] && return 0
|
||||||
|
done'
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_icontains "tester si le tableau \$1 contient la valeur \$2, sans tenir compte de la casse"
|
||||||
|
function base_array_icontains() {
|
||||||
|
local __ac_v
|
||||||
|
eval '
|
||||||
|
for __ac_v in "${'"$1"'[@]}"; do
|
||||||
|
[ "${__ac_v,,} == "${2,,}" ] && return 0
|
||||||
|
done'
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_find "si le tableau \$1 contient la valeur \$2, afficher l'index de la valeur. Si le tableau \$3 est spécifié, afficher la valeur à l'index dans ce tableau"
|
||||||
|
function base_array_find() {
|
||||||
|
local __af_i __af_v
|
||||||
|
__af_i=0
|
||||||
|
eval '
|
||||||
|
for __af_v in "${'"$1"'[@]}"; do
|
||||||
|
if [ "$__af_v" == "$2" ]; then
|
||||||
|
if [ -n "$3" ]; then
|
||||||
|
recho "${'"$3"'[$__af_i]}"
|
||||||
|
else
|
||||||
|
echo "$__af_i"
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
__af_i=$(($__af_i + 1))
|
||||||
|
done'
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_reverse "Inverser l'ordre des élément du tableau \$1"
|
||||||
|
function base_array_reverse() {
|
||||||
|
local -a __ar_vs
|
||||||
|
local __ar_v
|
||||||
|
base_array_copy __ar_vs "$1"
|
||||||
|
base_array_new "$1"
|
||||||
|
for __ar_v in "${__ar_vs[@]}"; do
|
||||||
|
base_array_ins "$1" "$__ar_v"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_replace "dans le tableau \$1, remplacer toutes les occurences de \$2 par \$3..*"
|
||||||
|
function base_array_replace() {
|
||||||
|
local __ar_sn="$1"; shift
|
||||||
|
local __ar_f="$1"; shift
|
||||||
|
local -a __ar_s __ar_d
|
||||||
|
local __ar_v
|
||||||
|
base_array_copy __ar_s "$__ar_sn"
|
||||||
|
for __ar_v in "${__ar_s[@]}"; do
|
||||||
|
if [ "$__ar_v" == "$__ar_f" ]; then
|
||||||
|
__ar_d=("${__ar_d[@]}" "$@")
|
||||||
|
else
|
||||||
|
__ar_d=("${__ar_d[@]}" "$__ar_v")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
base_array_copy "$__ar_sn" __ar_d
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_each "Pour chacune des valeurs ITEM du tableau \$1, appeler la fonction \$2 avec les arguments (\$3..@ ITEM)"
|
||||||
|
function base_array_each() {
|
||||||
|
local __ae_v
|
||||||
|
local -a __ae_a
|
||||||
|
base_array_copy __ae_a "$1"; shift
|
||||||
|
for __ae_v in "${__ae_a[@]}"; do
|
||||||
|
"$@" "$__ae_v"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_map "Pour chacune des valeurs ITEM du tableau \$1, appeler la fonction \$2 avec les arguments (\$3..@ ITEM), et remplacer la valeur par le résultat de la fonction"
|
||||||
|
function base_array_map() {
|
||||||
|
local __am_v
|
||||||
|
local -a __am_a __am_vs
|
||||||
|
local __am_an="$1"; shift
|
||||||
|
local __am_f="$1"; shift
|
||||||
|
base_array_copy __am_a "$__am_an"
|
||||||
|
for __am_v in "${__am_a[@]}"; do
|
||||||
|
__am_vs=("${__am_vs[@]}" "$("$__am_f" "$@" "$__am_v")")
|
||||||
|
done
|
||||||
|
base_array_copy "$__am_an" __am_vs
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_first "afficher la première valeur du tableau \$1"
|
||||||
|
function base_array_first() {
|
||||||
|
eval "recho \"\${$1[@]:0:1}\""
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_last "afficher la dernière valeur du tableau \$1"
|
||||||
|
function base_array_last() {
|
||||||
|
eval "recho \"\${$1[@]: -1:1}\""
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_copy_firsts "copier toutes les valeurs du tableau \$2(=\$1) dans le tableau \$1, excepté la dernière"
|
||||||
|
function base_array_copy_firsts() {
|
||||||
|
eval "$1=(\"\${${2:-$1}[@]:0:\$((\${#${2:-$1}[@]}-1))}\")"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_copy_lasts "copier toutes les valeurs du tableau \$2(=\$1) dans le tableau \$1, excepté la première"
|
||||||
|
function base_array_copy_lasts() {
|
||||||
|
eval "$1=(\"\${${2:-$1}[@]:1}\")"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_extend "ajouter le contenu du tableau \$2 au tableau \$1"
|
||||||
|
function base_array_extend() {
|
||||||
|
eval "$1=(\"\${$1[@]}\" \"\${$2[@]}\")"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_extendu "ajouter chacune des valeurs du tableau \$2 au tableau \$1, si ces valeurs n'y sont pas déjà
|
||||||
|
|
||||||
|
Retourner vrai si au moins une valeur a été ajoutée"
|
||||||
|
function base_array_extendu() {
|
||||||
|
local __ae_v __ae_s=1
|
||||||
|
eval '
|
||||||
|
for __ae_v in "${'"$2"'[@]}"; do
|
||||||
|
base_array_addu "$1" "$__ae_v" && __ae_s=0
|
||||||
|
done'
|
||||||
|
return "$__ae_s"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_extend_firsts "ajouter toutes les valeurs du tableau \$2 dans le tableau \$1, excepté la dernière"
|
||||||
|
function base_array_extend_firsts() {
|
||||||
|
eval "$1=(\"\${$1[@]}\" \"\${$2[@]:0:\$((\${#$2[@]}-1))}\")"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_extend_lasts "ajouter toutes les valeurs du tableau \$2 dans le tableau \$1, excepté la première"
|
||||||
|
function base_array_extend_lasts() {
|
||||||
|
eval "$1=(\"\${$1[@]}\" \"\${$2[@]:1}\")"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_xsplit "créer le tableau \$1 avec chaque élément de \$2 (un ensemble d'éléments séparés par \$3, qui vaut ':' par défaut)"
|
||||||
|
function base_array_xsplit() {
|
||||||
|
eval "$1=($(recho_ "$2" | lawk -v RS="${3:-:}" '
|
||||||
|
{
|
||||||
|
gsub(/'\''/, "'\'\\\\\'\''")
|
||||||
|
print "'\''" $0 "'\''"
|
||||||
|
}'))" #"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_xsplitc "variante de base_array_xsplit() où le séparateur est ',' par défaut"
|
||||||
|
function base_array_xsplitc() {
|
||||||
|
base_array_xsplit "$1" "$2" "${3:-,}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_split "créer le tableau \$1 avec chaque élément de \$2 (un ensemble d'éléments séparés par \$3, qui vaut ':' par défaut)
|
||||||
|
|
||||||
|
Les éléments vides sont ignorés. par exemple \"a::b\" est équivalent à \"a:b\""
|
||||||
|
function base_array_split() {
|
||||||
|
eval "$1=($(recho_ "$2" | lawk -v RS="${3:-:}" '
|
||||||
|
/^$/ { next }
|
||||||
|
{
|
||||||
|
gsub(/'\''/, "'\'\\\\\'\''")
|
||||||
|
print "'\''" $0 "'\''"
|
||||||
|
}'))" #"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_splitc "variante de base_array_split() où le séparateur est ',' par défaut"
|
||||||
|
function base_array_splitc() {
|
||||||
|
base_array_split "$1" "$2" "${3:-,}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_xsplitl "créer le tableau \$1 avec chaque ligne de \$2"
|
||||||
|
function base_array_xsplitl() {
|
||||||
|
eval "$1=($(recho_ "$2" | strnl2lf | lawk '
|
||||||
|
{
|
||||||
|
gsub(/'\''/, "'\'\\\\\'\''")
|
||||||
|
print "'\''" $0 "'\''"
|
||||||
|
}'))" #"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_splitl "créer le tableau \$1 avec chaque ligne de \$2
|
||||||
|
|
||||||
|
Les lignes vides sont ignorés."
|
||||||
|
function base_array_splitl() {
|
||||||
|
eval "$1=($(recho_ "$2" | strnl2lf | lawk '
|
||||||
|
/^$/ { next }
|
||||||
|
{
|
||||||
|
gsub(/'\''/, "'\'\\\\\'\''")
|
||||||
|
print "'\''" $0 "'\''"
|
||||||
|
}'))" #"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_join "afficher le contenu du tableau \$1 sous forme d'une liste de valeurs séparées par \$2 (qui vaut ':' par défaut)
|
||||||
|
|
||||||
|
* Si \$1==\"@\", alors les éléments du tableaux sont les arguments de la fonction à partir de \$3
|
||||||
|
* Si \$1!=\"@\" et que le tableau est vide, afficher \$3
|
||||||
|
* Si \$1!=\"@\", \$4 et \$5 sont des préfixes et suffixes à rajouter à chaque élément"
|
||||||
|
function base_array_join() {
|
||||||
|
local __aj_an __aj_l __aj_j __aj_s="${2:-:}" __aj_pf __aj_sf
|
||||||
|
if [ "$1" == "@" ]; then
|
||||||
|
__aj_an="\$@"
|
||||||
|
shift; shift
|
||||||
|
else
|
||||||
|
__aj_an="\${$1[@]}"
|
||||||
|
__aj_pf="$4"
|
||||||
|
__aj_sf="$5"
|
||||||
|
fi
|
||||||
|
eval '
|
||||||
|
for __aj_l in "'"$__aj_an"'"; do
|
||||||
|
__aj_j="${__aj_j:+$__aj_j'"$__aj_s"'}$__aj_pf$__aj_l$__aj_sf"
|
||||||
|
done'
|
||||||
|
if [ -n "$__aj_j" ]; then
|
||||||
|
recho "$__aj_j"
|
||||||
|
elif [ "$__aj_an" != "\$@" -a -n "$3" ]; then
|
||||||
|
recho "$3"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_joinc "afficher les éléments du tableau \$1 séparés par ','"
|
||||||
|
function base_array_joinc() {
|
||||||
|
base_array_join "$1" , "$2" "$3" "$4"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_joinl "afficher les éléments du tableau \$1 à raison d'un élément par ligne"
|
||||||
|
function base_array_joinl() {
|
||||||
|
base_array_join "$1" "
|
||||||
|
" "$2" "$3" "$4"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_mapjoin "map le tableau \$1 avec la fonction \$2, puis afficher le résultat en séparant chaque élément par \$3
|
||||||
|
|
||||||
|
Les arguments et la sémantique sont les mêmes que pour base_array_join() en
|
||||||
|
tenant compte de l'argument supplémentaire \$2 qui est la fonction pour
|
||||||
|
base_array_map() (les autres arguments sont décalés en conséquence)"
|
||||||
|
function base_array_mapjoin() {
|
||||||
|
local __amj_src="$1" __amj_func="$2" __amj_sep="$3"
|
||||||
|
shift; shift; shift
|
||||||
|
if [ "$__amj_src" == "@" ]; then
|
||||||
|
local -a __amj_tmpsrc
|
||||||
|
__amj_tmpsrc=("$@")
|
||||||
|
__amj_src=__amj_tmpsrc
|
||||||
|
set --
|
||||||
|
fi
|
||||||
|
local -a __amj_tmp
|
||||||
|
base_array_copy __amj_tmp "$__amj_src"
|
||||||
|
base_array_map __amj_tmp "$__amj_func"
|
||||||
|
base_array_join __amj_tmp "$__amj_sep" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function: base_array_fix_paths "Corriger les valeurs du tableau \$1. Les valeurs contenant le séparateur \$2(=':') sont séparées en plusieurs valeurs.
|
||||||
|
|
||||||
|
Par exemple avec le tableau input=(a b:c), le résultat est input=(a b c)"
|
||||||
|
function base_array_fix_paths() {
|
||||||
|
local __afp_an="$1" __afp_s="${2:-:}"
|
||||||
|
local -a __afp_vs
|
||||||
|
local __afp_v
|
||||||
|
base_array_copy __afp_vs "$__afp_an"
|
||||||
|
base_array_new "$__afp_an"
|
||||||
|
for __afp_v in "${__afp_vs[@]}"; do
|
||||||
|
base_array_split __afp_v "$__afp_v" "$__afp_s"
|
||||||
|
base_array_extend "$__afp_an" __afp_v
|
||||||
|
done
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user