차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
linuxfromscratch:auto-lfs [2026/03/10 05:22] baecylinuxfromscratch:auto-lfs [2026/04/15 17:58] (현재) baecy
줄 1: 줄 1:
 +=== 디렉터리/한줄에 하나/버전번호 제거 ===
 +<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= 입력하기 귀찮음 === === ./confiugre --docdir= 입력하기 귀찮음 ===
 <codeprism lang=bash> <codeprism lang=bash>
줄 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.1773120147.txt.gz
  • 마지막으로 수정됨: 2026/03/10 05:22
  • 저자 baecy