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


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 프록시가 없으므로 비워두고 "계속"을 선택한다.
    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 설정

  • [Ubuntu Server Network 설정](Network.md#Ubuntu Server Network 설정.md)

주요 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

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
  .


저장소 변경

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/](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



참고 문헌


최종 수정일: 2022-10-24 19:17:28

이전글 :
다음글 :
상단 menu
arrow_back_ios
arrow_forward_ios