خطأ مع كتل التعليمات البرمجية: 403 ممنوع

لقد توليت مؤخرًا إدارة خادم discourse، وهناك بعض المشكلات.

  1. لدي مشكلات مستمرة عند محاولة إنشاء أو تعديل منشور يحتوي على كتل تعليمات برمجية. عند محاولة إنشاء أو تعديل منشور بكتلة التعليمات البرمجية
(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
...

أتلقى خطأ 403 Forbidden.

  1. لا يدعم Markdown تمييز التعليمات البرمجية، وإضافة أي مواصفات بناء الجملة يؤدي إلى خطأ 403 Forbidden.

  2. تتسبب مقاطع التعليمات البرمجية المضمنة أيضًا في حدوث 403 Forbidden في بعض المواقع وليس كلها، بالنسبة لكتل التعليمات البرمجية الأخرى.

الإصدار المثبت هو 3.1.1 ( 0612f0d5b6 ).

هل هذه المشكلات مرتبطة، وما الذي يمكن أن يسبب هذا السلوك؟

مثال على منشور: Compiling OpenFOAM with Spack - 📚 Knowledge nuggets - HPC discourse

النتيجة المقصودة:

هناك بعض المشكلات عند تثبيت OpenFOAM من OpenCFD باستخدام Spack.

تم إعداد بيئة لإدارة الحزم باستخدام Spack باتباع التعليمات الواردة في برنامج UL HPC التعليمي. باختصار، تم تعريف التبعيات التالية لحزم 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

وتم تعريف الخيارات التالية لدلائل ذاكرة التخزين المؤقت للبناء،

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

لتسريع عملية التجميع باستخدام نظام ملفات ذاكرة الوصول العشوائي. قبل المتابعة إلى تثبيت OpenFOAM، يتم تثبيت الإصدار المطلوب من Open MPI باستخدام المترجم النظامي:

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

يتم تثبيت توزيع OpenFOAM باستخدام المترجم النظامي أيضًا. المكونات المتاحة لـ OpenFOAM هي:

(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 باستخدام جميع أدوات التقسيم المتاحة (metis، scotch، zoltan، kahip) ومكونات مولد الشبكة المتعددة (mgridgen، القسم 6.3.1.4 من الوثائق) باستخدام الأمر:

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

ومع ذلك، فإن التثبيت الناتج يفتقر إلى مكونات متعددة. على سبيل المثال، عند تنفيذ التحقق اليدوي بعد التثبيت في doc/Build.md،

# Create the user "run" directory:
mkdir -p "$FOAM_RUN"
# Change to the user "run" directory:
run
# Copy tutorial
cp -r "$FOAM_TUTORIALS"/incompressible/simpleFoam/pitzDaily ./
# Run the tutorial
( cd pitzDaily && blockMesh && simpleFoam )

كل من مولد الشبكة blockMesh والمحلل simpleFoam مفقودان.

يتضح أن أداة التقسيم METIS تسبب فشل تثبيت مكونات متعددة. إعادة التجميع باستخدام أداة التقسيم SCOTCH فقط،

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

يحل المشكلة. يتم تثبيت جميع مكونات المحلل، ولكن لا يزال هناك عدد قليل من الأدوات المساعدة مفقودة.

نستخدم البرنامج النصي التالي لاكتشاف جميع المكونات المفقودة:

(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}"

يُظهر التشغيل البسيط للبرنامج النصي أن الأدوات المساعدة التالية مفقودة:

(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

من الصعب تحديد ذلك، تميل المشكلات المتعلقة بـ Markdown إلى عدم كونها 403 ولكنها تقدم بعض الملاحظات المرئية للمؤلف. تميل أخطاء 403 الخاصة بنا إلى أن تكون متعلقة بالترخيص، مثل النشر في فئة مقيدة، أو استخدام علامة مقيدة.

لقد استخدمت أجزاء النص الخاصة بك في نسخة قياسية من Discourse ويبدو أنها تعمل بشكل جيد.

هل يمكنني أن أقترح عليك التحقق مع المشرف الخاص بك لمعرفة ما إذا كانت مثل هذه القيود مطبقة؟

4 إعجابات

بالإضافة إلى ذلك، نجد دائمًا تقريبًا أن أخطاء 403 مثل هذه عند محاولة إنشاء مشاركات (خاصة مع كتل التعليمات البرمجية!) تكون بسبب جدار حماية تطبيقات الويب المفرط في الحماس والذي يعتقد أن كتل التعليمات البرمجية هي shellcode أو هجوم حقن.

ألاحظ أن المثيل المعني يبدو أنه يواجه جدار حماية تطبيقات الويب:

○ → host hpc-discourse.uni.lu
hpc-discourse.uni.lu هو اسم مستعار لـ fstc-waf2.uni.lu.

وبالتالي، أشك بشدة في أن أخطاء 403 تأتي ليس من Discourse، بل من جدار حماية تطبيقات الويب الخاص بك.

يجب أن يكون فحص رؤوس الأخطاء في المتصفح قادرًا على إخبارك بمصدر الرفض.

7 إعجابات

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