พบวิธีแก้ปัญหา
ทำไม ปัญหานี้กำลังมา:
บิลด์นักเทียบท่า (เพื่อสร้างอิมเมจ) ถูกเรียกใช้บนเครื่อง (เครื่องอื่นที่ cmake ทำงานภายในคอนเทนเนอร์นักเทียบท่า)... เช่น ที่ไม่ได้ติดตั้ง FIPS
ในระหว่างขั้นตอนการสร้าง ไฟล์ Docker กำลังทำงานอยู่
zipper ติดตั้ง cmake
(หรือ ยำติดตั้ง cmake
).
เนื่องจาก FIPS ถูกปิดใช้งานบนเครื่องที่สร้างอิมเมจนักเทียบท่า ซมเมค ถูกติดตั้งในอิมเมจนักเทียบท่าโดยไม่เข้าใจว่าเปิดใช้งาน FIPS / ติดตั้ง dracut-fips
จากนั้น เมื่อคุณคัดลอกอิมเมจนี้และใช้งานบนเครื่องที่เปิดใช้งาน FIPS จริง ๆ แล้ว cmake จะล้มเหลวพร้อมกับข้อความแสดงข้อผิดพลาดนั้น: crypto/fips/fips.c:153: ข้อผิดพลาดภายใน OpenSSL: FATAL FIPS SELFTEST FAILURE
จริงๆแล้วมี 2 ทางแก้
--
โซลูชัน #1: แท็กภาพนักเทียบท่าของคุณอย่างเหมาะสม
สรุป:
ป.ล.: หากคุณติดตั้ง cmake โดยใช้ด้านบน มันจะทำงานบนเครื่องเป้าหมายที่คุณเรียกใช้คอนเทนเนอร์เท่านั้น หาก FIPS ของเครื่องนั้นถูกปิดใช้งานหรือเปิดใช้งานในขณะที่สร้าง เช่น หากเปิดใช้งาน FIPS คุณจะติดตั้ง cmake และเรียกใช้บนเครื่องที่ไม่มีการตั้งค่า FIPS เดียวกันกับโฮสต์ ซึ่งเป็นตำแหน่งที่สร้างอิมเมจ คุณจะอ่านโพสต์นี้เพื่อขอความช่วยเหลือ
วิธีที่ดีกว่าในกรณีที่คุณต้องการติดตั้ง cmake โดยใช้ตัวจัดการแพ็คเกจด้านบน จะเป็นการติดแท็กอิมเมจนักเทียบท่าของคุณอย่างเหมาะสมในช่วงเวลาสร้างอิมเมจ เช่น:
นักเทียบท่า build -t <image-name>-fips-enabled ...
หากเปิดใช้งาน FIPS
และ
นักเทียบท่า build -t <image-name>-fips-disabled ...
หาก FIPS บนเครื่องนั้นถูกปิดใช้งาน
ด้วยวิธีนี้ คุณสามารถเลือกอิมเมจนักเทียบท่าที่ถูกต้องได้ เปิดใช้ imagename-fips เทียบกับ imagename-fips-ปิดใช้งาน ตามมาตรฐาน การตั้งค่า FIPS ของเครื่องเป้าหมายของคุณคืออะไร (ซึ่งคุณจะต้องดำเนินการจริง นักเทียบท่ารัน ...
โดยใช้ภาพนี้)
--
โซลูชัน #2: อย่าใช้ zypper (OpenSuse) หรือ yum หากคุณมีคอนเทนเนอร์ RedHat
และ โซลูชันนี้มีความยืดหยุ่น ในความหมายก็คือ ไม่ขึ้นกับการตั้งค่า FIPS = 0/1 บนโฮสต์ที่สร้างอิมเมจ
ฉันไม่ได้ใช้ ซิป
/ยำ
ติดตั้ง ซมเมค
ข้างใน ไฟล์นักเทียบท่า
แต่เพิ่งคว้า cmake-3.18.2-Linux-x86_64.tar.gz ไฟล์บันเดิล.
ภายใน Dockerfile ฉันเพียงแค่แตกไฟล์ .tar.gz นี้ภายในบางไดเร็กทอรี
นอกจากนี้ฉันยังตั้งค่า ส่งออก PATH:/path/where/I/installed/cmake-3.18.2../bin:/..some_other_paths:/...:/....
ใน Dockerfile ภายในคำสั่ง RUN
เช่น.
RUN export PATH=/path/where/I/installed/cmake-3.18.2../bin:/...... && <cmds เพิ่มเติมที่นี่> && <cmds อื่น ๆ ที่นี่> && ... ฯลฯ
ดังนั้นจึงสามารถค้นหา cmake 3.18.2 ที่แยกออกมาสำหรับเวลาสร้าง (การดำเนินการ cmake) และ SET เหมือนกัน เส้นทาง=/... ตัวแปรเป็น ENV PATH=/.... ค่าเดียวกับที่ใช้ระหว่าง RUN สำหรับ PATH
ดังนั้นที่รันไทม์ เมื่อคอนเทนเนอร์ทำงาน $PATH ก็พร้อมสำหรับการค้นหา ซมเมค
(เวอร์ชัน 3.18.2) แทนที่จะใช้ที่มีอยู่ /usr/bin/cmake หรืออย่างอื่น
).
สแน็ปช็อตไฟล์นักเทียบท่า:
# 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 && \
และ
เป็นของฉัน อุมาสก์ การตั้งค่าถูกตั้งค่าเป็น 022ฉันไม่ต้องทำโพสต์การดำเนินการของไก่ chmod untar:
# echo -e "\n-- กำลังติดตั้ง CMake ...\n" && \
# tar -xvzpf /tmp/cmake.tar.gz -C /home/docker_nonroot_user/tools/ && \
ภายในคอนเทนเนอร์นักเทียบท่า เช่น เส้นทาง ENV=/...
ถูกตั้งค่าใน Dockerfile สำหรับพาธเป้าหมายนี้เช่นกัน ถูกต้อง ซมเมค
3.18.2 ถูกนำมาใช้ในการดำเนินการรันไทม์คอนเทนเนอร์นักเทียบท่า
ซมเมค ตำแหน่งที่ติดตั้งในกรณีของฉันคือ:
/home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake
PATH ภายในคอนเทนเนอร์นักเทียบท่าคือ:
/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
ผลลัพธ์:
การใช้อิมเมจ Docker ที่สร้างขึ้นโดยใช้ โซลูชั่น #2 ด้านบนคืออิมเมจนักเทียบท่าที่สร้างขึ้นในเครื่อง โดยที่ FIPS = 0 aka DISABLED และ จากนั้นใช้อิมเมจเดียวกันนี้เพื่อสร้างคอนเทนเนอร์ในภายหลัง บนเครื่องโฮสต์เป้าหมายที่แตกต่างกันโดยสิ้นเชิง โดยที่ FIPS = 1 aka ENABLED, เข้าใจแล้ว:
87d8104d8c41:/home/docker_nonroot_user # sysctl -a|grep fips_en
crypto.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 รูทรูท 11908568 20 ส.ค. 2020 ccmake
-rwxr-xr-x 1 รูทรูท 12096216 20 ส.ค. 2020 cmake
-rwxr-xr-x 1 รูทรูท 27476480 20 ส.ค. 2020 cmake-gui
-rwxr-xr-x 1 รูทรูท 12398808 20 ส.ค. 2020 cpack
-rwxr-xr-x 1 รูทรูท 13318712 20 ส.ค. 2020 ทดสอบ
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 รูทรูท 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 # : Merry X-mas Baaaaeebyyy! - ไม่มีข้อผิดพลาดอึ FIPS อีกต่อไป ต่อไปฉันจะแก้ไข chown ใน ~<user> และปิดเรื่องราวของฉัน
โซลูชั่น #3: คุณสามารถปิดใช้งาน FIPS แต่ถ้าคุณได้รับอนุญาตให้ทำเช่นนั้นคุณไม่จำเป็นต้องใช้โซลูชัน #1 หรือโซลูชัน #2