Skip to content

Latest commit

 

History

History
327 lines (216 loc) · 16.5 KB

index.md

File metadata and controls

327 lines (216 loc) · 16.5 KB
layout download downloadtitle latest title product product_title product_subtitle product_icon repo meta_title meta_keywords meta_description meta_image build_tabs ogmeta
product
Download v1.5.2
1.5.2
Asepsis is a system utility for prevention of .DS_Store files
asepsis
Asepsis
a smart solution for .DS_Store pollution
/shared/img/icons/asepsis-256.png
Asepsis is a system utility for prevention of .DS_Store files
totalfinder,asepsis,osx,simbl,binaryage,productivity,software,system,utility
Asepsis is a system utility for prevention of .DS_Store files created by Finder and other applications
1
site_name description email type title url image
BinaryAge website
Asepsis is a system utility for prevention of .DS_Store files
product
Asepsis

{% contentfor product-buttons %}

Asepsis was originally
a feature of TotalFinder
.
{% endcontentfor %}

About

Warning: Asepsis is no longer under active development and supported under OS X 10.11 (El Capitan) and later.

Asepsis prevents creation of .DS_Store files. It redirects their creation into a special folder.

Why is .DS_Store a problem?

Well, it is not really a problem for most Mac users because .DS_Store files are normally hidden in Finder.

But I'm a developer and I run Finder with TotalFinder and I have enabled display of hidden files. Also I run a lot of command-line tools via terminal. The problem is that sometimes .DS_Store files get into a way. I hate when my clean new folders get polluted by those small tiny files holding unimportant garbage. I hate when I zip a folder using some unix command and it includes .DS_Store files in the archive. I hate when I visit a network volume and that pollutes its content with those nasty files. To put it simply I don't want my geeky Windows friends to laugh at me because this makes me look incompetent.

That is why I decided to solve this for myself and I'm sharing my solution with other Mac geeks out there to help them protect their egos :-)

Asepsis does .DS_Store redirection. How does it work technically?

Apple implemented a private system framework DesktopServicesPriv which is responsible for creating and manipulating .DS_Store files. This framework is used mainly by Finder, but there are also other system apps which link against it and may use it (yes mdworker I'm looking at you!). DesktopServicesPriv uses standard libc calls to manipulate .DS_Store files.

At core Asepsis provides a dynamic library DesktopServicesPrivWrapper which gets loaded into every process linking against DesktopServicesPriv.framework. It interposes some libc calls used by DesktopServicesPriv to access .DS_Store files. Interposed functions detect paths talking about .DS_Store files and redirect them into a special prefix folder. This seems to be transparent to DesktopServicesPriv.

Additionally Asepsis implements a system-wide daemon asepsisd whose purpose is to monitor system-wide folder renames (or deletes) and mirror those operations in the prefix folder. This is probably the best we can do. This way you don't lose your settings after renaming folders because rename is also executed on folder structure in the prefix directory.

The prefix folder is /usr/local/.dscage

  1. DesktopServicesPrivWrapper - a proxy library for interposing file manipulation calls in DesktopServicesPriv
  2. asepsisd - a system-wide daemon for mirroring folder renames and deletes in the prefix folder
  3. asepsisctl - a command-line utility for controlling Asepsis operation

Installation

To install the software:

  1. Run the installer
  2. Restart your computer

After reboot .DS_Store files are no longer created when you open Finder and browse folders (in case .DS_Store files are not already present there).

Troubleshooting

In Terminal.app run:

asepsisctl diagnose

Updates

Asepsis checks for update after every reboot using Sparkle framework. It also checks its consistencty at that point.

Uninstallation

Just run provided uninstaller from the DMG archive or in Terminal execute:

asepsisctl uninstall
sudo reboot

Alternatively you may use uinstaller which comes with the DMG archive. It launches asepsisctl uninstall for you.

Installing from sources

You may want to review the source code and install it by compiling it from sources. Please follow instructions in GitHub repository.

Control

You may control asepsis operation via asepsisctl

During the installation asepsisctl tool is symlinked into /usr/local/bin, so it should be visible from the command-line.

> asepsisctl --help
The control script for asepsis operations.

Usage:
    asepsisctl [command] [options]

Commands:
    disable                          Disables asepsis.
    enable                           Enables asepsis.
    diagnose                         Diagnoses asepsis setup.

Helper commands:
    neton                            Enables DS_Store files on network volumes.
    netoff                           Disables ... (http://support.apple.com/kb/ht1629).
    migratein [root]                 Migrates .DS_Store files located within [root] into -> /usr/local/.dscage. (Cleanup)
    migrateout [root]                Migrates .DS_Store files originally within [root] back from <- /usr/local/.dscage. (Restore)
    prune                            Removes empty directories from /usr/local/.dscage.
    reset                            Deletes all content from /usr/local/.dscage.

Installation commands:
    install                          Performs reinstallation (using "/Users/darwin/root/asepsis").
    uninstall                        Performs complete uninstallation.
    install_wrapper                  Installs DesktopServicesPriv.framework wrapper.
    uninstall_wrapper                Uninstalls DesktopServicesPriv.framework wrapper.
    remove_symlink                   Removes asepsisctl symlink from /usr/local/bin.
    create_symlink                   Creates asepsisctl symlink in /usr/local/bin.
    make_dscage                      Makes sure /usr/local/.dscage exists with sufficient rights.
    kill_daemon                      Stops asepsis daemon.
    uninstall_daemon                 Uninstalls asepsis daemon.
    install_daemon                   Installs asepsis daemon.
    launch_daemon                    Launches asepsis daemon.
    enable_warnings                  Enables warnings caused by mach_override (vm.shared_region_unnest_logging)
    disable_warnings                 Disables warnings caused by mach_override (vm.shared_region_unnest_logging)
    uninstall_updater                Uninstalls asepsis updater.
    install_updater                  Installs asepsis updater.

Backward compatibility:
    uninstall_dylib                  Removes libAsepsis.dylib from /etc/launchd.conf.
    uninstall_kext                   Removes /System/Library/Asepsis.kext during next boot.

Where options are:
    -r, --root /Users/darwin         Root folder for migration
    -d, --[no-]dry                   Run migration in dry mode
    -v, --[no-]verbose               Be more verbose
    -f, --[no-]force                 Force operation
    -n, --[no-]nosudo                Don't apply sudo
    -p, --[no-]panic                 Panic mode
    -h, --help                       Show this message
    -V, --version                    Print version

Diagnose

Asepsis modifies system files in /System/Library/PrivateFrameworks/DesktopServicesPriv.framework.

As you can guess there is a clear risk that during system update Apple reverts files to the originals. This should be no big deal. Asepsis checks for this at every reboot and reports it. Reinstalling asepsis should patch it back. In the worst case you will notice that you have .DS_Store files creeping back in the house.

To diagnose asepsis run:

asepsisctl diagnose

Here is the script source: https://github.com/binaryage/asepsis/blob/master/ctl/cmd/diagnose.rb

To reinstall DesktopServicesPriv wrapper run:

asepsisctl uninstall_wrapper
asepsisctl install_wrapper

Here is the script source: https://github.com/binaryage/asepsis/blob/master/ctl/cmd/install_wrapper.rb

Under Mavericks some users reported that system restart is required after successfully running install_wrapper. You should do that to be sure all processes link against patched DesktopServicesPriv.

Known issues

  • when copying folders, DS_Store settings are not copied over (daemon is unable to distinguish this class of file operations)

Please report any issues.

FAQ

Sounds scary. Is this safe?

Well uhmmm, use it at your own risk :-) It sounds scary but it should be pretty lightweight solution. You should review the code to understand what it does.

Does it work with OS X 10.11 (El Capitan) ?

No with default configuration, see this page for more info.

Does it work with OS X 10.10 (Yosemite) ?

Yes, use the latest version.

Does it work with OS X 10.9 (Mavericks) ?

Yes, use the latest version.

Does it work with OS X 10.8 (Mountain Lion) ?

Yes, use the latest version.

Does it work with OS X 10.7 (Lion) ?

No. Last version supporting Lion is Asepsis 1.4.1.

Does it work with OS X 10.6 (Snow Leopard) ?

No.

What if .DS_Store file is already present in a folder?

Asepsis will use it. It won't redirect it in this case. This way Asepsis works seamlessly with DMG archives or folders you browse on a network. If you delete the .DS_Store file, next time it will be created in the prefix folder. This is pretty simple approach how to adopt Asepsis incrementally on folder-by-folder basis.

How could I migrate existing .DS_Store files?

Please see asepsisctl migratein command

Are there any processes which don't work well with Asepsis?

Asepsis has white-list of processes known to manipulate with .DS_Store files. Right now it is effective for Finder.app and mdwrite process.

What about using resource forks for hiding .DS_Store files?

Nice idea! This would be probably a more elegant approach but it would work only for HFS+ volumes. I haven't tried to implement it via resource forks. I decided to run with this prefix-folder approach which seemed to me as a more predictable approach. Feel free to fork and experiment.

How can I keep Asepsis up-to-date?

Asepsis is using Sparkle updater. You should be prompted when a new version comes out. Asepsis checks for new version after every reboot.

Does Asepsis install some kernel extension?

Since version 1.3 Asepsis does not use kernel extension anymore.

Panic mode!

My system doesn't boot up. What now?

  1. restart computer into single-user mode
  2. follow instructions on the screen to mount your filesystem for writing (something like /sbin/mount -uw /)
  3. execute /Library/Application\ Support/Asepsis/ctl/asepsisctl uninstall_wrapper --nosudo
  4. reboot

Note: in step 3, the path might be different if you boot from external disk, for example /Volumes/YourStartupVolume/Library/Application\ Support/Asepsis/ctl/asepsisctl

It this didn't work for you for some reason. You have a backup folder with original DesktopServicesPriv.framework version on your disk. Contact me at [email protected] and I will give you special instructions.

SIP

System Integrity Protection

Starting with macOS 10.11 (El Capitan), Asepsis cannot run on a normally configured machine due to System Integrity Protection.

System Integrity Protection (SIP) is a new security feature introduced by Apple. That's good, but unfortunately it prevents Asepsis from altering DesktopServicesPriv framework. This article will tell you how to configure your machine, so that you can use Asepsis. Before you do this, it is important to get informed about what System Integrity Protection is, and what it means to turn it off. Technical details are well covered in SIP review on Ars Technica. Apple also provided some information here.

Do you really depend on Asepsis so much that you want to possibly lower your system security? Frankly, I'm going to stop Asepsis development and won't support Asepsis users anymore under El Capitan and later.

Anyways, if you decide to modify the setting under El Capitan, you will be able to install and run Asepsis as before. Just to be clear...

I'm not encouraging you to turn System Integrity Protection off. Your machine may be less secure with it off. It is entirely your decision.

How to modify System Integrity Protection

You must boot into the Recovery OS. You do this by restarting your machine, and holding COMMAND + R until the Apple logo appears.

Then select Terminal from the Utilities menu. It looks like this:

In the window that opens, type csrutil disable and press return.

This turns off the part of SIP that Asepsis needs to run, and OS X complains that it is an unsupported configuration.

Now type reboot and press return to restart your machine.

After restart create file in your home directory to allow installer to ignore system version checks:

touch ~/.no-asepsis-os-restriction

Then you may install the latest version of Asepsis.

You can find some further information in our blog.

Changelog

<script src="shared/js/changelog.js" type="text/javascript" charset="utf-8"></script>
<script type="text/coffeescript" charset="utf-8"> defer$ -> nonce = -> (Math.random() + "").substring(2) source = "changelog.txt" $.get "#{source}?x=#{nonce()}", (data) -> changelog = parsePlaintextChangelog(data) getDownloadLinkForVersion = (version) -> "https://downloads.binaryage.com/Asepsis-#{version}.dmg" getReleaseDateText = (date) -> "released on " + date generateChangelogHTML "#changelog-content", changelog, getDownloadLinkForVersion, getReleaseDateText $(window).trigger "changelog-rendered" </script>