차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
| linuxfromscratch [2025/12/18 17:11] – [설치된 Perl Module 목록 확인] baecy | linuxfromscratch [2026/03/22 02:03] (현재) – baecy | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| - | ===== 토막 상식 ===== | + | ~~NOTOC~~ |
| + | ==== 토막 상식 ==== | ||
| + | === Git 특정 디렉터리 또는 파일만 클론 === | ||
| + | < | ||
| + | # 1. 깃 저장소를 초기화 | ||
| + | mkdir firefox-l10n && cd firefox-l10n | ||
| + | git init | ||
| - | ==== 설치된 Perl Module 목록 확인 | + | # 2. 원격 저장소 등록 |
| - | === Perl과 기본 시스템 도구만 이용 | + | git remote add -f origin https:// |
| + | |||
| + | # 3. Sparse Checkout 활성화 | ||
| + | git sparse-checkout init --cone | ||
| + | |||
| + | # 4. 대상 지정 | ||
| + | git sparse-checkout set ko | ||
| + | |||
| + | # 5. 적용 | ||
| + | git pull origin main | ||
| + | </ | ||
| + | === Nvidia Driver 설치후에도 적용이 안되는 경우 확인 === | ||
| + | 현재 드라이버 버전 확인 및 조치 \\ | ||
| + | 로그인 가능한 다른 VT로 전환 후 다음과 같이 진행 | ||
| + | < | ||
| + | nvidia-smi --version | grep -i driver | ||
| + | DRIVER version | ||
| + | sudo -s | ||
| + | mkdir -pv / | ||
| + | cp / | ||
| + | / | ||
| + | modprobe -r -f nvidia | ||
| + | modprobe nvidia | ||
| + | systemdctl restart sddm</ | ||
| + | ==== Meson Bash-completion 수정 ==== | ||
| + | meson에서 환경변수가 tab completion이 안되는 경우.\\ | ||
| + | / | ||
| + | < | ||
| + | #complete -F _meson meson | ||
| + | complete -o default -o bashdefault -F _meson meson | ||
| + | </ | ||
| + | |||
| + | === Bash 토막 상식 === | ||
| + | < | ||
| + | # 인자가 비어있으면 미리 지정된 값 할당 | ||
| + | TARGET_ARCH=${LFS_TARGET: | ||
| + | # 인자 내용에서 확장자 제거 | ||
| + | FILE=" | ||
| + | DIR_NAME=${FILE%.tar*} # DIR_NAME=" | ||
| + | # 변수 내용 치환 | ||
| + | SAFE_NAME=${RAW_NAME// | ||
| + | # 경로인 경우 조작 | ||
| + | # ## 왼쪽부터 가장 먼 "/" | ||
| + | # % 오른쪽부터 처음 나온 "/" | ||
| + | PATH="/ | ||
| + | echo ${PATH## | ||
| + | echo ${PATH%/ | ||
| + | </ | ||
| + | |||
| + | === pkgconf로 설치된 라이브러리 확인 === | ||
| + | Bash Script | ||
| + | < | ||
| + | ### Check installed packages | ||
| + | TARGET="" | ||
| + | |||
| + | ### merge args | ||
| + | for UARGS in " | ||
| + | TARGET=" | ||
| + | done | ||
| + | |||
| + | ### remove first " | ||
| + | TARGET=" | ||
| + | |||
| + | ### ' | ||
| + | find / | ||
| + | grep -Ei " | ||
| + | xargs -0 pkgconf --print-provides | ||
| + | </ | ||
| + | Ruby Script | ||
| + | < | ||
| + | # | ||
| + | |||
| + | # 1. 인자 처리 | ||
| + | target = ARGV.empty? ? " | ||
| + | |||
| + | # 2. 파일 목록 가져오기 및 패키지명 추출 | ||
| + | search_path = "/ | ||
| + | |||
| + | # .pc 확장자를 제외한 파일 이름(패키지명)만 추출하여 필터링 | ||
| + | package_names = Dir.glob(search_path).map do |file| | ||
| + | File.basename(file, | ||
| + | end.select do |pkg| | ||
| + | pkg =~ Regexp.new(target, | ||
| + | end | ||
| + | |||
| + | # 3. pkgconf 실행 | ||
| + | if package_names.any? | ||
| + | # 패키지명을 나열하여 실행 | ||
| + | # 예: pkgconf --print-provides zlib libpng | ||
| + | system(" | ||
| + | else | ||
| + | puts " | ||
| + | end | ||
| + | </ | ||
| + | |||
| + | === 마이크로코드 Grub auto detect === | ||
| + | AMD 5800X 기준 | ||
| + | < | ||
| + | sudo -s | ||
| + | cp / | ||
| + | grub-mkconfig -o / | ||
| + | Generating grub configuration file ... | ||
| + | Found theme: / | ||
| + | Found linux image: / | ||
| + | Found initrd image: / | ||
| + | Warning: os-prober will not be executed to detect other bootable partitions. | ||
| + | Systems on them will not be added to the GRUB boot configuration. | ||
| + | Check GRUB_DISABLE_OS_PROBER documentation entry. | ||
| + | Adding boot menu entry for UEFI Firmware Settings ... | ||
| + | done</ | ||
| + | |||
| + | === 설치된 Perl Module 목록 확인 === | ||
| + | == Perl과 기본 시스템 도구만 이용 == | ||
| < | < | ||
| #!/bin/sh | #!/bin/sh | ||
| 줄 33: | 줄 151: | ||
| Try:: | Try:: | ||
| - | 이런식의 검색도 가능함. | + | 이런 |
| - | === ExtUtils:: | + | == ExtUtils:: |
| < | < | ||
| #!/bin/sh | #!/bin/sh | ||
| 줄 79: | 줄 197: | ||
| Text::Glob | Version: 0.11</ | Text::Glob | Version: 0.11</ | ||
| - | 이 방식은 | + | 버전을 출력해주는 장점이 있음. \\ |
| - | ==== 설치된 Python3 Module 목록 확인 | + | 특정 모듈 설치전에는 사용하기 힘들다는 단점이 있음. |
| + | |||
| + | === 설치된 Python3 Module 목록 확인 === | ||
| < | < | ||
| 줄 86: | 줄 206: | ||
| </ | </ | ||
| - | ==== Qemu Screen Dump ==== | + | === Qemu Screen Dump === |
| - < | - < | ||
| - screendump __filename.ppm__ \\ 다음과 같이 **-f** 옵션으로 저장 포맷 지정 가능 \\ screendump screenshot.png -f png \\ 포맷 지정 저장 방식에서 세그폴트 발생하면 ppm으로 저장후 변환 | - screendump __filename.ppm__ \\ 다음과 같이 **-f** 옵션으로 저장 포맷 지정 가능 \\ screendump screenshot.png -f png \\ 포맷 지정 저장 방식에서 세그폴트 발생하면 ppm으로 저장후 변환 | ||
| - < | - < | ||
| - | + | === xwindow screen saver & dpms 시간 설정 === | |
| - | ==== xwindow screen saver & dpms 시간 설정 ==== | + | |
| < | < | ||
| xset s 600 600 | xset s 600 600 | ||
| 줄 101: | 줄 218: | ||
| 순서대로 \\ | 순서대로 \\ | ||
| 화면보호기 작동시간, | 화면보호기 작동시간, | ||
| - | DPMS 대기, | + | DPMS 대기, |
| - | + | ||
| - | ==== for, echo and sed ===== | + | |
| + | === for, echo and sed ==== | ||
| <code bash> | <code bash> | ||
| for i in $(echo " | for i in $(echo " | ||
| </ | </ | ||
| - | ==== Grep && Tar ==== | ||
| + | === Grep && Tar === | ||
| 특정 문자열을 가진 파일을 아카이브 처리 | 특정 문자열을 가진 파일을 아카이브 처리 | ||
| 줄 128: | 줄 244: | ||
| * f 아카이브 파일명 | * f 아카이브 파일명 | ||
| - | ---- | + | === Configure Options #1 === |
| - | ==== Configure Options #1 ==== | + | |
| 사용해본 결과 생각처럼 편한것은 아니었음. | 사용해본 결과 생각처럼 편한것은 아니었음. | ||
| 줄 178: | 줄 292: | ||
| ++++ | ++++ | ||
| - | ---- | ||
| ==== Find script ==== | ==== Find script ==== | ||
| + | <wrap hi> | ||
| 패키지 설치 여부가 생각나지 않을 때 사용 | 패키지 설치 여부가 생각나지 않을 때 사용 | ||
| 줄 188: | 줄 301: | ||
| 사용 예시 \\ | 사용 예시 \\ | ||
| {{: | {{: | ||
| - | |||
| <code bash> | <code bash> | ||
| 줄 203: | 줄 315: | ||
| </ | </ | ||
| - | ---- | + | === Patch with Wget === |
| - | + | ||
| - | ==== Patch with Wget ==== | + | |
| < | < | ||
| wget -q -O- <patch url> | patch < | wget -q -O- <patch url> | patch < | ||
| </ | </ | ||
| - | + | == 사용법 === | |
| - | === 사용법 === | + | 예시 1 |
| - | + | ||
| - | == 예시 1 == | + | |
| docbook-xsl-nons-1.79.2 patch | docbook-xsl-nons-1.79.2 patch | ||
| - | |||
| <code lang=bash> | <code lang=bash> | ||
| wget -q -O- https:// | wget -q -O- https:// | ||
| 줄 222: | 줄 328: | ||
| </ | </ | ||
| - | == 예시 2 == | + | 예시 2 |
| libpng patch | libpng patch | ||
| 줄 230: | 줄 336: | ||
| </ | </ | ||
| - | ---- | + | === PS1 설정 === |
| - | ==== PS1 설정 ==== | + | 일반사용자 |
| + | < | ||
| + | 루트사용자 | ||
| + | < | ||
| - | === 최초 | + | == 2차 개선 |
| - | + | ++++ 별거아닌데 쓸데없이 길어짐| | |
| - | ++++ 많이 지저분하고 번거로움 | + | <code bash> |
| - | < | + | PS1_ROOT=' |
| - | touch $LFS/ | + | PS1_USER=' |
| - | ~/.bashrc\\ | + | PS1_HEAD=' |
| - | <code lang=bash> | + | if [ "$(awk ' |
| - | if [ -f / | + | if [ $(id -u) -eq 0 ] ; then |
| - | PS1=' | + | PS1="< |
| + | else | ||
| + | PS1="< | ||
| + | fi | ||
| else | else | ||
| - | PS1='\[$(tput setaf 75)\]\[$(tput setaf 229)\]\u\[$(tput setaf 199)\]@\[$(tput setaf 215)\]\h \[$(tput setaf 75)\]\w \[$(tput sgr0)\]\$\n' | + | if [ $(id -u) -eq 0 ] ; then |
| - | fi</ | + | PS1="${PS1_HEAD}${PS1_ROOT}" |
| + | else | ||
| + | PS1="${PS1_HEAD}${PS1_USER}" | ||
| + | fi | ||
| + | fi | ||
| + | </ | ||
| ++++ | ++++ | ||
| - | + | == 1차 개선 == | |
| - | === 1차 개선 === | + | |
| ++++ 번거로운건 사라짐 그러나 여전히 지저분함 | | ++++ 번거로운건 사라짐 그러나 여전히 지저분함 | | ||
| <code lang=bash> | <code lang=bash> | ||
| 줄 264: | 줄 379: | ||
| </ | </ | ||
| ++++ | ++++ | ||
| - | + | 최초 | |
| - | === 2차 개선 === | + | ++++ 많이 지저분하고 번거로움 | |
| - | + | <code lang=bash cmd=true user=root> | |
| - | < | + | touch $LFS/ |
| - | PS1_ROOT=' | + | ~/.bashrc\\ |
| - | PS1_USER=' | + | <code lang=bash> |
| - | PS1_HEAD=' | + | if [ -f / |
| - | if [ "$(awk ' | + | PS1=' |
| - | if [ $(id -u) -eq 0 ] ; then | + | |
| - | PS1="< | + | |
| - | else | + | |
| - | PS1="< | + | |
| - | fi | + | |
| else | else | ||
| - | if [ $(id -u) -eq 0 ] ; then | + | PS1='\[$(tput setaf 75)\]\[$(tput setaf 229)\]\u\[$(tput setaf 199)\]@\[$(tput setaf 215)\]\h \[$(tput setaf 75)\]\w \[$(tput sgr0)\]\$\n' |
| - | PS1="${PS1_HEAD}${PS1_ROOT}" | + | fi</ |
| - | else | + | ++++ |
| - | PS1="${PS1_HEAD}${PS1_USER}" | + | |
| - | fi | + | |
| - | fi | + | |
| - | </ | + | |
| ---- | ---- | ||
| - | ==== Debian 설치 후 추가적인 사항 ==== | + | === Debian 설치 후 추가적인 사항 === |
| LFS 진행에 필요한 패키지 설치 | LFS 진행에 필요한 패키지 설치 | ||
| 줄 300: | 줄 404: | ||
| ---- | ---- | ||
| ==== 화면 출력 로그파일로 저장 ==== | ==== 화면 출력 로그파일로 저장 ==== | ||
| - | |||
| <code lang=bash> | <code lang=bash> | ||
| time { command 1 && ... && command N; } 2>&1 | tee < | time { command 1 && ... && command N; } 2>&1 | tee < | ||
| </ | </ | ||
| - | ---- | ||
| ==== Qemu에서 부팅중 마운트 에러가 발생하는 경우 ==== | ==== Qemu에서 부팅중 마운트 에러가 발생하는 경우 ==== | ||
| - | |||
| Qemu에서 가상머신 시작시 디바이스 순서가 바뀌는 일이 발생해서 처리한 내용. | Qemu에서 가상머신 시작시 디바이스 순서가 바뀌는 일이 발생해서 처리한 내용. | ||
| 파티션 레이블 설정 | 파티션 레이블 설정 | ||
| - | |||
| <code lang=bash> | <code lang=bash> | ||
| mkswap -L < | mkswap -L < | ||
| 줄 318: | 줄 418: | ||
| ''/ | ''/ | ||
| - | |||
| <code lang=bash> | <code lang=bash> | ||
| # /etc/fstab: static file system information. | # /etc/fstab: static file system information. | ||
| 줄 338: | 줄 437: | ||
| LABEL=LFS_DISK | LABEL=LFS_DISK | ||
| </ | </ | ||
| - | |||
| UUID로 설정하는 경우 장치명을 주석으로 표기하면 추후 수정시 용이. | UUID로 설정하는 경우 장치명을 주석으로 표기하면 추후 수정시 용이. | ||
| - | ---- | + | === Putty에서 Ncurses 설치 후 < |
| - | ==== Putty에서 Ncurses 설치 후 < | + | |
| ~/.profie or ~/.bashrc | ~/.profie or ~/.bashrc | ||
| 줄 351: | 줄 447: | ||
| </ | </ | ||
| - | ---- | + | === Glibc-2.35 Compile === |
| - | ==== Glibc-2.35 Compile | + | |
| 컴파일중 알 수 없는 에러가 발생하고 매번 발생 위치가 다르다면 -j1 인자로 병렬처리 없이 make 실행 | 컴파일중 알 수 없는 에러가 발생하고 매번 발생 위치가 다르다면 -j1 인자로 병렬처리 없이 make 실행 | ||
| <code cmd=true lang=bash> | <code cmd=true lang=bash> | ||
| make -j1</ | make -j1</ | ||
| - | \\ | + | |
| - | ==== LFS로 Booting후 '' | + | === LFS로 Booting후 '' |
| //'' | //'' | ||
| <code lang=bash> | <code lang=bash> | ||
| chmod 4755 / | chmod 4755 / | ||
| '' | '' | ||
| - | \\ \\ | + | |
| - | ==== LFS로 부팅하기 전에 준비할 것들 | + | === LFS로 부팅하기 전에 준비할 것들 === |
| - | === OpenSSH | + | == OpenSSH == |
| [[https:// | [[https:// | ||
| - | + | == Wget == | |
| - | === Wget === | + | |
| 소스 패키지 다운로드에 필요 | 소스 패키지 다운로드에 필요 | ||
| - | |||
| [[https:// | [[https:// | ||
| 줄 391: | 줄 483: | ||
| ++++ | ++++ | ||
| - | === NFS-UTILS === | + | == NFS-UTILS == |
| [[https:// | [[https:// | ||
| 줄 405: | 줄 496: | ||
| ++++ | ++++ | ||
| - | === SSHFS (NFS 사용 안하는 경우)=== | + | == SSHFS (NFS 사용 안하는 경우)== |
| N40L에 있는 소스 디렉토리 마운트에 필요 | N40L에 있는 소스 디렉토리 마운트에 필요 | ||
| 줄 431: | 줄 521: | ||
| ++++ | ++++ | ||
| - | ---- | + | === Textinfo Dir File Rebuild === |
| - | + | ||
| - | ==== Textinfo Dir File Rebuild ==== | + | |
| <code lang=bash> | <code lang=bash> | ||
| pushd / | pushd / | ||
| 줄 444: | 줄 531: | ||
| </ | </ | ||
| - | ---- | + | === Swap file === |
| - | ==== Swap file ==== | + | |
| <code cmd=true cmdout=6, | <code cmd=true cmdout=6, | ||
| export LFS=/ | export LFS=/ | ||
| 줄 459: | 줄 544: | ||
| </ | </ | ||
| - | ---- | + | === Binutils 설치하기 전에 ISL 설치하기 === |
| - | ==== Binutils 설치하기 전에 ISL 설치하기 ==== | + | |
| GMP를 먼저 설치 | GMP를 먼저 설치 | ||
| - | |||
| <code lang=bash> | <code lang=bash> | ||
| ./configure --prefix=/ | ./configure --prefix=/ | ||
| 줄 473: | 줄 555: | ||
| awk '/# PASS:/ | awk '/# PASS:/ | ||
| </ | </ | ||
| - | |||
| [[https:// | [[https:// | ||
| - | |||
| <code lang=bash> | <code lang=bash> | ||
| ./configure --prefix=/ | ./configure --prefix=/ | ||
| 줄 482: | 줄 562: | ||
| </ | </ | ||
| - | ---- | + | === $LFS/ |
| - | + | ||
| - | ==== $LFS/ | + | |
| 가장 간단한 방법 | 가장 간단한 방법 | ||
| <code lang=bash> | <code lang=bash> | ||
| ls -d */ | ls -d */ | ||
| </ | </ | ||
| - | |||
| <code lang=bash> | <code lang=bash> | ||
| alias dirfind=" | alias dirfind=" | ||
| 줄 498: | 줄 575: | ||
| </ | </ | ||
| - | ---- | + | === SBU 측정 === |
| - | ==== SBU 측정 | + | |
| <code lang=bash> | <code lang=bash> | ||
| ## 현재 디렉토리+생성시간을 추가해서 로그파일 작성 | ## 현재 디렉토리+생성시간을 추가해서 로그파일 작성 | ||
| 줄 505: | 줄 581: | ||
| time { ./configure .... && make && make install; } | lfslog </ | time { ./configure .... && make && make install; } | lfslog </ | ||
| - | ==== 짜투리 | + | === 짜투리 === |
| <code lang=html> | <code lang=html> | ||
| <a href=""></ | <a href=""></ | ||
| 줄 524: | 줄 600: | ||
| ## Same Command | ## Same Command | ||
| - | |||
| ./configure --prefix=/ | ./configure --prefix=/ | ||
| --disable-{logger, | --disable-{logger, | ||
| - | ==== tar를 이용한 복사 | + | === tar를 이용한 복사 === |
| <code lang=bash> | <code lang=bash> | ||
| tar -cf - . | tar -xvf - -C / | tar -cf - . | tar -xvf - -C / | ||
| - | ==== find example | + | === find example === |
| <code lang=bash> | <code lang=bash> | ||
| ## 크기가 50M 이상이면서 .deb, .vmdk 확장자가 아닌 파일 | ## 크기가 50M 이상이면서 .deb, .vmdk 확장자가 아닌 파일 | ||
| 줄 538: | 줄 613: | ||
| find /media/d/ -type f -size +50M -and ! -name " | find /media/d/ -type f -size +50M -and ! -name " | ||
| - | ==== grep example | + | === grep example === |
| <code lang=bash> | <code lang=bash> | ||
| ## 일반적인 grep 으로 다음과 같은 결과가 나왔다. | ## 일반적인 grep 으로 다음과 같은 결과가 나왔다. | ||
| 줄 582: | 줄 657: | ||
| # | # | ||
| - | ==== Gawk ==== | + | === Gawk === |
| <code lang=bash> | <code lang=bash> | ||
| df -ht ext4 | df -ht ext4 | ||
| 줄 593: | 줄 668: | ||
| / | / | ||
| / | / | ||
| - | |||
| <code lang=bash> | <code lang=bash> | ||
| # 읽어들인 NR 레코드(여기서는 Filesystem과 Size) 갯수가 2 이하일때는 awk에서 바로 출력하고 | # 읽어들인 NR 레코드(여기서는 Filesystem과 Size) 갯수가 2 이하일때는 awk에서 바로 출력하고 | ||
| 줄 607: | 줄 681: | ||
| / | / | ||
| - | 참고 | ||
| <code lang=bash> | <code lang=bash> | ||
| # 1q로 한줄만 sed에서 처리하고 종료 나머지는 sort가 처리 | # 1q로 한줄만 sed에서 처리하고 종료 나머지는 sort가 처리 | ||
| 줄 621: | 줄 694: | ||
| / | / | ||
| - | ==== wget ==== | + | === wget === |
| <code lang=bash> | <code lang=bash> | ||
| # -r / --recursive : 디렉토리 대상 | # -r / --recursive : 디렉토리 대상 | ||
| 줄 629: | 줄 702: | ||
| wget -r -np -R " | wget -r -np -R " | ||
| - | ==== Firmware Blob Kernel config | + | === Firmware Blob Kernel config === |
| <code lang=bash> | <code lang=bash> | ||
| echo CONFIG_EXTRA_FIRMWARE='" | echo CONFIG_EXTRA_FIRMWARE='" | ||
| make oldconfig | make oldconfig | ||
| - | </ | + | </ |
| - | ==== Man page count ==== | + | === Man page count === |
| <code lang=bash> | <code lang=bash> | ||
| find / | find / | ||
| - | </ | + | </ |