เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | 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


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: