Compare commits

..

103 Commits

Author SHA1 Message Date
Eric Turgeon cfd6d1a17c
Merge branch 'vermaden:master' into master 2024-12-03 19:09:40 -04:00
vermaden 3f9b41940e Remove fuse.ko module loading as from 13.x there is only fusefs.ko module. 2024-03-05 12:35:56 +01:00
Eric Turgeon 6cecb3de81
Merge branch 'vermaden:master' into master 2023-09-04 08:32:31 -03:00
vermaden 539a0ac32b Upload 1.7.9 version. Update README. 2023-08-23 21:33:21 +02:00
vermaden ce51525a2f Update version. Other small fixes. 2023-08-23 21:18:39 +02:00
vermaden 6886a7d75a Fix usage() information. 2023-08-23 16:09:59 +02:00
vermaden a7fbeeb2c7 Implement BLACKLIST_REGEX option. Use fusefs-lkl for all ext2/ext3/ext4 mounts. Fix exFAT detection. 2023-08-23 15:29:39 +02:00
ericbsd bbaba0538e Delete tar files in the repository 2022-06-03 18:01:47 -03:00
vermaden da4bec4327 Fix XORG detection. 2022-05-24 12:53:43 +02:00
vermaden 453b42bc88 Fix XORG detection. 2022-05-24 12:52:32 +02:00
vermaden ae6cd2ef44 Import 1.7.8 version. 2022-05-03 22:31:53 +02:00
vermaden 1dff7fd13f Fix some minor problems. 2022-05-03 22:29:46 +02:00
vermaden 048d1e57bf Fix harmless gpart(8) rant about ugen(4) devices. 2022-02-25 20:22:01 +01:00
vermaden 4277af47de Update README file. 2022-02-20 22:45:34 +01:00
vermaden 2dc511276d Fix year. 2022-02-20 22:39:17 +01:00
vermaden 466712252a Fix removal of dirs from unmounted filesystems. 2022-02-20 22:35:05 +01:00
vermaden 1b69cda21f Add option to ignore system partitions like EFI or MSR. 2022-02-20 21:42:38 +01:00
vermaden 3dacc13068 Fix mount permissions for FAT filesystems. 2021-11-17 09:55:39 +01:00
vermaden 30fc238feb Fix year. 2021-11-15 17:05:35 +01:00
vermaden c51f0be657 Update README file. 2021-11-15 17:04:15 +01:00
vermaden e6e701bb49 Added UZIP images support. Added another try to mount device in read only mode. Added optional ada(4) disks support. Added optional md(4) devices support. Added automatic kernel modules loading. 2021-11-15 17:02:00 +01:00
vermaden a164c8f444 Add REMOVEDIRS and NICENAMES options. Add logo. Use 755 permissions for FAT mounts. Use procstat(1) for faster DISPLAY environemnt searching. 2021-10-01 16:45:20 +02:00
vermaden 2a1f2a2972 Add REMOVEDIRS and NICENAMES options. Add logo. Use 755 permissions for FAT mounts. Use procstat(1) for faster DISPLAY environemnt searching. 2021-10-01 15:26:51 +02:00
vermaden 777603a18e Update version after change. 2021-03-27 17:55:06 +01:00
vermaden f501189202 Use 755 instead of 644 to allow scripts execution from removable media. 2021-03-27 17:47:47 +01:00
vermaden 3a1b772274
Merge pull request #26 from grahamperrin/patch-1
Update README.
2021-02-15 12:59:35 +01:00
Graham Perrin 9017446d44
Update README
Minor corrections and updates. 

`sysutils/fusefs-ext4fuse` https://www.freshports.org/sysutils/fusefs-ext4fuse/#history – removed. 

https://www.freebsd.org/cgi/man.cgi?query=libnitify and https://www.freebsd.org/cgi/man.cgi?query=libnotify find nothing. https://www.freebsd.org/cgi/man.cgi?query=libnotify&apropos=1 finds Gtk2::Notify(3) e.g. https://www.freebsd.org/cgi/man.cgi?query=Gtk2%3a%3aNotify(3)
2021-02-14 16:39:40 +00:00
vermaden c08900fb22 Update README. 2021-02-02 20:23:42 +01:00
vermaden bf899bcbd5 Add ASCII logo. 2020-08-05 23:20:01 +02:00
vermaden 752a1b6594 Update README. 2020-04-30 23:16:39 +02:00
vermaden acf0784447 Phase out support for sysutils/fusefs-ext4fuse port. Fix UMASK for exFAT filesystems. Fix ISO9660 mount options. 2020-04-29 12:42:13 +02:00
vermaden fef1358c2a Fix future version. 2019-12-15 15:01:14 +01:00
vermaden c5077f57c3 Add 1.7.1 to README file. 2019-12-15 15:00:30 +01:00
vermaden 225e3f8bec Rework log messages for missing ports/packages. Use 'fusefs-lkl' for EXT4 filesystem. Fix cd9660 mounts. 2019-12-15 14:57:42 +01:00
vermaden 33d7d28bf0 Remove unneeded debug __log() message. 2019-12-09 18:06:19 +01:00
vermaden 3121643225 Remove -e flag from mount_cd9660 command. 2019-12-06 14:37:33 +01:00
vermaden 72eeeff0f1 Fix exFAT mount rights. Use USER option in config file. Make MTP detection and mount better. 2019-12-03 14:27:49 +01:00
vermaden 6ad9b18041 Major code rework. CD-ROM support. Notifications. Lots of fixes and changes. 2019-08-28 14:42:27 +02:00
vermaden 8ced675ae6 Update README. 2019-01-14 09:46:38 +01:00
vermaden 2fca632b1c Add automount-1.6.1.tar.gz tarball. 2019-01-11 12:17:19 +01:00
vermaden ada4b0cec1 Fix MBR/msdosfs partition unmount issue. 2019-01-11 12:12:28 +01:00
vermaden cf10b9627d Fix MBR/msdosfs partition unmount issue. 2019-01-11 12:10:28 +01:00
vermaden ee8ef522e7 Add fsck.exfat and set fsck.extX instead e2fsck for extX filesystems. 2018-12-10 10:55:21 +01:00
vermaden 1f8a1cb18e Add fsck.exfat and set fsck.extX instead e2fsck for extX filesystems. 2018-12-10 10:53:38 +01:00
vermaden d24e6d44dc Some other small fixes. 2018-12-10 00:45:05 +01:00
vermaden 0d7c2eb916 Remove temporary directory. 2018-12-10 00:35:22 +01:00
vermaden c4bed9c2d1 Update README. 2018-12-10 00:27:24 +01:00
vermaden 53a1f9764b Fix long boot with devd(8) because of ugen(4) devices. 2018-12-10 00:20:52 +01:00
vermaden e10933181b Update README. 2018-12-08 06:05:31 +01:00
vermaden ed71be780e Add 1.5.9 tarball. Add devd(8) config with ugen(4) support. 2018-12-08 05:59:05 +01:00
vermaden fc951d10bc Various fixes. Add MTP/XFS/HFS support. Remove delays. 2018-12-08 05:53:16 +01:00
vermaden c4921bb118 Cleanup. 2018-06-15 10:16:40 +02:00
vermaden 9214595c8e Cleanup. 2018-06-15 10:16:20 +02:00
vermaden 61b32659a8 Fix dots in README file. 2018-06-15 10:14:18 +02:00
vermaden bfafa04d9c Update README. Update CHANGELOG. 2018-06-15 10:11:57 +02:00
vermaden d783cb4823 Omit GVFS filesystem in the mount(8) listing. Improve exFAT mount options. Add mount_msdosfs(8) fallback fix. Set caja as file manager in example config. Add version argument. 2018-06-13 06:32:04 +02:00
vermaden 5d83c0efe0 Omit GVFS filesystem in the mount(8) listing. Improve exFAT mount options. Add mount_msdosfs(8) fallback fix. Set caja as file manager in example config. Add version argument. 2018-06-13 06:28:51 +02:00
vermaden 78cc52d36e Omit GVFS filesystem in the mount(8) listing. Improve exFAT mount options. Add mount_msdosfs(8) fallback fix. Set caja as file manager in example config. Add version argument. 2018-06-13 06:14:54 +02:00
vermaden 05b19538f8 Merge branch 'master' of github.com:vermaden/automount 2018-06-13 06:12:31 +02:00
vermaden 2bf25d6287
Add files via upload
Fix FAT32 mount. Add extended options for EXFAT mounts.
2017-11-17 15:04:17 +01:00
vermaden e23a731687 Fix FAT32 mount. Add extended options for EXFAT mounts. 2017-11-17 15:01:05 +01:00
Slawomir Wojciech Wojtczak (vermaden) dc41984861 Add automount-1.5.7.tar.gz tarball. 2015-08-02 12:09:36 +02:00
Slawomir Wojciech Wojtczak (vermaden) 4699323712 Add -version option. 2015-08-02 12:07:42 +02:00
Slawomir Wojciech Wojtczak (vermaden) aaf9a1f977 Add automount-1.5.5.tar.gz tarball. 2015-07-28 12:08:46 +02:00
Slawomir Wojciech Wojtczak (vermaden) 0f64eb9a43 Rework NTFS/MSDOS/FAT detection. 2015-07-28 12:05:12 +02:00
Slawomir Wojciech Wojtczak (vermaden) a15ffbb529 Bump version to 1.5.6. 2015-06-08 23:23:40 +02:00
Slawomir Wojciech Wojtczak (vermaden) f6b30298b4 Check for NTFS before FAT. 2015-06-08 23:22:51 +02:00
Slawomir Wojciech Wojtczak (vermaden) 60a2f698fb Added notification via notify-send/libnotify and wall(1). Minor bug fix. 2015-06-06 01:01:39 +02:00
Slawomir Wojciech Wojtczak (vermaden) 06d928ae16 Upload automount-1.5.4.tar.gz tarball. 2015-03-01 00:04:12 +01:00
Slawomir Wojciech Wojtczak (vermaden) 1ce47c884b Update version to '1.5.4 2015/03/01'. 2015-03-01 00:03:10 +01:00
Slawomir Wojciech Wojtczak (vermaden) 3c65028fe1 Change 'boot sector' detection. 2015-03-01 00:02:17 +01:00
Slawomir Wojciech Wojtczak (vermaden) 51b93b583f Add automount-1.5.3.tar.gz tarball. 2015-02-05 16:50:36 +01:00
Slawomir Wojciech Wojtczak (vermaden) d4fec94dc0 Fix small harmless bug - variable WAIT without default value. 2015-02-05 16:48:38 +01:00
Slawomir Wojciech Wojtczak (vermaden) 347796a242 Introduce smarter fstype() function to better determine filesystem. New automount-1.5.2.tar.gz tarball. 2015-01-26 19:12:46 +01:00
Slawomir Wojciech Wojtczak (vermaden) 56316f88c8 Upload automount 1.5.1 tarball. 2015-01-26 08:50:27 +01:00
Slawomir Wojciech Wojtczak (vermaden) 9c2976e824 Add -k flag to file(1) command. Set new --version and date(1). 2014-08-06 23:45:13 +02:00
Slawomir Wojciech Wojtczak (vermaden) 641769d5b3 Add -k flag to file(1) command. 2014-08-06 23:30:09 +02:00
Slawomir Wojciech Wojtczak (vermaden) f633ddbade Add 1.5 tarball. 2014-08-01 10:39:04 +02:00
Slawomir Wojciech Wojtczak (vermaden) 3cdfab2b6b Update --version. 2014-08-01 10:28:31 +02:00
Slawomir Wojciech Wojtczak (vermaden) fb424421fe Add new NTFS options. Add nested NTFS mount attempt. Fix devd(8) config. 2014-08-01 10:24:50 +02:00
Slawomir Wojciech Wojtczak (vermaden) b265a81108 Improve log messages. 2013-04-03 13:13:56 +02:00
Slawomir Wojciech Wojtczak (vermaden) ca49d8250d Use random wait only on ATTACH action, not needed on DETACH action. 2013-04-03 09:15:16 +02:00
Slawomir Wojciech Wojtczak (vermaden) f27ca34a40 Implement random wait to eliminate race. 2013-04-03 09:12:19 +02:00
Slawomir Wojciech Wojtczak (vermaden) 4506edf751 Implement BOOTDELAY option to wait for boot process to complete. Fix devd(8) config (thanks to LARKIND) to match all needed devices and their partitions. 2013-04-03 08:09:20 +02:00
Slawomir Wojciech Wojtczak (vermaden) 83e22eb923 Fix typo in NTFS error message. 2013-03-21 20:34:45 +01:00
Slawomir Wojciech Wojtczak (vermaden) 24c1fc2e4d Add shar(1) file for 1.4.3 release. 2013-03-13 13:57:20 +01:00
Slawomir Wojciech Wojtczak (vermaden) d640ea34b7 Rest of 1.4.3 version. 2013-03-13 13:50:06 +01:00
Slawomir Wojciech Wojtczak (vermaden) 7c24251d6e Add current version date/tag. 2013-03-13 13:38:08 +01:00
Slawomir Wojciech Wojtczak (vermaden) 456edafbfe Only style(9) changes. 2013-03-13 13:33:30 +01:00
vermaden 5c35a6972a Merge pull request #2 from ocochard/master
Force longnames option for msdosfs
2013-03-13 05:27:56 -07:00
Olivier Cochard-Labbé f2548f09d8 Force longnames option for msdosfs 2013-03-13 11:03:05 +01:00
Slawomir Wojciech Wojtczak (vermaden) 98051b4039 Update for 1.4.3 release. 2013-03-07 18:46:54 +01:00
Slawomir Wojciech Wojtczak (vermaden) 0078d1817e Use /sbin/e2fsck from FreeBSD base system. Fix typo at /var/log/automount.log error message. 2013-03-07 18:43:09 +01:00
Slawomir Wojciech Wojtczak (vermaden) 4df5aca19f Fix typo at /var/log/automount.log error message. 2013-03-07 14:06:06 +01:00
Slawomir Wojciech Wojtczak (vermaden) 2581bda99e Add -o remove_hiberfile to NTFS-3G mount options. 2013-03-07 12:24:05 +01:00
Slawomir Wojciech Wojtczak (vermaden) 6475a583f3 Fix a bug when ATIME is enabled. 2013-03-06 10:01:46 +01:00
Slawomir Wojciech Wojtczak (vermaden) 1db4bf70e4 Remove -u option for debug. 2013-03-05 13:18:18 +01:00
Slawomir Wojciech Wojtczak (vermaden) 1adcee4686 Add automount-1.4.2.tar.gz file. 2013-02-16 00:43:53 +01:00
Slawomir Wojciech Wojtczak (vermaden) 547c186ae4 Implement active sleep/wait for devices that could not appear. Add more useful information to /var/log/automount.log file. 2013-02-16 00:34:28 +01:00
Slawomir Wojciech Wojtczak (vermaden) 7ed9202cd4 Minor fixes about new BLACKLIST option. 2013-02-13 21:27:17 +01:00
Slawomir Wojciech Wojtczak (vermaden) ba210e0749 Implement --version option. Implement BLACKLIST option to ignore problematic devices. 2013-02-13 20:56:31 +01:00
Slawomir Wojciech Wojtczak (vermaden) 5e46303151 Cleanup formatting to use tabs, making portlint happy 2013-01-10 18:27:42 +01:00
Slawomir Wojciech Wojtczak (vermaden) 263fca6666 Add automount-1.4.1.tar.gz tarball and updated the FreeBSD Ports directory 'distinfo' and 'Makefile' files. 2013-01-10 09:54:05 +01:00
14 changed files with 1083 additions and 428 deletions

397
README
View File

@ -1,16 +1,287 @@
automount is a devd(8) based automounter for FreeBSD.
___ /\ ___
__/ /_ / \ _\ \__
____ _____/_ __/__ / _/\ ___ ___ ____ ______ __\__ _\
/ \ / / // // \ /\_/ \ / / \ / \\ \ \ / \\ \
/ / // / // // / // \\ \ \ \\ \ \\ \ \\ \ \\ \_
\_____\\____/ \__\\____//__________\\__\__\__\\____/ \_____\\__\__\\___\
The 'automount' is a devd(8) based automounter for FreeBSD.
It supports most popular file systems:
NTFS/MSDOS/exFAT/EXT2/EXT3/EXT4/UFS
NTFS/MSDOS/exFAT/EXT2/EXT3/EXT4/UFS/XFS/HFS/MTP/ISO9660
INSTALL:
-------------------------------------------------------------------------------
I N S T A L L
===================
Use provided FreeBSD Ports/packages from here:
* sysutils/automount
.. or make manual unstallation:
# cp automount.sh /usr/local/sbin/automount.sh
# cp automount.conf /usr/local/etc/automount.conf
# cp automount_devd.conf /usr/local/etc/devd/automount_devd.conf
# cp automount /usr/local/sbin/automount
# chmod +x /usr/local/sbin/automount
# /etc/rc.d/devd restart
Now plugin Your USB thumb drive ;)
Now plugin Your USB thumb drive and have fun ;)
These ports/packages are needed for all filesystems:
* sysutils/e2fsprogs // EXT2/EXT3/EXT4 fsck(8)
* sysutils/xfsprogs // XFS fsck(8)
* sysutils/exfat-utils // exFAT exfatfsck(8)
* sysutils/fusefs-exfat // exFAT
* sysutils/fusefs-ntfs // NTFS (read write support)
* sysutils/fusefs-hfsfuse // HFS
* sysutils/fusefs-lkl // XFS/EXT2/EXT3/EXT4
* sysutils/fusefs-simple-mtpfs // MTP
All of the above are available as pkg(8) packages.
Shortcut:
# pkg install -y \
sysutils/e2fsprogs \
sysutils/xfsprogs \
sysutils/exfat-utils \
sysutils/fusefs-exfat \
sysutils/fusefs-ntfs \
sysutils/fusefs-hfsfuse \
sysutils/fusefs-lkl \
sysutils/fusefs-simple-mtpfs
-------------------------------------------------------------------------------
C H A N G E L O G
=========================
VERSION 1.7.9 (CURRENT)
Fix XORG detection.
Implement proposed BLACKLIST_REGEX option.
Use 'sysutils/fusefs-lkl' for all ext2/ext3/ext4 mounts.
Fix exFAT detection.
Fix small problem with checking the mount state.
Implement better old directory cleanup.
-------------------------------------------------------------------------------
VERSION 1.7.8
Fix harmless gpart(8) rant about ugen(4) devices.
-------------------------------------------------------------------------------
VERSION 1.7.7
Add option to ignore system partitions like EFI or MSR.
Fix removal of dirs from unmounted filesystems.
Fix mount permissions for FAT filesystems.
Add spaces and comments in the code.
-------------------------------------------------------------------------------
VERSION 1.7.6
Added UZIP images support.
Added another try to mount device in read only mode.
Added optional ada(4) disks support.
Added optional md(4) devices support.
Added automatic kernel modules loading.
-------------------------------------------------------------------------------
VERSION 1.7.5
Add REMOVEDIRS option as default.
Add NICENAMES option to use labels instead of device names.
Use procstat(1) for faster DISPLAY environemnt searching.
-------------------------------------------------------------------------------
VERSION 1.7.4
Add new logo.
-------------------------------------------------------------------------------
VERSION 1.7.3
Use 755 permissions for FAT mounts.
-------------------------------------------------------------------------------
VERSION 1.7.2
Phase out support for sysutils/fusefs-ext4fuse port.
Fix UMASK for exFAT filesystems.
Fix ISO9660 mount options.
-------------------------------------------------------------------------------
VERSION 1.7.1
Fix exFAT mount rights.
Use USER option in config file.
Make MTP detection and mount better.
-------------------------------------------------------------------------------
VERSION 1.7.0
The automount has now a new co-author - Rozhuk Ivan.
New options available in automount.conf config file.
Filesystem detection/mounting reworked totally with file(1)/dd(1)/fstyp(8) as backends.
Notifications are now possible with libnotify.
Automatic detection of DISPLAY variable.
New automatic wait for device appearance.
New detection if device is a block device.
Introduction of CD-ROM support.
Automatic detection of File Manager with exo-open(1).
Option REMOVEDIRS is deprecated now.
Handle '-o large' option for FAT under FreeBSD 11.x and 12.x versions.
-------------------------------------------------------------------------------
VERSION 1.6.1
Fix MBR/msdosfs partition unmount issue.
-------------------------------------------------------------------------------
VERSION 1.6.0
Fix long boot with devd(8) because of ugen(4) devices.
Add fsck.exfat to the exFAT filesystem.
Set fsck.ext2 instead of e2fsck to the ext2 filesystem.
Set fsck.ext3 instead of e2fsck to the ext3 filesystem.
Set fsck.ext4 instead of e2fsck to the ext4 filesystem.
-------------------------------------------------------------------------------
VERSION 1.5.9
Decrease DELAY for sleep from '1' to '0.1' for faster mounting.
Remove __random_wait() at 'attach'.
Implement MTP mounting.
Added XFS and HFS support.
Various fixes and cleanups.
Remove '-o large' option for FAT (not supported on FreeBSD 12).
-------------------------------------------------------------------------------
VERSION 1.5.8
Omit GVFS filesystem in the mount(8) listing.
Improve exFAT mount options.
Add mount_msdosfs(8) fallback fix.
Set caja as file manager in example config.
Add version argument.
-------------------------------------------------------------------------------
VERSION 1.5.7
Fix FAT32 mount.
Add extended options for EXFAT mounts.
Add -version option.
-------------------------------------------------------------------------------
VERSION 1.5.6
Implement --version option.
-------------------------------------------------------------------------------
VERSION 1.5.5
Rework NTFS/MSDOS/FAT detection.
Check for NTFS before FAT.
-------------------------------------------------------------------------------
VERSION 1.5.4
Added notification via notify-send/libnotify and wall(1). Minor bug fix.
Change 'boot sector' detection.
-------------------------------------------------------------------------------
VERSION 1.5.3
Fix small harmless bug - variable WAIT without default value.
-------------------------------------------------------------------------------
VERSION 1.5.2
Introduce smarter fstype() function to better determine filesystem.
-------------------------------------------------------------------------------
VERSION 1.5.1
Add -k flag to file(1) command.
Set new --version and date(1).
-------------------------------------------------------------------------------
VERSION 1.5.0
Add new NTFS options.
Add nested NTFS mount attempt.
Fix devd(8) config.
Improve log messages.
Use random wait only on ATTACH action, not needed on DETACH action.
Implement random wait to eliminate race.
Implement BOOTDELAY option to wait for boot process to complete.
Fix devd(8) config (LARKIND) to match all needed devices and their partitions.
Fix typo in NTFS error message.
-------------------------------------------------------------------------------
VERSION 1.4.3
Only style(9) changes.
Force longnames option for msdosfs.
Remove -u option for debug.
Fix a bug when ATIME is enabled.
Add -o remove_hiberfile to NTFS-3G mount options.
Fix typo at /var/log/automount.log error message.
Use /sbin/e2fsck from FreeBSD base system.
Fix typo at /var/log/automount.log error message.
Force longnames option for msdosfs.
-------------------------------------------------------------------------------
VERSION 1.4.2
Implement active sleep/wait for devices that could not appear.
Add more useful information to /var/log/automount.log file.
Implement BLACKLIST option to ignore problematic devices.
-------------------------------------------------------------------------------
VERSION 1.4.1
Improved checking for already mounted devices.
More readable log format.
Added logging of fsck(8) output.
Added adding setuid also to /sbin/mount* when USERUMOUNT set to YES.
Added error logging of failed mounts.
-------------------------------------------------------------------------------
VERSION 1.4.0
Wait for smartphone to attach device, rewrite all &&-|| into if-then-else-fi syntax.
-------------------------------------------------------------------------------
@ -37,18 +308,19 @@ Added the --help page.
Removed some small bugs.
Added more options to configure features.
% automount --help
% /usr/local/sbin/automount --help
AUTOMOUNT is a devd(8) based automounter for FreeBSD.
It supports following file systems:
UFS/FAT/exFAT/NTFS/EXT2/EXT3/EXT4
UFS/FAT/exFAT/NTFS/EXT2/EXT3/EXT4/MTP/HFS/ISO9660
It needs these ports to mount NTFS/exFAT/EXT4 respectively:
Add these to mount NTFS/exFAT/EXT4/HFS/XFS/MTP respectively:
o sysutils/fusefs-ntfs
o sysutils/fusefs-exfat
o sysutils/fusefs-ext4fuse
o sysutils/fusefs-hfsfuse
o sysutils/fusefs-lkl
o sysutils/fusefs-simple-mtpfs
By default it mounts/unmounts all removable media but
it is possible to set some additional options at the
@ -56,26 +328,86 @@ it is possible to set some additional options at the
Below is a list of possible options with description.
MNTPREFIX (set to /media by default)
MNT_PREFIX (set to /media by default)
With this options You can alter the default root
for mounting the removable media, for example to
the /mnt directory.
example: MNTPREFIX="/media"
example: MNT_PREFIX='/media'
ENCODING (set to en_US.ISO8859-1 by default)
MNT_GROUP (wheel by default)
If set to some group name, the mount command will
chown(1) the mount directory with the group.
example: group='operator'
MNT_MODE (set to 775 by default)
Value for chmod on mount point.
FAT_ENCODING (set to en_US.UTF-8 by default)
Only used with FAT32 mounts, specifies which
encoding to use at the mount.
example: ENCODING="pl_PL.ISO8859-2"
example: FAT_ENCODING='en_US.ISO8859-1'
CODEPAGE (set to cp437 by default)
FAT_CODEPAGE (set to CP866 by default)
Only used with FAT32 mounts, specifies which
code page to use at the mount.
example: CODEPAGE="cp852"
example: FAT_CODEPAGE='cp437'
USER (unset by default)
ISO9660_CODEPAGE (set to UTF-8 by default)
Only used with cd9660 mounts, specifies which
code page to use at the mount.
ATIME (set to NO by default)
When set to NO it will mount filesystems with
noatime option when possible.
example: ATIME='YES'
RETRY_COUNT (set to 3 by default)
How many times try to get file system type or try to mount.
example: RETRY_COUNT='1'
RETRY_DELAY (set to 1 second by default)
Delay beetwin retry attempt.
example: RETRY_DELAY='2.5'
USERUMOUNT (set to NO by default)
When set to YES it will 'chmod +s /sbin/umount'
which would allow an USER to unmount the file
system with their selected file manager.
example: USERUMOUNT='YES'
NOTIFY (set to NO by default)
Use 'notify-send' and 'libnotify' to show notifications
of mounting and unmounting devices on the desktop.
example: NOTIFY='YES'
WALL (set to NO by default)
Use wall(1) to show notifications of mounting and
unmounting devices on terminals of logged in users.
example: WALL='YES'
FM ('exo-open --launch FileManager' by default)
If set to file manager command, the mount will
launch the specified command after successful
mount. Works only if USER parameter is also set.
example: FM='nautilus --browser --no-desktop'
BLACKLIST (unset by default)
The automount will ignore devices defined here.
example: BLACKLIST='da0 da3s1a'
USER (root by default)
If set to some username, the mount command will
chown(1) the mount directory with the user and
its primary user group. If used with FM option
@ -84,32 +416,6 @@ USER (unset by default)
example: USER="vermaden"
FM (unset by default)
If set to file manager command, the mount will
launch the specified command after successful
mount. Works only if USER parameter is also set.
example: FM="nautilus --browser --no-desktop"
USERUMOUNT (set to NO by default)
When set to YES it will 'chmod +s /sbin/umount'
which would allow an USER to unmount the file
system with their selected file manager.
example: USERUMOUNT="YES"
ATIME (set to YES by default)
When set to NO it will mount filesystems with
noatime options when possible.
example: ATIME="NO"
REMOVEDIRS (set to NO by default)
When set to YES it will remove empty directories
under the used after device detach.
example: REMOVEDIRS="YES"
-------------------------------------------------------------------------------
VERSION 1.2
@ -183,6 +489,11 @@ The only additional configuration it requires is to add these lines as
Remember to restart /etc/rc.d/devd daemon after adding
/usr/local/etc/devd/automount_devd.conf file.
------------------------------------------------------------------------------
Have Fun ;)
vermaden

842
automount
View File

@ -1,6 +1,7 @@
#! /bin/sh
#!/bin/sh
# Copyright (c) 2012 Slawomir Wojciech Wojtczak (vermaden)
# Copyright (c) 2012-2024 Slawomir Wojciech Wojtczak <vermaden@interia.pl>
# Copyright (c) 2019 Rozhuk Ivan <rozhuk.im@gmail.com>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@ -29,12 +30,14 @@ __usage() {
AUTOMOUNT is a devd(8) based automounter for FreeBSD.
It supports following file systems:
UFS/FAT/exFAT/NTFS/EXT2/EXT3/EXT4
UFS/FAT/exFAT/NTFS/EXT2/EXT3/EXT4/MTP/HFS/ISO9660
It needs these ports to mount NTFS/exFAT/EXT4 respectively:
Add these to mount NTFS/exFAT/EXT4/HFS/XFS/MTP respectively:
o sysutils/fusefs-ntfs
o sysutils/fusefs-exfat
o sysutils/fusefs-ext4fuse
o sysutils/fusefs-hfsfuse
o sysutils/fusefs-lkl
o sysutils/fusefs-simple-mtpfs
By default it mounts/unmounts all removable media but
it is possible to set some additional options at the
@ -42,26 +45,95 @@ it is possible to set some additional options at the
Below is a list of possible options with description.
MNTPREFIX (set to /media by default)
MNT_PREFIX (set to /media by default)
With this options You can alter the default root
for mounting the removable media, for example to
the /mnt directory.
example: MNTPREFIX="/media"
example: MNT_PREFIX='/media'
ENCODING (set to en_US.ISO8859-1 by default)
MNT_GROUP (wheel by default)
If set to some group name, the mount command will
chown(1) the mount directory with the group.
example: group='operator'
MNT_MODE (set to 775 by default)
Value for chmod on mount point.
FAT_ENCODING (set to en_US.UTF-8 by default)
Only used with FAT32 mounts, specifies which
encoding to use at the mount.
example: ENCODING="pl_PL.ISO8859-2"
example: FAT_ENCODING='en_US.ISO8859-1'
CODEPAGE (set to cp437 by default)
FAT_CODEPAGE (set to CP866 by default)
Only used with FAT32 mounts, specifies which
code page to use at the mount.
example: CODEPAGE="cp852"
example: FAT_CODEPAGE='cp437'
USER (unset by default)
ISO9660_CODEPAGE (set to UTF-8 by default)
Only used with cd9660 mounts, specifies which
code page to use at the mount.
ATIME (set to NO by default)
When set to NO it will mount filesystems with
noatime option when possible.
example: ATIME='YES'
RETRY_COUNT (set to 3 by default)
How many times try to get file system type or try to mount.
example: RETRY_COUNT='1'
RETRY_DELAY (set to 1 second by default)
Delay beetwin retry attempt.
example: RETRY_DELAY='2.5'
USERUMOUNT (set to NO by default)
When set to YES it will 'chmod +s /sbin/umount'
which would allow an USER to unmount the file
system with their selected file manager.
example: USERUMOUNT='YES'
NOTIFY (set to NO by default)
Use 'notify-send' and 'libnotify' to show notifications
of mounting and unmounting devices on the desktop.
example: NOTIFY='YES'
WALL (set to NO by default)
Use wall(1) to show notifications of mounting and
unmounting devices on terminals of logged in users.
example: WALL='YES'
FM ('exo-open --launch FileManager' by default)
If set to file manager command, the mount will
launch the specified command after successful
mount. Works only if USER parameter is also set.
example: FM='nautilus --browser --no-desktop'
BLACKLIST (unset by default)
The automount will ignore devices defined here.
example: BLACKLIST='da0 da3s1a'
BLACKLIST_REGEX (unset by default)
The boolean flag option complements the above BLACKLIST option
if one wants regex match instead of exact match for ignoring devices.
Below will ignore all partitions ada0p1/ada0p2/... of ada0 device.
example: BLACKLIST='ada0'
BLACKLIST_REGEX=true
USER (root by default)
If set to some username, the mount command will
chown(1) the mount directory with the user and
its primary user group. If used with FM option
@ -70,294 +142,638 @@ USER (unset by default)
example: USER="vermaden"
FM (unset by default)
If set to file manager command, the mount will
launch the specified command after successful
mount. Works only if USER parameter is also set.
REMOVEDIRS (set to YES by default)
If set to YES the automount(8) will remove /media dir after unmount.
example: FM="nautilus --browser --no-desktop"
example: REMOVEDIRS=NO
USERUMOUNT (set to NO by default)
When set to YES it will 'chmod +s /sbin/umount'
which would allow an USER to unmount the file
system with their selected file manager.
NICENAMES (set to NO by default)
If set to YES the device/filesystem label will be used for /media dir name.
example: USERUMOUNT="YES"
example: NICENAMES=YES
ATIME (set to YES by default)
When set to NO it will mount filesystems with
noatime options when possible.
IGNORE_SYS_PARTS (set to NO by default)
If set to YES automount(8) will ignore system partitions like EFI or MSR.
example: ATIME="NO"
REMOVEDIRS (set to NO by default)
When set to YES it will remove empty directories
under the used ${MNTPREFIX} after device detach.
example: REMOVEDIRS="YES"
example: IGNORE_SYS_PARTS=YES
EOF
exit 0
}
if [ "${1}" = "-h" -o "${1}" = "--help" -o ${#} -eq 0 -o ${#} -eq 1 ]
# display version if needed
if [ "${1}" = '--version' -o \
"${1}" = '-version' -o \
"${1}" = 'version' -o \
"${1}" = '-v' ]
then
echo
echo " ___ /\ ___ "
echo " __/ /_ / \ _\ \__ "
echo " ____ _____/_ __/__ / _/\ ___ ___ ____ ______ __\__ _\ "
echo " / \ / / // // \ /\_/ \ / / \ / \\\ \ \ / \\\ \ "
echo " / / // / // // / // \\\ \ \ \\\ \ \\\ \ \\\ \ \\\ \_ "
echo " \_____\\\____/ \__\\\____//__________\\\__\__\__\\\____/ \_____\\\__\__\\\___\ "
echo
echo "automount 1.8.0 2024/03/05"
exit 0
fi
# display help if needed
if [ "${1}" = "-h" -o \
"${1}" = "--h" -o \
"${1}" = "-help" -o \
"${1}" = "--help" -o \
"${#}" -eq "0" -o \
"${#}" -eq "1" ]
then
__usage
fi
if [ -f /usr/local/etc/automount.conf ]
then
# read configuration file
if [ -f /usr/local/etc/automount.conf ] ; then
. /usr/local/etc/automount.conf
fi
: ${MNTPREFIX="/media"} # mount prefix
: ${LOG="/var/log/automount.log"} # log file
# default values for global variables
: ${MNT_PREFIX='/media'} # mount prefix
: ${MNT_GROUP='wheel'} # use WHEEL group for popup
: ${MNT_MODE='775'} # mount point mode
: ${FAT_ENCODING='en_US.UTF-8'} # US/Canada
: ${FAT_CODEPAGE='cp437'} # US/Canada
: ${ISO9660_CODEPAGE='UTF-8'} # UTF-8
: ${ATIME='NO'} # when NO mount with noatime
: ${RETRY_COUNT='5'} # retry count
: ${RETRY_DELAY='2'} # retry delay time
: ${USERUMOUNT='NO'} # when YES add suid bit to umount(8)
: ${NOTIFY='NO'} # use notify-send(1) (devel/libnotify)
: ${WALL='NO'} # use wall(1)
: ${FM='exo-open --launch FileManager'} # which file manager to use
: ${LOG_FILE='/var/log/automount.log'} # log file
: ${LOG_DATEFMT='%Y-%m-%d %H:%M:%S'} # 2012-02-20 07:49:09
: ${STATE="/var/run/automount.state"} # current state file
: ${ENCODING="en_US.ISO8859-1"} # US/Canada
: ${CODEPAGE="cp437"} # US/Canada
: ${DATEFMT="%Y-%m-%d %H:%M:%S"} # 2012-02-20 07:49:09
: ${USERUMOUNT="NO"} # when YES add suid bit to umount(8)
: ${ATIME="YES"} # when NO mount with noatime
: ${REMOVEDIRS="NO"} # remove empty dirs under ${MNTPREFIX}
: ${USER="0"} # which user to use for popup
: ${FM="0"} # which file manager to use
: ${USER="root"} # which user to use for popup
: ${REMOVEDIRS='YES'} # remove /media dir after unmount
: ${NICENAMES='NO'} # use device label for /media dir name
: ${IGNORE_SYS_PARTS='NO'} # ignore system partitions like EFI or MSR
if [ "${USERUMOUNT}" = YES ]
# init of main variables
DEV="/dev/${1}"
UID=$( id -u ${USER} )
GID=$( pw group show -n ${MNT_GROUP} | awk -F':' '{print $3}' )
if [ ${?} -ne 0 ]
then
chmod u+s /sbin/umount 1> /dev/null 2> /dev/null # WHEEL group member
chmod u+s /sbin/mount* 1> /dev/null 2> /dev/null # WHEEL group member
sysctl vfs.usermount=1 1> /dev/null 2> /dev/null # allow USER to mount
__log "${MNT_GROUP}: invalid group"
exit 1
fi
__create_mount_point() { # 1=DEV
mkdir -p ${MNT}
if [ "${USER}" != 0 ]
then
chown ${USER}:$( id -g -n ${USER} ) ${MNT}
fi
# process ${USERUMOUNT} option
case ${USERUMOUNT} in
([Yy][Ee][Ss])
chmod u+s /sbin/umount 1> /dev/null 2>&1 # WHEEL group member
chmod u+s /sbin/mount* 1> /dev/null 2>&1 # WHEEL group member
sysctl -q vfs.usermount=1 1> /dev/null 2>&1 # allow user to mount
;;
esac
# read only filesystem types for __guess_fs_type() function
readonly FS_TYPE_UNKNOWN=0
readonly FS_TYPE_ISO9660=1
readonly FS_TYPE_UFS=8
readonly FS_TYPE_EXT2=9
readonly FS_TYPE_EXT3=10
readonly FS_TYPE_EXT4=11
readonly FS_TYPE_XFS=12
readonly FS_TYPE_HFS=13
readonly FS_TYPE_FAT=32
readonly FS_TYPE_EXFAT=33
readonly FS_TYPE_NTFS=34
readonly FS_TYPE_MTP=128
# FUNCTION: guess filesystem type from device
__guess_fs_type() { # 1=DEV
# first time guess with file(1) tool
unset FS_TYPE
local FS_TYPE=$( file -r -b -L -s ${1} 2> /dev/null | sed -E 's/label:\ \".*\"//g' )
case ${FS_TYPE} in
(*ISO\ 9660*) return ${FS_TYPE_ISO9660} ;;
(*Unix\ Fast\ File*) return ${FS_TYPE_UFS} ;;
(*ext2*) return ${FS_TYPE_EXT2} ;;
(*ext3*) return ${FS_TYPE_EXT3} ;;
(*ext4*) return ${FS_TYPE_EXT4} ;;
(*SGI\ XFS*) return ${FS_TYPE_XFS} ;;
(*Macintosh\ HFS*) return ${FS_TYPE_HFS} ;;
esac
# second time guess with file(1) tool with -k option
# (do not stop at the first match and keep going)
unset FS_TYPE
local FS_TYPE=$( file -k -r -b -L -s ${1} 2> /dev/null | tr '\n' ' ' | sed -E 's/label:\ \".*\"//g' )
case ${FS_TYPE} in
(*Unix\ Fast\ File*) return ${FS_TYPE_UFS} ;;
(*NTFS*) return ${FS_TYPE_NTFS} ;;
(*ExFAT*) return ${FS_TYPE_EXFAT} ;;
(*\ FAT\ *|*MSDOS*) return ${FS_TYPE_FAT} ;;
esac
# try with fstyp(8) last (exFAT on UFS issue)
unset FS_TYPE
local FS_TYPE=$( fstyp ${1} 2> /dev/null )
case ${FS_TYPE} in
(cd9660) return ${FS_TYPE_ISO9660} ;;
(ufs) return ${FS_TYPE_UFS} ;;
(ext2fs) return ${FS_TYPE_EXT2} ;;
(msdosfs) return ${FS_TYPE_FAT} ;;
(exfat) return ${FS_TYPE_EXFAT} ;;
(ntfs) return ${FS_TYPE_NTFS} ;;
esac
# magic detection code with dd(8)
unset FS_TYPE
local FS_TYPE=$( dd if="${1}" conv=sync count=1 bs=1k 2> /dev/null | strings | head -1 )
case ${FS_TYPE} in
(*EXFAT*) return ${FS_TYPE_EXFAT} ;;
esac
return ${FS_TYPE_UNKNOWN}
}
# FUNCTION: add state to the ${STATE} file
__state_add() { # 1=DEV 2=PROVIDER 3=MNT
if [ -f ${STATE} ]
then
if grep -E "${3}$" ${STATE} 1> /dev/null 2> /dev/null
then
__log "${1}: duplicated '${STATE}'"
exit 0
fi
fi
echo "${1} ${2} ${3}" >> ${STATE}
if [ "${NOTIFY}" = YES ]
then
__show_message "Device '${1}' mounted on '${3}' directory."
fi
if [ "${WALL}" = YES ]
then
echo "automount: Device '${1}' mounted on '${3}' directory." | wall
fi
}
# FUNCTION: remove state from the ${STATE} file
__state_remove() { # 1=MNT
BSMNT=$( echo ${1} | sed 's/\//\\\//g' ) # backslash the slashes ;)
if [ -f ${STATE} ]
then
# backslash the slashes ;)
BSMNT=$( echo ${1} | sed 's/\//\\\//g' )
sed -i '' "/${BSMNT}\$/d" ${STATE}
if [ "${NOTIFY}" = YES ]
then
__show_message "Device '${1}' unmounted from '${3}' directory."
fi
if [ "${WALL}" = YES ]
then
echo "automount: Device '${1}' unmounted from '${3}' directory." | wall
fi
fi
}
# FUNCTION: add message to the ${LOG_FILE} file
__log() { # @=MESSAGE
echo $( date +"${LOG_DATEFMT}" ) "${@}" >> "${LOG_FILE}"
}
# FUNCTION: remove temp mount dir from ${MNT_PREFIX} path (like /media/da0 dir)
__remove_dir() { # 1=TARGET
if [ "${REMOVEDIRS}" = YES ]
then
find "${1}" -type d -empty -maxdepth 1 -exec rm -r {} '+' 2> /dev/null
fi
}
__log() { # @=MESSAGE
echo $( date +"${DATEFMT}" ) "${@}" >> ${LOG}
}
__check_already_mounted() { # 1=(-d|-m) 2=(DEV|MNT)
local MOUNT="$( mount )"
case ${1} in
(-d)
if echo "${MOUNT}" | grep -q "^${2} on "
if [ -d "${1}" ]
then
local MOUNT="$( echo "${MOUNT}" | grep "^${2} on " | cut -d ' ' -f 3-255 | cut -d '(' -f 1 | sed s/.$// )"
__log "${DEV}: -d already mounted on '${MOUNT}' mount point"
exit 0
sleep 1
# find "${1}" -type d -empty -maxdepth 1 -exec rm -r {} '+' 2> /dev/null
find "${MNT_PREFIX}" -depth 1 -empty -prune -delete 2> /dev/null
fi
fi
}
# FUNCTION: display wall(1) and/or notify-send(1) message
__show_message() { # 1=MESSAGE
case ${WALL} in
([Yy][Ee][Ss])
echo "automount: ${1}" | wall
;;
(-m)
esac
case ${NOTIFY} in
([Yy][Ee][Ss])
local __DISPLAY_IDS=$( ps aew | sed -n 's|.*DISPLAY=\([-_a-zA-Z0-9:.]*\).*|\1|p' | sort -u | tr '\n' ' ' )
for __DISPLAY_ID in ${__DISPLAY_IDS}
do
local __USER=$( ps aewj | grep "DISPLAY=${__DISPLAY_ID}" | awk '{print $1;}' | sort -u | tr -cd '[:print:]' )
if [ -z "${__USER}" ]
then
continue
fi
su -l "${__USER}" -c "env DISPLAY=${__DISPLAY_ID} notify-send automount '${1}' &" 1> /dev/null 2>&1
done
;;
esac
}
# FUNCTION: check if device or mountpoint not already mounted
__check_already_mounted() { # 1=DEV 2=MNT
local MOUNT=$( mount )
if echo "${MOUNT}" | grep -q "^${1} on "
then
local MOUNT_POINT=$( echo "${MOUNT}" | grep "^${1} on " | cut -d ' ' -f 3-255 | cut -d '(' -f 1 | sed s/.$// )
__log "${DEV}: already mounted on '${MOUNT_POINT}' mount point"
exit 1
fi
if echo "${MOUNT}" | grep -q " on ${2} "
then
local DEVICE="$( echo "${MOUNT}" | grep " on ${2} " | awk '{print $1}' )"
__log "${DEVICE}: -m already mounted on '${2}' mount point"
exit 0
local DEVICE=$( echo "${MOUNT}" | grep " on ${2} " | awk '{print $1}' )
__log "${DEVICE}: already mounted on '${2}' mount point"
exit 1
fi
;;
esac
}
DEV=/dev/${1}
# FUNCTION: wait for device to appear (sometimes needed)
__wait_for_device() { # 1=DEV
# do not wait for MTP and CD-ROM devices
case ${1} in
(*ugen*|iso9660*)
return
;;
esac
# try to read from device to ensure that it alive
local COUNT=0
while ! dd if="${1}" of=/dev/null conv=sync count=1 bs=8k 1> /dev/null 2>&1
do
if [ ! -e "${1}" ]
then
__log "${1}: device gone"
exit 1
fi
COUNT=$(( ${COUNT} + 1 ))
if [ ${COUNT} -ge ${RETRY_COUNT} ]
then
return
fi
sleep "${RETRY_DELAY}"
__log "${1}: wait for device retry ${COUNT}/${RETRY_COUNT}"
done
}
# FUNCTION: check if device is a block device
__check_block_device() { # 1=DEV
# first check if its block device
if ! fstyp ${1} 1> /dev/null 2>&1
then
__log "${DEV}: not a block device"
exit 0
fi
}
# main ATTACH/DETACH block
case ${2} in
(attach)
ADD=0
MNT="${MNTPREFIX}/${1}"
__check_already_mounted -d ${DEV}
__check_already_mounted -m ${MNT}
if [ "${ATIME}" = NO ]
# check if device still exists
if [ ! -e "${DEV}" ]
then
OPTS="noatime"
fi
while ! head -c 1 ${DEV} 1> /dev/null 2> /dev/null
do
sleep 0.2
done
case $( file -b -L -s ${DEV} | sed -E 's/label:\ \".*\"//g' ) in
(*FAT*) # must be before NTFS section: newfs_msdos -O NTFS -L NTFS
__create_mount_point ${DEV}
fsck_msdosfs -y ${DEV} \
| while read LINE
do
__log "${DEV}: fsck_msdosfs ${LINE}"
done
if mount_msdosfs -o large -D ${CODEPAGE} -L ${ENCODING} \
-m 644 -M 755 ${DEV} ${MNT}
then
ADD=1
else
__log "${DEV}: mount failed (fat) 'mount_msdosfs -o large -D ${CODEPAGE} -L ${ENCODING} -m 644 -M 755 ${DEV} ${MNT}'"
__log "${DEV}: device does not exist"
exit 1
fi
__log "${DEV}: mount (fat)"
__log "${DEV}: attach"
# ignore system partitions like EFI or MSR
if [ "${IGNORE_SYS_PARTS}" = 'YES' ]
then
SYS_DEV=$( echo ${1} | grep -E -o '^[a-z]+[0-9]+' )
SYS_GPART=$( gpart show -p -r ${SYS_DEV} 2> /dev/null | sed 's@=>@@g' | grep " ${1} " | awk '{print $4}' )
case ${SYS_GPART} in
(c12a7328-f81f-11d2-ba4b-00a0c93ec93b) exit 0 ;;
(e3c9e316-0b5c-4db8-817d-f92df00215ae) exit 0 ;;
esac
fi
# code for NICENAMES mounting instead of the /dev/${DEV} default
MNT_CANDIDATE=$( fstyp -l "/dev/${1}" 2> /dev/null | cut -d " " -f 2-99 | tr ' ' '-' )
if [ "${NICENAMES}" = "YES" -a -n "${MNT_CANDIDATE}" ]
then
# check if dir exists
if [ -e "${MNT_PREFIX}/${MNT_CANDIDATE}" ]
then
# check if something is already mounted there and increment if it is
if mount | grep -q " ${MNT_PREFIX}/${MNT_CANDIDATE} "
then
COUNT=1
while true
do
COUNT=$(( ${COUNT} + 1 ))
[ ! -e "${MNT_PREFIX}/${MNT_CANDIDATE}-${COUNT}" ] && break
done
MNT="${MNT_PREFIX}/${MNT_CANDIDATE}-${COUNT}"
else
# dir exists but its not mounted
MNT="${MNT_PREFIX}/${MNT_CANDIDATE}"
fi
else
# dir does not exist
MNT="${MNT_PREFIX}/${MNT_CANDIDATE}"
fi
else
# device/filesystem without label
MNT="${MNT_PREFIX}/${1}"
fi
# blacklist check
if [ -n "${BLACKLIST}" ]
then
for I in ${BLACKLIST}
do
if [ "${1}" = "${I}" ]
then
__log "${DEV}: device blocked by BLACKLIST option"
exit 0
elif [ -n "${BLACKLIST_REGEX}" ] && echo ${DEV} | grep -q "${I}" 1> /dev/null 2> /dev/null
then
__log "${DEV}: device blocked by BLACKLIST_REGEX option"
exit 0
fi
done
fi
# check is device already mounted
__check_already_mounted "${DEV}" "${MNT}"
# make sure that data can be read from device
__wait_for_device "${DEV}"
# load needed kernel modules
kldload fusefs 1> /dev/null 2> /dev/null
kldload geom_uzip 1> /dev/null 2> /dev/null
# detect filesysytem type
case ${1} in
(iso9660*)
FS_TYPE=${FS_TYPE_ISO9660}
;;
(*NTFS*) # must be after FAT section: newfs_msdos -O NTFS -L NTFS
__create_mount_point ${DEV}
if which ntfs-3g 1> /dev/null 2> /dev/null # sysutils/fusefs-ntfs
then
if ntfs-3g -o ${OPTS} ${DEV} ${MNT}
then
ADD=1
else
__log "${DEV}: mount failed (ntfs) 'ntfs-3g -o ${OPTS} ${DEV} ${MNT}'"
exit 1
fi
else
if ! [ "${USER}" = 0 ]
then
OPTS="-u ${USER} -g $( id -g -n ${USER} )"
fi
if mount_ntfs ${OPTS} -o noatime ${DEV} ${MNT}
then
ADD=1
else
__log "${DEV}: mount failed (ntfs) 'ntfs-3g -o ${OPTS} ${DEV} ${MNT}'"
exit 1
fi
fi
__log "${DEV}: mount (ntfs)"
(ugen*)
FS_TYPE=${FS_TYPE_MTP}
;;
(*ext2*)
__create_mount_point ${DEV}
fsck.ext2 -y ${DEV} \
| while read LINE
do
__log "${DEV}: fsck.ext2 ${LINE}"
done
if mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}
then
ADD=1
else
__log "${DEV}: mount failed (ext2) 'mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}'"
exit 1
fi
__log "${DEV}: mount (ext2)"
(cd*)
__guess_fs_type "${DEV}"
FS_TYPE=${?}
;;
(*ext3*)
__create_mount_point ${DEV}
fsck.ext3 -y ${DEV} \
| while read LINE
do
__log "${DEV}: fsck.ext3 ${LINE}"
done
if mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}
then
ADD=1
else
__log "${DEV}: mount failed (ext3) 'mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}'"
exit 1
fi
__log "${DEV}: mount (ext3)"
(md*.uzip|md*|ada*|da*|mmcsd*)
__check_block_device "${DEV}"
__guess_fs_type "${DEV}"
FS_TYPE=${?}
;;
(*ext4*)
__create_mount_point ${DEV}
fsck.ext4 -y ${DEV} \
| while read LINE
do
__log "${DEV}: fsck.ext4 ${LINE}"
done
if ext4fuse ${DEV} ${MNT} # sysutils/fusefs-ext4fuse
then
ADD=1
else
__log "${DEV}: mount failed (ext4) 'ext4fuse ${DEV} ${MNT}'"
exit 1
fi
__log "${DEV}: mount (ext4)"
esac
# process ATIME option
case ${ATIME} in
([Nn][Oo]) OPTS="-o noatime" ;;
esac
# filesystem options abstraction layer
case ${FS_TYPE} in
(${FS_TYPE_ISO9660})
FS_CHECK_CMD=''
FS_CHECK_ARGS=''
FS_MOUNT_CMD='mount'
FS_MOUNT_ARGS="-t cd9660 -o -e,-C=${ISO9660_CODEPAGE} ${DEV} ${MNT}"
;;
(*Unix\ Fast\ File*)
__create_mount_point ${DEV}
fsck_ufs -C -y ${DEV} \
| while read LINE
do
__log "${DEV}: fsck_ufs ${LINE}"
done
if mount -t ufs -o ${OPTS} ${DEV} ${MNT}
(${FS_TYPE_UFS})
FS_CHECK_CMD='fsck_ufs'
FS_CHECK_ARGS="-C -y"
FS_MOUNT_CMD='mount'
FS_MOUNT_ARGS="-t ufs ${OPTS} ${DEV} ${MNT}"
;;
(${FS_TYPE_EXT2})
FS_CHECK_PORT='sysutils/e2fsprogs'
FS_CHECK_CMD='fsck.ext2'
FS_CHECK_ARGS="-y"
FS_MOUNT_PORT='sysutils/fusefs-lkl'
FS_MOUNT_CMD='lklfuse'
FS_MOUNT_ARGS="-o type=ext2 -o allow_other -o intr -o uid=${UID} -o gid=${GID} -o umask=002 ${DEV} ${MNT}"
;;
(${FS_TYPE_EXT3})
FS_CHECK_PORT='sysutils/e2fsprogs'
FS_CHECK_CMD='fsck.ext3'
FS_CHECK_ARGS="-y"
FS_MOUNT_PORT='sysutils/fusefs-lkl'
FS_MOUNT_CMD='lklfuse'
FS_MOUNT_ARGS="-o type=ext3 -o allow_other -o intr -o uid=${UID} -o gid=${GID} -o umask=002 ${DEV} ${MNT}"
;;
(${FS_TYPE_EXT4})
FS_CHECK_PORT='sysutils/e2fsprogs'
FS_CHECK_CMD='fsck.ext4'
FS_CHECK_ARGS="-y"
FS_MOUNT_PORT='sysutils/fusefs-lkl'
FS_MOUNT_CMD='lklfuse'
FS_MOUNT_ARGS="-o type=ext4 -o allow_other -o intr -o uid=${UID} -o gid=${GID} -o umask=002 ${DEV} ${MNT}"
;;
(${FS_TYPE_XFS})
FS_CHECK_PORT='sysutils/xfsprogs'
FS_CHECK_CMD='xfs_repair'
FS_CHECK_ARGS="-d"
FS_MOUNT_CMD='lklfuse'
FS_MOUNT_ARGS="-o type=xfs -o allow_other -o uid=${UID} -o gid=${GID} ${DEV} ${MNT}"
FS_MOUNT_PORT='sysutils/fusefs-lkl'
;;
(${FS_TYPE_HFS})
FS_CHECK_CMD=''
FS_CHECK_ARGS=''
FS_MOUNT_CMD='hfsfuse'
FS_MOUNT_ARGS="--force ${OPTS} ${DEV} ${MNT}"
FS_MOUNT_PORT='sysutils/fusefs-hfsfuse'
;;
(${FS_TYPE_FAT})
# FreeBSD 12.x and later does not support/need '-o large' option
case $( sysctl -n kern.osrelease ) in
(10*) LARGE="-o large" ;;
(11*) LARGE="-o large" ;;
(*) LARGE="" ;;
esac
FS_CHECK_CMD='fsck_msdosfs'
FS_CHECK_ARGS="-C -y"
FS_MOUNT_CMD='mount_msdosfs'
FS_MOUNT_ARGS="-o longnames -m ${MNT_MODE} -M ${MNT_MODE} -D ${FAT_CODEPAGE} -L ${FAT_ENCODING} -u ${UID} -g ${GID} ${OPTS} ${LARGE} ${DEV} ${MNT}"
;;
(${FS_TYPE_EXFAT})
FS_CHECK_PORT='sysutils/exfat-utils'
FS_CHECK_CMD='fsck.exfat'
FS_CHECK_ARGS="-y"
FS_MOUNT_CMD='mount.exfat'
FS_MOUNT_UMASK=$( printf "%03o" $((~0775&0777)) )
FS_MOUNT_ARGS="-o uid=${UID} -o gid=${GID} -o umask=${FS_MOUNT_UMASK} ${OPTS} ${DEV} ${MNT}"
FS_MOUNT_PORT='sysutils/fusefs-exfat'
;;
(${FS_TYPE_NTFS})
FS_CHECK_CMD=''
FS_CHECK_ARGS=''
if /usr/bin/which -s ntfs-3g
then
ADD=1
FS_MOUNT_CMD='ntfs-3g'
FS_MOUNT_ARGS="-o recover ${OPTS} ${DEV} ${MNT}"
FS_MOUNT_PORT='sysutils/fusefs-ntfs'
else
__log "${DEV}: mount failed (ufs) 'mount -t ufs -o ${OPTS} ${DEV} ${MNT}'"
FS_MOUNT_CMD='mount_ntfs'
FS_MOUNT_ARGS="-u root -g ${MNT_GROUP} ${OPTS} ${DEV} ${MNT}"
fi
;;
(${FS_TYPE_MTP})
FS_PORT='sysutils/fusefs-simple-mtpfs'
FS_CHECK_CMD=''
FS_CHECK_ARGS=''
FS_MOUNT_CMD='simple-mtpfs'
if ! /usr/bin/which -s "${FS_MOUNT_CMD}"
then
__log "command '${FS_MOUNT_CMD}' not found"
exit 1
fi
__log "${DEV}: mount (ufs)"
PHONEDEV=$( simple-mtpfs --list-devices -d ${DEV} 2> /dev/null )
if [ "${PHONEDEV}" = "No raw devices found." ]
then
__log "${DEV}: no raw devices found"
exit 0
fi
PHONEDEV=$( echo "${PHONEDEV}" | awk '{print $1}' | tr -d ':' )
if [ ! ${PHONEDEV} ]
then
__log "${DEV}: no MTP devices found"
exit 0
fi
FS_MOUNT_ARGS="--device ${PHONEDEV} ${MNT} -o allow_other -o uid=${UID} -o gid=${GID}"
;;
(*)
case $( dd < ${DEV} count=1 2> /dev/null | strings | head -1 ) in
(*EXFAT*)
__create_mount_point ${DEV}
if mount.exfat -o ${OPTS} ${DEV} ${MNT} # sysutils/fusefs-exfat
__log "${DEV}: filesystem not supported or no filesystem"
exit 0
;;
esac
# create mount point
mkdir -m "${MNT_MODE}" -p "${MNT}"
__log "${DEV}: create '${MNT}' dir"
# check file system before mount
if [ -n "${FS_CHECK_CMD}" ]
then
ADD=1
else
__log "${DEV}: mount failed (exfat) 'mount.exfat -o ${OPTS} ${DEV} ${MNT}'"
if ! /usr/bin/which -s "${FS_CHECK_CMD}"
then
__log "command '${FS_CHECK_CMD}' not found"
__log "please install '${FS_CHECK_PORT}' port or package"
exit 1
fi
__log "${DEV}: mount (exfat)"
;;
esac
;;
esac
if [ ${ADD} -eq 1 ]
${FS_CHECK_CMD} ${FS_CHECK_ARGS} ${DEV} \
| while read LINE
do
__log "${DEV}: ${FS_CHECK_CMD} ${LINE}"
done
fi
# check is device already mounted
__check_already_mounted "${DEV}" "${MNT}"
# try to mount
if ! /usr/bin/which -s "${FS_MOUNT_CMD}"
then
ADD=0
__log "command '${FS_MOUNT_CMD}' not found"
__log "please install '${FS_MOUNT_PORT}' port or package"
exit 1
fi
__wait_for_device "${DEV}"
# execute appropriate mount(8) command
COUNT=0
while ! ${FS_MOUNT_CMD} ${FS_MOUNT_ARGS} 2> /dev/null
do
if [ ! -e "${DEV}" ]
then
__log "${DEV}: device gone"
exit 1
fi
COUNT=$(( ${COUNT} + 1 ))
if [ ${COUNT} -gt ${RETRY_COUNT} ]
then
# BEGIN | try to mount read only
FS_MOUNT_ARGS="-o ro ${FS_MOUNT_ARGS}"
${FS_MOUNT_CMD} ${FS_MOUNT_ARGS}
if [ ${?} -eq 0 ]
then
__log "${DEV}: mount OK: '${FS_MOUNT_CMD} ${FS_MOUNT_ARGS}'"
break
fi
# END | try to mount read only
__log "${DEV}: mount FAIL: '${FS_MOUNT_CMD} ${FS_MOUNT_ARGS}'"
exit 1
fi
sleep "${RETRY_DELAY}"
__log "${DEV}: filesystem mount retry: ${COUNT}/${RETRY_COUNT}"
done
__log "${DEV}: mount OK: '${FS_MOUNT_CMD} ${FS_MOUNT_ARGS}'"
# add needed rights
chown "${USER}:${MNT_GROUP}" "${MNT}"
__log "${DEV}: chown '${MNT}' dir with '${USER}:${MNT_GROUP}' rights"
# add state
PROVIDER=$( mount | grep -m 1 " ${MNT} " | awk '{printf $1}' )
__state_add ${DEV} ${PROVIDER} ${MNT}
if [ "${USER}" != 0 -a "${FM}" != 0 ]
# open file manager and display message
__show_message "Device '${DEV}' mounted on '${MNT}' directory."
if [ -n "${FM}" ]
then
# su - ${USER} -c "env DISPLAY=:0 ${FM} ${MNT} &"
su - ${USER} -c "env DISPLAY=:0 ${FM} &"
fi
GROUP_USERS=$( pw group show ${MNT_GROUP} | sed -e 's|.*:||' -e 's|,| |g' )
for I in ${GROUP_USERS}
do
[ "${I}" = "root" ] && continue
XORG_PID=$( pgrep Xorg )
[ "${XORG_PID}" = "" ] && continue
DISPLAY_ID=$( procstat pargs ${XORG_PID} | grep "^argv\[1\]:" | awk '{print $NF}' )
[ -z "${DISPLAY_ID}" ] && continue
__log "${DEV}: starting '${FM}' file manager"
su -l "${I}" -c "env DISPLAY=${DISPLAY_ID} ${FM} ${MNT} &" 1> /dev/null 2>&1
done
fi
;;
(detach)
grep -E "${MNTPREFIX}/${1}$" ${STATE} \
__log "${DEV}: detach"
if [ -f ${STATE} ]
then
grep -E "^/dev/${1} " ${STATE} \
| while read DEV PROVIDER MNT
do
TARGET=$( mount | grep -E "^${PROVIDER} " | awk '{print $3}' )
TARGET=$( mount | grep -v \.gvfs | grep -m 1 -E "^${PROVIDER} " | awk '{print $3}' )
__state_remove ${MNT}
if [ -z ${TARGET} ]
then
continue
fi
( # put entire umount/find/rm block into background
umount -f ${TARGET}
__remove_dir "${TARGET}"
__log "${DEV}: removed '${TARGET}'"
# umount(8) two times to make sure its unmounted
umount -f "${TARGET}" 1> /dev/null 2>&1
umount -f "${TARGET}" 1> /dev/null 2>&1
__log "${DEV}: (state) umount '${TARGET}'"
__remove_dir "${TARGET}" &
__log "${DEV}: (state) mount point '${TARGET}' removed"
) &
unset TARGET
__log "${DEV}: umount"
done
__log "${DEV}: detach"
__remove_dir "${MNTPREFIX}/${1}"
__log "${DEV}: mount point '${MNTPREFIX}/${1}' removed"
# code for NICENAMES mounting instead of the /dev/${DEV} default
if [ "${NICENAMES}" != YES ]
then
# umount(8) two times to make sure its unmounted
umount -f "${MNT_PREFIX}/${1}" 1> /dev/null 2>&1
umount -f "${MNT_PREFIX}/${1}" 1> /dev/null 2>&1
__log "${DEV}: (direct) umount '${MNT_PREFIX}/${1}'"
__remove_dir "${MNT_PREFIX}/${1}" &
__log "${DEV}: (direct) mount point '${MNT_PREFIX}/${1}' removed"
fi
__show_message "Device '${DEV}' unmounted from '${MNT}' directory."
fi
;;
esac

Binary file not shown.

BIN
automount-1.7.9.tar.gz Normal file

Binary file not shown.

View File

@ -1,7 +1,3 @@
USERUMOUNT=YES
ATIME=NO
REMOVEDIRS=YES
FM="nautilus --browser --no-desktop"
USER=vermaden
ENCODING=pl_PL.ISO8859-2
CODEPAGE=cp852

View File

@ -1,14 +1,45 @@
# PENDRIVE/PHONE/SDCARD insert
notify 100 {
match "system" "DEVFS";
match "type" "CREATE";
match "cdev" "(da|mmcsd)[0-9]+";
action "/usr/local/sbin/automount $cdev attach";
match "cdev" "(da|mmcsd|ugen)[0-9]+.*";
action "/usr/local/sbin/automount $cdev attach &";
};
# PENDRIVE/PHONE/SDCARD remove
notify 100 {
match "system" "DEVFS";
match "type" "DESTROY";
match "cdev" "(da|mmcsd)[0-9]+";
action "/usr/local/sbin/automount $cdev detach";
match "cdev" "(da|mmcsd|ugen)[0-9]+.*";
action "/usr/local/sbin/automount $cdev detach &";
};
# CD-ROM media inject
notify 100 {
match "system" "DEVFS";
match "type" "CREATE|MEDIACHANGE";
match "cdev" "(cd)[0-9]+.*";
action "/usr/local/sbin/automount $cdev attach &";
};
# CD-ROM media eject
notify 100 {
match "system" "DEVFS";
match "type" "DESTROY";
match "cdev" "(cd)[0-9]+.*";
action "/usr/local/sbin/automount $cdev detach &";
};
# CD-ROM no media
notify 100 {
match "system" "CAM";
match "subsystem" "periph";
match "type" "error";
match "cam_status" "0xcc";
match "scsi_status" "2";
match "scsi_sense" "70 02 3a 02";
match "device" "(cd)[0-9]+.*";
action "/usr/local/sbin/automount $device detach &";
};

View File

@ -1,14 +1,14 @@
notify 200 {
match "system" "DEVFS";
match "type" "CREATE";
match "cdev" "(da|mmcsd)[0-9]+";
action "/usr/local/sbin/automount $cdev attach >> /root/DEBUG.$cdev.attach 2>&1";
match "cdev" "(da|mmcsd)[0-9]+.*";
action "/bin/sh -xe /usr/local/sbin/automount $cdev attach >> /root/DEBUG.$cdev.attach 2>&1";
};
notify 200 {
match "system" "DEVFS";
match "type" "DESTROY";
match "cdev" "(da|mmcsd)[0-9]+";
action "/usr/local/sbin/automount $cdev detach >> /root/DEBUG.$cdev.detach 2>&1";
match "cdev" "(da|mmcsd)[0-9]+.*";
action "/bin/sh -xe /usr/local/sbin/automount $cdev detach >> /root/DEBUG.$cdev.detach 2>&1";
};

View File

@ -0,0 +1,16 @@
# SUPPORT md(4) IMAGES/DISKS attach
notify 100 {
match "system" "DEVFS";
match "type" "CREATE";
match "cdev" "(md)[0-9]+.*";
action "/usr/local/sbin/automount $cdev attach &";
};
# SUPPORT md(4) IMAGES/DISKS detach
notify 100 {
match "system" "DEVFS";
match "type" "DESTROY";
match "cdev" "(md)[0-9]+.*";
action "/usr/local/sbin/automount $cdev detach &";
};

View File

@ -0,0 +1,18 @@
# LOCAL DISKS attach
notify 100 {
match "system" "DEVFS";
match "type" "CREATE";
match "cdev" "(ada)[0-9]+.*";
action "/usr/local/sbin/automount $cdev attach &";
};
# LOCAL DISKS remove
notify 100 {
match "system" "DEVFS";
match "type" "DESTROY";
match "cdev" "(ada)[0-9]+.*";
action "/usr/local/sbin/automount $cdev detach &";
};

View File

@ -1,81 +0,0 @@
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# automount
# automount/pkg-install
# automount/Makefile
# automount/distinfo
# automount/pkg-descr
#
echo c - automount
mkdir -p automount > /dev/null 2>&1
echo x - automount/pkg-install
sed 's/^X//' >automount/pkg-install << '251e9ad33f5651c05228156a36207e92'
X#!/bin/sh
X
Xcase ${2} in
X (POST-INSTALL)
X /etc/rc.d/devd restart
X echo
X echo
X echo "Check /usr/local/sbin/automount --help for available options."
X echo
X echo
X ;;
X (PRE-INSTALL)
X :
X ;;
Xesac
X
251e9ad33f5651c05228156a36207e92
echo x - automount/Makefile
sed 's/^X//' >automount/Makefile << 'a684d750ccdf9f4d6ffa6a1936b8d432'
X# New ports collection Makefile for: automount
X# Date created: 04 March 2012
X# Whom: Slawomir Wojciech Wojtczak <vermaden@interia.pl>
X#
X# $FreeBSD$
X#
X
XPORTNAME= automount
XPORTVERSION= 1.3.1
XCATEGORIES= sysutils
XMASTER_SITES= https://raw.github.com/vermaden/automount/master/
X
XMAINTAINER= vermaden@interia.pl
XCOMMENT= FreeBSD's devd(8) based automount sollution
X
XLICENSE= BSD
X
XPLIST_FILES= sbin/automount etc/devd/automount_devd.conf etc/automount.conf.sample
X
XNO_BUILD= yes
X
Xdo-install:
X ${INSTALL_SCRIPT} ${WRKSRC}/automount ${PREFIX}/sbin
X ${INSTALL_DATA} ${WRKSRC}/automount_devd.conf ${PREFIX}/etc/devd/automount_devd.conf
X ${INSTALL_DATA} ${WRKSRC}/automount.conf.sample ${PREFIX}/etc/automount.conf.sample
X ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
X
X.include <bsd.port.mk>
a684d750ccdf9f4d6ffa6a1936b8d432
echo x - automount/distinfo
sed 's/^X//' >automount/distinfo << 'f9168fc754e2bffcb12d5eb7f25848ec'
XSHA256 (automount-1.3.1.tar.gz) = 1bc38c82b513c03bdd9e1f65edf552e3d1b74a64a90d628bad39a35d07ff0f7d
XSIZE (automount-1.3.1.tar.gz) = 3636
f9168fc754e2bffcb12d5eb7f25848ec
echo x - automount/pkg-descr
sed 's/^X//' >automount/pkg-descr << 'beeed37ba9f50e251d50bf9bd7dcb079'
Xautomount is a devd(8) based automounter for FreeBSD.
X
XIt supports most popular file systems:
XNTFS/MSDOS/exFAT/EXT2/EXT3/EXT4/UFS
X
XWWW: https://github.com/vermaden/automount/
beeed37ba9f50e251d50bf9bd7dcb079
exit

View File

@ -1,28 +0,0 @@
# New ports collection Makefile for: automount
# Date created: 04 March 2012
# Whom: Slawomir Wojciech Wojtczak <vermaden@interia.pl>
#
# $FreeBSD$
#
PORTNAME= automount
PORTVERSION= 1.3.1
CATEGORIES= sysutils
MASTER_SITES= https://raw.github.com/vermaden/automount/master/
MAINTAINER= vermaden@interia.pl
COMMENT= FreeBSD's devd(8) based automount sollution
LICENSE= BSD
PLIST_FILES= sbin/automount etc/devd/automount_devd.conf etc/automount.conf.sample
NO_BUILD= yes
do-install:
${INSTALL_SCRIPT} ${WRKSRC}/automount ${PREFIX}/sbin
${INSTALL_DATA} ${WRKSRC}/automount_devd.conf ${PREFIX}/etc/devd/automount_devd.conf
${INSTALL_DATA} ${WRKSRC}/automount.conf.sample ${PREFIX}/etc/automount.conf.sample
${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
.include <bsd.port.mk>

View File

@ -1,2 +0,0 @@
SHA256 (automount-1.3.1.tar.gz) = 1bc38c82b513c03bdd9e1f65edf552e3d1b74a64a90d628bad39a35d07ff0f7d
SIZE (automount-1.3.1.tar.gz) = 3636

View File

@ -1,6 +0,0 @@
automount is a devd(8) based automounter for FreeBSD.
It supports most popular file systems:
NTFS/MSDOS/exFAT/EXT2/EXT3/EXT4/UFS
WWW: https://github.com/vermaden/automount/

View File

@ -1,16 +0,0 @@
#!/bin/sh
case ${2} in
(POST-INSTALL)
/etc/rc.d/devd restart
echo
echo
echo "Check /usr/local/sbin/automount --help for available options."
echo
echo
;;
(PRE-INSTALL)
:
;;
esac