Linux에서 소스 코드로 소프트웨어 빌드하기

CompTIABeginner
지금 연습하기

소개

이 실습에서는 Linux 시스템에서 소스 코드를 사용하여 소프트웨어를 빌드하고 설치하는 기본적인 과정을 배웁니다. 이는 배포판의 패키지 관리자에서 제공하지 않는 애플리케이션을 다루거나 특정 사용자 지정 기능을 활성화해야 할 때 필수적인 기술입니다. 실제 사례인 Pure-FTPd 서버를 사용하여 소스 기반 설치 워크플로우의 각 단계를 이해하게 됩니다.

먼저 tar 명령어를 사용하여 '타볼(tarball)'이라고 불리는 압축 아카이브 파일에서 소스 코드를 추출하는 것으로 시작합니다. 다음으로 ./configure 스크립트를 실행하여 빌드 환경을 준비하고, make 명령어를 통해 소스 코드를 실행 가능한 프로그램으로 컴파일합니다. 컴파일이 성공하면 make install을 사용하여 소프트웨어를 시스템 전체에 설치합니다. 마지막으로 소프트웨어를 올바르게 제거하고 소스 파일을 정리하는 방법을 배워 소스 코드 설치의 전체 수명 주기를 완료합니다.

tar를 사용하여 소스 코드 추출하기

이 단계에서는 tar 명령어를 사용하여 '타볼(tarball)'이라고 흔히 알려진 소스 코드 아카이브를 추출하는 방법을 배웁니다. 소프트웨어 소스 코드는 필요한 모든 파일을 하나로 묶고 전체 파일 크기를 줄이기 위해 .tar.gz와 같은 압축 아카이브 파일 형태로 배포되는 경우가 많습니다.

먼저 현재 작업 디렉토리인 ~/project에 소스 코드 아카이브가 있는지 확인해 보겠습니다. ls -l 명령어를 사용하여 파일과 세부 정보를 나열합니다.

ls -l

출력 결과에서 pure-ftpd-1.0.53.tar.gz 파일을 확인할 수 있습니다.

total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz

이제 tar 명령어를 사용하여 이 아카이브의 내용을 추출합니다. 사용할 옵션은 다음과 같습니다.

  • -x: 아카이브에서 파일을 **추출(extract)**합니다.
  • -z: .gz 확장자로 표시되는 gzip을 사용하여 아카이브의 압축을 풉니다.
  • -v: 상세(verbose) 출력 모드로, 추출되는 모든 파일을 나열합니다.
  • -f: 처리할 아카이브의 **파일명(filename)**을 지정합니다.

터미널에서 다음 명령어를 실행하여 아카이브를 추출합니다.

tar -zxvf pure-ftpd-1.0.53.tar.gz

-v 옵션을 사용하면 tar가 추출하는 각 파일의 이름을 출력합니다. 출력 내용이 다소 길지만, 아래 예시와 같이 생성되는 디렉토리 구조와 파일들을 확인할 수 있습니다.

pure-ftpd-1.0.53/
pure-ftpd-1.0.53/AUTHORS
pure-ftpd-1.0.53/README
pure-ftpd-1.0.53/README.LDAP
pure-ftpd-1.0.53/README.MySQL
pure-ftpd-1.0.53/README.PGSQL
...
pure-ftpd-1.0.53/src/puredb_p.h
pure-ftpd-1.0.53/src/pure-quotacheck.c
pure-ftpd-1.0.53/src/pure-uploadscript.c

명령어가 완료되면 소스 코드가 포함된 새 디렉토리가 생성됩니다. 다시 ls -l을 사용하여 이 새 디렉토리를 확인해 보겠습니다.

ls -l

이제 원래의 타볼과 함께 pure-ftpd-1.0.53 디렉토리가 보일 것입니다.

total 752
drwxr-xr-x 10 labex labex    4096 Nov 10 12:05 pure-ftpd-1.0.53
-rw-r--r--  1 labex labex  765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz

성공적으로 아카이브에서 소스 코드를 추출했습니다. 다음 단계에서는 이 새 디렉토리로 이동하여 구성 및 컴파일 과정을 시작합니다.

./configure와 make를 사용하여 소프트웨어 구성 및 컴파일하기

이 단계에서는 특정 시스템에 맞게 소스 코드를 구성하고 실행 가능한 프로그램으로 컴파일합니다. 이는 Linux 시스템에서 소스 코드로 소프트웨어를 빌드하는 표준 2단계 과정입니다.

먼저 이전 단계에서 생성된 디렉토리로 이동해야 합니다. cd 명령어를 사용하여 pure-ftpd-1.0.53 디렉토리로 이동합니다.

cd ~/project/pure-ftpd-1.0.53

소스 코드 디렉토리 안으로 들어왔다면, 첫 번째 과정은 configure 스크립트를 실행하는 것입니다. 이 스크립트는 소프트웨어를 빌드하는 데 필요한 모든 도구, 라이브러리 및 종속성이 시스템에 있는지 확인합니다. 그런 다음 컴파일 과정에 대한 지침이 포함된 Makefile을 생성합니다.

스크립트를 실행하려면 이름 앞에 ./를 입력해야 합니다. 이는 셸에게 현재 디렉토리에서 configure 스크립트를 찾으라고 지시하는 것입니다.

./configure

스크립트가 일련의 검사를 수행하며 많은 출력 내용이 지나갈 것입니다. 이는 정상적인 현상입니다. 성공적으로 완료되면 아래와 유사한 요약 정보가 표시됩니다.

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
...
checking for OpenSSL... no
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating man/Makefile
...
config.status: executing depfiles commands

Pure-FTPd has been configured.

config.status: creating Makefile 라인을 확인하세요. 이는 Makefile이 성공적으로 생성되었음을 의미합니다.

두 번째 과정은 코드를 컴파일하는 것입니다. make 명령어는 Makefile을 읽고 컴파일러(예: gcc)를 올바른 옵션으로 실행하여 사람이 읽을 수 있는 소스 코드(.c 파일)를 기계가 실행할 수 있는 바이너리 파일로 변환합니다.

이제 make 명령어를 실행합니다.

make

이 과정은 잠시 시간이 걸릴 수 있습니다. make가 각 소스 파일에 대해 컴파일러를 호출하면서 많은 출력 라인이 나타납니다. 이것이 실제 컴파일 과정입니다.

(CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/labex/project/pure-ftpd-1.0.53/config/missing automake-1.15 --gnu src/Makefile)
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -c pure-ftpd.c
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline   -o pure-ftpd pure_ftpd-pure-ftpd.o pure_ftpd-log.o ...
...
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'

make 명령어가 오류 없이 완료되면 소프트웨어가 성공적으로 컴파일된 것입니다. 이제 바이너리 파일을 시스템에 설치할 준비가 되었으며, 다음 단계에서 이를 수행합니다.

make install을 사용하여 소프트웨어 설치하기

이 단계에서는 컴파일된 소프트웨어를 시스템에 설치합니다. make로 소스 코드를 컴파일한 후, 생성된 바이너리 파일과 기타 필요한 구성 요소(문서 및 설정 파일 등)는 여전히 소스 코드 디렉토리 내에 있습니다. make install 명령어는 이 파일들을 표준 시스템 전체 경로로 복사하여 어디서든 소프트웨어를 실행할 수 있게 합니다.

여전히 ~/project/pure-ftpd-1.0.53 디렉토리에 있는지 확인하세요.

설치 과정은 일반적으로 root 사용자가 소유한 /usr/local/bin/usr/local/sbin과 같은 디렉토리에 파일을 써야 합니다. 따라서 관리자 권한으로 make install을 실행하려면 sudo 명령어를 사용해야 합니다.

다음 명령어를 실행하여 Pure-FTPd를 설치합니다.

sudo make install

make install 명령어는 Makefile을 읽고 설치 지침을 실행합니다. 파일이 생성되어 시스템 디렉토리로 복사되는 과정이 출력됩니다.

make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53/src'
/usr/bin/mkdir -p '/usr/local/sbin'
/usr/bin/install -c pure-ftpd pure-pw pure-pwconvert pure-authd pure-certd pure-uploadscript pure-quotacheck '/usr/local/sbin'
/usr/bin/mkdir -p '/usr/local/share/man/man8'
/usr/bin/install -c -m 644 ../man/pure-ftpd.8 ../man/pure-pw.8 ../man/pure-pwconvert.8 ../man/pure-authd.8 ../man/pure-certd.8 '/usr/local/share/man/man8'
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53'
/usr/bin/mkdir -p '/usr/local/etc'
/usr/bin/install -c -m 644 pure-ftpd.conf '/usr/local/etc'
make[1]: Nothing to be done for 'install-data-am'.
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53'

이제 소프트웨어가 설치되었습니다. 이를 확인하는 간단한 방법은 시스템의 PATH에서 실행 파일을 검색하여 전체 경로를 출력하는 which 명령어를 사용하는 것입니다.

which pure-ftpd

설치가 성공적이었다면 다음과 같은 출력이 나타나며, pure-ftpd 실행 파일이 표준 시스템 디렉토리에 위치함을 알 수 있습니다.

/usr/local/sbin/pure-ftpd

소프트웨어가 설치되었으므로 기술적으로는 구성 및 사용이 가능한 상태입니다. 하지만 이 실습에서는 다음 단계에서 제거하는 과정을 안내합니다.

make uninstall과 rm을 사용하여 소프트웨어 제거 및 정리하기

마지막 단계에서는 소스 코드로 설치한 소프트웨어를 올바르게 제거하고 빌드 파일을 정리하여 시스템을 원래 상태로 되돌리는 방법을 배웁니다. 이는 수동으로 소프트웨어를 관리할 때 중요한 부분입니다.

Makefile을 사용하는 대부분의 잘 작성된 소스 패키지는 uninstall 타겟을 제공합니다. 이 타겟은 make install의 작업을 되돌려 시스템 디렉토리에 복사된 모든 파일을 제거하도록 설계되었습니다.

먼저 여전히 ~/project/pure-ftpd-1.0.53 디렉토리에 있는지 확인하세요. 설치 과정과 마찬가지로 제거 과정도 관리자 권한이 필요합니다. sudo와 함께 make uninstall 명령어를 사용합니다.

sudo make uninstall

파일이 설치되었던 시스템 디렉토리에서 제거되는 과정이 출력됩니다.

make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53/src'
rm -f /usr/local/sbin/pure-ftpd /usr/local/sbin/pure-pw /usr/local/sbin/pure-pwconvert /usr/local/sbin/pure-authd /usr/local/sbin/pure-certd /usr/local/sbin/pure-uploadscript /usr/local/sbin/pure-quotacheck
rm -f /usr/local/share/man/man8/pure-ftpd.8 /usr/local/share/man/man8/pure-pw.8 /usr/local/share/man/man8/pure-pwconvert.8 /usr/local/share/man/man8/pure-authd.8 /usr/local/share/man/man8/pure-certd.8
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53'
rm -f /usr/local/etc/pure-ftpd.conf
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53'

소프트웨어가 제거되었는지 확인하려면 which 명령어를 다시 사용합니다.

which pure-ftpd

이번에는 pure-ftpd 실행 파일이 /usr/local/sbin에서 삭제되어 시스템의 PATH에서 찾을 수 없으므로 아무런 출력도 나타나지 않아야 합니다.

소프트웨어가 제거되었으므로 마지막 단계는 소스 코드 디렉토리 자체를 삭제하는 것입니다. 디렉토리 안에 있는 동안에는 해당 디렉토리를 삭제할 수 없으므로, 먼저 프로젝트 루트 디렉토리로 이동합니다.

cd ~/project

이제 rm 명령어에 -r (재귀적) 옵션을 사용하여 pure-ftpd-1.0.53 디렉토리와 그 안의 모든 내용을 삭제합니다.

rm -r pure-ftpd-1.0.53

성공적으로 수행되면 아무런 출력도 나타나지 않습니다. ~/project 디렉토리의 내용을 나열하여 삭제되었는지 확인할 수 있습니다.

ls -l

이제 pure-ftpd-1.0.53 디렉토리는 사라지고 원래의 타볼만 남았습니다.

total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz

축하합니다! 소스 코드로 소프트웨어를 빌드하는 전체 과정인 추출, 구성, 컴파일, 설치, 그리고 마지막으로 제거 및 정리까지 성공적으로 완료했습니다.

요약

이 실습에서는 Linux 시스템에서 소스 코드를 사용하여 소프트웨어를 빌드하고 설치하는 표준 절차를 배웠습니다. 먼저 tar 명령어를 사용하여 타볼(.tar.gz)이라고 불리는 압축 소스 코드 아카이브를 추출하는 것으로 시작했습니다. 추출 후 소스 디렉토리로 이동하여 ./configure 스크립트를 실행했습니다. 이 스크립트는 시스템 종속성을 확인하고 Makefile을 생성하여 컴파일을 준비합니다. 마지막으로 make 명령어를 사용하여 소스 코드를 실행 가능한 바이너리로 컴파일하고, make install을 사용하여 소프트웨어를 적절한 시스템 디렉토리에 복사했습니다.

또한 소프트웨어를 제거하고 빌드 환경을 정리하는 올바른 방법도 연습했습니다. make uninstall 명령어를 사용하여 시스템에서 설치된 파일을 제거하는 방법을 배웠습니다. 정리 과정을 완료하기 위해 rm 명령어를 사용하여 원래의 소스 코드 디렉토리를 삭제함으로써 시스템을 이전 상태로 되돌렸습니다.