Ubuntu源码编译samba

news2024/11/16 21:28:21

概述

本人最近研究samba的源码,但是在源码编译的时候,本以为直接config,make,make install。没想到编译过程中碰到很多麻烦,主要是各种依赖问题。
基于此,本文把samba编译的详细过程记录下来,以供再次研究借鉴。

软件环境

本文描述到的版本都是比较新的,不同的版本操作会有差异,比如早期samba用python2现在是python3,对应依赖的环境不一样的。

1、Ubuntu:版本23.10,下载地址:https://releases.ubuntu.com/23.10.1/ubuntu-23.10.1-desktop-amd64.iso?_ga=2.172672484.632513974.1697782264-614902196.1697782264
2、Samba源码:版本4.19.2,下载地址:https://download.samba.org/pub/samba/samba-4.19.2.tar.gz
3、辅助源码包nettle :版本3.9,下载地址:https://ftp.gnu.org/gnu/nettle/nettle-3.9.tar.gz
4、辅助源码包gnutls:版本3.7.10,下载地址:https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.10.tar.xz

编译准备

ubuntu23.10是新安装的,下载的测试包放在目录:/home/shen/testCompileSamba

1、为了快速下载更新依赖包,我选择更新镜像源,如果认为有必要可以参考另外一篇文章:https://blog.csdn.net/shenweihong/article/details/133973517?spm=1001.2014.3001.5501
2、一些基本的命令
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential make gcc vim
嘿嘿,这里镜像源作用体现了,不换要二三十分钟,换了两三分钟。
3、下载解压需要的包
cd /home/shen/testCompileSamba
下载
wget https://download.samba.org/pub/samba/samba-4.19.2.tar.gz
wget https://ftp.gnu.org/gnu/nettle/nettle-3.9.tar.gz
wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.10.tar.xz
解压
tar -xvf samba-4.19.2.tar.gz
tar -xvf nettle-3.9.tar.gz
tar -xvf gnutls-3.7.10.tar.xz

初步配置

进入samba源码
cd /home/shen/testCompileSamba/samba-4.19.2/
配置命令:
./configure --enable-debug --with-ads --with-systemd --with-winbind
报错
在这里插入图片描述
cat /home/shen/testCompileSamba/samba-4.19.2/bin/config.log,看最后几行:
在这里插入图片描述
安装命令解决:sudo apt-get install python-dev-is-python3
重新再配置
./configure --enable-debug --with-ads --with-systemd --with-winbind
在这里插入图片描述
cat /home/shen/testCompileSamba/samba-4.19.2/bin/config.log,看最后几行:
在这里插入图片描述
这是缺少程序gnutls
本人用了很多apt-get install都未能解决,很麻烦,因此就用到了源码nettle-3.9.tar.gz和gnutls-3.7.10.tar.xz

安装gnutls

进入gnutls源码
cd /home/shen/testCompileSamba/gnutls-3.7.10/
配置命令
./configure
报错:*** Libnettle 3.6 was not found.
还需要依赖nettle包

进入nettle源码
cd /home/shen/testCompileSamba/nettle-3.9
配置命令
./configure
成功
make
报错:m4 ./m4-utils.m4 ./asm.m4 config.m4 machine.m4 aes-decrypt-internal.asm >aes-decrypt-internal.s
/bin/sh: 1: m4: not found
命令:sudo apt-get install m4
再make
成功
查看命令 ls | grep .so
camellia-absorb.c
camellia-absorb.o
camellia-absorb.o.d
libnettle.so
少了libhogweed.so,后面用到没有会报错,还需要调整
命令:sudo apt-get install libgmp-dev
然后
./configure
make
ls | grep .so查看
camellia-absorb.c
camellia-absorb.o
camellia-absorb.o.d
libhogweed.so
libnettle.so
这就有了
命令sudo make install

回到gnutls源码
cd /home/shen/testCompileSamba/gnutls-3.7.10/
./configure
还是报错:*** Libnettle 3.6 was not found.
这是我当时很纠结的地方,明明已经安装了nettle,还是包这个包没有

查看/usr/local/lib64/是否有刚刚编译库文件
命令:ls /usr/local/lib64/
libhogweed.a libhogweed.so libhogweed.so.6 libhogweed.so.6.7 libnettle.a libnettle.so libnettle.so.8 libnettle.so.8.7 pkgconfig
应该没错
sudo mkdir /usr/lib/pkgconfig/
sudo ln -s /usr/local/lib64/pkgconfig/nettle.pc /usr/lib/pkgconfig/nettle.pc
sudo ln -s /usr/local/lib64/pkgconfig/hogweed.pc /usr/lib/pkgconfig/hogweed.pc

复制lib64中nettle库到lib(我偷懒全部复制):sudo cp -r /usr/local/lib64/* /usr/local/lib/

下面这几个命令是尝试的,不知道是否有必要
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install -y gnutls-bin
sudo apt-get install libffi-dev

尝试其他各种发现下面这个命令起作用
sudo apt-get install pkg-config
继续./configure
报错
在这里插入图片描述
安装依赖包命令:sudo apt-get install libtasn1-6-dev
继续./configure
报错
在这里插入图片描述

安装依赖包命令:sudo apt-get install libunistring-dev
继续./configure
报错
在这里插入图片描述
这个错表示p11-kit不存在,或者版本低于0.23.1,但是我这里明明有了更新版本0.25.0,如下图
在这里插入图片描述

我猜可能是没有特定的版本,很久都没解决,并且不需要pkcs11,直接跳过去
配置命令改成:./configure --without-p11-kit
通过了

make
sudo make install
gnutls编译好了

继续配置samba

cd /home/shen/testCompileSamba/samba-4.19.2
./configure --enable-debug --with-ads --with-systemd --with-winbind
报错:
在这里插入图片描述
继续配置:./configure --enable-debug --with-ads --with-systemd --with-winbind
在这里插入图片描述
sudo apt-get install flex
类似的后面根据提示安装依赖
sudo apt-get install bison
sudo apt-get install libgpgme11-dev
sudo apt-get install libjansson-dev
sudo apt-get install libarchive-dev
sudo apt-get install libacl1-dev
sudo apt-get install libldap2-dev
继续配置:./configure --enable-debug --with-ads --with-systemd --with-winbind
报错
在这里插入图片描述
依赖命令:sudo apt-get -y install libparse-yapp-perl

继续配置:./configure --enable-debug --with-ads --with-systemd --with-winbind
报错
在这里插入图片描述
依赖命令:sudo apt-get install libpam0g-dev
继续配置:./configure --enable-debug --with-ads --with-systemd --with-winbind
报错:
在这里插入图片描述
依赖命令:sudo apt-get install libdbus-1-dev
继续配置:./configure --enable-debug --with-ads --with-systemd --with-winbind
报错:
在这里插入图片描述
依赖命令:sudo apt-get install python3-markdown
继续配置:./configure --enable-debug --with-ads --with-systemd --with-winbind
报错:
在这里插入图片描述

依赖命令:sudo apt-get install python3-dnspython
继续配置:./configure --enable-debug --with-ads --with-systemd --with-winbind
通过

编译

make
报错
在这里插入图片描述
依赖命令:apt-get install libpopt-dev
再make
没有报错,后面的运行估计会很麻烦,本文就介绍到这里吧。

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

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

相关文章

Javascript命令模式

Javascript命令模式 1 什么是命令模式2 命令模式的例子—菜单程序3 JavaScript 中的命令模式4 撤销命令5 宏命令 1 什么是命令模式 在一个餐厅中,当客人现场点餐或者打电话订餐时,老板会把客人的需求写在清单上,厨师会按照清单的顺序给客人炒…

qt 多语言版本 QLinguist使用方法

在使用qt开发一款软件时,可能需要考虑显示文本中英文等多语言版本。可以使用qt语言家的方式实现。 步骤: 1、代码中给控件设置文本时,记得带上QObject::tr() 2、工程pro文件中加入 TRANSLATIONS demo2_en.ts 3、Qt creator点击“工具”—“外…

C语言【文件】

目录 概念 文件名 文件的打开和关闭 fopen fclose 输入输出函数 fputc fgetc fputs fgets fprintf fscanf fwrite fread 三种流 scanf和sprintf 结构体转化 ​编辑 文件的随机读写 fseek ftell rewind 文本文件和二进制文件 文件读取结束的判定 文件缓冲…

【试题035】逻辑非!例题

1.题目:下列表达式值为1的是? A. 3 & 4 B. 2 >5 C. ! !8 D. 0 ! 0 2.分析: 关于A选项: 3的二进制是:0011 4的二进制是:0100 0011 & 0100 00000 关于B选项: …

双势阱模型

双势阱模型 原子钟 传统的原子钟利用氨分子 由于隧道效应,上顶点的氮原子可以贯穿三个氢原子形成的势垒,到达下顶点对体系注入微波能量后,氮原子在上下定点之间振荡,体系的能量在两个稳定态之间交替变换,其振荡频率决…

2023淘宝十一预售今天20点开启!有什么优惠活动我们来一起看一下!

2023双11预售玩法将于今天20点正式开启!有神优惠活动和玩法攻略,我,们一起来看一下! 今双十一预售有加购赢清空购物车大奖,攒幸运值领红包,限时抢免定金福利,做任务攒幸运值赢免定特权这几大活…

PS001:PS2020及GeographicImager6.2安装

引言:Geographic ImagerV6.2是一款专业的PS地理成像插件,通过安装这款插件可实现在PS中加载4G以上的.bigtiff格式影像并对其进行修改与保存。并且这款软件拥有投影信息修改、基于地理坐标进行影像裁切等多种功能。 一、插件介绍 Geographic ImagerV6.2是…

【Windows】Edge浏览器自动更新服务启用选禁用被拒绝访问的解决方案

Windows系统的服务窗口里,把一些服务的启动类型选择禁用有可能会提示拒绝访问,怎么弄呢,这里讲一讲怎样禁用这个服务。 举一个类似禁用服务的例子:怎样关闭Edge浏览器的自动更新服务, 关闭服务 已知,Win…

CesiumJS 中绘制大多边形

本文翻译自Cesium官方,有改动。 本文中提及到的“大多边形”就如下图所示。 在Cesium的早期版本和一些引擎中,我们绘制这种跨度比较大的多边形,经常会看到一些奇怪的冲突问题,如下图所示。 要渲染任何几何体,我们必…

makesense在线yolov5标注

文章目录 一、创建图片文件夹和label.txt二、在线标注数据 参考文章博主:风吹落叶花飘荡 一、创建图片文件夹和label.txt 创建一个放置图片的文件夹images,存放需要标注的图片(图片最好重命名为1,2,3…避免后面混淆) 创建label.t…

BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain

BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain----《BadNets:识别机器学习模型供应链中的漏洞》 背景: 许多用户将训练过程外包给云计算,或者依赖于经过训练的模型,然后根据特定的任务对模型进行微调。这…

patient feature-based softmax embedding

方法 作者未提供可直接运行的代码

JAVA基础(JAVA SE)学习笔记(七)面向对象编程(进阶)

前言 1. 学习视频: 尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第二阶段:Java面向对象编程 6.面向对象编程(基础) 7.面向对象编程&…

Autosar代码阅读和调试方法

一、前言 众所周知Autosar工程代码量非常庞大,而且有非常多的宏定义,代码可读性非常不友好。但是目前国内外很多OEM和Tire1都是基于Autosar系统进行项目开发的。在开发过程中,出现一些BUG时必须去阅读和调试代码。这就要求开发人员具备很强代…

JavaScript基础知识16——分支语句

哈喽,大家好,我是雷工。 今天学习JavaScript基础知识的分支语句,以下为学习笔记。 1、程序三大流程控制语句 ○写几句就从上往下执行几句,这种叫做顺序结构; ○有时要根据条件选择执行代码,这种叫分支结构…

深度学习 | Pytorch深度学习实践 (Chapter 10、11 CNN)

十、CNN 卷积神经网络 基础篇 首先引入 —— 二维卷积:卷积层保留原空间信息关键:判断输入输出的维度大小特征提取:卷积层、下采样分类器:全连接 引例:RGB图像(栅格图像) 首先,老师…

2001-2022年全国290+个地级市高铁开通数据

2001-2022年全国290个地级市高铁开通数据 1、时间:2001-2022年 2、范围:298地级市(293地级市数(其中莱芜市2019年撤市设区)4直辖市数 ) 3、来源:国家铁路局、铁路客货运输专刊及相关统计 国…

Homeassistant docker配置

Homeassistant docker配置 【说明】本系列为自用教程,记录以便下次使用 【背景】一台J1900 4G64G的小主机,安装了OP系统,里面自带了Docker。为实现Homeassistant(简称HA)控制智能家居设备,进行如下配置。 【…

使用 Data Assistant 快速创建测试数据集

使用 Data Assistant 快速创建测试数据集 Data Assistant 提供超过 100 种数据类型,为任何开发、测试或演示目的生成大量、异构、真实的数据。 官网地址: http://www.redisant.cn/da 主要功能 Windows 原生 Data Assistant 使用 Windows Native 技术…

Redis常见问题的解决方案(缓存穿透/缓存击穿/缓存雪崩/数据库缓存数据不一致)

Redis解决缓存数据库不一致的方案 用 先 操作数据库 再 操作缓存 的策略来实现缓存数据库数据一致具体做法是 更新数据库数据然后删除缓存 虽然还是会有线程安全问题 比如 假设此时缓存刚好失效了 线程1 查询缓存失败 从数据库读取了旧数据 还没写入缓存的时候 被调度到 线程…