diff --git a/fhs/README.10.md b/fhs/README.10.md new file mode 100644 index 0000000..960fa84 --- /dev/null +++ b/fhs/README.10.md @@ -0,0 +1,76 @@ +# FHS Rocky Linux 10 빌드 + +Rocky Linux 10 컨테이너에서 저장소를 직접 마운트하고 FHS를 빌드한다. + +## 실행 준비와 컨테이너 + +```bash +cd "$(git rev-parse --show-toplevel)" +RUN_ID="$(date +%Y%m%d%H%M%S)-$$" +FHS_CONTAINER="fhs-rocky10-${RUN_ID}" + +podman pull docker.io/rockylinux/rockylinux:10 +podman run -d \ + --name "$FHS_CONTAINER" \ + --volume "$PWD:/workspace:Z" \ + --workdir /workspace/fhs \ + docker.io/rockylinux/rockylinux:10 sleep infinity +``` + +소스는 복사하지 않고 `-v`로 현재 저장소를 `/workspace`에 마운트한다. + +## 의존성과 고정 경로 준비 + +```bash +podman exec "$FHS_CONTAINER" bash -lc ' + dnf install -y \ + findutils gcc gcc-c++ make pkgconf-pkg-config bc \ + boost-devel openssl-devel sqlite-devel openldap-devel \ + libpq-devel apr-devel apr-util-devel +' + +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 +' +``` + +## 실제 결과 + +실행 당시 Rocky Linux 10.2, GCC 14.3.1 환경에서 확인했다. + +| 구성요소 | 결과 | +| --- | ---: | +| `arcmond2` | 2 | +| `cls` | 2 | +| `csagentd` | 2 | +| `fimngd` | 2 | +| `ftsd` | 0 | +| `sh-opendav` | 2 | + +`arcmond2`는 `makedev`, `cls`는 `setproctitle`, `csagentd`와 +`fimngd`는 타입 미정의로 실패했다. +`sh-opendav`는 `all` target이 없다. + +```bash +file fhs/ftsd/src/ftsd +file fhs/ftsd/interface/sample/ftsd_test +``` diff --git a/fhs/README.7.md b/fhs/README.7.md new file mode 100644 index 0000000..e31191c --- /dev/null +++ b/fhs/README.7.md @@ -0,0 +1,97 @@ +# 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 +``` diff --git a/fhs/README.8.md b/fhs/README.8.md new file mode 100644 index 0000000..334df83 --- /dev/null +++ b/fhs/README.8.md @@ -0,0 +1,76 @@ +# FHS Rocky Linux 8 빌드 + +Rocky Linux 8 컨테이너에서 저장소를 직접 마운트하고 FHS를 빌드한다. + +## 실행 준비와 컨테이너 + +```bash +cd "$(git rev-parse --show-toplevel)" +RUN_ID="$(date +%Y%m%d%H%M%S)-$$" +FHS_CONTAINER="fhs-rocky8-${RUN_ID}" + +podman pull docker.io/rockylinux/rockylinux:8 +podman run -d \ + --name "$FHS_CONTAINER" \ + --volume "$PWD:/workspace:Z" \ + --workdir /workspace/fhs \ + docker.io/rockylinux/rockylinux:8 sleep infinity +``` + +소스는 복사하지 않고 `-v`로 현재 저장소를 `/workspace`에 마운트한다. + +## 의존성과 고정 경로 준비 + +```bash +podman exec "$FHS_CONTAINER" bash -lc ' + dnf install -y \ + findutils gcc gcc-c++ make pkgconf-pkg-config bc \ + boost-devel openssl-devel sqlite-devel openldap-devel \ + libpq-devel apr-devel apr-util-devel +' + +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 +' +``` + +## 실제 결과 + +실행 당시 Rocky Linux 8.10, GCC 8.5.0 환경에서 확인했다. + +| 구성요소 | 결과 | +| --- | ---: | +| `arcmond2` | 2 | +| `cls` | 2 | +| `csagentd` | 2 | +| `fimngd` | 0 | +| `ftsd` | 0 | +| `sh-opendav` | 2 | + +`arcmond2`는 `makedev`, `cls`는 `setproctitle`, `csagentd`는 +`uint64_t` 및 시스템 정보 필드에서 실패했다. +`sh-opendav`는 `all` target이 없다. + +```bash +file fhs/ftsd/src/ftsd +file fhs/ftsd/interface/sample/ftsd_test +``` diff --git a/fhs/README.9.md b/fhs/README.9.md new file mode 100644 index 0000000..ef9abcd --- /dev/null +++ b/fhs/README.9.md @@ -0,0 +1,76 @@ +# FHS Rocky Linux 9 빌드 + +Rocky Linux 9 컨테이너에서 저장소를 직접 마운트하고 FHS를 빌드한다. + +## 실행 준비와 컨테이너 + +```bash +cd "$(git rev-parse --show-toplevel)" +RUN_ID="$(date +%Y%m%d%H%M%S)-$$" +FHS_CONTAINER="fhs-rocky9-${RUN_ID}" + +podman pull docker.io/rockylinux/rockylinux:9 +podman run -d \ + --name "$FHS_CONTAINER" \ + --volume "$PWD:/workspace:Z" \ + --workdir /workspace/fhs \ + docker.io/rockylinux/rockylinux:9 sleep infinity +``` + +소스는 복사하지 않고 `-v`로 현재 저장소를 `/workspace`에 마운트한다. + +## 의존성과 고정 경로 준비 + +```bash +podman exec "$FHS_CONTAINER" bash -lc ' + dnf install -y \ + findutils gcc gcc-c++ make pkgconf-pkg-config bc \ + boost-devel openssl-devel sqlite-devel openldap-devel \ + libpq-devel apr-devel apr-util-devel +' + +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 +' +``` + +## 실제 결과 + +실행 당시 Rocky Linux 9.8, GCC 11.5.0 환경에서 확인했다. + +| 구성요소 | 결과 | +| --- | ---: | +| `arcmond2` | 2 | +| `cls` | 2 | +| `csagentd` | 2 | +| `fimngd` | 0 | +| `ftsd` | 0 | +| `sh-opendav` | 2 | + +`arcmond2`는 `makedev`, `cls`는 `setproctitle`, `csagentd`는 +`uint64_t` 및 시스템 정보 필드에서 실패했다. +`sh-opendav`는 `all` target이 없다. + +```bash +file fhs/ftsd/src/ftsd +file fhs/ftsd/interface/sample/ftsd_test +```