How To Build a Minimal Linux System from Source Code
Greg O'Keefe, gcokeefe@postoffice.utas.edu.au
v0.9, November 2000
그레그 찰스 오키프(Greg Charles O'Keefe)님의 사이트에서 원문을 읽을 수 있고, From Power Up To Bash Prompt 홈 페이지에서 다양한 형식으로 구할 수 있습니다.
이 문서는 KLDP 위키 페이지에서 수정된 내용을 반영하고 있으며, 번역을 하면서 센다 유지(千旦 裕司)님의 일본어 번역판을 참고하였습니다. 이 문서의 내용은 꽤 오래 되었으며 제가 시험해 보지 않았기 때문에 동작하지 않는 것도 있을 수 있습니다.
이 번역은 원문과 마찬가지로 그누 일반 공중 사용 허가서(GNU General Public License)의 규정에 따라 이용할 수 있습니다.
이 문서는 소스 코드로부터 최소한의 리눅스 시스템을 만들기 위한 지시 사항들을 담고 있습니다. 이 문서는 From PowerUp to Bash Prompt의 일부분이었지만, 저는 문서들이 짧고 집중된 상태를 유지하도록 하기 위해, 원래의 문서를 분리하였습니다. 우리가 여기서 만드는 시스템은 매우 작으며, 실제로 작업을 하기에 적합하지 않습니다. 만약 여러분이 실용적인 시스템을 완전히 새로 만들고 싶으시다면 Gerard Beekmans의 Linux From Scratch HOWTO를 대신 보십시오.
준비물
우리는 레드햇과 같은 배포판을 한 파티션에 설치하고, 이를 이용해서 다른 파티션에 새로운 리눅스 시스템을 만들 것입니다. 저는 우리가 만드는 시스템을 대상(target)
이라고 부르고, 그것을 만들기 위해 사용하는 시스템을 바탕(source)
이라고 부를 것입니다.
따라서 여러분은 두 개의 여유 파티션을 가진 기계가 필요할 것입니다. 가능하다면 중요한 정보가 저장되지 않은 기계를 사용하십시오. 여러분은 이미 설치되어 있는 리눅스를 바탕 시스템으로 쓸 수 있겠지만, 저는 그것을 권장하지 않습니다. 실수로 여러분이 우리가 다루는 명령어의 인자 하나를 잘못 남긴다면, 프로그램들을 바탕 시스템에 설치하게 될 수도 있습니다. 그러면 호환되지 않거나 충돌이 일어나게 될 것입니다.
486이나 그전의 것과 같이 오래된 PC 하드웨어의 바이오스에는 우리를 귀찮게 하는 한계가 있습니다. 그 바이오스들은 첫 512메가바이트 뒤의 하드 디스크를 읽기 못합니다. 이것은 일단 리눅스가 시작되면 바이오스를 건너뛰고 자신만의 디스크 입출력을 수행하기 때문에 큰 문제가 되지는 않습니다. 하지만 오래된 기계에서 리눅스를 읽기 위해서는 커널이 512메가바이트 앞의 영역에 있어야 합니다. 만약 여러분이 이와 같은 기계를 가지고 있다면, 여러분은 완전히 512메가바이트 경계 아래에 있는 독립된 파티션이 필요할 것입니다. 이 파티션은 /boot
로 마운트되어 512메가바이트 경계 위에 있는 파티션들을 읽습니다.
제가 최근에 이것을 했을 때, 저는 래드햇 6.1을 바탕 시스템으로 사용하였습니다. 저는 베이스 시스템과
- cpp
- egcs
- egcs-c++
- patch
- make
- dev86
- ncurses-devel
- glibc-devel
- kernel-headers
을 설치하였습니다.
저는 문서들을 쉽게 읽기 위해서 X 윈도우와 모질라도 설치하였지만, 이것은 꼭 필요한 것은 아닙니다. 제가 작업을 마쳤을 때, 디스크 공간을 350M 정도 사용하였습니다. (커 보이는군요. 왜 그럴까요?)
완성된 대상 시스템은 650메가바이트를 사용하였지만, 이것은 모든 소스 코드들과 중간 과정의 파일들을 포함한 크기입니다. 공간이 부족하다면 여러분은 각 꾸러미를 설치한 뒤 make clean
을 실행해 주어야 할 것입니다. 그래도, 이 당황스럽게 늘어난 크기는 조금 걱정됩니다.
어쨌든, 여러분은 우리가 만드려고 하는 시스템을 위한 소스 코드들이 필요할 것입니다. 제가 이 문서에서 꾸러미
라고 부른 것들입니다. 꾸러미들은 소스 CD나 인터넷으로부터 얻을 수 있습니다. 저는 미국과 호주 미러들의 URL을 제시하도록 하겠습니다.
- MAKEDEV 미국 미러 다른 미국 미러
- Lilo 미국 미러 호주 미러
- Linux Kernel 언제나 바쁜 미국 미러나 호주 미러를 쓰시기 보다는 커널 홈 페이지에 나와있는 다른 미러들 중에서 하나를 사용하세요.
- GNU libc 자신과 linuxthreads addon은 미국 미러나 호주 미러에서 구하세요.
- GNU libc addons 여러분은 linuxthreads와 libcrypt addons도 필요로 할 것입니다. 만약 libcrypt가 위의 사이트에 없다면 암호와 관련된 기술의 수출을 금지하는 미국의 법 때문일 것입니다. 여러분은 그것을 libcrypt에서 구할 수 있을 것입니다. linuxthreads addon은 libc 자신이 있는 곳과 같은 곳에 있습니다.
- GNU ncurses 미국 미러 호주 미러
- SysVinit 미국 미러 호주 미러
- GNU Bash 미국 미러 호주 미러
- GNU sh-utils 미국 미러 호주 미러
- util-linux 다른 곳의 미러 호주 미러 이 꾸러미는
agetty
와login
을 포함합니다.
정리하면, 여러분은 다음 준비물이 필요할 것입니다:
- 아마 더 적어도 가능하겠지만, 각각 400메가바이트와 700메가바이트 정도 되는 두 개의 여유 파티션을 가진 파티션
- 리눅스 배포판(예를 들어 래드햇 CD)과 설치 도구(예를 들어 CD ROM 드라이브)
- 위에 나와 있는 소스 코드들
저는 여러분이 바탕 시스템을 저의 도움이 전혀 없이 스스로 설치하실 수 있다고 생각합니다. 여기서부터, 저는 여러분이 바탕 시스템의 설치를 끝냈다고 가정하겠습니다.
이 작은 프로젝트의 첫번째 단계의 목표는 커널이 시작 된 뒤 init
를 찾을 수 없어서 패닉을 일으키는 것을 보기 위해 커널을 얻는 것입니다. 이것은 우리가 커널과 lilo를 설치해야 한다는 것을 의미합니다. 어쨌든 lilo를 잘 설치하려면 우리는 /dev
디렉토리에 있는 디바이스 파일들이 필요합니다. 부트 섹터를 쓰기 위한 저수준의 디스크 액세스를 위해서 lilo는 디바이스 파일들을 필요로 합니다. MAKEDEV는 이러한 디바이스 파일들을 만드는 스크립트입니다. (물론 바탕 시스템에서 디바이스 파일들을 복사해도 되지만, 그건 반칙입니다!) 하지만 무엇보다도 우리는 이 모든 것을 집어넣기 위한 파일 시스템을 필요로 합니다.
파일 시스템
우리의 새 시스템을 파일 시스템 안에 자리잡게 될 것입니다. 그래서 먼저 우리는 mke2fs
를 이용해서 파일 시스템을 만들어야 합니다. 그리고 어딘가에 마운트해야 합니다. 저는 /mnt/target
을 제안합니다. 이제부터 저는 새 파일 시스템이 그곳에 있다고 가정할 것입니다. 여러분은 바탕 시스템이 시작될 때마다 자동으로 새 파일 시스템을 마운트 할 수 있도록 /etc/fstab
에 항목을 추가하여 좀더 편하게 작업할 수도 있을 것입니다.
우리가 대상 시스템을 부팅하게 되면 /mnt/target
에 있던 내용들은 /
에 있게 될 것입니다.
대상 시스템에는 디렉토리 구조가 있어야 할 것입니다. 이것이 어떠해야 하는지 알기 위해 파일 계층 표준(File Heirarchy Standard)을 확인하시거나(파일시스템을 보십시오.), 그냥 대상이 마운트 된 곳으로 cd
하신 뒤에 아래의 명령들을 입력하십시오.
mkdir bin boot dev etc home lib mnt root sbin tmp usr var cd var; mkdir lock log run spool cd ../usr; mkdir bin include lib local sbin share src cd share/; mkdir man; cd man mkdir man1 man2 man3 ... man9
FHS와 대부분의 꾸러미들은 man 페이지들의 위치에서 차이를 보이기 때문에, 아래의 심볼릭 링크가 필요할 것입니다.
cd ../..; ln -s share/man man
MAKEDEV
우리는 소스 코드들을 대상의 /usr/src
디렉토리에 넣을 것입니다. 그러므로 예를 들어 여러분의 대상 시스템이 /mnt/target
에 마운트되어 있고 여러분의 타르볼(tarball)들은 /root
에 있다면 여러분은 아래와 같이 입력해야 할 것입니다.
cd /mnt/target/usr/src tar -xzvf /root/MAKEDEV-2.5.tar.gz
단순히 타르볼을 복사하지 마세요. 그것은 서투른 일입니다. ;)
보통 여러분이 소프트웨어를 설치할 때, 여러분은 그것을 현재 동작하고 있는 시스템 위로 설치합니다. 하지만 우리는 마치 /mnt/target
이 루트 파일시스템인 것처럼 설치하고자 하기 때문에 그렇게 해서는 안됩니다. 이런 일을 하는 방법은 꾸러미들에 따라 다릅니다. MAKEDEV를 위해서는 여러분은 아래와 같이 입력하여야 합니다.
ROOT=/mnt/target make install
여러분은 README나 INSTALL 파일들을 보시거나 ./configure --help
를 입력하셔서 옵션들을 찾아보셔야 할 것입니다.
MAKEDEV의 Makefile
을 보시고 우리가 위의 명령어로 설정한 ROOT
변수로 무엇을 하는지 알아보십시오. 그 다음에 man ./MAKEDEV.man
으로 매뉴얼을 보시고 어떻게 동작하는지 알아보십시오. 여러분은 우리의 디바이스 파일들을 만드는 방법이 cd /mnt/target/dev
를 한 뒤, ./MAKEDEV generic
을 하는 거라는 것을 아실 수 있을 것입니다. ls
를 하셔서 MAKEDEV가 만든 모든 디바이스들을 보십시오.
커널
다음으로 우리는 커널을 만들 것입니다. 저는 여러분이 이것을 전에 해 봤다고 생각하기 때문에, 간단히만 다룰 것입니다. 부트할 수 있는 커널이 있으면 lilo를 설치하기가 쉬워집니다. 대상의 usr/src
디렉토리로 돌아가서 리눅스 커널의 소스를 그곳에 푸십시오. 리눅스 소스 트리로 들어가서(cd linux
) 여러분이 좋아하는 방법, 예를 들어 make menuconfig
로 커널을 설정하십시오. 여러분은 모듈이 없도록 커널을 설정해서 설치 과정을 조금 더 쉽게 할 수 있을 것입니다. 만약 여러분이 모듈을 사용하도록 설정하셨다면, 여러분은 Makefile
에서 INSTALL_MOD_PATH
를 찾아 /mnt/target
로 설정해야 할 것입니다.
이제 여러분은 make dep
, make bzImage
을 하실 수 있고, 여러분이 모듈을 설정했다면 make modules
, make modules_install
도 해야 할 것입니다. 커널 arch/i386/boot/bzImage
와 system map System.map
을 대상 시스템의 부트 디렉토리인 /mnt/target/boot
로 복사하십시오. 이제 우리는 lilo를 설치할 준비가 되었습니다.
Lilo
Lilo에는 QuickInst
라고 불리는 깔끔한 스크립트가 포함되어 있습니다. lilo 소스를 대상의 소스 디렉토리에 풀고, ROOT=/mnt/target ./QuickInst
와 같이 실행하세요. 스크립트는 여러분에게 어떻게 lilo가 설치될지에 대한 질문을 합니다.
우리가 ROOT
를 대상 파티션으로 설정했기 때문에, 파일 이름들을 대상 파티션을 기준으로 한 상대적인 위치로 알려 주어야 합니다. 그래서 기본으로 부트할 커널의 위치에 대해 물어볼 때 /mnt/target/boot/bzImage
가 아닌 /boot/bzImage
라고 답해야 합니다. 스크립트에 작은 버그가 있기 때문에
./QuickInst: /boot/bzImage: no such file
라고 나올 것입니다. 하지만 무시하시면 됩니다.
QuickInst
가 어디에 부트 섹터를 설치하게 해야 할까요? 우리는 재부팅 했을 때 바탕 시스템이나 대상 시스템, 또는 컴퓨터에 있는 다른 시스템으로 부팅할 수 있도록 선택할 수 있기를 바랍니다. 또한 우리가 지금 만드는 리로가 새로운 시스템의 커널을 읽도록 하고 싶어합니다. 어떻게 우리가 이 두 가지 목표를 다 달성할 수 있을까요? 약간 주제에서 벗어나겠지만 이중 부트 리눅스 시스템에서 lilo가 어떻게 DOS를 부트하는지 알아보도록 합시다. 이러한 파일시스템을 위한 lilo.conf
는 아마도 아래와 같을 것입니다.
prompt timeout = 50 default = linux image = /boot/bzImage label = linux root = /dev/hda1 read-only other = /dev/hda2 label = dos
이와 같이 설치되면, 마스터 부트 레코드(master boot record)는 바이오스에 의해 읽혀지고 실행된 뒤, 프롬프트를 주는 lilo 부트로더를 부르게 됩니다. 만약 그 프롬프트에서 여러분이 dos
라고 치시면 lilo는 hda2의 부트 섹터를 부르게 되고, DOS가 불리게 됩니다.
우리가 하려고 하는 것도 hda2 대신에 QuickInst
가 설치하려고 하는 다른 lilo 부트 섹터를 이용하는 것을 제외하면 동일합니다. 그래서 리눅스 배포판의 lilo는 우리가 만든 lilo를 부르고, 불려진 lilo는 우리가 만든 커널을 부르게 될 것입니다. 재부팅을 할 때 여러분은 두 개의 lilo 프롬프트를 볼 것입니다.
간단히 정리하면, QuickInst
가 여러분께 어디에 부트 섹터를 위치할 것인지 물어보면, 여러분의 /dev/hda2
와 같이 대상 파일시스템이 있는 디바이스를 지정하십시오.
이제 여러분의 시스템의 lilo.conf
를 아래와 같은 줄을 가지도록 고치십시오.
other = /dev/hda2 label = target
Lilo를 실행하면 우리는 대상 시스템으로 첫 부트를 할 수 있게 됩니다.
Glibc
다음으로 우리는 init
를 설치해야 하겠지만, 리눅스에서 실행되는 거의 모든 다른 프로그램과 같이, init
는 GNU C 라이브러리인 glibc에서 제공하는 라이브러리 함수들을 사용합니다. 그러니 우리는 glibc를 먼저 설치하도록 합시다.
Glibc는 매우 크고 복잡한 꾸러미입니다. 8메가 바이트의 램이 장착된 저의 오래된 386sx/16 컴퓨터로는 설치하는 데 90시간 정도가 걸렸습니다. 하지만 64메가바이트의 메모리가 있는 저의 셀러론 433 컴퓨터로는 33분밖에 걸리지 않았습니다. 제 생각에는 얼마나 시간이 걸리는지는 메모리가 주로 결정하는 것 같습니다. 만약 여러분이 8메가바이트(나, 공포스럽게도 더 작은 크기)의 메모리를 가지고 있었다면 더 많은 설치 시간 걸릴 테니 준비를 하시기 바랍니다.
Glibc 설치 문서는 glibc를 독립된 디렉토리에 설치할 것을 권하고 있습니다. 이렇게 하면 여러분은 단지 그 디렉토리를 지우는 것만으로, 쉽게 재시작할 수 있습니다. 또한 이렇게 하면 265메가바이트 정도의 메모리가 절약됩니다.
평소처럼 glibc-2.1.3.tar.gz
(나 다른 버전의) 타르볼을 /mnt/target/usr/src
에 풉니다. 이제, 우리는 glibc의 디렉토리에서 애드온들(add-ons)
의 압축도 풀 것입니다. 그러니 cd glibc-2.1.3
하시고, glibc-crypt-2.1.3.tar.gz
와 glibc-linuxthreads-2.1.3.tar.gz
타르볼을 그곳에 푸십시오.
이제 우리는 설치 디렉토리를 만들고, 설정한 뒤, glibc를 만들고(make) 설치(install)할 것입니다. 저는 아래와 같이 입력했지만, 문서들을 스스로 읽으시고 여러분의 상황에 가장 적합하게 입력하십시오. 한편, 여러분은 glibc를 설치하기 전에 df
명령어를 통해서 여유 공간이 얼마나 있나를 볼 수 있습니다. Glibc를 설치한 뒤, 어디에서 용량이 낭비되었는지 보기 위해서 df
를 다시 하실 수도 있습니다.
cd .. mkdir glibc-build ../glibc-2.1.3/configure --enable-add-ons --prefix=/usr make make install_root=/mnt/target install
우리가 꾸러미를 어디에 설치할지 설정하는 또 다른 방법이 있다는 점에 주의하십시오.
SysVinit
SysVinit 바이너리를 만들고 설치하는 것은 매우 단순합니다. src/
서브 디렉토리의 Makefile
을 조금 해킹해 주어야 합니다. 마지막 네 줄에서, 여러분은 /dev/initctl
바로 앞에 $(ROOT)
를 추가해 주셔야 합니다. 예를 들어
@ if [ ! -p /dev/initctl ]; then \
은
@ if [ ! -p $(ROOT)/dev/initctl ]; then \
이 됩니다.
이 initctl
디바이스 파일은 init와의 통신 수단 중의 하나입니다. 예를 들어 init
맨 페이지를 보면, 주 전원이 끊기려고 하여 UPS 전원에서 동작하고 있을 때 SIGPWR 대신 이 파일을 써서 init를 종료하도록 하고 있습니다. 방금 우리가 한 해킹은 대상 시스템을 위한 것이며, 바탕 시스템에는 영향을 주지 않습니다.
이것이 끝났으면, src
서브디렉토리에서 다음 명령들을 입력하십시오.
make ROOT=/mnt/target make install
init
와 관련된 스크립트들은 매우 많습니다. SysVinit 꾸러미 안에 잘 동작하는 예제 스크립트들이 있습니다. 하지만 여러분은 스크립트들을 수동으로 설치해야 할 것입니다. 그것들은 SysVinit 소스 트리 안의 debian/etc
아래의 계층에 있습니다. 여러분은 cd ../debian/etc; cp -r * /mnt/target/etc
와 같은 방법으로 스크립트들을 대상의 etc
디렉토리로 직접 복사하시면 됩니다. 여러분은 복사하시기 전에 스크립트들의 내용을 보고 싶으실 것입니다!
재부팅을 할 때 init
을 읽어들이기 위한 위한 준비가 대상 커널에 대해서 완전히 끝났습니다. 지금 문제는 bash
가 없기 때문에 스크립트가 실행되지 않을 것이라는 것입니다. 또한, init
는 getty
를 실행시키려고 하지만, 실행시킬 getty
가 없습니다. 재부팅을 해 보시고 잘못된 것이 없다는 것을 확인하세요.
Ncurses
우리가 다음으로 필요를 하는 것은 Bash이지만, bash는 ncurses를 필요로 하기 때문에 이것을 먼저 설치합니다. Ncurses는 텍스트 스크린을 다루는 수단으로서 termcap을 대체하였지만, tercap의 콜(call)들을 지원함으로써 오래된 프로그램과의 호환성(backwards compatibility)을 지원합니다. 깨끗하고 단순한 현대적인 시스템을 만들기 위해서는, 구식인 termcap 메소드(method)를 끄는 것이 가장 좋을 것이라고 생각합니다. 여러분은 나중에 termcap을 쓰는 구식인 어플리케이션을 컴파일할 때 문제에 직면하게 될지도 모릅니다. 하지만 최소한 여러분은 무엇이 무엇을 쓰는지는 알 것입니다. 만약 필요하다면 termcap을 지원하도록 ncurses를 다시 컴파일 할 수 있을 것입니다.
제가 사용한 명령어는 아래와 같습니다.
./configure --prefix=/usr --with-install-prefix=/mnt/target --with-shared --disable-termcap make make install
Bash
Bash를 설치하는 데에는 제가 생각했던 것보다 더 많은 읽기와 생각과 시행착오가 필요했습니다. 제가 사용한 설정 옵션들은 아래와 같습니다.
./configure --prefix=/mnt/target/usr/local --exec-prefix=/mnt/target --with-curses
일단 여러분이 Bash를 만들고 설치하셨다면, cd /mnt/target/bin; ln -s bash sh
와 같은 방법으로 심볼릭 링크를 만드십시오. 많은 스크립트들이 아래와 같은 줄로 시작하기 때문입니다.
#!/bin/sh
심볼릭 링크가 없다면 이러한 스크립트들은 /bin/bash
가 아닌/bin/sh
를 찾기 때문에 실행될 수 없을 것입니다.
여러분이 재부팅을 하시고 싶다면 지금 하실 수 있습니다. 이제는 스크립트가 실제로 실행되지만, getty
나 login
프로그램이 없기 때문에 로그인은 하실 수 없다는 것에 주의하십시오.
Util-linux (getty와login)
Util-linux 꾸러미는 agetty
와 login
을 포함합니다. 우리가 로그인 하고 배시 프롬프트를 받기 위해서는 둘 다가 필요합니다. 이것이 설치된 뒤에는 대상의 /sbin
디렉토리에서 agetty
에서 getty
로의 심볼릭 링크를 만드십시오. 모든 유닉스 계열의 시스템에서는 getty
가 설치되었다고 가정하기 때문에, agetty
를 실행시키기 위해 inittab
을 해킹하는 것보다 심볼링 링크를 만드는 것이 더 낫습니다.
Util-linux를 컴파일하는 데 있어 문제가 하나 남았습니다. 이 꾸러미는 more
을 포함하지만, 저는 make
과정에서 more
를 바탕 시스템의 ncurses 4 대신 ncurses 5로 링크하도록 할 수 없었습니다. 저는 그것에 대해 더 자세히 알아 볼 것입니다.
대상 시스템에는 /etc/passwd
파일이 있어야 할 것입니다. login
프로그램은 이 파일을 이용하여 여러분이 허용된 사용자인지를 확인할 것입니다. 현 단계에서 시스템은 장난감 상태이기 때문에 우리는 패스워드 없이 루트 유저만을 설치하는 엄청난 일을 할 수 있습니다!! 대상의 /etc/passwd
에 아래를 입력하세요.
root::0:0:root:/root:/bin/bash
항목들은 콜론들로 구분되어 있으며, 왼쪽부터 차례대로 사용자 ID, (암호화된)비밀번호, 사용자 번호, 그룹 번호, 사용자의 이름, 홈 디렉토리, 기본 셸입니다.
Sh-utils
우리가 필요로 하는 마지막 꾸러미는 GNU sh-utils입니다. 여기서 우리가 필요한 것은 /etc/init.d/rc
에서 쓰이는 stty
뿐입니다. /etc/init.d/rc
는 런레벨들(runlevels)을 변경하고, 초기 런레벨로 진입하는 데 쓰입니다. 사실 저는 stty
만을 포함하고 있는 꾸러미를 가지고서 사용하였지만, 어디에서 구했는지 기억할 수 없었습니다. 여러분이 시스템을 편하게 사용하시기 위해 필요로 할 다른 프로그램들도 포함되어 있기 때문에, GNU 꾸러미를 사용하는 것이 바람직합니다.
자 끝났습니다. 여러분은 이제 부팅하고 로그인을 위한 프롬프트를 여러분에게 출력해 줄 시스템을 가지게 되었습니다. 여러분은 이것을 가지고 많은 일은 하지 못할 것입니다. 여기에는 여러분의 결과물을 보여줄 ls
명령어조차 없습니다. 탭(tab)키를 두번 누르시면 가능한 명령어들을 볼 수 있을 것입니다. 이것이 제가 해본 것 중에서는 가장 만족스러운 것입니다.
편리한 사용을 위해서
우리가 거의 쓸모없는 시스템을 만들었다고 생각될 수도 있습니다. 하지만 실제로는 이 시스템이 무언가 하도록 하기 위해 해야 할 일이 많지는 않습니다. 여러분이 가장 먼저 해야 할 일 중의 하나는 루트 파일 시스템을 읽기-쓰기로 마운트하는 것입니다. SysVinit 꾸러미 안에는 이와 같은 일을 하고 mount -a
를 실행하여 여러분이 /etc/fstab
에 써 놓은 대로 파일시스템을 마운트하는 /etc/init.d/mountall.sh
라는 스크립트가 있습니다. etc/rc2.d
안에 S05mountall
과 같은 심볼릭 링크를 넣으십시오.
이 스크립트는 여러분이 아직 설치하지 않은 명령들을 사용할 수도 있습니다. 그렇다면 그 명령을 포함하는 꾸러미를 찾아서 설치하십시오. 잡다한 팁들에 어떻게 꾸러미들을 찾는지에 관한 도움말이 있습니다.
/etc/init.d
의 다른 스크립트들도 보십시오. 그들 대부분은 대부분의 진짜 시스템에는 포함되어 있어야 합니다. 그들을 하나씩 설치해 보십시오. 설치하기 전에 모든 것이 잘 돌아간다는 것을 확인하십시오.
파일 계층 표준에 대해 알아보십시오. (파일시스템을 보십시오.) 이것은 /bin
과 /sbin
에 있어야 할 명령어들의 목록을 제공합니다. 모든 명령어들이 설치되었는지 확인하십시오. 이것을 규정한 POSIX 문서를 찾아 보시면 더 좋을 것입니다.
여기서부터는 여러분이 필요한 것이 있는 꾸러미를 계속 설치하시면 됩니다. gcc
와 make
같은 설치 도구들을 설치하는 것은 빠를수록 좋습니다. 이들이 설치되면, 여러분은 대상 시스템에서 스스로를 설치할 수 있을 것입니다. 이는 바탕 시스템에서 하는 것보다 덜 복잡합니다.
추가 정보
잡다한 팁들
만약 여러분이 RPM을 지원하는 리눅스 시스템에서 thingy
라는 명령이 있고, 이 명령을 얻을 수 있는 소스를 알고 싶으시다면 아래의 명령을 쓰시기 바랍니다.
rpm -qif `which thingy`
여러분이 래드햇 CD를 가지고 있다면, 여러분은 아래의 코드를 이용하여 소스 코드를 설치할 수 있습니다.
rpm -i /mnt/cdrom/SRPMS/what.it.just.said-1.2.srpm
이것은 타르볼과 래드햇의 패치들을 /usr/src/redhat/SOURCES
에 풀어 놓을 것입니다.
링크
- Building and Installing Software Packages for Linux는 소프트웨어를 소스로부터 설치하는 것을 다루는 좋은 하우투입니다.
- The Linux From Scratch HOWTO는 리눅스 시스템을 소스로부터 설치하는 것에 대한 하우투입니다. 이것은 배우기 위한 연습으로서 설치하는 것 보다 실제로 사용하기 위해 설치하는 것에 더 집중합니다.
- 유닉스 파일 시스템 표준(Unix File System Standard) 이 문서는 유닉스 파일 시스템에서 무엇이 어디에 있어야 하며, 그 이유는 무엇인지 설명합니다. 또한,
/bin
,/sbin
등에 최소한 무엇이 있어야 하는지를 설명합니다. 여러분이 완전하지만 가능한 한 작은 시스템을 만드려고 하신다면 좋은 참고 자료입니다.
이 문서에 대해서
저작권
This document is copyright (c) 1999, 2000 Greg O'Keefe. You are welcome to use, copy, distribute or modify it, without charge, under the terms of the GNU General Public Licence. Please acknowledge me if you use all or part of this in another document.
홈페이지
이 문서의 최신판은 From Powerup To Bash Prompt에 있습니다.
피드백
저는 여러분의 어떠한 조언이나 비평, 개선을 위한 제안도 듣고 싶습니다. 그것들을 저, Greg O'Keefe에게 보내십시오.
감사
제품 이름들은 각각의 소유자의 상표이며, 여기에서 감사를 드립니다.
이 문서를 쓸 수 있도록 도와주신 데 대해 아래의 분들께 감사를 드리고 싶습니다.
- Michael Emery
- Unios를 알려 주셨습니다.
- Tim Little
/etc/passwd
에 대해 도움을 주셨습니다.- efnet의 #linux에 계신 sPaKr
- syslogd는
/etc/services
를 필요로 한다는 것을 알려주셨고, 시스템을 소스 코드로 설치하는 것을 묘사하기 위한여러분의 것을 돌린다(rolling your own)
는 표현을 소개해 주셨습니다. - Alex Aitkin
- 저에게 Vico와 그의
verum ipsum factum
(understanding arises through making, 이해는 만듦에서 기원한다)을 저에게 소개해 주셨습니다. - Dennis Scott
- 저의 16진수 계산을 고쳐 주셨습니다.
- jdd
- 오자들을 지적해 주셨습니다.
변경 기록
0.8 → 0.9
- Added hack to sysvinit makefile. This info is due to Gerard Beekmans of
Linux From Scratch
fame.
0.8
- 첫번째 판.
From PowerUp to Bash Prompt
에서 분리함.
할 일
- 닥북으로 변환하기.