linuxfromscratch:auto-lfs

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
linuxfromscratch:auto-lfs [2026/03/10 05:21] baecylinuxfromscratch:auto-lfs [2026/04/15 17:58] (현재) baecy
줄 1: 줄 1:
-=== --docdir 입력하기 귀찮음 ===+=== 디렉터리/한줄에 하나/버전번호 제거 === 
 +<codeprism bash> 
 +ls -d1 * | sed  's/-[^-]*$//' 
 +find . -maxdepth 1 -type d -not -path '.' | sed 's@./@@;s@-.*@@' 
 +</codeprism> 
 +=== LC_COLLATE 문제로 빌드 터지기 싫음 === 
 +<codeprism lang=bash> 
 +### Toggle LANG C.UTF-8 <-> ko_KR.UTF-8 
 +function tg-lang() { 
 +# 현재 LANG 확인 
 +    case "$LANG" in 
 +        ko_KR*) 
 +            export LANG=C.UTF-8 
 +            ;; 
 +        *) 
 +            export LANG=ko_KR.UTF-8 
 +            ;; 
 +    esac 
 +    # LC_ALL 로 인한 우선순위 변경 방지 
 +    unset LC_ALL 
 + 
 +    # PS1 재설정 
 +    if [ -f "/etc/profile.d/_ps1" ]; then 
 +        source /etc/profile.d/_ps1 
 +    fi 
 + 
 +    echo -e "Locale toggled to: \033[1;32m$LANG\033[0m" 
 +
 +## alias 별도 관리 
 +# alias tl='tg-lang' -> /etc/profile.d/10-alias.sh 
 +</codeprism> 
 + 
 +=== 파이썬 모듈 빌드하고 설치하기 귀찮음 === 
 +<codeprism lang=bash> 
 +#!/usr/bin/env bash 
 + 
 +## Get Package Name 
 +if [[ -r $PWD/PKG-INFO ]]; then 
 +        PKG_NAME=$(grep -i '^Name:' PKG-INFO | sed 's/[nN]ame:[[:space:]]* //' | tr -d '\r'
 +else 
 +        echo "PKG-INFO not found. Need package name for install" 
 +        read -p "Enter Package Name: " PKG_NAME 
 +fi 
 + 
 +## Permission Check 
 +PERM_ELEV="" 
 +[[ $UID -ne 0 ]] && PERM_ELEV="sudo" 
 + 
 +## Clean Previous Build 
 +rm -rf dist  
 + 
 +## Build and Install 
 +pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD 
 + 
 +${PERM_ELEV} pip3 install --no-index --find-links dist "${PKG_NAME}" 
 +</codeprism> 
 +=== ./configure --docdir= 입력하기 귀찮음 개선판 === 
 +<codeprism lang=bash> 
 +#!/usr/bin/env bash 
 + 
 +## 기본값은 현재 디렉터리를 선택하도록 0 지정 
 +DEPTH=${1:-0} 
 + 
 +## 인자가 숫자인지 확인 
 +if ! [[ "$DEPTH" =~ ^[0-9]+$ ]]; then 
 +    echo "Usage: $0 [number]" 
 +    exit 1 
 +fi 
 + 
 +## 기본 디렉터리 및 대상 디렉터리 초기값 설정 
 +ORIGINAL_PWD=$(pwd) 
 +TARGET_PATH=$ORIGINAL_PWD 
 + 
 +# 주어진 인자(숫자) 만큼 상위 디렉터리 이름 반환 
 +for (( i=0; i<$DEPTH; i++ )); do 
 +    # Stop when reach the top directory 
 +    if [ "$TARGET_PATH" = "/" ]; then 
 +        break 
 +    fi 
 +    TARGET_PATH=$(dirname "$TARGET_PATH"
 +done 
 + 
 +## 실제 반환할 값 
 +DOCDIR_VALUE=$(basename "$TARGET_PATH"
 + 
 +## 인자(숫자)만큼 이동한 결과가 "/"인 경우  
 +## 최종 반환값이 "/usr/share/doc//" 이 되는 상황 방지 
 +## 현재 디렉터리에서 한단계 상위 디렉터리 이름 반환 
 +if [ "$DOCDIR_VALUE" = "/" ] || [ -z "$DOCDIR_VALUE" ]; then 
 +    TARGET_PATH=$ORIGINAL_PWD 
 +    RECOVER_DEPTH=$(( DEPTH > 0 ? 1 : 0 )) 
 + 
 +    for (( i=0; i<$RECOVER_DEPTH; i++ )); do 
 +        TARGET_PATH=$(dirname "$TARGET_PATH"
 +    done 
 +    DOCDIR_VALUE=$(basename "$TARGET_PATH"
 +fi 
 + 
 +## 최종 반환값 
 +echo "/usr/share/doc/${DOCDIR_VALUE}" 
 + 
 +unset DEPTH ORIGINAL_PWD TARGET_PATH RECOVER_DEPTH DOCDIR_VALUE 
 +</codeprism> 
 + 
 +=== ./confiugre --docdir입력하기 귀찮음 ===
 <codeprism lang=bash> <codeprism lang=bash>
 #!/usr/bin/env bash #!/usr/bin/env bash
줄 5: 줄 109:
 ## 별도의 빌드 디렉터리를 사용하는 경우 ## 별도의 빌드 디렉터리를 사용하는 경우
 ## 아무 인자나 입력하면 이전 디렉터리명 사용 ## 아무 인자나 입력하면 이전 디렉터리명 사용
-## 예: docdir 1+## 예: ./configure --prefux=usr --docdir=$(docdir 1)
 if [ -z $1 ]; then if [ -z $1 ]; then
         DOCDIR_VALUE=$(basename $(pwd))         DOCDIR_VALUE=$(basename $(pwd))
줄 17: 줄 121:
 </codeprism> </codeprism>
 ----- -----
-=== Host에서 LFS 디렉토리로 chroot ===+=== LFS mount and chroot script v.0.2 === 
 +아직도 쓸데없이 길고 함수로 정리할 필요 있음. 
 +갈길이 멀었음. 
 + 
 +lfs-dive.sh 
 +<codeprism lang=bash> 
 +#!/usr/bin/env bash 
 +# if [[ -z ${LFS} ]]; then  echo "Enter the LFS 13.0" | is same follow 
 +: ${LFS:=/mnt/LFS}  
 +echo "Base path - ${LFS}" 
 +export LFS 
 + 
 + 
 +if [[ $UID == 0 ]]; then USER_ELEV=""; else USER_ELEV="sudo"; fi 
 + 
 +# Source code packages Repo. mount 
 +mountpoint -q $LFS/sources || ${USER_ELEV} mount n40l:/SOURCES/LFS-13.0 /mnt/LFS/sources 
 + 
 +# 1. If already mounted virtural kernel file system then execute chroot script. 
 +# 2. if need mount virtual kernel file system. 
 + 
 +if mountpoint -q $LFS/dev; then 
 +        lfs-redive.sh 
 +        exit 0 
 +else 
 +        ${USER_ELEV} mount -v --bind /dev $LFS/dev 
 +        ${USER_ELEV} mount -vt devpts devpts -o gid=5,mode=0620 $LFS/dev/pts 
 +        ${USER_ELEV} mount -vt proc proc $LFS/proc 
 +        ${USER_ELEV} mount -vt sysfs sysfs $LFS/sys 
 +        ${USER_ELEV} mount -vt tmpfs tmpfs $LFS/run 
 +        if [ -h $LFS/dev/shm ]; then 
 +          ${USER_ELEV} install -v -d -m 1777 $LFS$(realpath /dev/shm) 
 +        else 
 +          ${USER_ELEV} mount -vt tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm 
 +        fi 
 +        lfs-redive.sh 
 +fi 
 +</codeprism> 
 +lfs-redive.sh 
 +<codeprism lang=bash> 
 +if [[ ! -f "${LFS}"/stage.3 ]]; then echo "Not stage 3, no need chroot"; exit 0; fi 
 +if [[ $UID == 0 ]]; then USER_ELEV=""; else USER_ELEV="sudo"; fi 
 + 
 +${USER_ELEV} chroot "$LFS" /usr/bin/env -i   \ 
 +    HOME=/root                  \ 
 +    TERM="$TERM"                \ 
 +    PS1='(lfs chroot) \u:\w\$ ' \ 
 +    PATH=/usr/local/bin:/usr/bin:/usr/sbin     \ 
 +    MAKEFLAGS="-j$(nproc)"      \ 
 +    TESTSUITEFLAGS="-j$(nproc)"
 +    /bin/bash --login 
 +</codeprism> 
 +=== Host에서 LFS 디렉토리로 chroot v.01 === 
 +다시 보니 별 의미없이 장황하고 가독성 떨어짐.
 6장 완료후 책의 끝까지 유용하게 사용하는 스크립트 6장 완료후 책의 끝까지 유용하게 사용하는 스크립트
  
줄 124: 줄 281:
 ---- ----
 === 파일 다운로드 링크 처리 === === 파일 다운로드 링크 처리 ===
 +<wrap hi>편하기는 한데 이제 와서 보니 굳이 필요한가 싶어짐</wrap>
  
 다음과 같이 등록하고 사용해야 ''cd'' 가 작동을 합니다. 다음과 같이 등록하고 사용해야 ''cd'' 가 작동을 합니다.
  • linuxfromscratch/auto-lfs.1773120082.txt.gz
  • 마지막으로 수정됨: 2026/03/10 05:21
  • 저자 baecy