Ubuntu Server
오픈소스 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 계정외에 사용할 아이디와 암호를 등록한다.
- "패키지 관리자 설정"에서 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 설정
주요 SW 설치
- 다음 작업을 하기 전에 최소한 한번은 "sudo apt-get update"가 실행 되어야 한다.
- 참고 문헌
- LAMP, APM 설치 (Linux Apache, MySQL, PHP 설치 ), 2010.4 : Source로 SW 설치하는 방법을 설명
Ubuntu Server용 프로그램
- OpenSSH : 보안 접속
- ufw (Uncomplicated FireWall) : Linux용 방화벽 S/W
- vsftp 설치 : FTP Server
- samba : 파일 및 프린터 공유 서비스
- sudo apt-get install samba
Java
- JDK 설치
MySQL
- MySQL 설치
PostgreSQL
- PostgreSQL 설치
Apache Http Server
PHP 설치
- 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
- 참고 문헌
사설 저장소
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/ #--- 상세 설명
- 패키지 등록/삭제
- 패키지(.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
참고 문헌
- Ubuntu : 오픈소스 비즈니스 컨설팅 - Ubuntu
- bash : Linux용 Bash Shell Script
- 우분투 사용 참조 링크, 2008.11
- Ubuntu 초기 설정 : Ubuntu 관련 많은 정보를 수집한 사이트
- Ubuntu Server - SSH, APM, DNS, FTP 설치하기
- ubuntu/Draco : Ununtu에 대해서 잘 정리된 블로그
- VMware Server 2.0 가상 머신 만들기
- 리눅스 우분투(ubuntu) 총정리(링크자료)
- Appnr : Ubuntu용 무료 소프트웨어를 모아 놓은 사이트
- Debian 패키지
- 글꼴 패키징과 PPA 등록