docs(fhs): split CentOS 6 build and deploy documentation

This commit is contained in:
biosvos
2026-08-08 18:20:47 +09:00
parent 4d5c130d9a
commit 085a0c7ab4
3 changed files with 510 additions and 218 deletions
+3 -218
View File
@@ -1,219 +1,4 @@
# FHS CentOS 6 빌드와 Apache 실행
# FHS 환경별 문서
## 0. 실행 준비
모든 명령은 같은 셸 세션에서 저장소 루트 디렉터리로 이동한 뒤 실행한다.
```bash
cd "$(git rev-parse --show-toplevel)"
RUN_ID="$(date +%Y%m%d%H%M%S)-$$"
FHS_CONTAINER="interactive-fhs-centos6-${RUN_ID}"
free_port() {
local port=$1
while (echo >/dev/tcp/127.0.0.1/"$port") 2>/dev/null; do
port=$((port + 1))
done
printf '%s\n' "$port"
}
APACHE_PORT="$(free_port 18068)"
```
## 1. CentOS 6 빌드 컨테이너
```bash
podman pull docker.io/library/centos:centos6
podman run -d \
--name "$FHS_CONTAINER" \
--publish "${APACHE_PORT}:80" \
--volume "$PWD:/workspace:Z" \
--workdir /workspace/fhs \
docker.io/library/centos:centos6 \
sleep infinity
```
## 2. CentOS 6 저장소와 빌드 의존성
CentOS 6 종료 후 저장소를 vault로 변경한다.
```bash
podman exec "$FHS_CONTAINER" cp -p \
/etc/yum.repos.d/CentOS-Base.repo \
/etc/yum.repos.d/CentOS-Base.repo.before-vault
centos_base='^#baseurl=.*\$releasever'
centos_vault='baseurl=http://vault.centos.org/6.10'
podman exec "$FHS_CONTAINER" sed -i \
-e 's|^mirrorlist=|#mirrorlist=|' \
-e "s|${centos_base}|${centos_vault}|" \
/etc/yum.repos.d/CentOS-Base.repo
```
```bash
podman exec "$FHS_CONTAINER" yum install -y \
gcc gcc-c++ make pkgconfig
podman exec "$FHS_CONTAINER" yum install -y \
boost-devel openssl-devel sqlite-devel openldap-devel
epel_base=http://archives.fedoraproject.org/pub/archive/epel/6
podman exec "$FHS_CONTAINER" yum install -y \
"${epel_base}/x86_64/epel-release-6-8.noarch.rpm"
epel_old='^#baseurl=.*\$basearch$'
epel_new='baseurl='"${epel_base}"'/$basearch'
podman exec "$FHS_CONTAINER" sed -i \
-e 's|^mirrorlist=|#mirrorlist=|' \
-e "s|${epel_old}|${epel_new}|" \
/etc/yum.repos.d/epel.repo
podman exec "$FHS_CONTAINER" yum install -y libxml++-devel
```
PostgreSQL 9.3 경로와 FHS Makefile에서 사용하는 추가 도구를 준비한다.
```bash
PG93_BASE=http://download.postgresql.org/pub/repos/yum/9.3/redhat/rhel-6-x86_64
podman exec "$FHS_CONTAINER" yum install -y \
${PG93_BASE}/postgresql93-9.3.25-1PGDG.rhel6.x86_64.rpm \
${PG93_BASE}/postgresql93-libs-9.3.25-1PGDG.rhel6.x86_64.rpm \
${PG93_BASE}/postgresql93-devel-9.3.25-1PGDG.rhel6.x86_64.rpm
podman exec "$FHS_CONTAINER" mkdir -p /user/db
podman exec "$FHS_CONTAINER" ln -s /usr/pgsql-9.3 /user/db/pgsql
podman exec "$FHS_CONTAINER" yum install -y libmcrypt-devel bc
CentOS 6 기본 Apache 2.2.15와 모듈 빌드 도구를 yum으로 설치한다.
```bash
podman exec "$FHS_CONTAINER" yum install -y \
httpd httpd-devel libtool
```
`sh-opendav` Makefile의 `/user/service/httpd` 경로를 yum 패키지 경로에
맞춘다. 소스는 수정하지 않는다.
```bash
podman exec "$FHS_CONTAINER" bash -lc '
mkdir -p /user/service/httpd/build /user/service/httpd/include
ln -sfn /usr/bin/libtool /user/service/httpd/build/libtool
for header in /usr/include/httpd/*.h /usr/include/apr-1/*.h; do
ln -sfn "$header" \
"/user/service/httpd/include/$(basename "$header")"
done
'
```
CentOS 6 저장소에는 `libiconv` 패키지가 없으므로, Makefile의 기본
`-liconv`를 명령행에서 제외하고 `-lmcrypt`만 사용한다.
`LOCK`/`UNLOCK`을 활성화하기 위해 `sh-opendav/Makefile`
`__NOT_USE_LOCKDB__` 정의는 제거한다.
## 3. FHS 빌드
`podman exec -w`로 FHS 작업 디렉터리를 지정해 구성요소를 빌드한다.
```bash
podman exec -w /workspace/fhs "$FHS_CONTAINER" bash -lc '
for component in arcmond2 cls csagentd fimngd ftsd; do
make clean -C "${component}" >/dev/null 2>&1
echo "===== BUILD ${component} ====="
make all -C "${component}"
echo "===== STATUS ${component} $? ====="
done
'
podman exec -w /workspace/fhs/sh-opendav "$FHS_CONTAINER" bash -lc '
make clean
make LIBS=-lmcrypt apache-mod-dav-dbms
'
```
빌드 결과:
```text
ftsd 성공
arcmond2 실패: 제공된 정적 라이브러리의 __inet_addr, __error 심볼
cls 실패: CentOS 6에 setproctitle 없음
csagentd 실패: ShmDefine.h의 uint64_t 미정의 및 연쇄 컴파일 오류
fimngd 성공: 헤더에 `<stdint.h>`만 추가
sh-opendav 성공: apache-mod-dav-dbms target
```
## 4. 빌드 산출물 확인
```bash
file fhs/ftsd/src/ftsd
file fhs/ftsd/interface/sample/ftsd_test
file fhs/ftsd/lib/libInterCommon.a
file fhs/sh-opendav/.libs/libmod_dav_repos.so
```
## 5. CentOS 6 Apache 2.2.15에 sh-opendav 배포
빌드된 모듈을 CentOS 6 yum Apache 모듈 디렉터리에 배포하고
`mod_dbd`와 함께 로드한다.
```bash
podman exec "$FHS_CONTAINER" cp \
/workspace/fhs/sh-opendav/.libs/libmod_dav_repos.so \
/etc/httpd/modules/mod_dav_repos.so
podman exec "$FHS_CONTAINER" sed -i \
's|^#LoadModule dbd_module|LoadModule dbd_module|' \
/etc/httpd/conf/httpd.conf
podman exec "$FHS_CONTAINER" sh -lc \
'printf "%s\\n" "LoadModule dav_repos_module modules/mod_dav_repos.so" \
>> /etc/httpd/conf/httpd.conf'
podman exec "$FHS_CONTAINER" httpd -t
podman exec "$FHS_CONTAINER" httpd -M 2>&1 | \
grep -E 'dbd_module|dav_repos_module|dav_module|dav_fs_module'
```
검증 결과:
```text
httpd: Syntax OK
dav_module (shared)
dav_fs_module (shared)
dbd_module (shared)
dav_repos_module (shared)
```
Apache를 실행하고 기본 HTTP 응답을 확인한다.
```bash
podman exec -d "$FHS_CONTAINER" /usr/sbin/httpd -DFOREGROUND
curl -sS -D - "http://127.0.0.1:${APACHE_PORT}/" \
-o /tmp/apache-centos6-body
```
CentOS 6 yum Apache 버전은 `Apache/2.2.15`다. `sh-opendav`
DB 기반 DAV 요청을 실제로 처리하려면 Apache DBD provider와 FHS DB 설정이
추가로 필요하다. 위 단계는 모듈 빌드, 배포, Apache 로드까지 검증한다.
실제 CentOS 6 Apache + `sh-opendav` 검증 결과:
```text
OPTIONS 200, PROPFIND 207, PROPPATCH 207
MKCOL 201, PUT 201, GET 200
COPY 201, MOVE 201, LOCK 200, UNLOCK 204
DELETE 204
```
`GET` 본문도 `PUT`한 내용과 일치했다. `PROPPATCH``displayname`
읽기 전용 속성이므로 응답 내부에 해당 속성의 `409`가 포함되는 것이 정상이다.
현재 실행 중인 컨테이너 확인:
```bash
podman ps --filter "name=${FHS_CONTAINER}"
```
- [CentOS 6 빌드](build.6.md)
- [CentOS 6 배포 및 DAV 검증](deploy.6.md)