INSTALL
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