데비안 10(buster) 설치

위키 | 한국 데비안 사용자 모임
이동: 둘러보기, 검색

80x15.png Westporch가 작성한 <데비안 10(buster) 설치>는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

<데비안 10(buster) 설치> 문서를 통해 데비안 10(buster) 뿐만 아니라 데비안 9(stretch)도 설치할 수 있습니다.

목차

서문

Buster? [1]

데비안의 코드네임(code name)은 전통적으로 애니메이션 토이스토리(Toy Story)에 등장하는 캐릭터의 이름을 사용합니다. 이러한 코드네임을 사용하는 이유는 Bruce Perens가 Pixar사에서 일하는 동안에 데비안의 초기 개발에 참여했기 때문입니다. 데비안 10의 코드네임인 Buster는 애니메이션 Toy Story 시리즈에 등장하는 강아지입니다.

참고로 데비안 10(buster)은 2019년 6월경에 릴리스될 예정입니다. 애니메이션 토이스토리4가 2019년 6월에 개봉[2]하는데 이에 맞춰서 데비안 10을 릴리스하려는 게 아닐까 싶습니다.

데비안 10(buster) 설치 방법에 대한 안내

데비안 10(buster)와 기존 데비안(jessie, stretch 등)의 설치 방법은 동일합니다. 크게 달라진 점이 없습니다.

객체 지향의 캡슐화(encapsulation)라는 개념을 데비안 인스톨러에 적용해 볼까요? 프로그래머가 기존 프로그램의 내부 로직 등을 변경해도 사용자에게 기존과 동일한 인터페이스를 제공한다면 사용자는 기존과 동일하게 프로그램을 사용할 수 있습니다. 예를 들어 새로운 차(車)가 기존의 모델보다 성능이 뛰어난 엔진을 장착했다고 해서 우리가 새로운 운전 방법을 익힐 필요는 없습니다. 평소처럼 차(車)를 운전하면 됩니다. 차(車)와 데비안의 관계를 아래와 같이 유사코드(pseudo-code)로 나타내 봤습니다.

새로운 차(車) ← 데비안 10(buster)
뛰어난 엔진 ← buster에 적용된 커널
운전 방법 ← 데비안 10(buster)의 설치 방법

마찬가지로 메이저(major) 버전이 릴리스된 데비안이 나와도 평소와 동일하게 데비안을 설치하면 됩니다. 저는 데비안 4.x(etch)를 처음 접하고 지금까지 사용하고 있습니다. 버전 4.x 부터 버전 10까지 데비안의 설치 방법은 동일합니다. 크게 달라진 점이 없습니다. 만약 약간의 달라진 점이 있다면 기존과 동일한 인터페이스를 제공했기 때문에 제가 미처 느끼지 못한 것이라 생각합니다. 또한 앞으로 메이저 버전의 릴리스가 있어도 데비안 설치 방법은 기존과 동일할 것이라고 예상하며 그래야만 한다고 생각합니다.

설치 환경

Windows 10(host)에서 버추얼박스를 사용하여 데비안 buster(guest)를 텍스트 모드로 설치했습니다.


Host HW 정보

CPU 메모리 디스크 NIC 노트북 제조사/모델명
Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz 4G * 2ea (DDR3) SSD 120G Realtek PCIe GBE Family Controller SAMSUNG/NT900X4C


Host 기본 정보

OS Virtualbox Network IP
Windows 10 Enterprise (64bit) v5.2.8 r121009 (Qt5.6.2) DHCP 192.168.0.5/24


Guest 기본 정보

OS Kernel RAM Disk Network IP
Debian GNU/Linux testing (buster)/alpha2 4.13.13-1 1GB 8GB (가상 하드디스크, vdi) 어댑터에 브리지 192.168.0.11/24

데비안 10(buster)를 설치 완료한 후에 확인한 파티션 정보는 다음과 같습니다.

root@debian-buster:~# parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system     Flags
 1      1049kB  7516MB  7515MB  primary   ext4            boot
 2      7517MB  8589MB  1072MB  extended
 5      7517MB  8589MB  1072MB  logical   linux-swap(v1)
root@debian-buster:~# fdisk -l
Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe5f976fd

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 14680063 14678016    7G 83 Linux
/dev/sda2       14682110 16775167  2093058 1022M  5 Extended
/dev/sda5       14682112 16775167  2093056 1022M 82 Linux swap / Solaris

설치 이미지 다운로드

위 주소에서 데비안 10(buster) iso 파일을 내려받습니다. Intel CPU(64bit)를 사용한다면 amd64 아키텍처를 선택하면 됩니다. 저는 debian-buster-DI-alpha2-amd64-DVD-1.iso를 다운로드 했습니다. 저처럼 꼭 DVD 이미지를 다운로드할 필요는 없습니다. 대부분의 사람들은 netinst(network install) iso를 주로 사용합니다.

netinst iso는 buster를 설치하기 위한 최소한의 설치 이미지라고 생각하면 됩니다. 그래서 iso 파일의 용량은 150~280MB 정도입니다. netinst로 설치시 나머지 시스템 운영에 필요한 프로그램들은 네트워크를 통해 설치합니다.

반면에 DVD iso는 시스템을 운영하기 위한 기본 패키지들을 대부분 포함하고 있습니다. 그래서 꼭 네트워크를 통해 설치하지 않아도 DVD iso 자체만으로도 buster를 설치할 수 있습니다. 그래서 netinst iso에 비해 용량이 매우 큽니다 (대략 3.6 ~ 4.4G). 대신에 네트워크를 통해 추가 패키지를 설치하더라도 대부분의 패키지들이 DVD iso에 있기 때문에 추가로 다운로드할 패키지들을 적기때문에 netinst 보다 buster를 빠르게 설치할 수 있습니다.

결론은 자신이 선호하는 유형(netinst 또는 DVD)의 iso를 다운로드하면 됩니다.


iso 파일의 무결성 검증

다운로드한 iso 파일이 서버에 있는 iso 파일과 동일한지 무결성(integrity)을 검증해볼 필요가 있습니다. 왜냐하면 다운로드를 하면서 오류가 발생할 수도 있기 때문입니다. 물론 우리가 다운로드한 iso 파일은 대부분 원본과 동일합니다. 하지만 꼼꼼해서 나쁠 것은 없습니다. 시스템 관리자가 갖춰야 할 덕목 중의 하나는 꼼꼼함이 아닐까 싶습니다.


iso 파일의 무결성을 검증하는 방법을 설명하기에 앞서 우리가 사용하는 컴퓨터 환경에서 오류의 검출(detection) 및 정정(correction)은 어떻게 할까요? 주로 패리티 비트(parity bit) 또는 해밍 코드(hamming code)를 사용합니다.

레이드 레벨 5(RAID-5), 레이드 레벨 6(RAID-6)에서 패리티 비트를 사용하여 오류를 검출합니다. 또한 CPU와 입출력 장치의 사이에서 통신을 중재하는 입출력 모듈(I/O module)도 오류를 검출하기 위해서 패리티 비트를 사용합니다. [3]

해밍 코드는 오류의 검출 뿐만 아니라 오류의 수정도 가능하기 때문에 ECC(Error-Correcting Code) 메모리에서도 사용합니다. ECC 메모리를 사용할 경우에는 일반 메모리와는 달리 오류의 검출 및 수정을 할 수 있습니다. 또한 레이드 레벨 2(RAID-2)에서도 오류의 검출 및 수정을 하기 위해서 해밍 코드를 사용합니다. [4]


서론이 길었습니다. 그렇다면 우리가 다운로드한 파일(file)에 대한 무결성은 어떻게 검증할까요? 파일에 대한 무결성을 검증하기 위해서는 해시(hash) 함수를 사용합니다. 서버에 있는 iso 파일과 우리가 다운로드한 iso 파일의 해시 값이 같다면 올바른 파일이므로 안심하고 사용해도 됩니다. 만약 해시 값이 서로 일치하지 않다면 iso 파일이 손상된 것이므로 다시 다운로드 해야합니다. 참고로 해시 값은 메시지 다이제스트(message digest) 또는 핑거프린트(fingerprint)라고도 부릅니다.

리눅스에서 해시 값을 검증하는 도구로 md5sum을 사용합니다. md5sum은 데비안에 기본적으로 내장되어 있기 때문에 별도로 설치할 필요는 없습니다. md5sum은 MD5라는 해시 알고리즘을 사용합니다. 참고로 MD5의 MD는 Message Digest를 의미하며 해시 알고리즘에는 MD5 뿐만 아니라 MD4, SHA 등도 있습니다.


서버에 iso 파일이 저장된 위치에 있는 MD5SUMS파일에서 iso 파일의 해시 값을 확인할 수 있습니다. MD5SUMS의 내용은 다음과 같습니다.

3b0b59c40f896c881b9e53635815907f  debian-buster-DI-alpha2-amd64-DVD-1.iso
2a319f3ec24ce80e48777b6bfac5cc58  debian-buster-DI-alpha2-amd64-DVD-10.iso
7f8c7aeed55b8a89f2937127f4388714  debian-buster-DI-alpha2-amd64-DVD-11.iso
a7fab3afe9da26f8f2c217b80cc95f44  debian-buster-DI-alpha2-amd64-DVD-12.iso
8f6dc89a5b24c832ba7900113752f555  debian-buster-DI-alpha2-amd64-DVD-13.iso
44996983766328a49dd0651a3b9ca463  debian-buster-DI-alpha2-amd64-DVD-14.iso
fb19033593e82b077663dcfcfc788b93  debian-buster-DI-alpha2-amd64-DVD-2.iso
16f810a06a30827361d82ac3643e0c55  debian-buster-DI-alpha2-amd64-DVD-3.iso
112d8c1aae30a04acd17f632fee41625  debian-buster-DI-alpha2-amd64-DVD-4.iso
8f64206cbeb701f01ce326a6f80e7cd4  debian-buster-DI-alpha2-amd64-DVD-5.iso
b0bd852b08b8d70529ef18e7734abd6f  debian-buster-DI-alpha2-amd64-DVD-6.iso
dd9a6778429755030e3431b41dfc2bfb  debian-buster-DI-alpha2-amd64-DVD-7.iso
223b459188cd67a5528bd8fa81e242ae  debian-buster-DI-alpha2-amd64-DVD-8.iso
be484010a192d5b11b0709033553c721  debian-buster-DI-alpha2-amd64-DVD-9.iso

위 화면에서 정상적인 debian-buster-DI-alpha2-amd64-DVD-1.iso 파일의 해시 값은 3b0b59c40f896c881b9e53635815907f임을 알 수 있습니다.

이제 다운로드한 debian-buster-DI-alpha2-amd64-DVD-1.iso 의 해시 값을 아래와 같이 구합니다. 프롬프트에 md5sum debian-buster-DI-alpha2-amd64-DVD-1.iso을 입력하면 됩니다.

# md5sum debian-buster-DI-alpha2-amd64-DVD-1.iso
3b0b59c40f896c881b9e53635815907f  debian-buster-DI-alpha2-amd64-DVD-1.iso

서버에 있는 iso 파일과 다운로드한 iso 파일의 해시 값이 서로 같으므로 해당 파일을 안심하고 사용해도 됩니다.

참고로 해시함수는 시스템의 무결성(integrity)을 점검하는 트립와이어(tripwire)에서도 사용합니다. 트립와이어를 사용하면 시스템에 침입한 공격자가 파일을 변경했는지를 알아차릴 수 있습니다. 왜냐하면 트립와이어는 시스템의 파일들을 시스템의 파일들에 대한 해시 값을 가지고 있기 때문입니다. 만약 공격자가 파일을 변조했다면 해당 파일의 해시 값이 변경되기 때문에 파일이 변조되었음을 알아차릴 수 있습니다. 유사하게 안티 바이러스(antivirus) 프로그램도 해시 함수를 통해 시스템의 바이러스를 검출합니다.


만약 USB로 buster를 설치한다면 윈도우에서는 Win32 Disk Imager를 사용하거나 리눅스에서는 dd 명령어를 사용해서 이미지를 구우면 됩니다. Win32 Disk Imager나 dd 명령어의 구체적인 사용법은 생략합니다.

레이드(RAID)

이 절(節)은 아래에 해당하는 경우라면 건너뛰어도 됩니다.

  • 일반 데스크톱·노트북 사용자 (요즘에는 서버가 아닌 일반 데스크톱에서도 레이드를 사용할 수 있지만 이는 특수한 경우라 생각하고 예외로 하겠습니다.)

펌웨어(firmware) 업그레이드

이 절(節)에서는 레이드 컨트롤러 카드의 펌웨어에 대해 설명합니다.

서버(주로 1U, 2U 등)에 데비안을 새로 설치하기 전에 하드웨어(레이드 컨트롤러 카드, BIOS 등)의 펌웨어를 최신 버전으로 업그레이드하는 것을 권장합니다. 오래 전에 서버를 구입했다면 레이드 컨트롤러 카드의 펌웨어는 최신 버전이 아닐 가능성이 매우 높습니다.

단순한 테스트용 서버를 운영하고자 한다면 굳이 레이드 컨트롤러 카드의 펌웨어를 최신 버전으로 업그레이드할 필요는 없습니다. 물론 최신 버전의 펌웨어를 적용하지 않는다고 해서 시스템에서 곧바로 문제가 발생하지는 않습니다. 하지만 실제 서비스를 운영하기 위한 서버라면 레이드 컨트롤러의 펌웨어를 최신 버전으로 유지할 필요가 있습니다. 왜냐하면 최신 펌웨어를 적용함으로써 레이드라는 기술을 좀 더 안정적으로 사용할 수 있기 때문입니다. 이처럼 시스템을 안정적으로 유지하려면 작은 것에도 신경 쓰는 꼼꼼함이 필요합니다.

레이드(RAID) 설정

레이트 컨트롤러 카드(예 HP P410)가 장착된 서버 환경에서 레이드를 설정(레이드 레벨 0, 레이드 레벨 1, 레이드 레벨 5, 레이드 레벨 10 등)합니다. 물론 레이드 컨트롤러 카드가 없어도 소프트웨어적으로 레이드를 구현할 수 있지만 추천하지는 않습니다. 왜냐하면 하드웨어 보다 안정성이 떨어지기 때문입니다. 또한 메인보드에 내장된 레이드 컨트롤러(예 HP B120i)가 있다면 별도의 레이드 컨트롤러 카드가 없더라도 레이드 기능을 사용할 수도 있습니다. 하지만 안정성과 보다 향상된 기능을 원한다면 별도의 레이드 컨트롤러 카드를 장착하는 것을 권장합니다.

레이드를 설정하지 않았다면 서버 제조사(HP, Dell 등) 또는 레이드 컨트롤러 카드의 매뉴얼을 참고하여 레이드를 설정합니다. 이 항목에서 레이드 설정에 대한 구체적인 설명은 생략합니다. 왜냐하면 레이드 컨트롤러 카드의 제조사 마다 레이드 설정 방법이 다르기 때문입니다.

레이드를 설정할 때 안정성이 높은 레이드 레벨 10을 주로 사용합니다. 여기서 주의할 점은 레이드는 백업(backup)이 아니라는 것입니다. 단지 레이드는 고가용성(high availability)를 제공할 뿐입니다. 중요한 시스템이라면 반드시 백업 정책을 수립해야 합니다.

인스톨러 부트 메뉴

debian-buster-DI-alpha2-amd64-DVD-1.iso로 부팅하면 아래와 같은 화면이 나타납니다. GUI가 아닌 텍스트 모드(Text mode)로 데비안을 설치할 것이므로 두 번째 항목의 'Install'을 선택한 후 엔터 키를 누릅니다. 반드시 텍스트 모드로 설치할 필요는 없습니다. 만약 GUI 환경으로 데비안을 설치하고자 한다면 첫 번째 항목의 'Graphical install'을 선택한 후 엔터 키를 누르면 됩니다.

1 (Debian10 install) install.png


언어 선택

'한국어'를 선택합니다. 이제 설치 과정 및 향후 시스템에 사용할 기본 언어는 한국어로 설정됩니다.

2 (Debian10 install) Select a language.png


'예'를 누르고 한국어로 설치를 진행합니다.

2-1 (Debian10 install) Agree-installation.png


위치(지역) 선택

'대한민국'을 선택합니다. 대~한~민~국~! ⚽

3 (Debian10 install) Location.png


키맵 설정

키맵으로 '한국어'를 선택합니다.

4 (Debian10 install) Keymap.png


네트워크 설정

만약 브로드컴사의 무선랜/유선랜을 사용한다면 아래와 유사한 화면이 나타납니다. 이 경우에는 브로드컴사의 펌웨어 설치 방법을 참고해주세요. 20180728 230730.jpg


제 메인 노트북은 브로드컴사의 무선랜/유선랜을 사용하지 않으며, DHCP를 사용하고 있기 때문에 네트워크는 자동으로 설정되었습니다. 만약 저와 유사한 환경이라면 네트워크 설정 단계에서는 호스트 이름만 설정하면 됩니다. 호스트 이름은 'debian-buster'로 설정했습니다. 호스트 이름은 아래의 조합으로 구성하는 것이 좋습니다. 되도록이면 알파벳 대문자는 사용하지 않는 것이 좋습니다.

  • 알파벳 소문자 a ~ z
  • 숫자 0 ~ 9
  • 하이픈 (-)

6 (Debian10 install) Hostname.png


도메인 이름은 별도로 설정하지 않아도 됩니다. '<계속>'을 선택한 후 엔터 키를 누릅니다.

7 (Debian10 install) Domain name.png

계정 설정

root 비밀번호 설정

루트(root·최고 관리자) 계정에서 사용할 비밀번호를 입력합니다.

8 (Debian10 install) Account-root pw.png


다시 한 번 루트의 비밀번호를 입력합니다.

8-1 (Debian10 install) Repeat-root pw.png


일반 사용자 계정 생성

새로 생성할 사용자의 전체 이름을 적습니다. 이 단계에서 입력하는 이름은 /etc/passwd 파일의 다섯 번째 필드에 저장됩니다. 이 필드에는 주로 사용자 정보(사용자의 실제 이름, 전화번호 등)가 저장됩니다.

root@debian-buster:~# cat /etc/passwd | grep westporch
westporch:x:1000:1000:westporch,,,:/home/westporch:/bin/bash

위 명령의 실행 결과는 buster 설치를 완료한 후에 확인한 모습입니다. 사용자의 전체 이름을 'westporch'로 설정했지만 실제로는 ',,,'가 붙어서 'westporch,,,'로 저장됩니다.

8-2 (Debian10 install) User-real name.png


새로 만들 계정의 사용자 이름은 리눅스 시스템에서 로그인할 때 사용합니다. 즉 사용자 ID를 지정합니다. 저는 'westporch'로 설정했습니다. 여기서 설정하는 이름(ID)은 /etc/passwd 파일의 첫번 째 필드에 저장됩니다.

root@debian-buster:~# cat /etc/passwd | grep westporch
westporch:x:1000:1000:westporch,,,:/home/westporch:/bin/bash

8-3 (Debian10 install) Username.png


새로 생성할 계정(westporch)의 비밀번호를 입력합니다.

8-4 (Debian10 install) Set-user pw.png


새로 생성할 계정(westporch)의 비밀번호를 다시 한 번 입력합니다.

8-5 (Debian10 install) Repeat-user pw.png


/etc/shadow에 대하여[5]

아래 실행 결과에서 root와 westporch 계정의 비밀번호가 'x'라는 뜻이 아닙니다. 두 번째 필드의 'x'는 crypt 함수를 이용해서 얻은 ‘해시 값’이 섀도 파일(/etc/shadow)의 두 번재 필드에 위치한다는 것을 의미합니다. 암호화된 데이터가 아니라는 해시 값이라는 것에 주의해야 합니다.

root@debian-buster:~# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
root@debian-buster:~# cat /etc/passwd | grep westporch
westporch:x:1000:1000:westporch,,,:/home/westporch:/bin/bash

crypt 함수는 내부적으로 해시 알고리즘(MD5, SHA-256, SHA-512)을 사용합니다. 물론 crypt 함수는 대칭 키 암호 알고리즘 중의 하나인 DES(Data Encryption Standard)도 지원합니다. 하지만 DES는 키 길이(56비트)가 짧기 때문에 DES를 사용하는 것은 안전하지 않습니다. 2^56의 경우의 수는 금방 뚫립니다. 따라서 DES는 절대로 사용하면 안됩니다. 암호 알고리즘이라고 모두 안전한 것은 아닙니다.

RSA사가 주관한 DES의 키 찾아내기 콘테스트(DES Challenge)에서 1997년의 DES Challenge Ⅰ에서는 96일, 1998년의 DES Challenge Ⅱ-2에서는 56시간, 1999년의 DES Challenge Ⅲ에서는 22시간 15분 만에 DES 키가 깨졌습니다. [6] DES는 1977년에 미국의 연방정보처리표준규격(FIPS: Federal Information Processing Standard)으로 채택[7]되었습니다. 하지만 2005년에 DES는 FIPS에서 제외되었습니다. [8]

이뿐만 아니라 인증성을 제공하는 커버로스(Kerberos) 버전 4에서도 그동안 DES를 사용했지만 커버로스를 개발한 MIT(Massachusetts Institute of Technology)에서도 커버로스 버전 5로 마이그레이션 할 것을 권고하고 있습니다. 왜냐하면 커버로스 버전 5는 커버로스 버전 4에서 제공하던 DES보다 향상된 암호화 기능을 제공하기 때문입니다.[9]

이러한 흐름에 발맞추어 crypt 함수는 DES의 약점을 보완하기 위해서 glibc2에서는 대칭키 암호 알고리즘인 blowfish와 해시 알고리즘인 MD5, SHA-256, SHA-512를 지원합니다.

해시 함수는 일방항성(one-way)을 갖기 때문에 섀도 파일의 두 번재 필드에 저장된 해시 값은 절대로 역산(逆算)할 수 없습니다. 따라서 정확히 말하면 섀도 파일의 두 번째 필드에 저장된 값은 ‘암호화’된 것이 아닙니다. 왜냐하면 해시 값은 ‘복호화’해서 원래의 메시지(평문)를 얻을 수 없기 때문입니다. [10]

그동안 ‘암호화’된 데이터가 섀도 파일에 저장된다고 알았다면 잘못 알고 있는 것입니다. 물론 과거에는 DES를 이용해서 비밀번호를 암호화했으나 지금은 아닙니다. 앞에서 설명한 것처럼 섀도 파일의 두 번째 필드에는 암호화된 데이터가 아닌 ‘해시 값’이 저장됩니다. (단, crypt 함수를 사용해서 대칭키 암호 알고리즘인 blowfish를 사용했을 경우에는 암호화가 맞습니다. 왜냐하면 대칭 키를 사용하여 암호화와 복호화가 가능하기 때문입니다. 하지만 blowfish는 일부 리눅스 배포판에서만 지원합니다. 적어도 데비안에서는 섀도 파일의 두 번째 필드에 blowfish가 아닌 해시 알고리즘을 적용합니다.)

그렇다면 정말로 해시 값이 저장되는지 살펴볼까요? 아래와 같이 섀도 파일에서 westporch라는 계정에 대한 두 번째 필드를 살펴보겠습니다.

root@debian-buster:~# cat /etc/shadow | grep westporch
westporch:$6$pFB/iNmg$3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1:17691:0:99999:7:::

섀도 파일의 두 번째 필드($6$pFB/iNmg$3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1)는 $id$salt$encrypted와 같은 형태로 구성되어 있습니다.

$6$salt$encrypted과 같이 id가 6인 것은 해시 알고리즘(SHA-512)을 사용했다는 것을 의미합니다. 512는 해시 값의 크기가 512비트(2^512) 라는 것을 의미합니다. 참고로 $5$salt$encrypted는 해시 알고리즘(SHA-256)을 사용한 것입니다.

salt는 pFB/iNmg입니다.

86개의 문자로 구성된 Encrypted는 3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1입니다. 파이썬(python)의 len 함수를 이용하면 86개의 문자임을 쉽게 확인할 수 있습니다.

root@debian-buster:~# python3
Python 3.6.5 (default, May 11 2018, 13:30:17)
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> str='3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1'
>>> len(str)
86
>>>

해시 값($6$pFB/iNmg$3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1)에 대한 원래 메시지(평문)를 역산(逆算)을 통해 알아 낼 수 없다면, 도대체 이 해시 값에 대한 비밀번호는 어떻게 알아낼까요? 이럴 때 사용하는 것 이 레인보 테이블(rainbow table)입니다. 레인보 테이블은 여러 평문들을 해시 값들로 매핑한 일종의 표입니다. 이 표에서 공격 대상의 해시 값과 일치하는 것을 찾아내면 해당 메시지를 알아낼 수 있습니다. 하지만 솔트(salt)가 추가되었기 때문에 정확한 비밀번호를 알아내려면 솔트까지도 알아내야 합니다. 이처럼 솔트를 추가함으로써 공격자가 원래의 메시지(비밀번호)를 알아내는 것을 지연시킬 수 있습니다. 따라서 비밀번호를 알아내는 데에는 오랜 시간이 걸립니다. 물론 시간이 아주 충분히 많다면 몇 십년이 걸리더라도 언젠가는 해시 값의 원래 메시지를 알아 낼지도 모릅니다. 하지만 많은 시간을 투자하여 비밀번호를 알아낸 것에 비해 해당 정보(비밀번호)에 대한 가치가 현저히 떨어질 경우에는 비밀번호를 알아내더라도 의미가 없습니다.

파티션 설정

9 (Debian10 install) Set-partitions.png

파티션은 특수한 경우가 아니라면 수동으로 설정하지 않고 '자동 - 디스크 전체 사용'으로 설정해도 무방합니다. 그러면 특수한 경우는 언제일까요? 시스템을 조금 더 안정적으로 운영하고자 할때가 아닐까 싶습니다. DB서버를 mysql 또는 mariaDB로 운영한다면 이들 DBMS는 /var/lib/mysql에 데이터 파일을 저장합니다. 만약 루트(/) 파티션에 통째로 사용하다가 시스템에 치명적인 문제가 생긴다면 /var/lib/mysql도 영향을 받겠지만 /var/lib/mysql 파티션을 별도로 생성했다면 /var/lib/mysql의 데이터는 안전하게 보존할 수 있습니다. 물론 디스크 자체가 물리적으로 손상된 경우라면 파티션 분할로 데이터를 보존할 수는 없습니다. 중요한 데이터를 다뤄야 한다면 반드시 백업 정책을 세워야 합니다. 여담이지만 '운영에 실패한 관리자는 용서할 수 있어도 백업에 실패한 관리자는 용서할 수 없다.'라는 말도 있지요.


파티션을 수동으로 설정하여 별도의 파티션들을 만들 경우의 단점은 관리의 효율성이 떨어지거나 디스크의 용량 낭비가 발생할 수 있다는 것 입니다. (용량 낭비가 걱정이라면 LVM을 사용해서 파티션 용량을 늘리거나 줄일 수도 있습니다.) 반면에 루트(/) 파티션을 통째로 사용하면 관리가 편합니다. 실제로 현업에서도 swap(가상 메모리)을 설정하고 루트(/) 파티션에 swap을 제외한 나머지 디스크 용량을 통째로 할당합니다. 파티션 설정은 시스템 관리자의 주관이 많이 반영되는 부분입니다. 자신이 시스템을 잘 관리할 수 있는 방법으로 파티션을 설정하는 게 가장 좋다고 생각합니다.

최대 절전 모드(hibernation)를 사용할 경우[11]

또한 노트북이나 데스크톱에서 최대 절전 모드(hibernation)를 사용하고자 할 경우에도 수동으로 파티션을 설정해야 합니다. 왜냐하면 최대 절전 모드에서는 메모리의 상태를 보조 기억 장치인 디스크의 스왑(swap)에 저장하기 때문입니다. 따라서 최대 절전 모드를 사용하고자 한다면 스왑 파티션의 용량을 넉넉하게 설정해야 합니다.

참고로 아래 명령어를 입력하면 최대 절전 모드로 진입할 수 있습니다.

$ sudo systemctl hibernate


최대 절전 모드를 사용할 경우 스왑 파티션의 용량을 구하는 공식은 다음과 같습니다.

스왑 파티션 용량 = 주기억장치 용량 + 주기억장치 용량의 제곱근 (단, 최대 절전 모드를 사용할 경우)

아래의 표는 위 공식을 적용한 것입니다.

주기억장치 용량 스왑의 용량(최대 절전 모드를 사용할 경우)
1GB 2GB
2GB 3GB
3GB 5GB
4GB 6GB
6GB 8GB
8GB 11GB
12GB 15GB
16GB 20GB


파티션 설정 방법(자동 또는 수동)을 정한 후 엔터 키를 눌렀다면, 이제 파티션할 디스크를 선택한 후 엔터 키를 누릅니다.

9-1 (Debian10 install) Select-a disk.png


버추얼박스에서 생성한 가상 하드디스크(vdi)는 8GB로 설정했지만 실제로 시스템에서 인식한 디스크 용량은 8.6GB입니다. 실제 설정한 용량보다 0.75%가 증가했습니다. 젠 하이퍼바이저(xen hypervisor) 환경에서 가상 디스크(qcow2)에 데비안을 설치할 때도 디스크 용량이 0.75% 정도가 증가했습니다. 왜 디스크 용량이 0.75%가 증가하는지는 잘 모르겠습니다.

어쨌든 저는 모두 한 파티션에 설치했습니다. 'Simple is the best!'. 만약 여러 사용자들에게 추가로 계정을 발급해야 한다면 /home 파티션은 별도로 분리하는 게 좋습니다. 또한 /var 디렉토리에 시스템 로그(웹 서버, 메일 서버 등)가 많이 쌓인다면 /var 파티션을 별도로 분리하는 게 좋겠지요. 물론 logrotate를 적용하여 로그 파일이 커지는 것을 막을 수 있습니다. 앞에서도 말씀드린 것 처럼 자신이 시스템을 잘 관리할 수 있는 방법으로 파티션을 설정하는 게 가장 좋다고 생각합니다.

9-2 (Debian10 install) Disk-partition.png


'파티션 나누기를 마치고 바뀐 사항을 디스크에 쓰기'를 선택하고 엔터 키를 누릅니다. 스왑(swap)은 가상 메모리(virtual memory)로 사용됩니다. 만약 시스템의 부하가 커서 메모리(주기억장치)를 많이 사용할 경우 스왑을 사용합니다. 즉 가상 메모리를 사용함으로써 사용자는 주기억장치의 용량이 확장된 것 처럼 느낄 수 있습니다.

저는 최대 절전 모드(hibernation)는 사용하지 않을 것이므로 스왑 파티션의 용량은 약 1GB 정도이면 충분합니다. 만약 최대 절전 모드를 사용하고자 한다면, 앞에서 설명한 내용을 바탕으로 스왑의 용량을 넉넉하게 설정해 주세요.

9-3 (Debian10 install) Write-a disk.png


바뀐 점을 디스크에 쓰기 위해서 '<예>'를 선택하고 엔터 키를 누릅니다.

9-4 (Debian10 install) Agree-disk write.png

데비안 설치

베이스 시스템 설치

베이스 시스템이 설치됩니다. 베이스 시스템에는 가장 최소 한의 패키지들이 설치됩니다.

10 (Debian10 install) Install-base system.png


패키지 관리자 설정

다른 CD나 DVD 검사

별도의 CD/DVD가 없다면 '<아니요>'를 선택합니다.

11 (Debian10 install) Set-package manager.png


네트워크 미러 사이트

외부와 통신이 된다면 미러 사이트를 사용하는 것이 좋습니다. '<예>'를 선택합니다. 앞에서 설치한 베이스 시스템에 패키지들을 추가로 설치하기 위해 미러 사이트를 사용합니다.

11-1 (Debian10 install) Select-mirror.png


국가 선택

'대한민국'을 선택합니다. 미러 사이트로 반드시 대한민국을 선택할 필요는 없습니다. 예들 들어 독일을 선택할 경우 우리나라에서 멀리 떨어져 있기 때문에 속도가 우리나라보다 느립니다.

11-2 (Debian10 install) Select-mirror country.png


미러 사이트 선택

자신이 선호하는 미러 사이트를 선택합니다.

11-3 (Debian10 install) Select-a-mirror server.png


HTTP 프록시 정보는 별도로 설정할 필요는 없습니다. '<계속>'을 선택합니다.

11-4 (Debian10 install) Skip-http proxy information.png


아래 화면은 미러 사이트와 통신이 되는지 확인하고 있는 상태입니다. 만약 미러 사이트가 네트워크 및 기타 문제로 인해 접속이 불가능하다면 다른 미러 사이트를 선택하면 됩니다.

11-5 (Debian10 install) Check-mirror site.png


미러 사이트에서 파일을 받아옵니다.

12 (Debian10 install) Install-Get files.png


popularity-contest 설정

패키지 인기 투표에 참여할지 선택합니다. 설치 화면에 안내된 것 처럼 온라인에서 통계 자료를 확인할 수 있습니다.

12-1 (Debian10 install) Vote packages.png


설치할 소프트웨어

선택

설치할 소프트웨어를 선택합니다. 이 설치 단계에서 콘솔 환경만 설치할 것이므로 'SSH server'와 '표준 시스템 유틸리티'를 선택했습니다.

12-2 (Debian10 install) Select-sw.png

GUI(Graphic User Interface)를 사용하려면 데비안 데스크톱 환경(Debian desktop environment) 항목에서 사용하기 원하는 데스크톱 환경을 키보드의 스페이스 바(space bar)를 눌러서 선택하면 됩니다. 이때 데스크톱 환경을 반드시 1개만 선택할 필요는 없습니다. 왜냐하면 데스크톱 환경을 여러 개 선택하여 설치하더라도, 리눅스로 부팅한 후 GUI로 로그인할 때 데스크톱 환경을 선택할 수 있기 때문입니다.


그렇다면 어떤 데스크톱 환경을 사용하면 좋을까요?


정답은 없습니다. 왜냐하면 개인의 주관이 많이 반영되기 때문입니다. 본인이 사용하기 편한 데스크톱 환경을 설치하는 게 좋습니다.

자신에게 맞는 데스크톱 환경을 찾고 싶다면 아래의 방법을 추천합니다.

  • GNOME, Xfce, KDE, Cinnamon, MATE, LXDE, LXQt를 모두 설치해서 직접 사용해보기.
  • 각 데스크톱 환경의 스크린숏(screenshot)을 참고해보기.
    KDE 스크린숏
  • Slant에서 각 데스크톱 환경을 비교해보기.

'설치할 소프트웨어 선택'에서 만약 상위의 '데비안 데스크톱 환경(Debian desktop environment)'만 선택하고, 하위의 GNOME, Xfce, KDE, Cinnamon, MATE, LXDE, LXQt 중에서 아무것도 선택하지 않으면 그놈(GNOME)이 기본적으로 설치됩니다.

콘솔 환경만 설치해서 수동으로 필요한 패키지들만 설치하는 경우
i3wm 스크린숏

저는 GUI를 사용할 때도 데비안 데스크톱 환경(GNOME, Xfce, KDE, Cinnamon, MATE, LXDE, LXQt) 중에서 아무 것도 선택하지 않고 'SSH 서버'와 '표준 시스템 유틸리티'만 선택하여 우선 콘솔 환경만 설치합니다. 이렇게 설치하는 이유는 다음과 같습니다.

  • 자주 사용하지 않는 패키지들을 설치하지 않고, 주로 사용하는 필요한 패키지들만 설치하기 위해서입니다.
  • 데비안 데스크톱 환경 대신에 윈도우 매니저(i3wm)를 사용하기 위해서입니다.

콘솔 환경으로 데비안 설치를 완료한 후에 i3wm 및 제가 주로 사용하는 패키지들을 'apt-get install' 명령을 이용해서 설치합니다. 참고로 제가 설치하는 패키지들은 다음과 같습니다.

sudo parcellite libwebkitgtk-3.0-0 libjavascriptcoregtk-3.0-0 gvfs gcc git vim make tmux tree unzip nmap tcpdump curl dstat ethtool dnsutils i3 lightdm ibus ibus-hangul arandr firefox-esr firefox-esr-l10n-ko fonts-nanum* alsa-utils pulseaudio pavucontrol lxappearance lxterminal scrot ranger chromium chromium-l10n pluma libreoffice-wiki-publisher libreoffice-writer libreoffice-calc libreoffice-impress libreoffice-gtk3 libreoffice-help-common libreoffice-help-en-us libreoffice-help-ko libreoffice-l10n-ko hplip-gui nitrogen numix-gtk-theme numix-icon-theme breeze-cursor-theme lshw redshift redshift-gtk

설치

선택 패키지들을 미러 사이트에서 받아온 뒤 설치합니다.

12-3 (Debian10 install) Get-files.png

부트로더(GRUB) 설치

이 단계까지 왔다면 디스크에 buster는 설치되었습니다. 이제 시스템을 부팅할 때 커널을 메모리에 적재하기 위해서 부트로더(boot loader)를 설치해야 합니다. 데비안에서 부트로더로 GRUB(Grand Unified Bootloader)을 사용합니다.

13 (Debian10 install) Install-bootloader.png


GRUB는 디스크의 0번 섹터에 위치한 MBR(Master Boot Record)에 설치됩니다. MBR의 크기는 512 바이트입니다. [12]

ch2-mbr.png

MBR은 디스크의 파티션에 대한 정보를 가지고 있습니다.

리눅스 시스템에서 커맨드로 MBR 정보를 확인할 방법은 없을까요? 아래와 같이 dd if=/dev/sda bs=512 count=1 | hexdump -C 명령을 이용해서 bs(block size)를 512 바이트로 지정(bs=512)하여 MBR의 크기만큼 1번(count=1)읽어옵니다. 이 값을 hexdump -C 명령을 통해서 hex+ASCII로 출력하면 MBR에 대한 내용을 확인할 수 있습니다.[13] 아래처럼 GRUB에 대한 아스키도 보입니다.

root@debian-buster:~# dd if=/dev/sda bs=512 count=1 | hexdump -C
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|
00000080  00 20 fb a0 64 7c 3c ff  74 02 88 c2 52 bb 17 04  |. ..d|<.t...R...|
00000090  f6 07 03 74 06 be 88 7d  e8 17 01 be 05 7c b4 41  |...t...}.....|.A|
000000a0  bb aa 55 cd 13 5a 52 72  3d 81 fb 55 aa 75 37 83  |..U..ZRr=..U.u7.|
000000b0  e1 01 74 32 31 c0 89 44  04 40 88 44 ff 89 44 02  |..t21..D.@.D..D.|
000000c0  c7 04 10 00 66 8b 1e 5c  7c 66 89 5c 08 66 8b 1e  |....f..\|f.\.f..|
000000d0  60 7c 66 89 5c 0c c7 44  06 00 70 b4 42 cd 13 72  |`|f.\..D..p.B..r|
000000e0  05 bb 00 70 eb 76 b4 08  cd 13 73 0d 5a 84 d2 0f  |...p.v....s.Z...|
000000f0  83 d0 00 be 93 7d e9 82  00 66 0f b6 c6 88 64 ff  |.....}...f....d.|
00000100  40 66 89 44 04 0f b6 d1  c1 e2 02 88 e8 88 f4 40  |@f.D...........@|
00000110  89 44 08 0f b6 c2 c0 e8  02 66 89 04 66 a1 60 7c  |.D.......f..f.`||
00000120  66 09 c0 75 4e 66 a1 5c  7c 66 31 d2 66 f7 34 88  |f..uNf.\|f1.f.4.|
00000130  d1 31 d2 66 f7 74 04 3b  44 08 7d 37 fe c1 88 c5  |.1.f.t.;D.}7....|
00000140  30 c0 c1 e8 02 08 c1 88  d0 5a 88 c6 bb 00 70 8e  |0........Z....p.|
00000150  c3 31 db b8 01 02 cd 13  72 1e 8c c3 60 1e b9 00  |.1......r...`...|
00000160  01 8e db 31 f6 bf 00 80  8e c6 fc f3 a5 1f 61 ff  |...1..........a.|
00000170  26 5a 7c be 8e 7d eb 03  be 9d 7d e8 34 00 be a2  |&Z|..}....}.4...|
00000180  7d e8 2e 00 cd 18 eb fe  47 52 55 42 20 00 47 65  |}.......GRUB .Ge|
00000190  6f 6d 00 48 61 72 64 20  44 69 73 6b 00 52 65 61  |om.Hard Disk.Rea|
1+0 records in
1+0 records out
000001a0  64 00 20 45 72 72 6f 72  0d 0a 00 bb 01 00 b4 0e  |d. Error........|
000001b0  cd 10 ac 3c 00 75 f4 c3  fd 76 f9 e5 00 00 80 20  |...<.u...v..... |
000001c0  21 00 83 c9 f8 91 00 08  00 00 00 f8 df 00 00 ea  |!...............|
000001d0  d8 91 05 fe ff ff fe 07  e0 00 02 f0 1f 00 00 00  |................|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
512 bytes copied, 0.0041475 s, 123 kB/s
00000200


참고로 제 시스템의 파티션 정보는 다음과 같습니다.

root@debian-buster:~# parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system     Flags
 1      1049kB  7516MB  7515MB  primary   ext4            boot
 2      7517MB  8589MB  1072MB  extended
 5      7517MB  8589MB  1072MB  logical   linux-swap(v1)
root@debian-buster:~# fdisk -l
Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe5f976fd

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 14680063 14678016    7G 83 Linux
/dev/sda2       14682110 16775167  2093058 1022M  5 Extended
/dev/sda5       14682112 16775167  2093056 1022M 82 Linux swap / Solaris

리눅스의 부팅 과정은 어떻게 될까요? 간단하게 설명하자면 우선 바이오스에서 POST(Power-On Self-Test)를 수행합니다. 컴퓨터 주변 장치들에 이상이 없다면 바이오스는 MBR을 메모리에 적재합니다. MBR은 우리가 설치한 부트로더(bootloader)인 GRUB를 메모리를 적재합니다. GRUB는 커널을 메모리에 적재합니다. 커널은 디스크에 저장된 루트 파일 시스템(/)을 마운트합니다. [14] [15] [16] [17] [18] [19]

만약 컴퓨터가 부팅할 때 MBR에 문제가 생기면 어떻게 될까요? 당연히 부팅이 안됩니다. 따라서 이러한 점을 노리고 MBR을 공격하는 부트 바이러스가 존재하는 것입니다.


설치 미디어(USB, CD)를 컴퓨터에서 제거한 후에 '<계속>'을 눌러서 리부팅합니다. 버추얼박스 환경에서 데비안을 설치했다면 iso 파일을 언마운트(unmmount) 할 필요없이 그냥 '<계속>'을 누르면 됩니다.

14 (Debian10 install) Finish.png

리부팅

리부팅하면 GRUB를 볼 수 있습니다. 첫 번째의 'Debian GNU/Linux'로 부팅하면 됩니다. 만약 데비안을 데스크톱 환경으로 설치했다면 그래픽이 추가된 예쁜 GRUB 화면을 볼 수 있습니다.

15 (Debian10 install) Grub.png

로그인

buster의 로그인 화면이 나타났습니다.

16 (Debian10 install) First screen.png


루트 또는 사용자 계정으로 로그인 합니다. 첫 로그인할 때 캡처를 하지 못하고 나중에 캡처를 해서 아래와 같이 'Last login'에 접속 정보가 기록되었습니다. 로그인까지 성공했으니 이제 buster를 사용하면 됩니다. Buster라는 강아지를 앞으로 잘 다뤄주세요. Linux world~!

17 (Debian10 install) First login.png


마치며

<데비안 10(buster) 설치> 문서는 최대한 자세히 작성하려고 노력했습니다. 하지만 이러한 노력에도 불구하고 만약에 잘못된 내용이 있다면 아래 방법으로 따뜻한 연락을 주시면 감사하겠습니다. 이 문서를 오답노트로 삼아서 더욱더 발전하는 계기로 삼겠습니다.

혹시라도 <데비안 10(buster) 설치> 문서가 도움이 되었다면 격려의 한 말씀 부탁드립니다. :)

만약 데비안 설치 중에 문제가 발생한다면 데비안 설치 포럼에 질문을 남겨주세요. 질문을 남기시기 전에는 우선 구글링을 해주세요. 구글링을 통해 대부분의 궁금한 점들을 해결할 수 있습니다. 만약 구글링으로도 문제가 해결이 안된다면 자세한 상황(오류 메시지, 증상, 시스템 환경 등)을 데비안 설치 포럼에 남겨주시면 감사하겠습니다.


부록 A. 트러블 슈팅(trouble shooting)

이 절(節)에서는 데비안 설치 과정에서 발생한 문제의 원인 및 해결 방법을 설명합니다.

네트워크 설정 단계

없는 펌웨어 파일은: b43/ucode15.fw

세컨드 노트북(Dell inspiron 1564)에 데비안(buster alpha3)을 설치할 때 아래와 같은 문제가 발생했습니다.

20180728 230730.jpg

이 노트북은 무선랜으로 브로드컴(Broadcom)사의 BCM4312를 사용하며, 유선랜으로 리얼텍(Realtek)사의 RTL8101/2/6E를 사용하고 있습니다.

westporch@dell-laptop:~$ sudo lshw -short | grep network
/0/100/1c.1/0    wlan0       network        BCM4312 802.11b/g LP-PHY
/0/100/1c.5/0    enp4s0      network        RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller
westporch@dell-laptop:~$ lspci
00:00.0 Host bridge: Intel Corporation Core Processor DRAM Controller (rev 12)
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 12)
00:16.0 Communication controller: Intel Corporation 5 Series/3400 Series Chipset HECI Controller (rev 06)
00:1a.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 06)
00:1c.0 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 (rev 06)
00:1c.1 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 2 (rev 06)
00:1c.5 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 6 (rev 06)
00:1d.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev a6)
00:1f.0 ISA bridge: Intel Corporation HM55 Chipset LPC Interface Controller (rev 06)
00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 4 port SATA AHCI Controller (rev 06)
00:1f.3 SMBus: Intel Corporation 5 Series/3400 Series Chipset SMBus Controller (rev 06)
00:1f.6 Signal processing controller: Intel Corporation 5 Series/3400 Series Chipset Thermal Subsystem (rev 06)
03:00.0 Network controller: Broadcom Limited BCM4312 802.11b/g LP-PHY (rev 01)
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller (rev 02)
ff:00.0 Host bridge: Intel Corporation Core Processor QuickPath Architecture Generic Non-core Registers (rev 02)
ff:00.1 Host bridge: Intel Corporation Core Processor QuickPath Architecture System Address Decoder (rev 02)
ff:02.0 Host bridge: Intel Corporation Core Processor QPI Link 0 (rev 02)
ff:02.1 Host bridge: Intel Corporation 1st Generation Core i3/5/7 Processor QPI Physical 0 (rev 02)
ff:02.2 Host bridge: Intel Corporation 1st Generation Core i3/5/7 Processor Reserved (rev 02)
ff:02.3 Host bridge: Intel Corporation 1st Generation Core i3/5/7 Processor Reserved (rev 02)


펌웨어를 설치하지 않은 채 데비안을 설치했다면, 부팅할 때마다 아래와 같은 내용이 /var/log/message 파일에 기록됩니다.

Aug 11 22:36:35 dell-laptop kernel: [   12.944519] b43 ssb0:0: Direct firmware load for b43/ucode15.fw failed with error -2
Aug 11 22:36:35 dell-laptop kernel: [   12.944531] b43 ssb0:0: Direct firmware load for b43/ucode15.fw failed with error -2
Aug 11 22:36:35 dell-laptop kernel: [   12.944541] b43 ssb0:0: Direct firmware load for b43-open/ucode15.fw failed with error -2
Aug 11 22:36:35 dell-laptop kernel: [   12.944550] b43 ssb0:0: Direct firmware load for b43-open/ucode15.fw failed with error -2
원인

데비안 설치 이미지(ISO) 파일은 기본적으로 브로드컴사의 펌웨어를 포함하고 있지않습니다. 즉 데비안 10(buster)뿐만 아니라 데비안의 다른 모든 버전도 브로드컴사의 펌웨어를 포함하고 있지 않습니다. 그래서 데비안을 설치할 때 "없는 펌웨어를 이동식 미디어에서 읽어들이겠습니까?"라는 메시지가 출력되는 것입니다.

해결 방법

브로드컴사의 펌웨어를 직접 설치해야 합니다.

브로드컴사의 펌웨어 설치

"없는 펌웨어를 이동식 미디어에서 읽어들이겠습니까?"라는 물음에 '<아니요>'를 선택했습니다. 펌웨어를 이동식 미디어에서 읽어들이지 않고, 데비안 설치를 완료한 후에 브로드컴사의 펌웨어를 설치했습니다(펌웨어를 설치하지 않아도 데비안을 설치할 수 있습니다).

우선 인터넷이 되는 컴퓨터에서 펌웨어를 다운로드 [20]한 후 USB에 저장합니다. 이제 이 USB를 브로드컴사의 펌웨어를 설치할 컴퓨터에 꽂고 아래 작업을 진행합니다.


펌웨어 디렉터리를 생성합니다.

westporch@dell-laptop:~$ sudo mkdir -p /lib/firmware

이제 USB를 마운트합니다.

westporch@dell-laptop:~$ sudo mount /dev/sdb /mnt/usb

펌웨어 파일의 압축을 /lib/firmware 디렉터리에 해제합니다.

westporch@dell-laptop:~$ sudo tar xvf /mnt/usb/2480236-Broadcom_Firmware.tar.gz -C /lib/firmware

마지막 단계는 리부팅입니다. 리부팅을 할 때 b43 모듈을 커널에 로드됩니다.

westporch@dell-laptop:~$ sudo reboot


브로드컴사의 펌웨어 설치 확인

펌웨어가 제대로 설치되었는지 확인해 보겠습니다.

lsmod | grep b43 명령으로 b43 모듈이 커널에 로드되었음을 확인할 수 있습니다.

westporch@dell-laptop:/var/log$ lsmod | grep b43
b43                   454656  0
bcma                   61440  1 b43
mac80211              827392  1 b43
cfg80211              774144  2 b43,mac80211
rng_core               16384  1 b43
ssb                    81920  1 b43
mmc_core              172032  2 b43,ssb

또한 /var/log/message에서도 펌웨어가 로딩되었음을 확인할 수 있습니다.

Aug 11 22:46:43 dell-laptop kernel: [   15.605055] b43 ssb0:0: firmware: direct-loading firmware b43/ucode15.fw
Aug 11 22:46:43 dell-laptop kernel: [   15.766157] b43 ssb0:0: firmware: direct-loading firmware b43/lp0initvals15.fw
Aug 11 22:46:43 dell-laptop kernel: [   15.777418] b43 ssb0:0: firmware: direct-loading firmware b43/lp0bsinitvals15.fw


없는 펌웨어 파일은: iwlwifi-6000g2b-6.ucode

Intel Corporation Centrino Advanced-N 6235(무선랜)을 사용할 경우에 '없는 펌웨어 파일은: iwlwifi-6000g2b-6.ucode'이라는 메시지가 발생합니다.

"없는 펌웨어를 이동식 미디어에서 읽어들이겠습니까?"라는 물음에 '<아니요>'를 선택합니다. 펌웨어를 이동식 미디어에서 읽어들이지 않고, 데비안 설치를 완료한 후에 해당 펌웨어를 설치하면 됩니다(펌웨어를 설치하지 않아도 데비안을 설치할 수 있습니다).


제 메인 노트북 (Samsung NT900X4C-A58)에 데비안(buster alpha3)을 설치할 때, 네트워크 설정 부분에서 아래 사진과 같은 문제가 발생했습니다.

20180819 214050.jpg

윈도우10 환경에서 버추얼박스에 데비안을 설치할 때는 위 문제는 발생하지 않습니다. 하지만 ISO 파일을 구운 CD/DVD 또는 USB로 컴퓨터(노트북)에서 자체적으로 부팅하여 데비안을 설치할 때 위와 같은 문제가 발생합니다. 왜냐하면 데비안 설치 ISO 파일 자체에 Intel Corporation Centrino Advanced-N 6235(무선랜)의 펌웨어(iwlwifi-6000g2b-6.ucode)를 포함하고 있지 않기 때문입니다.

반면에 윈도우10은 Intel Corporation Centrino Advanced-N 6235 드라이버(펌웨어)를 포함하고 있습니다. 따라서 윈도우10 환경에서 버추얼박스를 이용하여 데비안을 설치할 때, 펌웨어(iwlwifi-6000g2b-6.ucode)가 없다는 메시지는 발생하지 않습니다(예를 들어 버추얼박스에서 해당 가상머신의 네트워크 설정을 '브리지 어댑터'로 설정한 경우).


아래의 실행 결과는 데비안을 설치고나서, 네트워크 장치의 펌웨어를 설치한 후에 확인한 제 메인 노트북의 네트워크 장치 정보입니다.

westporch@nt900x4c-a58:~$ sudo lshw -short | grep network
/0/100/1c/0                wlp1s0     network        Centrino Advanced-N 6235
/0/100/1c.3/0              enp2s0     network        RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
westporch@nt900x4c-a58:~$ lspci
00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
00:16.0 Communication controller: Intel Corporation 7 Series/C216 Chipset Family MEI Controller #1 (rev 04)
00:1b.0 Audio device: Intel Corporation 7 Series/C216 Chipset Family High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 7 Series/C216 Chipset Family PCI Express Root Port 1 (rev c4)
00:1c.3 PCI bridge: Intel Corporation 7 Series/C216 Chipset Family PCI Express Root Port 4 (rev c4)
00:1c.4 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 5 (rev c4)
00:1d.0 USB controller: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation HM75 Express Chipset LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 7 Series Chipset Family 6-port SATA Controller [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 7 Series/C216 Chipset Family SMBus Controller (rev 04)
01:00.0 Network controller: Intel Corporation Centrino Advanced-N 6235 (rev 24)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)
03:00.0 USB controller: Renesas Technology Corp. uPD720202 USB 3.0 Host Controller (rev 02)


만약 펌웨어를 설치하지 않은 채 데비안을 설치했다면, 해당 펌웨어가 설치될 때까지 부팅할 때마다 아래와 같은 내용이 /var/log/message 파일에 기록됩니다.

Aug 19 22:08:01 nt900x4c kernel: [    4.010499] iwlwifi 0000:01:00.0: Direct firmware load for iwlwifi-6000g2b-6.ucode failed with error -2
해결 방법

Intel Corporation Centrino Advanced-N 6235(무선랜)의 펌웨어를 직접 설치해야 합니다.

펌웨어 설치

firmware-iwlwifi 패키지는 정보는 https://packages.debian.org/buster/firmware-iwlwifi 에서 확인 및 다운로드를 할 수 있습니다. non-free 이므로 /etc/apt/sources.list를 아래처럼 수정합니다.

#

# deb cdrom:[Debian GNU/Linux buster-DI-alpha3 _Buster_ - Official Snapshot amd64 DVD Binary-1 20180612-18:53]/ buster contrib main

# deb cdrom:[Debian GNU/Linux buster-DI-alpha3 _Buster_ - Official Snapshot amd64 DVD Binary-1 20180612-18:53]/ buster contrib main

- deb http://ftp.kaist.ac.kr/debian/ buster main
+ deb http://ftp.kaist.ac.kr/debian/ buster main non-free
deb-src http://ftp.kaist.ac.kr/debian/ buster main

deb http://security.debian.org/debian-security buster/updates main contrib
deb-src http://security.debian.org/debian-security buster/updates main contrib

apt-get update를 실행합니다.

westporch@nt900x4c:~$ sudo apt-get update

이제 firmware-iwlwifi를 설치합니다[21].

westporch@nt900x4c:~$ sudo apt-get install firmware-iwlwifi

리부팅을 합니다. 리부팅을 하는 이유는 해당 펌웨어를 로드하기 위해서입니다.

westporch@nt900x4c:~$ sudo reboot
펌웨어 설치 확인

펌웨어가 제대로 설치되었다면 ip addr 명령을 입력했을 때 무선랜(wlp1s0) 장치를 확인할 수 있습니다. 아직 무선랜(wlp1s0)을 설정하지 않았기 때문에 링크 다운(link down) 상태 입니다. 참고로 이더넷(enp2s0)과 무선랜(wlp1s0)의 맥 주소(mac address)에서 각각 3개의 옥텟은 비공개로 하였습니다.

westporch@nt900x4c-a58:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether e8:03:9a:**:**:** brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.90/24 brd 192.168.1.255 scope global enp2s0
       valid_lft forever preferred_lft forever
3: wlp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether c4:85:08:**:**:** brd ff:ff:ff:ff:ff:ff

리부팅 후에 iwlwifi 모듈이 로드 되었는지 확인합니다.

westporch@nt900x4c-a58:~$ lsmod | grep iwlwifi
iwlwifi               225280  1 iwldvm
cfg80211              774144  3 iwldvm,iwlwifi,mac80211

또한 /var/log/message를 확인했을 때 아래 메시지를 볼 수 있다면, 펌웨어가 제대로 설치된 것입니다.

Aug 19 22:29:22 nt900x4c kernel: [    4.157755] iwlwifi 0000:01:00.0: Detected Intel(R) Centrino(R) Advanced-N 6235 AGN, REV=0xB0
(..생략..) 
Aug 19 22:29:22 nt900x4c kernel: [    3.987498] iwlwifi 0000:01:00.0: firmware: direct-loading firmware iwlwifi-6000g2b-6.ucode
Aug 19 22:29:22 nt900x4c kernel: [    3.987783] iwlwifi 0000:01:00.0: loaded firmware version 18.168.6.1 op_mode iwldvm

이제 ‘/etc/apt/sources.list’를 원상태로 복구합니다.

#

# deb cdrom:[Debian GNU/Linux buster-DI-alpha3 _Buster_ - Official Snapshot amd64 DVD Binary-1 20180612-18:53]/ buster contrib main

# deb cdrom:[Debian GNU/Linux buster-DI-alpha3 _Buster_ - Official Snapshot amd64 DVD Binary-1 20180612-18:53]/ buster contrib main

+ deb http://ftp.kaist.ac.kr/debian/ buster main
- deb http://ftp.kaist.ac.kr/debian/ buster main non-free
deb-src http://ftp.kaist.ac.kr/debian/ buster main

deb http://security.debian.org/debian-security buster/updates main contrib
deb-src http://security.debian.org/debian-security buster/updates main contrib


프로그램 선택 및 설치 단계

일반적으로 소프트웨어 선택 단계에서 아래 항목들을 선택한 후 '<계속>' 버튼을 누르면 관련 파일들을 다운로드하고, 다운로드한 파일들을 설치합니다.

[*] Debian desktop environment
[*] ··· GNOME
[*] ··· KDE
[*] ··· Cinnamon
[*] ··· MATE
[*] ··· LXDE
[*] ··· LXQt
[ ] web server
[ ] 프린트 서버
[*] SSH server
[*] 표준 시스템 유틸리티

            <계속>

하지만 잠시 후 아래와 같이 설치 단계가 실패합니다.

12-2-1 (Debian10 install) Select-sw install-fail.png


참고로 파티션은 아래와 같이 설정했습니다.

디스크 용량: 8G

  • 스왑(swap): 1G
  • 루트(/): 7G

원인 분석

느낌상 디스크의 용량이 부족해서 설치가 안되는 것으로 보입니다. 정확한 원인을 파악하기 위해서는 콘솔(BusyBox)에서 시스템의 상태를 확인해야 합니다. control + alt + F2 키를 누르면 빨간색 그래픽 화면에서 검은색 콘솔 화면으로 전환되며, 아래 메시지가 화면의 좌측 상단에 출력됩니다. 이때 단순하게 엔터 키를 누르면 됩니다.

Please press Enter to activate this console.


엔터 키를 누르면 아래처럼 셸(shell)을 얻을 수 있습니다.

Please press Enter to activate this console.

BusyBox v1.27.2 (Debian 1:1.27.2-2) built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ #


우선 의심이 가는 디스크의 사용량을 확인해 보겠습니다. df -Th 명령어로 디스크의 사용량을 확인해 보니 아래와 같이 여유 공간이 없다는 것을 확인할 수 있습니다.

Please press Enter to activate this console.


BusyBox v1.27.2 (Debian 1:1.27.2-2) built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ # df -Th
Filesystem		Type		Size		Used	Available	Use%	Mounted on
none			tmpfs		200.4M		68.0K		200.3M	  0%	/run
devtmpfs		devtmpfs	992.3M			0		992.3M	  0%	/dev
/dev/sda2		ext4		  6.9G		 6.9G			 0	100%	/target
/dev/sda2		ext4		  6.9G		 6.9G			 0	100%	/dev/.static/dev
devtmpfs		devtmpfs	992.3M			0		992.3M    0%    /target/dev
/dev/sr0		iso9660		  3.6G		 3.6G			 0  100%    /target/media/cdrom0
/dev/sr0		iso9660		  3.6G		 3.6G			 0  100%    /cdrom


/var/log/syslog의 메시지도 확인해 보겠습니다. 아래처럼 syslog에도 디스크 용량이 부족하다는 로그가 기록되었습니다.

Please press Enter to activate this console.


BusyBox v1.27.2 (Debian 1:1.27.2-2) built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ # tail /var/log/syslog
Jun 30 01:41:19 main-menu[198]: INFO: Modifying debconf priority limit from 'high' to 'medium'
Jun 30 01:41:19 debconf: Setting debconf/priority to medium
Jun 30 01:41:19 main-menu[198]: INFO: Falling back to the package description for brltty-udeb
Jun 30 01:41:22 main-menu[198]: INFO: Falling back to the package description for brltty-udeb
Jun 30 01:41:22 main-menu[198]: INFO: Menu item 'pkgsel' selected
Jun 30 01:41:22 pkgsel: dpkg-divert: error: unable to flush new file '/var/lib/dpkg/diversions-new': No space left on device
Jun 30 01:41:22 main-menu[198]: (process:23851): fclose: No space left on device
Jun 30 01:41:22 main-menu[198]: WARNING **: Configuring 'pksel' failed with error code 2
Jun 30 01:41:22 main-menu[198]: WARNING **: Menu item 'pkgsel' failed.
Jun 30 01:41:45 init: starting pid 174, tty '/dev/tty2': '-/bin/sh'

해결 방법

데비안을 설치할 루트(/) 파티션의 용량을 늘리거나 설치할 소프트웨어 항목을 줄이면 됩니다. 저는 버추얼박스의 디스크 용량을 20G로 다시 설정(8G → 20G) 함으로써 문제없이 아래 패키지들을 설치할 수 있었습니다.

[*] Debian desktop environment
[*] ··· GNOME
[*] ··· KDE
[*] ··· Cinnamon
[*] ··· MATE
[*] ··· LXDE
[*] ··· LXQt
[ ] web server
[ ] 프린트 서버
[*] SSH server
[*] 표준 시스템 유틸리티

            <계속>

각주

  1. https://en.wikipedia.org/wiki/Debian#Code_names
  2. http://pixar.wikia.com/wiki/Toy_Story_4
  3. 신종홍. 컴퓨터 구조와 원리 2.0: 비주얼 컴퓨터 아키텍처(2013). 서울: 한빛미디어. P412-413, P429 ,P431
  4. 신종홍. 컴퓨터 구조와 원리 2.0: 비주얼 컴퓨터 아키텍처(2013). 서울: 한빛미디어. P408
  5. (2005, August 8) Linux Programmer's Manual(crypt(3) man page)
  6. 이재광, 전태일, 조재신(역) (2013). 알기 쉬운 정보보호개론 흥미로운 암호 기술의 세계 (2판). 히로시 유키의 INFORMATION SECURITY and CRYPTOGRAPHY. 서울: 인피니티북스. P95.
  7. 이재광, 전태일, 조재신(역) (2013). 알기 쉬운 정보보호개론 흥미로운 암호 기술의 세계 (2판). 히로시 유키의 INFORMATION SECURITY and CRYPTOGRAPHY. 서울: 인피니티북스. P95.
  8. https://web.mit.edu/kerberos/krb4-end-of-life.html
  9. https://web.mit.edu/kerberos/krb4-end-of-life.html
  10. 이재광, 전태일, 조재신(역) (2013). 알기 쉬운 정보보호개론 흥미로운 암호 기술의 세계 (2판). 히로시 유키의 INFORMATION SECURITY and CRYPTOGRAPHY. 서울: 인피니티북스. P222.
  11. https://itsfoss.com/swap-size/
  12. https://gyires.inf.unideb.hu/GyBITT/20/ch02.html
  13. https://www.linuxquestions.org/questions/linux-newbie-8/how-to-see-master-boot-record-773428/#post3779598
  14. https://www.ibm.com/developerworks/library/l-linuxboot/index.html
  15. https://0xax.gitbooks.io/linux-insides/content/Booting/linux-bootstrap-1.html
  16. https://www.thegeekstuff.com/2011/02/linux-boot-process/
  17. https://www.slashroot.in/linux-booting-process-step-step-tutorial-understanding-linux-boot-sequence
  18. https://www.reddit.com/r/explainlikeimfive/comments/5a4x8f/eli5_mbr_bootstrap_bootloader/
  19. https://www.computerhope.com/jargon/b/bootload.htm
  20. https://ubuntuforums.org/showthread.php?t=2306200&p=13406050#post13406050
  21. https://www.linuxquestions.org/questions/debian-26/how-to-provide-non-free-firmware-files-to-the-debian-jessie-installer-4175542680/#post5362827