NSLU2-Linux
view · edit · print · history

Installing Samba >=3.0.14a-4 on Unslung 4.2x beta or later

Assumptions for these instructions

  • You have installed unslung 4.20 or later
  • You have unslung to the first disk drive (sda1) or to a flash drive in port 2 (sda2)
  • You have your user permissions set up for drive access working in the Linksys web interface
  • Your ipkg is current (ipkg update)

Install

 
ipkg install samba

Post-install setup

First, copy the default samba config files over to the new samba directory:

 
cp -pR /etc/samba /opt/etc

(Please note that on OpenSlug, the config file is on /usr/lib/smb.conf (old) or /etc/samba (new))

Samba configuration (smb.conf, smbpasswd)

If you've done the copying of the Samba 2 configuration to the new Samba 3 directory, you will find that /opt/etc/samba/smb.conf and /opt/etc/samba/smbpasswd are just links to /share/hdd/conf/share/. After each reboot, the smb.conf and smbpasswd files in /share/hdd/conf/share/ are overwritten; files residing directly in /opt/etc/samba/ are not.

Samba 3 will read its configuration from /opt/etc/samba/, but the Linksys web interface will modify the Samba configuration in /share/hdd/conf/share/. This leaves the following options:

Option A: Remove the symlinks.

No diversion script is required. However, you lose the ability to modify the configuration via the Linksys web interface. In the future, modify the Samba configuration either by directly editing /opt/etc/samba/smb.conf or via the SWAT web interface.

To remove the symlinks, execute the following commands:

  
cd /opt/etc/samba
rm smb.conf
rm smbpasswd
cp /share/hdd/conf/share/smb.conf .
cp /share/hdd/conf/share/smbpasswd .
 

then update the /opt/etc/samba/smb.conf for Samba 3 as shown in the next section.

Option B: Diversion script.

When rebooting the system the symlinked smb.conf and smbpasswd will be overwritten with the original Samba 2 version. To keep the Samba 3 files, you need a copy of them in a location where they will not be touched. The best spot for this is /unslung/

First, copy the original files to /unslung/:

  
cp /share/hdd/conf/share/smb.conf /unslung/
cp /share/hdd/conf/share/smbpasswd /unslung/
 

You will need to remove the link to the old file and point to the new file with a diversion script.

rc.samba

 
#!/bin/sh
ln -sf /unslung/smb.conf /opt/etc/samba/smb.conf
ln -sf /unslung/smb.conf /etc/samba/smb.conf
ln -sf /unslung/smbpasswd /opt/etc/samba/smbpasswd
ln -sf /unslung/smbpasswd /etc/samba/smbpasswd
return 1

This should allow you to fully use the Linksys web interface, keep both file locations intact and not have to start the v2 server before starting the v3.

Modifications for Samba 3

Next, you will need to edit the smb.conf file so it will work with samba 3.0.

If you're new to Linux editors, the vi editor which comes standard with UnSlung is very unfriendly (google "vi" to learn the basics). The nano editor ("ipkg install nano") is much more intuitive. Alternatively use your favourite editor on your favourite operating system and ftp the resulting file to the nslu2.

 An example smb.conf file that works is:
 
# sample samba 3.0 conf file
[global]
log level = 1

# CHANGE these settings to match your network/workgroup setup
# ------------------
workgroup = WORKGROUP
server string = NSLU Network Drive
netbios name = usbdrive
# your wins server ip address
wins server = 10.0.0.1
# the networks you want to allow connections from
hosts allow = 127.0.0.1 10.0.0. 10.0.1. 10.0.2.
hosts deny = 0.0.0.0/0
# ------------------

config file=/opt/etc/samba/smb.conf
os level = 8
load printers = no
max log size = 10
security = user
encrypt passwords = yes
smb passwd file = /opt/etc/samba/smbpasswd
socket options = TCP_NODELAY SO_KEEPALIVE SO_SNDBUF=16384 SO_RCVBUF=16384
preferred master = no
local master = yes
dns proxy = no 
preserve case = yes
short preserve case = yes
default case = upper
case sensitive = no
mangled names = yes 
null passwords = yes
username map = 
dos filetimes = yes
force directory mode=771
force create mode=660
create mask=771
map system=yes
map to guest=Bad User
guest account=guest
guest ok = yes
bind interfaces only = yes
interfaces = ixp0 lo
winbind use default domain = no

[ADMIN 1]
valid users=@"administrators"
comment=
path=/share/hdd/data/
read only=yes
write list=@"administrators"
[DISK 1]
valid users=@"administrators",@"everyone",@"linux"
comment=For everyone
path=/share/hdd/data/public/
browseable = yes
read only=yes
write list=@"administrators",@"everyone",@"linux"

Make sure you edit the "hosts allow = 127.0.0.1 10.0.0. 10.0.1. 10.0.2." section to include your network.

sample:

 
host allow: 127.0.0.1 10.0.0. 10.0.1. 10.0.2. 192.168.0. 192.168.1.


Another second example smb.conf file generated using the Swat utility. Optimised for Unslung firmware (added by RobHam Sept 2007 + Mod Sept 2008).

The file is configured with three accessible shares. 1. A users 'home' folder, 2. a 'public' folder which can be accessed by any connecting client using netbios, and 3. 'read only' access to the full NSLU-2 directory structure.

The file configures Samba in 'User' mode. In this mode, a users 'home' folder is only accessible if the 'user name' and 'password' are identical on both the server and client.

A users 'home' folder and read only access to the full Linux directory tree 'ADMIN 1' are only accessible by using mapping on the client (for security they are non browseable).

Mapping example using the NSLU-2 netbios name - \\netbios_name_goes_here\ADMIN 1

Mapping example using the NSLU-2 IP address - \\192.168.1.77\user_name_goes_here

For non-unslung firmware, like openwrt, you need to change guest account = nobody and force group = nogroup.

The directory /opt/var/spool/samba may need to be created and flagged chmod 755 (there may be other Samba working directories missing).

I recommend using the below conf file, change your workgroup name, the interface IP to your NSLU2 IP, hosts allow to your client IP range, don't use the Admin1 or Disk1 sections here. Instead copy only those 2 sections out of your old version 2 smb.conf file. If you do this, you should see the same shares behavior out of your Samba 3 install as you saw from Samba 2

 
# Samba config file created using SWAT
# from 192.168.1.50 (192.168.1.50)
# Date: 2008/09/10 21:01:20

[global]
	workgroup = MSHOME
	server string = %h Server
	interfaces = 192.168.1.77/24, ixp0, lo
        security = USER
	map to guest = Bad Password
	null passwords = Yes
	guest account = guest
	log file = /opt/var/samba/log.%m
	max log size = 10
	name resolve order = wins bcast
	socket options = SO_SNDBUF=8192 SO_RCVBUF=8192
	load printers = No
	dns proxy = No
	ldap ssl = no
	config file = /opt/etc/samba/smb.conf
	invalid users = root
	create mask = 0771
	force create mode = 0660
	force directory mode = 0771
	hosts allow = 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, localhost

[homes]
	comment = Users Home Directories
	path = /%S
	valid users = %S
	read only = No
	create mask = 0700
	directory mask = 0700
	browseable = No

[printers]
	comment = Print Spooler Directory
	path = /opt/var/spool/samba
	create mask = 0700
	printable = Yes
	browseable = No

[ADMIN 1]
	comment = Full Data Partition
	path = /
	valid users = @administrators
	write list = @administrators
	browseable = No

[DISK 1]
	comment = Public Folder Tree For Everyone
	path = /public
	valid users = @administrators, @everyone
	write list = @administrators, @everyone
	force group = everyone
	read only = No
	guest ok = Yes

Finally, edit /opt/etc/init.d/S08samba to activate Samba:

 
#!/bin/sh

# set samba_active=1 to activate samba
samba_active=1

[ 1 = $samba_active ] || exit 0
...

Now you are ready to restart

 
cd /opt/etc/init.d
./S08samba

If all goes well, the stock samba will stop and your new samba will start. Don't be suprised if running a "ps" shows two smbd & nmbd tasks, compared to one each previously. This is normal.

(On OpenSlug, you need to use /etc/init.d/samba restart)

I've tested this setup, it seems to work correctly and maintain compatibility with the Linksys web interface and the Storage Link windows tray app that mounts USB Memory sticks when inserted into slot 2.

From FVH: On my setup (Unslung 5.5 with Samba 3.0.21) the following diversion scripts / update tricks were not required. Samba 3 functions correctly after reboots. Getting Samba 3 running was literally as simple as: ipkg update ; ipkg install samba ; create /opt/etc/samba/smb.conf ; edit /opt/etc/init.d/S08samba. Then restart. That's all.

Note that some users have reported seeing messages in the Samba error logs similar to 'Unable to open printcap file /opt/etc/printcap for read'. This is probably because Samba is trying to open a nonexistant file. Easily fixed by logging in as user 'root' at a console screen and then check if the file exists. If not, create a blank file using the two commands:-

 
touch /opt/etc/printcap
chmod 0644 /opt/etc/printcap

Update: Thanks to Inge Bjørnvall Arnesen
Reference links: AddPrinter EnableWinsServer

SWAT web config tool

SWAT (the Samba web config tool) used to be included in the samba package, but has been moved into a separate samba3-swat package, which has a dependency on the xinetd package:

 
ipkg install samba3-swat

Edit your rc.xinetd diversion script to register SWAT with xinetd. The diversion script should be in your Unslung directory.

Warning : If you already created a rc.xinetd diversion script, you should only add the part from 'if' to 'fi' and insert it before the 'return 1' in your orginal script. Deleting or editing the other content may result in disabled services, which for example could disable your telnet access.

If you add the following content, SWAT should work out of the box:

  
#!/bin/sh
# Diversion script: /unslung/rc.xinetd
# Customize for your own use, do not delete your original content!
#

if ( [ ! -f /etc/inetd.conf ] || !(grep swat /etc/inetd.conf -q) ) then
  echo "swat stream tcp nowait root /opt/sbin/swat swat" >>/etc/inetd.conf
fi

return 1
 

Once that is done just point your browser to http://IP-address-of-your-slug:901, and enjoy. More info on Samba 3 (inclusing SWAT) can be found on the web at: http://us3.samba.org/samba/docs/man/

Full control off SWAT is only given if you logon as root, otherwise functionality will be limited! (To be exact, the full control depends on the SWAT user having write access to /opt/etc/samba/smb.conf, so you can grant non-root users full control by changing this file's owner or access permissions.) A normal user only get the buttons: Home, Status, View and Password. The root users also gets the buttons to manage shares.

Notes for Samba 3

interfaces configuration (Dec 2008, od3-ripe)

For me on unslung SWAT started reporting smbd/nmbd "not running" though they actually did. Took me some time to figure out what fixes this behavior. After adding also "localhost" to:

 
interfaces = 127.0.01/24, <myEth-IP>, ixp0, lo
 

it works, again. (Also see note about adding <myEth-IP> below - looks like "ipx0" and "lo" no longer get properly translated!?)

International character support or Unicode support

If you want to store files from Windows using foreign characters from languages like Chinese, Japanese, Korean, etc you definitely need Samba 3, as it supports this out of the box.

Here is what you should add to [global] section of the smb.conf for Samba 3.X.X to enable Cyrillic (Russian) support for Windows XP clients

 
unix charset = UTF-8
display charset = UTF-8
dos charset = 866
 

I use these settings for support of Norwegian and Portugeese characters in filenames under Unslung 6.8 (samba 3): unix charset = UTF-8 dos charset = CP850 display charset = ISO-8859-1 I put these settings into /unslung/smb.conf and put the rc.samba in the same directory (comment away the first line). You also have to change the config file name in /unslung/smb.conf.

File size >= 2G and remote smbfs mount

When mounting smbfs the default does not include large file support, which limits files to less than 2 gigs. Using the lfs option will include large file support. Google "smbfs lfs option", since it seems to be missing from most documentation.

A better option is to use cifs, if it's supported by your kernel/distribution/version. When mounting cifs, large files are supported by default.

So either : mount -t smbfs //server/share /mountpoint -o lfs other-options or mount -t cifs //server/share /mountpoint -o options

unix extensions / wrong share permissions (Ingo Karkat, 25-May-2009)

After upgrading to Samba 3, files created by user A (from a Linux client which mounted the Samba shares via CIFS) suddenly were not writable by user B, even though the configured share permissions gave write access to both users, and this worked flawlessly with Samba 2. This was caused by the following:

With Unix extensions enabled (by default), a Unix (not Windows!) client can set arbitrary file permissions (when mounting as cifs, not smbfs). To prevent this, one could configure a 'force create mode' + 'force directory mode' on individual shares, but it seems clients would still be allowed to chmod() later on, so this isn't totally watertight. If you don't need these extensions, it is best to turn them off globally, restoring the plain functionality of Samba 2.

 
unix extensions = no 
 

Notes for Samba 3.2

interfaces configuration (July 2008)

This version of Samba seems to need an IP/mask pair added to the 'interfaces' config line in the 'Global' section to work properly with Unslung firmware. A typical config line (assuming the default NSLU2 IP address) is:-

 
interfaces = 192.168.1.77/24, ixp0, lo
 

bind interfaces

Further, it seems you MUST have "bind interfaces = ixp0" or else nmbd chokes. You can see it by starting nmbd in interactive mode: "nmbd -i -d 5". nmbd cannot find the interface unless you ALSO include the "bind interfaces" line.

Unable to connect in Samba 3.2.1-1 (9/27/08)

After struggling for days on end to get Samba running in Unslung 6.10 with an NTFS disk on Disk 1, I ran across this: http://www.nabble.com/Can%27t-Get-Upgrade-to-Samba-3.2.x-Working-td19361476.html

Basically, ran "ipkg install gconv-modules" and now my shares are working.