How-to: Configure Warewulf with SMB

From SOFTICE

Jump to: navigation, search

Contents

Developed by:

A bug in NFS prevents prevents UML (User Mode Linux) from functioning properly when accessing files stored on NFS filesystems. This document will explain how the SOFTICE project uses SMB filesystems to bypass this problem.

Samba is run on the SOFTICE master node to provide a SMB/CIFS shares. Slave nodes mount these shares with the Samba project's smbfs package.

Expect is used to automate Samba account creation by scripting smbpasswd, a utility that is normally run interactively.

This document might be general enough for any distribution but has been written with Debian Linux in mind.

Configure the Master Node

1. Update the APT package index:

apt-get update

2. Install Samba and expect. Select all default options when prompted.

apt-get install samba expect

3. Create a Samba user that will be used by slave nodes to mount the /home directory. When prompted, enter your choice of a secure password.

smbpasswd -a nobody

4. Add any Samba users that you would like to manually. When prompted, enter your choice of a secure password. Each Samba account must have a corresponding Linux system account. In the near future, a script will be posted for download which will allow Samba accounts and Linux system accounts to be created at the same time:

smbpasswd -a username

5. Add a line to the to /etc/samba/smb.conf configuration file to restrict which interface SMB requests are served on. If the IP address and subnet mask of your master node's internal interface is different than below, make the necessary correction:

interfaces = 192.168.0.1/24

6. Restart Samba to enable the configuration change:

/etc/init.d/samba restart

Here is the resulting /etc/samba/smb.conf

#
# Sample configuration file for the Samba suite for Debian GNU/Linux.
#
#
# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options most of which 
# are not shown in this example
#
# Any line which starts with a ; (semi-colon) or a # (hash) 
# is a comment and is ignored. In this example we will use a #
# for commentary and a ; for parts of the config file that you
# may wish to enable
#
# NOTE: Whenever you modify this file you should run the command
# "testparm" to check that you have not many any basic syntactic 
# errors. 
#

#======================= Global Settings =======================

[global]

## Browsing/Identification ###

# Change this to the workgroup/NT-domain name your Samba server will part of
   workgroup = softice

# server string is the equivalent of the NT Description field
   server string = %h server (Samba %v)

# Windows Internet Name Serving Support Section:
# WINS Support - Tells the NMBD component of Samba to enable its WINS Server
;   wins support = no

# WINS Server - Tells the NMBD components of Samba to be a WINS Client
# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
;   wins server = w.x.y.z

# This will prevent nmbd to search for NetBIOS names through DNS.
   dns proxy = no

# What naming service and in what order should we use to resolve host names
# to IP addresses
;   name resolve order = lmhosts host wins bcast


#### Debugging/Accounting ####

# This tells Samba to use a separate log file for each machine
# that connects
   log file = /var/log/samba/log.%m

# Put a capping on the size of the log files (in Kb).
   max log size = 1000

# If you want Samba to only log through syslog then set the following
# parameter to 'yes'.
;   syslog only = no

# We want Samba to log a minimum amount of information to syslog. Everything
# should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log
# through syslog you should set the following parameter to something higher.
   syslog = 0

# Do something sensible when Samba crashes: mail the admin a backtrace
   panic action = /usr/share/samba/panic-action %d


####### Authentication #######

# "security = user" is always a good idea. This will require a Unix account
# in this server for every user accessing the server. See
# /usr/share/doc/samba-doc/htmldocs/ServerType.html in the samba-doc
# package for details.
;   security = user

# You may wish to use password encryption.  See the section on
# 'encrypt passwords' in the smb.conf(5) manpage before enabling.
   encrypt passwords = true

# If you are using encrypted passwords, Samba will need to know what
# password database type you are using.  
   passdb backend = tdbsam 

   obey pam restrictions = yes

;   guest account = nobody
   invalid users = root

# This boolean parameter controls whether Samba attempts to sync the Unix
# password with the SMB password when the encrypted SMB password in the
# passdb is changed.
;   unix password sync = no

# For Unix password sync to work on a Debian GNU/Linux system, the following
# parameters must be set (thanks to Augustin Luton <aluton@hybrigenics.fr> for
# sending the correct chat script for the passwd program in Debian Potato).
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n .

# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# 'passwd program'. The default is 'no'.
;   pam password change = no


########## Printing ##########

# If you want to automatically load your printer list rather
# than setting them up individually then you'll need this
;   load printers = yes

# lpr(ng) printing. You may wish to override the location of the
# printcap file
;   printing = bsd
;   printcap name = /etc/printcap

# CUPS printing.  See also the cupsaddsmb(8) manpage in the
# cupsys-client package.
;   printing = cups
;   printcap name = cups

# When using [print$], root is implicitly a 'printer admin', but you can
# also give this right to other users to add drivers and set printer
# properties
;   printer admin = @ntadmin


######## File sharing ########

# Name mangling options
;   preserve case = yes
;   short preserve case = yes


############ Misc ############

# Using the following line enables you to customise your configuration
# on a per machine basis. The %m gets replaced with the netbios name
# of the machine that is connecting
;   include = /home/samba/etc/smb.conf.%m

# Most people will find that this option gives better performance.
# See smb.conf(5) and /usr/share/doc/samba-doc/htmldocs/speed.html
# for details
# You may want to add the following on a Linux system:
#         SO_RCVBUF=8192 SO_SNDBUF=8192
   socket options = TCP_NODELAY

# The following parameter is useful only if you have the linpopup package
# installed. The samba maintainer and the linpopup maintainer are
# working to ease installation and configuration of linpopup and samba.
;   message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' &

# Domain Master specifies Samba to be the Domain Master Browser. If this
# machine will be configured as a BDC (a secondary logon server), you
# must set this to 'no'; otherwise, the default behavior is recommended.
;   domain master = auto

# Some defaults for winbind (make sure you're not using the ranges
# for something else.)
;   idmap uid = 10000-20000
;   idmap gid = 10000-20000
;   template shell = /bin/bash

# added by Matt Rideout <mrideout@windserve.com> on 1/25/07 to restrict which ethernet interface to serve Samba requests on
interfaces = 192.168.0.1/24

#======================= Share Definitions =======================

[homes]
   comment = Home Directories
   browseable = no

# By default, the home directories are exported read-only. Change next
# parameter to 'yes' if you want to be able to write to them.
   writable = yes

# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
   create mask = 0700

# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
   directory mask = 0700

[sys]
   comment = System Files
   writable = no
   path = /home/sys

# Un-comment the following and create the netlogon directory for Domain Logons
# (you need to configure Samba to act as a domain controller too.)
;[netlogon]
;   comment = Network Logon Service
;   path = /home/samba/netlogon
;   guest ok = yes
;   writable = no
;   share modes = no

[printers]
   comment = All Printers
   browseable = no
   path = /tmp
   printable = yes
   public = no
   writable = no
   create mode = 0700

# Windows clients look for this share name as a source of downloadable
# printer drivers
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no
# Uncomment to allow remote administration of Windows print drivers.
# Replace 'ntadmin' with the name of the group your admin users are
# members of.
;   write list = root, @ntadmin

# A sample share for sharing your CD-ROM with others.
;[cdrom]
;   comment = Samba server's CD-ROM
;   writable = no
;   locking = no
;   path = /cdrom
;   public = yes

# The next two parameters show how to auto-mount a CD-ROM when the
#	cdrom share is accesed. For this to work /etc/fstab must contain
#	an entry like this:
#
#       /dev/scd0   /cdrom  iso9660 defaults,noauto,ro,user   0 0
#
# The CD-ROM gets unmounted automatically after the connection to the
#
# If you don't want to use auto-mounting/unmounting make sure the CD
#	is mounted on /cdrom
#
;   preexec = /bin/mount /cdrom
;   postexec = /bin/umount /cdrom

Configure Slave Nodes

Configure the Default Slave Node Image

Perform the following on the master node:

1. Chroot into the default slave node image directory:

chroot /vnfs/default/

2. Update APT package index:

apt-get update

3. Install SMBFS. Select all default options when prompted.

apt-get install smbfs

4. Install screen and uml-utilities. These utilities are used by the SOFTICE labs:

apt-get install screen uml-utilities

5. Edit the /etc/fstab file. Comment out any lines containing the /home mount point, and add the following lines:

192.168.0.1/sys           /home/sys               smbfs   credentials=/root/.credentials  0       0
//192.168.0.1/sys         /home/sys               smbfs   credentials=/root/.credentials  0       0

6. Create the /root/.credentials file by running the commands below. Substitute in the password that you set in the previous step:

echo "username=nobody" > /root/.credentials
echo "password=securePassword" >> /root/.credentials
chmod 600 /root/.credentials

7. Edit the /etc/ssh/sshd_config file. Add the following line to disable SSH from making reverse-DNS lookups for connecting clients:

UseDNS no

8. Exit the chroot:

exit

Enable SMB Support in Slave Node Kernels

Perform the following on the master node:


Configure Warewulf

Perform the following on the master node:

1. Edit the /etc/warewulf/vnfs/excludes-aggressive file, adding the following lines:

+ var/run/screen/
etc/hostname

2. Rebuild Warewulf's VNFS image:

sudo wwvnfs --build --hybrid --excludes aggressive

Modify Default Login and Logout Scripts

1. Edit the /etc/skel/.bash_profile file, adding the following lines, and creating the file if it does not already exist. This will cause an SMB mount of each user's home directory to take place at login.

Note: Change the $HOSTNAME variable shown in red below to match the hostname of your master node. Also change the IP address shown in red to match the IP address of your master node.

# run smb mount only if the user is not logged into master node, and SMB has not already been mounted
if [ "$HOSTNAME" == "penguin.lakeland.usf.edu" ]; then
  echo "Logged into maser node."
else
  echo "Not logged into master node."

  if [ -f ~/."$HOSTNAME" ]; then
    echo "already mounted"
  else
    echo "mounting"
    # the .$HOSTNAME file is used to keep track of whether a mount already took place from the named host
    smbmount //192.168.0.1/"$USER" ~ -o credentials=.credentials && touch ~/."$HOSTNAME"
  fi
fi

2. Edit the /etc/skel/.bash_logout file, adding the following lines, and creating the file if it does not already exist. This will cause the SMB mount of each user's home directory to be unmounted at logout.

# unmount the smb share if it is mounted
if [ -f ~/."$HOSTNAME" ]; then
  smbumount ~ && rm ~/."$HOSTNAME"
fi

Troubleshooting

Remarks on why things could go thump in the night:

  • All Samba user accounts must have corresponding Linux user accounts.

References

Personal tools