Ubuntu Server

오픈소스 비즈니스 컨설팅
Pnuskgh (토론 | 기여)님의 2015년 9월 14일 (월) 13:35 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 가기 검색하러 가기

오픈소스 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

참고 문헌