docs(fhs): document CentOS 6 build and DAV validation
This commit is contained in:
+88
-19
@@ -9,7 +9,6 @@ cd "$(git rev-parse --show-toplevel)"
|
|||||||
|
|
||||||
RUN_ID="$(date +%Y%m%d%H%M%S)-$$"
|
RUN_ID="$(date +%Y%m%d%H%M%S)-$$"
|
||||||
FHS_CONTAINER="interactive-fhs-centos6-${RUN_ID}"
|
FHS_CONTAINER="interactive-fhs-centos6-${RUN_ID}"
|
||||||
APACHE_CONTAINER="interactive-apache-2.4.68-${RUN_ID}"
|
|
||||||
|
|
||||||
free_port() {
|
free_port() {
|
||||||
local port=$1
|
local port=$1
|
||||||
@@ -28,6 +27,7 @@ APACHE_PORT="$(free_port 18068)"
|
|||||||
podman pull docker.io/library/centos:centos6
|
podman pull docker.io/library/centos:centos6
|
||||||
podman run -d \
|
podman run -d \
|
||||||
--name "$FHS_CONTAINER" \
|
--name "$FHS_CONTAINER" \
|
||||||
|
--publish "${APACHE_PORT}:80" \
|
||||||
--volume "$PWD:/workspace:Z" \
|
--volume "$PWD:/workspace:Z" \
|
||||||
--workdir /workspace/fhs \
|
--workdir /workspace/fhs \
|
||||||
docker.io/library/centos:centos6 \
|
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" mkdir -p /user/db
|
||||||
podman exec "$FHS_CONTAINER" ln -s /usr/pgsql-9.3 /user/db/pgsql
|
podman exec "$FHS_CONTAINER" ln -s /usr/pgsql-9.3 /user/db/pgsql
|
||||||
podman exec "$FHS_CONTAINER" yum install -y libmcrypt-devel bc
|
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 빌드
|
## 3. FHS 빌드
|
||||||
|
|
||||||
`podman exec -w`로 FHS 작업 디렉터리를 지정해 구성요소를 빌드한다.
|
`podman exec -w`로 FHS 작업 디렉터리를 지정해 구성요소를 빌드한다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
podman exec -w /workspace/fhs "$FHS_CONTAINER" bash -lc '
|
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} ====="
|
echo "===== BUILD ${component} ====="
|
||||||
make all -C "${component}"
|
make all -C "${component}"
|
||||||
echo "===== STATUS ${component} $? ====="
|
echo "===== STATUS ${component} $? ====="
|
||||||
done
|
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 심볼
|
arcmond2 실패: 제공된 정적 라이브러리의 __inet_addr, __error 심볼
|
||||||
cls 실패: CentOS 6에 setproctitle 없음
|
cls 실패: CentOS 6에 setproctitle 없음
|
||||||
csagentd 실패: ShmDefine.h의 uint64_t 미정의 및 연쇄 컴파일 오류
|
csagentd 실패: ShmDefine.h의 uint64_t 미정의 및 연쇄 컴파일 오류
|
||||||
fimngd 실패: /user/service/httpd/include의 Apache APR 헤더 없음
|
fimngd 성공: 헤더에 `<stdint.h>`만 추가
|
||||||
sh-opendav 실패: Makefile에 all target 없음
|
sh-opendav 성공: apache-mod-dav-dbms target
|
||||||
```
|
```
|
||||||
|
|
||||||
## 4. 빌드 산출물 확인
|
## 4. 빌드 산출물 확인
|
||||||
@@ -120,31 +152,68 @@ sh-opendav 실패: Makefile에 all target 없음
|
|||||||
file fhs/ftsd/src/ftsd
|
file fhs/ftsd/src/ftsd
|
||||||
file fhs/ftsd/interface/sample/ftsd_test
|
file fhs/ftsd/interface/sample/ftsd_test
|
||||||
file fhs/ftsd/lib/libInterCommon.a
|
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 응답을 확인한다.
|
빌드된 모듈을 CentOS 6 yum Apache 모듈 디렉터리에 배포하고
|
||||||
|
`mod_dbd`와 함께 로드한다.
|
||||||
### Apache 2.4.68
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
podman pull docker.io/library/httpd:2.4.68
|
podman exec "$FHS_CONTAINER" cp \
|
||||||
podman run -d \
|
/workspace/fhs/sh-opendav/.libs/libmod_dav_repos.so \
|
||||||
--name "$APACHE_CONTAINER" \
|
/etc/httpd/modules/mod_dav_repos.so
|
||||||
-p "${APACHE_PORT}:80" \
|
|
||||||
docker.io/library/httpd:2.4.68
|
|
||||||
|
|
||||||
podman exec "$APACHE_CONTAINER" httpd -v
|
podman exec "$FHS_CONTAINER" sed -i \
|
||||||
curl -sS -D - "http://127.0.0.1:${APACHE_PORT}/" \
|
's|^#LoadModule dbd_module|LoadModule dbd_module|' \
|
||||||
-o /tmp/apache-2.4.68-body
|
/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
|
```bash
|
||||||
podman ps --filter "name=${FHS_CONTAINER}" \
|
podman ps --filter "name=${FHS_CONTAINER}"
|
||||||
--filter "name=${APACHE_CONTAINER}"
|
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user