배포본을 사용않고 만드는 리눅스 시스템

Gerard Beekmans December 16th, 1999
譯 윤봉환, <el@linuxlab.co.kr>

 

     

    이 글은 배포판을 전혀 사용하지 않고 필요한 소프트웨어 소스를 직접 가져와서, 여러분 자신만의 리눅스 시스템을 구성하는 절차를 설명한다.

 

11. Reinstalling statically linked software

    이 섹션에서 우리는 이전에 정적으로 링크되어 있던 모든 소프트웨어를 동적으로 다시 설치할 것이다.  이 과정은 우리가 Glibc를 설치하기 위한 시스템을 준비할 때처럼 매우 간단한 일이다.

    이 섹션은 매우 주의 깊게 살펴보아야 한다. 만약 여러분이 이전에 설치한 모든 소프트웨어를 다시 설치하려고 생각조차도 하지 않을 작정이라면, 적어도 이 섹션에서 다루는 새로운 라이브러리와 프로그램이라도 살펴보기 바란다. 이미 설치된 프로그램들 가운데 몇 가지는 동적으로 링크될 때 어떤 라이브러리에 의존성을 가진다. 그러나 이들 라이브러리는 이미 설치된 프로그램들뿐만 아니라, 여러분이 설치하려 하는, 또 다른 소프트웨어에게도 필요하다. 게다가, 몇몇 프로그램들은 자신이 설치되기 위해 다른 프로그램들이 필요하다고 요구하기도 한다. 우리가 Glibc와 GCC를 설치하는 동안에는 그런 프로그램들이 필요 없지만, 나중에 생길지도 모르는 문제들을 피하기 위해 그 프로그램들을 설치할 것이다.

    11.1 Installing the Termcap library

    ·Termcap 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make를 실행해서 패키지를 컴파일한다.
    ·make install 명령을 실행해서 패키지를 설치한다.

    11.2 Installing the Readline library

    ·Readline 아카이프를 풀어놓는다.
    ·make CC=/usr/gcc2723/bin/gcc  SHOBJ_CC=/usr/gcc2723/bin/gcc shared 명령을
      실행해서 패키지를 컴파일한다.
    ·make CC=/usr/gcc2723/bin/gcc install 명령을 실행해서 패키지를 설치한다.
    ·make install-shared 명령을 실행해서 공유 라이브러리들을 설치한다.

    11.3 Reinstalling Bash

    ·Bash 아카이브를 풀어놓는다.
    ·configure --with-installed-readline 명령을 실행해서 패키지를 설정한다.
    ·makeCC=/usr/gcc2723/bin/gcc 명령을 실행해서 패키지를 컴파일한다.
    ·Makefile을 열어서 bindir 변수를 찾는다.
    ·현재 값을 /bin으로 바꾼다.
    ·make install 명령을 실행해서 패키지를 설치한다.

    방금 설치한 Bash 버전은 컴파일러에 -g 플래그를 덧붙여, 디버깅(debugging) 정보와 함께 컴파일되었다.  이 것은 여러분이 디버거를 통해서 bash를 실행하려 한다면 언제나 사용자가 읽을 수 있는 형태로 그 정보를 출력한다는 것을 뜻한다. 디버거 정보가 없이 컴파일된 바이너리는 디버깅 작업을 수행하기 매우 힘들다. 여러분이 디버그 프로그램들을 전혀 사용하지 않는다면 디버깅 정보를 지워도 좋다.

    여러분이 프로그램을 컴파일할 때는 언제나 Makefile을 편집해서 -g 컴파일러 플래그를 제거하거나,(종종 CFLAGS 변수를 만나기도 한다) 하나 또는 둘 이상의 실행 패러미터들을 덧붙여 스트립 프로그램을 실행할 수 있다. 그렇게 되면 모든 디버깅 정보가 지워질 것이다.(이렇게 하더라도 프로그램 자신에는 어떤 형태로든 전혀 영향을 주지 않는다) 선택은 여러분에게 달려있다.

    11.4 Reinstalling Sysvinit

    ·Sysvinit 패키지를 풀어놓는다.
    ·src 디렉터리로 간다.
    ·make를 실행해서 패키지를 컴파일한다.
    ·make install 명령을 실행해서 패키지를 설치한다.

    11.5 Reinstalling Make

    ·Make 패키지를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make를 실행해서 패키지를 컴파일한다.
    ·make install 명령을 실행해서 패키지를 설치한다.

    11.6 Reinstalling Sed

    ·Sed 패키지를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make를 실행해서 패키지를 컴파일한다.
    ·make install 명령을 실행해서 패키지를 설치한다.

    11.7 Reinstalling Shell Utils

    ·Shell Utils 패키지를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make를 실행해서 패키지를 컴파일한다.
    ·src 디렉터리로부터 다음 바이너리들을 찾아 /bin 디렉터리에 복사한다:
      date echo false pwd sleep stty su true uname
    ·src 디렉터리로부터 다음 바이너리들을 찾아 /sbin 디렉터리에 복사한다: chroot
    ·src 디렉터리로부터 다음 바이너리들을 찾아 /usr/   bin디렉터리에 복사한다:
      basename dirname env expr factor groups id logname nice nohup patchchk printenv
      printf seq tee test tty uptime users who whoami yes

    11.8 Reinstalling File Utils

    ·File Utils 패키지를 풀어놓는다.
    ·configure 명령으로 패키지를 설정한다.
    ·make를 실행해서 패키지를 컴파일한다.
    ·Makefile을 연다.
    ·다음 변수들을 찾는다: bindir sbindir sysconfdir local-lstatedir
    ·다음 값들을 남기고 $(exec_prefix)와 $(prefix) 부분을 제거한다: /bin /sbin /etc and /var
    ·make install 명령을 실행해서 패키지를 설치한다.
    ·/bin/install 파일을 /usr/bin 디렉터리에 옮긴다.

    11.9 Reinstalling + Installing Util Linux

    ·Util Linux 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·lib 디렉터리로 간다.
    ·그 곳에서 running make 명령을 실행해 파일들을 컴파일한다.
    ·fdisk 디렉터리로 간다.
    ·그 곳에서 make fdisk 명령을 실행해 파일들을 컴파일한다.
    ·그 곳에서 make cfdisk 명령을 실행해 파일들을 컴파일한다.
    ·다음 바이너리들을 /sbin 디렉터리에 복사한다:cfdisk fdisk
    ·다음 바이너리들을 /usr/man/man8 디렉터리에 복사한다: cfdisk.8 fdisk.8
    ·login-utils 디렉터리로 간다.
    ·다음 바이너리들을 /usr/man/man1 디렉터리에 복사한다: login.1
    ·다음 바이너리들을 /usr/man/man8 디렉터리에 복사한다: agetty.8
    ·mount 디렉터리로 간다.
    ·그 곳에서 make 명령을 실행해 유틸리티들을 컴파일한다.
    ·다음 바이너리들을 /sbin 디렉터리에 복사한다:mount umount swapon losetup
    ·다음 바이너리들을 /usr/man/man8 디렉터리에 복사한다: All *.8 files
    ·/sbin/swapoff 심볼릭 링크를 지우고 /sbin/swapon 에 다시 심볼릭 링크해서
      /sbin/swapoff를 만든다.
    ·sys-utils 디렉터리로 간다.
    ·그 곳에서 make dmesg 명령을 실행해 dmesg를 컴파일한다.
    ·그 곳에서 make rdev 명령을 실행해 rdev를 컴파일한다.
    ·다음 바이너리들을 /bin 디렉터리에 복사한다: dmesg
    ·다음 바이너리들을 /sbin 디렉터리에 복사한다: rd-rdev
    ·다음 바이너리들을 /usr/man/man8 디렉터리에 복사한다:
      dmesg.8 rdev.8 swapdev.8 ramsize.8 vidmo-de.8 rootflags.8
    ·/sbin/rdev를 심볼릭 링크해서 /sbin/rdev, /sbin/swa-pdev, /sbin/ramsize,
      /sbin/vidmode, /sbin/rootflags를 만든다.
    ·text-utils 디렉터리로 간다.
    ·그 곳에서 make more MOREHELPDIR=/usr/share/more 명령을 실행해 make를
      컴파일한다.
    ·다음 바이너리들을 /bin 디렉터리에 복사한다: more
    ·다음 바이너리들을 /usr/man/man1 디렉터리에 복사한다: more.1
    ·/usr/share/more 디렉터리를 만든다.
    ·다음 바이너리들을 /usr/share/more 디렉터리에 복사한다: more.help

    11.10 Reinstalling Text Utils

    ·Text Utils 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·src/Makefile을 열어 다음 변수를 찾는다: bindir
    ·현재 값을 다음 값으로 바꾼다: /usr/bin
    ·make install 명령을 실행해 패키지를 설치한다.
    ·/usr/bin/cat을 /bin/cat으로 옮긴다.

    11.11 Reinstalling Tar

    ·Tar 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·src/Makefile을 열어 다음 변수를 찾는다: bindir and libexecdir
    ·bindir 변수에 다음 값을 넣는다: /bin
    ·libexecdir 변수에 다음 값을 넣는다: /usr/bin
    ·make install 명령을 실행해 패키지를 설치한다.
    ·원격 테이프서버 프로그램(ReMote Tapeserver program)이 필요하지 않다면 /usr/bin/rmt
      프로그램을 지우면 된다.

    11.12 Reinstalling Gzip

    ·Gzip 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.

    나는 버전 1.2.4를 사용하는데 컴파일을 진행하는 동안 이런 에러를 만나게 되었다: conflicting types for basename. 만약 여러분에게도 이 에러 때문에 문제가 된다면 다음 방법으로 고친다:

    ·gzip.h 파일을 열과 다음 줄을 찾는다: extern char *basename OF((char *fname));
    ·이 줄을 다음과 같이 바꾼다: extern char *basename2 OF((char *fname));
    ·util.c 파일을 열과 다음 줄을 찾는다: char *basename(fname)
    ·이 줄을 다음과 같이 바꾼다: char *basename2(fname)

    이제 패키지를 다시 컴파일하면(make로) 이번에는 문제없이 컴파일 과정이 수행될 것이다.

    ·Makefile을 열어 다음 변수를 찾는다: bindir
    ·현재 값을 다음 값으로 바꾼다: /bin
    ·make install 명령을 실행해 패키지를 설치한다.

    11.13 Reinstalling Bison

    ·Bison 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    11.14 Installing Flex

    ·Flex 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    11.15 Reinstalling Binutils

    ·Binutils 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    11.16 Reinstalling Grep

    ·Grep 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    11.17 Reinstalling Mawk

    ·Mawk 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    11.18 Reinstalling Find Utils

    ·Find Utils 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.

    나는 버전 4.1을 사용하는데 컴파일을 수행하는 동안 이런 에러를 만났다. 비록 치명적인 에러이기는 하지만 이 에러가 발생했을 때 컴파일 과정이 멈추지는 않았다. 그러나 여러분은 다음과 같은 에러가 여러분의 시스템에서도 발생하는지 컴파일 과정에서 출력되는 정보들을 상세하게 감시할 필요가 있다: defs.h:30 4: conflicting types for `basename’. 만약 여러분도 이런 문제를 만난다면 다음 방법으로 고칠 수 있다:

    ·find/Makefile을 열어 다음 변수를 찾는다: CFLAGS
    ·다음 값을 추가한다: -D_GNU_SOURCE
    ·find/defs.h 파일을 열어 다음 줄을 찾는다: char *basename P_ ((char *fname));
    ·이 줄을 다음과 같이 바꾼다: char *basename2 P_ ((char *fname));
    ·find/util.c 파일을 열어 다음 줄을 찾는다: char *basename (fname)

    이 줄은 두 줄로 나뉘어 있다(“char *”가 첫 줄이고 “basename(fname)” 이 둘째 줄이다.)

    ·이 줄을 다음과 같이 바꾼다: char *basename2(fname)

    여러분도 굳이 이 줄을 두 줄로 나누어 둘 필요는 없다.  여러분이 그대로 두건, 그렇지 않건 아무 문제도 없다.

    이제 패키지를 다시 컴파일하면(make로) 이번에는 컴파일 과정에서 아무 문제도 생기지 않을 것이다.

    ·make install 명령을 실행해 패키지를 설치한다.

    11.19 Reinstalling Diff Utils

    ·Diff Utils 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    11.20 Installing Less

    ·Less 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    11.21 Reinstalling Perl

    ·아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.

    만약 여러분이 모든 기본 설정 값들에 동의한다면 Configure -d 명령으로 패키지를 컴파일할 수도 있을 것이다. 이 방법은 한 번도 엔터를 누를 필요 없이 기본 설정 값들로 컴파일 환경을 설정한다.

    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make test 명령을 실행해 패키지를 검사한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    11.22 Reinstalling M4

    ·M4 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    11.23 Reinstalling Texinfo

    ·Texinfo 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

     

12. Installing the rest of the basic system software

    우리가 만들고 있는 기본 시스템의 일부분인 나머지 소프트웨어는 이번 섹션을 통해 설치될 것이다. 여러분은 물론 모든 소프트웨어를 설치할 필요는 없겠지만, 이 섹션에서 소개하는 소프트웨어는 설치할 것을 권장한다.

    12.1 Installing E2fsprogs

     Installing E2fsprogs

    ·E2fsprogs 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.

    컴파일을 하는 동안 나는 이런 에러를 만났다:
       mke-2fs.c:142:SCSI_DISK_MAJOR not defined.
    이 문제를 다음과 같은 방법으로 해결했다:

    ·misc/mkefs.c 파일을 열어 첫 번째 만나는 SCSI_DISK_MAJOR를 찾아간다
    ·이것을 다음과 같이 바꾼다: SCSI_DISK0_MAJOR

    이렇게 바꾸었을 때 여러분의 SCSI 시스템에서 어떤 일이 생길지 모르겠지만, 나는 이보다 더 좋은 방법이 있는지 알지 못한다.  나는 IDE 시스템을 사용하고 있으므로 이 설정이 내게는 아무런 손상도 없었다.  만약 여러분이 SCSI 시스템을 사용하고 있다면, 나로서는 유감스럽지만 더 이상 조언을 해줄 수가 없다.

    ·make install 명령을 실행해 패키지를 설치한다.

    Creating the checkroot bootscript

    우리가 LFS 시스템으로 부트할 때는 언제나 root 파일시스템을 fsck 유틸리티로 점검할 것이므로, checkroot bootscript를 만들어야 한다.

    ·다음 내용을 담아 /etc/init.d/checkroot 파일을 만든다.
     

    #!/bin/sh
    # Begin /etc/init.d/checkroot 

    echo “Activating swap...”
    /sbin/swapon -av

    if [ -f /fastboot ]
    then
      echo “Fast boot, no file system check”
    else
      mount -n -o remount,ro /
      if [ $? = 0 ]
      then
        if [ -f /forcecheck ]
        then
          force=”-f”
        else
          force=””
        fi

        echo “Checking root file system...”
        fsck $force -a /

        if [ $? -gt 1 ]
        then
          echo
          echo “fsck failed. Please repair your file system manually by”
          echo “running fsck without the -a option”

          echo “Please note that the file system is currently mounted in”
          echo “read-only mode.”
          echo “
          echo “I will start sulogin now. CTRL will reboot your system.”
          /sbin/sulogin
          /reboot -f
        fi
      else
        echo “Cannot check root file system because it is not mounted in”
        echo “read-only mode.”
      fi
    fi

    # End /etc/init.d/checkroot 

 

    - Updating /etc/init.d/umountfs

    /etc/init.d/umounts 파일을 열어 첫 명령으로 다음 줄들을 넣는다.
    (“# Begin /etc/init.d/umountfs” 줄 아래에)

    ·echo “Deactivating swap...”
    ·/sbin/swapoff -av

    - Creating proper permissions and creating symlink

    ·chmod 755 /etc/init.d/checkroot 명령을 실행해서 checkroot 파일에 적절한 퍼미션을
      설정한다.
    ·cd /etc/rcS.d; ln -s ../init.d/checkroot S05checkroot 명령을 실행해서 적절한 심볼릭
      링크를 만든다.

    12.2 Installing File

    ·File 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    12.3 Installing Libtool

    ·Libtool 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    12.4 Installing Modutils

    ·Modutils 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    12.5 Installing Linux86

    내가 아는 한, 이 패키지는 다만 다음에 설치될 Lilo를 설치하기 위해서만 사용된다.
    그러므로 여러분은 Lilo를 설치한 다음에 as86과 ld86 두 프로그램을 지워도 된다.

    ·Linux86 아카이브를 풀어놓는다.
    ·as 디렉터리로 가서 make 명령을 실행해 프로그램을 컴파일한다.
    ·다음 바이너리들을 /bin 디렉터리에 복사한다: as86
    ·ld 디렉터리로 가서 make 명령을 실행해 프로그램을 컴파일한다.
    ·다음 바이너리들을 /bin 디렉터리에 복사한다: ld86

    12.6 Installing Lilo

    - Installing Lilo

    ·Lilo 아카이브를 풀어놓는다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    - Configuring Lilo

    ·여러분의 normal 리눅스 시스템에서 /etc/lilo.conf을 찾아 LFS 시스템에 있는 /etc
      디렉터리에 복사한다.

    - Copying kernel image files

    ·여러분의 normal 리눅스 시스템 /boot 디렉터리에서 커늘 이미지를 찾아 LFS 시스템에
      있는 /boot 디렉터리에 복사한다.

    12.7 Installing DPKG

    우리는 Debian Package manger 자체는 설치하지 않지만, 이 패키지에는 우리에게 필요한 작은 프로그램이 실려있다; start-stop-daemon 프로그램이 그 것이다.  이 프로그램은 부트 스크립트에서 매우 유용하므로 우리도 이 것을 사용할 것이다.

    ·DPKG 아카이브를 풀어놓는다.
    ·scripts 디렉터리로 간다.
    ·make start-stop-daemon 명령을 실행해 startstop-daemon 프로그램을 컴파일한다.
    ·다음 바이너리들을 /sbin 디렉터리에 복사한다:start-stop-daemon
    ·다음 파일들을 /usr/man/man8 디렉터리에 복사한다: start-stop-daemon.8

    12.8 Installing Sysklogd

    - Installing Sysklogd

    ·Sysklogd 아카이브를 풀어놓는다.
    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·make INSTALL=/bin/install install 명령을 실행해 패키지를 설치한다.

    - Configuring Sysklogd

    ·/var/log 디렉토리를 만든다.
    ·Create a new file /etc/syslog.conf containing the following:
    ·다음 내용을 담아 /etc/syslog.conf 파일을 새로 만든다.
     

    #!/bin/sh
    # Begin /etc/syslog.conf

    auth,authpriv.*               /var/log/auth.log
    *.*;auth,authpriv.none    -/var/log/syslog
    daemon.*                      /var/log/daemon.log
    kern.*                           /var/log/kern.log
    mail.*                           /var/log/mail.log
    user.*                           /var/log/user.log

    mail.info                      -/var/log/mail.info
    mail.warn                     -/var/log/mail.warn
    mail.err                         /var/log/mail.err

    *.=info;*.=notice;*.=warn;\
      auth,authpriv.none; \
      daemon.none;mail        -/var/log/messages

    *.emerg                   *

    # End /etc/syslog.conf 

 

    - Creating the Sysklogd bootscript

    ·다음 내용을 담아 /etc/init.d/sysklogd 파일을 새로 만든다.
     

    #!/bin/sh
    # Begin /etc/init.d/sysklogd 

    test -f /usr/sbin/klogd || exit 0
    test -f /usr/sbin/syslogd || exit 0

    check_status()
    {
      if [ $? = 0 ]
      then
        echo “OK”
      else
        echo “FAILED”
      fi
    } 

    case “$1” in
      start)
        echo -n “Starting system log daemon...”
        start-stop-daemon -S -q -o -x /usr/sbin/syslogd -- -m 0
        check_status

        echo -n “Starting kernel log daemon...”
        start-stop-daemon -S -q -o -x /usr/sbin/klogd
        check_status
        ;;

      stop)
        echo -n “Stopping kernel log daemon...”
        start-stop-daemon -K -q -o -p  /var/run/klogd.pid
        check_status

        echo -n “Stopping system log daemon...”
        start-stop-daemon -K -q -o -p /var/run/syslogd.pid
        check_status
        ;; 

      reload)
        echo -n “Reloading system load daemon configuration file...”
        start-stop-daemon -K -q -o -s 1 -p /var/run/syslogd.pid
        check_status
        ;;

      restart)
        echo -n “Stopping kernel log daemon...”
        start-stop-daemon -K -q -o -p /var/run/klogd.pid
        check_status 

        echo -n “Stopping system log daemon...”
        start-stop-daemon -K -q -o -p /var/run/syslogd.pid
        check_status

        sleep 1 

        echo -n “Starting system log daemon...”
        start-stop-daemon -S -q -o -x /usr/sbin/syslogd -- -m 0
        check_status

        echo -n “Starting kernel log daemon...”
        start-stop-daemon -S -q -o -x /usr/sbin/klogd
        check_status
        ;; 

      *)
        echo Usage: $0 {start|stop|reload|restart}
        exit 1
        ;;
    esac

    # End /etc/init.d/sysklogd

     

    - Setting up symlinks and permissions

    ·chmod 755 /etc/init.d/sysklogd 명령을 실행해 적절한 퍼미션을 설정한다.
    ·다음 명령을 실행해서 적절한 심볼릭 링크를 만든다.

     cd /etc/rc2.d; ln -s ../init.d/sysklogd S03sysklogd
     cd ../rc6.d; ln -s ../init.d/sysklogd K90sysklogd
     cd ../rc0.d; ln -s ../init.d/sysklogd K90sysklogd

    12.9 Installing Groff

    ·Groff 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    12.10 Installing Man-db

    ·Man-db 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    12.11 Installing Procps

    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·Makefile을 열어 다음 변수를 찾아 주석문자를 해제한다: XSCPT
    ·make install 명령을 실행해 패키지를 설치한다.

    12.12 Installing Procinfo

    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    12.13 Installing Procmisc

    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    12.14 Installing Shadow Password

    이 패키지는 사용자 패스워드를 변경하고, 새로운 사용자/그룹을 추가하고, 사용자/그룹을 제거하는 등 기능을 수행하는 유틸리티들을 담고 있다. 나는 여러분에게 ‘password shadowing’의 뜻이 무엇인지는 설명하지 않을 것이다. 여러분이 알고 싶다면 doc/HOWTO 파일들을 읽기 바란다. 여러분이 기억해야 할 것이 하나 있는데, 만약 여러분이 섀도우 지원 기능을 사용하려 한다면, 패스워드 확인이 필요한 프로그램들(예를 들어 xdm, ftp 데몬, pop3d, 등)은 섀도우화된 패스워드를 다룰 수 있어야 하므로 ‘shadow-compliant’될 필요가 있다.

    여러분이 섀도우 패스워드를 사용하지 않을 계획이라면(나중에 doc/HOWTO 아래 문서들을 읽어보아야 한다) 이 아카이브에 속한 유틸리티들은 섀도우 패스워드가 해제된 채로도 사용되므로, 여러분은 이 아카이브를 계속 사용할 것이다.  여러분은 HOWTO 문서에서 이 기능에 대한 모든 것을 읽을 수 있다. 그리고 또 여러분이 바란다면 언제나 shadow와 non-shadow를 서로 전환할 수 있다는 것을 기억한다.

    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.
    ·etc 디렉터리에서 다음 파일들을 찾아 /etc에 복사한다:
       limits login.access login.defs.linux shells suauth
    ·/etc/login.defs.linux를 /etc/login.defs로 이름을 바꾼다.

    지금이 doc/HOWTO 파일의 섹션 #5를 읽을 좋은 때이다.  이 문서를 통해 여러분은 섀도우 패스워드 시스템이 동작하고 있는가를 어떻게 테스트하며, 또 어떻게 해제할 수 있는지 그 방법들을 읽게 될 것이다.  만약 동작하지 않는데 여러분이 이것을 테스트 해보지도 않고 있었다면, 여러분은 더 이상 로긴 할 수 없으므로, 모든 콘솔에서 로그아웃한 다음에는 마침내 시스템을 사용할 수 없게 될 것이다.  
    이런 문제는 커늘에 init=/sbin/sulogin 패러미터를 넣어 넘어간 다음에, util-linux 아카이브를 풀고, login-utils 디렉터리로 가서, login 프로그램을 빌드하고 /bin/login을 util-linux 가운데 하나로 바꾸는 방법으로 간단하게 해결할 수도 있다.  중요한 것은 완전히 가망없다 싶을 만큼 엉켜 있더라도, 여러분은 적절한 테스트와 매뉴얼을 통해서 그런 괴로운 일들을 비켜갈 수 있다는 것이다. ;)

    12.15 Installing GNU C Library

    ·libstdc 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.

    /usr/include/gv3에 복사되어야 하는 모든 헤더 파일들을 찾을 수 없으므로, 여기서 make install을 실행해서 바로 패키지를 설치하면 실패한다. 문제는 설치 스크립트가 src/bits src/shadow src/ext src/backwards 디렉터리에 속한 파일들을 찾으려 한다는 것이다. 그 파일들은 실제로는 bits, shadow, ext, backwards 디렉터리에 속한 것들이다. 나는 make 프로그램이나 Makefile 가운데 누구를 탓해야 할지 모르겠는데, 어찌 되었든, 심볼릭 링크를 몇 개 만들고, 특별한 헤더 파일 몇 개를 다른 디렉터리에 복사하면 설치가 제대로 끝날 것이다.

    Makefile 스크립트가 그 것들을 찾는, 그런 방법으로 디렉터리들과 파일들을 설정하려면 다음 명령들을 src 디렉터리에서 실행한다.
     

     ln -s ../bits bits
     ln -s ../backward backward
     ln -s ../ext ext
     ln -s ../shadow shadow
     cp ../stl/bits/* bits
     cp ../stl/backward/* backward
     cp ../stl/ext/* ext

     

    이제 그 파일들은 make install 명령이 실행되는 동안 찾을 수 있는 곳에 놓여지고, 우리는 이 단계를 계속할 수 있다.

    ·make install 명령을 실행해 패키지를 설치한다.

     

13. Setting up basic networking

    13.1 Installing Netkit-base

    ·Netkit-base 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.
    ·etc.sample 디렉터리에서 /etc/ 디렉터리로 다음 파일들을 복사한다: services protocols

    13.2 Installing Net-tools

    ·Net-tools 아카이브를 풀어놓는다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    Creating the /etc/init.d/localnet bootscript

    ·다음 내용을 담아 /etc/init.d/localnet 파일을 새로 만든다.
     

    #!/bin/sh
    # Begin /etc/init.d/localnet

    check_status()
    {
      if [ $? = 0 ]
      then
        echo “OK”
      else
        echo “FAILED”
      fi
    } 

    echo -n “Setting up loopback device...”
    /sbin/ifconfig lo 127.0.0.1
    check_status

    echo -n “Setting up hostname...”
    /bin/hostname --file /etc/hostname
    check_status

    # End /etc/init.d/localnet 

 

    - Setting up permissions and symlink

    ·chmod 755 /etc/init.d/localnet 명령을 실행해 적절한 퍼미션을 설정한다.
    ·다음 명령을 실행해서 적절한 심볼릭 링크를 만든다:
      cd /etc/rcS.d; ln -s ../init.d/network S03localnet

    - Creating the /etc/hostname file

    /etc/hostname 파일을 새로 만들고 그 속에 호스트 이름을 넣는다. 이곳에 넣을 이름은 FQDN (Fully Qualified Domain Name)은 아니다. 단지 여러분이 네트워크에서 자신의 컴퓨터를 가리킬 때 사용할 이름이다.

    - Creating the /etc/hosts file

    여러분이 네트워크 카드를 설정하려 한다면, /etc/ho-
    sts 파일에서 사용할 IP-address, FQDN, 그리고 가능한 에일리어스(aliases)를 결정해야 한다. 예를 들자면:

    <myip> myhost.mydomain.org somealiases 

    IP-address는 사설 네트워크 IP 주소 범위 안에 있어야 한다. 아래 인용문은 O’Reilly의 단행본 “Linux Network Administrator’s Guide”로부터 가져온 것이다.
     

    --- 인용문의 시작 ---

    만약 여러분의 네트워크가 인터넷(Internet)에 연결되지 않고, 가까운 시일 안에 연결될 계획도 없다면 여러분은 주소 표기 규칙에 맞는 어떤 네트워크 주소를 사용해도 좋다.  이 때, 여러분의 내부 네트워크로부터 나오는 어떤 패킷도 실제 인터넷으로 나가지 않아야 한다.  패킷이 내부 네트워크를 벗어나더라도 문제가 생기지 않도록 하려면 사적인 네트워크를 위해 비워둔 네트워크 주소들을 사용해야 한다.  Internet Assigned Numbers Authority (IANA)는 클래스 A, B, C 각각에 여러분이 등록하지 않고도 사용할 수 있는 네트워크 주소를 몇 개 비워두고 있다.  이들 주소는 단지 여러분의 사적인 네트워크에서만 유효한 것으로 인터넷 사이트 사이에서 라우트 되지는 않는다.

    그 주소들은:

    Class Networks
    A     10.0.0.0
    B     172.16.0.0 through 172.31.0.0
    C     192.168.0.0 through 192.168.255.0 

    --- 인용문의 끝 ---

 

    192.168.1.1과 같은 IP 주소들에, me.lfs.org 등 FQDN을 붙여 사용할 수 있다.

    여러분이 네트워크 카드를 사용하지 않을 계획이라 하더라도 FQDN은 여전히 필요하다. FQDN은 Sendmail 같은 프로그램이 정상적으로 동작하려면 반드시 필요하다 (실제로: FQDN을 찾지 못하면 Sendmail은 동작하지 않는다)

    여러분이 네트워크 카드를 가지지 않는다면 /etc/hosts 파일은 이런 모습이다:
     

    # Begin /etc/hosts (no network card version)
    127.0.0.1 me.lfs.org <contents of /etc/hostname> localhost
    # End /etc/hosts (no network card version) 

     

    여러분이 네트워크 카드를 설정한다면 /etc/hosts 파일은 이런 모습이다:
     

    # Begin /etc/hosts (network card version)
    127.0.0.1 localhost
    192.168.1.1 me.lfs.org <contents of /etc/hostname>
    # End /etc/hosts (network card version) 

 

    물론, 192.168.1.1와 me.lfs.org는 여러분 마음대로 다른 것으로 설정할 수 있다. (또는 만약 네트워크/시스템 관리자가 여러분에게 IP 주소를 할당했고, 앞으로 이 머신을 네트워크에 연결할 계획이라면 그 것으로 설정한다)

    - Creating the /etc/init.d/ethnet file

    이 서브 섹션은 여러분이 네트워크 카드를 설정할 때에만 적용된다. 만약, 네트워크 카드가 없거나 설정하지 않는다면, 이 서브 섹션을 건너뛰어 다음부터 읽어도 좋다.

    ·다음 내용을 담아 /etc/init.d/ethnet 파일을 새로 만든다.
     

    #!/bin/sh
    # Begin /etc/init.d/ethnet

    check_status()
    {
      if [ $? = 0 ]
      then
        echo “OK”
      else
        echo “FAILED”
      fi
    }

    /sbin/ifconfig eth0 <ipaddress>
    check_status

    # End /etc/init.d/ethnet

 

    - Setting up permissions and symlink for /etc/init.d/ethnet

    ·chmod 755 ethnet 명령을 실행해 적절한 퍼미션을 설정한다.
    ·cd ../rc2.d; ln -s ../init.d/ethnet S10ethnet 명령을 실행해서
      적절한 심볼릭 링크를 만든다. 

    - Testing the network setup

    ·/etc/init.d/localnet 명령을 실행해서 앞서 만든 localnet 스크립트를 시작한다.
    ·만약 ethnet 파일이 있다면 /etc/init.d/ethnet 명령을 실행해서 앞서 만든
      ethnet 스크립트를 시작한다.

    다음 명령으로 /etc/hosts가 제대로 설정되었는지 점검한다:

     ping <your FQDN>
     ping <what you choose for hostname>
     ping localhost
     ping 127.0.0.1
     ping 192.168.1.1 (only when you configured your
     network card)

    이들 ping 명령 다섯 개가 아무런 문제없이 동작한다면 기본적인 네트워크가 제대로 동작하는 것이다.

 

14. Setting up Email sub system

    14.1 Preparing system for Email sub system

    - Creating extra groups and user

    이제 우리는 email 유틸리티에서 사용할 몇 개의 그룹과 사용자를 추가해야 한다.

    ·groupadd -g 1 bin 명령을 실행해서 bin 그룹을 만든다.
    ·groupadd -g 2 kmem 명령을 실행해서 kmem 그룹을 만든다.
    ·groupadd -g 3 mail 명령을 실행해서 mail 그룹을 만든다.
    ·useradd -u 1 -g bin -d /bin -s /bin/sh bin 명령을 실행해서 bin 사용자를 만든다.

    - Creating directories

    email 서브 시스템은 디렉터리 두 개를 사용하므로 우리는 그 디렉터리들을 만들고 적절한 퍼미션을 설정해야 한다.

    ·/var/spool 디렉터리를 만든다.
    ·/var/spool/mqueue 디렉터리를 만든다.
    ·/var/spool/mail 디렉터리를 만든다.
    ·chmod 777 /tmp 명령을 실행해 적절한 퍼미션을 설정한다.
    ·chmod 700 /var/spool/mqueue 명령을 실행해 적절한 퍼미션을 설정한다.
    ·chmod 775 /var/spool/mail 명령을 실행해 적절한 퍼미션을 설정한다.
    ·chgrp mail /var/spool/mail 명령을 실행해서 메일 그룹에 /var/spool/mail을 넣는다.

    14.2 Installing Procmail

    ·Procmail 아카이브를 풀어놓는다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.
    ·make install-suid 명령을 실행해 Procmail 유틸리티들에 적절한 퍼미션을 설정한다.

    14.3 Installing Sendmail

    - Installing Sendmail

    ·Sendmail 아카이브를 풀어놓는다.
    ·src 디렉터리로 간다.
    ·Build CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·Build install 명령을 실행해 패키지를 설치한다.

    - Configuring Sendmail

    Sendmail 환경을 설정하는 것은 말처럼 쉽지 않다.  Sendmail을 설정하는 동안 여러분이 고려해야 하는 많은 것들이 있고, 내가 그것들 모두를 설명할 수는 없다. 그래서 이제 우리는 매우 기본적이고 표준적인 설정을 만들 것이다. 여러분이 자신의 기호에 따라 Sendmail을 손보고 싶다면, 설정을 계속하면 되지만 이 문서는 Sendmail을 위한 기사는 아니다. 여러분이 정확한 기능들을 사용해야 한다면 자신의 시스템에 있는 /etc/sendmail.cf 파일을(또는 /etc/mail/sendmail.cf) 이용한다.

    ·cf 디렉터리로 간다.
    ·다음 내용을 담아 cf/lfs.mc 파일을 새로 만든다.
     

    OSTYPE(LFS)
    FEATURE(nouucp)
    define(`LOCAL_MAILER_PATH’, /usr/bin/procmail)
    MAILER(local)
    MAILER(smtp)

 

    ·touch ostype/lfs.m4 명령으로 비어 있는 ostype/lfs.m4 파일을 만든다.
    ·m4 m4/cf.m4 cf/lfs.cf > cf/lfs.cf 명령으로 lfs.mc 파일을 컴파일한다.
    ·cf/lfs.cf 파일을 /etc/sendmail.cf로 복사한다.
    ·touch /etc/aliases 명령으로 비어있는 /etc/aliases 파일을 만든다.
    ·sendmail -v -bi 명령으로 이 (비어있는) alias 데이터 베이스를 초기화한다.

    14.4 Installing Mailx

    ·Mailx 아카이브를 풀어놓는다.
    ·make *.c -o mail 명령을 실행해 패키지를 컴파일한다.

    ‘comparison between pointer and integer’와  ‘assignments makes integer from pointer without a cast’경고를 무시한다.  그렇게 하더라도, 프로그램은 매우 잘 동작하는 것처럼 보인다.

    ·다음 바이너리들을 /usr/bin 디렉터리에 복사한다: mail
    ·chgrp mail /usr/bin/mail 명령을 실행해서 /usr/bin/mail 프로그램을 mail 그룹에 둔다.
    ·chmod 2755 /usr/bin/mail 명령으로 /usr/bin/mail 프로그램이 sgid로 실행될 수 있도록
      설정한다.

    14.5 Creating /etc/init.d/sendmail bootscript

    ·다음 내용을 담아 /etc/init.d/sendmail 파일을 새로 만든다.
     

    #!/bin/sh
    # Begin /etc/init.d/sendmail 

    check_status()
    {
      if [ $? = 0 ]
      then
        echo “OK”
      else
        echo “FAILED”
      fi
    } 

    case “$i” in
      start)
        echo -n “Starting Sendmail...”
        start-stop-daemon -S -q -p /var/run/sendmail.pid \
            -x /usr/sbin/sendmail -- -bd
        check_status
        ;; 

      stop)
        echo -n “Stopping Sendmail...”
        start-stop-daemon -K -q -p /var/run/sendmail.pid
        check_status
        ;; 

      reload)
        echo -n “Reloading Sendmail configuration file...”
        start-stop-daemon -K -q -s 1 -p /var/run/sendmail.pid
        check_status
        ;;

      restart)
        echo -n “Stopping Sendmail...”
        start-stop-daemon -K -q -p /var/run/sendmail.pid
        check_status 

        sleep 1

        echo -n “Starting Sendmail...”
        start-stop-daemon -S -q -p /var/run/sendmail.pid \
            -x /usr/sbin/sendmail -- -bd
        check_status
        ;; 

      *)
        echo “Usage: $0 {start|stop|reload|restart}”
        exit 1
        ;; 

    esac

    # End /etc/init.d/sendmail

 

    14.6 Setting up permissions and symlinks

    ·chmod 755 /etc/init.d/sendmail 명령을 실행해 적절한 퍼미션을 설정한다.
    ·다음 명령을 실행해서 적절한 심볼릭 링크를 만든다.

     cd /etc/init.d/rc2.d; ln -s ../init.d/sendmail S20sendmail
     cd ../rc0.d; ln -s ../init.d/sendmail K20sendmail
     cd ../rc6.d; ln -s ../init.d/sendmail K20sendmail

    14.7 Mutt 설치하기

    내가 가장 좋아하는 email 클라이언트는 Mutt이기에 이 섹션에서 Mutt을 설치할 것이다. 그렇지만, 메일 클라이언트가 설치될 곳은 여러분의 시스템이니, Mutt을 설치하는 대신에 여러분이 좋아하는 다른 메일 클라이언트를 설치해도 좋다.  

    만약 여러분이 가장 좋아하는 메일 클라이언트가 X 윈도우 클라이언트라면 (예를 들어 넷스케이프 메일 같은) 우리가 X 윈도우를 설치할 때까지 잠깐 기다려야 할 것이다.

    ·Mutt 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    14.8 Fetchmail 설치하기

    ·Fetchmail 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    14.9 Email 서브 시스템 테스트하기

     이제 이메일 시스템을 테스트할 때이다.

    ·/usr/sbin/sendmail -bd 명령을 실행해서 Sendmail을 시작한다. (여러분은 sendmail을
      실행할 때 전체 경로를 써 주어야 한다. 그렇게 하지 않으면 kill -1<sendmail pid> 명령으로
      sendmail.cf 의 설정 값을 다시 읽어들여 senmail을 설정할 수 없다.)
    ·echo “this is an email test” | mail -s test root 명령으로 여러분 자신에게 email을
      보내본다.
    ·mail 프로그램을 실행해서 자신에게 보낸 email이 도착했는지 확인한다.
    ·useradd -m testuser 명령으로 새로운 사용자를 등록한다.
    ·“test mail to testuser” | mail -s test testuser 명령으로 testuser에게 메일을 보낸다.
    ·testuser로 로긴해서, email을 확인하고(mail 프로그램을 이용한다) 앞서 testuser에게
      메일을 보냈던 것과 같은 방법으로 root에게 email을 보낸다.

    이런 모든 과정을 무사히 마쳤다면, 로컬 네트워크에서 사용할 수 있는 email 시스템을 가지게 되었을 것이다.  하지만, 아직 인터넷에서는 사용할 수 없다.  
    테스트가 끝나면 userdel -r testuser 명령으로 testuser를 제거할 수 있다.

 

15. Installing Internet Servers

    이 섹션에서는 가장 많이 쓰이는 인터넷 서버 세 가지와 클라이언트 프로그램을 설치할 것이다.  아래는 앞으로 설치할 서버/클라이언트 목록이다.

     telnetd와 표준 telnet client

     proftpd와 표준 ftp client

     apache와 웹 클라이언트 lynx

    15.1 Installing telnet daemon + client

    ·Netkit-telnet 아카이브를 풀어놓는다.
    ·configure --with-c-compiler=/usr/gcc2723/bin/gcc --
      with-c++-compiler=/usr/gcc2723/bin/c++ 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    15.2 Installing Proftpd

    ·Proftpd 아카이브를 풀어놓는다.
    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    15.3 Installing Netkit-ftp

    ·Netkit-ftp 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    15.4 Installing Apache

    Apache는 쉽게 환경을 설정할 수 있다.  Sendmail처럼 아파치도 여러분의 취향에 따라 다양한 시스템 설정 옵션을 가지고 있다.  그러므로, 나는 이 글에서 가장 기본적인 설치에 대해서 소개한다.  여러분 스스로 아파치를 제대로 동작하도록 만들 수 없다면 필요한 문서들을 읽어본다.

    ·Apache 아카이브를 풀어놓는다.
    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    15.5 Installing Slang Library

    Slang 라이브러리는 Ncurses 라이브러리를 대체하는 패키지이다.  우리는 이 라이브러리를 Lynx에 링크하여 사용할 것이다.  Lynx(린스)가 Ncurses 라이브러리에서 잘 동작하기는 하지만, 사람들은 Slang 라이브러리 사용을 권장한다.  나는 Lynx가 Slang 라이브러리를 링크한 것과 Ncurses 라이브러리를 링크한 것 사이에서 다른 점을 발견하지는 못했다.  그렇지만 나는 Slang을 사용하라는 충고를 따를 것이다.

    ·Slang 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make ELF_CC=/usr/gcc2723/gcc elf 명령을 실행해 패키지를 컴파일한다.
    ·make CC=/usr/gcc2723/bin/gcc install 명령을 실행해 패키지를 설치한다.
    ·make install-links 명령을 실행해서 라이브러를 위한 특별한 심볼릭 링크를 만든다.

    15.6 Installing Zlib

    Zlib은 PKware’s zip과 unzip 유틸리티 등 프로그램에서 사용하는 압축 라이브러리이다  Lynx는 이 라이브러리를 이용해 지정한 파일들을 압축할 수 있다.

    ·Zlib 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    15.7 Installing Lynx

    ·Lynx 아카이브를 풀어놓는다.
    ·configure --libdir=/etc --with-zlib --with-screen=slang 명령을 실행해서 패키지를
      설정한다.
    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.
    ·make install-help 명령을 실행해 helpfile을 설치한다.
    ·make install-doc 명령을 실행해 다른 문서들을 설치한다.

    15.8 Configuring the daemons

    stand-alone 모드로 데몬을 실행하거나 인터넷 서버 데몬으로 실행할 수 있다(inetd). 나는 stand-alone 모드로 데몬을 실행하기로 했다. 이렇게 실행하면 /etc/inetd.conf 파일을 뻔질나게 손볼 필요 없이, 더 손쉽게 개별 프로세스를 시작하거나 끝낼 수 있다.

    그러나, telnetd는 마지막 사용자가 로그아웃할 때 스스로 respawn 할 수 없으므로 inetd를 통해 실행하는 것이 더 낫다. 이것은 마지막 사용자가 텔넷 세션으로부터 나가자마자, 바로 텔넷 데몬이 멈춘다는 것을 의미한다. 우리가 원하는 것이 아니므로, 다른 누군가가 다시 로그온 할 때 inetd를 이용해서 telnet 프로세스를 다시 새끼치도록 telnetd를 설정한다.

    15.9 Configuring telnetd

    Creating the /etc/inetd.conf configuration file

    ·다음 내용을 담아 /etc/inetd.conf 파일을 새로 만든다.
     

    # Begin /etc/inetd.conf

    telnet stream tcp nowait root /usr/sbin/in.telnetd

    # End /etc/inetd.conf

     

    /etc/init.d/inetd bootscript를 만든다.

    ·다음 내용을 담아 /etc/init.d/inetd 파일을 새로 만든다.
     

    #!/bin/sh
    # Begin /etc/init.d/inetd

    check_status()
    {
      if [ $? = 0 ]
      then
        echo “OK”
      else
        echo “FAILED”
      fi
    }

    case “$1” in
      start)
        echo -n “Starting Internet Server daemon...”
        start-stop-daemon -S -q -p /var/run/inetd.pid \
             -x /usr/sbin/inetd
        check_status
        ;;

      stop)
        echo -n “Stopping Internet Server daemon...”
        start-stop-daemon -K -q -p /var/run/inetd.pid
        check_status
        ;;

      reload)
        echo -n “Reloading Internet Server configuration file...”
        start-stop-daemon -K -q -s 1 -p /var/run/inetd.pid
        check_status
        ;;

      restart)
        echo -n “Stopping Internet Server daemon...”
        start-stop-daemon -K -q -p /var/run/inetd.pid
        check_status 

       sleep 1 

        echo -n “Starting Internet Server daemon...”
        start-stop-daemon -S -q -p /var/run/inetd.pid \
            -x /usr/sbin/inetd
        check_status
        ;; 

      *)
        echo “Usage: $0 {start|stop|reload|restart}”
        ;;

    esac

    # End /etc/init.d/inetd 

 

    - Setting up permissions and symlinks

    ·chmod 755 /etc/init.d/inetd 명령을 실행해 적절한 퍼미션을 설정한다.
    ·다음 명령을 실행해서 적절한 심볼릭 링크를 만든다.

     cd /etc/rc2.d; ln -s ../init.d/inetd S30inetd
     cd ../rc0.d; ln -s ../init.d/inetd K30inetd
     cd ../rc6.d; ln -s ../init.d/inetd K30 inetd

    15.10 Configuring proftpd

    - Creating necessary groups and users

    ·다음 명령으로 필요한 그룹을 만든다:

     groupadd -g 65534 nogroup
     groupadd -g 4 ftp

    ·다음 명령으로 필요한 사용자를 만든다:

     useradd -u 65534 -g nogroup -d /home nobody
     useradd -u 4 -g ftp -m ftp 

    - Creating the /etc/init.d/proftpd bootscript

    ·다음 내용을 담아 /etc/init.d/proftpd 파일을 새로 만든다.
     

    #!/bin/sh
    # Begin /etc/init.d/proftpd

    check_status()
    {
      if [ $? = 0 ]
      then
        echo “OK”
      else
        echo “FAILED”
      fi
    }

    case “$1” in
      start)
        echo -n “Starting Pro FTP daemon...”
        start-stop-daemon -S -q -x /usr/sbin/proftpd
        check_status
        ;;

      stop)
        echo -n “Stopping Pro FTP daemon...”
        start-stop-daemon -K -q -x /usr/sbin/proftpd
        check_status
        ;;

      restart)
        echo -n “Stopping Pro FTP daemon...”
        start-stop-daemon -K -q -x /usr/sbin/proftpd
        check_status

        sleep 1

        echo -n “Starting Pro FTP daemon...”
        start-stop-daemon -S -q -x /usr/sbin/proftpd
        check_status
        ;;

      *)
        echo “Usage: $0 {start|stop|restart}”
        ;;

    esac

    # End /etc/init.d/proftpd 

 

    - Setting up permissions and symlinks

    ·chmod 755 /etc/init.d/proftpd 명령을 실행해 적절한 퍼미션을 설정한다.
    ·다음 명령을 실행해서 적절한 심볼릭 링크를 만든다.

     cd /etc/rc2.d; ln -s ../init.d/proftpd S40proftpd
     cd ../rc0.d; ln -s ../init.d/proftpd K40proftpd
     cd ../rc6.d; ln -s ../init.d/proftpd K40proftpd 

    15.11 Configuring apache

    - Editing apache configuration file

    /usr/apache/etc 디렉터리 속에 있는 파일들을 열어 여러분에게 필요한 부분들을 고친다.

    ·httpd.conf 파일을 열어 다음 줄을 찾는다: Group
    ·현재 값을 다음 값으로 바꾼다: nogroup

    - Creating /etc/init.d/apache bootscript

    ·다음 내용을 담아 /etc/init.d/apache 파일을 새로 만든다.
     

    #!/bin/sh
    # Begin /etc/init.d/apache

    case “$1” in
      start)
        echo -n “Starting Apache HTTP daemon...”
        /usr/apache/sbin/apachectl start
        ;;

      stop)
        echo -n “Stopping Apache HTTP daemon...”
        /usr/apache/sbin/apachectl stop
        ;;

      restart)
        echo -n “Restarting Apache HTTP daemon...”
        /usr/apache/sbin/apachectl restart
        ;;

      force-restart)
        echo -n “Stopping Apache HTTP daemon...”
        /usr/apache/sbin/apachectl stop

        sleep 1

        echo -n “Starting Apache HTTP daemon...”
        /usr/apache/sbin/apachectl start
        ;;

      *)
        echo “Usage: $0 {start|stop|restart|force-re

    start}”
        ;;

    esac

    # End /etc/init.d/apache

 

    - Setting up permissions and symlinks

    ·chmod 755 /etc/init.d/apache 명령을 실행해 적절한 퍼미션을 설정한다.
    ·다음 명령을 실행해서 적절한 심볼릭 링크를 만든다.

     cd /etc/rc2.d; ln -s ../init.d/apache S50apache
     cd ../rc0.d; ln -s ../init.d/apache K50apache
     cd ../rc6.d; ln -s ../init.d/apache K50apache

    15.12 Testing the daemons

    이 섹션의 마지막 단계는 설치한 데몬과 데몬 설정을 테스트하는 것이다.

    ·/etc/init.d/inetd start 명령으로 인터넷 서버 데몬을 (그리고 telnetd를) 시작한다.
    ·telnet localhost 명령으로 텔넷 세션을 시작한다.
    ·로긴하고 다시 로그아웃한다.
    ·/etc/init.d/proftpd start 명령으로 Proftp 데몬을 시작한다.
    ·ftp localhost 명령으로 localhost에서 ftp 세션을 시작한다.
    ·anonymous 사용자로 로긴하고 다시 로그아웃한다.
    ·/etc/init.d/apache start 명령으로 Apache http 데몬을 시작한다.
    ·lynx http://localhost 명령으로 localhost에서 http 세션을 시작한다.
    ·lynx를 끝낸다.

    이런 테스트들이 아무 문제없이 진행되었다면 필요한 데몬들이 모두 제대로 설치된 것이다.

     

16. Installing X Window System

    16.1 Creating missing symlink

    내 시스템에서는 /usr/bin/cpp에 심볼릭 링크된 /lib/cpp가 무슨 이유에선지 사라져버렸다. 처음부터 없었던 것인지, 혹은 내가 실수로 지워버린 것인지는 전혀 모르겠다.  여러분 시스템에 이 링크가 있는지 확인해보기 바란다.  만약 없다면 ln -s /usr/bin/cpp /lib/cpp 명령으로 다시 만든다.

    16.2 Installing X

    ·X 아카이브를 풀어놓는다.
    ·make CC=/usr/gcc2723/bin/gcc World 명령을 실행해 패키지를 컴파일한다.

    컴파일 작업을 수행하는 동안 “makedepend” 스크립트가 stddef.h stdarg.h float.h 헤더 파일을 찾을 수 없다는 몇 가지 에러를 만날지도 모르겠다. 컴파일 자체는 에러 없이 잘 동작하므로, 스크립트가 별로 똑똑하지 못한 것 같다. 임시 심볼릭 링크를 몇 개 만드는 것은 문제를 해결하지는 못하고: 몇 가지 이유에서 문제를 더 불러일으키기도 한다.

    그래서 여러분이 만나게 될 많은 makedepend 에러들을 무시하고 진행해야 한다. “pointer targets in passing arg x of somefunction differ in signedness” 등 에러도 마찬가지이다. 여러분이 생각하기에 더 좋은 방법 같다면 그런 파일들을 다시 작성할 수도 있다. 어쨌든, 나는 아니다.

    ·make install 명령을 실행해 패키지를 설치한다.
    ·make install.man 명령을 실행해 맨 페이지를 설치한다.

    16.3 Creating /etc/ld.so.conf

    다음 내용을 담아 /etc/ld.so.conf 파일을 새로 만든다.
     

    # Begin /etc/ld.so.conf

    /lib
    /usr/lib
    /usr/X11R6/lib

    # End /etc/ld.so.conf

     

    ldconfig 명령으로 동적 로더 캐시를 업데이트한다.

    16.4 Modifying /etc/man_db.config

    ·/etc/man_db.config 파일을 열어 다음 줄을 찾는다: MANDATORY_MANPATH /usr/man
    ·그 아래 다음과 같이 넣는다: MANDATORY_MANPATH /usr/X11R6/man

    16.5 Creating the /usr/include/X11 symlink

    X11/*.h 파일들을(여러분이 소스 코드 #include 구문에서 만나는) 찾는 전처리기에 필요한 심볼릭 링크들을 다음과 같이 만든다: ln -s /usr/X11R6/include/X11 /usr/include/X11

    16.6 Creating the /usr/X11 symlink

    여러분이 사용하는 X 릴리즈를 알 수 없으므로, 때로 소프트웨어가 /usr/X11에 파일들을 카피한다.  이 심볼릭 링크는 X 설치과정에서 생성되지 않으므로, 우리가 직접 만들어 줘야 한다.

    ·ln -s /usr/X11R6 /usr/X11 명령을 실행해서 /usr/X/usr/X11 심볼릭 링크를 만든다.

    16.7 Adding /usr/X11/bin to the $PATH environment variable

    $PATH 환경 변수에 /usr/X11/bin 경로를 추가하는 방법은 몇 가지가 있다.  그렇게 하는 방법 가운데 하나는 다음과 같다:

    ·다음 내용을 담아 /root/.bashrc 파일을 새로 만든다: export PATH=$PATH:/usr/X11/bin

    변경 내용을 적용하기 위해서 여러분은 다시 로긴해야 한다.  
    또는 export PATH=$PATH:/usr/X11/bin 명령을 실행해서 직접 path를 업데이트 할 수 있다.

    16.8 Configuring X

    ·xf86config 명령으로 X 서버를 설정한다.

    만약 xf86config에 의해 만들어진 XF86Config 파일이 맘에 들지 않는다면, 여러분 normal 리눅스 시스템 /etc 디렉터리에 이미 있는 XF86Config 파일을 $LFS로 복사하는게 더 낫겠다. 경우에 따라 여러분은 xf86config 프로그램이 지원하지 않는 특별한 설정을 변경하기 위해 파일들을 직접 손봐야 할 때도 있다.  여러분은 언제나 만들어진 XF86Config 파일을 직접 수정할 수 있다.  혹시 직접 XF86Config 파일을 손볼 때 여러분이 변경한 것이 무엇인지 잘 기억하고 있지 않는다면 많은 시간을 XF86Config 파일에서 소비할 수도 있다.

    16.9 Testing X

    이제 X가 제대로 설정되었는지 테스트한다.

    ·startx 명령으로 X 서버를 시작한다.

    X 서버가 시작되고 3 xterm이 여러분의 스크린에 뜰 것이다.  그렇다면 X 가 제대로 돌고 있는 것이다.

 

17. Installing Window Maker

    나는 윈도우 매니저로 Window Maker를 설치하기로 마음 먹었다. 나는 지금까지 꽤 오랫동안 WindowMaker를 사용해왔는데 매우 만족하고 있다. 앞서 메일 클라이언트 등 다른 프로그램처럼 여러분이 좋아하는 다른 윈도우 매니저를 설치해도 좋다. 여러분도 알고 있듯이, 윈도우 매니저 여러 개를 함께 설치해 두고, X를 시작할 때 읽어들이는 $HOME/.xinitrc 파일에 그 가운데 하나를 선택하도록 설정할 수 있다.(혹은, xdm을 사용한다면 $HOME/.xsession에서 설정한다)

    17.1 Preparing the system for the Window  Maker installation

    - Installing libPropList

    ·libPropList 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    - Installing libXpm

    ·libXpm 아카이브를 풀어놓는다.
    ·xmkmf; make Makefiles; make includes; make depend 명령으로 컴파일 환경을 설정한다.

    make depend 명령에서 X11/xpm.h 파일을 찾을 수 없다는 경고 메시지가 나타나도 무시한다.

    ·make 명령을 실행해 패키지를 컴파일한다.

    X11/xpm.h 파일을 찾을 수 없으므로 컴파일 작업이 실패할 것이다. 그러므로 이제 이 파일을 설치한 다음에 다시 컴파일한다.

    ·lib 디렉터리로 간다.
    ·make install 명령을 실행해 라이브러리와 헤더 파일들을 설치한다.
    ·최상위 디렉터리로 가서 make 명령을 실행해 패키지를 다시 컴파일한다.
    ·make install 명령을 실행해 나머지 패키지를 마저 설치한다.

    - Installing libpng

    ·libpng 아카이브를 풀어놓는다.
    ·make -f scripts/makefile.lnx 명령을 실행해 패키지를 컴파일한다.
    ·make -f scripts/makefile.lnx install 명령을 실행해 패키지를 설치한다.

    - Installing libtiff

    ·libtiff 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    - Installing libjpeg

    ·libjpeg 아카이브를 풀어놓는다.
    ·configure --enable-shared --enable-static 명령을 실행해서 패키지를 설정한다.
    ·make libjpg.la 명령을 실행해 라이브러리를 컴파일한다.
    ·make install 명령을 실행해 컴파일된 도구와 패키지를 설치한다.

    - Installing libungif

    ·libungif 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    - Installing WindowMaker

    ·WindowMaker 아카이브를 풀어놓는다.
    ·configure 명령을 실행해서 패키지를 설정한다.
    ·make CC=/usr/gcc2723/bin/gcc 명령을 실행해 패키지를 컴파일한다.
    ·make install 명령을 실행해 패키지를 설치한다.

    17.2 Updating dynamic loader cache

    ·ldconfig 명령으로 동적 로더 캐시를 업데이트한다.

    17.3 Configuring WindowMaker

    WindowMaker를 사용하려는 모든 사용자는 먼저 wmaker.inst 스크립트를 실행해야 한다. 이 스크립트는 WindowMaker 실행에 필요한 파일들을 사용자의 홈 디렉터리에 복사하고 $HOME/.xinitrc 파일을 편집한다. (아직 이 파일이 없다면 새로 만들어준다)

    ·wmaker.inst 명령으로 WindowMaker를 맘에 들게 설정한다.

    17.4 Testing WindowMaker

    ·startx 명령으로 X서버를 시작하고 WindowMaker 윈도우 매니저가 잘 동작하는지 확인한다.

 

18. Configuring system for Internet

    이 기사에는 여러분의 시스템을 인터넷에 연결하고 사용하는 자세한 방법들에 대한 설명이 없다.  Egil Kvaleberg는 그런 내용을 담고 있는 ISP-Hookup-HOWTO 라는 매우 훌륭한 글을 썼다. 여러분이 이 문서에 관심이 있다면 http://www.linuxdoc.org/에서 찾을 수 있다.

    ISP-Hookup-HOWTO에서 설명하는 소프트웨어는 (뉴스그룹을 살피는 소프트웨어를 제외하고) 이미 우리 시스템에 대부분 설치되어 있다.  

 

19. Copyright & Licensing Information 

Copyright (C) 1999 by Gerard Beekmans.

    이 문서는 LDP 라이선스에 (http://www.linuxdoc.org/COPYRIGHT.html) 따라 배포된다.




▲ top

home으로...