gboudreau/Greyhole

View on GitHub
INSTALL

Summary

Maintainability
Test Coverage
Greyhole Installation Instructions
==================================

Greyhole comes as RPM or DEB packages. If your distribution supports those, you should definitely install one of them.  
To do so, you can use this script:

```bash
curl -Ls http://bit.ly/greyhole-package | sudo bash
```

After installing, look in `/usr/share/greyhole/USAGE` (or online https://raw.github.com/gboudreau/Greyhole/master/USAGE) for configuration instructions.  
If you can't install a pre-packaged version, follow the steps below to install from source.

The following instructions have been tested on Fedora 12, and Ubuntu 9 & 10.  
If you know what you're doing, you should have no problem installing on any other Linux variant.

1. Install the required applications: PHP 7+ (cli) with MySQL & mbstring extensions, MySQL server, Samba, rsync, GCC (etc.):

    - Fedora: `yum -y install mysql-server php php-mysql php-mbstring php-intl samba samba-common php-pear rsync lsof`
    - Ubuntu: `apt-get -y install mysql-server php-cli php-mysql php-mysqlnd php-mbstring php-intl samba samba-common samba-common-bin samba-vfs-modules php-pear rsync lsof sysstat`

    - Note: you might need to install mariadb-server, if mysql-server is not available. Those two are equivalent.
    - Note 2: samba-vfs-modules might not be needed, but if it is available in your repo, it is required.

2. Install Greyhole (as root):

    - Download the latest "greyhole-[VERSION].tar.gz" file from https://github.com/gboudreau/Greyhole/releases
    (Don't use the "Source Code" files.)

    ```bash
    tar zxf greyhole-*.tar.gz && rm -f greyhole-*.tar.gz
    cd greyhole-*
    GREYHOLE_INSTALL_DIR=`pwd`
    mkdir -p /var/spool/greyhole
    chmod 777 /var/spool/greyhole
    mkdir -p /usr/share/greyhole
    install -m 0755 -D -p greyhole /usr/bin
    install -m 0755 -D -p greyhole-dfree /usr/bin
    install -m 0755 -D -p greyhole-php /usr/bin
    install -m 0755 -D -p greyhole-dfree.php /usr/share/greyhole
    install -m 0644 -D -p schema-mysql.sql /usr/share/greyhole
    install -m 0644 -D -p greyhole.example.conf /usr/share/greyhole
    install -m 0644 -D -p greyhole.example.conf /etc/greyhole.conf
    install -m 0644 -D -p logrotate.greyhole /etc/logrotate.d/greyhole
    install -m 0644 -D -p greyhole.cron.d /etc/cron.d/greyhole
    install -m 0755 -D -p greyhole.cron.weekly /etc/cron.weekly/greyhole
    install -m 0755 -D -p greyhole.cron.daily /etc/cron.daily/greyhole
    cp -r web-app /usr/share/greyhole/web-app
    install -m 0755 -D -p scripts-examples/greyhole_file_changed.sh /usr/share/greyhole/scripts-examples
    install -m 0755 -D -p scripts-examples/greyhole_idle.sh /usr/share/greyhole/scripts-examples
    install -m 0755 -D -p scripts-examples/greyhole_notify_error.sh /usr/share/greyhole/scripts-examples
    install -m 0755 -D -p scripts-examples/greyhole_send_fsck_report.sh /usr/share/greyhole/scripts-examples
    install -m 0755 -D -p scripts-examples/greyhole_sysadmin_notification.sh /usr/share/greyhole/scripts-examples
    install -m 0644 -D -p USAGE /usr/share/greyhole
    install -m 0755 -D -p build_vfs.sh /usr/share/greyhole
    install -m 0644 -D -p docs/greyhole.1.gz /usr/share/man/man1/
    install -m 0644 -D -p docs/greyhole-dfree.1.gz /usr/share/man/man1/
    install -m 0644 -D -p docs/greyhole.conf.5.gz /usr/share/man/man5/

    # What version of Samba are you running ?
    SMB_VERSION="`smbd --version | awk '{print $2}' | awk -F'-' '{print $1}' | awk -F'.' '{print $1,$2}' | tr ' ' .`"
    echo "You appear to be running Samba $SMB_VERSION"

    if [ -d /usr/lib/x86_64-linux-gnu/samba/vfs ] || [ $(uname -m) = "x86_64" ] ; then
        LIBDIR="/usr/lib64"
    elif [ -d /usr/lib/aarch64-linux-gnu ] ; then
          LIBDIR="/usr/lib/aarch64-linux-gnu"
    else
        LIBDIR="/usr/lib"
    fi
    mkdir "$LIBDIR/greyhole"
    cp samba-module/bin/$SMB_VERSION/greyhole-$(uname -m).so "$LIBDIR/greyhole/greyhole-samba${SMB_VERSION//.}.so"

    # Install the start script
    # For SysVinit systems: install the initd script:
    install -m 0755 -D -p initd_script.sh /etc/init.d/greyhole

    # For Upstart systems: install the Upstart script:
    install -m 0644 -D -p upstart.conf /etc/init/greyhole.conf

    # For Systemd systems: install the service
    install -m 0644 -D -p greyhole.systemd /usr/lib/systemd/system/greyhole.service
    ```

    - Fedora: `service smb restart`
    - Ubuntu (14-): `/etc/init.d/samba restart`, or `restart smbd`
    - Ubuntu (15+): `/etc/init.d/smbd restart`
    - Debian: `service samba restart`

3. For Samba 4.19 and later: The greyhole.so files packaged with Greyhole might not work on your system.  
   You'll need to compile your own VFS module.

    - Fedora: `sudo yum -y install patch gcc python-devel gnutls-devel make rpcgen zlib-devel e2fsprogs-devel heimdal-devel`
    - Ubuntu/Debian: `sudo apt -y install build-essential python3-dev libgnutls28-dev pkg-config flex locales comerr-dev heimdal-multidev`
   
    ```bash
    cp $GREYHOLE_INSTALL_DIR/samba-module/vfs_greyhole-samba-4.x.c $GREYHOLE_INSTALL_DIR/samba-module/vfs_greyhole-samba-4.17.c
    cp $GREYHOLE_INSTALL_DIR/samba-module/wscript-samba-4.x.patch $GREYHOLE_INSTALL_DIR/samba-module/wscript-samba-4.17.patch
    $GREYHOLE_INSTALL_DIR/build_vfs.sh current
     ```

4. Add Greyhole to services that start on boot:

    - Fedora: `chkconfig --add greyhole; chkconfig greyhole on`
    - Ubuntu (< 10): `update-rc.d greyhole defaults 98 20`
    - Ubuntu (10-14): [nothing to do]
    - Ubuntu (15+): `update-rc.d greyhole defaults`
    - Debian: `update-rc.d greyhole defaults`
    - Systemd: `systemctl enable greyhole`

5. Work around problems with the CIFS client (as root):  
    - Ref: http://blog.dhampir.no/content/cifs-vfs-no-response-for-cmd-n-mid
    - Note: The cron.d script added above includes an @reboot cron line to make this permanent.

    ```bash
    if [ -f /proc/fs/cifs/OplockEnabled ]; then
        modprobe cifs
        echo 0 > /proc/fs/cifs/OplockEnabled
    fi
    if [ -f /sys/module/cifs/parameters/enable_oplocks ]; then
        modprobe cifs enable_oplocks=0
        echo 0 > /sys/module/cifs/parameters/enable_oplocks
    fi
     ```

You are now ready to configure and use Greyhole.  

See the USAGE file for details: `/usr/share/greyhole/USAGE`  
or online https://raw.github.com/gboudreau/Greyhole/master/USAGE