#!/bin/bash

# XXX: This is in post-install.d, instead of install.d, because the
# hadoop RPM claims ownership of files owned by the filesystem RPM,
# such as /usr and /bin, and installing hadoop then updating
# filesystem results in a failure. This can be moved to install.d when
# HADOOP-9777 is resolved.
#   https://issues.apache.org/jira/browse/HADOOP-9777

distro=$(lsb_release -is || :)
if [ ! "$distro" == "Fedora" -a ! "$distro" == "Ubuntu" -a ! "$distro" == "RedHatEnterpriseServer" ]; then
   echo "Unknown distro: $distro. Exiting."
   exit 1
fi

echo "Hadoop setup begins for $distro"
tmp_dir=/tmp/hadoop

echo "Creating hadoop user & group"
case "$distro" in
   Ubuntu )
      addgroup hadoop
      adduser --ingroup hadoop --disabled-password --gecos GECOS hadoop
      adduser hadoop sudo
   ;;
   Fedora | RedHatEnterpriseServer )
      adduser -G adm,wheel hadoop
   ;;
esac

echo "Hadoop version $DIB_HADOOP_VERSION will be injected into image. Starting the download"
case "$distro" in
   Ubuntu )
      package="hadoop_$DIB_HADOOP_VERSION-1_x86_64.deb"
   ;;
   Fedora | RedHatEnterpriseServer )
      package="hadoop-$DIB_HADOOP_VERSION-1.x86_64.rpm"
   ;;
esac

install-packages wget
wget -P $tmp_dir "http://archive.apache.org/dist/hadoop/core/hadoop-$DIB_HADOOP_VERSION/$package"
if [ $? -ne 0 ]; then
   echo -e "Could not find Hadoop version $DIB_HADOOP_VERSION.\nAborting"
   exit 1
fi

case "$distro" in
   Ubuntu )
      dpkg -i $tmp_dir/$package
   ;;
   Fedora | RedHatEnterpriseServer )
      if [ $(lsb_release -rs) = '19' ]; then
         rpm -i $tmp_dir/$package --relocate /usr=/usr --replacefiles
      else
         rpm -ivh --replacefiles $tmp_dir/$package
      fi
      chmod 755 /usr/sbin/start-*
      chmod 755 /usr/sbin/stop-*
      chmod 755 /usr/sbin/slaves.sh
      chmod 755 /usr/sbin/update-hadoop-env.sh
   ;;
esac
rm -r $tmp_dir

echo "Pre-configuring Hadoop"

# Find JAVA_HOME...
case "$distro" in
   Ubuntu)
      JAVA_HOME=$(readlink -e /usr/bin/java | sed "s:bin/java::")
   ;;
   Fedora | RedHatEnterpriseServer )
      JAVA_HOME=$(rpm --eval '%{?java_home}')
   ;;
esac
if [ -z "$JAVA_HOME" ]; then
   JAVA_HOME=$(find $TARGET_ROOT/usr/java/ -maxdepth 1 -name "jdk*")
fi

cat >> /home/hadoop/.bashrc <<EOF
PATH=\$PATH:/usr/sbin:$JAVA_HOME/bin
JAVA_HOME=$JAVA_HOME
HADOOP_HOME=/usr/share/hadoop/
EOF
sed -i -e "s,export JAVA_HOME=.*,export JAVA_HOME=$JAVA_HOME," \
       -e "s,export HADOOP_LOG_DIR=.*,export HADOOP_LOG_DIR=/mnt/log/hadoop/\$USER," \
       -e "s,export HADOOP_SECURE_DN_LOG_DIR=.*,export HADOOP_SECURE_DN_LOG_DIR=/mnt/log/hadoop/hdfs," \
    /etc/hadoop/hadoop-env.sh
