Решение найдено
ПОЧЕМУ этот вопрос приближался:
Сборка Docker (для создания образа) была запущена на машине (другой машине, где cmake работал внутри контейнера докеров)... т. е. где не был установлен FIPS.
На этапе сборки был запущен файл Docker.
zypper установить cmake
(или же ням установить cmake
).
Поскольку FIPS был отключен на машине, на которой был создан образ докера, cmake был установлен в образе докера, не понимая, что FIPS включен/установлен dracut-fips.
Затем, когда вы копируете этот образ и используете его на машине, где FIPS фактически ВКЛЮЧЕН, тогда cmake завершается ошибкой с этим сообщением об ошибке: crypto/fips/fips.c:153: внутренняя ошибка OpenSSL: FATAL FIPS SELFTEST FAILURE
На самом деле есть 2 решения.
--
Решение №1: правильно пометьте образ докера.
Резюме:
PS: Если вы установите cmake, используя приведенное выше, то он будет работать только на целевой машине, на которой вы запускаете контейнер, если FIPS этой машины отключен или включен во время сборки. т. е. если FIPS был включен, вы устанавливаете cmake и запускаете его на машине, где настройки FIPS НЕ совпадают с настройками хоста, на котором был создан образ, тогда вы будете читать этот пост для получения помощи.
Лучшим способом, если вы хотите установить cmake с помощью вышеуказанных менеджеров пакетов, было бы правильно пометить образ докера во время создания образа, т.е.:
docker build -t <image-name>-fips-enabled...
если FIPS включен
и
docker build -t <image-name>-fips-disabled ...
если FIPS на той то машине отключен.
Таким образом, вы можете выбрать правильный образ докера. imagename-fips-включено против imagename-fips-отключен соотв. какова настройка FIPS вашей целевой машины (где вы фактически будете выполнять докер работает...
используя это изображение).
--
Решение №2: не используйте zypper (OpenSuse) или yum, если у вас есть контейнер RedHat.
и это решение является гибким в том смысле, что это независимо от настройки FIPS = 0 / 1 на хосте, на котором был создан образ.
я не использовал застежка-молния
/ням
установить cmake
внутри Докерфайл
, а просто схватил cmake-3.18.2-Linux-x86_64.tar.gz пакетный файл.
В Dockerfile я просто извлек этот файл .tar.gz в какой-то каталог.
Также я установил экспортировать ПУТЬ:/путь/куда/я/установил/cmake-3.18.2../bin:/..some_other_paths:/...:/....
в Dockerfile внутри оператора RUN.
то есть
RUN export PATH=/path/where/I/installed/cmake-3.18.2../bin:/...... && <здесь больше команд> && <здесь еще несколько команд> && ... и т.д.
, поэтому он может найти извлеченный cmake 3.18.2 для любого времени сборки (операции cmake), а также установить то же самое ПУТЬ=/... переменная как ENV PATH=/.... то же значение, которое используется во время RUN для PATH
поэтому во время выполнения, когда контейнер запускается, $PATH настроен для поиска cmake
(версия 3.18.2), а не использовать какие-либо существующие /usr/bin/cmake или еще какая хрень
).
Снимок Dockerfile:
# curl -k -sSf -H "X-JFrog-Art-Api:dslfhjlieurqwihlj233lk2l4j6p9usdkajdfasddl809842iiijhlkhflhafOHIHFLyeaGoodLuck" \
# -o /tmp/cmake.tar.gz https://artifactory.company.com/artifactory/some-Local/cmake/cmake-3.18.2-Linux-x86_64.tar.gz && \
и
Как мой умаск настройки были установлены на 022, мне не пришлось выполнять какую-либо операцию chmod после распаковки:
# echo -e "\n-- Установка CMake ...\n" && \
# tar -xvzpf /tmp/cmake.tar.gz -C /home/docker_nonroot_user/tools/ && \
Внутри док-контейнера, как ПУТЬ ОКОНЧ.=/...
был установлен в Dockerfile для этого целевого пути, правильный cmake
3.18.2 использовался во время выполнения контейнера докеров.
cmake установленное местоположение в моем случае было:
/home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake
ПУТЬ внутри контейнера докеров был:
/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/бен:/sbin:/бен
РЕЗУЛЬТАТ:
Использование образа Docker, созданного с использованием РЕШЕНИЕ №2 выше, т.е. образ докера, созданный на машине где FIPS = 0, он же ОТКЛЮЧЕН и затем позже, используя этот же образ для создания контейнера на совершенно другой целевой хост-машине где FIPS = 1, он же ENABLED, Я понимаю:
87d8104d8c41:/home/docker_nonroot_user # sysctl -a|grep fips_en
крипто.fips_enabled = 1
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # который cmake
/usr/bin/cmake
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # cmake --version
crypto/fips/fips.c:153: внутренняя ошибка OpenSSL: FATAL FIPS SELFTEST FAILURE
Прервано (сброшено ядро)
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
всего 75504
-rwxr-xr-x 1 root root 11908568 20 августа 2020 г. ccmake
-rwxr-xr-x 1 root root 12096216 20 августа 2020 г. cmake
-rwxr-xr-x 1 root root 27476480 20 августа 2020 г. cmake-gui
-rwxr-xr-x 1 root root 12398808 20 августа 2020 г. cpack
-rwxr-xr-x 1 root root 13318712 20 августа 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 августа 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 версии 3.18.2
Пакет CMake поддерживается и поддерживается Kitware (kitware.com/cmake).
87d8104d8c41:/home/docker_nonroot_user # : С Рождеством Баааааааааааааааааааааааа! - больше нет дерьмовой ошибки FIPS. Далее я исправлю chown на ~<user> и закрою свою историю.
РЕШЕНИЕ №3: вы можете отключить FIPS но только если вам это разрешено, то вам не нужно решение №1 или решение №2.