차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
linuxfromscratch:12.1:075-glibc-2.39 [2024/05/27 12:25] – 만듦 - 바깥 편집 127.0.0.1 | linuxfromscratch:12.1:075-glibc-2.39 [2024/06/17 05:52] (현재) – [8.5.1. Glibc 설치] baecy | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ^ Linux From Scratch - Version 12.1-systemd | ||
+ | ^ Chapter 8. Installing Basic System Software | ||
+ | |[[.: | ||
+ | |||
+ | |Iana-Etc-20240125 | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== 8.5. Glibc-2.39 ===== | ||
+ | |||
+ | Glibc 패키지에는 기본 C 라이브러리가 포함되어 있습니다. 이 라이브러리는 메모리 할당, 디렉터리 검색, 파일 열기 및 닫기, 파일 읽기 및 쓰기, 문자열 처리, 패턴 일치, 연산 등을 위한 기본 루틴을 제공합니다. | ||
+ | |||
+ | * **빌드 시간:** 12 SBU | ||
+ | * **디스크 공간:** 3.1GB | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== 8.5.1. Glibc 설치 ==== | ||
+ | |||
+ | 일부 Glibc 프로그램은 런타임 데이터를 저장할 때 FHS와 호환되지 않는 /var/db 디렉터리를 사용합니다. 다음과 같이 패치를 적용하여 이러한 프로그램이 런타임 데이터를 FHS 호환 위치에 저장하도록 하세요. | ||
+ | |||
+ | <code bash> | ||
+ | patch -Np1 -i ../ | ||
+ | </ | ||
+ | |||
+ | Glibc 문서에서는 별도의 디렉터리에서 Glibc를 빌드할 것을 권장합니다. | ||
+ | |||
+ | <code bash> | ||
+ | mkdir -v build | ||
+ | cd build | ||
+ | </ | ||
+ | |||
+ | **ldconfig** 및 **sln** 유틸리티가 ''/ | ||
+ | |||
+ | <code bash css=custom> | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | Glibc 컴파일을 준비합니다. | ||
+ | |||
+ | <code bash> | ||
+ | ../ | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | === configure 옵션 설명 === | ||
+ | |||
+ | * // | ||
+ | * // | ||
+ | * // | ||
+ | * // | ||
+ | * // | ||
+ | |||
+ | 패키지를 컴파일합니다 | ||
+ | |||
+ | <code bash> | ||
+ | make | ||
+ | </ | ||
+ | |||
+ | <WRAP important center round 90%> | ||
+ | **중요** \\ | ||
+ | 이 섹션에서는 Glibc에 대한 테스트 스위트가 매우 중요합니다. 어떤 상황에서도 건너뛰지 마세요. | ||
+ | </ | ||
+ | |||
+ | 통상적으로 몇 가지 테스트는 통과하지 못합니다. 아래에 나열된 테스트 실패는 일반적으로 무시해도 안전합니다. | ||
+ | |||
+ | <code bash> | ||
+ | make check | ||
+ | </ | ||
+ | |||
+ | 몇 가지 테스트 실패가 표시될 수 있습니다. Glibc 테스트 스위트는 호스트 시스템에 따라 다소 달라집니다. 5000개가 넘는 테스트 중 몇 가지 실패는 일반적으로 무시할 수 있습니다. 다음은 최신 버전의 LFS에서 가장 흔히 볼 수 있는 테스트 실패 목록입니다: | ||
+ | |||
+ | * // | ||
+ | * 일부 테스트(예: | ||
+ | * 또한 일부 테스트는 비교적 오래된 CPU 모델(예: // | ||
+ | |||
+ | Glibc의 설치 단계에서 ''/ | ||
+ | |||
+ | <code bash> | ||
+ | touch / | ||
+ | </ | ||
+ | |||
+ | 최신 Glibc 구성에서 실패하는 오래된 무결성 검사를 건너뛰도록 메이크파일을 수정합니다: | ||
+ | |||
+ | <code bash> | ||
+ | sed '/ | ||
+ | </ | ||
+ | |||
+ | <WRAP important center round 90%> | ||
+ | **중요** \\ | ||
+ | 실행 중인 LFS 시스템에서 Glibc를 마이너 버전 업그레이드를 하는 경우(예: Glibc-2.36에서 Glibc-2.39로) 시스템 중단을 방지하기 위해 몇 가지 추가 예방 조치를 취해야 합니다. | ||
+ | |||
+ | * 11.0 이전 버전 한정으로 LFS 시스템에서 Glibc를 업그레이드하는 것은 지원되지 않습니다. 이러한 구형 LFS 시스템을 실행 중이지만 최신 Glibc가 필요한 경우 LFS를 다시 빌드해야 합니다. | ||
+ | * 12.0 이전 버전 한정으로 이전 LFS 시스템에서 업그레이드하는 경우 [[.: | ||
+ | * 12.1 이전 버전 한정으로 이전 LFS 시스템에서 업그레이드하는 경우 **nscd** 프로그램을 제거하세요. <code bash>rm -f / | ||
+ | * 커널이 4.19보다 오래된 경우 업그레이드하고 재부팅하거나(**uname -r**로 현재 버전을 확인), 어쨌든 업그레이드하려면 [[.: | ||
+ | * 커널 API 헤더가 4.19보다 오래된 경우 업그레이드합니다(**cat / | ||
+ | * 한번의 **install** 명령어를 사용하여 '' | ||
+ | install -vm755 dest/ | ||
+ | |||
+ | 수행 중인 작업을 완전히 이해하지 않는 한 위의 단계를 엄격하게 따라야 합니다. **예기치 않게 틀어지는 일이 발생하면 시스템을 완전히 사용할 수 없게 될 수 있습니다. 분명하게 경고 했습니다.** | ||
+ | |||
+ | 이어서 아래에 나오는 **make install** 명령, ''/ | ||
+ | </ | ||
+ | |||
+ | 패키지를 설치합니다. | ||
+ | |||
+ | <code bash> | ||
+ | make install | ||
+ | </ | ||
+ | |||
+ | ldd 스크립트에서 실행 로더의 하드코딩된 경로를 수정합니다. | ||
+ | |||
+ | <code bash> | ||
+ | sed '/ | ||
+ | </ | ||
+ | |||
+ | 다음으로 시스템이 다른 언어로 응답하도록 할 수 있는 로케일을 설치합니다. 이러한 로캘이 반드시 필요한 것은 아니지만 일부가 누락된 경우 몇몇 패키지의 테스트 스위트는 중요한 테스트 케이스를 건너뜁니다. | ||
+ | |||
+ | 개별 로캘은 **localedef** 프로그램을 사용하여 설치할 수 있습니다. 예를 들어, 아래의 두 번째 **localedef** 명령은 ''/ | ||
+ | |||
+ | <code bash> | ||
+ | mkdir -pv / | ||
+ | localedef -i C -f UTF-8 C.UTF-8 | ||
+ | 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 ISO-8859-1 en_GB | ||
+ | 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_ES -f ISO-8859-15 es_ES@euro | ||
+ | localedef -i es_MX -f ISO-8859-1 es_MX | ||
+ | localedef -i fa_IR -f UTF-8 fa_IR | ||
+ | localedef -i 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 is_IS -f ISO-8859-1 is_IS | ||
+ | localedef -i is_IS -f UTF-8 is_IS.UTF-8 | ||
+ | localedef -i it_IT -f ISO-8859-1 it_IT | ||
+ | localedef -i it_IT -f ISO-8859-15 it_IT@euro | ||
+ | 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.SJIS 2> /dev/null || true | ||
+ | localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 | ||
+ | localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro | ||
+ | localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R | ||
+ | localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 | ||
+ | localedef -i se_NO -f UTF-8 se_NO.UTF-8 | ||
+ | localedef -i ta_IN -f UTF-8 ta_IN.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 | ||
+ | localedef -i zh_TW -f UTF-8 zh_TW.UTF-8 | ||
+ | </ | ||
+ | |||
+ | 또한 자신의 국가, 언어 및 문자 집합에 맞는 로케일을 설치하세요. | ||
+ | |||
+ | 다른 방법으로는 시간이 오래 걸리리지만 다음 명령을 사용하여 '' | ||
+ | |||
+ | <code bash> | ||
+ | make localedata/ | ||
+ | </ | ||
+ | |||
+ | 그런 다음 '' | ||
+ | |||
+ | <code bash> | ||
+ | localedef -i C -f UTF-8 C.UTF-8 | ||
+ | localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true | ||
+ | </ | ||
+ | |||
+ | <WRAP info center round 90%> | ||
+ | **참고** \\ | ||
+ | 이제 Glibc는 국제화된 도메인 이름을 확인할 때 libidn2를 사용합니다. 이는 런타임 종속성입니다. 이 기능이 필요한 경우 libidn2 설치 지침은 [[beyondlinuxfromscratch: | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== 8.5.2. Glibc 설정 ==== | ||
+ | |||
+ | === 8.5.2.1. nsswitch.conf 추가하기 === | ||
+ | |||
+ | Glibc 기본값은 네트워크 환경에서 제대로 작동하지 않으므로 ''/ | ||
+ | |||
+ | 다음과 같이 ''/ | ||
+ | |||
+ | <code bash> | ||
+ | cat > / | ||
+ | # Begin / | ||
+ | |||
+ | passwd: files systemd | ||
+ | group: files systemd | ||
+ | shadow: files systemd | ||
+ | |||
+ | hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns | ||
+ | networks: files | ||
+ | |||
+ | protocols: files | ||
+ | services: files | ||
+ | ethers: files | ||
+ | rpc: files | ||
+ | |||
+ | # End / | ||
+ | EOF | ||
+ | </ | ||
+ | |||
+ | === 8.5.2.2. 시간대 데이터 추가하기 === | ||
+ | |||
+ | 다음과 같이 시간대 데이터를 설치하고 설정합니다. | ||
+ | |||
+ | <code bash> | ||
+ | tar -xf ../ | ||
+ | |||
+ | ZONEINFO=/ | ||
+ | mkdir -pv $ZONEINFO/ | ||
+ | |||
+ | for tz in etcetera southamerica northamerica europe africa antarctica | ||
+ | asia australasia backward; do | ||
+ | zic -L / | ||
+ | zic -L / | ||
+ | zic -L leapseconds -d $ZONEINFO/ | ||
+ | done | ||
+ | |||
+ | cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO | ||
+ | zic -d $ZONEINFO -p America/ | ||
+ | unset ZONEINFO | ||
+ | </ | ||
+ | |||
+ | === zic 명령 설명 === | ||
+ | |||
+ | * //zic -L /dev/null ...// \\ 윤초가 없는 POSIX 시간대가 생성됩니다. 이 시간대를 '' | ||
+ | * //zic -L leapseconds ...// \\ 윤초를 포함한 올바른 표준 시간대를 만듭니다. 용량이 제한적이고 시간대를 업데이트할 계획이 없거나 정확한 시간이 필요하지 않은 임베디드 시스템에서는 '' | ||
+ | * //zic ... -p ...// \\ '' | ||
+ | |||
+ | 현지 시간대를 결정하는 한 가지 방법은 다음 스크립트를 실행하는 것입니다. | ||
+ | |||
+ | <code bash> | ||
+ | tzselect | ||
+ | </ | ||
+ | |||
+ | 위치에 대한 몇 가지 질문에 답하면 스크립트가 시간대 이름(예: // | ||
+ | |||
+ | 이어서 다음과 같이 / | ||
+ | |||
+ | <code bash> | ||
+ | ln -sfv / | ||
+ | </ | ||
+ | //< | ||
+ | |||
+ | === 8.5.2.3. 동적 로더 구성 === | ||
+ | |||
+ | 기본적으로 동적 로더(''/ | ||
+ | |||
+ | 다음을 실행하여 / | ||
+ | |||
+ | <code bash> | ||
+ | cat > / | ||
+ | # Begin / | ||
+ | / | ||
+ | /opt/lib | ||
+ | |||
+ | EOF | ||
+ | </ | ||
+ | |||
+ | 원하는 경우 동적 로더는 디렉터리를 검색하여 거기서 찾은 파일의 내용을 포함할 수도 있습니다. 일반적으로 이 디렉터리의 파일은 원하는 라이브러리 경로를 지정하는 한 줄로 구성됩니다. 이 기능을 사용하려면 다음 명령을 실행하세요. | ||
+ | |||
+ | <code bash> | ||
+ | cat >> / | ||
+ | # Add an include directory | ||
+ | include / | ||
+ | |||
+ | EOF | ||
+ | mkdir -pv / | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== 8.5.3. Glibc 패키지 구성 ==== | ||
+ | |||
+ | * **설치된 프로그램: | ||
+ | * **설치된 라이브러리: | ||
+ | * **설치된 디렉터리: | ||
+ | |||
+ | === 간략한 설명 === | ||
+ | * **gencat** \\ 메시지 카탈로그를 생성합니다. | ||
+ | * **getconf** \\ 파일 시스템 특정 변수에 대한 시스템 구성 값을 표시합니다. | ||
+ | * **getent** \\ 관리 데이터베이스에서 항목을 가져옵니다. | ||
+ | * **iconv** \\ 문자 집합 변환을 수행합니다 | ||
+ | * **iconvconfig** \\ 빠른 로딩 **iconv** 모듈 구성 파일을 생성합니다. | ||
+ | * **ldconfig** \\ 동적 링커 런타임 바인딩을 구성합니다. | ||
+ | * **ldd** \\ 주어진 각 프로그램 또는 공유 라이브러리에 필요한 공유 라이브러리를 보고합니다. | ||
+ | * **lddlibc4** \\ **ldd**에 객체 파일을 지원합니다. x86_64와 같은 최신 아키텍처에는 존재하지 않습니다. | ||
+ | * **locale** \\ 현재 로케일에 대한 다양한 정보를 출력합니다. | ||
+ | * **localedef** \\ 로캘 사양을 컴파일합니다. | ||
+ | * **makedb** \\ 텍스트 입력으로부터 간단한 데이터베이스를 생성합니다. | ||
+ | * **mtrace** \\ 메모리 트레이스 파일을 읽고 해석하여 사람이 읽을 수 있는 형식으로 요약을 표시합니다. | ||
+ | * **pcprofiledump** \\ PC 프로파일링으로 생성된 정보를 덤프합니다. | ||
+ | * **pldd** \\ 실행 중인 프로세스에서 사용하는 동적 공유 객체를 나열합니다 | ||
+ | * **sln** \\ 정적으로 연결된 **ln** 프로그램 | ||
+ | * **sotruss** \\ 지정된 명령의 공유 라이브러리 프로시저 호출을 추적합니다. | ||
+ | * **sprof** \\ 공유 객체 프로파일링 데이터를 읽고 표시합니다. | ||
+ | * **tzselect** \\ 사용자에게 시스템 위치를 묻고 해당 시간대를 출력합니다. | ||
+ | * **xtrace** \\ 현재 실행된 함수를 출력하여 프로그램 실행을 추적합니다. | ||
+ | * **zdump** \\ 입력된 시간대에 대한 현지 시간을 출력합니다. | ||
+ | * **zic** \\ 시간대 컴파일러 | ||
+ | * ld-*.so \\ 공유 라이브러리 실행 파일을 위한 보조 프로그램 | ||
+ | * libBrokenLocale \\ 깨진 프로그램(예: | ||
+ | * libanl \\ 함수가 없는 더미 라이브러리. 이전에는 비동기 이름 조회 라이브러리였으며, | ||
+ | * libc \\ 기본 C 라이브러리 | ||
+ | * libc_malloc_debug \\ 사전 로드 시 메모리 할당 검사를 켭니다. | ||
+ | * libdl \\ 함수가 없는 더미 라이브러리. 이전에는 동적 연결 인터페이스 라이브러리였으며, | ||
+ | * libg \\ 함수를 포함하지 않는 더미 라이브러리. 이전에는 **g++**용 런타임 라이브러리였습니다. | ||
+ | * libm \\ 연산 라이브러리 | ||
+ | * libmvec \\ libm을 사용할 때 필요에 따라 링크되는 벡터 연산 라이브러리 | ||
+ | * libmcheck \\ 링크될 때 메모리 할당 검사를 켭니다. | ||
+ | * libmemusage \\ 프로그램의 메모리 사용량에 대한 정보를 수집하기 위해 **memusage**에 의해 사용됩니다. | ||
+ | * libnsl \\ 네트워크 서비스 라이브러리, | ||
+ | * libnss_* \\ 호스트 이름, 사용자 이름, 그룹 이름, 별칭, 서비스, 프로토콜 등을 확인하는 함수를 포함하는 네임 서비스 스위치 모듈. '' | ||
+ | * libpcprofile \\ 실행 파일을 PC 프로파일에 미리 로드할 수 있습니다. | ||
+ | * libpthread \\ 함수가 없는 더미 라이브러리. 이전에는 POSIX.1c 스레드 확장에 지정된 대부분의 인터페이스와 POSIX.1b 실시간 확장에 지정된 세마포어 인터페이스를 제공하는 함수가 포함되어 있었지만, | ||
+ | * libresolv \\ 인터넷 도메인 네임 서버로 패킷을 생성, 전송 및 해석하는 함수를 포함합니다. | ||
+ | * librt \\ POSIX.1b 실시간 확장에 지정된 대부분의 인터페이스를 제공하는 함수가 포함되어 있습니다. | ||
+ | * libthread_db \\ 다중 스레드 프로그램을 위한 디버거를 만드는 데 유용한 함수를 포함합니다. | ||
+ | * libutil \\ 함수가 없는 더미 라이브러리. 이전에는 다양한 Unix 유틸리티에서 사용되는 " | ||
+ | |||