- 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/
- 다운로드 : http://www.ubuntu.com/getubuntu/download-server
- 라이선스 : 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 파일을 열어 앞에 다음을 추가한 후 다시 위 명령을 실행 한다.
- sudo apt-get update : 이 명령은 최소한 한번은 실행 되어야 한다.
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-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 또는 플랫폼 이름
- packageName_major.minor-revision-arch.deb
패키지 파일 구조
- 압축 풀기 : ar -x ~.deb
- control.tar.gz
- /DEBIAN/* 파일이 저장됨
- conffiles, control, preinst, postinst, prerm, postrm, md5dums, rules
- data.tar.gz
- /* 중 /DEBIAN/* 파일을 제외한 파일이 저장됨
- /* 중 /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
- 설치 후 모든 제어파일은 /var/lib/dpkg/info 에 보관됨
- DEBIAN 폴더 : 제어파일, control.tar.gz으로 압축됨, data.tar.gz에는 포함되지 않음
- 패키지 생성
- pnus-dev 폴더 : 설치 시 /(root) 아래에 설치가 됨, data.tar.gz으로 압축됨
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