前言
本文基于ubuntu 14.04.5 LTS 和ceph v0.94.3 之上做的实验

一、编译ceph包
1.1.克隆ceph代码,切换分支

git clone --recursive https://github.com/ceph/ceph.git
cd ceph
git checkout v0.94.3 -f

备注:recursive会把子模块一起克隆

1.2.安装依赖包

./install-deps.sh
./autogen.sh

1.3.编译前配置

./configure --prefix=/

注意:这里如果不配置--prefix选项,所有程序默认安装在/usr/local下面,在后面可能会涉及到路径的问题

1.4.编译

make -j 4

通过如下命令确定总核数

cat /proc/cpuinfo | grep cores

1.5.构建 Ceph deb安装包

apt-get install debhelper
dpkg-buildpackage -j8 2>err0813dpkg.txt

1.6.编译完毕后,会有以下包存在

二、制作deb包本地安装源

2.1.安装dpkg-scanpackages命令

apt-get install dpkg-dev

2.2 创建ceph软件包目录

mkdir /home/ceph-hammer
cd /home/ceph-hammer
mkdir pools
mkdir -p dists/trusty/main/binary-i386
mkdir -p dists/trusty/main/binary-amd64

备注:pools 为软件包存放的物理地址

2.3 拷贝ceph软件包到pools

cp *.deb /home/ceph-hammer/pools

2.4 生成override 文件

把pools目录下所有的deb包包名写入文件override中

ls -1 pools | sed 's/_.*$/ extra BOGUS/' | uniq > override

2.5生成Packages

把所有包的包名、版本号、依赖关系等信息写入文件Packages中

dpkg-scanpackages pools override > dists/trusty/main/binary-i386/Packages
dpkg-scanpackages pools override > dists/trusty/main/binary-amd64/Packages

备注:etch版本中要把Packages文件变成Packages.gz文件

2.6 更改sources.list

echo "deb file:///home/ceph-hammer trusty main " >> /etc/apt/sources.list

注意:由于ceph-deploy1.5 默认会连接网络下载最新的版本,所以在这边的配置,似乎不太起作用。

2.7 本地安装源目录结构
创建完本地安装源后,目录结构如下所示:

2.8设置完成,更新deb源
完成以上设置和文件复制之后,就可以开始正常使用本地的源了和使用网络上的源一样操作。

apt-get update
apt-get dist-upgrade

 

三、安装ceph
3.1 安装前准备
关闭ubuntu的packages 认证功能,否则会报The following packages cannot be authenticated!

echo "APT::Get::AllowUnauthenticated 1 ;" | sudo tee -a /etc/apt/apt.conf

3.2.安装并更改ceph-deploy

1.在ceph01安装ceph-deploy

apt-get install ceph-deploy

2. 修改install.py文件

在通过ceph-deploy安装ceph节点时(即ceph-deploy install monitor),会调用ceph-deploy的install.py,而此时会使用该脚本连接网络下载deb包,由于使用本地源,故需修改 install.py中deb包下载的路径。
install.py位置:/usr/lib/python2.7/dist-packages/ceph_deploy/hosts/debian/install.py
修改如下:
修改前

---------------------------
32 if version_kind == 'stable':
33 url = 'http://ceph.com/debian-{version}/'.format(
34 version=version,
35 )
36 elif version_kind == 'testing':
37 url = 'http://ceph.com/debian-testing/'
---------------------------

修改后:

---------------------------
32 if version_kind == 'stable':
33 # url = 'http://ceph.com/debian-{version}/'.format(
34 url = 'file:///home/ceph-{version}/'.format(
35 version=version,
36 )
37 elif version_kind == 'testing':
38 url = 'http://ceph.com/debian-testing/'
---------------------------

3.3 安装ceph

见ceph官方文档

四、所遇问题
问题1:
执行ceph-deploy install ceph01 报以下错误:
[ceph01][DEBUG ] The following packages have unmet dependencies:
[ceph01][DEBUG ] ceph : Depends: liblttng-ust0 (>= 2.5.1-1ubuntu2~cloud0) but 2.4.0-4ubuntu1 is to be installed
[ceph01][DEBUG ] Depends: librados2 but it is not going to be installed
[ceph01][DEBUG ] ceph-common : Depends: librbd1 (= 0.94.7-1) but it is not going to be installed
[ceph01][DEBUG ] Depends: librados2 but it is not going to be installed
[ceph01][DEBUG ] Depends: python-rados (= 0.94.7-1) but it is not going to be installed
[ceph01][DEBUG ] Depends: python-rbd (= 0.94.7-1) but it is not going to be installed
[ceph01][DEBUG ] ceph-mds : Depends: librados2 but it is not going to be installed

原因及解决过程:
执行 apt-get install librados2报
librados2 : Depends: liblttng-ust0 (>= 2.5.1-1ubuntu2~cloud0) but 2.4.0-4ubuntu1 is to be installed
E: Unable to correct problems, you have held broken packages.
用apt-cache show liblttng-ust0 查看发现环境中安装的版本是2.4.0-4ubuntu1,而librados2需要安装2.5.1-1ubuntu2的版本,因此报错。
解决下载:
1.下载liblttng-ust0_2.5.1-1ubuntu2_amd64.deb
liblttng-ust-ctl2_2.5.1-1ubuntu2_amd64.deb和
liburcu2_0.8.4-6ubuntu1_amd64.deb
三个deb包
(下载地址:
liblttng-ust0_2.5.1-1ubuntu2_amd64.deb
liblttng-ust-ctl2_2.5.1-1ubuntu2_amd64.deb
https://mirror.umd.edu/ubuntu/pool/main/u/ust/
liburcu2_0.8.4-6ubuntu1_amd64.deb
https://launchpad.net/ubuntu/vivid/amd64/liburcu2/0.8.4-6ubuntu1
放入deb包本地安装源目录。

执行

dpkg-scanpackages ceph_source /dev/null |gzip > ceph_source/Packages.gz

更新Packages.gz包

问题2:
ceph-deploy安装我自己编译的deb包,报错WARNING: The following packages cannot be authenticated!
解决方案:
关闭ubuntu的packages 认证功能:

echo "APT::Get::AllowUnauthenticated 1 ;" | sudo tee -a /etc/apt/apt.conf

参考资料:
1.Debian Linux操作系统下本地源的安装方法
http://soft.zdnet.com.cn/software_zone/2007/1006/536773.shtml
2. CentOS6.5 本地源搭建Ceph
http://www.cnblogs.com/linprogram/p/5482513.html

 

构建ceph deb 安装包的更多相关文章

  1. ubuntu下如何用命令行运行deb安装包

    如果ubuntu要安装新软件,已有deb安装包(例如:iptux.deb),但是无法登录到桌面环境.那该怎么安装?答案是:使用dpkg命令. dpkg命令常用格式如下: sudo dpkg -I ip ...

  2. ubuntu要安装新软件,已有deb安装包

    如果ubuntu要安装新软件,已有deb安装包(例如:iptux.deb),但是无法登录到桌面环境.那该怎么安装?答案是:使用dpkg命令.dpkg命令常用格式如下:sudo dpkg -I iptu ...

  3. Ubuntu下如何用命令运行deb安装包

    转载自 WindTaiL的博客 如果ubuntu要安装新软件,已有deb安装包(例如:iptux.deb),但是无法登录到桌面环境.那该怎么安装?答案是:使用dpkg命令. dpkg命令常用格式如下: ...

  4. .NetCore(Avalonia) 项目dll混淆,Ubuntu 或者deepin操作系统 deb安装包解压,重新打包

    .NetCore(Avalonia) 项目dll混淆,deb安装包解压,重新打包 本文分为两部分,一部分是介绍使用 DotNetReactor6.0 及以上版本混淆.netcore项目的dll. 另一 ...

  5. ubuntu 构建 deb 安装包

    源码包下载:http://mirrors.163.com/ubuntu/ 编译工具安装: apt-get install dpkg-dev 以openvswitch为例: wget http://mi ...

  6. iOS开发——程序员必备&iOS安装包的三种格式 deb、ipa 和 pxl的解释和说明

    iOS安装包的三种格式 deb.ipa 和 pxl的解释和说明 目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl.转自链接:http://fanlb.blogbus.com/logs ...

  7. iOS 平台上常见的安装包有三种,deb、ipa 和 pxl

    前言:目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl. 其中 deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式,配合 APT 软件管理系统 ...

  8. Unity减少构建安装包的体积(210MB减小到7MB)

    概述 项目简介 由于是公司内做的项目,不方便开源,就只分享优化过程吧. 项目信息 逐日是一个移动端单机小游戏,使用Unity开发,目前已将项目使用的Unity升级到2019.4.14f1c1 (3e5 ...

  9. [Qt]-打包程序为Debian的deb格式的安装包

    参考:https://segmentfault.com/a/1190000005029385 参考:UnityLaunchersAndDesktopFiles deb是Debian Linux的软件包 ...

随机推荐

  1. as3绕过策略文件给视频截图

    接上篇 http://www.cnblogs.com/DarkMaster/p/5973593.html 这篇同样是在老外博客上找到的,分享给大家,再次感叹老外牛逼啊. 原文地址:http://gam ...

  2. 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

    引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...

  3. 常用的WinAPI函数整理

    常用的WinAPI函数整理 一.进程  创建进程:    CreateProcess("C:\\windows\\notepad.exe",0,0,0,0,0,0,0,&s ...

  4. WinForm开发-界面控件到实体,实体到界面控件自动绑定

    在WinForm开发中,我们是不是为绑定界面控件的数据而每个控件每个控件的赋值?在保存修改时是不是也是每个控件每个控件的赋值到实体中?字段一多,那简直就是噩梦.有没有像Web中那样方便的方法直接就自动 ...

  5. 终端检测HTTPS服务端

    nscurl --ats-diagnostics --verbose https:ssl.tianwensm.xyz

  6. 如何使用抓包工具fiddler对app进行接口分析

    如果你还不知道什么是抓包,点我 如果你还不知道什么是http,点它 如果你想知道什么是fiddler 什么是接口测试 正文来了.安装fiddler后,打开界面,点击tools,找到如图的options ...

  7. 批判性思维——Asking The Right Questions

    我们生活在一个纷繁复杂的数字世界中,每天都在信息海洋中遨游.如果不想被其淹没,继而成为别人思想的傀儡,就有必要对你接受的信息进行批判.筛选,自己决定该相信什么不该相信什么,进而形成自己的观点,而不是一 ...

  8. jquery 选择器(name,属性,元素)大全

    jQuery 选择器大体上可分为:基本选择器.层次选择器.过滤选择器.表单选择器. 其中过滤选择器可以分为:简单过滤选择器.内容过滤选择器.可见性过滤选择器.属性过滤选择器.子元素过滤选择器.表单对象 ...

  9. Array.prototype.slice.call(arguments)

    Array.prototype.slice.call(arguments)能够将具有length属性的对象转化为数组, 可以理解为将arguments转化成一个数组对象,让它具有slice方法 如: ...

  10. TortoiseGit上传项目到GitHub////////////////////////////z

    1.安装msysgit和TortoiseGit : 2.TortoiseGit 设置: (1).确保安装成功: (2).设置用户名和邮箱: 3.登陆github并进入设置页面: 4.添加 SSH Ke ...