YUM 없이 소스를 컴파일 하여 프로그램 설치하기

2015.08.13 22:19


RPM이나 YUM 같은 패키지 관리 프로그램을 사용하지 않고 소스로부터 컴파일 과정을 거쳐 직접 패키지를 설치하는 방법을 사용하는 경우도 있다. 


서버로 사용하면서 네트워크가 외부로 연결되어 있지 않거나, 해당 시스템에 맞는 RPM을 구하지 못한 경우는 직접 컴파일해서 설치할 수도 있다. 


이 경우 다음 세 단계를 거친다.


1. 환경설정(configure) 

- 프로그램이 설치될 리눅스의 환경이 다르고, 용도도 다르므로 자신이 원하는 설치옵션을 지정해준다. 결과로 makefile 을 만들어낸다. 


2. 컴파일(make)

- 실제 소스 파일을 컴파일하는 과정이다. configure에서 만들어진 makefile을 이용해서 컴파일 한다. 


3. 설치(make install)

- 컴파일이 완료된 실행 파일 및 관련 파일들을 해당 디렉토리에 설치한다. 




테스트로 소스 컴파일할 파일은 hello world 프로그램이다. ^^;;


gnu 사이트에서 해당 파일을 한 번 찾아보자. 





wget 명령어로 해당 파일을 다운로드 받는다. 

-P 옵션을 주면 저장할 디렉토리를 지정할 수 있다. 

(-P 옵션이 없을 경우 디폴트로 현재 wget을 실행시키는 디렉토리에 다운로드 받는다)


[test01@centos6~]$wget -P /home/test01/temp/ http://ftp.gnu.org/gnu/hello/hello-2.9.tar.gz

--2015-08-13 21:46:35--  http://ftp.gnu.org/gnu/hello/hello-2.9.tar.gz

Resolving ftp.gnu.org... 208.118.235.20, 2001:4830:134:3::b

Connecting to ftp.gnu.org|208.118.235.20|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 723645 (707K) [application/x-gzip]

Saving to: `/home/test01/temp/hello-2.9.tar.gz'


100%[===============================================================>] 723,645      241K/s   in 2.9s    


2015-08-13 21:46:38 (241 KB/s) - `/home/test01/temp/hello-2.9.tar.gz' saved [723645/723645]


[test01@centos6 ~]$



다운로드 받은 파일의 압축을 해제하고 풀어준다. 


[test01@centos6 ~]$ cd /home/test01/temp

[test01@centos6 temp]$ ll

합계 708

-rw-rw-r--. 1 test01 test01 723645 2013-10-10 08:49 hello-2.9.tar.gz

[test01@centos6 temp]$ tar xvf hello-2.9.tar.gz 

hello-2.9/

hello-2.9/build-aux/

hello-2.9/build-aux/test-driver

hello-2.9/build-aux/texinfo.tex

hello-2.9/build-aux/mdate-sh

hello-2.9/build-aux/snippet/

hello-2.9/build-aux/snippet/warn-on-use.h

hello-2.9/build-aux/snippet/arg-nonnull.h

hello-2.9/build-aux/snippet/c++defs.h

hello-2.9/build-aux/snippet/_Noreturn.h

... ... ...




환경설정을 위해 configure 파일을 실행시킨다.


[test01@centos6 hello-2.9]$ ./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... /bin/mkdir -p

checking for gawk... gawk

checking whether make sets $(MAKE)... yes

checking whether make supports nested variables... yes

checking for gcc... gcc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.out

checking for suffix of executables... 

checking whether we are cross compiling... no


(중간생략)


configure: creating ./config.status

config.status: creating Makefile

config.status: creating contrib/Makefile

config.status: creating doc/Makefile

config.status: creating lib/Makefile

config.status: creating man/Makefile

config.status: creating po/Makefile.in

config.status: creating src/Makefile

config.status: creating tests/Makefile

config.status: creating config.h

config.status: executing depfiles commands

config.status: executing po-directories commands

config.status: creating po/POTFILES

config.status: creating po/Makefile


makefile을 새로 생성한 것을 볼 수 있다. 


make와 make install을 실행한다. 


하나씩 따로 실행하지 않고 한 번에 실행시켜도 별 문제 없다. 


[test01@centos6 hello-2.9]$ make ; make install

make  all-recursive

make[1]: Entering directory `/home/test01/temp/hello-2.9'

Making all in contrib

make[2]: Entering directory `/home/test01/temp/hello-2.9/contrib'

make[2]: Nothing to be done for `all'.

make[2]: Leaving directory `/home/test01/temp/hello-2.9/contrib'

Making all in lib

make[2]: Entering directory `/home/test01/temp/hello-2.9/lib'


... .... ...



이제 마지막으로 실행시켜본다.   ^____^


[test01@centos6 hello-2.9]$ hello

Hello, world!

[test01@centos6 hello-2.9]$ 








또루아빠 Linux, Unix , , , , ,