Am gasit solutia
DE CE venea problema asta:
Docker build (pentru a crea imaginea) a fost rulat pe o mașină (cealaltă mașină, unde cmake lucra în interiorul containerului docker)... adică unde FIPS nu a fost instalat.
În timpul etapei de construire, fișierul Docker rula
zypper install cmake
(sau yum instalează cmake
).
Deoarece FIPS a fost dezactivat pe mașina unde a fost creată imaginea docker, cmake a fost instalat în imaginea docker, fără a înțelege că FIPS este activat / dracut-fips este instalat.
Apoi, când copiați această imagine și o consumați pe o mașină în care FIPS este de fapt ACTIVAT, atunci cmake a eșuat cu mesajul de eroare: crypto/fips/fips.c:153: Eroare internă OpenSSL: Eșec FATAL FIPS SELFTEST
De fapt, există 2 soluții.
--
Soluția #1: etichetați imaginea docker în mod corespunzător.
Rezumat:
PS: Dacă instalați cmake folosind cele de mai sus, atunci va funcționa numai pe mașina țintă pe care rulați containerul, dacă FIPS-ul acelei mașini este dezactivat sau activat în timpul construirii. adică dacă a fost activat FIPS, instalați cmake și îl rulați pe o mașină în care NU este aceeași setare FIPS ca și gazda, unde a fost creată imaginea, atunci veți citi această postare pentru ajutor.
O modalitate mai bună, în cazul în care doriți să instalați cmake folosind managerii de pachete de mai sus, ar fi să etichetați imaginea docker în mod corespunzător în timpul creării imaginii, adică:
docker build -t <nume-imagine>-fips-enabled...
dacă FIPS este activat
și
docker build -t <nume-imagine>-fips-disabled...
dacă FIPS pe acel aparat este dezactivat.
În acest fel, puteți alege imaginea docker corectă imagename-fips-activat vs imagename-fips-disabled conform la care este setarea FIPS pentru mașina dvs. țintă (unde veți efectua de fapt docker run...
folosind această imagine).
--
Soluția #2: Nu utilizați zypper (OpenSuse) sau yum dacă aveți un container RedHat.
și această soluție este flexibilă în sensul că este independent de setarea FIPS = 0 / 1 pe gazdă, unde a fost construită imaginea.
nu am folosit zypper
/yum
a instala cmake
interior Dockerfile
, dar doar apucat cmake-3.18.2-Linux-x86_64.tar.gz fișier pachet.
În Dockerfile, pur și simplu am extras acest fișier .tar.gz în interiorul unui director.
De asemenea, am stabilit export PATH:/path/where/I/installed/cmake-3.18.2../bin:/..some_other_paths:/...:/....
în Dockerfile în interiorul instrucțiunii RUN.
adică
RUN export PATH=/path/where/I/installed/cmake-3.18.2../bin:/...... && <mai multe cmd-uri aici> && <alte cmd-uri aici> && ... etc
, astfel încât să găsească cmake extras 3.18.2 pentru orice timp de construcție (operațiuni cmake) și, de asemenea, să seteze același lucru PATH=/... variabilă ca ENV PATH=/.... aceeași valoare folosită în timpul RUN pentru PATH
deci, în timpul rulării, când containerul rulează, $PATH este setat pentru găsire cmake
(versiunea 3.18.2) mai degrabă decât utilizarea oricăruia existent /usr/bin/cmake sau alte rahaturi
).
Instantaneu Dockerfile:
# curl -k -sSf -H "X-JFrog-Art-Api:dslfhjlieurqwihlj233lk2l4j6p9usdkajdfasddl809842iijhlkhflhafOHIHFLyeaGoodLuck" \
# -o /tmp/cmake.tar.gz https://artifactory.company.com/artifactory/some-Local/cmake/cmake-3.18.2-Linux-x86_64.tar.gz && \
și
ca al meu umask setările au fost setate la 022, nu a trebuit să fac nicio operațiune de chicken chmod post untar:
# echo -e "\n-- Se instalează CMake ...\n" && \
# tar -xvzpf /tmp/cmake.tar.gz -C /home/docker_nonroot_user/tools/ && \
În interiorul containerului docker, ca ENV PATH=/...
a fost setat în Dockerfile și pentru această cale țintă, corectă cmake
3.18.2 a fost folosit la acțiunea de rulare a containerului docker.
cmake locația instalată în cazul meu a fost:
/home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake
PATH în interiorul containerului docker a fost:
/home/docker_nonroot_user/tools/cov-analysis/bin:/home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin :/usr/bin:/sbin:/bin
REZULTAT:
Folosind o imagine Docker creată folosind SOLUȚIA #2 mai sus, adică imaginea docker construită pe o mașină unde FIPS = 0 aka DISABLED și apoi mai târziu, folosind aceeași imagine pentru a crea un container pe o mașină gazdă țintă total diferită unde FIPS = 1 și anume ACTIVAT, Înțeleg:
87d8104d8c41:/home/docker_nonroot_user # sysctl -a|grep fips_en
crypto.fips_enabled = 1
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # which cmake
/usr/bin/cmake
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # cmake --version
crypto/fips/fips.c:153: Eroare internă OpenSSL: Eșec FATAL FIPS SELFTEST
Avortat (core dumping)
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # ls -l /home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin
total 75504
-rwxr-xr-x 1 rădăcină rădăcină 11908568 20 august 2020 ccmake
-rwxr-xr-x 1 rădăcină rădăcină 12096216 20 august 2020 cmake
-rwxr-xr-x 1 rădăcină rădăcină 27476480 20 august 2020 cmake-gui
-rwxr-xr-x 1 root root 12398808 20 august 2020 cpack
-rwxr-xr-x 1 rădăcină rădăcină 13318712 20 august 2020 ctest
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # ls -l /home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake
-rwxr-xr-x 1 root root 12096216 20 august 2020 /home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # /home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake --version
cmake versiunea 3.18.2
Suita CMake întreținută și susținută de Kitware (kitware.com/cmake).
87d8104d8c41:/home/docker_nonroot_user # : Crăciun fericit Baaaaeeebyyy! - nu mai există nicio eroare de rahat FIPS acum. În continuare, voi repara ceva chown pe ~<user> și voi închide povestea mea.
SOLUȚIA #3: Puteți dezactiva FIPS dar numai dacă ai voie să faci asta, atunci nu aveți nevoie de soluția #1 sau soluția #2.