source: fedkit/smbmount.FreeBSD.pl @ 6a8a9ec

axis_examplecompt_changesinfo-opsversion-3.01version-3.02
Last change on this file since 6a8a9ec was c0a8738, checked in by Ted Faber <faber@…>, 15 years ago

Moving toward the federation scripts that don't rely on tmcd forwarding.

  • Property mode set to 100755
File size: 3.6 KB
Line 
1#!/usr/bin/perl
2
3#############################################################################
4# smbmounts.pl: Setup Automounter to mount via SMB for federated experiments
5# $Id: smbmount.FreeBSD.pl,v 1.1 2008-05-18 00:09:31 faber Exp $
6#
7
8$SHARE=shift || "USERS";
9$ADDR=shift || `cat /usr/local/etc/emulab/bossnode`;
10$PUSER=shift || "jhickey";
11$PNAME=shift || "emulab-ops";
12$FSTAB="/etc/fstab";
13$HOMEROOT="/users";
14$PROJROOT="/proj";
15$AMDROOT="/auto";
16$AMDMAP="/etc/amd.users";
17$PAMDMAP="/etc/amd.proj";
18
19chomp $ADDR;
20
21$TMCC="/usr/local/etc/emulab/tmcc";
22$UMOUNT="/sbin/umount";
23$MOUNT="/sbin/mount";
24$MKDIR="/bin/mkdir";
25$CP="/bin/cp";
26$KILLALL="/usr/bin/killall";
27$AMD="/usr/sbin/amd";
28
29print "Killing amd.\n";
30system("$KILLALL amd");
31
32print "Unmounting all nfs and smb filesystems.\n";
33system("$UMOUNT -A -f -t nfs,smbfs"); # or die("Failed to unmount NFS");
34
35# Backup the fstab so we can run multiple times
36if (! -f "$FSTAB.bak") {
37        system("$CP $FSTAB $FSTAB.bak") && die("Unable to backup $FSTAB");
38} else {
39        system("$CP $FSTAB.bak $FSTAB") && die("Unable to restore $FSTAB");
40}
41
42# open(TM, "$TMCC accounts windows |") or die("Failed to execute TMCC");
43open(TM, "/usr/local/federation/etc/userconf")or die("Failed to open userconf");
44open(CONFIG, ">/etc/nsmb.conf") or die("Failed to open /etc/nsmb.conf");
45open(MAP, ">$AMDMAP") or die("Failed to open $AMDMAP");
46open(PMAP, ">$PAMDMAP") or die("Failed to open $PAMDMAP");
47open(FSTAB,">>$FSTAB") or die("Cannot Open File $FSTAB");
48
49print FSTAB "\n# SMB Configuration Generated by smbmount.pl\n";
50print MAP "# AMD Configuration Generated by smbmount.pl\n";
51print CONFIG "# SMB Configuration Generated by smbmount.pl\n\n";
52print CONFIG "[$SHARE]\naddr=$ADDR\n\n";
53
54while(<TM>) {
55    /ADDUSER/ && do {
56        /LOGIN=(\S+)/ && do { $user = $1; };
57        /WPSWD=(\S+)/ && do { $pswd = $1; };
58        /UID=(\S+)/ && do { $uid = $1; };
59        /GID=(\S+)/ && do { $gid = $1; };
60        /HOMEDIR=(\S+)/ && do { $homedir = $1; };
61
62        $userlc = $user;
63        # SMB demands upper case.
64        $user =~  tr/a-z/A-Z/;
65        my $pass = `smbutil crypt '$pswd'`;
66
67        print CONFIG "[$SHARE:$user]\npassword=$pass\n";
68       
69        if(! -d "$AMDROOT$homedir") {
70                system("$MKDIR -p $AMDROOT$homedir") && 
71                    die("Failed to make directory");
72        }
73
74        print FSTAB "//$user\@$SHARE/$user\t";
75        print FSTAB "$AMDROOT$homedir\tsmbfs\t";
76        print FSTAB "noauto,rw,-N,-f744,-d755,-u$uid,-g$gid\t0\t0\n";
77
78        print MAP "\n$userlc type:=program;fs:=$AMDROOT$homedir;\\\n";
79        print MAP "mount:=\"$MOUNT mount $AMDROOT$homedir\";\\\n";
80        print MAP "unmount:=\"$UMOUNT unmount $AMDROOT$homedir\";";
81
82        #
83        # If we are PUSER, the user assigned to mount the project directory,
84        # then we add in the mount for that.  The share is called proj-$PNAME
85        # where PNAME is the name of the project at the mothership.  We need
86        # a second map for this since we will be mounting under /proj.
87        # We should really not use share in federation.
88        #
89
90        if($user =~ m/$PUSER/i) {
91            print FSTAB "//$user\@$SHARE/proj-$PNAME\t";
92            print FSTAB "$AMDROOT/proj\tsmbfs\t";
93            print FSTAB "noauto,rw,-N,-f774,-d775,-u$uid,-g$gid\t0\t0\n";
94
95            print PMAP "$PNAME type:=program;fs:=$AMDROOT/proj;\\\n";
96            print PMAP "mount:=\"$MOUNT mount $AMDROOT/proj\";\\\n";
97            print PMAP "unmount:=\"$UMOUNT unmount $AMDROOT/proj\";\n";
98
99            if(! -d "$AMDROOT/proj") {
100                    system("$MKDIR -p $AMDROOT/proj") && 
101                        die("Failed to make directory");
102            }
103        }
104    }
105}
106
107close(CONFIG);
108close(FSTAB);
109close(MAP);
110close(PMAP);
111
112print "Starting the automounter: $AMD -l syslog -a $AMDROOT $HOMEROOT $AMDMAP $PROJROOT $PAMDMAP\n";
113system("$AMD -l syslog -a $AMDROOT $HOMEROOT $AMDMAP $PROJROOT $PAMDMAP") && die("Unable to start amd");
Note: See TracBrowser for help on using the repository browser.