본격적으로 APM 서버 설치를 진행한다. APM 은 다음 세 가지 오픈소스 스택을 말하는데, 본의 아니게 전부 소스를 내려받아 빌드하는 방식으로 설치했다.
- Apache httpd
- Php
- Mysql
라즈베리 파이는 arm64 아키텍처이기 때문에 x86 기반의 바이너리는 사용할 수가 없다. 대부분 오픈소스 레포에서 사전 빌드된 바이너리를 제공하고는 있는데 보통 x86 기반이어서, apt
같은 패키지 유틸을 사용해서 명령어 몇 줄 만으로 설치할 수도 있고 소스를 내려받아 직접 빌드해서 쓸 수도 있다. 개인적으로 소스를 직접 빌드하는 방식을 선호하는데 이렇게 하게 되면 필요에 따라 구성 모듈을 선택적으로 설치할 수도 있고 설치 경로도 마음대로 설정할 수도 있어, 버전 관리나 콜드 백업 등에 용이(?)하다. 물론, x86 -> arm64 변경과 같이 아키텍처가 바뀌는 경우에는 콜드 백업이 의미가 없다.
어쨋든 여기에서는, 라즈베리 파이4에 httpd, php, mysql 소스를 직접 빌드해서 설치한다. 직접 설치하는 것이기때문에 설치 경로도 정해야하는데, 이 포스팅에서는 다음과 같이 추가로 마운트 한 --prefix
옵션을 주지 않으면 /usr
하위 경로에 설치되겠지만,/app
하위 경로에 나름의 규칙을 정해서 설치한다.
- /app
- /app/util
- /app/serv
- /app/data
- /app/logs
- /app/cert
- /app/www
의존 라이브러리 설치
사실 완전한 콜드 백업을 위해서는 라이브러리들도 직접 빌드해두는 것이 좋지만, 이정도는 인터넷 접속만 있으면 금방 해결되기도 하고 이렇게 유명한 프로젝트들은 하위 호환도 잘 해주는 편이니까.., apt
를 이용한다. 작업 편의를 위해서 su -
로 root 계정으로 전환해놓고 sudo apt update
명령으로 apt repo 부터 최신화한 뒤, 다음과 같이 패키지들을 설치해주면 끝.
# httpd 빌드를 위한 라이브러리
apt install libapr1 libapr1-dev libaprutil1-dev libpcre3 libpcre3-dev libnghttp2-14 libnghttp2-dev
# mysql 빌드를 위한 라이브러리
apt install libaio1 libncurses5-dev libssl-dev
# php 빌드를 위한 라이브러리
sudo apt install imagemagick libmagickcore-dev libmagickwand-dev libmagic-dev libxml2-dev libwebp-dev libjpeg-dev libpng-dev libxpm-dev libicu-dev libsqlite3-dev libcurl4-dev libcurl4-gnutls-dev libcurl4-nss-dev libcurl4-openssl-dev libzip-dev
이미 설치됐다고 나오면 그냥 무시하고 넘어가면 된다. 몇몇 패키지는 OS 기본 패키지로 설치된 것들도 있고, apt dependency 에 의해서 먼저 설치된 것들도 있을 수 있다.
혹시 다른 리눅스 배포판에서 사용하던 패키지명이 잘 안 나올때는 다음 URL 에서 비슷한 이름으로 찾아보고 실제 같은 건지 좀 더 추가 조사(?)해보자.
https://packages.ubuntu.com/
Apache httpd 소스 설치
openssl 소스 설치
openssl은 우분투 설치 시에 기본 설치돼 있고 앞서 패키지 매니저로 libssl-dev 라이브러리도 설치 해두긴 했지만, 예전에 -fPIC
옵션 없이 빌드되었다고 문제가 됐었던 적이 있었던 것 같기도 하고 버전을 좀 타는것도 같아서 직접 빌드해서 쓴다.
curl -O https://www.openssl.org/source/openssl-1.1.1d.tar.gz
tar -xzf openssl-1.1.1d.tar.gz && cd openssl-1.1.1d
./config \
--prefix=/app/util/openssl/1.1.1d \
--openssldir=/app/util/openssl \
-fPIC
make && make install
이렇게까지 했으면 openssl 소스 설치는 끝났고, /app/util/openssl/1.1.1d
경로에 관련 바이너리와 라이브러리가 설치돼 있는 것을 확인할 수 있다. 이렇게 버전명이 다 기재된 상태로 두면 이후 관리 측면에서는 용이하지만 사용성이 조금 떨어지기 때문에 symbolic link 를 걸어서 조금 더 편리하게 사용할 수 있다.
cd /app/util/openssl
ln -s ./1.1.1d/* .
위와 같이 링크 설정을 하면 /app/util/openssl
경로에 바로가기가 생성되기 때문에 이후 openssl 을 참조할 때 경로명이 짧아지는 장점이 있고, openssl을 업그레이드하고나 새로 빌드했을 때 링크만 새로 생성하면 되기때문에 이를 참조하는 소프트웨어들을 일일이 고쳐줄 필요도 없다.
이어서 설치하는 모든 것들을 이렇게 설정할 예정.
httpd 소스 설치
openssl 설치가 끝났으면 httpd 설치를 이어서 진행할 수 있다.
curl -O http://mirror.apache-kr.org/httpd/httpd-2.4.41.tar.gz
tar -xzf httpd-2.4.41.tar.gz && cd httpd-2.4.41
./configure \
--prefix=/app/serv/httpd/2.4.41 \
--with-apr=/usr/bin \
--with-apr-util=/usr/bin \
--with-pcre \
--enable-module=shared \
--enable-so \
--enable-mods-shared=ssl \
--with-ssl=/app/util/openssl \
--enable-ssl=shared \
--enable-rewrite \
--with-mpm=event \
--enable-http2
make && make install
cd /app/serv/httpd && ln -s ./2.4.41/* .
php 소스 설치
oniguruma 설치
oniguruma는 이전 php 7.1 버전까지에서는 안 썼던것같은데 7.3 최신으로 설치를 했더니 다음과 같은 의존성이 생겨 있었다.
checking for oniguruma… no
configure: error: Package requirements (oniguruma) were not met:No package ‘oniguruma’ found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.Alternatively, you may set the environment variables ONIG_CFLAGS
and ONIG_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
설치가 급급해 많이 찾아보지는 않았지만 정규표현식 관련한 유틸로 상시 사용이 되는 것 같아서 다음과 같이 /app/util/
하위에 설치해뒀고
curl -O https://eu.mirror.archlinuxarm.org/aarch64/community/oniguruma-6.9.4-1-aarch64.pkg.tar.xz
tar -xf oniguruma-6.9.4-1-aarch64.pkg.tar.xz && mv usr 6.9.4
mkdir /app/util/oniguruma
mv 6.9.4 /app/util/oniguruma/.
cd /app/util/oniguruma && ln -s ./6.9.4/* .
다음과 같이 pkg-config 환경 변수에 추가시켜주면 이어서 php 설치가 가능하다. 다음과 같이 환경 변수가 설정된 sh 세션에서 설치를 진행해야 한다.
export PKG_CONFIG_PATH=`pkg-config --variable pc_path pkg-config`:/app/util/oniguruma/lib/pkgconfig
php 소스 설치
curl https://www.php.net/distributions/php-7.4.3.tar.gz | tar xz && cd php-7.4.3
./configure \
--prefix=/app/util/php/7.4.3 \
--enable-gd \
--with-config-file-path=/app/util/php \
--with-config-file-scan-dir=/app/util/php/conf.d \
--with-apxs2=/app/serv/httpd/bin/apxs \
--with-mysqli \
--with-pdo-mysql \
--enable-calendar \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--with-zlib \
--with-curl \
--with-openssl=/app/util/openssl \
--with-openssl-dir=/app/util/openssl \
--with-jpeg \
--with-xpm \
--with-webp \
--with-freetype \
--with-zip \
--enable-pcntl \
--enable-intl \
--enable-maintainer-zts \
--enable-mbstring
make && make install
cd /app/util/php && ln -s ./7.4.3/* .
APM 설치를 한번에 마무리하려고 했는데 mysql 설치에서 생각보다 삽질을 많이 하는 바람에 정리가 길어질 것 같다. mysql 설치는 이어서 진행할 예정