vermaden / automount

Simple devd(8) based automounter for FreeBSD
66 stars 20 forks source link
                 ___        /\                                ___
              __/  /_      /  \                              _\  \__
 ____   _____/_   __/__   /  _/\   ___ ___   ____ ______   __\__   _\
/    \ /  /  //  //    \ /\_/   \ /   /   \ /    \\  \  \ /    \\  \

/ / // / // // / // \ \ \ \ \ \ \ \ \ \ _ _\__/ \\//__\\_\____/ \\_\\

The 'automount' is a devd(8) based automounter for FreeBSD.

It supports most popular file systems: NTFS/MSDOS/exFAT/EXT2/EXT3/EXT4/UFS/XFS/HFS/MTP/ISO9660


I N S T A L L

Use provided FreeBSD Ports/packages from here:

.. or make manual unstallation:

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 and have fun ;)

These ports/packages are needed for all filesystems:

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.


VERSION 1.3.1

Fixed the 'detach' section (s/PREFIX/MNTPREFIX/g). Fixed removing directories of manually (properly) unmounted filesystems.


VERSION 1.3

Fixed inproper exFAT detection, now mounts fine. Fixed creating mount dirs for attached devices no matter if needed or not. Revised 'detach' section, now removes only directory that is unmounted. Simplified FAT/NTFS sections, removed additional checks as they break some MP3 players automount.


VERSION 1.2.1

Added the --help page. Removed some small bugs. Added more options to configure features.

% /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/MTP/HFS/ISO9660

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 /usr/local/etc/automount.conf config file.

Below is a list of possible options with description.

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: MNT_PREFIX='/media'

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: FAT_ENCODING='en_US.ISO8859-1'

FAT_CODEPAGE (set to CP866 by default) Only used with FAT32 mounts, specifies which code page to use at the mount.

example: FAT_CODEPAGE='cp437'

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 allows to launch the specified file manager after a successful mount.

example: USER="vermaden"


VERSION 1.2

FAT/NTFS detection improvements. The 'chown' now uses sets user's group. MSDOS filesystem is now mounted with -m 644 -M 755 options by default. Removed POPUP=YES option, just use USER + FM for simplicity. NTFS filesystem, when mounted by mount_ntfs(8) uses -u and -g options. Even more simplified 'detach' section.


VERSION 1.1

I removed the state_lock and stat_unlock mechanisms as they appeared to be not needed, I have shufled with 3 drives all the time and the 'integrity' has not been lost, at it was a lot faster, because the lock always had to wait for the 'slowest' drive (in term of initializing the device, like USB hard drive).

I simplified the 'attach' section a lot, now each filesystem contains only check/fsck (if possible), mount and log info.

I also simplified and improved the 'detach' section a little.

I added an option to automatically launch the set-up in config file manager.

These are options that I currently successfully use for NAUTILUS file manager. You need to set-up all three of them to make it work.

| POPUP=YES | FM="nautilus --browser --no-desktop" | USER=vermaden

My whole config looks like that now:

| USERUMOUNT=YES | POPUP=YES | FM="nautilus --browser --no-desktop" | USER=vermaden | ENCODING=pl_PL.ISO8859-2 | CODEPAGE=cp852

All latest updates are available at GITHUB repository: https://github.com/vermaden/automount


VERSION 1.0

AUTOMOUNT is devd(8) based flexible yet very simple automounter for FreeBSD.

Currently it supports these file systems: -- NTFS requires sysutils/fusefs-ntfs for R/W -- FAT/FAT32 -- exFAT requires sysutils/fusefs-exfat -- EXT2 -- EXT3 -- EXT4 requires sysutils/fusefs-ext4fuse -- UFS

It keeps state of the mounted devices at /var/run/automount.state and logs all activities to /var/log/automount.log file.

The place for the script is at /usr/local/sbin/automount.sh executable.

The only additional configuration it requires is to add these lines as /usr/local/etc/devd/automount_devd.conf file, which would allow it to work.

Remember to restart /etc/rc.d/devd daemon after adding /usr/local/etc/devd/automount_devd.conf file.


Have Fun ;) vermaden