D.3. 유닉스/리눅스 시스템에서 데비안 GNU/리눅스 설치하기

이 부분은 설명서의 다른 부분에 설명되어있는 ncurses 기반 메뉴 방식 설치 프로그램을 사용하지 않고 기존의 Unix · Linux 시스템에서 데비안 GNU/리눅스를 설치하는 방법을 설명합니다. 이 크로스 설치 HOWTO는 Red Hat, Mandriva, SUSE에서 데비안 GNU/리눅스로 이동하는 사용자의 요구로 작성되었습니다. 여기서는 *nix 명령의 입력에 대해 숙지하고 파일 시스템을 조작할 수 있는 것이 전제가 되고 있습니다. 여기서는 #가 데비안 chroot에 입력된 명령을 보여주고 $는 사용자의 기존 시스템에서 입력되는 명령을 나타냅니다.

일단 새로운 데비안 시스템에 맞게 설정하기만 하면, 기존 사용자 데이터를(있다면) 옮겨 와서 계속 사용할 수 있습니다. 따라서 이것은 다운 타임 없음에서 데비안 GNU/리눅스 설치됩니다. 또한 이것은 여러가지 부팅 설치 미디어와 잘되지 않는 하드웨어에서 좋은 설치 방법입니다.

[참고] 참고

대부분 수동으로 해야 하므로, 시스템의 대부분의 기본 설정을 직접 해야 할 수도 있습니다. 일반적인 설치를 할 경우보다 데비안 및 Linux에 대한 지식이 많이 필요합니다. 또 이렇게 설치해서 일반적인 설치와 똑같은 시스템이 될 것으로 기대할 수 없습니다. 또 시스템의 기본적인 단계에 지나지 않습니다. 추가로 설치 및 설정이 필요하게 될지도 모릅니다.

D.3.1. 시작하기

기존 유닉스용 파티션 도구를 이용해 하드 드라이브를 필요한 대로 다시 파티션하십시오. 최소한 파일 시스템 한 개를 스왑으로 만드십시오. 콘솔만 설치하는 경우는 약 1012MB의 공간이 필요하고 X를 설치한다면 약 2539MB가(그놈이나 KDE 플라즈마같은 데스크톱 환경을 설치한다면 이보다 더) 필요합니다.

그리고 파티션에 파일 시스템을 만드십시오. 예를 들어 /dev/sda6 파티션에 ext3 파일 시스템을 만드는 경우라면(여기 예제에서 루트 파티션입니다):

# mke2fs -j /dev/sda6

ext2 파일 시스템을 만드는 경우라면 -j 옵션을 빼십시오.

스왑을 다음과 같이 초기화하고 활성화하십시오(파티션 번호는 데비안 스왑 파티션에 파티션 번호로 바꾸십시오):

# mkswap /dev/sda5
# sync
# swapon /dev/sda5

파티션 /mnt/debinst (설치 지점. 새로운 시스템의 root (/) 파일 시스템에 있습니다)에 마운트하고 하십시오. 엄밀히 말하면 마운트 위치 이름은 아무거나 상관 없습니다. 이후의 설명에서 이것을 사용합니다.

# mkdir /mnt/debinst
# mount /dev/sda6 /mnt/debinst

[참고] 참고

파일 시스템의 일부를(예를 들어 /usr) 별도의 파티션에 마운트하려면, 다음 단계로 넘어가기 전에 그 디렉터리를 수동으로 만들어서 마운트해야 합니다.

D.3.2. debootstrap 설치

데비안 설치 프로그램에서 사용하는 유틸리티에서 데비안베이스 시스템을 설치하는 공식적인 방법으로 인정받고 있는 것은 debootstrap입니다. wgetar를 사용하지만 /bin/sh와 기본적인 Unix/Linux 도구 [21]에만 의존하고 있습니다. 기존 시스템에 아직 설치되어 있지 않으면 wgetar를 설치한 다음 debootstrap 다운로드 설치하십시오.

아니면, 수동으로 설치하려면 다음과 같이 합니다. deb 파일을 풀 작업 폴더를 다음과 같이 만드십시오:

# mkdir work
# cd work

debootstrap 바이너리는 데비안 아카이브(아키텍쳐에 맞는 파일을 선택)에 있습니다. pool에서 debootstrap deb 파일을 다운로드하고, 작업 폴더에 패키지를 복사하고, 파일을 추출합니다. 파일을 설치하려면 root 권한이 필요할 수도 있습니다.

# ar -x debootstrap_0.X.X_all.deb
# cd /
# zcat /full-path-to-work/work/data.tar.gz | tar xv

D.3.3. debootstrap 실행

debootstrap를 실행하면 아카이브에서 필요한 파일을 직접 다운로드할 수 있습니다. 다음 명령 예제에서는 ftp.kr.debian.org/debian하고 있지만 네트워크에서 가까운 데비안 아카이브 미러 사이트를 입력할 수 있습니다. 미러 사이트는 http://www.debian.org/mirror/list에 목록이 있습니다.

bookworm 데비안 GNU/리눅스 설치 이미지를 /cdrom에 마운트했다면 http URL 대신에 file URL을 쓸 수 있습니다: file:/cdrom/debian/

debootstrap 명령에서 ARCH를 다음 중의 하나로 바꾸십시오: amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x.

# /usr/sbin/debootstrap --arch ARCH bookworm \
     /mnt/debinst http://ftp.us.debian.org/debian

대상 아키텍쳐가 호스트와 다르면, --foreign 옵션을 붙여야 합니다.

D.3.4. 베이스 시스템 설정

이제 디스크에 진정한 데비안 시스템을(많이 작지만) 손에 넣었습니다. 거기에 chroot하십시오:

# LANG=C.UTF-8 chroot /mnt/debinst /bin/bash

타겟 아키텍쳐가 호스트와 다르면, 먼저 qemu-user-static을 새 호스트에 복사해야 합니다:

# cp /usr/bin/qemu-ARCH-static /mnt/debinst/usr/bin
# LANG=C.UTF-8 chroot /mnt/debinst qemu-ARCH-static /bin/bash

chroot 후, 데비안 기본 시스템과 호환되는 터미널 정의가 필요할 수 있습니다. 예를 들어 다음과 같이합니다.

# export TERM=xterm-color

TERM 값에 따라 ncurses-term 패키지를 설치해야 할 수도 있습니다.

타겟 아키텍쳐가 호스트와 다르면, 멀티스테이지 부팅 단계를 마쳐야 합니다:

/debootstrap/debootstrap --second-stage

D.3.4.1. 장치 파일 만들기

이렇게 하면 /dev/에는 아주 기초적인 장치 파일만 들어 있게 됩니다. 다음 단계로 진행하려면 장치 파일이 몇 개 더 필요합니다. 여러가지 방법이 있고, 이 중에 어떤 방법을 이용할 지는 설치에 사용하는 호스트 시스템이 무엇이냐에 따라, 그리고 모듈식 커널을 이용할 것인가 아닌가, 그리고 새 시스템에 동적인(예를 들어 udev 사용) 장치 파일을 사용할 지 고정 장치 파일을 사용할 지에 따라 달라집니다.

사용할 수 있는 옵션 몇 가지를 설명하면:

  • makedev 패키지를 설치하고, 다음 명령으로 기본적인 고정 장치 파일의 기본 모음을(chroot 상태에서) 만듭니다

    # apt install makedev
    # mount none /proc -t proc
    # cd /dev
    # MAKEDEV generic
    

  • MAKEDEV를 이용해 수동으로 장치 파일을 직접 지정해서 만듭니다

  • 호스트 시스템의 /dev를 대상 시스템의 /dev 디렉터리에 연결합니다. 어떤 패키지는 postinst 스크립트를 실행하면서 장치 파일을 만들 수도 있습니다. 그러므로 이 옵션은 주의해서 사용해야 합니다.

D.3.4.2. 파티션 마운트하기

/etc/fstab를 만들어야 합니다.

# editor /etc/fstab

다음 예제를 필요에 맞게 편집할 수 있습니다.

 # /etc/fstab: static file system information.
#
# file system    mount point   type    options                  dump pass
/dev/XXX         /             ext3    defaults                 0    1
/dev/XXX         /boot         ext3    ro,nosuid,nodev          0    2

/dev/XXX         none          swap    sw                       0    0
proc             /proc         proc    defaults                 0    0

/dev/cdrom       /media/cdrom  iso9660 noauto,ro,user,exec      0    0

/dev/XXX         /tmp          ext3    rw,nosuid,nodev          0    2
/dev/XXX         /var          ext3    rw,nosuid,nodev          0    2
/dev/XXX         /usr          ext3    rw,nodev                 0    2
/dev/XXX         /home         ext3    rw,nosuid,nodev          0    2

/etc/fstab에서 지정한 파일 시스템을 모두 마운트 mount-a라고 합니다. 또한 파일 시스템을 하나하나 마운트하려면 다음과 같이하십시오:

# mount /path   # e.g.: mount /usr
 

현재 데비안 시스템에서 이동식 미디어의 마운트 지점을 /media하고 있지만, /에 심볼릭 링크를 호환 유지하고 있습니다. 다음 예제와 같이 필요한 경우 작성하십시오:

 
 # cd /media
# mkdir cdrom0
# ln -s cdrom0 cdrom
# cd /
# ln -s media/cdrom

proc 파일 시스템은 어디서나 몇 번이라도 장착할 수 있지만, 관습으로 /proc에 마운트합니다. mount -a를 사용하지 않으면 다음과 같이 진행하기 전에 꼭 proc을 마운트하십시오.

# mount -t proc proc /proc

ls /proc 명령을 실행하면 여러 파일이 들어 있는 디렉터리 내용을 표시합니다. 이 명령이 실패하면 chroot 바깥에서 proc을 마운트할 수 있습니다:

# mount -t proc proc /mnt/debinst/proc

D.3.4.3. 시간대 설정하기

/etc/adjtime 파일의 3번째 줄을 UTC로 설정하면 하드웨어 시계 값을 UTC로 해석하고, LOCAL로 설정하면 로컬 시각으로 해석합니다. 다음 명령어로 설정할 수 있습니다.

# editor /etc/adjtime

예를 들어 다음과 같이 합니다:

0.0 0 0.0
0
UTC

다음 명령으로 표준 시간대를 설정합니다.

# dpkg-reconfigure tzdata

D.3.4.4. 네트워크 설정하기

"64-bit MIPS (little-endian)에서는 현재 실험 버전 네트워크 설정을하려면, /etc/network/interfaces, /etc/resolv.conf, /etc/hostname/etc/hosts을 편집하십시오.

# editor /etc/network/interfaces

다음은 /usr/share/doc/ifupdown/examples 간단한 예입니다:

 ######################################################################
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
# See the interfaces(5) manpage for information on what options are
# available.
######################################################################

# 루프백 인터페이스는 이제는 실제 필요가 없지만, 필요한 경우 사용할
# 수 있습니다.
#
# auto lo
# iface lo inet loopback

# DHCP를 사용하려면:
#
# auto eth0
# iface eth0 inet dhcp

# 고정 IP 설정 예제: (network, broadcast, gateway는 안 써도 됩니다)
#
# auto eth0
# iface eth0 inet static
#     address 192.168.0.42
#     network 192.168.0.0
#     netmask 255.255.255.0
#     broadcast 192.168.0.255
#     gateway 192.168.0.1

/etc/resolv.conf에 이름 서버와 search 명령을 입력하십시오:

# editor /etc/resolv.conf

다음은 /etc/resolv.conf의 간단한 예입니다:

search hqdom.local
nameserver 10.1.1.36
nameserver 192.168.9.100

시스템의 호스트 이름(2글자에서 63 글자까지)를 입력하십시오:

 # echo DebianHostName > /etc/hostname

또한 IPv6를 지원하는 기본적인 /etc/hosts는 다음과 같이합니다:

 127.0.0.1 localhost
127.0.1.1 DebianHostName

# IPv6가 가능한 호스트에서는 다음 줄을 쓰는 게 좋습니다
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

여러 네트워크 카드를 가지고있다면 /etc/modules 파일에 원하는 순서로 드라이버 모듈 이름을 배치하십시오. 그래야 부팅할 때 각 카드가 의도한 해당 인터페이스 베이스 이름으로(eth0, eth1 등) 연결됩니다.

D.3.4.5. APT 설정하기

debootstrap은 아주 기본적인 /etc/apt/sources.list 파일을 만드므로 추가 패키지를 설치할 수 있습니다. 하지만 이 외에 소스를 추가해야 할 경우가 있습니다. 예를 들어 보안 업데이트의 소스 패키지를 설정할 수 있습니다:

deb-src http://ftp.us.debian.org/debian bookworm main

deb http://security.debian.org/ bookworm-security main
deb-src http://security.debian.org/ bookworm-security main

sources.list 파일을 고친 다음에 꼭 apt update를 실행하십시오.

D.3.4.6. 로캘 및 키보드 설정하기

영어가 아닌 언어를 사용할 때 로캘을 설정하려면 locales 지원 패키지를 설치하고 그 패키지를 설정하십시오. 지금은 UTF-8 로캘 사용을 권장합니다:

# apt install locales
# dpkg-reconfigure locales

키보드를 설정하려면(키보드 설정이 필요한 경우):

# apt install console-setup
# dpkg-reconfigure keyboard-configuration 

chroot 안에서는 키보드를 설정할 수 없으니 유의하십시오. 다시 시작한 다음에 설정합니다.

D.3.5. 커널 설치

이 시스템을 시작할 수 있도록 한다면, Linux 커널과 부트 로더가 필요합니다. 다음과 같이하여 패키지로 만든 커널을 확인하십시오:

# apt search linux-image

다음 패키지 이름을 사용하려면 커널 패키지를 설치합니다.

# apt install linux-image-arch-etc

D.3.6. 부트로더 설정하기

데비안 GNU/리눅스 시스템을 부팅 가능하게 만드려면, 설치한 커널과 루트 파티션을 읽어들이도록 부트로더를 설치하십시오. debootstrap은 부트 로더를 설치하지 않으니 주의하십시오. 설치하는데 데비안 chroot 내부 apt를 사용할 수 있습니다.

앞서 /dev/sda 장치 파일을 만들었다고 가정합니다. grub2를 설치하는 다른 방법도 있지만, 이 부록이 다룰 범위를 벗어나는 내용입니다.

D.3.7. 원격 접근: SSH 설치 및 접근 설정

콘솔을 통해 시스템에 로그인할 수 있으면, 이 부분을 넘어가도 됩니다. 네트워크를 통해 시스템에 접근해야 하는 경우, SSH를 설치하고 접근을 설정해야 합니다.

# apt install ssh

암호를 사용한 루트 로그인은 기본적으로 막혀 있습니다. 그러니 접근 설정은 암호를 설정하고 암호를 사용한 루트 로그인을 열어 주면 됩니다:

# passwd
# editor /etc/ssh/sshd_config

다음 옵션을 사용해야 합니다:

PermitRootLogin yes

루트 계정에 ssh 키를 설정해도 됩니다:

# mkdir /root/.ssh
# cat << EOF > /root/.ssh/authorized_keys
ssh-rsa ....
EOF

마지막으로 루트가 아닌 사용자를 추가하고 암호를 설정해서 접근을 설정할 수 있습니다.

# adduser joe
# passwd joe

D.3.8. 마지막 처리

앞에서 말한 것처럼, 설치한 시스템은 아주 기초적인 시스템입니다. 시스템을 좀 더 괜찮게 만드려면, 쉬운 방법으로 standard 우선 순위의 모든 패키지를 설치하면 됩니다:

# tasksel install standard

물론 apt를 이용해 패키지를 하나하나 선택해서 설치할 수도 있습니다.

설치한 다음에 /var/cache/apt/archives/ 밑에 다운로드한 패키지가 많이 들어 있게 됩니다. 다음 명령을 실행하면 디스크 공간을 좀 더 확보할 수 있습니다:

apt clean



[21] 에는 sed, grep, tar, gzip 같은 GNU 핵심 유틸리티가 들어 있습니다.