패키지 설치는 너무 간단하고 빨리 끝나니 챌린지 과제에 도전해보았습니다. APM 패키지를 컴파일 수동 설치해 보겠습니다.
먼저 sudo apt-get update
명령어를 통해 apt를 업데이트 해줍니다. apt는 Advanced Package Tool의 약어로, 데비안 계열의 리눅스 배포판에서 소프트웨어를 쉽게 설치 및 제거할 수 있게 도와주는 툴입니다.
또 gcc 컴파일러가 필요합니다. sudo apt-get install gcc
를 통해 gcc 컴파일러를 설치해줍니다.
컴파일에 필요한 나머지 패키지들을 설치해줍니다.
apt-get install build-essential make cmake libssl-dev libxml2-dev libpng-dev libjpeg-dev libcurl4-openssl-dev libbz2-dev libncurses5 libncurses5-dev libaio1 libmcrypt-dev
Apache는 가장 유명한 Web Server 중 하나입니다.
세상이 좋아졌습니다.. Apache 컴파일 설치를 검색하니 친절하게도 한국어 설치 방법 안내 페이지가 나왔습니다.
http://httpd.apache.org/docs/current/install.html
저는 성미가 급한 사람이니, 망설이지 않고 따라해 보겠습니다.
먼저 텍스트 기반 브라우저인 lynx를 깔아줍니다. http://httpd.apache.org/download.cgi가 lynx에서 제대로 보이지 않는 관계로,, 대신 lynx https://downloads.apache.org/httpd/
를 입력하니 다음과 같은 화면이 나왔습니다.
쭉 내리다 보면 Releases가 보입니다.
httpd-2.x.xx.tar.gz를 다운 받을 것입니다. 커서를 위치해주고 d키를 누르면..
이렇게 다운로드 창이 뜹니다. Save to disk를 눌러 저장해줍니다. 기본 저장위치는 /home/사용자이름/
에 있었습니다.
해당 폴더로 이동 후 gzip -d httpd-2.4.46.tar.gz
와 tar xvf httpd-2.4.46.tar
를 입력하여 압축을 해제해줍니다.
압축을 해제한 폴더에 들어가 보니 압축이 잘 해제되어 있음을 확인할 수 있었습니다.
./configure
를 입력하여 make
하기 전 구성 설정을 해 줍니다. --prefix=설치경로
옵션을 주어 설치 경로를 변경할 수 있습니다. 기본 설치 경로는 /usr/local/apache2 입니다.
앗.. 오류입니다. APR을 찾을 수 없다고 합니다. Apache Portable Runtime Library로 보이는 것을 설치해줘야 합니다.
sudo apt-get install apache2-dev libapr1-dev libaprutil1-dev
를 입력하여 APR을 설치해줍시다.
./configure
실행 중 또 한 번 오류가 발생했습니다. PCRE를 찾을 수 없어 설치해 줘야 합니다. http://pcre.org로 이동하여 압축파일을 받고 압축 해제 -> ./configure
-> make
-> sudo make install
하여 설치할 수 있습니다.
다시 오류가 발생했습니다. libpcre.so.1 라이브러리를 찾을 수 없다고 합니다. 저의 경우에는 sudo apt-get install libpcre2-dev
로 pcre 라이브러리를 다시 패키지로 다운 받아 해결했습니다.
apache http server의 configure가 끝났습니다. make
및 make install
을 실행해 줍니다.
위와 같은 화면이 나오면 apache http server의 설치가 끝났습니다. 야호!
vi /usr/local/apache2/conf/httpd.conf
를 입력해 apache 설정 파일을 최종적으로 확인해줍니다.
실제 서비스를 하게 되면 이 파일에 여러 설정 값들을 이렇게 넣어서 운영할 것이지만, 이번엔 다른 옵션을 주지 않고 플레인한 상태로 서버를 기동해줄 것이니 넘어갑니다.
sudo /usr/local/apache2/bin/apachectl -k start
로 apache 서버를 시작합니다. fqdn를 determine 할 수 없다는 경고 메시지가 나타납니다. fqdn이란? 하지만 서버는 제대로 기동하고 있습니다.
마지막으로 sudo /usr/local/apache2/bin/apachectl -k stop
으로 서버 기동을 중지할 수 있습니다.
다음은 MySQL을 컴파일 설치해 보도록 하겠습니다.
https://dev.mysql.com/doc/refman/8.0/en/source-installation.html을 참고하여 설치해 보겠습니다.
cd /usr/local
로 설치할 폴더로 이동합니다.
wget dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22.tar.gz
으로 MySQL 소스 압축 파일을 받겠습니다.
tar xvfz mysql-8.0.22.tar.gz
으로 압축을 풀어줬습니다.
압축이 잘 풀려있는지 확인했습니다.
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/mysql/boost
로 설치해 보겠습니다.
한번에 되면 컴파일 설치의 재미가 없죠. boost_1_73_0.tar.gz 다운로드에 실패했다고 합니다. boost라는 패키지가 필요한 것으로 보이지만 무슨 이유에선지 저 링크를 들어가면 forbidden 메시지가 출력되고 있었습니다. boost를 수동 설치해주겠습니다.
sudo apt-get install libboost-all-dev
으로 boost를 설치해줍니다.
여전히 같은 오류 메시지가 나왔습니다. 30분 동안 헤매다 검색을 통해 MySQL이 요구하는 boost 버전(1_73_0)보다 낮은 boost 버전을 (1_72_0)을 설치하고 있었음을 깨달았습니다.
다시 한번 boost를 다운로드 받고 압축을 해제한 뒤,
sudo cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.0.22 -DMYSQL_DATADIR=/usr/local/mysql-8.0.22/data -DWITH_BOOST=/usr/local/src/boost_1_73_0/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306 -DFORCE_INSOURCE_BUILD=1
으로 cmake를 해주었습니다.
그런데.. 뭔가 이상합니다.
vm 위에 올라가 있는 리눅스의 용량이 꽉 차버리는 사태가 발생했습니다. 남은 진행률이 30% 정도임을 감안했을 때 얼마 안 가 용량 부족으로 make
가 실패할 것 같습니다.
네.. 용량 부족으로 make
에 실패했습니다. 어쩔 수 없이 이번에는 MySQL을 패키지 설치하도록 하겠습니다. 추후에 Amazon AWS EC2 인스턴스에 올려서 MySQL 소스 컴파일 설치는 재시도 해보겠습니다.
개인적으로는 cmake
가 성공했으니, make
와 make install
도 용량 문제가 아니었다면 성공하지 않았을까 하는 생각입니다.
결국
sudo apt-get install mysql-server
로 설치했습니다.
설치한 MySQL은 service mysql start
로 시작하고, service mysql stop
으로 중지할 수 있습니다. MySQL 서비스의 상태는 service mysql status
로 확인할 수 있습니다.
필요한 패키지들을 설치해줍니다.
sudo apt-get install libxml2-dev libjpeg-dev libpng-dev libsqlite3-dev
cd /usr/local
로 이동해준다음, wget https://www.php.net/distributions/php-7.4.1.tar.gz
으로 php 압축파일을 다운로드 받아줍니다.
sudo tar xvfz php-7.4.1.tar.gz
로 압축을 해제한 뒤 해당 폴더로 이동합니다. 최신 버전인 8.0.11 버전으로 php를 다운 받았었지만 지우고 7.4.1 버전으로 진행했기 때문에 사진의 버전이 다른 것은 신경쓰지 않으셔도 됩니다.
sudo ./configure \
--with-apxs2=/usr/local/apache2/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
으로 configure 해줍니다.
make && make install
해줍니다.
컴파일 설치가 진행되고 있습니다.
완료되었습니다. php와 apache의 버전을 확인해보았습니다.
제대로 설치된 것 같습니다. apache의 httpd.conf 파일을 수정해서 php와 연동시켜주도록 하겠습니다.
시간 관계 상 자세히 못 썼습니다.. https://www.php.net/manual/en/install.unix.apache2.php와 https://happylulurara.tistory.com/140를 참고하여 나머지 설정 완료하였습니다.
설정 완료 후 phpinfo.php 파일을 만들어준 결과물입니다.
<?php phpinfo(); ?>
를 파일에 저장만 하면 됩니다.
localhost/phpinfo.php로 접속해 확인해보겠습니다.
apache와 php가 성공적으로 연동된 모습입니다. 야호!
쉽지 않았습니다.. 확실히 패키지 설치보다 컴파일 설치가 몇 배는 더 어려운 것을 깨달았습니다. 마지막 php와 apache 연동할 때는 거의 2시간 동안 구글링만 했습니다. 하지만 환경 상 패키지 설치가 불가능 한 곳에서는 컴파일 설치를 할 수 있어야 하기 때문에, 앞으로도 종종 소스를 받아 컴파일 설치를 해보는 노력을 해보도록 하겠습니다. 긴 글 읽어주셔서 감사합니다.