已合并
chore(ceph): add openEuler 24.03-LTS-SP4 support #2831
yanzhicong1创建于 7月9日
chore(ceph): add openEuler 24.03-LTS-SP4 support #2831
已合并
共 5 个文件变更+133-3
| @@ -0,0 +1,54 @@ | |||
| 1 | +ARG BASE=openeuler/openeuler:24.03-lts-sp4 | ||
| 2 | +FROM $BASE as builder | ||
| 3 | +ARG VERSION=20.3.0 | ||
| 4 | + | ||
| 5 | +RUN dnf update -y \ | ||
| 6 | + && dnf install -y \ | ||
| 7 | + git gcc-c++ ninja-build cmake python3-sphinx \ | ||
| 8 | + libibverbs libibverbs-devel rdma-core rdma-core-devel \ | ||
| 9 | + systemd-devel libblkid-devel keyutils-libs-devel \ | ||
| 10 | + openldap-devel cryptsetup-devel python3-pip \ | ||
| 11 | + autoconf automake libtool ocaml ocaml-devel \ | ||
| 12 | + libatomic librdkafka librdkafka-devel \ | ||
| 13 | + gnutls-devel libxml2-devel glib2-devel \ | ||
| 14 | + libev-devel fuse3-devel bash-completion \ | ||
| 15 | + ocaml-findlib python3-devel golang rust cargo \ | ||
| 16 | + libaio libaio-devel sqlite sqlite-devel \ | ||
| 17 | + snappy snappy-devel lz4 lz4-devel curl-devel \ | ||
| 18 | + expat-devel liboath liboath-devel lttng-ust lttng-ust-devel \ | ||
| 19 | + babeltrace libbabeltrace-devel libicu libicu-devel \ | ||
| 20 | + thrift-devel libcap-devel lua-devel \ | ||
| 21 | + libcap-ng libcap-ng-devel gperf lmdb lmdb-devel \ | ||
| 22 | + librabbitmq librabbitmq-devel python3-pyyaml \ | ||
| 23 | + numactl-devel make python nasm \ | ||
| 24 | + && dnf clean all | ||
| 25 | + | ||
| 26 | +RUN python3 -m pip install --upgrade pip \ | ||
| 27 | + && python3 -m pip install cython prettytable | ||
| 28 | + | ||
| 29 | +WORKDIR /opt | ||
| 30 | + | ||
| 31 | +RUN git clone https://gitlab.com/nbdkit/libnbd.git \ | ||
| 32 | + && cd libnbd \ | ||
| 33 | + && autoreconf -fi \ | ||
| 34 | + && ./configure \ | ||
| 35 | + && make -j$(nproc) \ | ||
| 36 | + && make install \ | ||
| 37 | + && cd .. \ | ||
| 38 | + && rm -rf libnbd | ||
| 39 | + | ||
| 40 | +RUN git clone -b v${VERSION} --recursive --depth 1 https://github.com/ceph/ceph.git \ | ||
| 41 | + && cd ceph \ | ||
| 42 | + && ./do_cmake.sh -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=OFF \ | ||
| 43 | + && cd build \ | ||
| 44 | + && ninja -j$(nproc) \ | ||
| 45 | + && ninja install | ||
| 46 | + | ||
| 47 | +ENV LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH | ||
| 48 | + | ||
| 49 | +COPY --chmod=755 entrypoint.sh /opt/ceph/entrypoint.sh | ||
| 50 | + | ||
| 51 | +WORKDIR /opt/ceph | ||
| 52 | + | ||
| 53 | +ENTRYPOINT [ "./entrypoint.sh" ] | ||
| 54 | + | ||
| @@ -0,0 +1,72 @@ | |||
| 1 | +#!/bin/bash | ||
| 2 | +set -e | ||
| 3 | + | ||
| 4 | +CEPH_SRC_DIR=$(pwd) | ||
| 5 | +BUILD_DIR="$CEPH_SRC_DIR/build" | ||
| 6 | +CLUSTER_DIR="$CEPH_SRC_DIR/ceph-cluster" | ||
| 7 | +ETC_DIR="$CLUSTER_DIR/etc" | ||
| 8 | +LIB_DIR="$CLUSTER_DIR/lib" | ||
| 9 | +LOG_DIR="$CLUSTER_DIR/log" | ||
| 10 | + | ||
| 11 | +MON_NAME="mon1" | ||
| 12 | +MON_IP="127.0.0.1" | ||
| 13 | +FSID=$(uuidgen) | ||
| 14 | + | ||
| 15 | +echo "[*] Using FSID: $FSID" | ||
| 16 | +echo "[*] Working directory: $CEPH_SRC_DIR" | ||
| 17 | + | ||
| 18 | +echo "[*] Cleaning up previous state..." | ||
| 19 | +pkill -9 ceph-mon || true | ||
| 20 | +rm -rf "$CLUSTER_DIR" | ||
| 21 | +rm -f /var/run/ceph/ceph-mon.$MON_NAME.asok | ||
| 22 | + | ||
| 23 | +mkdir -p "$ETC_DIR" "$LIB_DIR/mon/$MON_NAME" "$LOG_DIR" | ||
| 24 | + | ||
| 25 | +cat > "$ETC_DIR/ceph.conf" <<EOF | ||
| 26 | +[global] | ||
| 27 | +fsid = $FSID | ||
| 28 | +mon_initial_members = $MON_NAME | ||
| 29 | +mon_host = $MON_IP | ||
| 30 | +auth_cluster_required = cephx | ||
| 31 | +auth_service_required = cephx | ||
| 32 | +auth_client_required = cephx | ||
| 33 | +log_to_file = true | ||
| 34 | +log_file = $LOG_DIR/ceph.log | ||
| 35 | +log_to_stderr = false | ||
| 36 | +run_dir = /var/run/ceph | ||
| 37 | +mon_data = $LIB_DIR/mon/\$id | ||
| 38 | +osd_data = $LIB_DIR/osd/\$id | ||
| 39 | +# Critical fix: Specify keyring paths | ||
| 40 | +keyring = $ETC_DIR/ceph.client.admin.keyring | ||
| 41 | +mon_keyring = $ETC_DIR/ceph.mon.keyring | ||
| 42 | +EOF | ||
| 43 | + | ||
| 44 | +echo "[*] Generating keys..." | ||
| 45 | +"$BUILD_DIR/bin/ceph-authtool" --create-keyring "$ETC_DIR/ceph.mon.keyring" --gen-key -n mon. --cap mon 'allow *' | ||
| 46 | +"$BUILD_DIR/bin/ceph-authtool" --create-keyring "$ETC_DIR/ceph.client.admin.keyring" --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mgr 'allow *' | ||
| 47 | +"$BUILD_DIR/bin/ceph-authtool" "$ETC_DIR/ceph.mon.keyring" --import-keyring "$ETC_DIR/ceph.client.admin.keyring" | ||
| 48 | + | ||
| 49 | +echo "[*] Generating monmap..." | ||
| 50 | +"$BUILD_DIR/bin/monmaptool" --clobber --create --add "$MON_NAME" "$MON_IP" --fsid "$FSID" "$ETC_DIR/monmap" | ||
| 51 | + | ||
| 52 | +echo "[*] Initializing monitor..." | ||
| 53 | +"$BUILD_DIR/bin/ceph-mon" --mkfs -i "$MON_NAME" --monmap "$ETC_DIR/monmap" --keyring "$ETC_DIR/ceph.mon.keyring" --conf "$ETC_DIR/ceph.conf" | ||
| 54 | + | ||
| 55 | +echo "[*] Starting monitor..." | ||
| 56 | +"$BUILD_DIR/bin/ceph-mon" -i "$MON_NAME" \ | ||
| 57 | + --conf "$ETC_DIR/ceph.conf" \ | ||
| 58 | + --keyring "$ETC_DIR/ceph.mon.keyring" & | ||
| 59 | + | ||
| 60 | +sleep 3 | ||
| 61 | + | ||
| 62 | +if ! pgrep -f "ceph-mon.*$MON_NAME" >/dev/null; then | ||
| 63 | + echo "[!] Error: ceph-mon process failed to start! Check logs: $LOG_DIR/ceph.log" | ||
| 64 | + exit 1 | ||
| 65 | +fi | ||
| 66 | + | ||
| 67 | +echo "[*] Cluster status:" | ||
| 68 | +"$BUILD_DIR/bin/ceph" -s \ | ||
| 69 | + --conf "$ETC_DIR/ceph.conf" \ | ||
| 70 | + --keyring "$ETC_DIR/ceph.client.admin.keyring" | ||
| 71 | + | ||
| 72 | +echo "[+] Successfully started single-node Ceph cluster!" | ||
| @@ -18,6 +18,7 @@ The tag of each `ceph` docker image is consist of the version of `ceph` and the | |||
| 18 | 18 | ||
| 19 | | Tag | Currently | Architectures | | 19 | | Tag | Currently | Architectures | |
| 20 | |----------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|---------------| | 20 | |----------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|---------------| |
| 21 | +|[20.3.0-oe2403sp4](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp4/Dockerfile) | ceph 20.3.0 on openEuler 24.03-LTS-SP4 | amd64, arm64 | | ||
| 21 | |[20.3.0-oe2403sp2](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp2/Dockerfile) | ceph 20.3.0 on openEuler 24.03-LTS-SP2 | amd64, arm64 | | 22 | |[20.3.0-oe2403sp2](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp2/Dockerfile) | ceph 20.3.0 on openEuler 24.03-LTS-SP2 | amd64, arm64 | |
| 22 | | [20.3.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp1/Dockerfile) | Ceph 20.3.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | | 23 | | [20.3.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp1/Dockerfile) | Ceph 20.3.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | |
| 23 | 24 | ||
| @@ -38,4 +39,4 @@ In this usage, users can select the corresponding `{Tag}` based on their require | |||
| 38 | The `openeuler/ceph` image is used to verify the integration between the upstream ceph version and openEuler. | 39 | The `openeuler/ceph` image is used to verify the integration between the upstream ceph version and openEuler. |
| 39 | 40 | ||
| 40 | # Question and answering | 41 | # Question and answering |
| 41 | -If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). | 42 | +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). |
| @@ -11,6 +11,7 @@ tags: | | |||
| 11 | 11 | ||
| 12 | | Tag | Currently | Architectures | | 12 | | Tag | Currently | Architectures | |
| 13 | |----------|-------------|------------------| | 13 | |----------|-------------|------------------| |
| 14 | + |[20.3.0-oe2403sp4](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp4/Dockerfile) | ceph 20.3.0 on openEuler 24.03-LTS-SP4 | amd64, arm64 | | ||
| 14 | |[20.3.0-oe2403sp2](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp2/Dockerfile) | ceph 20.3.0 on openEuler 24.03-LTS-SP2 | amd64, arm64 | | 15 | |[20.3.0-oe2403sp2](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp2/Dockerfile) | ceph 20.3.0 on openEuler 24.03-LTS-SP2 | amd64, arm64 | |
| 15 | |[20.3.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp1/Dockerfile)| Ceph 20.3.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | | 16 | |[20.3.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp1/Dockerfile)| Ceph 20.3.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | |
| 16 | 17 | ||
| @@ -38,4 +39,4 @@ dependency: | |||
| 38 | - librados | 39 | - librados |
| 39 | - openssl | 40 | - openssl |
| 40 | - libcurl | 41 | - libcurl |
| 41 | - - systemd | 42 | + - systemd |
| @@ -2,4 +2,6 @@ | |||
| 2 | path: 20.3.0/24.03-lts-sp1/Dockerfile | 2 | path: 20.3.0/24.03-lts-sp1/Dockerfile |
| 3 | 3 | ||
| 4 | 20.3.0-oe2403sp2: | 4 | 20.3.0-oe2403sp2: |
| 5 | - path: 20.3.0/24.03-lts-sp2/Dockerfile | 5 | + path: 20.3.0/24.03-lts-sp2/Dockerfile |
| 6 | +20.3.0-oe2403sp4: | ||
| 7 | + path: 20.3.0/24.03-lts-sp4/Dockerfile | ||
🟡 Medium Priority
建议:在
ninja install之后添加清理步骤,删除源码目录中不被 entrypoint.sh 需要的文件(至少删除.git目录)。推荐追加&& rm -rf .git或移到独立 RUN 层中执行清理,与 libnbd 处理方式保持一致。