Ubuntu Server

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

오픈소스 OS인 우분투(ubuntu)와 관련된 사항을 정리한다.


Ubuntu Server 설치 가이드

VirtualBox에서 Ubuntu Server 9.04를 설치할 경우, VirtualBox에서 운영체제를 Linux로 버전을 Other Linux로 설정한 후 설치 한다.

Ubuntu Server 설치

  • "Server Edition" 탭을 선택한다.
  • Choose a version에서 "Ubuntu 9.04 Server"를 선택한다.
  • Choose a download location near you에서 "Korea, Republic of Daum Communications Corp."를 선택한다.
  • "Begin Download" 버튼을 선택하여 설치 파일("ubuntu-9.04-server-i386.iso")을 다운로드 한다.
다운로드


  • 다운로드 받은 iso 파일로 설치 CD를 작성한 후 설치를 시작한다.
  • ISO 파일로 CD를 생성해 주는 프로그램이 없을 경우, isoburn (GPL)을 사용하라.
  • 이 가이드에서는 편의상 VMware 환경에서 Ubuntu Server를 설치한다. VMware Server


  • "Language"에서 "한국어"를 선택한다.
언어 선택


  • "F3" 키를 눌러 표시되는 "키 맵"에서 "korea"를 선택한다.
키 맵 선택


  • "F4" 키를 모드 선택을 표시하고 "일반 모드"를 선택한다.
  • 일반 모드 : 일반적인 형태의 설치 모드
  • 최소 시스템 설치 : 최소 시스템 설치 모드
  • Install a minimal virtual machine : Virtual Appliance를 위한 설치 모드
모드 선택


  • "Install Ubuntu Server"를 선택하여 설치를 시작한다.
설치 시작


  • 네트워크 설정에서 호스트 이름을 등록한 후 "계속"을 선택한다.
호스트 이름


  • 디스크 파이션에서 "자동 - 디스크 전체 사용"을 선택한다.
디스크 파티션


  • 파티션할 디스크를 선택한다.
디스크 선택


  • "예"를 선택하여 위에서 선택한 디스크를 포맷한다.
디스크 포맷


  • 사용자 및 암호 설정에서 root 계정외에 사용할 아이디와 암호를 등록한다.
  • 사용자의 전체 이름 등록
  • 사용자 이름 등록
  • 사용자 암호 등록
  • Encrypted private directory? 에서 "아니오"를 선택한다.
사용자 및 암호


  • "패키지 관리자 설정"에서 HTTP 프록시가 없으므로 비워두고 "계속"을 선택한다.
Proxy


  • "프로그램 선택 및 설치"에서 "Install security updates automatically"를 선택한다.
보안 업데이트


  • "소프트웨어 선택"에서 설치할 소프트웨어를 선택한다. 여기서는 아무것도 선택하지 않는다.
  • DNS server :
  • LAMP server : Apache HTTP Server, MySQL, PHP/Perl/Python
  • Mail server : postfix
  • OpenSSH server : openssh
  • PostgreSQL database : postgreSQL
  • Print server :
  • Samba file server : samba
  • Tomcat Java server : tomcat
  • virtual Machine host :
소프트웨어 선택


  • "설치 마치기"에서 "계속"을 선택하여 리부팅 한다.


Ubuntu Server 설치 후 설정

  • Ubuntu Server의 설치 프로그램과 패치 파일의 정보를 갱신 한다.
  • sudo apt-get update : 이 명령은 최소한 한번은 실행 되어야 한다.
  • 오류가 발생할 경우 vi /etc/apt/sources.list 파일을 열어 kr.archive.ubuntu.com 을 us.archive.ubuntu.com 로 변경한 후 다시 위 명령을 실행 한다.
  • 설치 패키지를 찾을 수 없을 경우 vi /etc/apt/sources.list 파일을 열어 앞에 다음을 추가한 후 다시 위 명령을 실행 한다.
deb http://ftp.daum.net//ubuntu/ lucid main restricted
deb-src http://ftp.daum.net//ubuntu/ lucid main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://ftp.daum.net//ubuntu/ lucid-updates main restricted
deb-src http://ftp.daum.net//ubuntu/ lucid-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## universe WILL NOT receive any review or updates from the Ubuntu security
## team.
deb http://ftp.daum.net//ubuntu/ lucid universe
deb-src http://ftp.daum.net//ubuntu/ lucid universe
deb http://ftp.daum.net//ubuntu/ lucid-updates universe
deb-src http://ftp.daum.net//ubuntu/ lucid-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## team, and may not be under a free licence. Please satisfy yourself as to 
## your rights to use the software. Also, please note that software in 
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://ftp.daum.net//ubuntu/ lucid multiverse
deb-src http://ftp.daum.net//ubuntu/ lucid multiverse
deb http://ftp.daum.net//ubuntu/ lucid-updates multiverse
deb-src http://ftp.daum.net//ubuntu/ lucid-updates multiverse
  • 설치 후 Ubuntu Server에 설치된 팩키지를 최신 버전으로 upgrade 한다.
  • 일반 사용자 아이디로 로그인 한다.
  • sudo apt-get upgrade
  • sudo shutdown -P now
  • root 사용자의 암호는 다음 명령을 사용하여 설정 한다.
sudo passwd root
  • 네트워크가 제대로 연결되지 않을 경우, 이 페이지 아래에 있는 부분을 참조하여 설정 한다.


Ubuntu Server Network 설정

주요 SW 설치

  • 다음 작업을 하기 전에 최소한 한번은 "sudo apt-get update"가 실행 되어야 한다.
  • 참고 문헌

Ubuntu Server용 프로그램

  • ufw (Uncomplicated FireWall) : Linux용 방화벽 S/W
  • vsftp 설치 : FTP Server
  • samba : 파일 및 프린터 공유 서비스
  • sudo apt-get install samba

Java

MySQL

PostgreSQL

Apache Http Server

PHP 설치

phpmyadmin 설치

  • phpMyAdmin 설치 : MySQL 관리용 웹 서비스

Tomcat 설치

DNS 설치

  • 참고 문헌

관리 SW 설치

sendmail을 통한 gmail 연동

사용자 가이드

  • shutdown
sudo shutdown -P now
  • 서비스 기동/종료
  • /etc/init.d/ssh [start|stop|restart]

Ubuntu Package 관리

  • 패키지 조회
  • apt-cache search ~ : 패키지 조회
  • apt-cache pkgnames [패키지명 prefix] : 패키지 조회
  • apt-cache showpkg [패키지명] : 패키지의 상세 정보를 표시한다.
  • dpkg -l : 설치된 패키지의 목록을 가져온다. dpkg -l '*key*'
  • dpkg -s 패키지명 : 패키지의 상세 정보를 보여 준다.
  • apt-get update : 최신 버전의 패키지 목록을 가져온다.
  • apt-get install [패키지명] : 패키지를 설치한다. 와일드문자 입력도 가능함
  • apt-get upgrade : 모든 패키지를 최신 버전으로 업그레이드 한다.
  • apt-get remove [패키지명] : 패키지를 삭제한다.
  • apt-get autoremove [패키지명] : 의존 관계에 있는 패키지까지 모두 삭제한다.


  • apt-get source 패키지명 : 패키지의 소스를 가져온다.
  • cd foo_version
  • debian/rules build
  • debian/rules binary : 소스로 패키지 빌드
  • dpkg -i ../foo_version-revision_arch.deb : 빌드된 패키지 설치
  • 참고 문헌

관리자 가이드

Database 백업 및 복구

  • root로 로그인 한다.
cd ~appliance/shares
mkdir backup
chown appliance:appliance backup

cd /root
mkdir bin
cd bin
backup.bash, restore.bash를 여기에 복사 한다.
  • LAMP 환경에서
chmod 744 *.bash
crontab -e
 # 분 시 일 월 요일 명령어
 0 1 * * * /root/bin/backup.bash 를 등록 한다.
  • LAPP 환경에서
chmod 744 *.bash
chown postgres:postgres *.bash
su - postgres
crontab -e
 # 분 시 일 월 요일 명령어
 0 1 * * * /root/bin/backup.bash 를 등록 한다.
  • crontab -l 로 등록된 결과를 확인할 수 있다.
  • backup.bash
#!/bin/bash
/usr/bin/clear
/bin/echo
/bin/echo "Virtual Appliance 백업 시작"
/bin/echo
### ------------------------------------ 환경 변수 설정 ------------------------
                                        # 백업용 base 디렉토리
DIR_BACKUP_BASE="/home/appliance/shares/backup"
DIR_FOLDER=`/bin/date +%Y%m%d_%H%M%S`   # 백업용 폴더 (reserved)
EXT=`/bin/date +%Y%m%d_%H%M%S`          # 백업 구분자
CNT=30                                  # 최대 백업 파일 갯수

if [ -e "/usr/bin/mysql" ]
then
  DB_TYPE="MySQL"                       # 데이터베이스 종류
  DB_BACKUP_EXT="sql"                   # 데이터베이스 백업 확장자
  DB_USER="root"
  DB_PASSWD="vmplayer123"
else
  DB_TYPE="PostgreSQL"
  DB_BACKUP_EXT="sql"
  DB_NAME="drupaldb"
  DB_USER="appliance"
fi

### ------------------------------------ DB 백업 -------------------------------
cd ${DIR_BACKUP_BASE}

/bin/echo
/bin/echo ${DB_TYPE} 데이터베이스 백업
/bin/echo ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT} 파일 백업

if [ ${DB_TYPE} = "MySQL" ]
then
  /usr/bin/mysqldump --user=${DB_USER} --password=${DB_PASSWD} --all-databases \
      > ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT}
  /bin/chown appliance:appliance db_backup_${EXT}.${DB_BACKUP_EXT}
else
  if [ ${USER} = "postgres" ]
  then
    /usr/bin/pg_dumpall -f ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT}
  else
    /usr/bin/pg_dump -h 127.0.0.1 -U ${DB_USER} -W -b -f \
        ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT} ${DB_NAME}
    /bin/chown appliance:appliance db_backup_${EXT}.${DB_BACKUP_EXT}
  fi
  chmod 666 db_backup_${EXT}.${DB_BACKUP_EXT}
fi

### ------------------------------------ 오래된 백업 파일 정리 -----------------
/bin/echo
FILE_CNT=`ls -alF db_backup_*.${DB_BACKUP_EXT} | wc --lines`
while [ ${CNT} -lt ${FILE_CNT} ]
do
  FILE_NAME=`/bin/ls -alF db_backup_*.${DB_BACKUP_EXT} \
      | /usr/bin/nawk '{ if ( NR == 1 ) print $8 }'`
  /bin/rm ${FILE_NAME}
  /bin/echo ${FILE_NAME} 백업 파일 삭제

  FILE_CNT=`/bin/ls -alF db_backup_*.${DB_BACKUP_EXT} | /usr/bin/wc --lines`
done

### ------------------------------------ 백업 종료 및 정보 제공 ----------------
/bin/echo
/bin/ls -alF db_backup_*.${DB_BACKUP_EXT} | /usr/bin/nawk '{print $8 " : " $5 " bytes"}'
/bin/echo `ls -alF db_backup_*.${DB_BACKUP_EXT} | /usr/bin/wc --lines` 백업 파일이 존재함

/bin/echo
/bin/echo "Virtual Appliance 백업 종료"
/bin/echo
  • restore.bash 복구할_백업_파일_일자(예, 20090217_085456)
#!/bin/bash
/usr/bin/clear
/bin/echo
/bin/echo "Virtual Appliance 복구 시작"
/bin/echo

### ------------------------------------ 환경 변수 설정 ------------------------
                                        # 복구용 base 디렉토리
DIR_BACKUP_BASE="/home/appliance/shares/backup"
DIR_FOLDER=$1                           # 복구용 폴더 (reserved)
EXT=$1                                  # 복구 구분자

if [ -e "/usr/bin/mysql" ]
then
  DB_TYPE="MySQL"                       # 데이터베이스 종류
  DB_BACKUP_EXT="sql"                   # 데이터베이스 복구 확장자
  DB_USER="root"
  DB_PASSWD="vmplayer123"
else
  DB_TYPE="PostgreSQL"
  DB_BACKUP_EXT="sql"
  DB_NAME="drupaldb"
  DB_USER="appliance"
fi

### ------------------------------------ 입력 조건 확인 ------------------------
cd ${DIR_BACKUP_BASE} 

if [[ "${EXT}" = "" ]]
then
  /bin/echo
  /bin/echo 전체 백업 파일 목록
  /bin/ls -alF db_backup_*.${DB_BACKUP_EXT} | /usr/bin/nawk '{print $8 " : " $5 " bytes"}'
  /bin/echo `ls -alF db_backup_*.${DB_BACKUP_EXT} | /usr/bin/wc --lines` 백업 파일이 존재함

  /bin/echo
  /bin/echo "Virtual Appliance 복구 종료"
  /bin/echo
  exit 0
fi

if [ -e ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT} ]
then
  /bin/echo
else
  /bin/echo
  /bin/echo ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT}
  /bin/echo "복구 파일이 존재하지 않습니다." 

  /bin/echo
  /bin/echo "Virtual Appliance 복구 종료"
  /bin/echo
  exit 1
fi

### ------------------------------------ DB 복구 -------------------------------
/bin/echo
/bin/echo ${DB_TYPE} 데이터베이스 복구
/bin/echo ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT} 백업 파일 복구

if [ ${DB_TYPE} = "MySQL" ]
then
  /usr/bin/mysql --user=${DB_USER} --password=${DB_PASSWD} \
      < ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT}
else
  if [ ${USER} = "postgres" ]
  then
    /usr/bin/psql -d ${DB_NAME} <  ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT}
  else
    /usr/bin/psql -h 127.0.0.1 -U ${DB_USER} -W -d ${DB_NAME} \
        <  ${DIR_BACKUP_BASE}/db_backup_${EXT}.${DB_BACKUP_EXT} 
  fi
fi

### ------------------------------------ 복구 종료 및 정보 제공 ----------------
/bin/echo
/bin/echo "Virtual Appliance 복구 종료"
/bin/echo

DEB 패키지 생성

DEB 패키지 생성은 pnus-dev라는 패키지를 만드는 것으로 하여 설명한다.

  • 패키지 파일 명명 규칙
  • packageName_major.minor-revision-arch.deb
  • major : 버전의 메이저 번호
  • minor : 버전의 마이너 번호
  • revision : 버전의 리비전 번호
  • arch : 아키텍처, i386, all, amd64 또는 플랫폼 이름
  • 패키지 파일 구조
  • 압축 풀기 : ar -x ~.deb
  • control.tar.gz
  • /DEBIAN/* 파일이 저장됨
  • conffiles, control, preinst, postinst, prerm, postrm, md5dums, rules
  • data.tar.gz
  • /* 중 /DEBIAN/* 파일을 제외한 파일이 저장됨


  • Debian 패키지를 생성하기 위해 필요한 패키지
  • dpkg, gcc, make, build-essential, dpkg-dev
  • Debian 패키지 생성을 위한 폴더 구조
  • pnus-dev 폴더 : 설치 시 /(root) 아래에 설치가 됨, data.tar.gz으로 압축됨
  • DEBIAN 폴더 : 제어파일, control.tar.gz으로 압축됨, data.tar.gz에는 포함되지 않음
  • 설치 후 모든 제어파일은 /var/lib/dpkg/info 에 보관됨
conffiles : 보통 /etc에 있는 설정 파일 목록, 패키지를 업그레이드해도 겹쳐 쓰지 않는 설정 파일임
control : deb 패키지의 메타 파일
preinst : 패키지 설치 전 실행될 script, 실행 권한이 있어야 함
postinst : 패키지 설치 후 실행될 script, 실행 권한이 있어야 함
prerm : 패키지 삭제 전 실행될 script, 실행 권한이 있어야 함
postrm : 패키지 삭제 후 실행될 script, 실행 권한이 있어야 함
md5sums : 사용자 컴퓨터에 설치될 파일들에 대한 MD5 checks
  • 패키지 생성
cd (pnus-dev 폴더의 상위 폴더)
dpkg-deb --build pnus-dev pnus-dev_0.0.1-i386.deb
  • /pnus-dev/DEBIAN/control 파일 구조
  • Package : 패키지 이름 (공백 안됨, 대소문자 구문)
  • Version : 패키지 버전
  • Priority : optional, high, low
  • Architecture : i386, amd64, all 또는 플랫폼 이름
  • Depends : 의존하는 패키지 명
  • cme-base (>= 1.2) : cme-base 패키지 1.2 버전 이상을 필요로 한다는 의미
  • 심볼 : 이하(>>), 또는 같거나 그 이하(<=), 완전히 같거나(=), 같거나 그 이상(>=), 또는 이상(>>)
  • Recommends : 추천하는 패키지 명
  • Suggests : 함께 사용하기에 유용한 패키지 명
  • Enhances : 이 패키지가 설치되었을 때 더 유용하게 되는 패키지 명
  • Pre-Depends : 먼저 설치되어야 하는 패키지 명
  • Conflicts : 충돌하는 패키지 명
  • Replaces : 교체될 패키지 명
  • Maintainer : 유지보수하는 사람
  • Installed-Size : 설치되는 크기
  • Description : 첫 줄에는 간단한 설명, 둘째 줄(첫 컬럼은 공백) 부터는 자세한 설명
  • control 파일 샘플 (Package가 여러개일 경우 빈 줄을 하나 주고 계속 쓰면 된다)
Package: pnus-dev
Version: 0.0.1
Architecture: all
Priority: optional
Section: web
Maintainer: pnuskgh <admin(골뱅이)jopenbusiness.com>
Description: pnuskgh Debian Package
 Debian Package sample
 .


  • Package간 변환
  • apt-get install alien
  • RPM 패키지를 DEB 패키지로 변환
    • alien -d xxxx.rpm
  • 설치 명령 : dpkg -i xxxx.deb
  • DEB 패키지를 RPM 패키지로 변환
  • alien -r xxxx.deb
  • 참고 문헌


저장소 변경

cp /etc/apt/sources.list ~/sources.list.old
sed -i 's/kr.archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list
diff ~/sources.list.old /etc/apt/sources.list | wc -l

APT 저장소

  • kr.archive.ubuntu.com
  • ftp.daum.net
  • ftp.neowiz.com

사설 저장소

Apache HTTP Server의 Document Root (/var/www/) 아래에 apt 폴더를 만들어 여기에 사설 저장소를 생성한다. 따라서 사설 저장소의 접속 정보는 http://localhost/apt 가 된다.

  • 사설 저장소 관리용 패키지 설치
root 사용자로 로그인 한다.
apt-get install reprepro


  • 사설 저장소 생성
cd /var/www
mkdir apt
cd apt
mkdir incoming             #--- 자동 업로드용 폴더
mkdir conf                 #--- 환경 설정 폴더
vi /var/www/apt/conf/distributions #--- 환경 설정 파일 작성
 Origin: pnuskgh          #--- 이름
 Label: Love Mountain     #--- 설명
 Suite: stable            #--- stable, unstable
 Codename: pnus           #--- 코드명
 Version: 0.1             #--- 버전
 Architectures: i386      #--- 아키텍처, i386, all source 등
 Components: main         #--- main, non-free contrib
 Description: pnuskgh, http://www.jopenbusiness.com/  #--- 상세 설명
  • 패키지 등록/삭제
  • 패키지(.deb 또는 .changes) 파일 등록
cd /var/www/apt
reprepro -Vb . includedeb pnus ~.deb  ###--- deb 패키지 등록
reprepro -Vb . include pnus ~.changes  ###--- changes 패키지 등록
  • 사설 저장소에서 패키지 삭제
reprepro -Vb . remove pnus 패키지명


  • 다른 서버에서 사설 저장소로 접속하여 사용하기
vi /etc/apt/sources.list
  deb     http://localhost/apt pnus main
apt-get update
  • 패키지 설치시 Control Script 실행 순서
apt-get install pnus-dev
 preinst  install     가 실행됨
 postinst configure   가 실행됨 (설치가 정상 처리 되었을 경우)
 postrm abort-install 가 실행됨 (설치시 오류가 발생 하였을 경우)
  • 패키지 업그레이드시 Control Script 실행 순서
apt-get install pnus-dev
 preinst  upgrade   가 실행됨
 postinst configure 가 실행됨
  • 패키지 삭제시 Control Script 실행 순서
apt-get remove pnus-dev
 prerm  remove 가 실행됨
 postrm remove 가 실행됨


  • 참고 문헌

한글 설정 등

보안, Security

  • 방화벽 (FW), IPS/IDS, Anti-Virus, Anti-Spam

Scannedonly scalable samba anti-virus module

http://olivier.sessink.nl/scannedonly/download.html

성능, Performance

  • 튜닝, 성능 테스트

안정성, Stability

  • 로깅, 모니터링, 백업 및 복구

확장성, Scalability

  • 이중화

관리, Management

Metal as a Service

참고 문헌