[UMC 1주차] 리눅스 환경에 APM 설치, CHALLENGE 과제

유보라·2022년 3월 20일
0

UMC 2기

목록 보기
2/14

1. 리눅스에 APM 소스 설치하기

1) apache

이때 반드시 패키지 설치가 아닌 수동 설치를 해야만 한다.

패키지 설치로 하면 너무 쉽기도 하고, 수동으로 설치하는게 챌린지 과제이기도 하니 소스 설치를 해보겠다.

참고 : https://yeni-days.tistory.com/2

먼저 터미널을 실행해주자. Ctrl + Alt + T 를 누르면 바로 터미널이 실행된다~!

자 이렇게 관리자 권한에 로그인 하려는 명령어인 $ sudo su 를 입력해주고, 가상 머신을 시작할 때 설정했던 내 OS 계정의 비밀번호를 입력해준다.

필수 패키지 설치

다음으로는 아래 코드를 입력해서 필수 패키지를 설치한다.

$ sudo su
# apt-get install make
# apt-get install build-essential
# apt-get install gcc
# apt-get install --reinstall make
# apt-get install libexpat1-dev
# apt-get install g++ 
# apt-get install net-tools
# apt-get install curl

소스 설치 및 압축 해제

그 후, (몇 번의 삽질 끝에) APM 같은 어플리케이션을 소스로 설치할 때 사용되는 디렉토리인 usr/local에 apache라는 이름의 파일을 새로 만들어주고 소스를 설치해준다.

몇 번 좀 틀려서 어지러우니까 코드만 적어보자면 이렇다.

cd /usr
cd local
mkdir apache
/usr/local# wget http://mirror.navercorp.com/apache//apr/apr-1.7.0.tar.gz
/usr/local# wget http://mirror.navercorp.com/apache//apr/apr-util-1.6.1.tar.gz
/usr/local# wget --no-check-certificate https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
/usr/local# wget --no-check-certificate https://dlcdn.apache.org//httpd/httpd-2.4.51.tar.gz

이때 사용한 명령어 wget은 웹서버로부터 파일을 다운받는 명령어이다. 다음은 압축해제!

/usr/local# tar xvfz apr-1.7.0.tar.gz
/usr/local# tar xvfz apr-util-1.6.1.tar.gz
/usr/local# tar xvfz pcre-8.45.tar.gz
/usr/local# tar xvfz httpd-2.4.51.tar.gz

위에서 다운했던 tar.gz파일들을 tar xvfz 명령어를 통해 압축해제 해준다.

그리고 다음 명령어들을 통해 쭈욱 설치해주면 된다.

apr 설치

/usr/local# cd apr-1.7.0
/usr/local/apr-1.7.0# ./configure --prefix=/usr/local/apr
/usr/local/apr-1.7.0# make
/usr/local/apr-1.7.0# make install

apr-util 설치

/usr/local# cd apr-util-1.6.1
/usr/local/apr-util-1.6.1# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
/usr/local/apr-util-1.6.1# make
/usr/local/apr-util-1.6.1# make install

pcre 설치

/usr/local# cd pcre-8.45
/usr/local/pcre-8.43# ./configure --prefix=/usr/local/pcre
/usr/local/pcre-8.43# make
/usr/local/pcre-8.43# make install

Apache 설치

/usr/local# cd httpd-2.4.51
/usr/local/httpd-2.4.51# ./configure --prefix=/usr/local/apache2.4 \
--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
/usr/local/httpd-2.4.51# make
/usr/local/httpd-2.4.51# make install

설치가 끝났으면 이제 실행을 해보자!

apache 실행: httpd -k start, 종료: httpd -k stop 이며,

아래 코드를 통해 실행할 수 있다.

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

마지막 줄을 실행했더니 이렇게 떴다.

Firefox에서 127.0.0.1 주소로 들어가서 확인해보니,

apache 설치 끝>< 잘 작동하는 군.

2) Mysql

다음은 데이터베이스인 Mysql을 설치해보겠다.

참고 : https://yeni-days.tistory.com/7

필수 패키지 설치

Apache 설치 때와 동일하게 필수 패키지를 먼저 설치 해준다.
(잠시만... 지금 게슈탈트 붕괴현상이 온 거 같다. 설치? 설치?)

/usr/local# apt-get update
/usr/local# apt-get install cmake
/usr/local# apt-get install libssl-dev
/usr/local# apt-get install libboost-all-dev
/usr/local# apt-get install libncurses5-dev libncursesw5-dev
/usr/local# apt-get install perl

소스 설치 & 압축해제

/usr/local# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19.tar.gz
/usr/local# tar xvfz mysql-8.0.19.tar.gz

그 다음은 디렉토리를 생성해준 후 그 안에서 설치를 해보겠다.

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

여기까지 디렉토리 생성!

/usr/local/mysql-8.0.19# cd ..
/usr/local# cd src
/usr/local/src# sudo wget https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.tar.gz
/usr/local/src# sudo tar xvfz boost_1_70_0.tar.gz
/usr/local/src# cd ..
/usr/local# cd mysql-8.0.19/dir_mysql
/usr/local/mysql-8.0.19/dir_mysql# 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

이 cmake 과정에서 엄청 난관을 겪었는데, 오타는 따로 트러블 슈팅에 쓰진 않았지만 오타가 가장 힘들었다...

오타 정말 화난다 ... 진작에 가상 머신이랑 윈도우 사이에 복사 붙여넣기가 가능하도록 설정을 해줬다면 이런 실수는 생기지 않았을 텐데, -DWITH_EXTRA_CHARTSETS 에서 S 빼먹기, 백슬래쉬 빼먹기 등의 오타들이 난무해서 정말 힘들었다.

어쨌든 오타들을 모두 찾아서 고쳐준 후에 발생하는 에러들은 아래 트러블 슈팅에서 다루어 보았다.

cmake가 잘 되었으면, 아래 코드들을 실행한다.

/usr/local/mysql-8.0.19/dir_mysql# make
/usr/local/mysql-8.0.19/dir_mysql# make install

make는 정말 오래걸린다... 유튜브 좀 보고 오면 된다! 잠시 쉬는 시간😁

을 즐기려고 했으나... 용량이 부족하대!! No space left on device 라네요!

가상 머신을 만들 때 40GB로 할당한다고 했는데 그건 메모리였다...

그렇게 시작된 용량 늘리기~

먼저 용량 확인을 해줬다. 10.00 GB로 설정 되어 있꾼!

10.00 GB 밑에 '위치'를 기억하자. 이것은 내 가상 머신의 위치를 나타낸다.

내 가상 머신의 위치는 D:\Ubuntu 16.04.6\Ubuntu 16.04.6.vdi 이다.

일단 실행 중이던 가상 머신을 종료한 후, VBoxManage라는 실행 파일을 찾아보자!

우리는 용량을 늘리기 위해 이 프로그램을 이용할 것이다.

위 사진과 같이 VBoxManage를 찾아줬다. 여기 주소도 기억해주자.

나 같은 경우에는 C:\Program Files\Oracle\VirtualBox 이다.

그 다음은 cmd를 실행해준다. 아래 코드는 아마 개인마다 주소가 따라 다를 것이다.

cd C:\Program Files\Oracle\VirtualBox
VBoxManage.exe modifyhd "D:\Ubuntu 16.04.6\Ubuntu 16.04.6.vdi" --resize 40960

명령어를 쳤는데...

에러가 나서 찾아보니, 이미지가 고정용량으로 설정 되어 있기 때문에 cmd에서 해결할 수 없다고 한다 ㅠㅠ

좌절했지만, 구글링 끝에 결국 해결해냈다 ㅎㅎ

vdi를 복사하는 과정에서 고정용량을 동적용량으로 바꿔주고, 다시 고정용량으로 복사했더니 위의 에러는 해결되었다.

자세한 과정은 아래 트러블 슈팅에서 다루고, 넘어가겠다.

이번엔 성공한 모습 ㅎㅎ!!

이제 가상 머신을 켜서 터미널을 실행해준다.

sudo apt-get install gparted

어라..! 나는 gparted를 설치할 공간조차 없었다..

이럴 땐 sudo apt-get clean를 쳐서 캐시를 삭제해준다.

캐시를 삭제했더니 gparted를 설치할 용량이 확보 되었다. 😁

sudo gparted

gparted를 실행해주었다.

원래 이상태였다면, /dev/sda1 이라는 파티션을 오른쪽까지 밀어줘야한다.

그런데 지금, swap 기능을 하는 파티션이 /dev/sda1의 바로 오른쪽에서 막고 있음!

그래서 먼저 터미널에 sudo swapoff -a를 입력해서 기능을 해제해준다.

그 다음, /dev/sda1의 바로 오른쪽에서 막고 있던 나머지 파티션들을 우클릭해서 resize!

오른쪽으로 쭉 밀어줄게요~

나머지도 마찬가지로 해준 후에 /dev/sda1도 오른쪽으로 밀어준다!!

그리고 아까 해제했던 swap은 다시 우클릭 해서 swapon 해줍니당

다 됐으면 위와 같은 체크 버튼을 눌러주고, apply!

첫 번째 파티션에 더 많은 공간이 제대로 할당이 된 모씁~!

다시 usr/local/mysql-8.0.19/dir_mysql# make를 해준다!!

아까 멈춘 부분에서 이어서 다시 된당 ㅎㅎㅎ 지금 잘 돼서 너무 신나고 재밌다😁😀

usr/local/mysql-8.0.19/dir_mysql# make install은 금방 끝났다.

MySQL 설정

mysql 그룹 및 유저 생성

/usr/local/mysql-8.0.19/dir_mysql# groupadd mysql
/usr/local/mysql-8.0.19/dir_mysql# useradd -r -g mysql -s /bin/false mysql

디렉토리 생성

/usr/local# cd mysql
/usr/local/mysql# mkdir mysql_files

권한주기

/usr/local/mysql# chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql# chown mysql:mysql mysql_files
/usr/local/mysql# chmod 750 mysql_files

기본 DB 생성

/usr/local/mysql# bin/mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

자, 마지막에 임시 비밀 번호가 나오니까 복사를 해놓는다.

서버 실행 : /usr/local/mysql# bin/mysqld_safe --user=mysql &

이렇게 뜨는데 에러인 줄 알고 열심히 읽었다 힣 근데 이러면 성공임!

바로 명령어 입력해준다.

bin/mysql -u root -p

이렇게 되면 성공!!! 키야아아아~ 박수 짝짝!!

마지막으로 비밀번호 바꾸고 MySQL은 끝!

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '비밀번호';
mysql> exit
/usr/local/mysql# bin/mysqladmin -u root -p shutdown

아무도 모르는 비밀번호로 설정 완료!

3) PHP

마지막으로 PHP가 남았다.

참고 : https://yeni-days.tistory.com/8?category=1020921

필수 패키지 설치

앞의 두 과정과 마찬가지로 필수 패키지를 먼저 설치 해줘야 한다.

& sudo su
/usr/local# apt-get install libxml2-dev
/usr/local# apt-get install libjpeg-dev
/usr/local# apt-get install libpng-dev
/usr/local# apt-get install libsqlite3-dev

소스 설치 & 압축 해제

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

PHP 설치

/usr/local# cd php-8.1.0

/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

/usr/local/php-8.1.0# make
/usr/local/php-8.1.0# make test
/usr/local/php-8.1.0# make install

이번엔 오타가 없도록 꼼꼼히 아주 꼼꼼히 꼼장어처럼 체크했다.

역시 make 과정은 오래걸렸다! MySQL 때는 make 명령어를 실행 중일 때 몇 퍼센트인지 보여줘서 기다리기 편했는데 얘는 안 보여줘서 너무 지루했다ㅠㅠ (그래서 양치 즁)

그런데 나... 글이 점점 끝나갈 수록 생기를 잃어 가는 건.. 기분 탓일까..?

미추어 버리겠네~~!

2. 트러블 슈팅

1. MySQL 소스 설치 과정 cmake 오류 - 1

문제 원인

Could NOT find Git (missing : GIT_EXECUTABLE) 라는 에러가 떴다.

해결 방안

# apt-get install git 을 해주었더니 해결 되었다.

참고 자료

https://webobj.tistory.com/5

2. MySQL 소스 설치 과정 cmake 오류 - 2

문제 원인

HTTP response code said error 라는 에러가 떴다.

계속 부스트 에러가 뜨면서 부스트를 다운 받으라는 걸 보니 /usr/local/src 디렉토리 내에 설치했던 boost를 인식하지 못 하는 것 같았다.

/usr/local/src에서 디렉토리 삭제 명령어인 rm -r boost_1_70_0 를 해준 후 다시 설치해 봤지만, 에러는 여전했다.

해결 방안

boos_1_70_0을 설치할 수 있는 새로운 링크를 찾아서 다시 시도해 보았다.

마찬가지로, /usr/local/src에서 rm -r boost_1_70_0 를 해준 후

이번에는 아래의 주소에서 부스트를 다운 받고 압축 해제를 해줬다.

cd /usr/local/src
wget http://downloads.sourceforge.net/project/boost/boost/1.70.0/boost_1_70_0.tar.gz
tar xvfz boost_1_70_0.tar.gz

그랬더니 해결이 됐다!

참고 자료

https://webobj.tistory.com/5

3. MySQL 소스 설치 과정 make 오류 - 1

문제 원인

저장 공간 부족으로 인해 용량 늘리기 과정 중 이런 에러가 떴다.

VBOX_E_NOT_SUPPORTED
error : Failed to resize medium

내가 용량을 수정하고 싶은 가상 머신의 이미지가 이미 고정용량으로 설정이 되어있었다면, VBoxManage.exe를 통해서 용량 수정이 안된다고 한다 ㅠㅠ

해결 방법

즉, 고정용량의 vdi 파일을 동적용량으로 바꿔주고 VBoxManage를 이용하면 된다!

고정용량의 vdi 파일을 복사하면, 새로 저장할 때 동적용량으로 변경할 수 있다.

  1. virtual box를 실행하고 파일 > 가상 미디어 관리자 실행
  2. 복사할 vdi 선택 후 복사 > 전문가 모드 > vdi, 동적할당 선택 > 이름 입력하고 복사

나 같은 경우는 위의 Ubuntu 16.04.6.vdi가 원본이고, 동적할당을 선택해서 새로 만든 이름이 Ubuntu 16.vdi이다.

이때, 동적할당으로 만들어낸 Ubuntu 16.vdi의 주소(위 사진에서 '위치')를 기억해놨다가,

위에서 다루었던 VBoxManage.exe modifyhd [주소] --resize [용량] 명령어를 cmd에 입력하여 용량을 바꿔주었다.

그리고 다시 고정용량으로 바꾸는 작업을 해보자.

  1. virtual box를 실행하고 새로 만들기를 통해 Ubuntu 16.vdi를 불러온다.
  2. 가상 미디어 관리자 실행
  3. 복사할 vid 선택 후 복사 > 전문가 모드 > vdi, 고정크기 선택 > 이름 입력하고 복사

이렇게 vdi를 늘어난 고정용량으로 바꿔주고 가상 머신을 시작하여 본문에서 다루었던 gparted 작업(파티션 할당)을 진행하여 해결했다.

참고 자료

<에러의 원인 참고 자료>
https://m.blog.naver.com/r2adne/220239005520

<용량 늘리기 참고 자료>
https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=ekthatkxkd&logNo=221373036440

<하드 디스크 마운트 참고 자료>
https://ndb796.tistory.com/418

첫 번째 블로그가 정말 너무 도움이 돼서, 네이버 로그인을 해서 감사 인사를 남겼당 히히😊

4. MySQL 소스 설치 과정 make 오류 - 2

문제 원인

make를 쳐놓고 기다리는데, 69% 쯤에서 이런 에러가 떴다.
collect2 : ld terminated with signal 9

검색 결과 메모리를 늘리거나 swap을 활성화 하라고 한다.

해결 방안

용량을 늘리는 과정에서 swap을 비활성화 시켰었는데, 다시 활성화를 시켜주지 않아서 발생한 에러 같았다.

gparted에 들어가서 아까 비활성화 시켰던 파티션을 우클릭하여 swapon을 해줬더니 해결되었다.

swap에 대해 더 조사하게 되었다.

참고 자료

https://stackoverflow.com/questions/46259776/collect2-fatal-error-ld-terminated-with-signal-9-killed

추가 키워드

APR

APR(아파치 포터블 런타임)는 아파치 HTTP 서버 2.x.의 핵심이며 휴대용 라이브러리이다. 이런 APR은 고급 IO 기능(예:sendfile, epoll and OpenSSL 등)에 대한 접근을 포함하여 OS 수준의 기능 (난수 생성, 시스템 상태), 그리고 기본 프로세스 처리(공유 메모리, NT 파이프와 유닉스 소켓) 등 많은 용도로 사용되고 있다.

PCRE

PCRE( Perl Compatible Regular Expressions )는 펄 호환 정규 표현식으로서, 정규식 패턴 일치를 구현하는 함수의 집합이다. 요즘에는 Apache, PHP, KDE 등을 포함한 오프 소스 프로젝트에서 사용되고 있으며, 아파치 2.4 버전을 설치할 때는 pcre를 설치해야 한다.

SWAP

profile
인하대학교 컴퓨터공학과 학생입니다😀

0개의 댓글