Enable custom-built packages (user/group/location)
Automatically replace the USER, GROUP, GERRIT_SITE, VERSION
during the packaging phase and on configuration files in
order to create a fully automated custom-built package.
Example: your company requires Gerrit 2.9.3 to be installed on
/opt/gerrit under the user 'review' and group 'wheel'.
$ make USER=review GROUP=wheel GERRIT_SITE=/opt/gerrit VERSION=2.9.3
Generates a package (rpm/deb) named:
out/gerrit-2.9.3-1.noarch.(rpm|deb)
Once installed, the gerrit package info is:
Name : gerrit
Arch : x86_64
Version : 2.9.3
Release : 1
Size : 39 M
Repo : installed
Summary : Gerrit Code Review
URL : https://code.google.com/p/gerrit/
Licence : Apache 2.0
Description : Gerrit Code Review
Change-Id: Ib64688fac867ff9bb069d6f7e5ab637c81b7e4e4
diff --git a/fpm/Makefile b/fpm/Makefile
index d2026e5..51666fb 100644
--- a/fpm/Makefile
+++ b/fpm/Makefile
@@ -6,9 +6,9 @@
CATEGORY=Development
SUMMARY=Gerrit Code Review
BUILD_ARCH=noarch
-BUILD_ROOT=build
+BUILD_ROOT=build/root
+SCRIPTS_ROOT=build/scripts
OUT=out
-ETC=etc
USER=gerrit
GROUP=gerrit
GERRIT_SITE=/var/gerrit
@@ -20,48 +20,61 @@
RPM_OUT=$(OUT)/gerrit-$(VERSION)-$(RELEASE).$(BUILD_ARCH).rpm
DEB_OUT=$(OUT)/gerrit-$(VERSION)-$(RELEASE).$(BUILD_ARCH).deb
-CONFIGS=$(wildcard $(ETC)/*)
+CONFIGS=$(wildcard etc/*) etc/gerritcodereview
+SCRIPTS=$(foreach script,$(wildcard scripts/*),$(notdir $(script)))
+BUILD_SCRIPTS=$(foreach script,$(SCRIPTS),$(SCRIPTS_ROOT)/$(script))
FPM_OPTS=-s dir \
- -n $(NAME) -v $(VERSION) --iteration $(RELEASE) --category $(CATEGORY) \
+ -f -n $(NAME) -v $(VERSION) --iteration $(RELEASE) --category $(CATEGORY) \
--description "$(SUMMARY)" --url $(WEB_URL) --license "$(LICENSE)" \
--depends git \
--PKG-user $(USER) --PKG-group $(GROUP) \
- --before-install scripts/before-install.sh \
- --after-install scripts/after-install.sh \
- --before-remove scripts/before-remove.sh \
- --after-remove scripts/after-remove.sh \
+ --before-install $(SCRIPTS_ROOT)/before-install.sh \
+ --after-install $(SCRIPTS_ROOT)/after-install.sh \
+ --before-remove $(SCRIPTS_ROOT)/before-remove.sh \
+ --after-remove $(SCRIPTS_ROOT)/after-remove.sh \
--prefix $(GERRIT_SITE) --directories $(GERRIT_SITE) --config-files $(GERRIT_SITE)/etc \
--verbose -C $(BUILD_ROOT) .
-RPM_OPTS=$(subst PKG,rpm,$(FPM_OPTS))
+RPM_OPTS=$(subst --before-install,--rpm-pretrans, $(subst PKG,rpm,$(FPM_OPTS)))
DEB_OPTS=$(subst PKG,deb,$(FPM_OPTS))
all: prepare $(RPM_OUT) $(DEB_OUT)
clean:
rm -Rf $(OUT)
- -grep -q gerrit /etc/passwd && userdel gerrit
-prepare:
- -grep -v -q gerrit /etc/passwd && useradd gerrit
+prepare: $(CONFIGS)
mkdir -p $(OUT)
- mkdir -p $(BUILD_ROOT)/etc/.
- cp $(CONFIGS) $(BUILD_ROOT)/etc/.
+ mkdir -p $(SCRIPTS_ROOT)
+ mkdir -p $(BUILD_ROOT)/etc
+ mkdir -p $(BUILD_ROOT)/bin
+ cp $(CONFIGS) $(BUILD_ROOT)/etc
+ -groupadd $(GROUP)
+ -useradd $(USER)
clobber: clean
rm -Rf $(BUILD_ROOT)
+ rm -Rf $(SCRIPTS_ROOT)
+ rm -Rf etc/gerritcodereview
-$(WAR):
- curl --create-dirs -o $@ $(URL)
+$(WAR): $(basedir $(WAR))
+ curl -o $@ $(URL)
-chown:
- chown -R $(USER): $(BUILD_ROOT)
+$(SCRIPTS_ROOT)/%.sh: scripts/%.sh
+ echo "#!/bin/bash" > $@
+ echo "USER=$(USER)" >> $@
+ echo "GROUP=$(GROUP)" >> $@
+ echo "GERRIT_SITE=$(GERRIT_SITE)" >> $@
+ cat $< >> $@
-$(RPM_OUT): $(WAR) $(CONFIGS) chown
+etc/gerritcodereview:
+ echo "GERRIT_SITE=$(GERRIT_SITE)" > $@
+
+$(RPM_OUT): $(WAR) $(CONFIGS) $(BUILD_SCRIPTS) chown
fpm -t rpm -p $@ $(RPM_OPTS)
-$(DEB_OUT): $(WAR) $(CONFIGS) chown
+$(DEB_OUT): $(WAR) $(CONFIGS) $(BUILD_SCRIPTS) chown
fpm -t deb -p $@ $(DEB_OPTS)
.PHONY: clean clobber prepare chown
diff --git a/fpm/etc/gerritcodereview b/fpm/etc/gerritcodereview
deleted file mode 100644
index 0d7d8cb..0000000
--- a/fpm/etc/gerritcodereview
+++ /dev/null
@@ -1 +0,0 @@
-GERRIT_SITE=/var/gerrit
diff --git a/fpm/scripts/after-install.sh b/fpm/scripts/after-install.sh
index 8670d86..641fe45 100755
--- a/fpm/scripts/after-install.sh
+++ b/fpm/scripts/after-install.sh
@@ -1,9 +1,30 @@
-GERRIT_SITE=/var/gerrit
-SUDO="sudo -u gerrit"
-$SUDO java -jar /var/gerrit/bin/gerrit.war init --batch -d $GERRIT_SITE
-$SUDO java -jar /var/gerrit/bin/gerrit.war reindex -d $GERRIT_SITE
+SUDO="sudo -u $USER"
+LOG=/tmp/gerrit-installer.log
+
+echo ""
+echo -n "Initialising Gerrit site ... "
+$SUDO java -jar $GERRIT_SITE/bin/gerrit.war init --batch -d $GERRIT_SITE >>$LOG 2>>$LOG
+[ $? != 0 ] && echo "FAILED" && exit 1
+echo "DONE"
+
+echo -n "Reindexing Gerrit ... "
+$SUDO java -jar $GERRIT_SITE/bin/gerrit.war reindex -d $GERRIT_SITE >> $LOG 2>>$LOG
+[ $? != 0 ] && echo "FAILED" && exit 2
+echo "DONE"
+
+echo -n "Setting user/group ownership ..."
+chown -R $USER:$GROUP $GERRIT_SITE
+
+echo -n "Creating symlinks ... "
cd /etc/init.d && ln -sf $GERRIT_SITE/bin/gerrit.sh gerrit
cd /var/log && ln -sf $GERRIT_SITE/logs gerrit
cd /etc && ln -sf $GERRIT_SITE/etc gerrit
[ ! -d /etc/default ] && mkdir -p /etc/default
cd /etc/default && ln -sf /etc/gerrit/gerritcodereview
+echo "DONE"
+
+echo ""
+echo "Installation completed"
+echo ""
+echo "To start Gerrit server, run: /etc/init.d/gerrit start"
+echo "To start using Gerrit, open: http://$(hostname):8080/"
diff --git a/fpm/scripts/after-remove.sh b/fpm/scripts/after-remove.sh
index e63a8cb..cabc943 100755
--- a/fpm/scripts/after-remove.sh
+++ b/fpm/scripts/after-remove.sh
@@ -1,6 +1,5 @@
-GERRIT_SITE=/var/gerrit
rm -f /etc/init.d/gerrit || true
rm -f /var/log/gerrit || true
rm -f /etc/gerrit || true
rm /etc/default/gerritcodereview || true
-userdel gerrit || true
+userdel $USER || true
diff --git a/fpm/scripts/before-install.sh b/fpm/scripts/before-install.sh
index 8c301e0..c268428 100755
--- a/fpm/scripts/before-install.sh
+++ b/fpm/scripts/before-install.sh
@@ -1,11 +1,31 @@
-GERRIT_SITE=/var/gerrit
-grep -q gerrit /etc/passwd || echo -n "Creating Gerrit user ... " && useradd gerrit -d $GERRIT_SITE --create-home && echo "DONE"
+LOG=/tmp/gerrit-installer.log
+
+GROUP_ID=$(/usr/bin/getent group $GROUP | cut -d ':' -f 3 2>> $LOG || true)
+if [ "$GROUP_ID" == "" ]
+then
+ echo -n "Creating $GROUP group ... "
+ groupadd $GROUP >> $LOG 2>> $LOG
+ [ $? != 0 ] && echo "FAILED" && exit 1
+ GROUP_ID=$(/usr/bin/getent group $GROUP | cut -d ':' -f 3 2>> $LOG || true)
+ echo "DONE"
+fi
+
+USER_PASSWD=$(/usr/bin/getent passwd $USER 2>> $LOG || true)
+if [ "$USER_PASSWD" == "" ]
+then
+ echo -n "Creating $USER user ... "
+ useradd $USER -M -g $GROUP_ID -d $GERRIT_SITE >> $LOG 2>> $LOG
+ [ $? != 0 ] && echo "FAILED" && exit 1
+ echo "DONE"
+fi
+
echo -n "Checking Java version ... "
JAVA_VERSION=$(java -version 2>&1)
-[ $? != 0 ] && echo -e "NOT FOUND\nPlease install Java >= 1.7.0 and try again" && exit 1
+[ $? != 0 ] && echo -e "NOT FOUND\nPlease install Java >= 1.7.0 and try again" && exit 2
VERSION=`expr "$JAVA_VERSION" : '.*"\(1.[0-9\.]*\)["_]'`
echo "$VERSION"
-test "$VERSION" "<" "1.7" && echo "ERROR: java >= 1.7.0 required by Gerrit" || true
-test "$VERSION" ">" "1.7"
+test "$VERSION" "<" "1.7" && echo "ERROR: java >= 1.7.0 required by Gerrit" && exit 3
+exit 0
+
diff --git a/fpm/scripts/before-remove.sh b/fpm/scripts/before-remove.sh
index ffa3ccb..5d22cd5 100644
--- a/fpm/scripts/before-remove.sh
+++ b/fpm/scripts/before-remove.sh
@@ -1 +1 @@
-/var/gerrit/bin/gerrit.sh stop
+$GERRIT_SITE/bin/gerrit.sh stop || true