#############################################

## 주제 : 소프트웨어 설치                  ##

#############################################


http://centos.org

http://ftp.daum.net

http://ftp.neowiz.com

ftp://ftp.kaist.ac.kr

http://vault.centos.org

http://rpmfind.net


rpm (redhat package manager) 약자로 미국의 RedHat 사가 개발한 패키징 방식이다.


tar.gz, tar.bz2, tar.xz 은 압축을 해제해야 소스인지, 컴파일한 파일인지 알 수 있다. 

그러니 rpm 으로 끝나는 확장자는 파일명만 보고도 소스인지, 컴파일한 파일인지 알 수 있다.

~.tar.gz  : tar + gzip  (소스형태, 컴파일형태)

~.tar.bz2 : tar + bzip2 (소스형태, 컴파일형태)

~.tar.xz  : tar + xz    (소스형태, 컴파일형태)

~.i386.rpm : rpm  (컴파일된 형태)

~.src.rpm : (소스 형태)

~.i386.rpm, ~.i586.rpm, ~.i686.rpm : (컴파일형태)

~.deb : 데비안계열의 패키징 방식


~.rpm : rpm 명령어로 설치

yum   : rpm 파일을 설치 


~.deb : dpkg 명령어로 설치

apt-get :   deb 파일을 설치


예전에는 리눅스에 프로그램을 설치하기 위해서는 아래와 같은 과정을 거쳤다.

소스 -> 환경설정 -> 컴파일 -> 설치 

~~~~    ~~~~~~~~

 |

 +--> 컴파일    -> 패키지명.버전명.i386.rpm  -> 설치 

 +--> 소스 파일 -> 컴파일 -> 설치 



rpm 의 가장 큰 단점.

- 패키지의 의존성이 존재하면 설치하기가 어렵다.


의존성 : 패키지끼리 서로 연관 되어있는 형태이다.

- 리눅스용 웹브라우저(firefox 를 설치했다.)

- 강제로 설치했다고 해도 firefox 가 실행이 안된다.

- 이것을 실행하기 위해서는 의존성이 걸린 Xwindow system 의 관련된 패키지들을

- 모두 설치해야 firefox 를 설치하고 사용할 수 있다.


yum : 이미 컴파일이 되어있는 패키지를 인터넷으로 다운받아서 설치하는 방식


~~~~.i386.rpm  <-- 컴파일된 rpm 파일

~~~~.src.rpm   <-- 소스 rpm 파일

~~~~.tar.gz    <-- 압축된 파일 (tar + gzip) 

~~~~.tar.bz2   <-- 압축된 파일 (tar + bzip2)

~~~~.tar.xz   <-- 압축된 파일 (tar + xz)


########################

## tar + gzip + bzip2 ##

########################


o gzip

- 파일을 압축하는 명령어다.

- gzip은 GNU 프로젝트를 통해 배포되는 유틸리티

- gzip으로 압축한 파일은 파일명이 : 파일명.gz 확장자를 갖는다.

- 또한 여러 파일들을 지정하면 각각의 파일명.gz 파일로 저장한다.


사용법 : gzip 옵션 파일들...

옵션 : 

-d --decompress  decompress

-1 --fast        compress faster

-9 --best        compress better


사용예 : gzip filename

- filename 을 압축해서 filename.gz 파일이 생성된다. 

- 이때 원본파일인 filename 없어지고 압축된 파일만 남는다.

- 여러 파일을 gzip으로 압축해도 각각 filename.gz 이 생성이 된다. 

- 여러개의 파일을 하나의 파일로 묶이지 않는다. 

- 여러개의 파일을 하나로 묶는 것은 tar의 역할이다. 


압축해제 : gunzip filename  or gzip -d filename



o bzip2

- 압축하면 나오는 파일명 : 파일명.bz2

- 대체로 gzip보다 10~20% 뛰어난 압축률이 더 좋다.


사용법 : bzip2 OPTION 파일들...

옵션 : 

-d --decompress     force decompression

-1 .. -9            set block size to 100k .. 900k

--fast              alias for -1

--best              alias for -9


사용예 : bzip2 filename

- filename 을 압축해서 filename.bz2 파일이 생성된다. 

- 이때는 filename 이 지워진다.

- 여러 파일을 bzip2로 압축해도 각각 filename.bz2 가 생성이 된다. 

- 여러개의 파일을 하나의 파일로 묶이지 않는다. 

- 여러개의 파일을 하나로 묶는 것은 tar의 역할이다. 


ex) bzip2 filename


압축해제 : bzip2 -d filename  or bunzip2 -d filename


o xz : 요즘 나온 압축 프로그램

사용법은 비슷하다.

리눅스 커널 소스가 이 압축프로그램으로 압축되어 있다. 

linux-3.17.2.tar.xz


xz 

unxz 


o tar 

- 압축하는 프로그램이 아니다.

- tar는 단순히 하나의 아카이브 파일로 묶어 주는 역할만 할 뿐, 

  파일의 크기를 줄여주는 압축 기능은 없으므로 

  tar 명령어 안에서 gzip이나 bzip2 명령어와 함께 사용한다.

- 이때 원본파일은 그대로 남는다.

- 파일을 원래 상태로 복원하기 위해 파일의 퍼미션이나 소유권 등의 정보를 유지하면서 여러개의 파일들을 하나의 파일로 묶는 기능을 가진다.


Usage: tar [OPTION...] [FILE]...


ex) tar options 파일.tar 파일들 ...


tar cjf tarfile.tar.bz2 files

tar czf tarfile.tar.gz  files 

tar cvf tarfile.tar     files 

~~  ~~~ ~~~~~~~~~~~~~~~ ~~~~~

 |   |       |            |

 |   |       |            +-- 묶일 파일 리스트들

 |   |       + 묶을 파일명

 |   +-- 옵션

 +-- 명령어

 

gzip -9 tarfile.tar  <-- tarfile.tar.gz


option

c : 새로운 아카이브의 생성

x : 아카이브로부터 파일 추출

t : 파일안에 묶인 내용을 출력

v : 파일을 묶거나 풀 때 정보를 출력

f : 읽거나 기록할 tar 파일을 정의

z : gzip으로 압축한다

j : bzip2 로 압축한다

C <DIR> : 압축을 해당 <DIR> 로 해제한다


==================================================================

LAB> 압축 연습하기 


-- 조건 --

작업 디렉토리 : 홈디렉토리(/root)

-- 조건 --


o 파일 압축

- 사용자와 그룹에 관련된 중요 파일 3개를 현재 디렉토리에 복사한다.

- /etc/passwd, /etc/group, /etc/shadow 파일을 현재 디렉토리에 

- 복사한다. 그런데 왜 명령어가 틀린가 ???? 다양한 방법이 있다는걸

- 보여주기 위해서 쓴 것이다.

# cd

# rsync /etc/passwd .

# install -m 644 /etc/group .

# cat /etc/shadow > shadow


- 복사한 파일을 확인한다.

# ls -l /etc/passwd passwd

# ls -l /etc/shadow shadow

# ls -l /etc/group group

# diff /etc/passwd passwd

# cmp  /etc/shadow shadow

# diff /etc/group group


- 각 파일을 압축한다.

- 만약 xz 명령어가 없다면 yum -y install xz 으로 패키지를 설치해야 한다.

# gzip group 

# bzip2 passwd 

# xz shadow  


- 압축된 파일을 확인한다.

- 중요한 것은 원본 파일이 삭제되고 각 파일명에 압축프로그램의

- 고유 확장자가 붙어있다는 것이다.

- 고유 확장자 : gzip -> .gz, bzip2 -> .bz2, xz -> .xz

# ls -l

total 24

-rw-r--r-- 1 root root 440 Mar 20 21:44 group.gz

-rw-r--r-- 1 root root 832 Mar 20 21:43 passwd.bz2

-r-------- 1 root root 368 Mar 20 21:46 shadow.xz


o 첫 번째 압축해제

- 각 압축 프로그램의 명령어의 -d 옵션을 이용해서 압축을 해제한다.

# gzip -d group.gz 

# bzip2 -d passwd.bz2 

# xz -d shadow.xz 


o 두 번째 압축해제

- 각 압축 프로그램의 -d 옵션이 아닌 다른 이름으로 된 해제 명령어를 

- 이용해서 압축을 해제한다.

# gzip group 

# bzip2 passwd 

# xz shadow 

# gunzip group.gz 

# bunzip2 passwd.bz2 

# unxz shadow.xz


- 압축 프로그램과 압축해제 프로그램의 하드링크와 심볼릭링크를

- 확인하는 부분이다.

# ls -li `which gunzip`

# ls -li `which gzip`

# ls -li `which zcat`

# ls -li `which bzip2`

# ls -li `which bunzip2`

   :

   :

==================================================================


==================================================================

LAB>  tar + gzip 으로 압축하기 (단일 파일인 경우)


- tar 와 gzip 을 각각 실행하는 경우

- 순서 : tar 로 묶고 gzip 으로 압축한다.

# tar cvf test.tar passwd shadow group

# gzip test.tar             <-- test.tar.gz


- tar 와 gzip 을 한번에 실행하는 경우

- 순서 : tar 명령어에 z 옵션을 넣어주면 test2.tar.gz 이 생성된다.

- tar 명령어에 z 옵션이 들어가면 tar 프로그램 내부에서 외부의 

- gzip 실행파일을 호출한다.

# tar cvzf test2.tar.gz passwd shadow group  


- tar 와 bzip2 를 각각 실행하는 경우

- 순서 : tar 로 묶고 bzip2 로 압축한다.

# tar cvf test3.tar passwd shadow group

# bzip2 test3.tar           <-- test3.tar.bz2


- tar 와 bzip2 를 한번에 실행하는 경우

- 순서 : tar 명령어에 j 옵션을 넣어주면 test2.tar.bz2 가 생성된다.

- tar 명령어에 j 옵션이 들어가면 tar 프로그램 내부에서 외부의 

- bzip2 실행파일을 호출한다.

# tar cvjf test4.tar.bz2 passwd shadow group  <-- test4.tar.bz2


==================================================================


==================================================================

LAB>  tar + gzip 으로 압축하기 (디렉토리인 경우)


*** 인터넷상에서 프로그램을 압축해서 배포하는 경우에는

*** 두 번째 예제처럼 디렉토리에 넣고 그 디렉토리를 묶는게 일반적이다.


o 디렉토리에 넣지 않고 묶을 경우

- 압축을 해제할 경우에는 현재 디렉토리 파일이 몽땅 풀린다.

# cd /etc

# tar czf etc.tar.gz *

# mv etc.tar.gz /tmp

# cd /tmp

# ls

etc.tar.gz

# tar xzf etc.tar.gz 

# ls

  :

  :

# rm -rf *


o 디렉토리에 넣고 묶을 경우

- 압축을 해제할 경우에는 디렉토리 자체가 나온다.

# cd /

# ls -F

bin/   boot/  etc/   ...

# tar czf etc.tar.gz etc

# mv etc.tar.gz /tmp

# cd -

/tmp

# ls

etc.tar.gz

# tar xzf etc.tar.gz 

# ls

etc  etc.tar.gz

==================================================================


==================================================================

LAB> tar 에서 -z(gzip) 옵션과 -j(bzip2) 옵션 확인하기.


tar 의 z 옵션 : 외부의 gzip 명령어인 /bin/gzip 을 호출한다.

tar 의 j 옵션 : 외부의 bgzip2 명령어인 /usr/bin/bzip2 를 호출한다.


o tar의 x 옵션 테스트 

- gzip 명령어를 이동시키고 tar 의 x 옵션을 호출하면 tar 명령어 

- 내부에서 /bin/gzip을 호출하는 것을 알 수 있다.


# mv /bin/gzip .

# ls -l /bin/gzip

ls: /bin/gzip: No such file or directory


# tar czf etc.tar.gz /etc

tar: gzip: Cannot exec: No such file or directory

tar: Error is not recoverable: exiting now

tar: Removing leading `/' from member names


- 다시 원래대로 복구한다.

# mv gzip /bin

# tar czf etc.tar.gz /etc

# ls -l etc.tar.gz 

-rw-r--r-- 1 root root 4958956 Nov  4 17:11 etc.tar.gz



o tar의 j 옵션 테스트 

- bzip2 명령어를 이동시키고 tar 의 j 옵션을 호출하면 tar 명령어 

- 내부에서 /usr/bin/bzip2 를 호출하는 것을 알 수 있다.


# mv /usr/bin/bzip2 .

# ls /usr/bin/bzip2

ls: /usr/bin/bzip2: No such file or directory

# tar cjf etc.tar.bz2 /etc

tar: Removing leading `/' from member names

tar: bzip2: Cannot exec: No such file or directory

tar: Error is not recoverable: exiting now


- 다시 원래대로 복구한다.

# mv bzip2 /usr/bin

# tar cjf etc.tar.bz2 /etc

# ls -l etc.tar.bz2

-rw-r--r-- 1 root root 3183126 Nov  4 17:18 etc.tar.bz2

===================================================================


===================================================================

LAB> 위에서 exec 를  이해하기 위한 프로그램을 짜보기.


- program 을 실행하면 외부의 ls 가 실행된다.

- 이때는 프로그램에서 exec 계열의 함수를 이용해서 외부 명령어를 

- 실행한다. 

- man execl 을 이용해서 exec 계열의 함수들을 확인할 수 있다.


# vi program.c

-- program.c --

#include <unistd.h>


int main()

{

  execl("/bin/ls", "ls", NULL);

  return 0;

}

-- program.c --


# gcc -Wall -o program program.c 


# ./program

  :

  :


# cp -v program.c program2.c

# vi program2.c

-- program2.c --

#include <unistd.h>  // execl

#include <stdio.h>   // printf


int main()

{

  execl("/bin/ls", "/bin/ls", NULL);

  fprintf(stderr, "program: /bin/ls: Cannot exec: No such file or directory\n");

  return 0;

}

-- program2.c --


# gcc -Wall -o program2 program2.c 

# ./program2

  : 

  :

# mv /bin/ls .

# ./program2

program: /bin/ls: Cannot exec: No such file or directory

# mv ls /bin


# cp -v program.c program3.c

# vi program3.c

-- program3.c --

#include <unistd.h>  // execl

#include <stdio.h>   // printf


int main(int argc, char *argv[])  // 명령행 인자를 쓸 때 반드시 넣어주어야 한다.

{

  // # gunzip   fstab

  //   ~~~~~~   ~~~~~

  //   argv[0]  argv[1]


  execl("/bin/gzip", "/bin/gzip", argv[1], NULL); // execl함수는 환경변수 세팅이 안된다.

  fprintf(stderr, "program: /bin/gzip: Cannot exec: No such file or directory\n");

  return 0;

}

-- program3.c --


- 정상 테스트

# gcc -Wall program3 program3.c

# cp /etc/fstab

# ./program3 fstab

# ls fs*

# gunzip fstab.gz


- 에러발생 테스트

# mv /bin/gzip .

# ./program3 fstab

program: /bin/gzip: Cannot exec: No such file or directory


- 원상복귀

# mv gzip /bin

=================================================================


==================================================================

LAB> 인터넷에서 받은 tar.gz 파일을 시스템에 설치하기.


목표 : 웹서버의 소스파일을 서버에서 설치한다.


http://httpd.apache.org


웹서버 파일명 : apache_1.3.41.tar.gz  


-- 설치 순서 --

1. 압축 해제

2. 환경설정

3. 컴파일

4. 설치

5. 웹서버 실행

6. 웹서버 확인

7. 메인 페이지 생성

8. 브라우저로 접속

-- 설치 순서 --


0. 체크사항

- 개발툴 없다면 설치한다.

# yum -y groupinstall "Development Tools"


- 아파치 웹서버가 있다면 삭제한다.

// 설치 확인

# rpm -q httpd

// 삭제

# rpm -e httpd


// 의존성 있는 http 삭제

# /etc/init.d/httpd stop

# yum -y groupremove httpd


1. 압축 해제

- 압축파일로 된 아파치 웹서버를 압축해제 한다.

# tar xzf apache_1.3.41.tar.gz  


2. 환경설정

- ./configure 명령어를 이용해서 환경을 설정한다.

- UNIX(LINUX) 에서는 현재 디렉토리의 실행파일들은 실행할 수 없도록

- 기본값은 막혀있다. 이를 풀수도 있지만 보안상의 이유로 안푸는 것이 좋다.

- 항상 현재 디렉토리의 실행파일은 ./실행파일명 으로 실행을 해야한다.

- configure 에서 옵션은 다 생략하고 가장 간단한 형태로 실행한다.

# cd apache_1.3.41

# ./configure


3. 컴파일

- make 는 프로젝트 단위로 컴파일을 한다.

#  make


4. 설치

- make 뒤에 install 이라는 인자를 준다.

- 그러면 컴파일된 파일들을 시스템에 자동으로 설치해준다.

# make install


5. 웹서버 실행

- apachectl 명령어는 웹서버를 실행시켜주는 명령어이다.

# /usr/local/apache/bin/apachectl start


6. 웹서버 확인

- netstat 명령어는 현재 서버에 LISTEN 되어 있는 포트를 출력해준다.

- 그중에서 0.0.0.0:80  이 부분이 나오면 된다.

# netstat -nlt

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State      

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN


7. 메인 페이지 생성

- 웹페이지가 제공되는 디렉토리 : /usr/local/apache/htdocs 

# cd /usr/local/apache/htdocs

// 필요 없는 파일 삭제

# rm -f *

# echo Welcome to Ko Seung-Wook Server. > index.html


8. 브라우저로 접속

- 자신의 IP주소를 확인하고 그 IP주소로 웹브라우저로 접속해본다.

// vmware

# ifconfig eth0

// virtual box

# ifconfig eth1

eth1      Link encap:Ethernet  HWaddr 00:0C:29:7C:CF:29  

          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0

  :

  :

# iptables -F

http://192.168.56.101

Welcome to Ko Seung-Wook Server. 


==================================================================


==================================================================

LAB> 인터넷에서 받은 tar.gz 파일을 시스템에 설치하기.


http://netcat.sourceforge.net

netcat-0.7.1.tar.gz


-- 순서 --

1. 압축 해제

2. 환경설정

3. 컴파일

4. 설치

5. 실행

6. 확인

-- 순서 --


1. 압축해제

- 업로드한 압축 파일을 해제한다.

# tar xvzf netcat-0.7.1.tar.gz 

netcat-0.7.1/

netcat-0.7.1/m4/

netcat-0.7.1/m4/lib-link.m4

netcat-0.7.1/m4/inttypes_h.m4

netcat-0.7.1/m4/lcmessage.m4

netcat-0.7.1/m4/inttypes.m4

  :

  :


2. 환경설정

- 압축이 해제된 netcat 디렉토리에 들어가서 환경설정을 한다.

# cd netcat-0.7.1

# ./configure


3. 컴파일

- 컴파일을 한다.

# make


4. 설치

- 시스템에 설치한다.

# make install


# yum groupinstall "development tools"


5. 실행

- nc를 실행한다.

- 실행하기 전에 이미 설치된 nc 패키지를 삭제한다.

pts/0# rpm -q nc

pts/0# rpm -e nc


- 방화벽정책으로 인해서 접속이 안되면 모두 해제한다.

pts/0# iptables -F


- 8888 포트를 대기한다. (server 개념)

pts/0# nc -l -v -p 8888

Connection from 127.0.0.1:57059

Hello

Hi~~


- 리슨된 포트로 접속한다. (client 개념)

pts/1# nc localhost 8888

Hello

Hi~~

==================================================================


==================================================================

LAB> Linux 에서 Java 를 설치하기. 


JAVA_and_JSP 설치 문서를 참고할 것!!!


==================================================================


#########

## rpm ##

#########


o rpm 이란 ? 

rpm (redhat package manager) 약자로 미국의 RedHat 사가 개발한 패키징 방식이다.


장점 : 소스로 설치하는 어려운 부분을 간단히 해결할 수 있다.

단점 : 의존성 에러로 인해 설치가 어렵다.


rpm 파일을 설치하는 형식 : 

mc-4.6.1a-35.el5.i386.rpm


패키지명-버전-배포판-아키텍처-rpm


버전 : 주번호, 부번호, 패치레벨


fc19 : 페도라 V 19

el5  : Enterprise Linux V 5


noarch  : 모든 아키텍처에 설치가 가능한 패키지들(font ...)

s390, s390x  <-- IBM S390 메인프레임에서 실행

src     <--- 컴파일이 안된 소스형태로 배포

arm     <--- 임베디드 분야

sparc   <--- 자기 아키텍처만 설치/실행

ppc     <--- 애플 MAC

ppc64   <--- 애플 MAC 64bit

x86_64  <--- 64bit intel

i386 -> i486 -> i586 -> i686  <--   32bit intel 

   <-----------------------  X

 O ------------------------>


o 아키텍처 종류를 확인해보자.

http://rpmfind.net


o rpm 옵션 


Usage: rpm [OPTION...]


-i 설치

-U 업그레이드 / 설치 

-v 설치할때 파일명을 출력

-h # 으로 설치진행을 출력

-e 삭제

--force 강제설치

--nodeps  의존성을 무시하고 설치 

- --nodeps 를 이용해서 설치하면 프로그램이 정상동작을 하지 않을 수 있다.



-Uvh  설치할 때 사용하는 옵션 


-e    삭제할 때 사용하는 옵션


ex)

rpm -Uvh 파일명

rpm -Uvh --nodeps 파일명

rpm -e 패키지명

rpm -e 패키지명-버전 


=====================================================================

rpm-LAB1> CentOS5.8 DVD의 rpm 을 확인해보자.


-- 순서 --

1. DVD 넣는다.

2. mount 명령어로 DVD를 /mnt 디렉토리에 연결한다.

3. rpm 파일이 있는 디렉토리에서 rpm 파일을 확인하고 설치해보자.

-- 순서 --


1. DVD 넣는다.

- VB 에서 DVD를 삽입한다.

저장소 -> CentOS 5.8 1번 DVD를 선택한다.


2. mount 명령어로 DVD를 /mnt 디렉토리에 연결한다.

- -t iso9660 : cdrom filesystem

- -o ro (read only)

# mount -t iso9660 -o ro /dev/cdrom /mnt

# df

  :

  :

/dev/hdc               3831642   3831642         0 100% /mnt


3. rpm 파일이 있는 디렉토리에서 rpm 파일을 확인하고 설치해보자.

# cd /mnt/CentOS

# ls 

  :

x3270-text-3.3.4p7-3.el5.4.i386.rpm

x3270-x11-3.3.4p7-3.el5.4.i386.rpm

  :

yum-utils-1.1.16-21.el5.centos.noarch.rpm

  :

zisofs-tools-1.0.6-3.2.2.i386.rpm

  :


# ls mc*

mc-4.6.1a-35.el5.i386.rpm

# rpm -Uvh mc-4.6.1a-35.el5.i386.rpm 

# mc       <-- 실행이 된다.


- mc 패키지를 삭제한다.

# rpm -e mc

# mc       <-- 실행이 안된다.


- 의존성 에러가 발생한다.

# rpm -Uvh firefox-3.6.26-1.el5.centos.i386.rpm 


- 의존성을 무시(--nodeps)하고 설치한다.

- --nodeps 옵션은 아무데나 사용해도 상관없다.

# rpm -Uvh --nodeps firefox-3.6.26-1.el5.centos.i386.rpm 

# rpm -Uvh firefox-3.6.26-1.el5.centos.i386.rpm  --nodeps 

# rpm --nodeps -Uvh firefox-3.6.26-1.el5.centos.i386.rpm  

# firefox  <-- 설치는 했지만 실행은 안된다. (의존성 때문에)


=====================================================================



===================================================================

rpm-LAB2> --force 옵션을 이용해서 패키지를 다시 설치해보자.


! 강제로 재설치하는 경우

! 1. 실제로 파일이 사용중에 실수로 삭제가 되었을 때

! 2. 외부의 불법침입자에 의해서 파일이 변조가 되었을 때


- --force 옵션을 이용해서 다시 설치한다.

- --force 옵션은 앞이나 뒤나 위치는 상관없다.


# rm -fv /bin/ls

# ls

-bash: /bin/ls: No such file or directory


# mount -t iso9660 -o ro /dev/cdrom /mnt

# rpm -Uvh /mnt/CentOS/coreutils-5.97-34.el5.i386.rpm           <-- 설치 X

# rpm -Uvh --force /mnt/CentOS/coreutils-5.97-34.el5.i386.rpm   <-- 설치 O

# ls

  :

  :

===================================================================


===================================================================

LAB> 버전이 높은 패키지를 받아서 설치해보자.


- 시스템에 설치된 httpd 패키지를 확인한다.

# rpm -q httpd

httpd-2.2.3-63.el5.centos


- 인터넷에서 더 높은 버전을 다운로드 받는다.

# wget http://vault.centos.org/5.8/updates/i386/RPMS/httpd-2.2.3-65.el5.centos.i386.rpm


- 시스템에 httpd 패키지를 업데이트한다.

# rpm -Uvh httpd-2.2.3-65.el5.centos.i386.rpm 

Preparing...                ########################################### [100%]

   1:httpd                  ########################################### [100%]


- 업데이트를 확인한다.

# rpm -q httpd

httpd-2.2.3-65.el5.centos


- yum 을 이용해서 더 최신 버전으로 업데이트한다.

# yum -y update httpd

# rpm -q httpd

httpd-2.2.3-91.el5.centos


===================================================================


===================================================================

LAB> rpm 으로 설치하면 설치된 내용이 저장되는 디렉토리에 대한 실습

!!! /var/lib/rpm 디렉토리를 참고 !!!

-q rpm DB에서 정보에서 찾는다.

- 실행파일 (/bin,/usr/bin,/sbin,/usr/sbin,/usr/X11R6/bin)

- 설정파일 (/etc)

- 문서파일 (/usr/share/doc)

- 도움말파일 (/usr/share/man)



# cat /etc/redhat-release 

CentOS release 5.8 (Final)

# rpm -q kernel

kernel-2.6.18-308.el5


# yum update kernel 

kernel-2.6.18-402.el5

kernel-2.6.18-308.el5



1. 어떤 패키지가 이 시스템에 설치되었는지 ?

- 모든 패키지를 화면에 출력한다.

# rpm -qa  


- 모든 패키지의 개수를 화면에 출력한다.

# rpm -qa | wc -l


- 모든 패키지명을 rpmlist.txt 파일로 저장한다.

# rpm -qa  > rpmlist.txt


- tee 명령어는 화면도 출력하고 rpmlist.txt 파일로 저장도 한다.

# rpm -qa  | tee rpmlist.txt

  :


2. 어떤 패키지가 어떤 파일들을 설치했는지 ?

- 패키지에 속한 전체 파일들을 출력한다.

- Shift + Page UP, Page DOWN

# rpm -ql coreutils

  :


- 패키지에 속한 문서파일(document) 들을 출력한다.

# rpm -qd coreutils

  :


- 패키지에 속한 설정파일(configuration) 들을 출력한다.

# rpm -qc coreutils

  :


3. 어떤 파일이 어떤 패키지에서 나왔는지 ?

# rpm -qf /bin/ls

  :

===================================================================


===================================================================

LAB> rpm 패키지를 검증하기 실습 


패키지를 검증할때는 -qV 옵션을 사용한다.


# rpm -qVa 


S file Size differs

M Mode differs (includes permissions and file type)

5 MD5 sum differs

D Device major/minor number mismatch

L readLink(2) path mismatch

U User ownership differs

G Group ownership differs

T mTime differs


# rpm -qf /bin/ls

coreutils-5.97-34.el5_8.1

# rpm -qV coreutils

   <-- 아무 메세지가 나오지 않으면 패키지가 무결성하다는 뜻이다.


- 파일의 권한을 변경하고 검증해보자.

# ls -l /bin/ls

-rwxr-xr-x 1 root root 95116 Mar 21  2012 /bin/ls

 ~~~~~~~~~

# ls -l /bin/ls

-rwx--x--x 1 root root 95116 Mar 21  2012 /bin/ls

# rpm -qV coreutils

.M......    /bin/ls


- 파일의 크기/내용 수정을 변경하고 검증해보자.

# cp /bin/ls .

# echo "=========" >> /bin/ls

# rpm -qV coreutils

SM5....T    /bin/ls


# ls -l ls

-rwx--x--x 1 root root 93560 Sep  6 01:26 ls

# ls -l /bin/ls

-rwx--x--x 1 root root 93564 Sep  6 01:26 /bin/ls



===================================================================



rpm - 패키지 파일을 설치 (인터넷 필요 x , 파일이 존재  O)

yum - 인터넷을 통해서 패키지를 설치 (파일이 존재 X , 인터넷 연결 O)



~~.i386.rpm <-- 바이너리 386 ~ 686 모두 설치가능 

~~.i586.rpm <-- 386 x 486 x 586 ~ 686 ... 786 ... 



LAB> http://ftp.daum.net/ 에서 ntsysv 패키지를 가져와서 시스템에 설치하기


http://ftp.daum.net/centos/5.8/os/i386/CentOS/ntsysv-1.3.30.2-2.el5.i386.rpm



# cat /etc/redhat-release   

CentOS release 5.8 (Final)

# wget

-bash: wget: command not found

# yum install wget

...

Is this ok [y/N]: y   <-- y를 입력(설치) n(취소)

# chmod -c 700  `which wget`   <-- 보안상 wget은  root 사용자만 사용!!!

# wget http://ftp.daum.net/centos/5.8/os/i386/CentOS/ntsysv-1.3.30.2-2.el5.i386.rpm

# rpm -Uvh ntysv<tab 키>  <-- ntsysv 설치 

# LANG=C

# ntsysv  

network, sshd, syslog <-- 이거빼고 모두 제거 



x86_64





# rpm -qf /usr/sbin/useradd

# rpm -ql coreutils <-- 

# rpm -ql coreutils > coureutils.txt

# cat -n coureutils.txt



!!! 전체 설치된 패키지를 알아야 하고, 패키지에서 각각의 설치된 정보를 뽑아낼 수 있어야 한다. !!!


LAB> coreutils 패키지에서 나온 여러가지 정보를 확인해보기


o 패키지 설치시 설치되는 파일들

 도움말, 문서파일, 실행파일, 설정파일 


# rpm -q coreutils  <-- 패키지명을 완벽하게 알때 사용 

# rpm -qa | grep core  <-- 패키지명을 모를때 ( core 만 알때 )

# rpm -qi coreutils <-- coreutils 패키지의 정보를 출력 

# rpm -qc coreutils <-- coreutils 패키지의 설정파일들을 출력

# rpm -qd coreutils <-- coreutils 패키지의 문서(도움말)파일들을 출력

# rpm -ql coreutils | grep bin  <-- coreutils 실행파일을 출력

# rpm -ql coreutils <-- 전체 설치된 파일들을 출력 


LAB> 리눅스 패키지를 소스로 받아 컴파일해보자.

*** 리눅스 소스는 모두 공개되어 있으므로 C 언어로 개발할 수 있는 능력만 있으면 얼마든지 수정할 수 있다. ***


1. 개발툴 패키지 확인

2. 인터넷에 연결되어 있는지 확인

  - 네임서버설정

  - IP주소 세팅

  - Gateway 주소 세팅 


[root@www ~]# yum grouplist        <-- 개발툴이 설치되었는지 확인한다.

Installed Groups:

   Administration Tools

   Development Libraries

   Development Tools

   :

   :

Available Groups:

   Authoring and Publishing

   Base

   :

   :


[root@www ~]# yum -y groupinstall "Development Tools"   <-- 개발툴이 없다면 설치하고 있다면 생략한다.

[root@www ~]# cat /etc/resolv.conf    <-- 네임서버 확인

-- /etc/resolv.conf --

nameserver 168.126.63.1

nameserver 168.126.63.2

-- /etc/resolv.conf --


===================================================================

LAB> rpm DB 에서 검색하기


/var/lib/rpm/


- 시스템에 설치된 전체 패키지 목록을 확인한다.

# rpm -qa


- coreutils 패키지를 확인한다.

# rpm -q coreutils

coreutils-5.97-34.el5_8.1


# rpm -q mcmong

package mcmong is not installed


# rpm -q coreutil

package coreutil is not installed


- 패키명을 정확히 모를 경우에는 grep 명령어를 이용한다.

# rpm -qa | grep coreutil

policycoreutils-1.33.12-14.8.el5

coreutils-5.97-34.el5_8.1


# rpm -qf /bin/ls

# rpm -ql coreutils

# rpm -qc coreutils

# rpm -qd coreutils

# rpm -ql coreutils | grep bin


- verify의 약자로 패키지를 검증할때 사용되는 옵션이다.

# rpm -qV coreutils

# echo test >> /bin/ls

# rpm -qV coreutils

S.5....T    /bin/ls


# ls -l /bin/ls

-rwxr-xr-x 1 root root 93565 Nov  4 16:10 /bin/ls


# chmod 711  /bin/ls

# ls -l /bin/ls

-rwx--x--x 1 root root 93565 Nov  4 16:10 /bin/ls

# rpm -qV coreutils

SM5....T    /bin/ls


# chown nobody /bin/ls

# ls -l /bin/ls

-rwx--x--x 1 nobody root 93565 Nov  4 16:10 /bin/ls

# rpm -qV coreutils

SM5..U.T    /bin/ls


# chgrp users /bin/ls

# ls -l /bin/ls

-rwx--x--x 1 nobody users 93565 Nov  4 16:10 /bin/ls

# rpm -qV coreutils

SM5..UGT    /bin/ls


# md5sum /bin/ls

4736357f77b3fa17a0005418f169574f  /bin/ls


# echo test2 >> /bin/ls

# md5sum /bin/ls

8a49ead65efb6dc3d50ae48025913b76  /bin/ls


# md5sum /bin/ls

8a49ead65efb6dc3d50ae48025913b76  /bin/ls


# md5sum /bin/ls

8a49ead65efb6dc3d50ae48025913b76  /bin/ls


# echo test3 >> /bin/ls

# md5sum /bin/ls

a291df3929e4f07d86975311fa5e9295  /bin/ls


# yum -y reinstall coreutils >/dev/null 2>&1

# md5sum /bin/ls

a55a0733413620f0b3aa401541a00d83  /bin/ls


- 재설치를 했으므로 어떤 메세지도 출력이 안된다.

# rpm -qV coreutils


===================================================================


===================================================================

LAB> yum 사용하기


# yum 

  :

  :

# yum list

# yum install mc

# yum remove mc


# yum grouplist

Installed Groups: 설치된 그룹들

  :

  :  

Available Groups: 미설치된 그룹들

  :

  :

# yum groupinstall "MySQL Database"



# /etc/init.d/mysqld start

# mysql

mysql> show databases;

mysql> exit

# /etc/init.d/mysqld stop


# yum -y groupremove "MySQL Database"


# yum search httpd


# rpm -qa | grep ^coreutils

# rpm -q coreutils

# yum -y update coreutils

# yum -y reinstall coreutils


# rm -f /bin/ls

# ls

-bash: ls: command not found

# yum -y reinstall coreutils

# ls

  ...


===================================================================


===================================================================

LAB> 소스 파일을 가져와서 컴파일해보자.


*** 참고 :

*** 소스 rpm 을 설치시 어느 디렉토리에 설치가 되는지 알 수 있다.

*** rpm 을 설치할 수 있는 능력

*** 소스파일을 수정할 수 있는 능력

*** 컴파일할 수 있는 능력

*** src.rpm 파일은 rpmbuild 명령어로 컴파일할 수 있다.


# rpm -qf /bin/ls

coreutils-5.97-34.el5

# wget http://vault.centos.org/5.8/os/SRPMS/coreutils-5.97-34.el5.src.rpm 

# ls -l coreutils-5.97-34.el5.src.rpm 

-rw-r--r-- 1 root root 5256520 Jul 22  2011 coreutils-5.97-34.el5.src.rpm


- 디렉토리가 없으면 생성한다.

# mkdir -p /usr/src/redhat/SOURCES          


- coreutils 소스 패키지를 설치한다.

# rpm -Uvh coreutils-5.97-34.el5.src.rpm    

# cd /usr/src/redhat/SOURCES          

# tar xjf coreutils-5.97.tar.bz2            

# cd  coreutils-5.97


- 환경설정을 한다.

# ./configure


- 컴파일 한다.

# make



- 컴파일된 파일들을 확인한다.

# cd src

# ls

:    <-- 소스와 컴파일된 실행파일들이 존재한다.


- ls 소스를 수정한다.

# vi ls.c      

-- ls.c --

:set nu        <-- vi 명령 : 번호 세팅

/main          <-- vi 명령 : 검색


  :

  :

puts("KSW ls");   <-- 1129번 라인에 출력 함수를 추가한다.

  :

  :

-- ls.c --


# make ls


- 수정된 내용이 출력된다.

# ./ls

KSW ls 

 :

 :

===================================================================




#########

## yum ##

#########


yum은 Yellowdog Updater Modified 의 약자로 rpm 기반의 시스템(redhat계열) 을 위한 

자동 업데이터이자 패키지를 설치/삭제도구이다. 

yum 은 자동적으로 의존성을 처리해주며 rpm 패키지들을 안전하게 설치, 삭제 및 

업데이트하기 위해 반드시 해야할 이들을 스스로 해결한다. 


또한 yum 은 이미 설치되어 있거나 혹은 저장소에 설치가능한 패키지에 관한 정보를 

효율적이고 쉽게 검색해 온다. 

yum 은 rpm 이나 다른 도구들처럼 일일이 수동으로 업데이트할 필요가 없으므로 수 많은 

시스템들을 더욱 관리하기 쉽게 해준다. 


yum 으로 update 할 경우 커널을 제외한 나머지 패키지들은 모두 삭제 및 업데이트를 할수 있다. 

커널의 경우는 업데이트를 하더라도 계속 쌓이게 된다. 

yum 을 사용하여 install 하거나 update 할 경우 저장소라는 곳에서 해당 rpm파일을 다운 받은 후 설치하게 된다. 

패키지 파일을 다운받아 임시로저장하는 위치는 /var/cache/yum 하위 디렉토리이다. 


o 사용법 : 

yum [options] COMMAND


o yum의 명령어들

install : 단일 패키지 설치

remove  : 단일 패키지 삭제

groupinstall : 그룹으로 설치

groupremove  : 그룹으로 삭제

update  : 업데이트

check-update : 업데이트가 있는지 체크한다.

list    : ...

grouplist : 

  :

  :


# LANG=C

- 인터넷을 통해서 단일 패키지를 검색한다.

# yum list


- 인터넷을 통해서 그룹으로 검색한다.

# yum grouplist


- 인터넷을 통해서 단일 패키지 mc를 설치한다.

# yum install mc


- 인터넷을 통해서 단일 패키지 mc를 삭제한다.

# yum remove mc


- 인터넷을 통해서 웹서버 그룹을 설치한다. 

# yum groupinstall "Web Server"


=========================================================================

LAB> 아파치 웹서버를 시스템에 설치하고 외부에 웹문서를 만들어보자.



-- 작업 순서 --

1. 방화벽 중지

2. 웹 문서 생성

3. 웹서버 시작

4. IP주소 확인

5. 서버로 접속

-- 작업 순서 --


1. 방화벽 중지

- 방화벽을 중지한다.

# iptables -F


2. 웹 문서 생성

- 웹 문서 디렉토리로 이동해서 외부에 제공할 웹문서를 생성한다.

- 이때 확장자는 html로 생성한다.

# cd /var/www/html

# vi index.html

-- index.html --

Hello K.S.W Server

-- index.html --


3. 웹서버 시작

- 웹서버를 재시작한다.

# /etc/init.d/httpd start

Starting httpd:                                            [  OK  ]


4. IP주소 확인

- 자신의 IP주소를 확인한다.

# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 08:00:27:01:97:CC  

          inet addr:192.168.20.165  Bcast:192.168.20.255  Mask:255.255.255.0

            :

            :

5. 서버로 접속

- 서버로 접속한다.

웹브라우저에서 eth0의 IP주소로 접속해서 위에서 만든 문서가 나오면

정상적으로 웹서버가 설치된 것이다.

http://192.168.20.165/


=========================================================================


===============================================================================

LAB> yum 사용법

- yum 의 실행부분에서 출력되는 메세지를 다음 프로세스인 head 로

  넘겨준다. 이때 head 넘겨준 메세지를 30줄만 보여주게 설정한다.

# yum | head -30

===============================================================================

===============================================================================

LAB> yum 전체 패키지 리스트(단일패키지)


# yum list

===============================================================================

===============================================================================

LAB> yum 전체 패키지 그룹 리스트(그룹단위)


# yum grouplist

===============================================================================

===============================================================================

LAB> yum 을 이용한 패키지 설치 (단일패키지)



- mc 패키지가 설치가 되었는지 확인한다.

- 파일이 없다면 설치된 것이고 있다면 패키지명과 버전이 나올 것이다.

# rpm -qf /usr/bin/mc

mc-4.6.1a-35.el5

# rpm -q mc


- mc 패키지를 삭제한다.

# rpm -e mc


- mc 패키지를 yum으로 설치한다.

# yum -y install mc


- mc 명령어를 확인한다.

# which mc



- mc 패키지를 확인한다.

# rpm -q mc

===============================================================================


===============================================================================

LAB> yum 을 이용한 패키지 삭제 (단일패키지)


- mc 패키지를 yum을 이용해서 삭제한다.

# yum remove mc


- mc 패키지를 확인한다.

- mc 패키지가 삭제가 되었다면 해당 정보가 출력이 안된다.

# rpm -q mc

package mc is not installed

# which mc

===============================================================================


===============================================================================

LAB> yum 을 이용한 패키지그룹 설치 (그룹단위)

- DB 종류

! Oracle  : 1521 

! MS-SQL  : 1433

! MySQL   : 3306

! Sybase 

! DB2

! MariaDB

! PostgreSQL

! MongoDB


# which mysql

# which mysqld

# LANG=C yum grouplist

# yum -y groupinstall "MySQL Database"

# rpm -q mysql

# rpm -q mysql-server


- mysql 데몬(서비스)을 시작하는 명령어

# /etc/init.d/mysqld start


- 네트워크 상태를 보는 명령어 (mysql 이 사용하는 포트 : 3306)

# netstat -nltp   

# mysql

mysql> show databases;

mysql> quit


- mysql 데몬(서비스)을 종료하는 명령어

# /etc/init.d/mysqld stop

# yum -y groupremove "MySQL Database"

===============================================================================


===============================================================================

LAB> yum 을 이용한 업데이트 테스트

!!! 커널은 업데이트를 하면 이전 커널은 삭제하지 않는다.

!!! 커널이 아닌 일반 애플리케이션들은 업데이트를 하면 자동으로 이전 파일들은 

!!! 없어지고 새로 설치한 패키지의 파일이 대체가 된다. 


# rpm -q coreutils

coreutils-5.97-34.el5


# yum -y update kernel

# rpm -q kernel

kernel-2.6.18-308.el5

kernel-2.6.18-402.el5


- coreutils 패키지를 업데이트하되 정상출력과 비정상출력의 메세지를

  /dev/null(블랙홀:쓰레기소각장)으로 보내서 메세지를 감춘다.

  다시 얘기해서 정상/비정상 출력을 감추고 싶다면 아래 명령어를 사용한다.

  > /dev/null 2>&1  or  2> /dev/null 1>&2

  정상 출력을 감추고 싶으면 ?  ls > /dev/null

  비정상 출력을 감추고 싶으면 ?  ls 2> /dev/null

  동시에 감추고 싶으면 ?  ls > /dev/null 2>&1



# yum -y update coreutils > /dev/null 2>&1

# rpm -q coreutils

coreutils-5.97-34.el5_8.1


# uname -a

Linux localhost.localdomain 2.6.18-308.el5 #1 SMP ...

# reboot


- 새로운 커널로 부팅을 했다면 이전 커널은 확인해서 필요없다면 삭제하는 것이 좋다.

# uname -a

Linux localhost.localdomain 2.6.18-402.el5 #1 SMP ...

# rpm -e kernel-2.6.18-308.el5

# rpm -q kernel

kernel-2.6.18-402.el5


===============================================================================


===============================================================================

LAB> yum 을 이용한 단일 패키지 설치하기 

!!!

!!! - 패키지명을 정확하게 알지 못하면 아래 -q 옵션을 사용하면 안된다.

!!! # rpm -q core

!!! package core is not installed

!!! 

!!! - -qa 옵션을 사용해서 전체 패키지를 검사한 후 파이프로 grep 이 

!!! - 잡을 수 있도록 넘겨야 한다.

!!! # rpm -qa | grep core

!!! svrcore-4.0.4-3.el5

!!! policycoreutils-1.33.12-14.8.el5

!!! coreutils-5.97-34.el5_8.1


# ifconfig 

# route -n

# cat /etc/resolv.conf

VBox 이더넷연결 확인


# ping -c 2 kr.yahoo.com    <-- 인터넷 연결 확인

# yum -y install vim-enhanced  <-- vim-enhanced 패키지 설치

# rpm -qa | grep cvs  <-- 전체 설치된 패키지에서 cvs 만 검색

cvs-1.11.22-11.el5

# yum -y remove cvs   <-- 설치된 cvs 패키지 삭제 

# yum -y install cvs  <-- 삭제된 cvs 패키지 설치


===============================================================================


===============================================================================

LAB> yum 을 이용한 그룹 패키지 설치하기 


# yum -y grouplist

# yum -y groupinstall "패키지 그룹명"


ex) yum -y groupinstall "Development tools"


===============================================================================


===============================================================================

LAB> yum 을 이용한 그룹 패키지 삭제하기 

# yum -y groupremove "패키지 그룹명"


ex) yum -y groupremove "Development tools"

===============================================================================


===============================================================================

LAB> yum 을 이용한 패키지 검색하기 

# yum search httpd

===============================================================================


===============================================================================

LAB> yum 을 이용한 업데이트 확인하기


# yum check-update

===============================================================================


===============================================================================

LAB> yum 설정파일과 저장소 설정파일 확인하기

!!! 사용자가 내용을 수정할 수 있다. !!!


# ls -l /etc/yum.conf 

-rw-r--r-- 1 root root 379 Jul 26  2012 /etc/yum.conf

# ls -l /etc/yum.repos.d/

total 36

-rw-r--r-- 1 root root 1926 Jan 12  2013 CentOS-Base.repo

-rw-r--r-- 1 root root  636 Jan 12  2013 CentOS-Debuginfo.repo

-rw-r--r-- 1 root root  626 Jan 12  2013 CentOS-Media.repo

-rw-r--r-- 1 root root 6846 Jan 12  2013 CentOS-Vault.repo

===============================================================================

===============================================================================

LAB> yum 을 이용한 패키지 검색하기 

!!! 실무에 적용을 잘하기 위해서는 패키지명을 잘 알고 있으면 도움이 된다.


# which useradd

# rpm -qf /usr/sbin/useradd


# rpm -qf `which useradd`

# rpm -qi shadow-utils

# rpm -ql shadow-utils | grep bin

===============================================================================

===============================================================================

LAB> 소스 rpm 파일 설치하기

!!! rpmbuild 명령어를 이용해서 ~.src.rpm -> ~.i386.rpm !!!


!!! 아래 디렉토리가 없다면 생성한다.

# cd /usr/src/redhat


- BUILD  RPMS  SOURCES  SPECS  SRPMS 디렉토리가 없다면 생성

# mkdir BUILD  RPMS  SOURCES  SPECS  SRPMS

# cd RPMS

# mkdir athlon  geode  i386  i486  i586  i686  noarch

/usr/src/redhat

           |-- BUILD

           |-- RPMS

           |   |-- athlon

           |   |-- geode

           |   |-- i386

           |   |-- i486

           |   |-- i586

           |   |-- i686

           |   `-- noarch

           |-- SOURCES

           |-- SPECS

           `-- SRPMS



- rpm-build 패키지가 없다면 yum 을 이용해서 설치한다.

# rpm -qf `which rpmbuild`

rpm-build-4.4.2.3-36.el5_11



o src.rpm 파일을 i386.rpm 으로 컴파일/build 하기 위한 순서


-- 순서 --

1. rpm 소스 파일 다운로드

2. 소스 파일 설치

3. rpm 디렉토리로 이동

4. rpmbuild로 컴파일

-- 순서 --


1. rpm 소스 파일 다운로드

# cd

# wget http://vault.centos.org/5.8/os/SRPMS/mc-4.6.1a-35.el5.src.rpm


2. 소스 파일 설치

# rpm -Uvh mc-4.6.1a-35.el5.src.rpm


3. rpm 디렉토리로 이동

# cd /usr/src/redhat

# tree -L 3 *


4. rpmbuild로 컴파일

- rpmbuild 로 컴파일시 의존성 에러가 발생하면 의존성에 관련된 

  패키지들을 먼저 설치하고 rpmbuild를 다시 실행한다.

  # yum -y install glib2-devel e2fsprogs-devel slang-devel


# cd SPECS

# rpmbuild -ba mc.spec

# ls ../RPMS/i386/

mc-4.6.1a-35.i386.rpm  mc-debuginfo-4.6.1a-35.i386.rpm


===============================================================================


===============================================================================

LAB> 소스 rpm 파일 설치하기

coreutils source rpm 패키지를 가져와서 rpmbuild 명령어를 이용해서 

rpm 파일을 생성해본다.


# wget http://vault.centos.org/5.8/os/SRPMS/coreutils-5.97-34.el5.src.rpm

# rpm -Uvh coreutils-5.97-34.el5.src.rpm

# cd /usr/src/redhat/SPECS

# rpmbuild -ba coreutils.spec 


- coreutils-5.97-34.el5.src.rpm 파일을 가지고 나온 컴파일된 파일이다.

# ls ../RPMS/i386

coreutils-5.97-34.i386.rpm  

===============================================================================

===============================================================================

LAB> 자신의 소스를 생성해서 rpm 파일로 만들어보자.

*** SPEC 파일을 만드는 것이 중요하다. ***

*** 구글에서 찾으면 많이 나옴. ***

===============================================================================


===============================================================================

LAB> 명령어에 대한 패키지를 구해서 하나의 파일로 저장해보자.

!!! 나중에 프린터로 뽑아서 분석하면 도움이 된다.

!!! /bin /usr/bin /sbin /usr/sbin


- 자신의 홈디렉토리에 bin 디렉토리를 만들고 이동한다.

# mkdir ~/bin ; cd ~/bin


- 실행권한의 package_list.sh 파일을 생성한다.

# install /dev/null package_list.sh


- 자동화 파일(쉘스크립트)를 작성한다.

# vi package_list.sh

-- package_list.sh --

#!/bin/sh


dirlist="/bin/* /usr/bin/* /sbin/* /usr/sbin/*"

savefile=/root/package_list.txt


cp /dev/null $savefile


for file in $dirlist

do

  echo "-- $file --" >> $savefile

  package_name=$(rpm -qf $file)

  echo "package name : $package_name" >> $savefile 

  printf "\n" >> $savefile

  rpm -qi $package_name >> $savefile

  echo "" >> $savefile

done

-- package_list.sh --


# ./package_list.sh


- 저장된 정보를 이용해서 각 명령어가 속한 패키지명과 

  패키지에 대한 정보를 확인하고 종료한다.

# vi ../package_list.txt

  :

  :


===============================================================================





===================================================================

LAB> gzip 과 bzip2 관련 명령어 살펴보기


# ls -li `which gzip`

191851 -rwxr-xr-x 3 root root 63316 Jul 22  2011 /bin/gzip

# ls -li `which gunzip`

191851 -rwxr-xr-x 3 root root 63316 Jul 22  2011 /bin/gunzip

# ls -li `which zcat`

191851 -rwxr-xr-x 3 root root 63316 Jul 22  2011 /bin/zcat


# ls -li `which bzip2`

32947 -rwxr-xr-x 1 root root 36180 Sep 21  2010 /usr/bin/bzip2

# ls -li `which bunzip2`

32776 lrwxrwxrwx 1 root root 5 Oct 17 10:50 /usr/bin/bunzip2 -> bzip2

# ls -li `which bzcat`

32777 lrwxrwxrwx 1 root root 5 Oct 17 10:50 /usr/bin/bzcat -> bzip2



# find /usr/local/java/ -name "*jar"

# find /usr/lib -name "*.a"

===================================================================



+ Recent posts