From 4d5c130d9ab5e7046f724f7298561cec2bf17519 Mon Sep 17 00:00:00 2001 From: biosvos Date: Sat, 8 Aug 2026 16:09:20 +0900 Subject: [PATCH] docs(fhs): document CentOS 6 build and DAV validation --- fhs/README.md | 107 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 88 insertions(+), 19 deletions(-) diff --git a/fhs/README.md b/fhs/README.md index 32e471f..165c3da 100644 --- a/fhs/README.md +++ b/fhs/README.md @@ -9,7 +9,6 @@ cd "$(git rev-parse --show-toplevel)" RUN_ID="$(date +%Y%m%d%H%M%S)-$$" FHS_CONTAINER="interactive-fhs-centos6-${RUN_ID}" -APACHE_CONTAINER="interactive-apache-2.4.68-${RUN_ID}" free_port() { local port=$1 @@ -28,6 +27,7 @@ APACHE_PORT="$(free_port 18068)" 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 \ @@ -87,20 +87,52 @@ podman exec "$FHS_CONTAINER" yum install -y \ 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 sh-opendav; do + 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 +' ``` 빌드 결과: @@ -110,8 +142,8 @@ ftsd 성공 arcmond2 실패: 제공된 정적 라이브러리의 __inet_addr, __error 심볼 cls 실패: CentOS 6에 setproctitle 없음 csagentd 실패: ShmDefine.h의 uint64_t 미정의 및 연쇄 컴파일 오류 -fimngd 실패: /user/service/httpd/include의 Apache APR 헤더 없음 -sh-opendav 실패: Makefile에 all target 없음 +fimngd 성공: 헤더에 ``만 추가 +sh-opendav 성공: apache-mod-dav-dbms target ``` ## 4. 빌드 산출물 확인 @@ -120,31 +152,68 @@ sh-opendav 실패: Makefile에 all target 없음 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. Apache 실행 테스트 +## 5. CentOS 6 Apache 2.2.15에 sh-opendav 배포 -Apache 최신 버전 2.4.68을 실행하고 HTTP 응답을 확인한다. - -### Apache 2.4.68 +빌드된 모듈을 CentOS 6 yum Apache 모듈 디렉터리에 배포하고 +`mod_dbd`와 함께 로드한다. ```bash -podman pull docker.io/library/httpd:2.4.68 -podman run -d \ - --name "$APACHE_CONTAINER" \ - -p "${APACHE_PORT}:80" \ - docker.io/library/httpd:2.4.68 +podman exec "$FHS_CONTAINER" cp \ + /workspace/fhs/sh-opendav/.libs/libmod_dav_repos.so \ + /etc/httpd/modules/mod_dav_repos.so -podman exec "$APACHE_CONTAINER" httpd -v -curl -sS -D - "http://127.0.0.1:${APACHE_PORT}/" \ - -o /tmp/apache-2.4.68-body +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' ``` -검증 결과: `HTTP/1.1 200 OK`, `Server: Apache/2.4.68 (Unix)`. +검증 결과: + +```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}" \ - --filter "name=${APACHE_CONTAINER}" +podman ps --filter "name=${FHS_CONTAINER}" ```