• arm 添加 samb 文件共享


    编译环境: ubunto 12 arm-linux-gcc 4.3.2 arm linux 4.1.36 开发板 2440

    测试上传速度,大文件

    github源码 https://github.com/samba-team/samba

    测试了几个版本,各有问题。

    samba-4.6.2 ~ 3.6 需要安装 python 环境,才能编译。4.6 需要 python2.7 ,4.0 3.6 需要 phtyon2.x ,apt-get install 安装的 没有 phtyon.h 还需要编译安装。实在太费时间,不装这个。

    samba-2.2.8 编译正常,安装报错 codepages 不能编译,后面有介绍解决方法, 解决了 codepages 以后,启动 报错 Unable to open printcap file /etc/printcap for read!
    Failed to setup RT_SIGNAL_LEASE handler ,  touch /etc/printcap 可以解决,但是 Failed to setup RT_SIGNAL_LEASE handler还是出错。

    samba-3.4.17 编译,正常使用。 下载地址 : https://github.com/samba-team/samba/archive/samba-3.4.17.tar.gz

    下载好解压 cd source3

    ./autogen.sh
    ./configure  --bindir=/usr/local/samba --prefix=/usr/local/samba
    make CC=arm-linux-gcc
    make install

    将编译出来的文件全复制到 开发板nfs 文件系统中
    cp /usr/local/samba /home/nfs/usr/local/ -rfd
    还需要复制 so 库文件 到开发板 nfs 文件系统中
    cp /usr/local/samba/lib/*so* /home/nfs/lib/ -d

    修改 examples/smb.conf.default  改名为 smb.conf 上传到 开发板 etc 下

    smb.conf 红字部分是修改的

      1 # This is the main Samba configuration file. You should read the
      2 # smb.conf(5) manual page in order to understand the options listed
      3 # here. Samba has a huge number of configurable options (perhaps too
      4 # many!) most of which are not shown in this example
      5 #
      6 # For a step to step guide on installing, configuring and using samba, 
      7 # read the Samba-HOWTO-Collection. This may be obtained from:
      8 #  http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
      9 #
     10 # Many working examples of smb.conf files can be found in the 
     11 # Samba-Guide which is generated daily and can be downloaded from: 
     12 #  http://www.samba.org/samba/docs/Samba-Guide.pdf
     13 #
     14 # Any line which starts with a ; (semi-colon) or a # (hash) 
     15 # is a comment and is ignored. In this example we will use a #
     16 # for commentry and a ; for parts of the config file that you
     17 # may wish to enable
     18 #
     19 # NOTE: Whenever you modify this file you should run the command "testparm"
     20 # to check that you have not made any basic syntactic errors. 
     21 #
     22 #======================= Global Settings =====================================
     23 [global]
     24 
     25 # workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
     26    workgroup = WORKGROUP
     27 
     28 # server string is the equivalent of the NT Description field
     29    server string = Samba Server
     30 
     31 # Security mode. Defines in which mode Samba will operate. Possible 
     32 # values are share, user, server, domain and ads. Most people will want 
     33 # user level security. See the Samba-HOWTO-Collection for details.
     34    security = share
     35 
     36 # This option is important for security. It allows you to restrict
     37 # connections to machines which are on your local network. The
     38 # following example restricts access to two C class networks and
     39 # the "loopback" interface. For more examples of the syntax see
     40 # the smb.conf man page
     41 ;   hosts allow = 192.168.1. 192.168.2. 127.
     42 
     43 # If you want to automatically load your printer list rather
     44 # than setting them up individually then you'll need this
     45    load printers = yes
     46 
     47 # you may wish to override the location of the printcap file
     48 ;   printcap name = /etc/printcap
     49 
     50 # on SystemV system setting printcap name to lpstat should allow
     51 # you to automatically obtain a printer list from the SystemV spool
     52 # system
     53 ;   printcap name = lpstat
     54 
     55 # It should not be necessary to specify the print system type unless
     56 # it is non-standard. Currently supported print systems include:
     57 # bsd, cups, sysv, plp, lprng, aix, hpux, qnx
     58 ;   printing = cups
     59 
     60 # Uncomment this if you want a guest account, you must add this to /etc/passwd
     61 # otherwise the user "nobody" is used
     62 ;  guest account = pcguest
     63 guest account = root
     64 
     65 # this tells Samba to use a separate log file for each machine
     66 # that connects
     67    log file = /usr/local/samba/var/log.%m
     68 
     69 # Put a capping on the size of the log files (in Kb).
     70    max log size = 50
     71 
     72 # Use password server option only with security = server
     73 # The argument list may include:
     74 #   password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
     75 # or to auto-locate the domain controller/s
     76 #   password server = *
     77 ;   password server = <NT-Server-Name>
     78 
     79 # Use the realm option only with security = ads
     80 # Specifies the Active Directory realm the host is part of
     81 ;   realm = MY_REALM
     82 
     83 # Backend to store user information in. New installations should 
     84 # use either tdbsam or ldapsam. smbpasswd is available for backwards 
     85 # compatibility. tdbsam requires no further configuration.
     86 ;   passdb backend = tdbsam
     87 
     88 # Using the following line enables you to customise your configuration
     89 # on a per machine basis. The %m gets replaced with the netbios name
     90 # of the machine that is connecting.
     91 # Note: Consider carefully the location in the configuration file of
     92 #       this line.  The included file is read at that point.
     93 ;   include = /usr/local/samba/lib/smb.conf.%m
     94 
     95 # Configure Samba to use multiple interfaces
     96 # If you have multiple network interfaces then you must list them
     97 # here. See the man page for details.
     98 ;   interfaces = 192.168.12.2/24 192.168.13.2/24 
     99 
    100 # Browser Control Options:
    101 # set local master to no if you don't want Samba to become a master
    102 # browser on your network. Otherwise the normal election rules apply
    103 ;   local master = no
    104 
    105 # OS Level determines the precedence of this server in master browser
    106 # elections. The default value should be reasonable
    107 ;   os level = 33
    108 
    109 # Domain Master specifies Samba to be the Domain Master Browser. This
    110 # allows Samba to collate browse lists between subnets. Don't use this
    111 # if you already have a Windows NT domain controller doing this job
    112 ;   domain master = yes 
    113 
    114 # Preferred Master causes Samba to force a local browser election on startup
    115 # and gives it a slightly higher chance of winning the election
    116 ;   preferred master = yes
    117 
    118 # Enable this if you want Samba to be a domain logon server for 
    119 # Windows95 workstations. 
    120 ;   domain logons = yes
    121 
    122 # if you enable domain logons then you may want a per-machine or
    123 # per user logon script
    124 # run a specific logon batch file per workstation (machine)
    125 ;   logon script = %m.bat
    126 # run a specific logon batch file per username
    127 ;   logon script = %U.bat
    128 
    129 # Where to store roving profiles (only for Win95 and WinNT)
    130 #        %L substitutes for this servers netbios name, %U is username
    131 #        You must uncomment the [Profiles] share below
    132 ;   logon path = \%LProfiles\%U
    133 
    134 # Windows Internet Name Serving Support Section:
    135 # WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
    136 ;   wins support = yes
    137 
    138 # WINS Server - Tells the NMBD components of Samba to be a WINS Client
    139 #    Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
    140 ;   wins server = w.x.y.z
    141 
    142 # WINS Proxy - Tells Samba to answer name resolution queries on
    143 # behalf of a non WINS capable client, for this to work there must be
    144 # at least one    WINS Server on the network. The default is NO.
    145 ;   wins proxy = yes
    146 
    147 # DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
    148 # via DNS nslookups. The default is NO.
    149    dns proxy = no 
    150 
    151 # These scripts are used on a domain controller or stand-alone 
    152 # machine to add or delete corresponding unix accounts
    153 ;  add user script = /usr/sbin/useradd %u
    154 ;  add group script = /usr/sbin/groupadd %g
    155 ;  add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u
    156 ;  delete user script = /usr/sbin/userdel %u
    157 ;  delete user from group script = /usr/sbin/deluser %u %g
    158 ;  delete group script = /usr/sbin/groupdel %g
    159 
    160 
    161 #============================ Share Definitions ==============================
    162 [homes]
    163    comment = Home Directories
    164    browseable = no
    165    writable = yes
    166 
    167 # Un-comment the following and create the netlogon directory for Domain Logons
    168 ; [netlogon]
    169 ;   comment = Network Logon Service
    170 ;   path = /usr/local/samba/lib/netlogon
    171 ;   guest ok = yes
    172 ;   writable = no
    173 ;   share modes = no
    174 
    175 
    176 # Un-comment the following to provide a specific roving profile share
    177 # the default is to use the user's home directory
    178 ;[Profiles]
    179 ;    path = /usr/local/samba/profiles
    180 ;    browseable = no
    181 ;    guest ok = yes
    182 
    183 
    184 # NOTE: If you have a BSD-style print system there is no need to 
    185 # specifically define each individual printer
    186 [printers]
    187    comment = All Printers
    188    path = /usr/spool/samba
    189    browseable = no
    190 # Set public = yes to allow user 'guest account' to print
    191    guest ok = no
    192    writable = no
    193    printable = yes
    194 
    195 # This one is useful for people to share files
    196 ;[tmp]
    197 ;   comment = Temporary file space
    198 ;   path = /tmp
    199 ;   read only = no
    200 ;   public = yes
    201 
    202 # A publicly accessible directory, but read only, except for people in
    203 # the "staff" group
    204 ;[public]
    205 ;   comment = Public Stuff
    206 ;   path = /home/samba
    207 ;   public = yes
    208 ;   writable = no
    209 ;   printable = no
    210 ;   write list = @staff
    211 
    212 # Other examples. 
    213 #
    214 # A private printer, usable only by fred. Spool data will be placed in fred's
    215 # home directory. Note that fred must have write access to the spool directory,
    216 # wherever it is.
    217 ;[fredsprn]
    218 ;   comment = Fred's Printer
    219 ;   valid users = fred
    220 ;   path = /homes/fred
    221 ;   printer = freds_printer
    222 ;   public = no
    223 ;   writable = no
    224 ;   printable = yes
    225 
    226 # A private directory, usable only by fred. Note that fred requires write
    227 # access to the directory.
    228 ;[fredsdir]
    229 ;   comment = Fred's Service
    230 ;   path = /usr/somewhere/private
    231 ;   valid users = fred
    232 ;   public = no
    233 ;   writable = yes
    234 ;   printable = no
    235 
    236 # a service which has a different directory for each machine that connects
    237 # this allows you to tailor configurations to incoming machines. You could
    238 # also use the %U option to tailor it by user name.
    239 # The %m gets replaced with the machine name that is connecting.
    240 ;[pchome]
    241 ;  comment = PC Directories
    242 ;  path = /usr/pc/%m
    243 ;  public = no
    244 ;  writable = yes
    245 
    246 # A publicly accessible directory, read/write to all users. Note that all files
    247 # created in the directory by users will be owned by the default user, so
    248 # any user with access can delete any other user's files. Obviously this
    249 # directory must be writable by the default user. Another user could of course
    250 # be specified, in which case all files would be owned by that user instead.
    251 ;[public]
    252 ;   path = /usr/somewhere/else/public
    253 ;   public = yes
    254 ;   only guest = yes
    255 ;   writable = yes
    256 ;   printable = no
    257 
    258 # The following two entries demonstrate how to share a directory so that two
    259 # users can place files there that will be owned by the specific users. In this
    260 # setup, the directory should be writable by both users and should have the
    261 # sticky bit set on it to prevent abuse. Obviously this could be extended to
    262 # as many users as required.
    263 ;[myshare]
    264 ;   comment = Mary's and Fred's stuff
    265 ;   path = /usr/somewhere/shared
    266 ;   valid users = mary fred
    267 ;   public = no
    268 ;   writable = yes
    269 ;   printable = no
    270 ;   create mask = 0765
    271 
    272 [share]
    273 path = /dev/
    274 writeable = yes
    275 browseable = yes
    276 guest ok = yes
    277 
    278 [mnt]
    279 path = /mnt/
    280 writeable = yes
    281 browseable = yes
    282 guest ok = yes
    283 
    284 [rootfs]
    285 path = /
    286 writeable = yes
    287 browseable = yes
    288 guest ok = yes

    在arm 开发板上,使用 -i -s 启动,这样将错误信息打印到控制台,方便调试
    /usr/local/samba/sbin/smbd -i -s /etc/smb.conf

    ARM 启动出错
    / # /usr/local/samba/sbin/smbd -i -s /etc/smb.conf
    smbd version 3.4.17 started.
    Copyright Andrew Tridgell and the Samba Team 1992-2009
    get_root_nt_token: getpwnam("root") failed!
    svcctl_init_keys: key lookup failed! (WERR_NOMEM)
    upgrade_to_version_4: upgrading printer security descriptors
    upgrade_to_version_5: normalizing printer keys
    guest_user_info: Unable to locate guest account [nobody]!
    ERROR: failed to setup guest info.

    需要创建一个用户 (在开发板上执行)

    如果没有 /etc/passwd
    也需要创建一个
    touch /etc/passwd

    如果没有用户,需要创建一个用户
    adduser root


    创建软链(在开发板上执行)
    ln -s /usr/local/samba/sbin/smbd /usr/bin/smbd

    最后测试正常后,将 smb.conf 复制到 /usr/local/samba/lib/ 下

    并修改自启动文件
    /etc/init.d/rcS
    #添加 开机自动运行
    smbd
    bftpd -d

    最后补充一下

    出现错误2.2.8 的 错误解决方法
    Installing codepage files in /usr/local/samba/lib/codepages
    Creating codepage file /usr/local/samba/lib/codepages/codepage.437
    /usr/local/samba/make_smbcodepage: 1: /usr/local/samba/make_smbcodepage: Syntax error: word unexpected (expecting ")")
    Creating unicode map /usr/local/samba/lib/codepages/unicode_map.437
    /usr/local/samba/make_unicodemap: 1: /usr/local/samba/make_unicodemap: Syntax error: word unexpected (expecting ")")

    出错原因是因为 make_unicodemap 和 make_smbcodepage 是 使用 编译生成后的文件,而这2个文件是 使用 arm-linux-gcc 编译的 在 ubunto 上无法执行。

    解决方法是,在 arm 开发板上运行转码功能,将 源码中的 codepages 文件夹复制到 arm 开发板上 samba 的目录中 /usr/local/samba ,执行以下 我编写的 shell 。

    arm_installcp.sh

     1 #!/bin/sh
     2 #author: ningdi date:2017-04-20 15:20
     3 srcdir=$(pwd)
     4 BINDIR=$(pwd)
     5 CODEPAGEDIR=$(pwd)/lib/codepages
     6 # The current codepage definition list.
     7 CODEPAGELIST="437 737 775 850 852 861 932 866 949 950 936 1251 ISO8859-1 ISO8859-2 ISO8859-5 
     8 ISO8859-7 KOI8-R 857 ISO8859-9 ISO8859-13 ISO8859-15 1125 KOI8-U"
     9 for p in $(echo $CODEPAGELIST|tr " " "
    ");
    10 do
    11     echo ${srcdir}/codepages/codepage_def.$p
    12     if [ -f ${srcdir}/codepages/codepage_def.$p ]; then
    13         echo Creating codepage file $CODEPAGEDIR/codepage.$p
    14     $BINDIR/make_smbcodepage c $p ${srcdir}/codepages/codepage_def.$p $CODEPAGEDIR/codepage.$p
    15 fi
    16 if [ -f ${srcdir}/codepages/CP${p}.TXT ]; then
    17     echo Creating unicode map $CODEPAGEDIR/unicode_map.$p
    18         $BINDIR/make_unicodemap $p ${srcdir}/codepages/CP${p}.TXT $CODEPAGEDIR/unicode_map.$p
    19 fi
    20 done

    执行后就会在 ARM 文件系统中 生成编码文件 /lib/codepages

  • 相关阅读:
    关于mysql 中schema的相关操作
    ASP.NET Core MVC 之过滤器(Filter)
    docker-Error: No such container
    java多种加密和解密方式
    linux 下的rpm 和ivh各是什么意思
    新生赛题目准备
    Figma 学习笔记 – Keyboard Shortcut and Tips 小技巧
    Figma 学习笔记 – Frame
    Chart.js 学习笔记
    SQL Server STRING_AGG
  • 原文地址:https://www.cnblogs.com/ningci/p/6738960.html
Copyright © 2020-2023  润新知