Como hacer correr SAMBA con distintas configuraciones (e IPs)


Jaume Sabater.

19 de octubre de 2001
Nivel: medio
Sistema: linux
Arquitectura: todas
Distribución: todas
Sección: comunicaciones
Función: configuracion

Esto nos va a servir para emular varios servidores NT con sus respectivas configuraciones y servicios, lo que nos va a permitir tener dos "dominios NT" o mas, en una sola maquina Linux.

Antes de nada, hay que tener tantas IPs como servidores samba queramos, ya que cada uno va a correr sobre una IP distinta. Para tener varias IPs en una sola interfaz es ... es otro HowTo ;)

La idea es de modificar el smbd y el nmbd para que admitan distintos nombres en el archivo donde se guarda el PID, de forma que para cada configuracion distinta del smbd/nmbd tendremos un archivo distinto con un PID distinto.

  1. Nos bajamos las fuentes del samba ( "apt-get source samba" , o a partir de http://www.samba.org).

  2. Editamos el /smbd/server.c de forma que acepte la nueva opción -P

    1. Añadimos lo siguiente en la funcion usage()



         printf("\t-P Archivo PID          Nombre del archivo PID\n");
      	    
    2. Añadimos lo siguiente en main()



         char archivo_PID[32] = "smbd";
      	    
    3. Modificamos la siguiente linea de la funcion main()



         while (EOF != (opt = getopt(argc, argv, "O:l:s:d:Dp:h?Vaof:")))
      	    

      por



         while (EOF != (opt = getopt(argc, argv, "O:l:s:d:Dp:P:h?Vaof:")))
      	    
    4. Añadimos lo siguiente en el case de la función main()



         case 'P':
                 pstrcpy(archivo_PID,optarg);
                 break;
      	    
    5. Modificamos la siguiente linea de la funcion main()



         pidfile_create("smbd");
      	    

      por



         pidfile_create(archivo_PID);
      	    
  3. Editamos nmbd/nmbd.c para que también acepte -P

    1. Añadimos lo siguiente en la función usage()



         printf("\t-P Archivo PID          Nombre del archivo PID\n");
    2. Añadimos lo siguiente en la función main()



         char archivo_PID[32] = "nmbd";
      	    
    3. Modificamos la siguiente linea de la función main()



         while (EOF != (opt = getopt(argc,argv,"Vaos:T:I:C:bAB:N:Rn:l:d:Dp:hSH:G:f:")))
      	    

      por



         while (EOF != (opt = getopt(argc,argv,"Vaos:T:I:C:bAB:N:Rn:l:d:Dp:P:hSH:G:f:")))
      	    
    4. Añadimos lo siguiente en el case de la función main()



         case 'P':
                 pstrcpy(archivo_PID,optarg);
                 break;
      	    
    5. Modificamos la siguiente linea de la función main()



         pidfile_create("nmbd");
      	    

      por



         pidfile_create(archivo_PID);
      	    


  4.    /configure ; make ; make install
    	

    Ya tenemos a samba en /usr/local/samba.

  5. Haremos tantos archivos de configuración como servidores distintos queramos. Habrá que tener en cuenta que en cada configuración le tendremos que especificar una IP distinta.

  6. Nos creamos un script para arrancarlo y pararlo (evidentemente, mejorable: por ejemplo, se tendría que poder matar un smbd/nmbd segun su respectivo archivo_PID)



    
    case $1 in
            start)
                    /usr/local/samba/bin/nmbd -D -s /etc/samba/smb-1.conf -l
    /var/log/samba-1.log -P nmbd-1
                    /usr/local/samba/bin/smbd -D -s /etc/samba/smb-1.conf -l
    /var/log/samba-1.log -P smbd-1
                    /usr/local/samba/bin/nmbd -D -s /etc/samba/smb-2.conf -l
    /var/log/samba-2.log -P nmbd-2
                    /usr/local/samba/bin/smbd -D -s /etc/samba/smb-2.conf -l
    /var/log/samba-2.log -P smbd-2
                    /usr/local/samba/bin/nmbd -D -s /etc/samba/smb-3.conf -l
    /var/log/samba-3.log -P nmbd-3
                    /usr/local/samba/bin/smbd -D -s /etc/samba/smb-3.conf -l
    /var/log/samba-3.log -P smbd-3
                    # etc...
            ;;
    
            stop)
                    killall smbd
                    killall nmbd
            ;;
    
            restart)
                    $0 stop
                    sleep 1
                    $0 start
            ;;
    
            *)
                    echo "Usage: $0 {start|stop|restart}"
            ;;
    esac
    	
  7. Metemos ese script en /etc/init.d/samba.sh como ejecutable, y ya tá ;)

Jaume Sabater - Ousman - ous_a_ousman_punt_com

© 2001, La Espiral.