리눅스에서 프로그램의 설치 make
컨텐츠 정보
- 18,587 조회
- 13 추천
- 목록
본문
리눅스에서 프로그램의 설치 |
|||||||||||||||||||||||||
패키지란 어떤 애플리케이션에 관련된 프로그램이나 설정 파일, 문서 등을 하나로 묶어둔 것입니다. 리눅스 프로그램들은 대부분 GPL 라이센스를 가지고 배포됩니다. 리눅스 프로그램들은 소스가 공개되어 배포되기 때문에 유저가 직접 소스를 컴파일하여 설치하는 과정을 거칩니다. 또 레드헷사에서 개발한 RPM 이라는 패키지 매니저를 이용하여 RPM으로 패키징된 프로그램을 설치하는 방법이 있습니다. 데비안 리눅스라면 DEB 라는 패키지 매니저를 제공합니다.
많은 소스 패키지들은 대부분 C언어로 되어 있습니다. tar 로 묶어져서 gzip 이나 bzip2 으로 압축되어져 배포되며 압축을 풀고 소스를 컴파일하는 과정을 거쳐 설치가 됩니다. 소스 형태로 되어 있는 패키지들은 똑같은 패키지가 서로 다른 종류의 컴퓨터에서 돌아가도록 컴파일될 수 있고, 따라서 개발자는 OS에 따라서 여러 버젼을 만드는 수고를 덜 수 있습니다. 이렇게 해서, 한 패키지의 배포본이 인텔을 비롯해 알파, 스팍, PPC 등의 다른 리눅스 배포판에서 컴파일되고 사용될 수 있습니다.
소스 패키지를 설치하기 전에 소스 패키지의 압축을 풀어야 합니다. 대부분의 소스 패키지들은 tar.gz 압축이나 tar.bz2 압축으로 되어 있습니다. 먼저 압축을 풀기 전에 적당한 작업디렉토리를 만들어서 복사한후 작업하는 것이 좋습니다. 그 다음에 압축을 풀고 생성된 디렉토리에 들어가서 작업을 진행합니다. tar.gz 압축을 해제하는 방법은 다음과 같습니다. tar.gz 은 tgz 와 같습니다.
또, bzip2로 압축이 되어 있는 경우에도 (이때 확장자는 bz2입니다.)
와 같이 풀 수 있습니다.
개발자들은 그들의 패키지를 GNU 표준에 따라서 만듭니다. 이것은 패키지의 소스의 압축을 풀면 그 안에 패키지에 대한 정보를 가지고 있는 문서들을 가지고 있음을 뜻합니다. 포함하고 있는 문서들은 대략 다음과 같습니다. 모든 패키지들이 이 파일들을 포함하고 있지는 않습니다. INSTALL 패키지에 대한 설정, 제작(build) 그리고 설치에 관한 정보를 담고 있습니다. 거의 모든 소스 패키지들은 표준적인 설치방법을 가지고 있습니다. README 프로젝트의 간단한 설명, 웹싸이트의 주소, 제작환경, 개발자의 제작 환경과 잠재하고 있는 문제점 같은 정보를 담고 있습니다. NEWS 패키지에 대한 새로운 소식을 알립니다. COPYING 패키지의 라이센스를 표시합니다. CREDITS프로젝트의 리더/지원해 주는 사람의 리스트에 대한 내용을 담고 있습니다. ChangeLog 패키지가 버젼에 따라 바뀐점을 기록하고 있습니다. 누가, 언제, 어느 부분을 바꾸었는가를 표시합니다.
소스 패키지들은 다음의 명령 순서대로 설치됩니다.
소스 패키지에는 컴파일에 필요한 방법들이 README, INSTALL 등의 문서를 통해 제공됩니다. 따라서 소스 패키지를 컴파일하는데 에러가 발생하면 INSTALL 등과 같은 문서를 통해 컴파일 환경에 대한 정보를 알아보고 해결하는 것이 올바른 방법입니다. 보통 패키지의 컴파일 작업은 root로 하지 않습니다. root로 su를 하는 것은 컴파일된 바이너리 파일들을 시스템 디렉터리에 설치할 때에만 필요합니다. configure는 시스템과 컴파일 환경을 조사해서 Makefile 을 만드는 역할을 합니다. Makefile은 실행파일을 생성시키기 위한 파일들간의 관계, 명령어등을 가지고 있는 스크립트입니다. configure는 여러 가지 옵션을 가지고 있으며 --prefix 옵션을 사용하여 설치될 디렉토리를 지정할 수 있습니다. configure --help 로 더 자세한 옵션을 알 수 있습니다. make는 configure 스크립트에 의해서 만들어진 Makefile 을 이용해서 실제 소스를 컴파일하여 실행 파일을 만드는 작업을 합니다. 리눅스의 C 언어 컴파일러인 gcc는 비주얼C++ 같은 통합 환경 컴파일러와는 달리 컴파일 작업에 필요한 링크 옵션등을 사용자가 직접 지정해 주어야 하기 때문에 컴파일 작업에 필요한 라이브러리와 헤더파일, 그리고 여러가지 소스가 함께 사용되는 경우에는 컴파일 옵션등을 지정해 주기가 쉽지 않습니다. 따라서 이러한 문제를 해결하기 위해 대규모 작업을 자동화하기 위한 make 를 사용하고 configure에 의해서 생성된 Makefile을 이용해서 복잡한 컴파일 과정을 자동으로 수행하게 됩니다. Makefile을 수정하여 컴파일 환경을 수정할 수도 있습니다. make install을 하면 만들어진 실행파일들을 적절한 시스템 디렉토리에 설치하게 됩니다. configure 에서 설정된 디렉토리로 복사를 하는 작업입니다. 보통 /usr/local/bin 디렉토리 아래에 설치가 됩니다.
실제 예제
소스로부터 생성된 패키지를 삭제하는 방법은 간단합니다. 보통 소스 패키지들은 /usr/local/ 디렉토리 아래에 설치가 되므로 설치한 패키지의 실행파일과 관련 파일들을 지우면 됩니다. 또 다른 방법이 있습니다. 컴파일을 하기위한 Makefile 을 가지고 있다면(압축을 푼 소스 디렉토리를 그대로 가지고 있다면 그 디렉로리 안에서) 다음과 같은 명령을 내리면 됩니다.
만약 스크린에 텍스트가 출력된다면 그것은 올바른 화면입니다. 이 작업은 configure에서 --prefix=path 에서 설치될 디렉토리를 /usr/local/foo/ 라고 했다면 그 안의 파일과 디렉토리를 간단히 삭제합니다. 만약 --prefix=path 사용하는것을 결정하지 않고 Makefile 을 가지고 있지 않다면 문제를 일으킵니다. 이럴 경우에는 다시 confiure를 실행하여 Makefile 을 생성시킵니다. 그리고 다시 'make uninstall'을 하면 다시 삭제 작업하는 것을 볼 수 있습니다.
RPM이란 'Redhat Package Manager'를 줄인 말로써 미국 Redhat 회사에서 만든 리눅스 패키지 관리 프로그램입니다. 프로그램을 설치, 삭제, 업그레이드하는 과정을 명령어로 처리하고 사용자에게 상황을 이해하기 쉽게 보여줍니다. RPM 은 설치된 패키지와 패키지에 속해있는 파일들의 데이터베이스를 만들어서 관리하며 설정파일들을 별도의 방식으로 관리하여 사용자가 설정한 내용들을 보호합니다. RPM은 설치, 제거, 업그레이드, 패키지 정보 알아내기, 패키지 점검등의 기능이 있으며 rpm --help 나 man 페이지를 통해 더 많은 옵션과 기능을 알아볼 수 있습니다.
RPM 패키지들은 보통 다음과 같은 파일 이름 형식을 지닙니다. 패키지이름-패키지버젼-배포판에서 가지는 패키징 버젼.하드웨어-플랫폼.rpm 모든 RPM 패키지들이 이같은 형식으로 구성된 것은 아니지만 이것을 기본 규격으로 하여 파일명을 표시합니다. 각 요소들은 '.'나 '-' 와 같은 기호로 구분됩니다. 다음의 RPM파일명을 분석해 보도록 하겠습니다. foo-1.2.3-4.i386.rpm RPM 패키지 이름에서 - 는 각 필드를 구분하는 것입니다. 맨 앞부분의 foo는 패키지의 이름입니다. 두번째 1.2.3 은 패키지의 버전입니다. 세번째의 4 는 배포판에서 패키지를 패키징한 릴리즈 번호입니다. 네번째의 i386 은 어떤 시스템에서 쓰이는것인지를 나타내는 것입니다. i386 이라면 인텔 PC 계열을 나타내는 것이고 sparc 이라면 스팍 리눅스용, alpha 라면 알파 리눅스용입니다.
RPM 은 다음과 같은 형식으로 사용됩니다.
RPM을 설치하려면 -i 옵션을 주면 됩니다. 하지만 일반적으로는 다음 예제처럼 -Uvh 옵션을 주어 설치합니다. 이렇게 하면 설치하려는 패키지의 이전 버전이 설치되어 있는 경우에는 자동으로 업그레이드를 하고 만약 설치되어 있지 않는 경우에는 설치 과정을 진행합니다. 패키지의 삭제는 -e 옵션을 사용합니다. 삭제할 때는 설치할때와는 달리 파일명을 적어주는 것이 아니라 패키지의 이름인 foo를 사용합니다.
RPM은 설치시에 의존성을 검사하게 됩니다. 의존성이란 한 패키지가 정상적으로 동작하기 위해서 다른 패키지나 라이브러리 패키지등이 필요한 경우를 말하는데 의존성 검사에서 실패하게 되면 RPM은 에러메시지를 출력하게 됩니다.
이런 오류메시지는 foo라는 패키지를 설치하고자 할때에는 bar라는 패키지가 먼저 설치되어 있어야 한다는 것을 알려주는 것입니다. 만약에 강제로 설치하고자 할때에는 --nodeps라는 옵션을 추가하면 됩니다. 패키지를 설치할 때와 마찬가지로 삭제할 때에도 의존성 오류가 발생하기도 합니다. 아래와 같은 메시지를 보게 됩니다.
이 경우에는 의존성에 걸린 bar를 먼저 삭제한 후에 다시 foo를 삭제하면 됩니다. 마찬가지로 강제로 패키지를 삭제하고자 할때에는 --nodeps 라는 옵션을 쓰면 됩니다.
질의 모드는 시스템에 설치된 패키지와 특정 패키지에 포함되어 있는 파일들의 정보를 알고 싶을 때 사용됩니다. 또 특정 패키지의 포함되어 있는 파일들의 위치를 알아내거나 실체로 패키지를 설치하기 전에 어떠한 파일들이 설치될 지를 미리 알아 볼수 있습니다. -q 옵션이 패키지를 질의하는데 사용됩니다. 특정한 파일에 대해서 이 파일을 포함하는 패키지를 알고 싶다면 -qf 옵션을 사용합니다. 특정 패키지에 속한 모든 파일들의 리스트를 보고자 한다면 -ql 옵션을 사용합니다.
시스템에 설치된 모든 패키지를 볼려면 -qa 옵션을 사용하면 되고 설치된 패키지중에서 특정 패키지가 설치되어 있는지 검색해 볼려면 -qa | grep <패키지이름> 와 같이 사용하면 됩니다.
패키지에 대한 자세한 정보를 얻고 싶으면 -qi 옵션를 사용하면 됩니다. 원래 배포되었던 패키지의 이름이 번경되어서 패키지의 버전과 릴리즈를 알 수 없다면 -qp 옵션을 사용하면 패키지의 버젼과 릴리즈를 알아 볼 수 있습니다.
리눅스 프로그램은 보통 안정버전, 개발버전 두 분류가 있습니다. 안정버전은 개발자가 생각하기에 프로그램을 사용함에 있어 충분히 안정적이다라고 생각하는 버전입니다. 이것의 의미는 배포되는 버전이 충분히 테스트되었고 프로그램에 존재하던 많은 버그들이 없어진것을 뜻합니다. 개발버전은 알파나 베타 릴리즈 버전을 말하며 아직 계속 테스트되고 있으며 새로운 기능들을 추가하여 시험중이거나 시스템에 위험을 줄수 있는 것과 같은 위험한 버그들을 가지고 있을 수 있음을 의미합니다. 그러므로 일반적인 사용자들은 안정버전을 받아서 설치를 하면 됩니다.
리눅스용 프로그램들은 아래의 싸이트등에서 구할 수 있습니다. freshmeat.net : http://freshmeat.net ICEWALKERS : http://icewalk.com linuxberg : http://linuxberg.com Rpmfind.net : http://rpmfind.net/linux/RPM/ 적수네 FTP : ftp://linux.sarang.net
글쓴이 : 이종준 님 ( junilove@kebi.com ) |