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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细探索xinput1_3.dll:功能、问题与xinput1_3.dll丢失的解决方案

本文旨在深入探讨xinput1_3.dll这一动态链接库文件。首先介绍其在计算机系统中的功能和作用&#xff0c;特别是在游戏和输入设备交互方面的重要性。然后分析在使用过程中可能出现的诸如文件丢失、版本不兼容等问题&#xff0c;并提出相应的解决方案&#xff0c;包括重新安装相关…

Golang项目:实现一个内存缓存系统

要求 支持设定过期时间&#xff0c;精确到秒支持设定最大内存&#xff0c;当内存超过时做出合适的处理支持并发安全按照以下接口安全 type Cache interface{//size : 1KB 100KB 1MB 2MB 1GBSetMaxMemory(size string )bool//将value写入缓存Set(key string, val interface{},e…

计算机网络复习笔记(湖科大教书匠)

课程链接&#xff1a;【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】 https://www.bilibili.com/video/BV1c4411d7jb/?p61&share_sourcecopy_web&vd_sourcecd12864239c2976e9f2bce4b307393f0 一、基础概念 信息交换方式 电路交换 电话交换机接通…

输入三个整数x,y,z,请把这三个数由小到大输出。-多语言实现

目录 C 语言实现 Python 实现 Java 实现 Js 实现 题目&#xff1a;输入三个整数x,y,z&#xff0c;请把这三个数由小到大输出。 程序分析&#xff1a;我们想办法把最小的数放到x上&#xff0c;先将x与y进行比较&#xff0c;如果x>y则将x与y的值进行交换&#xff0c;然后…

自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

SparkContext讲解

SparkContext讲解 什么是 SparkContext&#xff1f; SparkContext 是 Spark 应用程序的入口点&#xff0c;是 Spark 的核心组件之一。每个 Spark 应用程序启动时&#xff0c;都会创建一个 SparkContext 对象&#xff0c;它负责与集群管理器&#xff08;如 YARN、Mesos 或 Spa…

vue项目添加骨架屏vue-skeleton-webpack-plugin,通过app.vue添加骨架屏,解决衔接空白问题

安装插件 yarn add vue-skeleton-webpack-plugin在 webpack 中引入插件&#xff1a;以4版本为例配置如下 vue.config.js plugins: [new SkeletonWebpackPlugin({webpackConfig: {entry: {app: path.join(__dirname, ./src/components/entry-skeleton.js),},},minimize: true,…

详细介绍下oracle冷备(coolbackup)

冷备&#xff0c;也就说数据库不是运行&#xff08;热的状态&#xff09;的备份。有些时候我们的数据库比较小&#xff0c;进行同操作系统数据迁移和恢复的时候就比较好用。下面我们详细介绍下oracle数据库的冷备&#xff08;我们使用最简单的拷贝数据文件方式进行冷备&#xf…

C语言菜鸟入门·关键字·int的用法

目录 1. int关键字 1.1 取值范围 1.2 符号类型 1.3 运算 1.3.1 加法运算() 1.3.2 减法运算(-) 1.3.3 乘法运算(*) 1.3.4 除法运算(/) 1.3.5 取余运算(%) 1.3.6 自增()与自减(--) 1.3.7 位运算 2. 更多关键字 1. int关键字 int 是一个关键字&#xff0…

神经网络(系统性学习三):多层感知机(MLP)

相关文章&#xff1a; 神经网络中常用的激活函数 神经网络&#xff08;系统性学习一&#xff09;&#xff1a;入门篇 神经网络&#xff08;系统性学习二&#xff09;&#xff1a;单层神经网络&#xff08;感知机&#xff09; 多层感知机&#xff08;MLP&#xff09; 多层感…

Vue——响应式数据,v-on,v-bind,v-if,v-for(内含项目实战)

目录 响应式数据 ref reactive 事件绑定指令 v-on v-on 鼠标监听事件 v-on 键盘监听事件 v-on 简写形式 属性动态化指令 v-bind iuput标签动态属性绑定 img标签动态属性绑定 b标签动态属性绑定 v-bind 简写形式 条件渲染指令 v-if 遍历指令 v-for 遍历对象的值 遍历…

鸿蒙开发Hvigor插件动态生成代码

Hvigor允许开发者实现自己的插件&#xff0c;开发者可以定义自己的构建逻辑&#xff0c;并与他人共享。Hvigor主要提供了两种方式来实现插件&#xff1a;基于hvigorfile脚本开发插件、基于typescript项目开发。下面以基于hvigorfile脚本开发插件进行介绍。 基于hvigorfile脚本…

蓝桥杯c++算法秒杀【6】之动态规划【上】(数字三角形、砝码称重(背包问题)、括号序列、组合数问题:::非常典型的必刷例题!!!)

下将以括号序列、组合数问题超级吧难的题为例子讲解动态规划 别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! ! &#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 动态规划 一、数字三角形 【问题描述】 上图给出了一…

YOLO-FaceV2: A Scale and Occlusion Aware Face Detector

《YOLO-FaceV2:一种尺度与遮挡感知的人脸检测器》 1.引言2.相关工作3.YOLO-FaceV23.1网络结构3.2尺度感知RFE模型3.3遮挡感知排斥损失3.4遮挡感知注意力网络3.5样本加权函数3.6Anchor设计策略3.7 归一化高斯Wasserstein距离 4.实验4.1 数据集4.2 训练4.3 消融实验4.3.1 SEAM块4…

Python 虚拟环境使用指南

Python 虚拟环境使用指南 博客 一、创建虚拟环境 在开始使用Python虚拟环境之前&#xff0c;我们需要先创建一个新的虚拟环境。 1. 基础创建流程 首先&#xff0c;进入您的项目目录&#xff1a; cd path\to\your\project然后使用以下命令创建虚拟环境&#xff1a; pytho…

【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作

1.实验目的 熟悉了解掌握SQL Server软件的基本操作与使用方法&#xff0c;以及通过理论课学习与实验参考书的帮助&#xff0c;熟练掌握使用T-SQL语句和交互式方法对数据表进行插入数据、修改数据、删除数据等等的操作&#xff1b;作为后续实验的基础&#xff0c;根据实验要求重…

深入解析自校正控制(STC)算法及python实现

目录 深入解析自校正控制(STC)算法第一部分:自校正控制算法概述1.1 什么是自校正控制1.2 自校正控制的核心思想1.3 STC 的应用场景1.4 STC 的分类第二部分:自校正控制算法的数学基础2.1 动态系统模型2.2 参数辨识方法2.3 控制器设计2.4 稳定性分析第三部分:Python 实现自校…

Linux 正则表达式(basic and extened)

正则表达式(Regular Expressions)&#xff0c;整理自&#xff1a; https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html gred sed 定义 Regular Expressions (REs) provide a mechanism to select specific strings from a set of character strings.…

【创建型设计模式】单例模式

【创建型设计模式】单例模式 这篇博客接下来几篇都将阐述设计模式相关内容。 接下来的顺序大概是&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 一、什么是单例模式 单例模式是一种创建型设计模式&#xff0c;它保证一个类仅有一个实例&#…

【Elasticsearch入门到落地】2、正向索引和倒排索引

接上篇《1、初识Elasticsearch》 上一篇我们学习了什么是Elasticsearch&#xff0c;以及Elastic stack(ELK)技术栈介绍。本篇我们来什么是正向索引和倒排索引&#xff0c;这是了解Elasticsearch底层架构的核心。 上一篇我们学习到&#xff0c;Elasticsearch的底层是由Lucene实…