ceph 18.2.4二次开发,docker镜像制作
编译环境要求
#需要ubuntu 22.04版本 参考https://docs.ceph.com/en/reef/start/os-recommendations/
#磁盘空间最好大于200GB
#内存如果小于100GB 会有OOM的情况发生,需要重跑 目前遇到内存占用最高为92GB
替换阿里云ubuntu 22.04源
将下面内容写入/etc/apt/sources.list 文件
mv /etc/apt/sources.list /etc/apt/sources.list.bak
#内容见下方
vim /etc/apt/sources.list
#更新apt源
apt update
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
#deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
#deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
#deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
#deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
拉取代码
git clone https://github.com/ceph/ceph.git
#切换tag
git checkout v18.2.4 -b v18.2.4
#下载子模块
git submodule update --init --recursive
安装依赖
sudo apt install curlexport PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/#安装依赖包
./install-deps.sh#检查当前的 GCC 版本 是否为c++ 11
#gcc --version
#g++ --versionsudo apt install python3-routes reprepro npm docker.iosudo apt install `cat doc_deps.deb.txt`
#npm阿里源
npm config set registry https://registry.npmmirror.com
#npm腾讯源
#npm config set registry https://mirrors.cloud.tencent.com/npm/
编译deb包
#脚本内容见下方,注意脚本中的注释
#test.sh的内容根据官方提供的make-debs.sh进行了微调整
#也可以直接运行make-debs.sh 替代这一步
touch test.shvim test.sh
#执行脚本 先打出来一个ceph的tar包, 手动将make-dict与exit这两行注释掉以后执行第二遍
sh test.sh#大概需要运行 2个小时左右
#运行成功后 默认会在/tmp/release/Ubuntu/WORKDIR生成对应的deb安装包
#运行过程中可能会有错误,大概率是因为从github.com上下载包没有下载成功导致
sh test.sh
#!/usr/bin/env bashset -xe. /etc/os-release
base=${1:-/tmp/release}
releasedir=$base/$NAME/WORKDIRmkdir -p $releasedir
#可以不打开
#清理工作目录中未被 Git 跟踪的文件和目录
#git clean -dxfvers=$(git describe --match "v*" | sed s/^v//)
#打包代码,依赖 会生成ceph-$vers.tar.bz2
#建议第一次执行在下面 添加exit 0
./make-dist $vers
exit 0cp ceph-$vers.tar.bz2 $releasedir/ceph_$vers.orig.tar.bz2
tar -C $releasedir -jxf $releasedir/ceph_$vers.orig.tar.bz2cp -a debian $releasedir/ceph-$vers/debian
cd $releasedir
perl -ni -e 'print if(!(/^Package: .*-dbg$/../^$/))' ceph-$vers/debian/control
perl -pi -e 's/--dbg-package.*//' ceph-$vers/debian/rulesdvers="$vers-1"cd ceph-$vers# ceph (18.2.4-1) stable; urgency=medium 取版本 18.2.4-1
chvers=$(head -1 debian/changelog | perl -ne 's/.*\(//; s/\).*//; print')
# 如果两个版本号获取不同,更改版本号
if [ "$chvers" != "$dvers" ]; thenDEBEMAIL="contact@ceph.com" dch -D $VERSION_CODENAME --force-distribution -b -v "$dvers" "new version"
fi#获取一半的cpu核数 计算后续的job的数量 -jxx
: ${NPROC:=$(($(nproc) / 2))}
#嫌慢可以全部cpu跑起来
#: ${NPROC:=$(nproc)}if test $NPROC -gt 1 ; thenj=-j${NPROC}
fi#dpkg-buildpackage -j24 -uc -us -b
PATH=/usr/lib/ccache:$PATH dpkg-buildpackage $j -uc -uscd ../..mkdir -p $VERSION_CODENAME/conf
cat > $VERSION_CODENAME/conf/distributions <<EOF
Codename: $VERSION_CODENAME
Suite: stable
Components: main
Architectures: $(dpkg --print-architecture) source
EOFif [ ! -e conf ]; thenln -s $VERSION_CODENAME/conf conf
fi#reprepro --basedir /tmp/release/Ubuntu include focal WORKDIR/ceph_18.2.4-1_amd64.changesreprepro --basedir $(pwd) include $VERSION_CODENAME WORKDIR/*.changesecho $dvers > $VERSION_CODENAME/version
制作本机ubuntu源
#安装nginx
sudo apt install nginx#将制作好的安装包路径 加个软连到nginx root_path下面
ln -s /tmp/release/Ubuntu /var/www/html/ubuntu#修改nginx配置 添加autoindex on; 配置项 注意带分号
vi /etc/nginx/nginx.conf#重启nginx服务
sudo systemctl restart nginx#没有安装firewalld可以忽略这个步骤
#查看firewalld状态 如果是running 需要开放端口
sudo firewall-cmd --state
#开放80 443端口
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
#重新加载firewalld配置
sudo firewall-cmd --reload
#浏览器访问 http://主机IP/ubuntu 看看能不能正常访问#主机IP 需要根据自己的实际ip修改
echo "deb [arch=amd64 trusted=yes] http://主机IP/ubuntu jammy main" >> /etc/apt/sources.list
#更新源
sudo apt update#安装cephadm软件 注意看deb的路径是不是自己的本机
sudo apt install cephadm ceph-common
打包Docker镜像
cd ~mkdir docker && cd dockertouch Dockerfile
#内容见下方,记得将"主机IP"修改自己的刚刚配置的主机地址
vi Dockerfile#编译镜像
docker build -t 'my/ceph' .#推送远端hub
docker push my/ceph:latest
FROM ubuntu:jammyENV DEBIAN_FRONTEND=noninteractive#安装需要的软件
RUN apt-get update && apt-get install -y ca-certificates#调整apt源
RUN echo "deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse" > /etc/apt/sources.list && \echo "deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb [arch=amd64 trusted=yes] http://主机IP/ubuntu jammy main" >> /etc/apt/sources.list && \apt update#安装ceph
RUN apt install -y ceph ceph-volume ceph-exporter python3-cffi udev#开放端口
EXPOSE 6789 6800 6801 6802 6803 6804 6805 80 5000# 设置内存锁限制
RUN echo '@ceph - memlock 204800' >> /etc/security/limits.conf && \echo '@root - memlock 204800' >> /etc/security/limits.conf# 记录初始磁盘使用量
RUN INITIAL_SIZE="$(bash -c 'sz="$(du -sm --exclude=/proc /)" ; echo "${sz%*/}"')"# Postinstall 清理
RUN ( echo "apt clean" && apt-get clean && \echo "apt autoclean" && apt-get autoclean ) || \( retval=$? && cat /var/log/apt/history.log && exit $retval )# 清理不必要的 apt、deb、dpkg 数据
RUN rm -rf \/var/lib/apt/lists/* \/var/cache/debconf/* \/var/log/apt/ \/var/log/dpkg.log# 编辑 lvm.conf 文件
RUN echo "About to edit lvm.conf" && \sed -i -e 's/^\([[:space:]#]*udev_rules =\) 1$/\1 0/' -e 's/^\([[:space:]#]*udev_sync =\) 1$/\1 0/' -e 's/^\([[:space:]#]*obtain_device_list_from_udev =\) 1$/\1 0/' /etc/lvm/lvm.conf && \echo "About to validate lvm.conf edits" && \# validate the sed command worked as expectedgrep -sqo "udev_sync = 0" /etc/lvm/lvm.conf && \grep -sqo "udev_rules = 0" /etc/lvm/lvm.conf && \grep -sqo "obtain_device_list_from_udev = 0" /etc/lvm/lvm.conf && \echo "Edits validated OK" && \mkdir -p /var/run/ganesha# 清理不必要的文件和目录
RUN rm -rf \/etc/{selinux,systemd,udev} \/lib/{lsb,udev} \/tmp/* \/usr/lib{,64}/{locale,systemd,udev,dracut} \/usr/share/{doc,info,locale,man} \/usr/share/{bash-completion,pkgconfig/bash-completion.pc} \/var/log/* \/var/tmp/*# 清理 Python 编译文件
RUN find / -xdev -name "*.pyc" -o -name "*.pyo" -exec rm -f {} \;# 压缩 ceph-dencoder
RUN if [ -f /usr/bin/ceph-dencoder ]; then gzip -9 /usr/bin/ceph-dencoder; fi# 清理 radosgw 相关文件
RUN rm -f /usr/lib/ceph/mgr/dashboard/static/AdminLTE-*/plugins/datatables/extensions/TableTools/images/psd/*# 清空日志文件
RUN find /var/log/ -type f -exec truncate -s 0 {} \;# 记录最终磁盘使用量
RUN FINAL_SIZE="$(bash -c 'sz="$(du -sm --exclude=/proc /)" ; echo "${sz%*/}"')"
RUN REMOVED_SIZE=$((INITIAL_SIZE - FINAL_SIZE))
RUN echo "Cleaning process removed ${REMOVED_SIZE}MB"
RUN echo "Dropped container size from ${INITIAL_SIZE}MB to ${FINAL_SIZE}MB"# 验证安装的软件包
RUN apt-cache show \ca-certificates \e2fsprogs \ceph-common \ceph-mon \ceph-osd \ceph-mds \cephfs-mirror \cephfs-top \rbd-mirror \ceph-mgr \ceph-mgr-cephadm \ceph-mgr-dashboard \ceph-mgr-k8sevents \ceph-mgr-rook \ceph-grafana-dashboards \kmod \lvm2 \gdisk \smartmontools \nvme-cli \udev \sg3-utils \procps \hostname \radosgw \nfs-ganesha \nfs-ganesha-ceph \attr \ceph-fuse \rbd-nbd \${CRIMSON_PACKAGES} \ceph-immutable-object-cache \ceph-volume \ceph-exporter \ceph-node-proxyRUN echo 'Packages verified successfully'
遇到的报错
CMake Error at xsimd_ep-stamp/xsimd_ep-download-RELEASE.cmake:37 (message):
CMake Error at xsimd_ep-stamp/xsimd_ep-download-RELEASE.cmake:37 (message):Command failed: 1'/usr/bin/cmake' '-Dmake=' '-Dconfig=' '-P' '/tmp/release/Ubuntu/WORKDIR/ceph-18.2.4-35-gac3a54a4db5/obj-x86_64-linux-gnu/src/arrow/cpp/src/xsimd_ep-stamp/xsimd_ep-download-RELEASE-impl.cmake'See also/tmp/release/Ubuntu/WORKDIR/ceph-18.2.4-35-gac3a54a4db5/obj-x86_64-linux-gnu/src/arrow/cpp/src/xsimd_ep-stamp/xsimd_ep-download-*.log#网络问题 最好加个代理 重新执行
Could not find platform independent libraries Consider setting $PYTHONHOME to [:<exec_prefix>]
mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
mkdir /var/lib/dpkg/info/
apt-get update
apt-get -f install
mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old/
rm -rf /var/lib/dpkg/info
mv /var/lib/dpkg/info_old/ /var/lib/dpkg/info
make-dict执行的太慢
由于make-dict 中需要下载外网资源 可以先下载完毕后,放到执行脚本目录,修改makde-dict注释download_from相关函数调用
cephadm启动报错 /usr/bin/ceph: stderr Error EIO: Module ‘cephadm’ has experienced an error and cannot handle commands: ContainerInspectInfo(image_id=‘438bbc41efbb76533bdb38441b1b804159559d6e170ac7bb2404dd8f3d6b1e58’, ceph_version=‘ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)’, repo_digests=[‘’]) Unable to set up “admin” label; assuming older version of Ceph
#查看RepoDigests为空,这个需要推送一个hub仓库填充一下即可
docker inspect imagesid
2024-11-18 09:52:18,352 7f21e3e421c0 INFO /usr/bin/docker: stderr FileNotFoundError: [Errno 2] No such file or directory: ‘udevadm’
#缺少udevadm软件
udevadm --version
#上面不能正常运行,进行安装操作
apt install udev
相关文章:
ceph 18.2.4二次开发,docker镜像制作
编译环境要求 #需要ubuntu 22.04版本 参考https://docs.ceph.com/en/reef/start/os-recommendations/ #磁盘空间最好大于200GB #内存如果小于100GB 会有OOM的情况发生,需要重跑 目前遇到内存占用最高为92GB替换阿里云ubuntu 22.04源 将下面内容写入/etc/apt/sources.list 文件…...
产品经理的项目管理课
各位产品经理,大家下午好,今天我给大家分享的主题是“产品经理如何做好项目管理”。 其实,我是不想分享这个主题的,是因为在周会中大家投票对这个议题最感兴趣,11个同学中有7个投了这个主题,所以才有了这次…...
Linux 下的 AWK 命令详细指南与示例
目录 简介AWK 的主要特性基本语法示例1. 打印文件的所有行2. 打印特定字段3. 打印匹配模式的行4. 基于条件过滤并打印5. 使用内置变量6. 执行算术运算7. 字符串操作8. 使用 BEGIN 和 END 块9. 处理分隔符文件 高级功能自定义脚本使用外部变量 总结 简介 AWK 是 Linux 中功能强…...
FPGA经验谈系列文章——8、复位的设计
前言 剑法往往有着固定的招式套路,而写代码似乎也存在类似的情况。不知从何时起,众多 FPGA 工程师们在编写代码时开启了一种关于 always 语句块的流行写法,那就是: always @(posedge i_clk or negedge i_rstn) 就笔者所经历的诸多项目以及所接触到的不少工程师而言,大家在…...
C#里怎么样实现操作符重载?
C#里怎么样实现操作符重载? 一般情况,都是表示某种类型的类时,才会使用到操作符重载。 比如实现一个复数类。 在C#中,重载运算符是通过在类或结构中定义特殊的方法来实现的,这些方法的名称是operator关键字后跟要重载的运算符。例如,要重载+运算符,可以定义一个名为op…...
项目实战:Vue3开发一个购物车
这段HTML代码实现了一个简单的购物车实战小项目的前端页面,结合了Vue.js框架来实现数据响应式和交互逻辑。页面展示了购物车中的商品项,每个商品项有增减数量的按钮,并且能显示商品总数以及目前固定为0元的商品总价和总价计算。 【运用响应式…...
Oracle SQL*Plus中的SET VERIFY
在 Oracle SQL*Plus 中,SET VERIFY ON 和 SET VERIFY OFF 是两个用于控制命令执行前后显示变量值的命令。这些命令主要用于调试和验证 SQL 脚本中的变量替换情况。 一、参数说明 1.1 SET VERIFY ON 作用:启用变量替换的验证功能。当启用时,S…...
Spring AI 框架使用的核心概念
一、模型(Model) AI 模型是旨在处理和生成信息的算法,通常模仿人类的认知功能。通过从大型数据集中学习模式和见解,这些模型可以做出预测、文本、图像或其他输出,从而增强各个行业的各种应用。 AI 模型有很多种&…...
二叉树路径相关算法题|带权路径长度WPL|最长路径长度|直径长度|到叶节点路径|深度|到某节点的路径非递归(C)
带权路径长度WPL 二叉树的带权路径长度(WPL)是二叉树所有叶节点的带权路径长度之和,给定一棵二叉树T,采用二叉链表存储,节点结构为 其中叶节点的weight域保存该节点的非负权值,设root为指向T的根节点的指针,设计求W…...
前端:JavaScript (学习笔记)【2】
目录 一,数组的使用 1,数组的创建 [ ] 2,数组的元素和长度 3,数组的遍历方式 4,数组的常用方法 二,JavaScript中的对象 1,常用对象 (1)String和java中的Stri…...
[面试]-golang基础面试题总结
文章目录 panic 和 recover**注意事项**使用 pprof、trace 和 race 进行性能调试。**Go Module**:Go中new和make的区别 Channel什么是 Channel 的方向性?如何对 Channel 进行方向限制?Channel 的缓冲区大小对于 Channel 和 Goroutine 的通信有…...
【案例】泛微.齐业成助力北京中远大昌汽车实现数电票全流程管理
中远大昌统一发票共享平台上线三个多月以来,实现: 5000份 60000元 发票开具 成本节约 客户简介及需求分析 北京中远大昌汽车服务有限公司(以下简称“中远大昌”)成立于2002年,是中远海运集团所属香远(北…...
微软安全文章合集
说明:文章来自微软很多年前旧帖,有用的部分拿去,没用的就忽略吧,另外提一句,微软会清理文章,很多我收藏的帖子都无法查看了,所以收藏的最好办法是,用word复制粘贴下来保存到云盘&…...
自然语言处理: RAG优化之Embedding模型选型重要依据:mteb/leaderboard榜
本人项目地址大全:Victor94-king/NLP__ManVictor: CSDN of ManVictor git地址:https://github.com/opendatalab/MinerU 写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!! 写在前面: 笔者更新不易,希望走过路…...
鸿蒙主流路由详解
鸿蒙主流路由详解 Navigation Navigation更适合于一次开发,多端部署,也是官方主流推荐的一种路由控制方式,但是,使用起来入侵耦合度高,所以,一般会使用HMRouter,这也是官方主流推荐的路由 Navigation官网地址 个人源码地址 路由跳转 第一步-定义路由栈 Provide(PageInfo) pag…...
C#构建一个简单的循环神经网络,模拟对话
循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据的神经网络模型。与传统的前馈神经网络不同,RNN具有内部记忆能力,可以捕捉到序列中元素之间的依赖关系。这种特性使得RNN在自然语言处理、语音识别、时间序列预…...
Linux上安装单机版Kibana6.8.1
1. 下载安装包 kibana-6.8.1-linux-x86_64.tar.gz 链接:https://pan.baidu.com/s/1b4kION9wFXIVHuWDn2J-Aw 提取码:rdrc 2. Kibana启动不能使用root用户,使用ES里创建的elsearch用户,进行赋权: chown -R elsearch:els…...
短视频矩阵矩阵,矩阵号策略
随着数字媒体的迅猛发展,短视频平台已经成为企业和个人品牌推广的核心渠道。在这一背景下,短视频矩阵营销策略应运而生,它通过高效整合和管理多个短视频账号,实现资源的最优配置和营销效果的最大化。本文旨在深入探讨短视频矩阵的…...
Rust 力扣 - 2266. 统计打字方案数
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 这题可以先求按了多少次相同连续的按钮,所有的连续相同按钮表示的方案数的乘积就是本题答案 我们的关键问题就转换成了按n个连续相同按钮表示的方案数 设f(i)表示按i个连续相同按钮表示的方案数 如…...
【大数据技术与开发实训】携程景点在线评论分析
景点在线评论分析 题目要求实验目标技术实现数据采集获取所有相关景点页面的 URL获取所有相关景点对应的 poiId 及其他有用信息通过 poiId 获取所有景点的全部评论数据采集结果 数据预处理景点信息的数据预处理查看数据基本信息缺失值处理 用户评论的数据处理缺失值处理分词、去…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
