소스형태로 소프트웨어를 설치하는 이유
ⓐ 최신 버전의 오픈 소스 소프트웨어(최신 기능)을 사용하기 위해서
ⓑ 오픈 소스 소프트웨어의 크기를 줄이기 위해서 -> 필요한 것만 동작시키기 위해서
ⓒ 고객이 낮은 버전의 S/W를 요청하는경우 -> 낮은 버전의 Library => (X)
>> 독립적인 폴더에 따로 만들어준다.
ⓓ 보안장비의 보안 S/W가 Open Source로 설치하는 경우에는 소스형태로 컴파일 한다.
Apache 소스 프로그램 설치 과정
ⓐ 소스 파일 다운로드
ⓑ 압축 해제
ⓒ configure && make && make install
ⓓ 웹서비스 시작 및 확인
프로그램 다운로드 디렉토리 : 각자 알아서
프로그램 소스 디렉토리 : /usr/local/src
프로그램 설치 디렉토리 : /usr/local/apache2
gcc도 설치되어 있어야함.
ⓐ 소스 파일 다운로드
# wget . . . .
ⓑ 압축 해제
# tar xvzf httpd-2.2.26.tar.gz -C /usr/local/src -> -C : change directory
# INSTALL 문서 확인 ( 항상 보는 습관이 필요함)★★★★★★★★★★★★★★★
ⓒ configure && make && make install
# ./configure --help
# ./configure --prefix=/usr/local/apache2
# echo $? -> 잘 되었는지 확인용. 0이면 잘 된거다.
# ./configure --prefix=/usr/local/apach2 > apache.log 2>&1 ( 명령어 수행시 출력되는 내용을 로그화 )
# make
# make install
ⓓ 웹서비스 시작 및 확인
(의문점)
1. 소스 형태로 설치한 프로그램(EX: apache2)은 "rpm -qa | grep apache" 확인이 가능할까?
-> NO. 다른 곳에는 정보가 전혀 들어가지 않는다.
2. "rm -rf /usr/local/apache2" 디렉토리 삭제 후 다시 만들고 싶다면?
-> make install 만 치면 또 만들어진다.
3. 소스 디렉토리(EX: /usr/local/src)에서 configure/make/make install을 다시 실행하고 싶다면?
-> cd /usr/local/src
-> make clean
소스 형태로 소프트웨어를 관리하는 것이 어렵다.
-> 설치 한 사람만 알 수 있다. rpm으로 관리하는게 아니여서 확인이 힘들다.
왜 실무에서는 소스형태로 소프트웨어를 설치하는가?
-> 필요한 것 외엔 다 빼버리고 싶어서.
Create RPM
소스코드로 설치한 프로그램 ---> 패키지화 ---> source.rpm
(EX: /usr/local/apache2) ---------------> (EX: apache2.rpm) -> yum으로 설치 할 수 있다.
source.rpm 파일을 쉽게 제공하기 위한 YUM repository구성
패키지/배포파일 무결성을 점검하는 대표적인 방법
> GPG key 사용하는 방법
> Hash(EX: md5cksum) 알고리즘을 사용하는 방법
-> #md5sum /bin/ls
RPM 패키지 생성 절차
ⓐ 소스 프로그램 개발
ⓑ 소스.tar.gz 파일 생성
ⓒ SPEC 파일 생성
ⓓ rpm build
ⓔ GPG Key 생성
ⓕ 패키지 sign
ⓖ YUM repository 구성
ⓘ 테스트
ⓐ 소스 프로그램 개발
# vi hello1-0/hello.sh
ⓑ 소스.tar.gz 파일 생성
# ls /usr/src/redhat > 없다면 rpm-build 설치
# yum -y install rpm-build
# 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
ⓒ SPEC 파일 생성
# vi /usr/src/redhat/SPECS/hello.spec
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 |
%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 |
cs |
ⓓ RPM build
# rpmbuild -ba /usr/src/redhat/SPECS/hello.spec
# find /usr/src/redhat
# cd /usr/src/redhat/RPMS/i386
# rpm -Uvh hello-1.0-1.i386.rpm
ⓔ GPG Key 생성
# cd
# gpg --gen-key ( 키 값을 꼭 적어놔야한다.)★★★★★★★★★★★★★★★★
ⓕ 패키지 sign
# gpg -a -o ~/RPM-GPG-KEY-test --export 8D823B56
# vi ~/.rpmmacros
# rpm --resign /usr/src/redhat/RPMS/i386/hello-1.0-1.i386.rpm
ⓖ YUM repository 구성
# mkdir /var/www/html/packages
# cp /usr/src/redhat/RPMS/i386/hello*.rpm /var/www/html/package
# cp RPM-GPG-KEY-test /var/www/html/package
# tree /var/www/html
# yum -y install createrepo
# createrepo /var/www/html/package
# tree /var/www/html
# service httpd restart
ⓘ 테스트
# vi /etc/yum.repo.d/hello.repo
1
2
3
4
5
6
7 |
[hello]
name=hello
description=Test Yum Repository
baseurl=http://192.168.35.245/packages
enabled=1
gpgcheck=1
gpgkey=http://192.168.35.245/packages/RPM-GPG-KEY-test |
cs |
# yum -y install hello
'Linux > ServerAdmin' 카테고리의 다른 글
BOOT (0) | 2017.09.24 |
---|---|
소프트웨어 관리 (0) | 2017.09.24 |
SWAP (0) | 2017.09.24 |
물리적 vs LVM vs RAID (0) | 2017.09.24 |
RAID (0) | 2017.09.24 |