- Ubuntu Server 설치 가이드
- Ubuntu Server 설치
- Ubuntu Server 설치 후 설정
- Ubuntu Server Network 설정
- 주요 SW 설치
- Ubuntu Server용 프로그램
- Java
- MySQL
- PostgreSQL
- Apache Http Server
- PHP 설치
- phpmyadmin 설치
- Tomcat 설치
- DNS 설치
- 관리 SW 설치
- sendmail을 통한 gmail 연동
- 사용자 가이드
- Ubuntu Package 관리
- 관리자 가이드
- Database 백업 및 복구
- DEB 패키지 생성
- 저장소 변경
- 사설 저장소
- 한글 설정 등
- 보안, Security
- Scannedonly scalable samba anti-virus module
- 성능, Performance
- 안정성, Stability
- 확장성, Scalability
- 관리, Management
- Metal as a Service
- 참고 문헌
오픈소스 OS인 우분투(ubuntu)와 관련된 사항을 정리한다.
홈페이지 : http://www.ubuntu.com/
라이선스 : Free
플랫폼 : Windows, Linux
Ubuntu Server 설치 가이드
VirtualBox에서 Ubuntu Server 9.04를 설치할 경우, VirtualBox에서 운영체제를 Linux로 버전을 Other Linux로 설정한 후 설치 한다.
Ubuntu Server 설치
다운로드 사이트에서 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 프록시가 없으므로 비워두고 "계속"을 선택한다.
"프로그램 선택 및 설치"에서 "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 설정
[Ubuntu Server Network 설정](Network.md#Ubuntu Server Network 설정.md)
주요 SW 설치
다음 작업을 하기 전에 최소한 한번은 "sudo apt-get update"가 실행 되어야 한다.
참고 문헌
LAMP, APM 설치 (Linux Apache, MySQL, PHP 설치 ), 2010.4 : Source로 SW 설치하는 방법을 설명
Ubuntu Server용 프로그램
[OpenSSH](OpenSSH.md#Ubuntu용 설치 가이드.md) : 보안 접속
ufw (Uncomplicated FireWall) : Linux용 방화벽 S/W
[vsftp](vsftp.md#Ubuntu용 설치 가이드.md) 설치 : FTP Server
samba : 파일 및 프린터 공유 서비스
sudo apt-get install samba
Java
[JDK](JDK.md#Ubuntu용 설치 가이드.md) 설치
MySQL
[MySQL](MySQL_5.0.51.md#Linux용 설치 가이드.md) 설치
PostgreSQL
[PostgreSQL](PostgreSQL.md#Linux용 설치 가이드.md) 설치
Apache Http Server
[Apache Http Server](Apache_HTTP_Server_2.2.8.md#Linux용 설치 가이드.md) 설치
PHP 설치
[PHP](PHP_5.2.5.md#Linux용 설치 가이드.md) 설치
phpmyadmin 설치
[phpMyAdmin](phpMyAdmin.md#Linux용 설치 가이드.md) 설치 : MySQL 관리용 웹 서비스
Tomcat 설치
[Apache Tomcat](Apache Tomcat 6.0.16.md#Linux용 설치 가이드.md) 설치
DNS 설치
참고 문헌
관리 SW 설치
sendmail을 통한 gmail 연동
[Gmail for Ubuntu Server](Google Apps.md#Gmail for Ubuntu Server.md)
사용자 가이드
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}" = "" ](_"${EXT}"_=_""_.md)
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
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
사설 저장소 생성
사설 저장소의 주소는 http://localhost/apt 로 할 경우 (Document Root. /var/www)
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/](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](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 가 실행됨
참고 문헌
한글 설정 등
[Ubuntu Server 한글 설정](문자셋과_인코딩.md#Ubuntu Server 한글 설정.md)
보안, 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
참고 문헌
Ubuntu : 오픈소스 비즈니스 컨설팅 - Ubuntu
bash : Linux용 Bash Shell Script
Ubuntu 초기 설정 : Ubuntu 관련 많은 정보를 수집한 사이트
ubuntu/Draco : Ununtu에 대해서 잘 정리된 블로그
Appnr : Ubuntu용 무료 소프트웨어를 모아 놓은 사이트
우분투 9.04 잔티 자칼롭(Jaunty Jackalope)에서 달라진 점
[[Category:Virtual Appliance|Category:Virtual Appliance]]
[[Category:Linux|Category:Linux]]분류: OS