I run Ubuntu, and I have sshfs installed. sshfs is part of FUSE, Filesystems in Userspace. What SSH allows you to do is mount the file systems on other machines via SSH.
The issue I ran into was that I wanted certain continual mounts all the time. I created a
~/Mount directory and put the mountpoints in there, and had mounting and unmounting shell scripts. If I wanted everything, I got everything. If I just wanted to unmount and remount one, well, I had to grep for the commands I want.I have two example machines to mount: Home and Work.
mount.pl mounts both. mount.pl -q unmounts both. mount.pl -m Home mounts just the Home filesystem. mount.pl -u Home unmounts just the Home filesystem. It could easily be set up to mount and unmount the NTFS filesystem of a dual-boot computer using
ntfsmount, or interact with Windows systems via smbmount, or other things. Right now, it seems way too small to try to put together as a project, but if you find it useful, feel free to comment.
#!/usr/bin/perl
use strict ;
use warnings ;
use Getopt::Long ;
use 5.010 ;
use subs qw( mount unmount ) ;
# Definition
# mount.pl -- mounts all in the config
# mount.pl -Q -- unmounts all in the config
# mount.pl -m foo -- mounts foo, if foo is in config
# mount.pl -u foo -- unmounts foo, if foo is in config
# mount.pl -m foo -u bar -- mounts and unmounts can be mixed
my @mount ;
my @unmount ;
my $unmount ;
my %local ;
my %remote ;
my $mountprog = '/usr/bin/sshfs' ;
my $unmountprog = '/bin/fusermount' ;
GetOptions( 'mount=s' => \@mount,
'unmount=s' => \@unmount,
'quit' => \$unmount, ) ;
while ( ) {
chomp ;
my $line = $_ ;
next if $line !~ m{\w}mx ;
my $result = ( split m{\#}mx, $line )[ 0 ] ;
$line = $result ;
next if $line !~ m{\w}mx ;
my ( $name, $remote, $local ) = split m{\s*\|\s*}mx, $line ;
$local{ $name } = $local ;
$remote{ $name } = $remote ;
}
# UNMOUNT EVERYTHING
if ( $unmount ) {
for my $mount ( sort keys %local ) {
unmount $mount , $local{ $mount } ;
}
}
# MOUNT EVERYTHING
elsif ( ( $#mount == -1 ) && ( $#unmount == -1 ) ) {
for my $mount ( sort keys %local ) {
mount $mount , $remote{ $mount }, $local{ $mount } ;
}
}
# MIXED MOUNTS AND UNMOUNTS
else {
# mounts first
for my $mount ( @mount ) {
mount $mount , $remote{ $mount }, $local{ $mount } ;
}
# then unmounts
for my $mount ( @unmount ) {
unmount $mount , $local{ $mount } ;
}
}
exit 0 ;
sub mount {
my $name = shift ;
my $remote = shift ;
my $local = shift ;
return 0 if $name !~ /\w/mx ;
return 0 if $remote !~ /\w/mx ;
return 0 if $local !~ /\w/mx ;
return 0 if !-d $local ;
say 'Mounting ' . $name ;
say qx( /usr/bin/sshfs $remote $local ) ;
return 1 ;
}
sub unmount {
my $name = shift ;
my $local = shift ;
return 0 if $name !~ /\w/mx ;
return 0 if $local !~ /\w/mx ;
return 0 if !-d $local ;
say 'Unmounting ' . $name ;
say qx( /bin/fusermount -u $local ) ;
return 1 ;
}
__DATA__
# NAME | REMOTE MOUNT POINT | LOCAL MOUNT POINT
Work | xxx.xxxx.xxxx.edu: | /home/rant/Mount/work
Home | xxx.xxxx.xxxx.net: | /home/rant/Mount/home
(I plan to beautify the means to dump code in the near future.)
No comments:
Post a Comment