
힘들다.....
그냥 힘들다라는 말밖에 안나오네요..
apache - mysql - php 설치까지 대략 8시간은 걸린 것 같습니다....
원래 사용하는 라이브러리 설치 방식이 아닌 파일 설치 방식으로 연습하려 하니 오류가 계속 발생해서 애먹었네요...
되도록이면 그냥 라이브러리 설치하시길...
(저는 리눅스마스터 때문에 실습해야했습니다...ㅠ)
기본적인 과정은 'Rocky Linux 8로 리눅스 마스터 1급 정복하기'를 참고하며, 실제 실습을 진행하여 작성되었습니다.
Rocky Linux 8로 리눅스 마스터 1급 정복하기
저는 원래 설치되어 있던 환경이 아닌, 실습을 위해 따끈따끈하게 설치한 Rocky Linux에 설치할 예정이라 우선 sudo 권한 배정부터 시작해야했습니다.
su
visudo -f /etc/sudoers
vi 편집기로 sudoers 파일을 열고 내부 ##Allow root to run any commands anywhere에 user ALL=(ALL) ALL 추가합니다.

저는 root로 설치하지 않고, 일반 사용자로 전환해서 환경을 설치할 예정이기 때문에 su 명령어를 이용해 사용자를 전환해 줍니다.
su - [user]
우선 라이브러리 설치가 아닌 파일을 이용해 컴파일하고 서버를 구축할 예정입니다.
이때 설치 디렉토리는 /usr/local/src 입니다.
만약 다운로드 폴더로 다운받았다면 mv명령어로 파일을 옮깁니다.
1. Apache
총 4개의 파일을 설치해야합니다.
1. apr
2. apr-util
3. httpd
4. pcre
이때 파일의 압축율이 좋은 .bz2로 다운로드 받습니다.

apr과 apr-utill 다운로드 - https://apr.apache.org

httpd 다운로드 - https://httpd.apache.org
2. Mysql
mysql의 경우 community server 파일을 다운로드 합니다.

mysql 소스파일 다운로드 - http://www.mysql.com
3. PHP
php의 경우 8.2 버전을 사용하였고, 압축율이 가장 좋은 .xz를 다운받습니다.

php 소스 파일 다운로드 - http://www.php.net
C 및 C++ 컴파일러 설치
sudo dnf install gcc
sudo dnf install gcc-c++
sudo dnf install make
sudo dnf install expat expat-devel
기본적인 gcc의 C와 C++ 컴파일러를 설치합니다.
또한 XML parser 라이브러리 역시 설치해줍니다.
이때, make의 경우 gcc와 gcc-c++만 설치 시 이후 make를 사용 시 make가 없다는 에러가 발생합니다.
따라서 만일 기존 make를 설치하지 않았다면 make를 설치해 줍니다.
PCRE(Perl-Compatible Regular Expression)은 정규식 패턴 일치를 구현하는 함수의 집합이다.
PCRE 설치
cd /usr/local/src/
sudo tar jxvf pcre2-10.42
cd pcre2-10.42
sudo ./configure --prefix=/usr/local/pcre
sudo make
sudo make install
설치한 소스코드를 압축해제 해줍니다.
해당 디렉토리에서 ./configure을 통해 makefile을 만들고, 설치될 디렉토리를 --prefix를 통해 지정합니다.
이후 make로 컴파일을 하고, make install로 설치를 해줍니다.
httpd 설치
cd /usr/local/src
sudo tar jxvf httpd-2.4.59.tar.bz2
sudo tar jxvf apr-1.7.4.tar.bz2
sudo tar jxvf apr-util-1.6.3.tar.bz2
sudo cp –a apr-1.7.4 ./httpd-2.4.59/srclib/apr
sudo cp –a apr-util-1.6.3 ./httpd-2.4.59/srclib/apr-util
cd httpd-2.4.59
sudo ./configure —prefix=/usr/local/apache —enable-so —enable-mods-shared=all —with-included-apr —with-pcre=/usr/local/pcre/bin/pcre2-config
sudo make
sudo make install
이전 PCRE와 동일하게 설치한 소스코드 3개를 압축해제 해줍니다.
생성된 httpd 디렉토리 내부 srclib안에 압축 해제한 apr과 apr-util을 각각 복사해줍니다.
이후 httpd 디렉토리로 이동하고 ./configure을 통해 makefile을 생성합니다.
이때, --with-pcre 옵션에 대해 주의해야합니다.
sudo ./configure —prefix=/usr/local/apache —enable-so —enable-mods-shared=all —with-included-apr —with-pcre=/usr/local/pcre
다음과 같이 작성 시, pcre2-config 파일을 찾을 수 없다는 에러가 발생합니다.

따라서 위와 같이 pcre2-config 파일이 들어있는 /bin 디렉토리와 파일명을 명시해주어야 다음과 같이 성공적으로 makefile을 생성합니다.
[참고사이트] - configure: error: pcre(2)-config for libpcre not fount error
이후 make로 컴파일, make install로 설치해줍니다.
cmake 및 관련 라이브러리 설치
sudo dnf install cmake
sudo dnf install ncurses
sudo dnf install ncurses-devel
sudo dnf install bison
sudo dnf install gcc-toolset-12-gcc
sudo dnf install gcc-toolset-12-gcc-c++
sudo dnf install gcc-toolset-12-binutils
sudo dnf install libtirpc-devel
sudo dnf —enablerepo=powertools install rpcgen
sudo dnf install openssl
sudo dnf install openssl-devel
우선 mysql의 설치는 cmake를 이용합니다.
그외 추가적인 ncurses, ncurses-devel, bison을 설치합니다.
또한 gcc toolset과 관련된 라이브러리 설치 및 RPC관련 라이브러리도 설치해 줍니다.
그리고 openssl과 openssl-devel도 설치해줍니다.
openssl 라이브러리가 설치되어 있다고 하더라도 openssl-devel이 없으면 이후 설치에서 에러가 발생하기 때문에 설치가 되었는지 확인이 필요합니다.
MySQL 설치
cd /usr/local/src
sudo tar zxvf mysql-boost-8.0.36.tar.gz
cd mysql-8.0.36
sudo cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql –DDOWNLOAD_BOOST=1 –DWITH_BOOST=/usr/local/src/mysql-8.0.36/boost –DFORCE_INSOURCE_BUILD=1
sudo make install
이전 과정과 동일하게 소스 코드를 압축해제해 줍니다.
이후 압축해제한 폴더에서 cmake 명령을 이용해 환경설정과 컴파일을 진행합니다.
이때, -DCMAKE_INSTALL_PREFIX 옵션을 이용해 설치 디렉토리를 지정해줍니다.
이후 make install을 통해 설치를 진행합니다. (시간이 굉장히 오래 걸립니다.)
가장 중요한 점은 ./mysqld —initialize —user=root 가 성공적으로 마무리된다면 임시 비밀번호가 생성됩니다. 이부분을 잊지않고 복사해두어야 합니다.
cd /usr/local/mysql/bin
sudo ./mysqld --initialize --user=root
sudo /usr/local/mysql/bin/mysqld_safe --user=root &
sudo /usr/local/mysql/bin/mysql –p
우선 설치된 이전 -DCMAKE_INSTALL_PREFIX 옵션을 이용해 지정해둔 디렉토리로 이동하고, mysqld 명령이 있는 bin 디렉토리로 이동해줍니다.
가장 유의해야하는 부분입니다.
./mysqld --initialize --user=root
해당 명령어를 사용시, 임시 패스워드가 부여됩니다. 이 패스워드를 이용해 서버에 로그인한 후, 사용자의 패스워드를 설정해야합니다.(이미지상 위치한 곳에서 임시 비밀번호 생성)

만일 임시 패스워드를 복사하지 못하거나, 잊었을 때, 이전 /usr/local/mysql/data 디렉터리를 삭제하고 다시 진행합니다. 또는 이것으로도 해결이 되지 않을 땐, 설치 파일 자체를 삭제하고 다시 설치해야 합니다.
이후 mysql 데몬을 실행하고, 서버에 접근하여 패스워드를 입력합니다. 이때의 패스워드는 이전 발급한 임시 패스워드입니다.
mysql> alter user ‘root’@’localhost’ identified by ‘password’;
mysql> flush privileges;
성공적으로 설치가 완료되면, alter문을 이용해 사용자의 패스워드를 지정해줍니다.
xml과 sqlite-devel 설치
sudo dnf install libxml2 libxml2-devel
sudo dnf install sqlite-devel
php 설치 이전 다운로드 받아야할 xml과 sqlite-devel입니다.
환경 설정 및 컴파일
cd /usr/local/src
sudo tar jxvf php-8.2.17.tar.bz2
cd php-8.2.17
sudo ./configure —with-apxs2=/usr/local/apache/bin/apxs —with-config-file-path=/usr/local/apache/conf —with-mysqli —with-pdo-mysql=/usr/local/mysql
sudo make
sudo make install
sudo cp php.ini-production /usr/local/apache/conf/php.ini
우선 소스 코드를 압축 해제해 줍니다. 이후 ./configure을 이용해 makefile을 생성해줍니다. ./configure을 통해 설정되는 옵션과 옵션값을 확실하게 확인하는 것을 추천드립니다.(앞서 다른 환경 설정도 함께..)
다른 부분보다 이 부분에서 설정 path가 누락되어 계속 오류가 발생했었습니다...ㅠ
path가 누락되거나 오류가 발생되면 해당 부분을 찾을 수 없다는 에러가 발생합니다. 정확히, 소스 코드에서 변수 내로 들어갈 내용이 없다고 출력이 됩니다.
특히 php 버전에 따라 다른듯 한데 --with-mysqli에 경로를 지정해야하는 경우가 있고 아닌 경우가 있습니다.
sudo vi /usr/local/apache/conf/httpd.conf
AddType application/x-httpd-php .php .htm .html .inc .php8
AddType Application/x-httpd-php-source .phps
vi 편집기로 아래 두줄을 httpd.conf의 AddType 설정이 등록된 부분에 작성합니다.
ps aux | grep httpd
sudo /usr/local/apache/bin/apachectl restart
최종적으로 httpd를 실행하면 APM 설치가 완료됩니다.
재시작을 하였을때, httpd가 실행중인지 확인해봐야합니다.
php 연동을 확인하는 대표적인 방법은 phpinfo()를 이용하는 방법입니다.
cd /usr/local/apache/htdocs
sudo vi test.php
다음과 같이 apache 밑 htdocs로 이동합니다.
이후 vi 편집기를 이용해 test.php 파일을 생성합니다.
<?php
phpinfo();
?>
test.php 파일에는 위와 같은 내용을 작성합니다.

이후, 웹 브라우저에서 localhost/test.php를 이용해 확인하였을때, php문서가 나온다면 성공적으로 연결된 것입니다.
다른 것 보다, 기존 라입브러리를 이용해 설치하는 방법과는 정말 다르고, 또한 CentOS에서 설치하는 부분과 버전차이로 작성해야하거나 설치해야하는 부분들이 달라져 이러한 부분에서 시간을 많이 잡아 먹었습니다.
특히, php에서 ./configure을 진행 시, with-mysqli가 path를 설정해야하는지 아닌지를 구분해야합니다. 이전 버전으로 다운시 path를 설치해야하고, 최신 버전으로는 pdo를 사용하기를 권장해서 그런지 path를 사용하지 않아도 되더라구요.
정확하게 알아보고 진행해야할 것 같습니다.