From 5588a0f2448cb855fb8df8cba772dc548c9770d3 Mon Sep 17 00:00:00 2001
From: "Jose A. Rivera" <jarrpa@redhat.com>
Date: Fri, 1 Sep 2017 16:59:04 -0500
Subject: Bring Fedora image up to date.

Signed-off-by: Jose A. Rivera <jarrpa@redhat.com>
---
 Fedora/Dockerfile                     | 98 ++++++++++++++++++++---------------
 Fedora/README.md                      | 13 ++++-
 Fedora/gluster-brickmultiplex.service | 10 ++++
 Fedora/gluster-brickmultiplex.sh      | 74 ++++++++++++++++++++++++++
 Fedora/gluster-setup.service          |  2 +-
 Fedora/gluster-setup.sh               |  8 +--
 6 files changed, 156 insertions(+), 49 deletions(-)
 create mode 100644 Fedora/gluster-brickmultiplex.service
 create mode 100644 Fedora/gluster-brickmultiplex.sh

diff --git a/Fedora/Dockerfile b/Fedora/Dockerfile
index c0ea63d..da394cc 100644
--- a/Fedora/Dockerfile
+++ b/Fedora/Dockerfile
@@ -1,53 +1,65 @@
 FROM fedora
 
-MAINTAINER Humble Chirammal hchiramm@redhat.com Mohamed Ashiq Liyazudeen mliyazud@redhat.com
+ENV NAME="gluster-fedora" \
+    DESC="GlusterFS on Fedora" \
+    VERSION=0 \
+    RELEASE=1 \
+    ARCH=x86_64 \
+    REPO="$FGC" \
+    container=docker
 
-ENV container docker
-
-LABEL architecture="x86_64" \
-      name="gluster/gluster-fedora" \
-      version="3.10" \
+LABEL name="$REPO/$NAME" \
+      version="$VERSION" \
+      release="$RELEASE.$DISTTAG" \
+      architecture="$ARCH" \
       vendor="Red Hat, Inc" \
-      summary="This image has a running glusterfs service ( Fedora + Gluster 3.10)" \
-      io.k8s.display-name="Gluster 3.10 based on Fedora" \
-      io.k8s.description="Gluster Image is based on Fedora Image which is a scalable network filesystem. Using common off-the-shelf hardware, you can create large, distributed storage solutions for media streaming, data analysis, and other data- and bandwidth-intensive tasks." \
-      description="Gluster Image is based on fedora Image which is a scalable network filesystem. Using common off-the-shelf hardware, you can create large, distributed storage solutions for media streaming, data analysis, and other data- and bandwidth-intensive tasks." \
-      io.openshift.tags="gluster,glusterfs,gluster-fedora"
-
+      summary="$DESC" \
+      usage="docker run -d $REPO/$NAME" \
+      io.k8s.display-name="$DESC" \
+      io.k8s.description="GlusterFS is a distributed and scalable network filesystem. Using common, off-the-shelf hardware you can create large, distributed storage solutions for media streaming, data analysis, and other data- and bandwidth-intensive tasks." \
+      io.openshift.tags="gluster,glusterfs,gluster-fedora" \
+      com.redhat.component="$NAME" \
+      maintainer="Jose A. Rivera <jarrpa@redhat.com>, Humble Chirammal <hchiramm@redhat.com>"
 
-RUN yum -y update;\
-yum -y install systemd; \
-(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
-rm -f /lib/systemd/system/multi-user.target.wants/*;\
-rm -f /etc/systemd/system/*.wants/*;\
-rm -f /lib/systemd/system/local-fs.target.wants/*; \
-rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
-rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
-rm -f /lib/systemd/system/basic.target.wants/*;\
-rm -f /lib/systemd/system/anaconda.target.wants/*; \
-yum --setopt=tsflags=nodocs -y install ntp nfs-utils iputils iproute attr glusterfs glusterfs-server glusterfs-geo-replication openssh-server; yum clean all;\
-sed -i '/Port 22/c\Port 2222' /etc/ssh/sshd_config; \
-sed -i 's/Requires\=rpcbind\.service//g' /usr/lib/systemd/system/glusterd.service; \
-sed -i 's/rpcbind\.service/gluster-setup\.service/g' /usr/lib/systemd/system/glusterd.service; \
-mkdir -p /etc/glusterfs_bkp /var/lib/glusterd_bkp /var/log/glusterfs_bkp;\
-cp -r /etc/glusterfs/* /etc/glusterfs_bkp;\
-cp -r /var/lib/glusterd/* /var/lib/glusterd_bkp;\
-cp -r /var/log/glusterfs/* /var/log/glusterfs_bkp; \
-sed -i.save -e "s#udev_sync = 1#udev_sync = 0#" -e "s#udev_rules = 1#udev_rules = 0#" -e "s#use_lvmetad = 1#use_lvmetad = 0#" /etc/lvm/lvm.conf;
+VOLUME [ "/sys/fs/cgroup/" ]
 
-VOLUME [ "/sys/fs/cgroup" ]
-ADD gluster-setup.service /etc/systemd/system/gluster-setup.service
-ADD gluster-setup.sh /usr/sbin/gluster-setup.sh
+COPY gluster-setup.sh gluster-brickmultiplex.service gluster-brickmultiplex.sh gluster-setup.service /
 
-RUN chmod 644 /etc/systemd/system/gluster-setup.service; \
-chmod 500 /usr/sbin/gluster-setup.sh; \
-systemctl disable nfs-server.service; \
-systemctl mask getty.target; \
-systemctl enable ntpd.service; \
-systemctl enable glusterd.service; \
-systemctl enable gluster-setup.service;
+RUN dnf -y update && \
+    sed -i "s/LANG/\#LANG/g" /etc/locale.conf && \
+    dnf -y install systemd-udev ntp glusterfs-server dbus-python nfs-utils attr iputils iproute glusterfs-geo-replication openssh-server openssh-clients cronie tar rsync sos sudo xfsprogs && \
+    dnf clean all && \
+    sed -i '/Port 22/c\Port 2222' /etc/ssh/sshd_config && \
+    sed -i 's/Requires\=rpcbind\.service//g' /usr/lib/systemd/system/glusterd.service && \
+    sed -i 's/rpcbind\.service/gluster-setup\.service/g' /usr/lib/systemd/system/glusterd.service && \
+    sed -i.save -e "s#udev_sync = 1#udev_sync = 0#" -e "s#udev_rules = 1#udev_rules = 0#" -e "s#use_lvmetad = 1#use_lvmetad = 0#" /etc/lvm/lvm.conf && \
+    # Back up the default/base configuration. The target directories get
+    # overwritten with the directories from the host which are initially
+    # empty.
+    mkdir -p /etc/glusterfs_bkp /var/lib/glusterd_bkp /var/log/glusterfs_bkp && \
+    cp -r /etc/glusterfs/* /etc/glusterfs_bkp && \
+    cp -r /var/lib/glusterd/* /var/lib/glusterd_bkp && \
+    cp -r /var/log/glusterfs/* /var/log/glusterfs_bkp && \
+    mv /gluster-setup.sh /usr/sbin/gluster-setup.sh && \
+    mv /gluster-brickmultiplex.service /etc/systemd/system/gluster-brickmultiplex.service && \
+    mv /gluster-brickmultiplex.sh /usr/sbin/gluster-brickmultiplex.sh && \
+    mv /gluster-setup.service /etc/systemd/system/gluster-setup.service && \
+    chmod 644 /etc/systemd/system/gluster-setup.service && \
+    chmod 500 /usr/sbin/gluster-setup.sh && \
+    ln -s /usr/sbin/gluster-setup.sh /usr/sbin/setup.sh && \
+    chmod 644 /etc/systemd/system/gluster-brickmultiplex.service && \
+    chmod 500 /usr/sbin/gluster-brickmultiplex.sh && \
+    systemctl mask getty.target && \
+    systemctl disable systemd-udev-trigger.service && \
+    systemctl disable systemd-udevd.service && \
+    systemctl disable nfs-server.service && \
+    systemctl enable rpcbind.service && \
+    systemctl enable sshd.service && \
+    systemctl enable ntpd.service && \
+    systemctl enable gluster-setup.service && \
+    systemctl enable gluster-brickmultiplex.service && \
+    systemctl enable glusterd.service
 
-EXPOSE 2222 111 245 443 24007 2049 8080 6010 6011 6012 38465 38466 38468 38469 49152 49153 49154 49156 49157 49158 49159 49160 49161 49162 49163
+EXPOSE 2222 111 245 443 24006 24007 2049 8080 6010 6011 6012 38465 38466 38468 38469 49152 49153 49154 49156 49157 49158 49159 49160 49161 49162
 
 CMD ["/usr/sbin/init"]
-
diff --git a/Fedora/README.md b/Fedora/README.md
index 787446c..babdfa9 100644
--- a/Fedora/README.md
+++ b/Fedora/README.md
@@ -1 +1,12 @@
-This dockerfile can be used to build a Gluser image from Fedora 21.
+# gluster-fedora Docker image
+
+GlusterFS on Fedora
+
+## Tags
+
+* `latest` ([Dockerfile](https://github.com/jarrpa/gluster-containers/tree/fedora-update/Fedora)):
+  Latest stable image
+
+## Description
+
+GlusterFS is a distributed and scalable network filesystem. Using common, off-the-shelf hardware you can create large, distributed storage solutions for media streaming, data analysis, and other data- and bandwidth-intensive tasks.
diff --git a/Fedora/gluster-brickmultiplex.service b/Fedora/gluster-brickmultiplex.service
new file mode 100644
index 0000000..c0ba482
--- /dev/null
+++ b/Fedora/gluster-brickmultiplex.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Configure brick multiplexing in Gluster
+After=glusterd.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/gluster-brickmultiplex.sh
+
+[Install]
+WantedBy=multi-user.target
diff --git a/Fedora/gluster-brickmultiplex.sh b/Fedora/gluster-brickmultiplex.sh
new file mode 100644
index 0000000..968a3e2
--- /dev/null
+++ b/Fedora/gluster-brickmultiplex.sh
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+###
+# Description: Script to enable brick multiplexing in gluster.
+# Copyright (c) 2017 Red Hat, Inc. <http://www.redhat.com>
+#
+# This file is part of GlusterFS.
+#
+# This file is licensed to you under your choice of the GNU Lesser
+# General Public License, version 3 or any later version (LGPLv3 or
+# later), or the GNU General Public License, version 2 (GPLv2), in all
+# cases as published by the Free Software Foundation.
+###
+
+main () {
+  GLUSTERFS_CONF_DIR="/etc/glusterfs"
+  GLUSTERFS_LOG_DIR="/var/log/glusterfs"
+  GLUSTERFS_META_DIR="/var/lib/glusterd"
+  GLUSTERFS_LOG_CONT_DIR="/var/log/glusterfs/container"
+  GLUSTERFS_CUSTOM_FSTAB="/var/lib/heketi/fstab"
+
+  GLUSTER_BRICKMULTIPLEX=${GLUSTER_BRICKMULTIPLEX-yes}
+
+  case "$GLUSTER_BRICKMULTIPLEX" in
+    [nN] | [nN][Oo] )
+      gluster v info | grep 'cluster.brick-multiplex: off' > $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+      if [[ ${?} == 0 ]]; then
+        echo "cluster brick-multiplexing already disabled." >> $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+        exit 0
+      fi
+
+      gluster --mode=script volume set all cluster.brick-multiplex off >> $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+      if [[ ${?} != 0 ]]; then
+        echo "cluster brick-multiplexing set failed." >> $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+        exit 1
+      fi
+
+      systemctl restart glusterd
+      if [[ ${?} != 0 ]]; then
+        echo "Restarting glusterd failed." >> $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+        exit 1
+      fi
+
+      echo "Brick Multiplexing Successfully Disabled"
+      exit 0
+      ;;
+    [yY] | [yY][Ee][Ss] )
+      gluster v info | grep 'cluster.brick-multiplex: on' > $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+      if [[ ${?} == 0 ]]; then
+        echo "cluster brick-multiplexing already set." >> $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+        exit 0
+      fi
+
+      gluster --mode=script volume set all cluster.brick-multiplex on >> $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+      if [[ ${?} != 0 ]]; then
+        echo "cluster brick-multiplexing set failed." >> $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+        exit 1
+      fi
+
+      systemctl restart glusterd
+      if [[ ${?} != 0 ]]; then
+        echo "Restarting glusterd failed." >> $GLUSTERFS_LOG_CONT_DIR/brickmultiplexing
+        exit 1
+      fi
+
+      echo "Brick Multiplexing Successfully Enabled"
+      exit 0
+      ;;
+    *) echo "Invalid input"
+      ;;
+  esac
+}
+
+main
diff --git a/Fedora/gluster-setup.service b/Fedora/gluster-setup.service
index 4bb8b68..4cccd57 100644
--- a/Fedora/gluster-setup.service
+++ b/Fedora/gluster-setup.service
@@ -1,6 +1,6 @@
 [Unit]
 Description=Configuring GlusterFS in container
-Before=glusterd.service
+Before=rpcbind.service
 
 [Service]
 Type=oneshot
diff --git a/Fedora/gluster-setup.sh b/Fedora/gluster-setup.sh
index 77ec6ef..5ad062c 100644
--- a/Fedora/gluster-setup.sh
+++ b/Fedora/gluster-setup.sh
@@ -2,7 +2,7 @@
 
 ###
 # Description: Script to move the glusterfs initial setup to bind mounted directories of Atomic Host.
-# Copyright (c) 2016 Red Hat, Inc. <http://www.redhat.com>
+# Copyright (c) 2016-2017 Red Hat, Inc. <http://www.redhat.com>
 #
 # This file is part of GlusterFS.
 #
@@ -62,7 +62,7 @@ main () {
         fi
         echo "Mount command Successful" >> $GLUSTERFS_LOG_CONT_DIR/mountfstab
         sleep 40
-        cut -f 2 -d " " $GLUSTERFS_CUSTOM_FSTAB | while read line
+        cat $GLUSTERFS_CUSTOM_FSTAB|cut -f 2 -d " " | while read line
         do
               if grep -qs "$line" /proc/mounts; then
                    echo "$line mounted." >> $GLUSTERFS_LOG_CONT_DIR/mountfstab
@@ -75,12 +75,12 @@ main () {
                          sleep 1
                    fi
               else
-		   grep $line $GLUSTERFS_CUSTOM_FSTAB >> $GLUSTERFS_LOG_CONT_DIR/failed_bricks
+		   cat $GLUSTERFS_CUSTOM_FSTAB|grep $line  >> $GLUSTERFS_LOG_CONT_DIR/failed_bricks
                    echo "$line not mounted." >> $GLUSTERFS_LOG_CONT_DIR/mountfstab
                    sleep 0.5
              fi
         done
-        if [ $(wc -l $GLUSTERFS_LOG_CONT_DIR/failed_bricks ) -gt 1 ]
+        if [ $(cat $GLUSTERFS_LOG_CONT_DIR/failed_bricks | wc -l) -gt 1 ]
         then
               vgscan --mknodes > $GLUSTERFS_LOG_CONT_DIR/vgscan_mknodes
               sleep 10
-- 
cgit v1.2.3