<ก่อนหน้านี้ | Contents | ถัดไป>
6.9.1. การติดตั้ง Glibc
หมายเหตุ
ระบบบิลด์ของ Glibc มีอยู่ในตัวเองและจะติดตั้งได้อย่างสมบูรณ์ แม้ว่าไฟล์ข้อมูลจำเพาะของคอมไพเลอร์และตัวลิงก์จะยังชี้ไปที่ /เครื่องมือ. ไม่สามารถปรับเปลี่ยนข้อกำหนดและตัวเชื่อมโยงก่อนการติดตั้ง Glibc เนื่องจากการทดสอบ autoconf ของ Glibc จะให้ผลลัพธ์ที่ผิดพลาดและเอาชนะเป้าหมายในการบรรลุการสร้างที่สะอาดหมดจด
หมายเหตุ
ระบบบิลด์ของ Glibc มีอยู่ในตัวเองและจะติดตั้งได้อย่างสมบูรณ์ แม้ว่าไฟล์ข้อมูลจำเพาะของคอมไพเลอร์และตัวลิงก์จะยังชี้ไปที่ /เครื่องมือ. ไม่สามารถปรับเปลี่ยนข้อกำหนดและตัวเชื่อมโยงก่อนการติดตั้ง Glibc เนื่องจากการทดสอบ autoconf ของ Glibc จะให้ผลลัพธ์ที่ผิดพลาดและเอาชนะเป้าหมายในการบรรลุการสร้างที่สะอาดหมดจด
โปรแกรม Glibc บางโปรแกรมใช้คอมไพเลอร์ที่ไม่ใช่ FHS /var/db ไดเร็กทอรีเพื่อเก็บข้อมูลรันไทม์ ใช้โปรแกรมแก้ไขต่อไปนี้เพื่อให้โปรแกรมดังกล่าวจัดเก็บข้อมูลรันไทม์ในตำแหน่งที่สอดคล้องกับ FHS:
แพทช์ -Np1 -i ../glibc-2.30-fhs-1.patch
แพทช์ -Np1 -i ../glibc-2.30-fhs-1.patch
แก้ไขปัญหาที่เกิดขึ้นกับเคอร์เนล linux-5.2:
sed -i '/asm.socket.h/a# รวม ' \ sysdeps/unix/sysv/linux/bits/socket.h
sed -i '/asm.socket.h/a# รวม ' \ sysdeps/unix/sysv/linux/bits/socket.h
-sfv
-sfv
-sfv
-sfv
../lib/ld-linux-x86-64.so.2 /lib64
../lib/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3
../lib/ld-linux-x86-64.so.2 /lib64
../lib/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3
สร้าง symlink สำหรับการปฏิบัติตาม LSB นอกจากนี้ สำหรับ x86_64 ให้สร้าง symlink ที่เข้ากันได้ที่จำเป็นสำหรับตัวโหลดแบบไดนามิกเพื่อให้ทำงานได้อย่างถูกต้อง:
กรณี $(uname -m) ใน
กรณี $(uname -m) ใน
ฉัน?86)
;;
x86_64) ล
ln
;;
ว่า C
-sfv
ld-linux.so.2 /lib/ld-lsb.so.3
ฉัน?86)
;;
x86_64) ล
ln
;;
ว่า C
เอกสารประกอบ Glibc แนะนำให้สร้าง Glibc ในไดเร็กทอรีบิลด์เฉพาะ:
mkdir -v บิลด์ซีดี
mkdir -v บิลด์ซีดี
เตรียม Glibc สำหรับการรวบรวม:
CC="gcc -ffile-prefix-map=/tools=/usr" \
../configure --prefix=/usr
--disable-ข้อผิดพลาด
--enable-เคอร์เนล=3.2
--enable-stack-protector=strong
--with-headers=/usr/include libc_cv_slibdir=/lib
\
\
\
\
\
CC="gcc -ffile-prefix-map=/tools=/usr" \
../configure --prefix=/usr
--disable-ข้อผิดพลาด
--enable-เคอร์เนล=3.2
--enable-stack-protector=strong
--with-headers=/usr/include libc_cv_slibdir=/lib
ความหมายของตัวเลือกและพารามิเตอร์กำหนดค่าใหม่:
CC="gcc -ffile-prefix-map=/tools=/usr"
ทำให้ GCC บันทึกการอ้างอิงถึงไฟล์ใน /tools อันเป็นผลมาจากการรวบรวมราวกับว่าไฟล์นั้นอยู่ใน /usr เพื่อหลีกเลี่ยงการแนะนำเส้นทางที่ไม่ถูกต้องในสัญลักษณ์การดีบัก
--disable-ข้อผิดพลาด
ตัวเลือกนี้ปิดใช้งานตัวเลือก -Werror ที่ส่งผ่านไปยัง GCC นี่เป็นสิ่งจำเป็นสำหรับการรันชุดทดสอบ
--enable-stack-protector=strong
ตัวเลือกนี้เพิ่มความปลอดภัยของระบบโดยการเพิ่มโค้ดพิเศษเพื่อตรวจสอบบัฟเฟอร์โอเวอร์โฟลว์ เช่น การโจมตีแบบ stack smashing
--with-headers=/usr/include
ตัวเลือกนี้จะบอกระบบบิลด์ว่าจะหาส่วนหัว API ของเคอร์เนลได้ที่ไหน โดยค่าเริ่มต้น ส่วนหัวเหล่านั้นจะถูกค้นหาใน
/เครื่องมือ/รวม.
libc_cv_slibdir=/lib
ตัวแปรนี้ตั้งค่าไลบรารีที่ถูกต้องสำหรับทุกระบบ เราไม่ต้องการให้มีการใช้ lib64
รวบรวมแพ็คเกจ:
ทำ
ทำ
สำคัญ
ในส่วนนี้ ชุดทดสอบสำหรับ Glibc ถือว่ามีความสำคัญ ห้ามข้ามไม่ว่ากรณีใดๆ
สำคัญ
ในส่วนนี้ ชุดทดสอบสำหรับ Glibc ถือว่ามีความสำคัญ ห้ามข้ามไม่ว่ากรณีใดๆ
/lib ;;
/lib ;;
-sfnv $PWD/เอลฟ์/ld-linux-x86-64.so.2 /lib ;;
-sfnv $PWD/เอลฟ์/ld-linux-x86-64.so.2 /lib ;;
โดยทั่วไป การทดสอบบางอย่างไม่ผ่าน ความล้มเหลวในการทดสอบที่แสดงด้านล่างมักจะปลอดภัยที่จะเพิกเฉย
กรณี $(uname i?86) ln x86_64) ln
ว่า C
-m) ใน
-sfnv $PWD/เอลฟ์/ld-linux.so.2
กรณี $(uname i?86) ln x86_64) ln
ว่า C
หมายเหตุ
ลิงก์สัญลักษณ์ด้านบนจำเป็นสำหรับการทดสอบในขั้นตอนของการสร้างในสภาพแวดล้อมของ chroot มันจะถูกเขียนทับในขั้นตอนการติดตั้งด้านล่าง
หมายเหตุ
ลิงก์สัญลักษณ์ด้านบนจำเป็นสำหรับการทดสอบในขั้นตอนของการสร้างในสภาพแวดล้อมของ chroot มันจะถูกเขียนทับในขั้นตอนการติดตั้งด้านล่าง
ทำการตรวจสอบ
ทำการตรวจสอบ
คุณอาจเห็นความล้มเหลวในการทดสอบบางอย่าง ชุดทดสอบ Glibc ค่อนข้างขึ้นอยู่กับระบบโฮสต์ นี่คือรายการปัญหาทั่วไปที่พบใน LFS บางเวอร์ชัน:
• อื่น ๆ / tst-ttyname เป็นที่ทราบกันว่าล้มเหลวในสภาพแวดล้อม LFS chroot
• inet/tst-idna_name_classify เป็นที่ทราบกันว่าล้มเหลวในสภาพแวดล้อม LFS chroot
• posix/tst-getaddrinfo4 และ posix/tst-getaddrinfo5 อาจล้มเหลวในบางสถาปัตยกรรม
•ความ nss/tst-nss-files-hosts-multi การทดสอบอาจล้มเหลวด้วยเหตุผลที่ยังไม่ได้กำหนด
•ความ rt/tst-ซีพียู{1,2,3} การทดสอบขึ้นอยู่กับเคอร์เนลของระบบโฮสต์ เคอร์เนล 4.14.91–4.14.96, 4.19.13–4.19.18 และ 4.20.0–4.20.5 เป็นที่ทราบกันดีว่าทำให้การทดสอบเหล่านี้ล้มเหลว
• การทดสอบคณิตศาสตร์บางครั้งล้มเหลวเมื่อทำงานบนระบบที่ CPU ไม่ใช่โปรเซสเซอร์ Intel หรือ AMD ที่ค่อนข้างใหม่
แม้ว่าจะเป็นข้อความที่ไม่เป็นอันตราย ขั้นตอนการติดตั้งของ Glibc จะบ่นว่าไม่มี /etc/ld.so.conf. ป้องกันคำเตือนนี้ด้วย:
แตะ /etc/ld.so.conf
แตะ /etc/ld.so.conf
แก้ไข Makefile ที่สร้างขึ้นเพื่อข้ามการตรวจสอบสุขภาพจิตที่ไม่จำเป็นซึ่งล้มเหลวในสภาพแวดล้อมบางส่วนของ LFS:
sed '/test-installation/s@$(PERL)@echo ไม่ทำงาน@' -i ../Makefile
sed '/test-installation/s@$(PERL)@echo ไม่ทำงาน@' -i ../Makefile
ติดตั้งแพ็คเกจ:
ให้ติดตั้ง
ให้ติดตั้ง
ติดตั้งไฟล์คอนฟิกูเรชันและไดเร็กทอรีรันไทม์สำหรับ เอ็นซีดี:
ซีพี -v ../nscd/nscd.conf /etc/nscd.conf mkdir -pv /var/cache/nscd
ซีพี -v ../nscd/nscd.conf /etc/nscd.conf mkdir -pv /var/cache/nscd
ถัดไป ติดตั้งโลแคลที่ทำให้ระบบตอบสนองในภาษาอื่น ไม่จำเป็นต้องใช้โลแคลใดๆ แต่ถ้าบางอันหายไป ชุดทดสอบของแพ็คเกจในอนาคตจะข้ามกรณีทดสอบที่สำคัญ
สามารถติดตั้งแต่ละโลแคลได้โดยใช้ localdef โปรแกรม. เช่น ครั้งแรก localdef คำสั่งด้านล่างรวม /usr/share/i18n/locales/cs_CZ คำจำกัดความสถานที่ไม่ขึ้นกับชุดอักขระด้วยเครื่องหมาย /usr/share/i18n/ charmaps/UTF-8.gz คำจำกัดความของ charmap และผนวกผลลัพธ์เข้ากับ /usr/lib/locale/locale- เก็บถาวร ไฟล์. คำแนะนำต่อไปนี้จะติดตั้งชุดภาษาขั้นต่ำที่จำเป็นสำหรับการทดสอบที่ครอบคลุม:
mkdir -pv /usr/lib/locale.mkdir
localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || localedef จริง -i cs_CZ -f UTF-8 cs_CZ.UTF-8
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i de_DE -f UTF-8 de_DE.UTF-8
localedef -i el_GR -f ISO-8859-7 el_GR localedef -i en_GB -f UTF-8 en_GB.UTF-8 localedef -i en_HK -f ISO-8859-1 en_HK localedef -i en_PH -f ISO-8859-1 en_PH localedef -i en_US -f ISO-8859-1 en_US localedef -i en_US -f UTF-8 en_US.UTF-8 localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fa_IR -f UTF-8 fa_IR localedef - ฉัน fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT localedef -i it_IT -f UTF-8 it_IT.UTF-8 localedef -i ja_JP -f EUC-JP ja_JP
localedef -i ja_JP -f SHIFT_JIS ja_JP.SIJS 2> /dev/null || localedef จริง -i ja_JP -f UTF-8 ja_JP.UTF-8
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 localedef -i zh_CN -f GB18030 zh_CN .GB18030
localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS
นอกจากนี้ ให้ติดตั้งโลแคลสำหรับประเทศ ภาษา และชุดอักขระของคุณเอง
อีกทางหนึ่ง ติดตั้งโลแคลทั้งหมดที่ระบุไว้ใน glibc-2.30/localedata/สนับสนุน ไฟล์ (รวมทุกสถานที่ที่ระบุไว้ข้างต้นและอื่น ๆ อีกมากมาย) พร้อมกันด้วยคำสั่งที่ใช้เวลานานต่อไปนี้:
ทำ localedata/install-locales
ทำ localedata/install-locales
จากนั้นใช้ localdef คำสั่งเพื่อสร้างและติดตั้งโลแคลที่ไม่อยู่ใน glibc-2.30/localedata/ รองรับ ไฟล์ในกรณีที่คุณต้องการ
หมายเหตุ
ตอนนี้ Glibc ใช้ libidn2 เมื่อแก้ไขชื่อโดเมนสากล นี่คือการพึ่งพารันไทม์ หากจำเป็นต้องใช้ความสามารถนี้ คำแนะนำสำหรับการติดตั้ง libidn2 จะอยู่ในหน้า BLFS libidn2
หมายเหตุ
ตอนนี้ Glibc ใช้ libidn2 เมื่อแก้ไขชื่อโดเมนสากล นี่คือการพึ่งพารันไทม์ หากจำเป็นต้องใช้ความสามารถนี้ คำแนะนำสำหรับการติดตั้ง libidn2 จะอยู่ในหน้า BLFS libidn2