본문 바로가기

Learning/ └Essential & Admin

Linux_ServerAdmin (8)Software관리

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옵션을 이용해 패키지

를 설치해야만 했다. 그러나 yumrpm패키지가 저장된 서버에 자동으로 접속하고 설치하고자 하는 패키지를 다운

로드하여 설치한다. 또한 의존성을 가지는 다른 rpm패키지까지 알아서 다운로드하여 설치하며 rpm 패키지들을 안전

하게 설치, 삭제 및 업데이트를 한다. yumrpm에 비해 이미 설치되었거나 혹은 저장소에 설치 가능한 패키지에

관한 정보를 효율적이고 쉽게 검색 할 수 있고, 일일이 수동 업그레이드를 할 필요가 없으므로 많은 시스템을 관리

할 때 더더욱 유용하게 쓰인다.

 

(명령어 형식)

# 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= 옵션으로 명시된 경로로 설치된다. 보통 makemake 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

 

 

 

 

 

소스형태로 설치한 프로그램 apache2rpm -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" 명령어를 수행할 수 없게 된다.

 

---------------------------------------- 참고 사항 -----------------------------------------------