Tìm thấy giải pháp
TẠI SAO vấn đề này đã đến:
Bản dựng docker (để tạo hình ảnh) đã được chạy trên một máy (máy khác, nơi cmake đang hoạt động bên trong bộ chứa docker)... tức là nơi FIPS chưa được cài đặt.
Trong bước xây dựng, tệp Docker đang chạy
zypper cài đặt cmake
(hoặc yum cài đặt cmake
).
Vì FIPS đã bị vô hiệu hóa trên máy nơi hình ảnh docker được tạo, cmake đã được cài đặt trong hình ảnh docker, mà không hiểu FIPS đang được bật/dracut-fips đang được cài đặt.
Sau đó, khi bạn sao chép hình ảnh này và sử dụng nó trên một máy mà FIPS thực sự được BẬT, thì cmake đã không thành công với thông báo lỗi đó: crypto/fips/fips.c:153: Lỗi nội bộ OpenSSL: FATAL FIPS TỰ KIỂM TRA LỖI
Trên thực tế có 2 giải pháp.
--
Giải pháp số 1: Gắn thẻ hình ảnh docker của bạn một cách thích hợp.
Tóm lược:
Tái bút: Nếu bạn cài đặt cmake bằng cách sử dụng ở trên, thì nó sẽ chỉ hoạt động trên máy đích nơi bạn chạy bộ chứa, nếu FIPS của máy đó bị tắt hoặc bật khi xây dựng. tức là nếu FIPS đã được bật, bạn cài đặt cmake và chạy nó trên một máy có cài đặt FIPS KHÔNG giống với máy chủ, nơi hình ảnh được tạo, thì bạn sẽ đọc bài đăng này để được trợ giúp.
Cách tốt hơn trong trường hợp bạn muốn cài đặt cmake bằng các trình quản lý gói ở trên, đó là gắn thẻ hình ảnh docker của bạn một cách thích hợp trong thời gian tạo hình ảnh, tức là:
docker build -t <image-name>-fips-enabled ...
nếu FIPS được bật
và
docker build -t <image-name>-fips-disabled ...
nếu FIPS trên máy đó bị vô hiệu hóa.
Bằng cách đó, bạn có thể chọn hình ảnh docker chính xác imagename-fips-enabled so với imagename-fips-disabled acc. cài đặt FIPS máy mục tiêu của bạn là gì (nơi bạn thực sự sẽ thực hiện docker chạy...
sử dụng hình ảnh này).
--
Giải pháp số 2: Không sử dụng zypper (OpenSuse) hoặc yum nếu bạn có bộ chứa RedHat.
và giải pháp này là linh hoạt theo nghĩa, đó là độc lập với cài đặt FIPS = 0/1 trên máy chủ, nơi hình ảnh được xây dựng.
tôi đã không sử dụng dây kéo
/ngon
để cài đặt cmake
phía trong Dockerfile
, nhưng chỉ cần nắm lấy cmake-3.18.2-Linux-x86_64.tar.gz tập tin bó.
Trong Dockerfile, tôi chỉ cần trích xuất tệp .tar.gz này bên trong một số thư mục.
Ngoài ra tôi thiết lập xuất PATH:/path/where/I/installed/cmake-3.18.2../bin:/..some_other_paths:/...:/....
trong Dockerfile bên trong câu lệnh RUN.
I E.
RUN export PATH=/path/where/I/installed/cmake-3.18.2../bin:/...... && <thêm cmds tại đây> && <một số cmds khác tại đây> && ... v.v.
, vì vậy nó có thể tìm thấy cmake 3.18.2 đã trích xuất cho bất kỳ thời gian xây dựng nào (thao tác cmake) và cũng SET giống nhau ĐƯỜNG=/... biến như ENV PATH=/.... cùng một giá trị được sử dụng trong RUN cho PATH
vì vậy trong thời gian chạy, khi bộ chứa chạy, $PATH đã sẵn sàng để tìm kiếm cmake
(phiên bản 3.18.2) thay vì sử dụng bất kỳ phiên bản nào hiện có /usr/bin/cmake hoặc một số thứ khác
).
Ảnh chụp nhanh 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 && \
và
như của tôi cái ô cài đặt đã được đặt thành 022, tôi đã không phải thực hiện bất kỳ thao tác chmod gà nào sau đây:
# echo -e "\n-- Đang cài đặt CMake ...\n" && \
# tar -xvzpf /tmp/cmake.tar.gz -C /home/docker_nonroot_user/tools/ && \
Bên trong container docker, như ĐƯỜNG ENV=/...
cũng được đặt trong Dockerfile cho đường dẫn đích này, đúng cmake
3.18.2 đã được sử dụng trong hành động thời gian chạy bộ chứa docker.
cmake vị trí được cài đặt trong trường hợp của tôi là:
/home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake
PATH bên trong bộ chứa docker là:
/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
KẾT QUẢ:
Sử dụng hình ảnh Docker được tạo bằng cách sử dụng GIẢI PHÁP #2 ở trên, tức là hình ảnh docker được xây dựng trên máy trong đó FIPS = 0 hay còn gọi là ĐÃ TẮT và sau đó, sử dụng chính hình ảnh này để tạo vùng chứa trên một máy chủ mục tiêu hoàn toàn khác trong đó FIPS = 1 hay còn gọi là ĐÃ BẬT, Tôi hiểu rồi:
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: Lỗi nội bộ OpenSSL: FATAL FIPS TỰ KIỂM TRA LỖI
Đã hủy bỏ (đổ lõi)
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
tổng số 75504
-rwxr-xr-x 1 gốc gốc 11908568 Ngày 20 tháng 8 năm 2020 ccmake
-rwxr-xr-x 1 root root 12096216 20 Tháng tám 2020 cmake
-rwxr-xr-x 1 root root 27476480 Ngày 20 tháng 8 năm 2020 cmake-gui
-rwxr-xr-x 1 gốc gốc 12398808 Ngày 20 tháng 8 năm 2020 cpack
-rwxr-xr-x 1 gốc gốc 13318712 Ngày 20 tháng 8 năm 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 Ngày 20 tháng 8 năm 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
phiên bản cmake 3.18.2
Bộ CMake được duy trì và hỗ trợ bởi Kitware (kitware.com/cmake).
87d8104d8c41:/home/docker_nonroot_user # : Giáng sinh vui vẻ Baaaaeeeebyyy! - không còn lỗi chết tiệt FIPS nữa. Tiếp theo, tôi sẽ sửa một số chown on ~<user> và đóng câu chuyện của mình.
GIẢI PHÁP #3: Bạn có thể tắt FIPS nhưng chỉ khi bạn được phép làm như vậy, thì bạn không cần giải pháp số 1 hoặc giải pháp số 2.