Linux_ServerAdmin (8)Software관리
(1)RPM 패키지 관리
[참고] 오픈소스 프로젝트(한국 미러링 사이트)
http://ftp.daum.net
http://ftp.kaist.ac.kr
http://mirror.khlug.org
http://mirror.korea.ac.kr
http://ftp.neowiz.com/pub
http://mirror.cdnetworks.com
(1) RPM(Redhat Package Manager)
(EX) kernel-2.6.18-348.el5.rpm
-> Redhat, RHEL, Fedora, CentOS
RPM(Redhat Package Manager)이란 Redhat사에서 패키지를 좀 더 쉽게 설치하고 관리하기 위해 만든 패키지 관리 프
로그램이다. 복잡한 컴파일 과정 없이 간단하게 패키지를 설치할 수 있는 장점이 있지만 반대로 사용자에게 맞는
다양한 옵션들은 설정할 수 없다는 것이 단점이다. 그래서 간단한 프로그램의 경우에는 RPM으로 설치하고 서버와
같은 중요한 프로그램은 소스를 컴파일 하여 설치하는 것이 좋다.rpm명령어는 rpm패키지를 설치하고 삭제 또는 관
리하는 명령어이다.
■ rpm 패키지 다운로드 사이트
http://rpmfind.net
http://rpm.pbone.net
ftp://ftp.daum.net
(명령어 형식)
# rpm [옵션]
질의 옵션 (-q 또는 --query 옵션과 함께 사용): -c, --configfiles 모든 설정 파일을 나열합니다 -d, --docfiles 모든 문서 파일을 나열합니다 --dump 기본 파일 정보를 보여줍니다 -l, --list 패키지 안의 파일을 나열합니다 -s, --state 나열된 파일의 상태(state)를 보여줍니다 -a, --all 모든 패키지에 대해 질의/검증합니다 -f, --file 파일이 들어있는 패키지에 대해 질의/검증 합니다 -g, --group 그룹 안의 패키지를 질의/검증합니다 -p, --package query/verify a package file
검증 옵션 (-V 또는 --verify 옵션과 함께 사용): --nodeps 패키지의 의존성을 검사하지 않습니다. -a, --all 모든 패키지에 대해 질의/검증합니다. -f, --file 파일이 들어있는 패키지에 대해 질의/검증 합니다. -g, --group 그룹 안의 패키지를 질의/검증 합니다 -p, --package query/verify a package file
서명 옵션: --addsign sign package(s) (identical to --resign) -K, --checksig verify package signature(s) --delsign delete package signatures --import import an armored public key --resign sign package(s) (identical to --addsign) --nodigest don't verify package digest(s) --nosignature don't verify package signature(s)
데이터베이스 옵션: --initdb 데이터베이스를 초기화 합니다. --rebuilddb 설치된 패키지 헤더에서 상반된 목록(inverted lists)의 데이터베이스를 재구축 합니다
설치/업그레이드/삭제 옵션: -e, --erase=<패키지>+ 패키지를 (제거) 삭제합니다 --excludedocs 패키지에 포함된 문서 파일을 설치하지 않습니다 --excludepath=<경로> <경로>로 시작되는 파일은 설치하지 않습니다 --force --replacepkgs 와 --replacefiles 옵션을 동시에 사용합니다 -F, --freshen=<패키지파일>+ 기존에 설치된 패키지를 업그레이드 합니다 -h, --hash 패키지 설치를 해시마크(#)로 표시합니다 (-v 옵션과 함께 사용하는 것이 좋습니다) -i, --install install package(s) --nodeps 패키지의 의존성을 검사하지 않습니다 --oldpackage 이전 버전의 패키지로 다운그레이드 합니다 (--force 옵션을 사용시에는 이 옵션이 자동으로 적용됩니다) --percent 패키지 설치를 퍼센트(%)로 표시합니다 --prefix=<디렉토리> 재배치 기능이 있는 패키지의 경우, 지정한 <디렉토리>로 재배치하여 설치합니다. --replacepkgs 패키지가 이미 설치되어 있는 경우에도 설치합니다 --test 패키지를 설치하지 않고, 제대로 설치되는지만 확인합니다 -U, --upgrade=<패키지파일>+ 패키지를 업그레이드 합니다
Common options for all rpm modes and executables: -v, --verbose 자세한 출력을 제공합니다 |
(명령어 사용예)
■ RPM 패키지 설치 및 업데이트
# rpm -Uvh package-filename.rpm 패키지 업데이트, 이전 버전이면 업그레이드 하고 없으면 설치
(-U: Upgrade)
# rpm -ivh --nodeps package-filename.rpm 의존성 체크 안함, 의존성 문제를 무시하고 설치
(-nodeps: no dependency)
■ RPM 패키지 삭제
# rpm -e package-filename 패키지 삭제
(-e: erase)
# rpm -e --nodeps package-filename 패키지 삭제, 의존성 문제를 무시하고 패키지 삭제
(--nodeps: no dependency)
■ RPM 패키지 정보 확인
# rpm -qa package-filename 지정된 패키지 설치 유무 확인
(-q: query, -a: all)
# rpm -qa | grep package-filename 전체 패키지 목록에서 지정된 패키지 설치 유무 확인
# rpm -qi package-filename 설치된 패키지의 자세한 정보 확인
(-i: information)
# rpm -ql package-filename 설치된 패키지의 파일과 디렉토리 목록 확인
(-l: list)
# rpm -qip package-filename.rpm 설치하고자 하는 패키지의 자세한 정보 확인
(-p: packages file)
패키지 확인
# rpm -qa | more
# rpm -q openssh ( # rpm -qa | grep openssh)
# rpm -qa | grep openss
패키지 삭제
# rpm -qa | grep php
# rpm -e php (# rpm -e php-5.1.6-43.el5_10)
# rpm -qa | grep php
[ 참고 ] 패키지 삭제시 다른 패키지에 영향을 미친다면 삭제를 할수 없다는 메세지가 나타나는데
이것을 의존성 이라고한다. 의존성을 무시하고 제거하면 다른 패키지를 사용하는데 문제가 생길 수 있다.
# rpm -e --nodeps package-filename (의존성을 무시하고 삭제)
패키지 설치
설치 방법
- CD안에서 패키지를 검색하여 설치
- 인터넷상에서 패키지 다운로드 하여 설치
CD 안에 패키지 검색하여 설치하는 방법
( VMware > VM > Settings > CD/DVD )
# df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda1 26G 3.2G 22G 13% / /dev/sda8 487M 11M 451M 3% /data1 /dev/sda7 487M 11M 451M 3% /data2 /dev/sda6 487M 11M 451M 3% /data3 /dev/sda5 487M 11M 451M 3% /data4 /dev/sda3 487M 11M 451M 3% /home tmpfs 1.5G 0 1.5G 0% /dev/shm /dev/hdc 3.9G 3.9G 0 100% /media/CentOS_5.9_Final |
# cd /media/CentOS_5.5_Final/CentOS
# ls php*
# rpm -qip php-5.1.6-27.el5.i386.rpm (설치하고자 하는 패키지 확인)
# rpm -Uvh php-5.1.6-27.el5.i386.rpm (설치)
# rpm -qi php-5.1.6-27.el5.i386.rpm (설치된 패키지 확인)
# rpm -e php (삭제)
# rpm -qa | grep php (확인)
인터넷상에서 패키지 다운로드 하여 설치
http://rpm.pbone.net 사이트에서 패키지 다운
# cd /test
# wget ftp://ftp.pbone.net/mirror/ftp.centos.org/5.10/os/i386/CentOS/php-5.1.6-39.el5_9.i386.rpm
(정리) 패키지 관리
rpm CMD(RedHat Packages Manager)
# rpm -ivh [--nodeps] pkg.rpm
# rpm -Uvh [--nodeps] pkg.rpm
# rpm -Fvh [--nodeps] pkg.rpm
# rpm -qa | grep pkg
# rpm -q pkg
# rpm -qf /etc/passwd
# rpm -ql pkg
# rpm -qi pkg
# rpm -qi -p pkg.rpm
# rpm -e [--nodeps] pkg
(2)YUM 패키지 관리
rpm 명령어를 통해 패키지 설치의 어려움 -> 패키지 의존성 관계
-> (ㄱ) 패키지의 의존성 관계를 해결하고 (ㄴ)효율적인 패키지 관리를 위해
-> yum CMD
기존의 rpm의 경우 wget을 이용하여 rpm패키지가 저장된 서버의 주소를 모두 입력하고 rpm -i옵션을 이용해 패키지
를 설치해야만 했다. 그러나 yum은 rpm패키지가 저장된 서버에 자동으로 접속하고 설치하고자 하는 패키지를 다운
로드하여 설치한다. 또한 의존성을 가지는 다른 rpm패키지까지 알아서 다운로드하여 설치하며 rpm 패키지들을 안전
하게 설치, 삭제 및 업데이트를 한다. yum은 rpm에 비해 이미 설치되었거나 혹은 저장소에 설치 가능한 패키지에
관한 정보를 효율적이고 쉽게 검색 할 수 있고, 일일이 수동 업그레이드를 할 필요가 없으므로 많은 시스템을 관리
할 때 더더욱 유용하게 쓰인다.
(명령어 형식)
# yum [options] COMMAND
(명령어 사용예)
# yum list (# yum list all)
# yum list installed
# yum list available
# yum -y update
# yum -y update php
# yum -y install php
# yum -y localinstall php.rpm (인터넷상 에서 받은 파일 설치)
# yum (erase|remove) php (지울때)
List of Commands:
check-update Check for available package updates clean Remove cached data deplist List a package's dependencies downgrade downgrade a package erase Remove a package or packages from your system groupinfo Display details about a package group groupinstall Install the packages in a group on your system grouplist List available package groups groupremove Remove the packages in a group from your system help Display a helpful usage message info Display details about a package or group of packages info-security Returns security data for the packages listed, that affects your system install Install a package or packages on your system list List a package or groups of packages list-security Returns security data for the packages listed, that affects your system localinstall Install a local RPM makecache Generate the metadata cache provides Find what package provides the given value reinstall reinstall a package repolist Display the configured software repositories resolvedep Determine which package provides the given dependency search Search package details for the given string shell Run an interactive yum shell update Update a package or packages on your system update-minimal Works like update, but goes to the 'newest' package match which fixes a problem that affects your system upgrade Update packages taking obsoletes into account
options: -h, --help show this help message and exit -t, --tolerant be tolerant of errors -C run entirely from cache, don't update cache -c [config file] config file location -R [minutes] maximum command wait time -d [debug level] debugging output level --showduplicates show duplicates, in repos, in list/search commands -e [error level] error output level -q, --quiet quiet operation -v, --verbose verbose operation -y answer yes for all questions --version show Yum version and exit --installroot=[path] set install root --enablerepo=[repo] enable one or more repositories (wildcards allowed) --disablerepo=[repo] disable one or more repositories (wildcards allowed) -x [package], --exclude=[package] exclude package(s) by name or glob --disableexcludes=[repo] disable exclude from main, for a repo or for everything --obsoletes enable obsoletes processing during updates --noplugins disable Yum plugins --nogpgcheck disable gpg signature checking --disableplugin=[plugin] disable plugins by name --enableplugin=[plugin] enable plugins by name --skip-broken skip packages with depsolving problems --color=COLOR control whether color is used --security Include security relevant packages --cve=CVE Include packages needed to fix the given CVE --bz=BZ Include packages needed to fix the given BZ --advisory=ADVISORY Include packages needed to fix the given advisory |
[EX1] YUM 패키지 실습
① yum 패키지 설치 확인
# rpm -qa | grep yum
yum-3.2.22-40.el5.centos yum-fastestmirror-1.1.16-21.el5.centos yum-updatesd-0.9-5.el5 yum-metadata-parser-1.1.2-4.el5 yum-security-1.1.16-21.el5.centos |
-> yum 패키지가 기본적으로 설치 되어 있다.
-> 만약 설치가 되어 있지 않다면 CD안에서 설치하면 된다.
② 설치된 패키지와 업데이트 가능한 패키지 확인
# yum list ( # yum list | tee -a yum.log 2>&1)
③ 설치된 패키지 목록 확인
# yum list installed
# yum list all (# yum list)
# yum list installed [패키지이름]
# yum list available [패키지이름]
# yum list updates [패키지이름]
# yum list extras [패키지이름]
# yum list recent
④ 가장 최근에 추가된 패키지 목록 확인
yum site에서 가장 최근에 업데이트된 목록을 확인한다.
# yum list recent
⑤ 업데이트 가능한 패키지 목록 확인
yum site와 현재 시스템에 설치된 패키지를 비교하여 현재 시스템에 업데이트 가능한 목록을 보여준다.
# yum check-update
⑥ 패키지 설치 및 확인
(가정) php 패키지가 설치 되어 있지 않다고 가정한다.
# rpm -qa | grep php
# rpm -e php
# yum -y install php (-y : yes)
⑦ php 패키지 삭제
# yum remove php (# yum [-y] erase php)
⑧ 패키지의 자세한 정보 확인
# yum info bash /* 현재 시스템 + yum site 패키지 정보 */
# yum info installed bash /* 현재 시스템에 설치된 패키지 정보만 */
⑨ 패키지 검색
# yum search php
⑩ php 패키지 다시 설치
# yum -y install php
# rpm -qa | grep php (# yum list installed | grep php)
[EX2] 로컬 CD 안에 들어 있는 패키지 설치
(전제 조건) CD는 마운트 되어 있는 것으로 한다.
(전제 조건) emacs 패키지는 설치 되어 있지 않은것으로 한다.
# yum remove emacs
-> 삭제되는 패키지 목록을 확인한다.(emacs, emacsspeak)
# rpm -qa | grep emacs
# df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda1 26G 3.2G 22G 14% / /dev/sda8 487M 11M 451M 3% /data1 /dev/sda7 487M 11M 451M 3% /data2 /dev/sda6 487M 11M 451M 3% /data3 /dev/sda5 487M 11M 451M 3% /data4 /dev/sda3 487M 12M 450M 3% /home tmpfs 1.5G 0 1.5G 0% /dev/shm /dev/hdc 3.9G 3.9G 0 100% /media/CentOS_5.9_Final |
■ 리눅스에서 많이 사용되는 편집기 종류
- vim(vi), emacs, pico, nano
# cd /media/CentOS_5.9_Final/CentOS
# ls emacs*
emacs-21.4-24.el5.i386.rpm emacs-el-21.4-24.el5.i386.rpm emacs-nox-21.4-24.el5.i386.rpm emacs-common-21.4-24.el5.i386.rpm emacs-leim-21.4-24.el5.i386.rpm emacspeak-23.0-3.el5.noarch.rpm |
# yum -y localinstall emacs-21.4-24.el5.i386.rpm
-> 설치되지 않는다면 이것은 CD 안에 들어 있는 패키지가 현재 시스템에 설치된 패키지의 버전보다 낮기 때문이
다.
-> 따라서 한번 업데이트가 된 이후에는 반드시 yum site 사용해서 업데이트하거나 혹은 높은 버전의 CD를 가지고
업데이트를 해야 한다.
# yum -y localinstall emacspeak-23.0-3.el5.noarch.rpm
-> 출력 내용 생략
# yum list installed | grep emacs (# rpm -qa | grep emacs)
[EX3] CD로 임시적인 yum site 구성
개인적인 만들어서 배포할 때도 비슷한 설정을 사용한다.
# yum repolist
# yum repolist all
# yum repolist enabled (# yum repolist)
# yum repolist disabled
# yum repolist
# yum repolist all
# cd /etc/yum.repos.d
# vi iso.repo
[MyISO] name=CentOS-$releasever - MyISO baseurl=file:///media/CentOS_5.5_Final /* yum site : Local CD */ enabled=1 /* (OFF)enabled=0, (ON)enabled=1 */ gpgcheck=1 /* (OFF)gpcheck=0, (ON)gpgcheck=1 */ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 /* GPG Key 위치 */ |
# yum list
# yum repolist all (# yum repolist enabled, # yum repolist)
# yum -y remove emacs
-> 패키지 삭제
# yum -y install emacs
Loaded plugins: fastestmirror, security Repository 'MyISO' is missing name in configuration, using id Loading mirror speeds from cached hostfile * base: ftp.riken.jp * extras: www.ftp.ne.jp * updates: ftp.jaist.ac.jp Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package emacs.i386 0:21.4-24.el5 set to be updated --> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================== Package Arch Version Repository Size ===================================================================================================== Installing: emacs i386 21.4-24.el5 MyISO 1.6 M
Transaction Summary ===================================================================================================== Install 1 Package(s) Upgrade 0 Package(s)
Total download size: 1.6 M Downloading Packages: Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : emacs 1/1
Installed: emacs.i386 0:21.4-24.el5
Complete! |
# yum -y install emacspeak
Loaded plugins: fastestmirror, security Repository 'MyISO' is missing name in configuration, using id Loading mirror speeds from cached hostfile * base: ftp.jaist.ac.jp * extras: www.ftp.ne.jp * updates: ftp.jaist.ac.jp Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package emacspeak.noarch 0:23.0-3.el5 set to be updated --> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================== Package Arch Version Repository Size ===================================================================================================== Installing: emacspeak noarch 23.0-3.el5 MyISO 2.0 M
Transaction Summary ===================================================================================================== Install 1 Package(s) Upgrade 0 Package(s)
Total download size: 2.0 M Downloading Packages: Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : emacspeak 1/1
Installed: emacspeak.noarch 0:23.0-3.el5
Complete! |
(복원) yum 삭제
# cd /etc/yum.repos.d
# rm -f iso.repo
# yum list
or
# cd /etc/yum.repos.d
# vi iso.repo
.....
enabled=0
# yum list
운영체제 전체 업데이트
(GUI) Application > System Tools > Software Updater (# system-config-packages)
(TUI) # yum check-update
# yum -y update
(목적) CentOS 5.9 -> 최신버전(EX: CentOS 5.11)
# uname -a (# uname -sr)
# cat /etc/redhat-release
# yum check-update (# yum check-update | grep kernel)
# yum -y update
-> (주의) 설치가 끝나고 나면 기본적으로 재부팅 과정을 거쳐야 한다.
-> 이유는 운영체제 전체 업데이트에는 보통 커널 업데이트가 같이 들어 있다.
# reboot
-> 커널이 업데이트가 되었고, 새로 설치된 커널로 로딩하기 위해서 재부팅 과정을 수행한다.
-> 커널 업데이트나 혹은 드라이버 업데이트가 있는 경우에는 reboot 권장한다.
-> 따라서, 반드시 yum -y update 명령어를 수행하기 전에 yum check-update 사용하여 reboot 해야하는 패키지가
존재하는지 점검한다.
# uname -a
# cat /etc/redhat-release
자동 업데이트 관리(업데이트 알람 기능 OFF)
(부팅) # chkconfig yum-updatesd (on|off)
(현재) # service yum-updatesd stop
# chkconfig --list | grep update (# chkconfig --list | grep yum)
yum-updatesd 0:off 1:off 2:on 3:on 4:on 5:on 6:off |
# chkconfig yum-updatesd off
# chkconfig --list | grep update
yum-updatesd 0:off 1:off 2:off 3:off 4:off 5:off 6:off |
# service yum-updatesd stop
#
(3)소스 패키지 관리
[EX1] Apache 2.X 소스 컴파일(Source Comile)
다음은 Apache 2.X 소스를 다운로드 하여 설치하는 예이다.
■ Apache 소스 프로그램 설치 과정
(ㄱ) 소스 파일 다운로드
(ㄴ) 압축 해제
(ㄷ) configure && make && make install
(ㄹ) 웹서비스 시작 및 확인
① 파일 다운로드 ② 압축해제 httpd-2.2.14.tar.gz ----> /test/httpd-2.2.14.tar.gz ----> /usr/local/src/httpd-2.2.14 | | ③ configure & make & make install V (웹서비스 시작) httpd <---- /usr/local/apache2 ④ apachectl start |
프로그램 다운로드 디렉토리 : /test
프로그램 소스 디렉토리 : /usr/local/src
프로그램 설치 디렉토리 : /usr/local/apache2
① Apache 2.X 소스 파일 다운로드
■ Apache 소스 프로그램 설치 과정
(ㄱ) 소스 파일 다운로드
(ㄴ) 압축 해제
(ㄷ) configure && make && make install
(ㄹ) 웹서비스 시작 및 확인
"http://httpd.apache.org/download.cgi#apache22" 사이트에서 최신 버전의 프로그램을 확인하고 URL을 복사한다.
# cd /test
# wget http://apache.tt.co.kr//httpd/httpd-2.2.26.tar.gz
--2014-01-20 18:04:46-- http://apache.tt.co.kr//httpd/httpd-2.2.26.tar.gz Resolving apache.tt.co.kr... 121.125.79.185 Connecting to apache.tt.co.kr|121.125.79.185|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 7212848 (6.9M) [application/x-gzip] Saving to: `httpd-2.2.26.tar.gz'
100%[==================================================>] 7,212,848 127K/s in 81s
2014-01-20 18:06:08 (86.6 KB/s) - `httpd-2.2.26.tar.gz' saved [7212848/7212848] |
-> 만약 버전이 없어서 에러가 생기는 경우에는 apache 사이트에 직접 들어가서 최신 버전의 URL를 다시 복사하여
사용해야 한다.
② 컴파일러 설치 확인
소스코드를 컴파일 하기 위해서는 gcc컴파일러나 make 컴파일러가 설치되어 있어야 한다. 컴파일러 설치 여부를 확
인하고 설치 되어 있지 않은 경우 yum을 이용하여 설치한다.
# rpm -q gcc make
gcc-4.1.2-54.el5 make-3.81-3.el5 |
(설치되어 있지 않으면 설치)
# yum -y install gcc* make*
③ 아파치 소스코드 압축/아카이빙 해제 및 확인
프로그램 소스 코드는 RPM 소스 패키지 형태로 제공되는 경우도 있으나, 대부분 tar 아카이브 파일로 배포된다. tar 소스 파일을 구한 앞서 배운대로 tar 명령으로 해당 파일의 압축과 아카이빙을 풀때 사용한다. 소스의 효울적이고 체계적인 관리를 위해서 tar 파일의 압축을 풀 때 -C 옵션으로 소스가 풀어질 경로를 지정해 놓으면 나중에도 소스를 재 컴파일 해야 한다든지 패치를 적용해야 할 때 소스가 어디에 있는지 우왕좌왕하지 않고 쉽게 찾을 수 있다.
■ Apache 소스 프로그램 설치 과정
(ㄱ) 소스 파일 다운로드
(ㄴ) 압축 해제
(ㄷ) configure && make && make install
(ㄹ) 웹서비스 시작 및 확인
# cd /test
# tar xvzf httpd-2.2.26.tar.gz -C /usr/local/src /* -C : change directory */
..... (중략) ..... httpd-2.2.26/build/rpm/httpd.spec.in httpd-2.2.26/build/pkg/buildpkg.sh httpd-2.2.26/build/pkg/pkginfo.in httpd-2.2.26/build/pkg/README httpd-2.2.26/build/aix/aixinfo httpd-2.2.26/build/aix/buildaix.ksh httpd-2.2.26/build/aix/mkinstallp.ksh httpd-2.2.26/build/aix/README |
# cd /usr/local/src
# ls -l
drwxr-xr-x 11 user01 games 4.0K Nov 14 01:51 httpd-2.2.26/ |
④ INSTALL 문서 확인
소스 코드에 어떤 옵션을 부여해서 어떻게 컴파일해야 하는지 컴파일 방법에 대한 자세한 정보가 있는 설치 문서인
README 또는 INSTALL 파일이 소스 파일내에 포함되어 있으므로, 컴파일하기 전에 이러한 문서를 잘 읽어 보고 컴파
일하는 것이 좋다. 소스 코드의 컴파일 순서는 대부분 소스의 경우에는 동일하지만, 약간의 차이가 있는 경우도 있
으므로, 항상 설치 문서를 참고하는 습관을 갖는 것이 현명하다.
# cd httpd-2.2.26
# ls
ABOUT_APACHE LAYOUT README-win32.txt config.layout httpd.mak os/ Apache.dsw LICENSE README.platforms configure* httpd.spec server/ BuildAll.dsp Makefile.in ROADMAP configure.in include/ srclib/ BuildBin.dsp Makefile.win VERSIONING docs/ libhttpd.dep support/ CHANGES NOTICE acinclude.m4 emacs-style libhttpd.dsp test/ INSTALL NWGNUmakefile build/ httpd.dep libhttpd.mak InstallBin.dsp README buildconf* httpd.dsp modules/ |
# cat INSTALL | more
APACHE INSTALLATION OVERVIEW
Quick Start - Unix ------------------
For complete installation documentation, see [ht]docs/manual/install.html or http://httpd.apache.org/docs/2.2/install.html
$ ./configure --prefix=PREFIX /* ./configure --prefix=/usr/local/apache2 */ $ make $ make install $ PREFIX/bin/apachectl start
NOTES: * Replace PREFIX with the filesystem path under which Apache should be installed. A typical installation might use "/usr/local/apache2" for PREFIX (without the quotes). ..... (중략) ..... |
⑤ 컴파일 환경 설정
대부분의 소스에 있어서 소스 코드의 컴파일 순서는 configure, make, make install로 진행된다. 그 첫 번째 과정
인 configure 작업은 컴파일을 하는데 있어서 컴파일러 존재 여부 확인, 컴파일 환경 옵션 지정, 컴파일에 필요한 라이브러리 검색 등 컴파일 환경을 준비하는 과정으로, configure 명령에 의해서 Makefile 파일이 준비되는 과정이다. Makefile 파일은 make 명령으로 컴파일될 때 이용되는 파일로 이 파일이 생성되지 않으면 컴파일될 수 없으며,컴파일 환경 설정 작업에 잘못 되었거나 수정해야 할 경우 configure 명령을 재실행하지 않고서도 이 파일의 설정값을 에디터로 수정하여 할 수 있다.
소스 컴파일 시 configure 명령에 가장 많이 사용되는 옵션중의 하나가 --prefix= 옵션이다. 이 옵션을 이용하면
소스 컴파일 후 컴파일된 프로그램이 설치될 경로를 지정해 줄 수 있고, 컴파일된 프로그램을 제거할 때 --prefix=
옵션으로 명시한 디렉토리를 통째로 삭제해 줌으로써 쉽게 프로그램을 제거할 수 있는 이점이 있다.
■ Apache 소스 프로그램 설치 과정
(ㄱ) 소스 파일 다운로드
(ㄴ) 압축 해제
(ㄷ) configure && make && make install
(ㄹ) 웹서비스 시작 및 확인
# ./configure --help
`configure' configures this package to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for `--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or `..'] ..... (중략) ..... |
-> configure 명령어의 사용법을 확인 한다.
# ./configure --prefix=/usr/local/apache2
..... (중략) ..... config.status: creating support/apachectl config.status: creating support/dbmmanage config.status: creating support/envvars-std config.status: creating support/log_server_status config.status: creating support/logresolve.pl config.status: creating support/phf_abuse_log.cgi config.status: creating support/split-logfile config.status: creating build/rules.mk config.status: creating build/pkg/pkginfo config.status: creating build/config_vars.sh config.status: creating include/ap_config_auto.h config.status: executing default commands |
-> configure 과정이 잘 수행 되었는지 확인하기 위해서 $? 변수를 사용할 수 있다.
# ./configure --prefix=/usr/local/apache2
......
# echo $?
0
-> configure 명령어가 수행이 되면 출력되는 내용을 로그 파일로 저장하기 위해서는 리다이렉션 기호를 사용할 수
있다.
# ./configure --prefix=/usr/local/apache2 > apache.log 2>&1
# cat apache.log
⑥ 컴파일(make)
configure로 컴파일 환경을 설정한 후 make 명령으로 소스를 컴파일한다. 다음은 아파치 소스를 make로 컴파일하는
일부 과정이다.
# make
..... (중략) ..... od_negotiation.la modules/mappers/libmod_dir.la modules/mappers/libmod_actions.la modules/mappers/libmod_userdir.la modules/mappers/libmod_alias.la modules/mappers/libmod_so.la server/mpm/prefork/libprefork.la os/unix/libos.la -lm /usr/local/src/httpd-2.2.26/srclib/pcre/libpcre.la /usr/local/src/httpd-2.2.26/srclib/apr-util/libaprutil-1.la /usr/local/src/httpd-2.2.26/srclib/apr-util/xml/expat/libexpat.la /usr/local/src/httpd-2.2.26/srclib/apr/libapr-1.la -lrt -lcrypt -lpthread -ldl make[1]: Leaving directory `/usr/local/src/httpd-2.2.26' |
⑦ 컴파일된 프로그램 설치(make install)
make 명령으로 컴파일된 소스 프로그램은 make install 명령에 의해서 --prefix= 옵션으로 명시된 경로로 설치된다. 보통 make와 make install 명령을 다음과 같이 한 번에 내릴 수 있다.
# make install
..... (중략) ..... mkdir /usr/local/apache2/cgi-bin Installing header files Installing build system files Installing man pages and online manual mkdir /usr/local/apache2/man mkdir /usr/local/apache2/man/man1 mkdir /usr/local/apache2/man/man8 mkdir /usr/local/apache2/manual make[1]: Leaving directory `/usr/local/src/httpd-2.2.26' |
[참고] configure && make && make install
# ./configure --prefix=/usr/local/apache2 && make && make install
⑧ 웹서비스 테스트
■ Apache 소스 프로그램 설치 과정
(ㄱ) 소스 파일 다운로드
(ㄴ) 압축 해제
(ㄷ) configure && make && make install
(ㄹ) 웹서비스 시작 및 확인
# cd /usr/local/apache2
# ls
bin/ cgi-bin/ error/ icons/ lib/ man/ modules/ build/ conf/ htdocs/ include/ logs/ manual/ |
/usr/local/apache2 ----+---- bin (명령어, 데몬)
+---- conf (설정 파일)
+---- htdocs (소스 코드)
# cd bin
# ./apachectl start
# pgrep -lf httpd
21404 /usr/local/apache2/bin/httpd -k start 21405 /usr/local/apache2/bin/httpd -k start 21406 /usr/local/apache2/bin/httpd -k start 21407 /usr/local/apache2/bin/httpd -k start 21408 /usr/local/apache2/bin/httpd -k start 21409 /usr/local/apache2/bin/httpd -k start |
-> 떠 있는 데몬 확인
# cat /usr/local/apache2/htdocs/index.html
<html><body><h1>It works!</h1></body></html> |
# firefox & (# firefox http://127.0.0.1)
-> http://localhost (http://127.0.0.1)
-> 자신의 서버에 웹서비스 요청을 하여 메인 페이지가 보이는지 확인 한다.
⑨ 컴파일한 프로그램 제거하기
# cd /usr/local/apache2/bin
# ./apachectl stop
# pgrep –lf httpd
#
# cd
# rm -rf /usr/local/apache2
소스형태로 설치한 프로그램 apache2는 rpm -qa | grep apache 확인이 가능한가?
rm -rf /usr/local/apache2 디렉토리 삭제후 다시만들고 싶다면?
소스 디렉토리 /usr/local/src/에서 configure/make/make install을 다시 실행하고 싶다면?
-> 소스 형태로 소프트웨어를 관리하는 것이 어렵다.
->왜 실무에서는 소스형태로 소프트웨어를 설치하는가
(정리) 패키지 관리
rpm CMD(RedHat Packages Manager)
# rpm -ivh [--nodeps] pkg.rpm
# rpm -Uvh [--nodeps] pkg.rpm
# rpm -Fvh [--nodeps] pkg.rpm
# rpm -qa | grep pkg
# rpm -q pkg
# rpm -qf /etc/passwd
# rpm -ql pkg
# rpm –qi pkg
# rpm –qi -p pkg.rpm
# rpm -e [--nodeps] pkg
yum CMD(Yellowdog Update Manager)
# yum install pkg (# yum -y install pkg)
# yum update pkg
# yum -y update
# yum list (# yum list installed)
# yum search pkg
# yum info pkg
# yum remove pkg (# yum erase pkg)
[참고] kernel upgrad
# rpm –ivh kernel.rpm
# yum install kernel.rpm
Source Compile(EX: pkg.tar.gz)
# tar xvzf pkg.tar.gz
# cd pkg
# ./configure --prefix=/usr/local/pkg (# ./configure --help)
# make
# make install
[참고] APM(Apache + PHP + MySQL) 설치
ATJO(Apache + Tomcat + JAVA(JDK/SDK) + Oracle) 설치
4 |
Create an RPM |
소스코드로 설치한 프로그램 --- 패키지화 ---> source.rpm
(ex : /usr/local/apache2) --------------------->(ex : apache2.rpm)
source.rpm 파일을 쉽게 제공하기 위한 YUM repository 구성
패키지/배포파일의 무결성을 점검하는 대표적인 방법
GPG Key 사용하는 방법
Hash(EX: md5cksum) 알고리즘을 사용하는 방법
# md5sum /bin/ls
■ rpm 패키지 생성 절차
(ㄱ) 소스 프로그램 개발
(ㄴ) 소스.tar.gz 파일 생성
(ㄷ) SPEC 파일 생성
(ㄹ) rpm build
(ㅁ) GPG Key 생성
(ㅂ) 패키지 sign
(ㅅ) Yum Repository 구성
(ㅇ) 테스트
① 간단한 프로그램 개발
rpm 패키지 생성 절차
(ㄱ) 소스 프로그램 개발
(ㄴ) 소스.tar.gz 파일 생성
(ㄷ) SPEC 파일 생성
(ㄹ) rpm build
(ㅁ) GPG Key 생성
(ㅂ) 패키지 sign
(ㅅ) Yum Repository 구성
(ㅇ) 테스트
# cd /test && rm -rf /test/*
# mkdir -p hello-1.0
# vi hello-1.0/hello.sh
#!/bin/bash
echo 'This is a test.' echo
echo ' ________________________' echo '/ \' echo '| |' echo '| 야 !! 공부좀 해라!!! |' echo '| |' echo '\________________________/' echo ' \' echo ' \' echo ' (__)' echo ' (oo)______' echo ' (__) )\' echo ' ||---|| *' echo ' || ||' echo
|
② tar.gz 파일 생성
rpm 패키지 생성 절차
(ㄱ) 소스 프로그램 개발
(ㄴ) 소스.tar.gz 파일 생성
(ㄷ) SPEC 파일 생성
(ㄹ) rpm build
(ㅁ) GPG Key 생성
(ㅂ) 패키지 sign
(ㅅ) Yum Repository 구성
(ㅇ) 테스트
(필요하면 명령어 수행)
# ls /usr/src/redhat
ls: /usr/src/redhat: No such file or directory
# yum -y install rpm-build
# ls /usr/src/redhat
BUILD/ RPMS/ SOURCES/ SPECS/ SRPMS/ |
# tar cvzf /usr/src/redhat/SOURCES/hello-1.0-1.tar.gz hello-1.0
# tar tvzf /usr/src/redhat/SOURCES/hello-1.0-1.tar.gz
drwxr-xr-x root/root 0 2014-01-23 16:16:24 hello-1.0/ -rwxr-xr-x root/root 394 2014-01-23 16:16:24 hello-1.0/hello.sh |
③ SPEC 파일 생성
rpm 패키지 생성 절차
(ㄱ) 소스 프로그램 개발
(ㄴ) 소스.tar.gz 파일 생성
(ㄷ) SPEC 파일 생성
(ㄹ) rpm build
(ㅁ) GPG Key 생성
(ㅂ) 패키지 sign
(ㅅ) Yum Repository 구성
(ㅇ) 테스트
# vi /usr/src/redhat/SPECS/hello.spec
%define name hello %define version 1.0 %define release 1
Name: hello Version: 1.0 Release: 1 Summary: Hello Group: CentOS License: GPL URL: http://www.example.com Source0: %{name}-%{version}-%{release}.tar.gz BuildRoot: /var/tmp/%{name}-buildroot
%description Installs /root/bin/hello.sh
%prep %setup -q -n %{name}-%{version}
%build
%install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/root/bin install -m 755 hello.sh $RPM_BUILD_ROOT/root/bin/hello.sh
%clean rm -rf $RPM_BUILD_ROOT
%files %defattr(-,root,root,-) /root/bin/hello.sh
%changelog |
④ rpm build
rpm 패키지 생성 절차
(ㄱ) 소스 프로그램 개발
(ㄴ) 소스.tar.gz 파일 생성
(ㄷ) SPEC 파일 생성
(ㄹ) rpm build
(ㅁ) GPG Key 생성
(ㅂ) 패키지 sign
(ㅅ) Yum Repository 구성
(ㅇ) 테스트
# yum -y install rpm-build
-> rpm-build 패키지 설치
# rpmbuild -ba /usr/src/redhat/SPECS/hello.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.38857 + umask 022 + cd /usr/src/redhat/BUILD + cd /usr/src/redhat/BUILD + rm -rf hello-1.0 + /bin/gzip -dc /usr/src/redhat/SOURCES/hello-1.0-1.tar.gz + tar -xf - + STATUS=0 + '[' 0 -ne 0 ']' + cd hello-1.0 ++ /usr/bin/id -u + '[' 0 = 0 ']' + /bin/chown -Rhf root . ++ /usr/bin/id -u + '[' 0 = 0 ']' + /bin/chgrp -Rhf root . + /bin/chmod -Rf a+rX,u+w,g-w,o-w . + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.38857 + umask 022 + cd /usr/src/redhat/BUILD + cd hello-1.0 + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.38857 + umask 022 + cd /usr/src/redhat/BUILD + cd hello-1.0 + rm -rf /var/tmp/hello-buildroot + mkdir -p /var/tmp/hello-buildroot/root/bin + install -m 755 hello.sh /var/tmp/hello-buildroot/root/bin/hello.sh + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip + /usr/lib/rpm/brp-strip-static-archive + /usr/lib/rpm/brp-strip-comment-note Processing files: hello-1.0-1 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: /bin/bash Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/hello-buildroot Wrote: /usr/src/redhat/SRPMS/hello-1.0-1.src.rpm Wrote: /usr/src/redhat/RPMS/i386/hello-1.0-1.i386.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.38857 + umask 022 + cd /usr/src/redhat/BUILD + cd hello-1.0 + rm -rf /var/tmp/hello-buildroot + exit 0 |
# find /usr/src/redhat
/usr/src/redhat /usr/src/redhat/RPMS /usr/src/redhat/RPMS/geode /usr/src/redhat/RPMS/noarch /usr/src/redhat/RPMS/i386 /usr/src/redhat/RPMS/i386/hello-1.0-1.i386.rpm /usr/src/redhat/RPMS/i686 /usr/src/redhat/RPMS/athlon /usr/src/redhat/RPMS/i486 /usr/src/redhat/RPMS/i586 /usr/src/redhat/SOURCES /usr/src/redhat/SOURCES/hello-1.0-1.tar.gz /usr/src/redhat/SPECS /usr/src/redhat/SPECS/hello.spec /usr/src/redhat/SRPMS /usr/src/redhat/SRPMS/hello-1.0-1.src.rpm /usr/src/redhat/BUILD /usr/src/redhat/BUILD/hello-1.0 /usr/src/redhat/BUILD/hello-1.0/hello.sh |
⑤ 생성된 패키지 설치 및 삭제(테스트용)
# cd /usr/src/redhat/RPMS/i386
# rpm -Uvh hello-1.0-1.i386.rpm
Preparing... ########################################### [100%] 1:hello ########################################### [100%] |
# rpm -e hello
# rpm -qa | grep hello
#
⑥ GPG Key 생성과 패키지 sign
rpm 패키지 생성 절차
(ㄱ) 소스 프로그램 개발
(ㄴ) 소스.tar.gz 파일 생성
(ㄷ) SPEC 파일 생성
(ㄹ) rpm build
(ㅁ) GPG Key 생성
(ㅂ) 패키지 sign
(ㅅ) Yum Repository 구성
(ㅇ) 테스트
# cd
# gpg --gen-key
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details.
gpg: directory `/root/.gnupg' created gpg: new configuration file `/root/.gnupg/gpg.conf' created gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run gpg: keyring `/root/.gnupg/secring.gpg' created gpg: keyring `/root/.gnupg/pubring.gpg' created Please select what kind of key you want: (1) DSA and Elgamal (default) (2) DSA (sign only) (5) RSA (sign only) Your selection? <ENTER> DSA keypair will have 1024 bits. ELG-E keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) <ENTER> Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) <ENTER> Key does not expire at all Is this correct? (y/N) y
You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Real name: Baik, SeoungChan Email address: jang4sc@hanmail.net Comment: <ENTER> You selected this USER-ID: "Baik, SeoungChan <jang4sc@hanmail.net>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key.
Passphrase: testing123 Repeat passphrase: testing123 We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. ++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++.+++++++++++++++.+++++.+++++..++++++++++..>+++++.....................................................+++++
Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 283 more bytes) We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. .+++++++++++++++++++++++++.++++++++++.+++++.++++++++++......+++++++++++++++..+++++++++++++++..+++++.+++++++++++++++.+++++++++++++++++++++++++.+++++.++++++++++.+++++>.+++++.+++++...>+++++..................................................................................+++++^^^ gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key ACD89B3E marked as ultimately trusted public and secret key created and signed.
gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub 1024D/ACD89B3E 2014-01-23 Key fingerprint = 98A1 E2A6 AE47 FE97 BFE8 6DC4 BCAB 0ADE ACD8 9B3E uid Baik, SeoungChan <jang4sc@hanmail.net> sub 2048g/CA2DE316 2014-01-23 |
-> Key ID 확인: ACD89B3E
⑦ ~/RPM-GPG-KEY-test 파일 생성
rpm 패키지 생성 절차
(ㄱ) 소스 프로그램 개발
(ㄴ) 소스.tar.gz 파일 생성
(ㄷ) SPEC 파일 생성
(ㄹ) rpm build
(ㅁ) GPG Key 생성
(ㅂ) 패키지 sign
(ㅅ) Yum Repository 구성
(ㅇ) 테스트
# gpg -a -o ~/RPM-GPG-KEY-test --export ACD89B3E
# ls RPM*
RPM-GPG-KEY-test |
# cat RPM-GPG-KEY-test
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.5 (GNU/Linux)
mQGiBFLgyxARBACCnrOlR6uregf1SuoqqHxtBXGVq5QKyJVBsb4cXufe0ur5jzk8 Bmc9aKFMnfrp22GZ+CjfBr0BBYCB2A7ANsKtdwNzB2PHl7C9BNQafS8xrpyTo/2C oc0j21uLJz5TOpcaQ/1qS/jpUNumvDuoD9RXO6fgPhBNaj808cncp6uQ8wCg3gxc J4bqvc+QjdTXbrcIuMwDIT0D/A++D26YIp0TpzVDmv7Di2GTc4mn6fpKKSLu7vVZ 3IDJuN2B9CL0DJz02S+IR5kF+yf5o6NnUcM9b65nw15MK2d37NE6mOpoUUHao80f ShAvtQLJl5bVcJWeCz9ORfQqWb36SWLxAJq7TPDsS6l1DUkE3kONQgSZnAzpP4KK ZS1EA/0aSpKk+/pElSG5muip2xMcflk6ihuGgivcxYlr/E/v2wsH5QELtNt7q4wj K2ji/QuZabdEi5V77qUHbUvLo2d4By0mB6EPAV6Nk3V9iV7SdKYKb7f01ybuW82s bzMnfaK2bOmN/7A9LCKk5eQ5urN9Jr8q159kOHaCroTQrelC77QmQmFpaywgU2Vv dW5nQ2hhbiA8amFuZzRzY0BoYW5tYWlsLm5ldD6IYAQTEQIAIAUCUuDLEAIbAwYL CQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJELyrCt6s2Js+kwcAn3K/hdtIVFLpWwyX /65RsA/hWf/tAJ9oA1Sp3M/QSrGwPEwiadjDFr2io7kCDQRS4MsUEAgA5XtEwdw7 H3+yxxObgv+giZWd2oNxjfmrWqecd2N6+dsgR3oc1kbYdv84jU6icozZxz7XHbAR 1Hxj+f31H56k6W8ZXVx0W0qMZSCOcuXY+dmQJV9qcJfzdDc1HahTUL32C6Vz0Emh L7A2HSgj8apoSkER9YBY9jUAseE9FK7YalhPfIUW79CcY9zSUvmGBiXvpume7+M9 xtwDcaxAA9J46KWDUpuzkCl6n/ru5LbqSv2/qNBIep+eut8WWmEnP5MzFigK0gjs cP5EnUceNFTmKnw9hwG3pzprJPmd1iu/VbLa3XySmQlrSyWjziZcdquUqq0KxJdC c7QhQ/kYHS3g9wADBQf/X6il933Tu4s7qKqxz+pIkAcIAkCTvBfePUWqmZ9Rw+S/ amWayHU18rXfJ0+Wo3PK6Hs4FjO/tZamTJokfrleIk9weOLOp6wZVMA0TTcrTpi6 FTp36vWUVveysjuHQa43RpfPqgJNQdgSFUVfm4wMxBFVDS8itx5RWxqmvrPJLrur egm1EiXNDK+b8Tv1vxHcgiPfcls8Y6gtWvPM7lbH5KY4ORj9oaHB+DhFRPgR6U9l gFGVQuI6UP4G+3MSNoMEJIuVq0R1r9unytL+ojdyfLisgC2Xja3Z6lZZ67I0RiLr ZpFuAcROxgtcNsCHmle0DI3Bv9pBCJ8nudeSHahQsohJBBgRAgAJBQJS4MsUAhsM AAoJELyrCt6s2Js+oLoAoLVRgzLFoBmYiZXKIexIHhbrlRRIAKCaOHPRd4+88L1J WVbsdJED3F7cAQ== =lq3h -----END PGP PUBLIC KEY BLOCK----- |
⑧ ~/.rpmmacros 파일 생성
# vi ~/.rpmmacros
%_gpg_name ACD89B3E |
⑨ 패키지 sign
# rpm --resign /usr/src/redhat/RPMS/i386/hello-1.0-1.i386.rpm
Enter pass phrase: testing123 Pass phrase is good. /usr/src/redhat/RPMS/i386/hello-1.0-1.i386.rpm: gpg: WARNING: standard input reopened gpg: WARNING: standard input reopened |
- $HOME/RPM-GPG-KEY-test
- hello-1.0-1.i386.rpm
⑩ 배포 서버 구성(YUM Repository)
rpm 패키지 생성 절차
(ㄱ) 소스 프로그램 개발
(ㄴ) 소스.tar.gz 파일 생성
(ㄷ) SPEC 파일 생성
(ㄹ) rpm build
(ㅁ) GPG Key 생성
(ㅂ) 패키지 sign
(ㅅ) Yum Repository 구성
(ㅇ) 테스트
# mkdir /var/www/html/packages
# cp /usr/src/redhat/RPMS/i386/hello*.rpm /var/www/html/packages
# cp RPM-GPG-KEY-test /var/www/html/packages
# yum -y install createrepo
# createrepo /var/www/html/packages
1/1 - hello-1.0-1.i386.rpm
Saving Primary metadata Saving file lists metadata Saving other metadata |
# tree /var/www/html
# service httpd restart
⑪ hello.repo 파일 생성
rpm 패키지 생성 절차
(ㄱ) 소스 프로그램 개발
(ㄴ) 소스.tar.gz 파일 생성
(ㄷ) SPEC 파일 생성
(ㄹ) rpm build
(ㅁ) GPG Key 생성
(ㅂ) 패키지 sign
(ㅅ) Yum Repository 구성
(ㅇ) 테스트
# vi /etc/yum.repos.d/hello.repo
[hello] name=hello description=Test Yum Repository baseurl=http://172.16.9.252/packages enabled=1 gpgcheck=1 gpgkey=http://172.16.9.252/packages/RPM-GPG-KEY-test |
⑫ 설치 확인
# yum -y install hello
Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * base: mirror.oasis.onnetcorp.com * extras: mirror.oasis.onnetcorp.com * updates: mirror.oasis.onnetcorp.com hello | 951 B 00:00 hello/primary | 668 B 00:00 hello 1/1 Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package hello.i386 0:1.0-1 set to be updated --> Finished Dependency Resolution
Dependencies Resolved
============================================================================= Package Arch Version Repository Size ============================================================================= Installing: hello i386 1.0-1 hello 2.2 k
Transaction Summary ============================================================================= Install 1 Package(s) Upgrade 0 Package(s)
Total download size: 2.2 k Downloading Packages: hello-1.0-1.i386.rpm | 2.2 kB 00:00 warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID c1d1124a hello/gpgkey | 1.6 kB 00:00 Importing GPG key 0xC1D1124A "baik,seoungchan <jang4sc@hanmail.net>" from http://172.16.10.249/packages/RPM-GPG-KEY-test Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : hello 1/1
Installed: hello.i386 0:1.0-1
Complete! |
# hello.sh
This is a test.
________________________ / \ | | | 야 !! 공부좀 해라!!! | | | \________________________/ \ \ (__) (oo)______ (__) )\ ||---|| * || ||
|
(복원) hello.repo 파일 복원
# cd /etc/yum.repos.d
# vi hello.repo
[hello] name=hello description=Test Yum Repository baseurl=http://172.16.9.252/packages enabled=0 gpgcheck=1 gpgkey=http://172.16.9.252/packages/RPM-GPG-KEY-test |
(참고) spec 파일 만들기
spec 파일을 만드는 과정이 가장 중요하면 다음과 같은 사이트를 참고 하여 적당한 spec 파일을 만들어 보자.
http://www.cubrid.com/zbxe/bbs_developer_tutorial/149970
http://kthan.tistory.com/entry/리눅스Linux-RPM-만드는-방법과-spec파일-작성법
http://onecellboy.tistory.com/267
---------------------------------------- 참고 사항 -----------------------------------------------
CentOS 5.X 버전에서 YUM Repository Server 구성 방법
작성자: 백 승 찬
작성일: 2013.03.29
이메일: jang4sc@hanmail.net
카 페: http://cafe.daum.net/bscsolaris
1. (WEB을 통해 구성) YUM Server Repository 구성
(1) yum server 구성
(참고) yum server 구성을 위해 새로운 디스크를 장착하여 /var/www/html/centos 마운트 하였다.
# mkdir -p /var/www/html/centos
# cd /var/www/html/centos
# mkdir -p 5/os/i386
# mkdir -p 5/updates/i386
# mkdir -p 5/centosplus/i386
(2) 배포 서버 기능을 하기 위해서 httpd 패키지를 설치
# yum install -y httpd
(3) 원본 yum server와 로컬 yum repository 동기화
# cd /root/bin
# vi local_repository_update.sh
#!/bin/bash rsync="rsync -avrt --bwlimit=256"mirror=rsync://mirror.neolabs.kz/centosverlist="5"archlist="i386"baselist="os updates centosplus"local=/var/www/html/centos/for ver in $verlistdo for arch in $archlist do for base in $baselist do remote=$mirror/$ver/$base/$arch/ $rsync $remote $local/$ver/$base/$arch/ done donedone |
# chmod 755 local_repositorty_update.sh # ./localrepoupdate.sh
-> localrepoupdate.sh 파일을 초기 구동 시에는 약 18시간 정도 시간이 소요된다.
(참조 서버에 따라 상이함)
(4) 웹서버 설정
# vi /etc/httpd/conf/httpd.conf
ServerAdmin root@<서버 IP> ServerName <서버 IP>:80 |
# service httpd restart
(5) crontab 등록
# crontab –e
0 3 * * * /root/bin/local_repository_update.sh |
-> 매일 새벽 3시에 스크립트 실행
2. YUM Client 구성
client에서 default로 설정되어 있는 yum server 대신, 새로 만든 yum server를 참조하기 위하여 yum repository 설정을 변경한다.
(가정) 새로 설정된 YUM Repository Server : 172.16.9.252
# vi /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # #
[base]name=CentOS-$releasever - Base#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=osbaseurl=http://172.16.9.252/centos/$releasever/os/$basearch/gpgcheck=0#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 #released updates[updates]name=CentOS-$releasever - Updates#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updatesbaseurl=http://172.16.9.252/centos/$releasever/os/$basearch/gpgcheck=0#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5#packages used/produced in the build but not released [addons]name=CentOS-$releasever - Addons#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addonsbaseurl=http://172.16.9.252/centos/$releasever/os/$basearch/gpgcheck=0#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 #additional packages that may be useful[extras]name=CentOS-$releasever - Extras#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extrasbaseurl=http://172.16.9.252/centos/$releasever/os/$basearch/gpgcheck=0enabled=0#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 #additional packages that extend functionality of existing packages[centosplus]name=CentOS-$releasever - Plus#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplusbaseurl=http://172.16.9.252/centos/$releasever/os/$basearch/gpgcheck=0enabled=0#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 #contrib - packages by Centos Users[contrib]name=CentOS-$releasever - Contrib#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contribbaseurl=http://172.16.9.252/centos/$releasever/os/$basearch/gpgcheck=0enabled=0#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 |
3. (ISO 파일을 통해 구성) YUM Server Repository 구성
(1) ISO 파일을 다운로드
다운로드 받은 ISO 파일을 임의의 폴더에 복사한다.
(2) ISO 파일을 마운트
# mount -o loop /iso /media/CentOS
(3) YUM Repository 파일 생성
# vi /etc/yum.repo.d/iso.repo
[MyISO] baseurl=file:///media/CentOS enabled=1 |
(4) yum.conf 파일 수정
# vi /etc/yum.conf
[main] cachedir=/var/cache/yum keepcache=0 debuglevel=2 logfile=/var/log/yum.log distroverpkg=redhat-release tolerant=1 exactarch=1 obsoletes=1 gpgcheck=0 plugins=1
# Note: yum-RHN-plugin doesn't honor this. metadata_expire=1h
# Default. # installonly_limit = 3
# PUT YOUR REPOS HERE OR IN separate files named file.repo # in /etc/yum.repos.d |
-> 이 파일을 수정하지 않으면 RHEL 버전인 경우 RHN(RedHat Network) 등록되지 않았다고 에러 메시
지가 발생한다. 따라서 "yum install" 명령어를 수행할 수 없게 된다.
---------------------------------------- 참고 사항 -----------------------------------------------
'Learning > └Essential & Admin' 카테고리의 다른 글
Linux_ServerAdmin (10) 사용자 그룹관리 (0) | 2016.11.04 |
---|---|
Linux_ServerAdmin (9) 리눅스 부팅과정 (0) | 2016.11.04 |
Linux_ServerAdmin (7)SWAP관리 (0) | 2016.11.03 |
Linux_ServerAdmin (6)RAID관리 (0) | 2016.10.31 |