Errore con i blocchi di codice: 403 Forbidden

Ho recentemente assunto la gestione del server discourse e ci sono alcuni problemi.

  1. Ho problemi persistenti quando tento di creare o modificare un post con blocchi di codice. Quando tento di creare o modificare un post con il blocco di codice
(access node)$ spack list openfoam@2306
...
Varianti:
    Nome [Default]            Quando    Valori consentiti    Descrizione
    ======================    ====    ==============    ==================================================

    build_system [generic]    --      generic           Sistemi di compilazione supportati dal pacchetto
    int64 [off]               --      on, off           Con etichette a 64 bit
    kahip [off]               --      on, off           Con decomposizione kahip
    knl [off]                 --      on, off           Usa impostazioni del compilatore KNL
    metis [off]               --      on, off           Con decomposizione metis
    mgridgen [off]            --      on, off           Con supporto mgridgen
    paraview [off]            --      on, off           Compila plugin paraview ed elaborazione post-runtime
    precision [dp]            --      sp, dp, spdp      Opzione di precisione
    scotch [on]               --      on, off           Con decomposizione scotch/ptscotch
    source [on]               --      on, off           Installa sorgenti e tutorial della libreria/applicazione
    vtk [off]                 --      on, off           Con VTK runTimePostProcessing
    zoltan [off]              --      on, off           Con rineumerazione zoltan
...

ottengo un errore 403 Forbidden.

  1. Markdown non supporta l’evidenziazione del codice, l’aggiunta di qualsiasi specifica di sintassi genera un errore 403 Forbidden.

  2. Anche i segmenti di codice inline causano 403 Forbidden in alcune ma non in tutte le posizioni, rispetto ad altri blocchi di codice.

La versione installata è 3.1.1 ( 0612f0d5b6 ).

Questi problemi sono correlati e cosa potrebbe causare questo comportamento?

Post di esempio: Compiling OpenFOAM with Spack - 📚 Knowledge nuggets - HPC discourse

Risultato previsto:

Ci sono alcuni problemi durante l’installazione di OpenFOAM di OpenCFD con Spack.

È stato configurato un ambiente per gestire i pacchetti con Spack seguendo le istruzioni nel tutorial UL HPC. In breve, le seguenti dipendenze sono state definite per i pacchetti 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

e le seguenti opzioni sono state definite per le directory della cache di compilazione,

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

per accelerare la compilazione utilizzando il file system ramdisk. Prima di procedere all’installazione di OpenFOAM, la versione desiderata di Open MPI viene installata con il compilatore di sistema:

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

Anche la distribuzione di OpenFOAM viene installata utilizzando il compilatore di sistema. I componenti disponibili di OpenFOAM sono:

(access node)$ spack list openfoam@2306
...
Varianti:
    Nome [Default]            Quando    Valori consentiti    Descrizione
    ======================    ====    ==============    ==================================================

    build_system [generic]    --      generic           Sistemi di compilazione supportati dal pacchetto
    int64 [off]               --      on, off           Con etichette a 64 bit
    kahip [off]               --      on, off           Con decomposizione kahip
    knl [off]                 --      on, off           Usa impostazioni del compilatore KNL
    metis [off]               --      on, off           Con decomposizione metis
    mgridgen [off]            --      on, off           Con supporto mgridgen
    paraview [off]            --      on, off           Compila plugin paraview ed elaborazione post-runtime
    precision [dp]            --      sp, dp, spdp      Opzione di precisione
    scotch [on]               --      on, off           Con decomposizione scotch/ptscotch
    source [on]               --      on, off           Installa sorgenti e tutorial della libreria/applicazione
    vtk [off]                 --      on, off           Con VTK runTimePostProcessing
    zoltan [off]              --      on, off           Con rineumerazione zoltan
...

OpenFOAM viene installato utilizzando tutti i partizionatori disponibili (metis, scotch, zoltan, kahip) e i componenti del generatore multi-griglia (mgridgen, sezione 6.3.1.4 della documentazione) con il comando:

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

Tuttavia, l’installazione risultante manca di più componenti. Ad esempio, eseguendo la verifica manuale post-installazione in doc/Build.md,

# Crea la directory utente "run":
mkdir -p "$FOAM_RUN"
# Passa alla directory utente "run":
run
# Copia il tutorial
cp -r "$FOAM_TUTORIALS"/incompressible/simpleFoam/pitzDaily ./
# Esegui il tutorial
( cd pitzDaily && blockMesh && simpleFoam )

mancano sia il generatore di mesh blockMesh che il solver simpleFoam.

Si scopre che il partizionatore METIS causa il fallimento dell’installazione di più componenti. Ricompilando solo con il partizionatore SCOTCH,

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

risolve il problema. Tutti i componenti del solver sono installati, ma alcune utility sono ancora mancanti.

Utilizziamo il seguente script per rilevare tutti i componenti mancanti:

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

set -euo pipefail

declare variant="${1}" # es. @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}"

Una semplice esecuzione dello script indica che le seguenti utility sono mancanti:

(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

È difficile dirlo, i problemi relativi a Markdown tendono a non essere 403 ma presentano un feedback visivo all’autore. I nostri errori 403 tendono a essere correlati all’autorizzazione, come la pubblicazione in una categoria riservata o l’utilizzo di un tag riservato.

Ho utilizzato i tuoi blocchi di testo in un’istanza standard di Discourse e sembra che vada tutto bene.

Potrei suggerirti di verificare con il tuo moderatore per vedere se tali restrizioni sono in vigore?

4 Mi Piace

Inoltre, troviamo quasi sempre che errori 403 come questo quando si tenta di creare post (specialmente con blocchi di codice!) sono dovuti a un WAF troppo zelante che crede che i blocchi di codice siano shellcode o un attacco di iniezione.

Noto che l’istanza in questione sembra essere protetta da un WAF:

○ → host hpc-discourse.uni.lu
hpc-discourse.uni.lu è un alias di fstc-waf2.uni.lu.

e quindi sospetto fortemente che gli errori 403 provengano non da Discourse, ma dal tuo WAF.

L’ispezione delle intestazioni degli errori nel browser dovrebbe essere in grado di dirti la fonte del rifiuto.

7 Mi Piace

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