#!/bin/sh # # Post-installation script for the Samba package for Debian GNU/Linux # # Written by Eloy A. Paris for the Debian project. # # The prerm script (run before the postinst) disables Samba in /etc/inetd.conf # and stops both nmbd and smbd. So, when this script is run we # know that neither nmbd nor smbd can start. # case "$1" in configure) # continue below ;; abort-upgrade|abort-remove|abort-deconfigure) exit 0 ;; *) echo "postinst called with unknown argument \`$1'" >&2 exit 0 ;; esac # Take care of the /usr/doc/ to /usr/shar/doc/ migration. if [ -d /usr/doc -a ! -e /usr/doc/samba -a -d /usr/share/doc/samba ]; then ln -sf ../share/doc/samba /usr/doc/samba fi # Starting with Samba 2.0.7-4 the location of the WINS database, the browse # database and other important run-time files are stored in # /var/state/samba/ rather than in /var/samba/. The following # code takes care of moving the files in the old directory to # the new directory. if [ -d /var/samba/ ]; then mv /var/samba/* /var/state/samba/ rmdir /var/samba/ fi # Define some constants... DEBIAN_CONFIG=/etc/samba/debian_config CONFIG_VERSION=1 # Now some variables... samba_configured=no if [ -f $DEBIAN_CONFIG ]; then . $DEBIAN_CONFIG if [ "$config_version" -ge "$CONFIG_VERSION" ]; then samba_configured=yes fi fi # If Samba is configured we don't want to pester the user with # configuration questions, just tell him that he can reconfigure # Samba at any time by running /usr/sbin/sambaconfig. if [ "$samba_configured" = "no" ]; then # Samba is not configured, go and ask the user the information needed # to configure it, and configure it! # Create Debian specific configuration file echo "config_version=$CONFIG_VERSION" > $DEBIAN_CONFIG # We always run /etc/init.d/samba, even if we run Samba from inetd. # This script file takes care of handling the conflict of running # from inetd or as daemons. update-rc.d samba defaults >/dev/null # We want to add these entries to inetd.conf commented out. Otherwise # UDP traffic could make inetd to start nmbd or smbd right during # the configuration stage. update-inetd --add "## netbios-ssn stream tcp nowait root /usr/sbin/tcpd /usr/sbin/smbd" update-inetd --add "## netbios-ns dgram udp wait root /usr/sbin/tcpd /usr/sbin/nmbd -a" echo "" echo Samba Configuration echo ------------------- echo "The Samba server may be run either as a daemon at startup, or it may be" echo "run from the inetd meta-daemon upon request. If run as a daemon, the" echo "server will always be ready, so starting sessions will be faster. If run" echo "from the inetd meta-daemon some memory will be saved and utilities such" echo "as the tcpd TCP-wrapper may be used for extra security. If you don't" echo "know what to do, running from inetd is a safe choice." echo "" echo "Run Samba as daemons or from inetd?" echo -n "Press 'D' to run as daemons or 'I' to run from inetd: [I] " read mode test -n "$mode" || mode="I" case "$mode" in [Dd]*) echo "Samba will run as daemons. Run sambaconfig to reconfigure" update-inetd --disable netbios-ssn update-inetd --disable netbios-ns echo "run_mode=as_daemons" >> $DEBIAN_CONFIG ;; *) echo "Samba will run from inetd. Run sambaconfig to reconfigure" update-inetd --enable netbios-ssn update-inetd --enable netbios-ns echo "run_mode=from_inetd" >> $DEBIAN_CONFIG ;; esac if [ ! -f /etc/samba/smbpasswd ]; then echo "" echo "If you are going to use encrypted passwords you need to have a" echo "separate password file for this (the format is different from " echo "/etc/passwd). Right now you don't have an /etc/samba/smbpasswd file." echo "Do you want to generate this new file from your existing" echo -n "/etc/passwd file? [y/N] " read yn test -n "$yn" || yn="N" if [ $yn = y -o $yn = Y ]; then cat /etc/passwd | /usr/sbin/mksmbpasswd > /etc/samba/smbpasswd chmod 600 /etc/samba/smbpasswd echo "" echo "/etc/samba/smbpasswd now has the same user names as /etc/passwd. However," echo "you need to run smbpasswd manually to set the password for each user." echo "" echo "smbpasswd_created=yes" >> $DEBIAN_CONFIG else echo "smbpasswd_created=no" >> $DEBIAN_CONFIG fi fi echo "" # Start Samba: nothing wrong will happen if Samba is running from inetd # and /etc/init.d/samba is run. However, to simplify things, we # do not run /etc/init.d/samba if we're running from inetd. if [ $mode = d -o $mode = D ]; then echo -n "Samba will run as daemons - start Samba now? [Y/n] " read yn test -n "$yn" || yn="Y" case "$yn" in [Nn]*) echo "Not started; to start later, do: /etc/init.d/samba start" echo -n "Press [ENTER] " read line ;; *) /etc/init.d/samba start ;; esac else echo "Since you are running Samba from inetd, the daemons will start" echo "automatically by inetd when there is traffic on the NetBIOS" echo "ports." echo -n "Press [ENTER] " read line fi else # if (samba_configured) ... # We are here because Samba was already configured... # At this point the NetBIOS daemons are disabled in /etc/inetd.conf. # This is a consequence of what we did in the prerm. If Samba was # configured to run from inetd we need to enable the entries in # /etc/inetd.conf. # Read current Samba configuration . $DEBIAN_CONFIG if [ "$run_mode" = "from_inetd" ]; then update-inetd --enable netbios-ssn update-inetd --enable netbios-ns fi echo "" echo "Samba was already installed and configured so I skipped the " echo "configuration questions. You can run the script /usr/sbin/sambaconfig" echo "at any time to reconfigure Samba. See sambaconfig(8) for more" echo "details. I will not even ask you if you want to restart Samba," echo "I will just do it!" echo "" /etc/init.d/samba start fi # if (samba_configured) ... if test "$1" = configure && dpkg --compare-versions "$2" lt 2.0.0final-2 && [ -f /etc/samba/smbpasswd ]; then cat << EOF *** IMPORTANT *** The format of the smbpasswd file (which is used only if you are using encrypted passwords) is different in Samba 2.0.0 and above. I will convert it to the new format. EOF mv /etc/samba/smbpasswd /etc/samba/smbpasswd.old cat /etc/samba/smbpasswd.old | /usr/bin/convert_smbpasswd \ > /etc/samba/smbpasswd 2> /dev/null fi # This check is a safety net: the /etc/samba/smbpasswd file must have # permissions 600. if [ -f /etc/samba/smbpasswd ]; then chmod 600 /etc/samba/smbpasswd fi # Do the same check for /var/backup/smbpasswd.bak, just in case. if [ -f /var/backups/smbpasswd.bak ]; then chmod 600 /var/backups/smbpasswd.bak fi exit 0