#!/bin/sh
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# preinst script for hadoop
#
# see: dh_installdeb(1)

set -e

# summary of how this script can be called:
#        * <new-preinst> `install'
#        * <new-preinst> `install' <old-version>
#        * <new-preinst> `upgrade' <old-version>
#        * <old-preinst> `abort-upgrade' <new-version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package


case "$1" in
    install|upgrade)
        addgroup --system hadoop >/dev/null 2>/dev/null || :
        if ! getent passwd hdfs >/dev/null; then
            # Adding system user: hdfs.
            adduser \
                --system \
                --group \
                --home /usr/lib/hadoop \
                --gecos "Hadoop HDFS" \
                --shell /bin/bash \
                hdfs >/dev/null 2>/dev/null || :
            usermod --append --groups hadoop hdfs || :
        fi
        if ! getent passwd mapred >/dev/null; then
            adduser \
                --system \
                --group \
                --home /usr/lib/hadoop \
                --gecos "Hadoop MapReduce" \
                --shell /bin/bash \
                mapred >/dev/null 2>/dev/null || :
            usermod --append --groups hadoop mapred || :
        fi
    ;;

    abort-upgrade)
    ;;

    *)
        echo "preinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

#DEBHELPER#

exit 0
