# FHS CentOS 7 빌드 CentOS 7 컨테이너에서 저장소를 직접 마운트하고 FHS를 빌드한다. ## 실행 준비 ```bash cd "$(git rev-parse --show-toplevel)" RUN_ID="$(date +%Y%m%d%H%M%S)-$$" FHS_CONTAINER="fhs-centos7-${RUN_ID}" ``` ## 컨테이너 실행 ```bash podman pull docker.io/library/centos:7 podman run -d \ --name "$FHS_CONTAINER" \ --volume "$PWD:/workspace:Z" \ --workdir /workspace/fhs \ docker.io/library/centos:7 sleep infinity ``` 소스를 컨테이너로 복사하지 않고 `-v`로 현재 저장소를 마운트한다. ## 저장소와 의존성 준비 CentOS 7은 vault 저장소를 사용한다. ```bash centos_base='^#baseurl=http://mirror.centos.org/centos/$releasever' centos_vault='baseurl=http://vault.centos.org/7.9.2009' podman exec "$FHS_CONTAINER" bash -lc " sed -i \ -e 's|^mirrorlist=|#mirrorlist=|' \ -e 's|${centos_base}|${centos_vault}|' \ /etc/yum.repos.d/CentOS-Base.repo yum clean all yum install -y \ findutils gcc gcc-c++ make pkgconfig bc \ boost-devel openssl-devel sqlite-devel openldap-devel \ postgresql-devel apr-devel apr-util-devel " ``` 소스 Makefile의 고정 경로를 컨테이너 패키지 경로에 연결한다. ```bash podman exec "$FHS_CONTAINER" bash -lc ' set -e mkdir -p /user/db/pgsql/lib /user/service/httpd/lib ln -sfn /usr/include /user/db/pgsql/include ln -sfn /usr/lib64/libpq.so /user/db/pgsql/lib/libpq.a ln -sfn /usr/include/apr-1 /user/service/httpd/include ln -sfn /usr/lib64/libapr-1.so /user/service/httpd/lib/libapr-1.a ' ``` ## FHS 빌드 ```bash podman exec -w /workspace/fhs "$FHS_CONTAINER" bash -lc ' set +e for component in arcmond2 cls csagentd fimngd ftsd sh-opendav; do make clean -C "$component" >/dev/null 2>&1 echo "===== BUILD ${component} =====" make all -C "$component" echo "===== STATUS ${component} $? =====" done ' ``` ## 실제 결과 실행 이미지의 GCC는 4.8.5다. | 구성요소 | 결과 | | --- | ---: | | `arcmond2` | 2 | | `cls` | 2 | | `csagentd` | 2 | | `fimngd` | 2 | | `ftsd` | 0 | | `sh-opendav` | 2 | 주요 실패 원인은 `arcmond2`의 `__inet_addr`/`__error` 링크 심볼, `cls`의 `setproctitle`, `csagentd`/`fimngd`의 타입 미정의다. `sh-opendav`는 `all` target이 없다. `ftsd` 산출물 확인: ```bash file fhs/ftsd/src/ftsd file fhs/ftsd/interface/sample/ftsd_test ```