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 = \\%L\Profiles\%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 " " "\n"); 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