Rad Blog

Archive

소스 설치로 LAMP 실행환경 구축하기 (VM에서 리눅스 계열 OS를 인스턴스 생성하고 APM 소스 설치하기)

Untitled (2)


목표

  • 에러와 해결했던 내용을 기록하기
  • 리눅스 환경에 익숙해지기
  • 새롭게 알게된 것들을 알아보고 기록하기

자동 설치

  • Apache2 웹서버 설치
  • MySQL 서버 설치
  • PHP 설치
  • phpMyAdmin 설치

수동 설치

  • Apache2 웹서버 설치
  • MySQL 서버 설치
  • PHP 설치
  • PHP Admin 설치

Common

  1. 지켜야 하는 것 필수 패키지는 Compile 설치하지 않는다. 필수 패키지는 apt-get을 사용해서 설치한다.

  2. apt-get 다루는 방법 apt-get install [package-name] 명령을 사용한다. 필수 패키지는 아래의 웹 사이트를 통해 검색할 수 있다.

<아래>

https://packages.ubuntu.com/

아니면, 터미널 명령어를 사용한 자체 검색도 가능하다. 매우 편리하다. apt-cache search [keyword : 패키지 이름 | 공백 | 패키지 설명]

  1. 설치한 패키지를 최신 버전으로 관리하는 방법 apt-get update` 를 통해 최신 버전으로 업데이트 할 수 있다. 기타 자세한 명령어는 아래를 참고하도록 한다.

<아래>

https://manpages.ubuntu.com/manpages/bionic/man8/apt-get.8.html#options

  1. 패키지가 설치된 위치 /var/cache/apt/archive/

  2. 실행 환경 Ubuntu: 18.04 Apache: 2.4.52 Mysql: 8.0.19 PHP: 8.1.0


Apache2 웹서버 설치

  1. apt-get을 사용하여 prerequirements package 다운로드

아파치 컴파일에 필요한 패키지 목록

  • gcc (ANSI 호환, 버전 2.7.2 이상)

    그 외 (기본 필수 패키지 등)

    • make
    • curl 또는 wget 또는 lynx
    • gcc
    • g++
    • libexpat1-dev : XML parsing C library
    • net-tools : NET-3 networking toolkit
    • (선택) 시스템 시간 동기화를 위한 ntpdate나 xntpd
    $ sudo su
    apt-get install make
    apt-get install wget
    apt-get install curl
    apt-get install lynx
    apt-get install gcc
    apt-get install g++ 
    apt-get install libexpat1-dev
    apt-get install net-tools
    apt-get install ntpdate
    
    apt-get update
    
  1. curl, wget, lynx 중 택 1하여 Source를 다운로드

    가장 호기심이 가던 lynx 를 사용.

    lynx는 터미널을 실행한 후 apt-get lynx 를 입력하면 바로 설치가 가능하다.

    lynx 내부에서 h를 누르면 영어로 된 사용자 도움말을 볼 수 있다.

    아래의 두 웹 페이지를 각각 탐색한 후 최신 버전의 Source를 다운로드 한다.

    필요한 Source : apr, apr-util, pcre, httpd(apache)

    <아래>

    https://httpd.apache.org/download.cgi

    https://www.pcre.org/

    <탐색 시 화면>

    모든 화면은 포함하지 않았으며, 자세한 것은 lynx 도움말 메뉴를 이용한다(h)

    wget 또는 curl을 사용하고자 한다면, [curl | wget] [options...] <url>과 같이 쓸 수 있다.

Untitled (4)

Untitled (5)

  1. 다운받은 Source의 압축을 푼다.
```markdown
# usr/local/src/
apr-1.7.0.tar.bz2   httpd-2.4.52.tar.bz2
apr-util-1.6.1.tar.bz2  pcre-8.45.tar.bz2
```

다운 받은 압축 파일의 확장자가 `bz2` 이니 `tar xvf [파일명]` 으로 압축을 풀 수 있다.

각각의 파일 명을 대입하여 명령을 실행하고 나면 각 이름의 폴더가 생긴것이 확인된다.
  1. 각각의 Source 설치를 진행한다.

    Source 설치시 공통적인 순서가 있다.

    폴더로 이동한 후, Installation configmakemake install의 순서로 진행하게 된다.

    cd /usr/local/src/SourceFolder
    ./configure [Option]
    make
    make install
    

    각 Source 별 실행 명령은 다음와 같다.

    option : prefix = 컴파일 설치 위치

    # apr
    cd /usr/local/src/apr-1.7.0
    ./configure --prefix=/usr/local/apr
    make
    make install
    
    # apr-util
    cd /usr/local/src/apr-util-1.6.1
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
    make
    make install
    
    # pcre
    cd /usr/local/src/pcre-8.45
    ./configure --prefix=/usr/local/pcre
    make
    make install
    
    # httpd (apache)
    cd /usr/local/src/httpd-2.4.52
    ./configure --prefix=/usr/local/apache2.4.52 \
    --enable-module=so --enable-rewrite --enable-so \--with-apr=/usr/local/apr \--with-apr-util=/usr/local/apr-util \--with-pcre=/usr/local/pcre \--enable-mods-shared=all
    make
    make install
    

    단, apr 설치 진행중

    configure 명령어 입력시 아래와 같은 명령줄이 출력되는데, config.status: executing libtool commands rm: cannot remove 'libtoolT': No such file or directory 이는 삭제하는 명령에 불과하여 아무 문제가 되지 않으므로 무시해도 좋다.

  2. Apache 서버의 동작을 확인한다.

    # /usr/local/
    sudo apache2.4.52/bin/httpd -k start
    ps -ef | grep httpd | grep -v grep
    sudo netstat -anp | grep httpd
    sudo curl http://127.0.0.1
    
    # 실행 화면
    <html><body><h1>It works!</h1></body></html>
    

    또는 Linux Desktop 사용중이라면, 웹 브라우저로 다음 URL을 열어도 된다.

    (http://127.0.0.1)


MySQL 서버 설치

  1. 필수 패키지 설치 다운로드

    필수 패키지 목록

    CMake GNU make GCC 7.1 or Clang 5 C++ or C99 compiler SSL library (암호화 연결 지원용) Boost C++ libararies ncurses bison 2.1 또는 이상 (최신버전 권장)

    그 외 이미 앞 순서에서 설치된 패키지가 중복되므로 해당 필수 패키지는 생략하였다.

    $ sudo su
    apt-get update
    apt-get install cmake
    apt-get install libssl-dev
    apt-get install libboost-all-dev
    apt-get install libncurses-dev
    apt-get install bison 
    
    apt-get update
    

    단, 아래와 같은 에러가 발생한다면 (dpkg : 데비안에서의 패키지 관리 시스템 소프트웨어) E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

    sudo killall apt apt-get를 통해, 실행중인 프로세스가 있는지 확인하고 모두 종료시킨다. 그 다음 아래와 같이 관련 디렉토리를 삭제시킨 후, sudo apt update 명령을 실행한다.

    sudo rm /var/lib/apt/lists/lock
    sudo rm /var/cache/apt/archives/lock
    sudo rm /var/lib/dpkg/lock*
    sudo dpkg --configure -a 
    sudo apt update
    

    위 과정을 마무리 하고 나면, 정상적으로 동작함을 확인 할 수 있다.

  2. curl, wget, lynx 중 택 1하여 Source를 다운로드

지난번엔 lynx 를 사용했으니, 이번엔 curl 을 사용해 보자. 파일명을 그대로 사용하고 싶다면, curl -LO <url> 형태로 명령을 실행하면 된다.

```markdown
# usr/local/ // 이번에는 src 폴더가 아니라, 상위 폴더로 정했다. 압축 푼 폴더 내에서 설치 할 것이기 때문이다.
curl -LO [https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28.tar.gz](https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28.tar.gz)
tar xvfz [mysql-8.0.28.tar.gz](https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28.tar.gz)
```

CMake Warning at CMakeLists.txt:391 (MESSAGE): Could not find gcc-8

CMake Error at CMakeLists.txt:392 (MESSAGE): Please do 'apt install gcc-8 g++-8'

위와 같은 에러가 발생해서 하라는대로 진행했다.

이후 아래와 같은 에러가 발생했다.

Untitled (6)

연습 용도로 작은 용량을 부여한 가상 머신에서 일련의 과정을 진행한게 화근이였다. 기존에 16GB로 부여했더니 아니나 다를까, 잔여 용량을 확인하니 14GB정도 차 있는 상태더라. 에러가 발생에는 그에 상응하는 이유가 있다. 아래와 같은 순서로 용량을 키울 수 있다. (단, 아래는 Linux Destop인 경우에만 해당한다. Linux server는 별도의 명령어를 실행해야 하지만, GUI는 편리하기 때문에 사용해보기로 했다.)

  1. VboxManage의 경로를 찾는다.

  2. 내 가상머신의 vdi 파일의 이름을 포함한 경로를 적는다.

  3. 변경할 용량 수치를 입력한다. modifyhd [VboxManage의 경로] [vid경로] --resize [byte수]

  4. 가상머신 설정 > 저장소 > 추가 > 우분투 이미지 파일

Untitled (7)

  1. 가상머신 실행후 F12버튼을 눌러 CD-ROM 부트 모드로 진입
  2. Try Ubuntu 선택

Untitled (8)

  1. gparted 실행(파티션 관리 어플리케이션 GUI)

Untitled (9)

  1. 파티션 조절

Untitled (10)

Untitled (11)

Untitled (12)

가장 마지막으론 초록색 체크 버튼(Apply all Options)를 누른다.

Untitled (13)

이후 또다른 에러가 발생했다. 위와 같은 화면에서 멈추더니, g++-8: fatal error: Killed signal terminated program cc1plus 라는 문구가 나왔다. 혹시 몰라서 apt-get install —reinstall [package] 를 모두 해봤는데 해결되지 않았다. 일각에서는 메모리 문제라고 하여 메모리 최대 사용한도도 올려 보았는데 나중가서 같은 에러가 났다. 무엇때문인지 몰라 해본 것들은 다음과 같다.

  1. apt-get 패키지 재설치 또는 최신버전 업데이트
  2. 메모리 올리기
  3. 디스크 용량 늘리기
  4. 최신 버전(8.0.28)이 아닌 이전 버전(8.0.19) 사용하기

위의 과정을 거치니 정상적으로 make 명령을 수행하게 됬다.

다음으로 컴파일 환경 설정과 make, make install 순으로 명령을 실행한다.

8.0.19버전 설치시 아래와 같은 에러 메시지를 확인 할 수 있다.

- Downloading boost_1_70_0.tar.gz to /usr/local/mysql/boost -- Download failed, error: 22;"HTTP response code said error" CMake Error at cmake/boost.cmake:229 (MESSAGE): You can try downloading [https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz](https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz)

친절하게도 다운로드 링크가 나와 있으니 그대로 다운로드 받아서 설치한다. 설치 방법은 최상단의 Common목차에서 확인 할 수 있다. 단, ./configure의 option으로 위 항목을 추가해야 에러가 발생하지 않는다.

# /usr/local/mysql-8.0.19
mkdir mysql_setup
cd mysql_setup

/usr/local/mysql-8.0.19/mysql_setup# cmake \
.. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DSYSCONFDIR=/etc \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src/boost_1_70_0        //  boost 패키지를 위한 설정

make
make install

Untitled (14)

유달리 생각 이상으로 시간이 소모되는 작업이였다.

  1. Mysql 초기화
# usr/local/mysql-8.0.19/mysql_setup
# 그룹과 유저를 초기화
groupadd mysql
useradd -r -g mysql -s /bin/false mysql

# /usr/local/mysql/
mkdir mysql_data

# 권한부여
chown -R mysql:mysql /usr/local/mysql
chown mysql:mysql mysql_data
chmod 750 mysql_data

# DB 초기화
bin/mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

"A temporary password is generated for root@localhost: [임시 비밀번호]" 의 형태로, 
임시 비밀번호가 출력된다.
  1. 비밀번호 재설정과 서버 실행 확인
# /usr/local/mysql#
bin/mysqld_safe --user=mysql &
bin/mysql -u root -p
이전 과정에서 나왔던 임시 비밀번호를 입력한다.

# 비밀번호 재설정
ALTER USER 'root'@'localhost' IDENTIFIED BY '[바꿀 비밀번호]';

# 서버 열기 및 실행 확인
bin/mysql -u root -p
ps -ef | grep mysqld

PHP 설치

  1. 필수 패키지 설치
apt-get install libxml2-dev
apt-get install libjpeg-dev
apt-get install libpng-dev
apt-get install libsqlite3-dev
  1. 소스설치

# /usr/local#
wget https://www.php.net/distributions/php-8.1.0.tar.gz 
tar xvfz php-8.1.0.tar.gz

# /usr/local/php-8.1.0#

./configure \

--with-apxs2=/usr/local/apache2.4/bin/apxs \ 
--enable-mysqlnd \ 
--with-mysql-sock=mysqlnd \ 
--with-mysqli=mysqlnd \ 
--with-pdo-mysql=mysqlnd \ 
--with-imap-ssl \ 
--with-iconv \ 
--enable-gd \ 
--with-jpeg \ 
--with-libxml \ 
--with-openssl

make
make test
make install
  1. 연동 설정

/usr/local/apache2.4/conf

Untitled (15)

#mime_module에 위와 같이 작성한다.

  1. PHP 파일을 생성하여 아래와 같이 작성하고 저장한다.
# /usr/local/apache2.4/htdocs
 vi phpinfo.php

<?
php phpinfo();
?>

아래의 명령을 통해 잘 접속이 되는지 확인한다.


# /usr/local#
apache2.4/bin/httpd -k start
ps -ef | grep httpd | grep -v grep
sudo netstat -anp | grep httpd
sudo curl http://127.0.0.1

브라우저에서도 확인 할 수 있다.

Untitled (16)

PHPadmin은 간단하므로 이곳에 적는것은 생략한다.


What I learned

무엇을 왜 써야 하는가?

  • Q : Virtual Machine, Virtual Box(Oracle)? VM Ware? → VM Ware 는 본래 유료이나 15버전은 개인을 위한 무료 버전, 상업적인 용도로 사용 불가 → Virtual Box는 상업적 용도도 무관

    • 성능 : VM Ware > Virtual Box, VM Ware는 성능 전반이 준수한 편 덧붙여서 Virtualbox는 seamless모드(Unity 모드)가 가능

    A : 개인 서비스를 위한 용도로 Virtualbox를 선택.

  • Q : OS, CentOS ? Ubuntu ? → CentOS는 대기업에서 선호, 안정성 높음, 업데이트가 2년에 한 번, 트렌드에 뒤쳐짐 → Ubuntu는 인터넷 상 의견 교류 & 커뮤니티가 활발하여 정보가 많은 편, 구글 트렌드에서 더 많이 사용되는 것으로 나타남, 개인 서버용으로 적합, 리눅스 초보자가 사용하기 편리

    A : 리눅스 초보자이며 자료가 많은 Ubuntu를 선택.


과제 진행중 사용하였던 리눅스 명령어 모음

  • wget : HTTP 통신 또는 FTP 통신을 사용해 서버에서 파일 또는 콘텐츠를 다운로드할 때 사용하는 소프트웨어

  • GMP : 부호 있는 정수, 유리수 및 부동 소수점 숫자에서 작동하는 임의 정밀도 산술을 위한 무료 라이브러리

  • usermod [option] 사용자계정 : 사용자 계정에 관련된 다양한 정보들을 변경하는 명령어

  • apt-get : (Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 패키지 관리 명령어 도구

  • xvf, xvz x는 압축풀기

    v는 과정을 보여주기

    f는 파일명 설정

    z은 gzip파일

    압축해제시

    z옵션이 붙으면 gzip을 압축 해제한 후에 tar를 풀어내고,

    j옵션이 붙으면 bzip을 압축 해제한 후에 tar를 풀어내는 모양이다.

    그러니까 z옵션은 xxx.tar.gz혹은 xx.tgz 파일을 다룰때 사용하는 것이다.


패키지 관리가 아닌 컴파일(수동)설치를 권장하는 이유

The Biggest Failure Of Linux Is Package Management” : 리눅스 컨텐츠를 다루는 유튜버

https://www.youtube.com/watch?v=xLGdoL7xa3o

패키지 매니저는 양날의 검, 다양성을 상징하지만 독이 된다.

  • “We have way too many package managers already and people keep creating more and I don’t understand why”

패키지 관리의 장점 : 바이너리 파일로 구성되어 컴파일이 필요없음, 패키지 설치상태 및 정보 제공, 기존파일 삭제없이 바로 업그레이드 가능

패키지 관리의 단점 : 패키지 의존성에 따라 관련 패키지가 먼저 설치되어있지 않으면 설치가 안된다. 패키지 설치를 위해서는 그 패키지의 필요요소를 사전에 전부 다운로드 해야 한다.(의존적).

→ 결론 : 개인 용도라면 패키지 매니저 사용도 좋은 선택이지만,

업무 용도라면 보안정책의 이유나 의존성에 의한 이슈 등으로 장애를 유발 할 확률이 높다.


Memo

  • APM : Apach PHP Mysql 조합을 의미, 세개가 조합이 호환성이 좋고 많이 쓰임
  • LAMP : Linux, Apache, MySQL, PHP // PHP는 백 프론트 모두 됨
  • UFW (Uncomplicated Firewall,언컴플리케이티드 방화벽) : 데비안 계열 및 다양한 리눅스 환경에서 작동되는 사용하기 쉬운 방화벽 관리 프로그램
  • Apt : The apt command is a powerful command-line tool, which works with Ubuntu’s Advanced Packaging Tool  (APT) performing such functions as installation of new software packages, upgrade of existing software packages, updating of the package list index, and even upgrading the entire Ubuntu system. 어드밴스트 패키징 툴 , 코어 라이브러리와 함께 작동하는 자유 사용자 인터페이스

위클리 스크럼 이후 목표

  • 임의로 2개 이상의 파일을 자유롭게 생성, 수정, 삭제하여 VI 편집기에 익숙해지는 연습을 한다.
  • LAMP 과정을 수동설치로 진행한다.

VI 편집기 연습하기

VI 편집기로 텍스트를 새로 입력 및 편집해 보았다.

텍스트 파일로 조작을 연습하다가, 파이썬 설치해서 코딩을 해보면 어떨까 하는 생각이 들어 아래와 같이 간단한 코드를 작성하고 실행해 봤다.

<아래>

Untitled (17)

Untitled (18)

잘 동작한다.

자주 사용했던 명령어

Insert, 입력 모드

커서 위치 : i 커서 줄 제일 뒤 : A 커서 윗줄 : O 커서 아랫줄 : o

커서 이동

gg : 문서 맨 앞 G : 문서 맨 끝 ^ : 문장 맨 앞 0 : 라인 맨 앞

페이지 이동

Ctrl + f : 다음 페이지 Ctrl + b : 이전 페이지

잘라내기 / 붙여넣기

dd : 현재 줄 dw : 단어 p : 붙여넣기

실행 취소 / 재실행

u : Undo Ctrl + R : Redo


ETC

Could not mount the media/drive ‘C:\Program Files\Oracle\VirtualBox/VBoxGuestAdditions.iso’ (VERR_PDM_MEDIA_LOCKED).

sudo apt-get install virtualbox-guest-x11reboot

프로그램 항목 탭 중 장치 → 광학 드라이브 → 기존에 Mount 되어 있던 설치 iso 파일을 Unmount하하고 나니 양방향 복사 & 붙여넣기 기능이 잘 동작.


셀프 피드백(위클리 스크럼 데이 기준)

  • 리눅스 환경에서 VI 편집기를 사용한 텍스트 수정, 편집 작업을 처음 하기 때문에 익숙하지 않았다.
  • 따라서 익숙해지는 연습을 할 필요가 있다.

회고

  1. 소스설치, 그러니까 컴파일 설치에 익숙해지기. 할줄만 알면 되는 것 같다. 왜 수동설치를 적어도 한번은 해 보아야 한다고 하는지 알 것 같았다.
  2. 발생하는 에러에 적합한 해결방법을 사용하기, 그 과정. 이것도 에러가 여하에 좌우되는 거니 비중은 덜 둬도 되는 것 같다.
  3. 리눅스 환경에 익숙해지기 - 데스크탑과 server 버전이 있고, 기본적으로 VI 편집기를 사용하는데, 리눅스 환경에 익숙해진다는 것이 무엇일까 생각해봤다. 터미널에서 한 걸음 더 나아가서, 가능다하면 VI 편집기에도 익숙해 지는 편이 좋은 것 같다.

P.S

이다음 개발일지를 작성할 때에는 하루에 어느정도의 시간을 사용했는지 적도록 한다. 이후 현업에서 개발할 때에 시간이 중요해지기 때문이다. (언제까지 가능한지, 하루에 몇시간정도 사용했는지, 그렇다면 어떤 업무를 얼마만큼의 기간내에 모두 마칠 수 있을지를 가늠할 수 있는게 중요해진다.)


reference

comments powered by Disqus