zoukankan      html  css  js  c++  java
  • samba源代码安装以及环境配置

    这是一篇我在2011年7月21日写的一篇文档,当时我在深圳一家公司实习,实习的内容与samba相关,那时靠着自己上网找资料学习samba的源代码安装和配置,当时参考了很多网上的博文都没有看到一篇很完整的博文。很多博文作为案例使用的samba版本居然是2.x.x的,与我使用的3.5.9版本存在很多特性差异。但是参考这些博文都没有能够让我的samba顺利的运行起来,最后结合samba源码包中自带的一些文档才最终解决samba的安装问题。所以,就写了这篇文档进行总结。今天不小心翻到这篇文档,于是将其放上来,希望能对有需要的朋友起到一点作用。

    一、获取源代码包并进行解压

    从samba的官方网站可以下载最新的samba源代码包。下面我们以samba-3.5.9.tar.gz的源代码包作为案例进行解析。本例中,我们将源代码包放在目录/home/samba下,然后执行下面的命令进行解压缩。

    # tar –xzvf samba-3.5.9.tar.gz 

    二、配置configure

    对源代码包进行解压缩后,进入目录

    # cd /home/samba/samba-3.5.9/source3

    然后执行下面的命令进行配置。

    # ./configure

    可能在刚开始时,该目录下没有configure文件,此时可先执行下面的命令

    # ./autogen-sh

    此时要求系统安装了autoconf、automake等工具。

    在运行上面的配置命令之前,我们可以通过命令

    # ./configure –-help

    来查看配置命令的一些选项。

    三、生成与安装make && make install

    在环境配置命令./configure成功执行后,可以运行命令

    # make

    来生成二进制可执行文件,这可能需要两到三分钟。成功生成可执行文件后,可以通过下面命令

    #make install

    来进行安装。系统默认的安装路径是/usr/local/samba

    四、配置动态链接库路径

    安装完成后,我们需要配置动态链接库路径,因为运行samba的进行smbd和nmbd需要到目录/usr/local/samba/lib下的动态链接库文件。但是该目录不是系统默认的动态链接库文件搜索路径,于是我们需要将该目录添加到文件ld.so.conf中。执行下面的命令

    # vi /etc/ld.so.conf

    打开ld.so.conf文件,并在该文件中加入下面这一行内容。

    /usr/local/samba/lib

    然后执行命令

    # ldconfig

    来更新动态链接库缓冲。

    五、samba配置文件smb.conf

    samba在运行过程中需要用到配置文件smb.conf。smb.conf配置文件是samba最重要的配置文件,该文件定义了samba的安全机制、文件共享和打印共享的目录和参数以及其他一些系统配置功能。

    配置文件smb.conf的默认路径是/usr/local/samba/lib/smb.conf,我们可以在运行smbd进程时,通过-s选项来执行特定的smb.conf文件(具体说明见下一节),一般不推荐使用-s选项,因为其配置工具,如smbclient、testparm等默认都是读取/usr/local/samba/lib/smb.conf文件。下面我们以一个简单的配置文件进行说明,其路径为/etc/samba/smb.conf。

    [global]
    workgroup = MYGROUP
    server string = Samba Server %v
    security = user
    log file = /var/log/samba/%m.log
    passdb backend = smbpasswd
    smb passwd file = /etc/samba/smbpasswd
    [root]
    path = /
    valid users = root
    writeable = yes
    [public]
    path = /data
    guest ok = yes
    read only = yes

    上面配置文件定义了root和public两个文件共享服务。关于上面这个配置文件的具体细节,我们这里不做详细的论述。这里主要说明的一点:在samba 3.0.23版本以前验证用户密码的默认backend是smbpasswd,而3.0.23版本之后的默认backend是tdbsam。我们可以通过参数passdb backend来选择特定的backend。在使用smbpasswd时默认读取的密码文件时/usr/local/samba/private/smbpasswd,我们可以通过smb passwd file来指定特定的密码文件。

    在配置完smb.conf文件后,我们可以运行testparm(目录/usr/local/samba/lib下)命令来对smb.conf文件进行语法检查,其会检测出哪些参数名无法识别等问题。

    六、启动samba

    samba有两个主要的进程smbd和nmbd。smbd进程提供了文件和打印服务,而nmbd则提供了NetBIOS名称服务和浏览支持,帮助SMB客户定位服务器,处理所有基于UDP的协议。

    配置smb.conf文件后,在开始运行samba的服务进程之前。我们需要先做一些准备工作。运行smbpasswd命令(在目录/usr/local/samba/bin下)

    # ./smbpasswd –a root

    向smb.conf文件中指定的/etc/samba/smbpasswd文件中添加root用户以及密码信息。关于smbpasswd文件的详细内容介绍见相关文档。

    然后运行命令

    # service iptables stop

    关闭防火墙,因为防火墙可能会阻止用户访问该机器。下面是运行samba的服务进程smbd和nmbd

    # /usr/local/samba/sbin/smbd –D –s /etc/samba/smb.conf
    # /usr/local/samba/sbin/nmbd –D –s /etc/samba/smb.conf

    上面的-D选项指定smbd和nmbd以守护进程的方式启动,并且通过-s选项指定了特定的配置文件/etc/samba/smb.conf。以守护进程方式启动smbd和nmbd的优势是响应速度快,但是要关闭的话只能kill掉。当然我们可以通过脚本来执行这些操作,这里就不提供脚本了。

    七、smbclient进行测试检查

    在启动samba之后,我们可以在本机使用smbclient(目录/usr/local/samba/bin下)来进行测试。下面命令

    # cd /usr/local/samba/bin
    # ./smbclient –L //127.0.0.1

    可以列出本samba服务器所提供的服务列表,本例运行结果如下:

    [root@localhost bin]# ./smbclient –L //127.0.0.1
    Enter root’s password:
    Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.9]

    Sharename Type Comment
    --------- ------- -------
    IPC$ IPC IPC Service (Samba Server 3.5.9)
    public Disk
    root Disk

    Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.9]

    Server Comment
    ----------- -------
    LOCALHOST Samba Server 3.5.9

    Workgroup Master
    ------------ -------
    MYGROUP LOCALHOST

    当然也可以通过smbclient来访问samba服务器提供的服务,其命令格式如下:

    # ./smbclient “//serverAdderss/aservice” –U username

    其中serverAddress是要访问的samba服务器的IP地址,aservice指定samba服务器上提供的某个服务名称,选项-U username指定要以哪个用户名来访问samba服务器。例如

    [root@localhost bin]# ./smbclient “//127.0.0.1/root” –U root
    Enter root’s password: ; 这里输入samba用户root的密码
    Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.9]
    smb: \> ; 访问成功,输入相关命令进行操作

    上面个smb: \>表明了访问成功,此时我们可以输入一些命令来在samba服务器上进行操作,比如ls、mkdir等。q或quit命令执行退出,并断开连接。

    八、在Windows客户端访问samba服务器

    在Windows客户端,可以在网上邻居中通过新建网上邻居来访问,或者在【开始】——【运行】中输入\\192.168.1.34\root来访问samba服务器192.168.1.34上面提供的root服务。

    03 2012 档案

    samba源代码安装以及环境配置
    摘要: 这是一篇我在2011年7月21日写的一篇文档,当时我在深圳一家公司实习,实习的内容与samba相关,那时靠着自己上网找资料学习samba的源代码安装和配置,当时参考了很多网上的博文都没有看到一篇很完整的博文。很多博文作为案例使用的samba版本居然是2.x.x的,与我使用的3.5.9版本存在很多特性差异。但是参考这些博文都没有能够让我的samba顺利的运行起来,最后结合samba源码包中自带的一些文档才最终解决samba的安装问题。所以,就写了这篇文档进行总结。今天不小心翻到这篇文档,于是将其放上来,希望能对有需要的朋友起到一点作用。一、获取源代码包并进行解压从samba的官方网站可以下载最新阅读全文

    posted @ 2012-03-18 21:17 lienhua34 阅读(680) | 评论 (0) 编辑

    2012.3.18 星期日
    摘要: 昨天在emacs运行之前的工程的时候,才发现之前的read忘了解析引用的缩写情况,即'(1 2 3)或'symbol等。于是,今天在read的状态机中添加了一个状态STATE_QUOTE(状态11),当在STATE_INIT或STATE_LIST或STATE_VEC时读取到一个字符'\'',则将当前状态压入状态栈state_stack中,并将当前状态current_state设置为STATE_QUOTE,然后将输入缓冲区的扫描指针向前移动一步,并转移到STATE_INIT下进行处理。每当解析到一个scheme对象时,将状态栈state_stack的栈顶弹阅读全文

    posted @ 2012-03-18 19:40 lienhua34 阅读(0) | 评论 (0) 编辑

    2012.3.17 星期六
    摘要: 今天实现了对scheme的过程的表示与处理问题,环境的表示和处理,另外还完成了scheme解释器的基本框架eval和apply。这些都是参考SICP(《计算机程序构造与解释》)的。过程的表示和处理:scheme的过程分为基本过程和复合过程。基本过程是scheme标准规定的、scheme解释器内部实现的过程,而复合过程则是通过lambda表达式来求得的。scheme的基本过程均可以实现为带一个cellpoint参数和返回值是cellpoint类型的函数(其中cellpoint是序对的指针类型)。那么,基本过程可以采用类型前面scheme对象的表示形式。在一个序对的car中存储基本过程的类型信息,阅读全文

    posted @ 2012-03-17 21:58 lienhua34 阅读(1) | 评论 (0) 编辑

    2012.3.16 星期五
    摘要: 今天完善了三个等价谓词eq、eqv和equal,函数eq只是实现为简单的比较连个参数的指针是否一样。R5RS中说到等价谓词eq和eqv在比较boolean、symbol、string、list和vector时是一样的,而在处理数值和字符时则与具体的实现策略有关。在等价谓词中,对于boolean对象,当两者均为#t或均为#f则表示等价。而在我们之前的实现中,每创建一个boolean对象,在新建一个序对来表示,那么两个均为#t的boolean对象的指针则会不同,那么函数eq就会得到假。所以,对于boolean的表示需要进行调整:通过两个变量true_obj和false_obj来分别记录#t对象和#阅读全文

    posted @ 2012-03-16 20:51 lienhua34 阅读(2) | 评论 (0) 编辑

    2012.3.15 星期四
    摘要: 今天实现了输入函数read的状态机,但是还没有运行测试。在写状态机的过程中要用到scheme的等价谓词,于是去实现了等价谓词eq?和eqv?,等价谓词eq?很简单,只是比较连个参数指针是否一样即可。而等价谓词eqv?则需要对不同类型的对象进行不同的处理,于是又去实现各个类型对象的等价比较(还没有实现list和vector的等价比较)。在实现各个类型对象的等价比较时,于是我顺便又去实现了这两天一直困扰我的一个想法。就是,scheme采用弱类型机制,并且我们要去实现scheme解析器时需要调用一些scheme标准R5RS规定的标准函数,而这些函数是由C语言区实现的,于是我们如何去实现函数参数的类型阅读全文

    posted @ 2012-03-15 21:50 lienhua34 阅读(0) | 评论 (0) 编辑

    2012.3.14 星期三
    摘要: 今天开始实现输入函数read。函数read其实不仅仅是一个简单的输入函数,而是一个输入对象的语法解析器,其读取输入字符串,然后根据各种类型对象的外在表示形式(external representation)来解析输入字符串,然后创建相对应的对象。下面是对象外在表示形式的语法:<datum> --> <boolean> | <number> | <character> | <string> | <symbol> | <list> | <vector><boolean> --> 阅读全文

    posted @ 2012-03-14 23:33 lienhua34 阅读(1) | 评论 (0) 编辑

    2012.3.13 星期二
    摘要: 原本计划今天要实现输入函数read,但是昨晚看小说看得太晚,今天中午12点多才起床,然后去球场看了数学和信管的比赛,然后两点才去机房补前面两篇日志,就到三点半了。因为今天天气很好,艇哥约我3点半去踢球,于是白天就这样度过了。晚上洗完澡上床已是8点了,于是将输出函数display和write完善了一下,让其能够输出列表结构。想到输入函数read是一个语法解析程序,代码实现可能会比较麻烦,于是打算明天再实现它。剩下的时间就随便去实现了R5RS要求的对列表操作的一些函数。今天实现了函数list,length,append,reverse,list-tail以及list-ref。阅读全文

    posted @ 2012-03-13 23:40 lienhua34 阅读(1) | 评论 (0) 编辑

    2012.3.12 星期一
    摘要: 今天修改了字符串和向量的表示问题,另外也实现的两个重要的输出函数display和write。向量的表示:在表示向量的序对中,car存储向量的类型信息,cdr存储向量的长度,然后在随后紧邻的序对中顺序地存储向量的元素。在存储向量元素的序对中,每个序对的car存储偶数下标的元素,cdr存储奇数下标的元素(下标从0开始)。字符串的表示:字符串的表示和向量的表示类型,car存储字符串的类型信息,cdr存储字符串的长度,然后在随后紧邻的序对中顺序的存储表示该字符串的字符序列。每个序对存储8个字符,在序对的car和cdr中分别存储4个字符,每8位存储一个字符,顺序关系是:car最高8位-car次高8位-c阅读全文

    posted @ 2012-03-13 20:29 lienhua34 阅读(4) | 评论 (0) 编辑

    2012.3.11 星期日
    摘要: 终于开始写代码了。今天实现了基本数据结构,包括序对的表示,scheme其他对象的表示等。关于序对的表示,我采用一个记录结构cons_cell,其有两个元素address和decrement(都是unsigned int类型)。通过一个函数cons可以将其两个参数构成一个新的序对,而函数car获取序对的address元素,函数cdr获取序对的decrement元素,函数car_set修改序对的address元素,函数cdr_set修改序对的decrement元素。变量the_cons_cells的值是一个cons_cell的数组,通过该数组来对序对的分配和归还进行管理。当要新建一个序对时,从数组阅读全文

    posted @ 2012-03-13 20:28 lienhua34 阅读(1) | 评论 (0) 编辑

    浅谈静态作用域和动态作用域
    摘要: 静态作用域和动态作用域所谓的作用域就是指某段程序文本代码。一个声明起作用的那一段程序文本区域,则称为这个声明的作用域。静态作用域是指声明的作用域是根据程序正文在编译时就确定的,有时也称为词法作用域。而在采用动态作用域的语言中,程序中某个变量所引用的对象是在程序运行时刻根据程序的控制流信息来确定的。大多数现在程序设计语言都是采用静态作用域规则,而只有为数不多的几种语言采用动态作用域规则,包括APL、Snobol和Lisp的早期方言。而采用静态作用域的语言中,基本都是最内嵌套作用域规则:由一个声明引进的标识符在这个声明所在的作用域里可见,而且在其内部嵌套的每个作用域里也可见,除非它被嵌套于内部的对阅读全文

    posted @ 2012-03-10 12:16 lienhua34 阅读(626) | 评论 (0) 编辑

    关于函数调用和尾递归的一点认识
    摘要: 函数调用在大多数支持块结构的程序设计语言都支持函数或者子程序(函数和子程序的区别在于函数有返回值而子程序没有,在这里我们不区分这两个概念)。在进行函数调用和从函数返回时通常由一个被称为控制栈的运行时刻栈进行管理。每一个活跃的函数在控制栈中都会有一个相对应的活动记录,有时也称为栈帧。活动记录存储着函数调用时传递的参数信息和从函数返回时返回值与控制跳转的信息。函数的活动记录需要包括下面的信息控制链(control link):指向控制栈中前一个活动记录的指针;访问链(access link):指向源程序中最近的外层块对应的活动记录,用于维护静态作用域(本文中不讨论);返回地址:函数调用结束后被执行阅读全文

    posted @ 2012-03-08 18:00 lienhua34 阅读(660) | 评论 (2) 编辑

    可计算性与停机问题
    摘要: 可计算性可计算性理论明确了在理论上可计算的函数应具有的特征。那些定义在自然数集上的、理论上可计算的函数通常被称为部分递归函数。概念中强调“理论上可计算”,是因为某些可计算函数在实际计算中可能会耗费相当长的计算时间,可能在我们宇宙现存时间内都无法完成其计算。直观地说,如果存在一段程序来计算一个函数,那么这个函数就是可计算的。更明确地说,如果对于函数f: A -> B存在一个算法,以任意x∈A作为输入,都可以得到y = f(x)作为输出,则这个函数是可计算的。在20世纪30年代,普林斯顿大学的Alonzo Church提出了一个重要的原理,称为Church理论。Church理论是关于数学定义阅读全文

    posted @ 2012-03-05 22:24 lienhua34 阅读(44) | 评论 (0) 编辑

  • 相关阅读:
    第二次作业
    复盘一个商品期货的通用模型
    C#如何获取枚举(Enum)变量的值
    [C#]Socket通信BeginReceive异步接收数据何时回调Callback
    [C#]浮点数除零无法捕获异常的解决办法
    js对字符串进行编码方法总结
    web最全资源网址
    简单粗暴地理解js原型链--js面向对象编程
    常见前端九十道面试题及答案-韩烨
    C语言文件读写,复制
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2406001.html
Copyright © 2011-2022 走看看