Files
interactive/fhs/README.7.md
T

2.4 KiB

FHS CentOS 7 빌드

CentOS 7 컨테이너에서 저장소를 직접 마운트하고 FHS를 빌드한다.

실행 준비

cd "$(git rev-parse --show-toplevel)"

RUN_ID="$(date +%Y%m%d%H%M%S)-$$"
FHS_CONTAINER="fhs-centos7-${RUN_ID}"

컨테이너 실행

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 저장소를 사용한다.

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의 고정 경로를 컨테이너 패키지 경로에 연결한다.

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 빌드

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 링크 심볼, clssetproctitle, csagentd/fimngd의 타입 미정의다. sh-opendavall target이 없다.

ftsd 산출물 확인:

file fhs/ftsd/src/ftsd
file fhs/ftsd/interface/sample/ftsd_test