From 5588a0f2448cb855fb8df8cba772dc548c9770d3 Mon Sep 17 00:00:00 2001 From: "Jose A. Rivera" Date: Fri, 1 Sep 2017 16:59:04 -0500 Subject: Bring Fedora image up to date. Signed-off-by: Jose A. Rivera --- 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 , Humble Chirammal " -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. +# +# 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. +# Copyright (c) 2016-2017 Red Hat, Inc. # # 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.1