Erreur avec les blocs de code : 403 Interdit

J’ai récemment pris en charge la gestion du serveur Discourse, et il y a quelques problèmes.

  1. J’ai des problèmes persistants lorsque j’essaie de créer ou de modifier un message avec des blocs de code. Lorsque j’essaie de créer ou de modifier un message avec le bloc de code
(access node)$ spack list openfoam@2306
...
Variants:
    Name [Default]            When    Allowed values    Description
    ======================    ====    ==============    ==================================================

    build_system [generic]    --      generic           Build systems supported by the package
    int64 [off]               --      on, off           With 64-bit labels
    kahip [off]               --      on, off           With kahip decomposition
    knl [off]                 --      on, off           Use KNL compiler settings
    metis [off]               --      on, off           With metis decomposition
    mgridgen [off]            --      on, off           With mgridgen support
    paraview [off]            --      on, off           Build paraview plugins and runtime post-processing
    precision [dp]            --      sp, dp, spdp      Precision option
    scotch [on]               --      on, off           With scotch/ptscotch decomposition
    source [on]               --      on, off           Install library/application sources and tutorials
    vtk [off]                 --      on, off           With VTK runTimePostProcessing
    zoltan [off]              --      on, off           With zoltan renumbering
...

J’obtiens une erreur 403 Forbidden.

  1. Markdown ne prend pas en charge la coloration syntaxique, l’ajout de toute spécification de syntaxe entraîne une erreur 403 Forbidden.

  2. Les segments de code en ligne provoquent également une erreur 403 Forbidden à certains endroits mais pas à d’autres, par rapport à d’autres blocs de code.

La version installée est 3.1.1 ( 0612f0d5b6 ).

Ces problèmes sont-ils liés, et qu’est-ce qui pourrait causer ce comportement ?

Exemple de message : Compiling OpenFOAM with Spack - 📚 Knowledge nuggets - HPC discourse

Résultat souhaité :

Il y a quelques problèmes lors de l’installation d’OpenFOAM d’OpenCFD avec Spack.

Un environnement a été configuré pour gérer les paquets avec Spack en suivant les instructions du tutoriel UL HPC. En bref, les dépendances suivantes ont été définies pour les paquets SPACK,

(access node)$ cat << EOF > $SPACK_ROOT/etc/spack/packages.yaml
packages:
    slurm:
        externals:
        - spec: slurm@22.05.5
          prefix: /usr
        buildable: False
    libevent:
        externals:
        - spec: libevent@2.1.8
          prefix: /usr
        buildable: False
    pmix:
        externals:
        - spec: pmix@4.2.3
          prefix: /usr
        buildable: False
    hwloc:
        externals:
        - spec: hwloc@2.2.0
          prefix: /usr
        buildable: False
EOF

et les options suivantes ont été définies pour les répertoires de cache de construction,

(access)$ cat << EOF > $SPACK_ROOT/etc/spack/config.yaml
config:
    build_stage:
        - /dev/shm/$user/spack-stage
EOF

pour accélérer la compilation en utilisant le système de fichiers ramdisk. Avant de procéder à l’installation d’OpenFOAM, la version souhaitée d’Open MPI est installée avec le compilateur système :

(compute node)$ spack install -j openmpi@4.0.5 +pmi schedulers=slurm ^pmix@4.2.3 ^hwloc@2.2.0

La distribution d’OpenFOAM est également installée à l’aide du compilateur système. Les composants disponibles d’OpenFOAM sont :

(access node)$ spack list openfoam@2306
...
Variants:
    Name [Default]            When    Allowed values    Description
    ======================    ====    ==============    ==================================================

    build_system [generic]    --      generic           Build systems supported by the package
    int64 [off]               --      on, off           With 64-bit labels
    kahip [off]               --      on, off           With kahip decomposition
    knl [off]                 --      on, off           Use KNL compiler settings
    metis [off]               --      on, off           With metis decomposition
    mgridgen [off]            --      on, off           With mgridgen support
    paraview [off]            --      on, off           Build paraview plugins and runtime post-processing
    precision [dp]            --      sp, dp, spdp      Precision option
    scotch [on]               --      on, off           With scotch/ptscotch decomposition
    source [on]               --      on, off           Install library/application sources and tutorials
    vtk [off]                 --      on, off           With VTK runTimePostProcessing
    zoltan [off]              --      on, off           With zoltan renumbering
...

OpenFOAM est installé en utilisant tous les partitionneurs disponibles (metis, scotch, zoltan, kahip) et les composants de génération multi-grilles (mgridgen, section 6.3.1.4 de la documentation) avec la commande :

(compute node)$ spack install -j openfoam@2306 +source precision=dp +metis +scotch +zoltan +kahip +mgridgen ~knl ~int64 ~paraview ^openmpi@4.0.5

Cependant, l’installation résultante manque de plusieurs composants. Par exemple, en exécutant la vérification manuelle post-installation dans doc/Build.md,

# Créer le répertoire utilisateur "run" :
mkdir -p "$FOAM_RUN"
# Changer pour le répertoire utilisateur "run" :
run
# Copier le tutoriel
cp -r "$FOAM_TUTORIALS"/incompressible/simpleFoam/pitzDaily ./
# Exécuter le tutoriel
( cd pitzDaily && blockMesh && simpleFoam )

le générateur de maillage blockMesh et le solveur simpleFoam sont tous deux manquants.

Il s’avère que le partitionneur METIS provoque l’échec de l’installation de plusieurs composants. La recompilation avec uniquement le partitionneur SCOTCH,

(compute node)$ spack install openfoam@2306 +source +scotch +mgridgen precision=dp ~int64 ~kahip ~knl ~metis ~paraview ~vtk ~zoltan ^openmpi@4.0.5

résout le problème. Tous les composants du solveur sont installés, mais quelques utilitaires sont toujours manquants.

Nous utilisons le script suivant pour détecter tous les composants manquants :

(access node)$ cat list_spack_openfoam
#!/usr/bin/bash

set -euo pipefail

declare variant="${1}" # e.g. @2306%gcc@8.5.0 @2306+mgridgen
declare type="${2}" # solvers, utilities

find_makefile_directories() {
    local directory="${1}"

    find "${directory}" -type d | grep -E '\\/Make$' || true
}

extract_executable_name() {
    local makefile_directory="${1}"

    cat "${makefile_directory}/files" | ( grep -E '^EXE[[:space:]]*=' || true ) | sed 's/^EXE[[:space:]]*=[[:space:]]*\$(FOAM_APPBIN)\///g'
}

main() {
    local variant="${1}"
    local type="${2}"

    local foam_location="$(spack location -i openfoam"${variant}")"

    local pagkage_directory=""
    local executable_name=""
    local installed=""
    local package_makefile_directory=""
    while read -r package_makefile_directory; do
        executable_name=$( extract_executable_name "${package_makefile_directory}" )

        if [ -n "${executable_name}" ]; then
            if [ -x "${foam_location}/platforms/linux64GccDPInt32-spack/bin/${executable_name}" ]; then
                installed="Y"
            else
                installed="N"
            fi
            package_directory="$( echo "${package_makefile_directory}" | xargs -I % dirname % )"

            echo "${installed} : ${executable_name} => ${package_directory#${foam_location}}"
        fi
    done < <( find_makefile_directories "${foam_location}/applications/${type}" )
}

main "${variant}" "${type}"

Une simple exécution du script indique que les utilitaires suivants sont manquants :

(access node)$ ./list_spack_openfoam utilities @2306 | grep -E '^N'
N : addr2line => /applications/utilities/miscellaneous/OSspecific/addr2line
N : foamyHexMeshSurfaceSimplify => /applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify
N : foamyHexMeshBackgroundMesh => /applications/utilities/mesh/generation/foamyMesh/foamyHexMeshBackgroundMesh
N : cellSizeAndAlignmentGrid => /applications/utilities/mesh/generation/foamyMesh/cellSizeAndAlignmentGrid
N : foamToCcm => /applications/utilities/mesh/conversion/ccm/foamToCcm
N : ccmToFoam => /applications/utilities/mesh/conversion/ccm/ccmToFoam

Il est difficile de dire, les problèmes liés à Markdown n’entraînent généralement pas de 403 mais fournissent un retour d’information visuel à l’auteur. Nos erreurs 403 sont généralement liées à l’autorisation, comme la publication dans une catégorie restreinte ou l’utilisation d’une balise restreinte.

J’ai utilisé vos extraits de texte dans une instance vierge de Discourse et cela semble fonctionner.

Puis-je vous suggérer de vérifier auprès de votre modérateur pour voir si de telles restrictions sont en place ?

4 « J'aime »

Suite à cela, nous constatons presque toujours que les erreurs 403 comme celle-ci lors de la création de publications (en particulier avec des blocs de code !) sont dues à un WAF trop zélé qui pense que les blocs de code sont du shellcode ou une tentative d’injection.

Je note que l’instance en question semble être protégée par un WAF :

○ → host hpc-discourse.uni.lu
hpc-discourse.uni.lu is an alias for fstc-waf2.uni.lu.

et je suspecte donc fortement que les erreurs 403 ne proviennent pas de Discourse, mais de votre WAF.

L’inspection des en-têtes des erreurs dans le navigateur devrait vous permettre de connaître la source du rejet.

7 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.