From bd8bdb6cc9f685b559d0453caca1faf20f90ebd3 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 14 Apr 2014 13:06:49 -0500 Subject: [PATCH] IDEMPIERE-1900 iDempiere Debian Installer --- org.adempiere.server-feature/build.properties | 4 +- .../idempiereEnvTemplate.properties | 66 ++ .../utils.unix/postgresql/DBRestore.sh | 25 +- .../utils.unix/postgresql/ImportIdempiere.sh | 24 +- .../unix/DebianInstaller/DEBIAN/conffiles | 1 + .../unix/DebianInstaller/DEBIAN/control | 12 + .../unix/DebianInstaller/DEBIAN/postinst | 116 +++ .../unix/DebianInstaller/DEBIAN/postrm | 70 ++ .../unix/DebianInstaller/DEBIAN/preinst | 48 ++ .../unix/DebianInstaller/DEBIAN/prerm | 17 + .../DebianInstaller/etc/default/idempiere | 3 + .../unix/DebianInstaller/etc/init.d/idempiere | 736 ++++++++++++++++++ .../etc/xdg/menus/idempiere.menu | 23 + .../applications/idempiere-backup.desktop | 10 + .../idempiere-gotoonlineforum.desktop | 10 + .../applications/idempiere-homepage.desktop | 10 + .../idempiere-readdocumentation.desktop | 10 + .../applications/idempiere-restore.desktop | 10 + .../idempiere-startserver.desktop | 10 + .../applications/idempiere-webclient.desktop | 10 + .../idempiere-gethelp.directory | 6 + .../desktop-directories/idempiere.directory | 7 + .../usr/share/pixmaps/idempiere-backup.png | Bin 0 -> 2245 bytes .../usr/share/pixmaps/idempiere-gethelp.png | Bin 0 -> 3752 bytes .../pixmaps/idempiere-gotoonlineforum.png | Bin 0 -> 3752 bytes .../pixmaps/idempiere-readdocumentation.png | Bin 0 -> 3752 bytes .../usr/share/pixmaps/idempiere-restore.png | Bin 0 -> 3752 bytes .../usr/share/pixmaps/idempiere-start.png | Bin 0 -> 3752 bytes .../usr/share/pixmaps/idempiere.png | Bin 0 -> 3752 bytes .../utils.unix/unix/createDEBpackage.sh | 23 + .../unix/idempiere-merge-debian.menu | 7 + .../postgresql/config/ConfigPostgreSQL.java | 7 +- 32 files changed, 1250 insertions(+), 15 deletions(-) create mode 100644 org.adempiere.server-feature/idempiereEnvTemplate.properties create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/conffiles create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/control create mode 100755 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/postinst create mode 100755 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/postrm create mode 100755 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/preinst create mode 100755 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/prerm create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/default/idempiere create mode 100755 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/init.d/idempiere create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/xdg/menus/idempiere.menu create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-backup.desktop create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-gotoonlineforum.desktop create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-homepage.desktop create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-readdocumentation.desktop create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-restore.desktop create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-startserver.desktop create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-webclient.desktop create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/desktop-directories/idempiere-gethelp.directory create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/desktop-directories/idempiere.directory create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-backup.png create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-gethelp.png create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-gotoonlineforum.png create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-readdocumentation.png create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-restore.png create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-start.png create mode 100644 org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere.png create mode 100755 org.adempiere.server-feature/utils.unix/unix/createDEBpackage.sh create mode 100644 org.adempiere.server-feature/utils.unix/unix/idempiere-merge-debian.menu diff --git a/org.adempiere.server-feature/build.properties b/org.adempiere.server-feature/build.properties index 06ab63fa23..7a15d5de1d 100644 --- a/org.adempiere.server-feature/build.properties +++ b/org.adempiere.server-feature/build.properties @@ -4,11 +4,11 @@ root.folder.data=data root.folder.setup=setup #linux 64 bits -root.linux.gtk.x86_64=file:setup.sh,file:console-setup.sh,file:idempiere-server.sh,file:setup-alt.sh,file:console-setup-alt.sh,file:sign-database-build.sh +root.linux.gtk.x86_64=file:setup.sh,file:console-setup.sh,file:idempiere-server.sh,file:setup-alt.sh,file:console-setup-alt.sh,file:sign-database-build.sh,file:idempiereEnvTemplate.properties root.linux.gtk.x86_64.folder.utils=utils.unix root.linux.gtk.x86_64.permissions.755=*.sh,**/*.sh #linux -root.linux.gtk.x86=file:setup.sh,file:console-setup.sh,file:idempiere-server.sh,file:setup-alt.sh,file:console-setup-alt.sh,file:sign-database-build.sh +root.linux.gtk.x86=file:setup.sh,file:console-setup.sh,file:idempiere-server.sh,file:setup-alt.sh,file:console-setup-alt.sh,file:sign-database-build.sh,file:idempiereEnvTemplate.properties root.linux.gtk.x86.folder.utils=utils.unix root.linux.gtk.x86.permissions.755=*.sh,**/*.sh #mac diff --git a/org.adempiere.server-feature/idempiereEnvTemplate.properties b/org.adempiere.server-feature/idempiereEnvTemplate.properties new file mode 100644 index 0000000000..a4681b5472 --- /dev/null +++ b/org.adempiere.server-feature/idempiereEnvTemplate.properties @@ -0,0 +1,66 @@ +#idempiereEnv.properties Template + +#idempiere home +IDEMPIERE_HOME=/opt/idempiere-server +#Java home +JAVA_HOME= + +#Java runtime options +IDEMPIERE_JAVA_OPTIONS=-Xms64M -Xmx512M + +#Type of database, postgresql|oracle|oracleXE +ADEMPIERE_DB_TYPE=PostgreSQL +ADEMPIERE_DB_EXISTS=N +#Path to database specific sql scripts: postgresql|oracle|oracleXE +ADEMPIERE_DB_PATH=postgresql +#Database server host name +ADEMPIERE_DB_SERVER=localhost +#Database port, oracle[1512], postgresql[5432] +ADEMPIERE_DB_PORT=5432 +#Database name +ADEMPIERE_DB_NAME=idempiere +#Database system user password +ADEMPIERE_DB_SYSTEM= +#Database user name +ADEMPIERE_DB_USER=adempiere +#Database user password +ADEMPIERE_DB_PASSWORD=adempiere + +#Application server host name +ADEMPIERE_APPS_SERVER=localhost +ADEMPIERE_WEB_ALIAS=localhost +#Application server port +ADEMPIERE_WEB_PORT=8080 +ADEMPIERE_SSL_PORT=8443 + +#Keystore setting +ADEMPIERE_KEYSTORE=/opt/idempiere-server/keystore/myKeystore +ADEMPIERE_KEYSTOREWEBALIAS=adempiere +ADEMPIERE_KEYSTORECODEALIAS=adempiere +ADEMPIERE_KEYSTOREPASS=myPassword + +#Certificate details +#Common name, default to host name +ADEMPIERE_CERT_CN=localhost +#Organization, default to the user name +ADEMPIERE_CERT_ORG=iDempiere Bazaar +#Organization Unit, default to 'AdempiereUser' +ADEMPIERE_CERT_ORG_UNIT=iDempiereUser +#town +ADEMPIERE_CERT_LOCATION=myTown +#state +ADEMPIERE_CERT_STATE=CA +#2 character country code +ADEMPIERE_CERT_COUNTRY=US + +#Mail server setting +ADEMPIERE_MAIL_SERVER=localhost +ADEMPIERE_ADMIN_EMAIL= +ADEMPIERE_MAIL_USER= +ADEMPIERE_MAIL_PASSWORD= + +#ftp server setting +ADEMPIERE_FTP_SERVER=localhost +ADEMPIERE_FTP_PREFIX=my +ADEMPIERE_FTP_USER=anonymous +ADEMPIERE_FTP_PASSWORD=user@host.com diff --git a/org.adempiere.server-feature/utils.unix/postgresql/DBRestore.sh b/org.adempiere.server-feature/utils.unix/postgresql/DBRestore.sh index ca5f781071..fd3d452411 100644 --- a/org.adempiere.server-feature/utils.unix/postgresql/DBRestore.sh +++ b/org.adempiere.server-feature/utils.unix/postgresql/DBRestore.sh @@ -23,20 +23,33 @@ fi PGPASSWORD=$4 export PGPASSWORD +if [ "x$4" = "x^TryLocalConnection^" ] +then + LOCALPG=true # Allow to run this command with user postgres (just useful running configure as root) +else + LOCALPG=false +fi + echo ------------------------------------- echo Recreate user and database echo ------------------------------------- -dropdb -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres $ADEMPIERE_DB_NAME - -dropuser -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres $2 - ADEMPIERE_CREATE_ROLE_SQL="CREATE ROLE $2 SUPERUSER LOGIN PASSWORD '$3'" -psql -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres -c "$ADEMPIERE_CREATE_ROLE_SQL" +if [ $LOCALPG = "true" ] +then + # Assuming that adempiere role already exists (it was created out there) + PGPASSWORD=$3 + export PGPASSWORD + dropdb -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U $2 $ADEMPIERE_DB_NAME +else + dropdb -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres $ADEMPIERE_DB_NAME + dropuser -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres $2 + psql -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres -c "$ADEMPIERE_CREATE_ROLE_SQL" +fi ADEMPIERE_CREATE_ROLE_SQL= PGPASSWORD=$3 export PGPASSWORD -createdb -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -E UNICODE -O $2 -U $2 $ADEMPIERE_DB_NAME +createdb -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -E UNICODE -T template0 -O $2 -U $2 $ADEMPIERE_DB_NAME echo ------------------------------------- echo Import Adempiere_pg.dmp diff --git a/org.adempiere.server-feature/utils.unix/postgresql/ImportIdempiere.sh b/org.adempiere.server-feature/utils.unix/postgresql/ImportIdempiere.sh index 4953fac2ea..06a8f42a82 100644 --- a/org.adempiere.server-feature/utils.unix/postgresql/ImportIdempiere.sh +++ b/org.adempiere.server-feature/utils.unix/postgresql/ImportIdempiere.sh @@ -23,20 +23,32 @@ fi PGPASSWORD=$4 export PGPASSWORD +if [ "x$4" = "x^TryLocalConnection^" ] +then + LOCALPG=true # Allow to run this command with user postgres (just useful running configure as root) +else + LOCALPG=false +fi echo ------------------------------------- echo Recreate user and database echo ------------------------------------- -dropdb -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres $ADEMPIERE_DB_NAME - -dropuser -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres $2 - ADEMPIERE_CREATE_ROLE_SQL="CREATE ROLE $2 SUPERUSER LOGIN PASSWORD '$3'" -psql -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres -c "$ADEMPIERE_CREATE_ROLE_SQL" +if [ $LOCALPG = "true" ] +then + # Assuming that adempiere role already exists (it was created out there) + PGPASSWORD=$3 + export PGPASSWORD + dropdb -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U $2 $ADEMPIERE_DB_NAME +else + dropdb -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres $ADEMPIERE_DB_NAME + dropuser -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres $2 + psql -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -U postgres -c "$ADEMPIERE_CREATE_ROLE_SQL" +fi ADEMPIERE_CREATE_ROLE_SQL= PGPASSWORD=$3 export PGPASSWORD -createdb --template=template0 -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -E UNICODE -O $2 -U $2 $ADEMPIERE_DB_NAME +createdb -T template0 -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -E UNICODE -O $2 -U $2 $ADEMPIERE_DB_NAME echo ------------------------------------- echo Import Adempiere$5.dmp diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/conffiles b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/conffiles new file mode 100644 index 0000000000..3ccb480cf3 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/conffiles @@ -0,0 +1 @@ +/etc/default/idempiere diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/control b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/control new file mode 100644 index 0000000000..7f06f3f823 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/control @@ -0,0 +1,12 @@ +Package: idempiere +Version: 2.0 +Section: web +Priority: extra +Architecture: all +Pre-Depends: openjdk-7-jdk|openjdk-6-jdk, postgresql-9.3|postgresql-9.2|postgresql-9.1, postgresql-contrib, adduser +Suggests: firefox +Installed-Size: 968668 +Maintainer: Carlos Ruiz +Description: iDempiere ERP + iDempiere Business Suite ERP/CRM/SCM +Homepage: http://www.idempiere.org/ diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/postinst b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/postinst new file mode 100755 index 0000000000..911030c34a --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/postinst @@ -0,0 +1,116 @@ +#!/bin/sh + +if [ "$1" != "configure" ] +then + exit 0 +fi + +if [ -z "$2" ] +then + MODE=install +else + MODE=upgrade +fi + +if [ -x "/etc/init.d/idempiere" ]; then + update-rc.d idempiere defaults >/dev/null + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then + invoke-rc.d idempiere start || exit 0 + else + /etc/init.d/idempiere start || exit 0 + fi +fi + +echo "Executing Post-install steps..." + +if [ "$MODE" = "install" ] +then + if `grep -q ^idempiere: /etc/group` + then + echo "" + else + /usr/sbin/groupadd idempiere + fi + id idempiere > /dev/null 2>&1 + status=$? + if test $status -eq 0 + then + groups idempiere | grep idempiere > /dev/null + status=$? + if test $status != 0 + then + /usr/sbin/usermod -G idempiere idempiere + fi + else + /usr/sbin/useradd -g idempiere -d /opt/idempiere-server -s /bin/bash idempiere + fi + +# End MODE=install +fi + +if [ "$MODE" = "install" ] +then + # Start Menu icons + + mergefile() + { + MENUFILE="$1" + + if [ -z "$MENUFILE" ] + then + return + fi + + TFILE="$(mktemp)" || TFILE="/tmp/idempiereapplications.tmp" + (sed -n '1,/<\/Menu>/p' "$MENUFILE" ; cat /opt/idempiere-server/utils/unix/idempiere-merge-debian.menu ; sed -n '1,/<\/Menu>/!p' "$MENUFILE" ) > "$TFILE" + cp -f "$TFILE" "$MENUFILE" + rm -f "$TFILE" + } + + if [ -f /etc/xdg/menus/gnome-applications.menu ] + then + mergefile /etc/xdg/menus/gnome-applications.menu + fi + if [ -f /etc/xdg/menus/kde-applications.menu ] + then + mergefile /etc/xdg/menus/kde-applications.menu + fi + if [ -f /etc/xdg/menus/applications.menu ] + then + mergefile /etc/xdg/menus/applications.menu + fi + +# End MODE=install +fi + +/bin/chown -R idempiere:idempiere /opt/idempiere-server +/bin/chown idempiere:idempiere /etc/default/idempiere +/bin/chown idempiere:idempiere /etc/init.d/idempiere +/bin/chown idempiere:idempiere /etc/xdg/menus/idempiere.menu +/bin/chown idempiere:idempiere /usr/share/applications/idempiere-backup.desktop +/bin/chown idempiere:idempiere /usr/share/applications/idempiere-gotoonlineforum.desktop +/bin/chown idempiere:idempiere /usr/share/applications/idempiere-homepage.desktop +/bin/chown idempiere:idempiere /usr/share/applications/idempiere-readdocumentation.desktop +/bin/chown idempiere:idempiere /usr/share/applications/idempiere-restore.desktop +/bin/chown idempiere:idempiere /usr/share/applications/idempiere-startserver.desktop +/bin/chown idempiere:idempiere /usr/share/applications/idempiere-webclient.desktop +/bin/chown idempiere:idempiere /usr/share/desktop-directories/idempiere.directory +/bin/chown idempiere:idempiere /usr/share/desktop-directories/idempiere-gethelp.directory +/bin/chown idempiere:idempiere /usr/share/pixmaps/idempiere-backup.png +/bin/chown idempiere:idempiere /usr/share/pixmaps/idempiere-gethelp.png +/bin/chown idempiere:idempiere /usr/share/pixmaps/idempiere-gotoonlineforum.png +/bin/chown idempiere:idempiere /usr/share/pixmaps/idempiere.png +/bin/chown idempiere:idempiere /usr/share/pixmaps/idempiere-readdocumentation.png +/bin/chown idempiere:idempiere /usr/share/pixmaps/idempiere-restore.png +/bin/chown idempiere:idempiere /usr/share/pixmaps/idempiere-start.png + +CONFIGURATION=/etc/default/idempiere +[ -f "$CONFIGURATION" ] && . "$CONFIGURATION" + +if [ "$CONFIGURE_RUN" != "true" ] +then + echo "You must run '/etc/init.d/idempiere configure' as the root user to configure the application." + echo +fi + +exit 0 diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/postrm b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/postrm new file mode 100755 index 0000000000..400342de22 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/postrm @@ -0,0 +1,70 @@ +#!/bin/sh + +case "$1" in +remove|purge) + ;; +*) + exit 0 + ;; +esac + +if [ "$1" = "purge" ] ; then + update-rc.d idempiere remove >/dev/null || exit 0 +fi + + +case "$1" in +purge) + rm -fr /opt/idempiere-server + # rm -fr /etc/default/idempiere + # rm -fr /etc/init.d/idempiere + # rm -fr /etc/xdg/menus/idempiere.menu + rm -fr /usr/share/desktop-directories/idempiere-gethelp.directory + rm -fr /usr/share/desktop-directories/idempiere.directory + rm -fr /usr/share/pixmaps/idempiere-restore.png + rm -fr /usr/share/pixmaps/idempiere.png + rm -fr /usr/share/pixmaps/idempiere-gethelp.png + rm -fr /usr/share/pixmaps/idempiere-gotoonlineforum.png + rm -fr /usr/share/pixmaps/idempiere-backup.png + rm -fr /usr/share/pixmaps/idempiere-start.png + rm -fr /usr/share/pixmaps/idempiere-readdocumentation.png + rm -fr /usr/share/applications/idempiere-gotoonlineforum.desktop + rm -fr /usr/share/applications/idempiere-homepage.desktop + rm -fr /usr/share/applications/idempiere-webclient.desktop + rm -fr /usr/share/applications/idempiere-readdocumentation.desktop + rm -fr /usr/share/applications/idempiere-restore.desktop + rm -fr /usr/share/applications/idempiere-startserver.desktop + rm -fr /usr/share/applications/idempiere-backup.desktop + ;; +*) + ;; +esac + +mergefile() +{ + MENUFILE="$1" + if [ -z "$MENUFILE" ] + then + return + fi + + TFILE="$(mktemp)" || TFILE="/tmp/idempiereapplications.tmp" + sed -n '/<\!\-- iDempiere \-->/,/<\!\-- End of iDempiere \-->/!p' "$MENUFILE" > "$TFILE" + cp -f "$TFILE" "$MENUFILE" + rm -f "$TFILE" +} + +if [ -f /etc/xdg/menus/gnome-applications.menu ] +then + mergefile /etc/xdg/menus/gnome-applications.menu +fi +if [ -f /etc/xdg/menus/kde-applications.menu ] +then + mergefile /etc/xdg/menus/kde-applications.menu +fi +if [ -f /etc/xdg/menus/applications.menu ] +then + mergefile /etc/xdg/menus/applications.menu +fi + +exit 0 diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/preinst b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/preinst new file mode 100755 index 0000000000..b2d02c211a --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/preinst @@ -0,0 +1,48 @@ +#!/bin/sh + +if [ "$1" != "install" -o -n "$2" ] +then + exit 0 +fi + +# User must be root + +if [ $(id -u) != "0" ] +then + echo "You must be the root to install the software" >&2 + exit 1 +fi + +# IDEMPIERE_HOME must be unset +if `env | grep -q IDEMPIERE_HOME` +then + unset IDEMPIERE_HOME +fi + +# Check for sufficient diskspace +if [ -d /opt/idempiere-server ] +then + diskspace=`df -k /opt/idempiere-server | grep % | tr -s " " | cut -d" " -f4 | tail -1` + diskspace=`expr $diskspace / 1024` + if [ $diskspace -lt 1024 ] + then + echo "You have insufficient diskspace in the destination directory (/opt/idempiere-server) +to install idempiere The installation requires at +least 1 GB free on this disk." + exit 1 + fi +else + diskspace=`df -k /usr/lib | grep % | tr -s " " | cut -d" " -f4 | tail -1` + diskspace=`expr $diskspace / 1024` + if [ $diskspace -lt 1024 ] + then + echo "You have insufficient diskspace in the destination directory (/usr/lib) to +install idempiere. The installation requires at +least 1 GB free on this disk." + exit 1 + fi +fi + +# Don't fail, even on sysctl errors +exit 0 + diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/prerm b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/prerm new file mode 100755 index 0000000000..002961f4ea --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/DEBIAN/prerm @@ -0,0 +1,17 @@ +#!/bin/sh + + +if [ "$1" != "remove" ] +then + exit 0 +fi + +if [ -x "/etc/init.d/idempiere" ]; then + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then + invoke-rc.d idempiere stop || exit 0 + else + /etc/init.d/idempiere stop || exit 0 + fi +fi + +exit 0 diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/default/idempiere b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/default/idempiere new file mode 100644 index 0000000000..e9ae86c3ed --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/default/idempiere @@ -0,0 +1,3 @@ +# +# Please run "/etc/init.d/idempiere configure" to configure iDempiere. +# diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/init.d/idempiere b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/init.d/idempiere new file mode 100755 index 0000000000..e3371ef1fb --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/init.d/idempiere @@ -0,0 +1,736 @@ +#!/bin/bash +# + +### BEGIN INIT INFO +# Provides: idempiere +# Required-Start: postgresql +# Required-Stop: postgresql +# Default-Start: 2 3 4 5 +# Default-Stop: 1 +# Short-Description: iDempiere server +# Description: Provides iDempiere ERP-CRM Server startup and shutdown script. Requires PostgreSQL server. +# FileTarget: /etc/init.d/idempiere +# FileOwner: root.root +# FilePerms: 0755 +# +# chkconfig: 2345 97 06 +### END INIT INFO + +# processname: idempiere +# Red Hat or SuSE config: /etc/sysconfig/idempiere +# Debian or Ubuntu config: /etc/default/idempiere + +# Source function library +if [ -f /lib/lsb/init-functions ] +then + . /lib/lsb/init-functions +elif [ -f /etc/init.d/functions ] +then + . /etc/init.d/functions +fi + +# Set path if path not set (if called from /etc/rc) +case $PATH in + "") PATH=/bin:/usr/bin:/sbin:/etc + export PATH ;; +esac + +# initialization +# adjust these variables to your environment +IDEMPIERE_USER=idempiere +IDEMPIERE_HOME=/opt/idempiere-server +JAVA_HOME=`ls -r /usr/lib/jvm/java-[67]-openjdk*/bin/javac | head -1` +JAVA_HOME=`dirname $JAVA_HOME` +JAVA_HOME=`dirname $JAVA_HOME` +SU=su +export IDEMPIERE_HOME + +if [ $(id -u) != "0" ] +then + echo "You must be root to run the configure script. Login as root and then run the configure script." + exit 1 +fi + +RETVAL=0 +IDEMPIERESTATUS= +MAXSECONDS=120 # max wait 2 minutes +SLEEPSECONDS=2 +MAXITERATIONS=`expr $MAXSECONDS / $SLEEPSECONDS` + +CONFIG_NAME=idempiere +CONFIGURATION="/etc/sysconfig/$CONFIG_NAME" +if [ -f /etc/redhat-release ] +then + . /etc/init.d/functions + + init_status() + { + return 0 + } + exit_status() + { + exit $? + } + success_status() + { + success + echo + } + failure_status() + { + failure $? + echo + } + +elif [ -f /etc/SuSE-release ] +then + . /etc/rc.status + + init_status() + { + rc_reset + } + success_status() + { + echo "OK" + return 0 + } + failure_status() + { + echo "Failed" + return 1 + } + exit_status() + { + exit $? + } + +else + if [ -d /etc/default ] + then + CONFIGURATION="/etc/default/$CONFIG_NAME" + fi + + init_status() + { + return 0 + } + + success_status() + { + echo "OK" + return 0 + } + + failure_status() + { + echo "Failed" + return 0 + } + + exit_status() + { + exit $? + } +fi + +# Source configuration + +[ -f "$CONFIGURATION" ] && . "$CONFIGURATION" + +init_status + +# +# if_fail() +# +# Evaluates return codes. If 0, prints "OK", if 1, prints "Failed" +# and exits. If 2, status is "already done" and nothing is printed. +# The rest of the functions in here all honor this convention. +# +if_fail() +{ + RC="$1" + REASON="$2" + if [ "$RC" = "0" ] + then + return + elif [ "$RC" = "2" ] + then + return + fi + failure_status "${REASON}" + exit 1 +} + +# +# write_sysconfig() +# +# Writes the system configuration +# +write_sysconfig() +{ + cat >"$CONFIGURATION" < /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo "Error deploying iDempiere, please verify and try again" + exit 1 + fi + + if [ "x${ADEMPIERE_DB_SYSTEM}" = "x^TryLocalConnection^" ] + then + # recreate idempiere user from here as the RUN_ImportIdempiere requires it + $SU postgres -c "dropdb -U postgres idempiere" # > /dev/null 2>&1 + $SU postgres -c "dropuser -U postgres idempiere" # > /dev/null 2>&1 + $SU postgres -c "psql -U postgres -c \"CREATE ROLE adempiere SUPERUSER LOGIN PASSWORD '${ADEMPIERE_DB_PASSWORD}'\"" # > /dev/null 2>&1 + fi + + if [ -f ${IDEMPIERE_HOME}/utils/RUN_ImportIdempiere.sh ] + then + echo -n "Importing seed database..." + $SU ${IDEMPIERE_USER} -c "cd ${IDEMPIERE_HOME}/utils; ( echo "" | ./RUN_ImportIdempiere.sh )" # > /dev/null 2>&1 + echo "Done" + fi + $SU ${IDEMPIERE_USER} -c "export PGPASSWORD=${ADEMPIERE_DB_PASSWORD}; psql -d idempiere -U adempiere -h localhost -p 5432 -c ''" > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo "Cannot connect to idempiere database, please verify and try again" + exit 1 + fi + $SU ${IDEMPIERE_USER} -c "export PGPASSWORD=${ADEMPIERE_DB_PASSWORD}; psql -d idempiere -U adempiere -h localhost -p 5432 -c 'select count(*) from ad_system' 2>&1 | grep '1$'" > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo "Database not imported correctly, please verify and try again" + exit 1 + fi + + chmod 700 ${IDEMPIERE_HOME}/utils/myEnvironment.* + + echo "Installation Completed Successfully." + + return 0 +} + +checkportused() +{ +port=`netstat -n --tcp --listen | grep :$1 | awk '{print $4}' | cut -d':' -f2` +if [ "$port" = "$1" ] +then + return 0 # Used +else + return 1 # Not Used +fi +} + +# +#configure_ask() +# +# Ask configuration questions,setting the variables. +# +configure_ask() +{ + cat < to accept the defaults. +Ctrl-C will abort. + +EOF + # TODO: ask for certificate data (or integrate with openssl certificate) + # TODO: ask for mail server settings + # TODO: ask for postgres port (and perhaps machine if it's remote) + + # Check not configurable tomcat ports (i.e. 8005, 8009) + for TOMCATPORT in 8005 8009 + do + if checkportused "$TOMCATPORT" + then + echo Port $TOMCATPORT is required by iDempiere ERP server and it appears to be in use by another application.\ + Please fix the problem and try again. + exit 1 + fi + done + + #get the http port value + while : + do + while [ 1 ] + do + echo -n Specify the HTTP port that will be used for iDempiere server [8080]: + read LINE + if [ -z $LINE ] + then + LINE=8080 + fi + if checkportused "$LINE" + then + echo Port $port appears to be in use by another application.\ + Please specify a different port. + else + break; + fi + done + + case "$LINE" in + "") + break + ;; + *[^0-9]*) + echo "Invalid http port: $LINE" + ;; + *) + ADEMPIERE_WEB_PORT=$LINE + break + ;; + esac + done + + #get the https port value + while : + do + while [ 1 ] + do + echo -n Specify the HTTPS port that will be used for iDempiere server [8443]: + read LINE + if [ -z $LINE ] + then + LINE=8443 + fi + if checkportused "$LINE" + then + echo Port $port appears to be in use by another application.\ + Please specify a different port. + else + break; + fi + done + + case "$LINE" in + "") + break + ;; + *[^0-9]*) + echo "Invalid https port: $LINE" + ;; + *) + ADEMPIERE_SSL_PORT=$LINE + break + ;; + esac + done + + #get the idempiere database password + while : + do + echo -n "Specify a password to be used for adempiere database account:" + while [ 1 ] + do + stty -echo > /dev/null 2>&1 + temp=`echo $IFS` + export IFS="\n" + while [ 1 ] + do + read LINE + while [ -z "$LINE" ] + do + echo + echo -n "Password can't be null. Enter password:" + read LINE + done + + result=`expr index "$LINE" [\'\"]` + if [ $result != 0 ]; + then + echo + echo -n "The password you entered contains invalid characters. Enter password:" + else + break + fi + done + echo + echo -n "Confirm the password:" + read LINE1 + echo + if [ "$LINE" != "$LINE1" ]; + then + echo + echo -n "Passwords do not match. Enter the password:" + else + break + fi + done + stty echo > /dev/null 2>&1 + ADEMPIERE_DB_PASSWORD=$LINE + export IFS=$temp + break; + done + + #get the postgres database password + while : + do + echo -n "Specify the password of the user postgres on postgres database +(if empty then local connection will be tried):" + while [ 1 ] + do + stty -echo > /dev/null 2>&1 + temp=`echo $IFS` + export IFS="\n" + while [ 1 ] + do + read LINE + if [ -z "$LINE" ] + then + break + fi + + result=`expr index "$LINE" [\'\"]` + if [ $result != 0 ]; + then + echo + echo -n "The password you entered contains invalid characters. Enter password:" + else + break + fi + done + echo + if [ -z "$LINE" ] + then + # Empty postgres password verify connection with local postgres user + $SU postgres -c "psql -U postgres -c ''" + if [ $? -eq 0 ] + then + break + fi + echo -n "Could not connect locally with user postgres. +NOTE: You can verify pg_hba.conf to check if this line is enabled +local all postgres ident +Enter postgres password:" + else + PGPASSWORD=$LINE + export PGPASSWORD + psql -U postgres -d template1 -h localhost -p 5432 -c '' + if [ $? -eq 0 ] + then + break + fi + echo -n "Could not connect with user postgres to database template with such password. +NOTE: You can check the file pg_hba.conf to validate that connection is allowed, + or check that postgresql server allows tcp/ip connections on port 5432 + or check that user postgres database password is correctly set. +Enter postgres password:" + fi + done + stty echo > /dev/null 2>&1 + if [ -z "$LINE" ] + then + LINE="^TryLocalConnection^" + fi + ADEMPIERE_DB_SYSTEM=$LINE + export IFS=$temp + break; + done + + while : + do + if [ "${RUN_AT_STARTUP}" = "true" ] + then + CUR=y + else + CUR=n + fi + echo + echo -n "Do you want iDempiere ERP Server to be started on boot (y/n) [y]:" + read LINE + if [ -z $LINE ] + then + RUN_AT_STARTUP=true + fi + echo + case "$LINE" in + "") + break + ;; + y|Y) + RUN_AT_STARTUP=true + break + ;; + n|N) + RUN_AT_STARTUP=false + break + ;; + *) + echo "Invalid response: $LINE " >&2 + break + esac + done +} + +getidempierestatus() { + IDEMPIERESTATUSSTRING=$(ps ax | grep -v grep | grep ${IDEMPIERE_HOME}) + echo $IDEMPIERESTATUSSTRING | grep -q ${IDEMPIERE_HOME} + IDEMPIERESTATUS=$? +} + +configure() +{ + if [ "${CONFIGURE_RUN}" = "true" ] + then + echo "iDempiere is already configured" + exit 1 + fi + configure_ask + configure_perform + CONFIGURE_RUN=true + write_sysconfig + echo To access the iDempiere Server Home Page, start the server with '/etc/init.d/idempiere start' + echo and then go to \"http://127.0.0.1:${ADEMPIERE_WEB_PORT}\" + +} + +start () { + + if [ "${CONFIGURE_RUN}" != "true" ] + then + echo "iDempiere is not configured. You must run +'/etc/init.d/idempiere configure' as the root user to configure the server." + exit 0 + fi + + getidempierestatus + if [ $IDEMPIERESTATUS -eq 0 ] ; then + echo "iDempiere is already running" + return 1 + fi + echo -n "Starting iDempiere ERP: " + export LOGFILE=$IDEMPIERE_HOME/log/idempiere_`date +%Y%m%d%H%M%S`.log + $SU ${IDEMPIERE_USER} -c "mkdir -p $IDEMPIERE_HOME/log" + $SU ${IDEMPIERE_USER} -c "cd $IDEMPIERE_HOME;$IDEMPIERE_HOME/idempiere-server.sh &> $LOGFILE &" + RETVAL=$? + if [ $RETVAL -eq 0 ] ; then + # wait for server to be confirmed as started in logfile + STATUSTEST=0 + ITERATIONS=0 + while [ $STATUSTEST -eq 0 ] ; do + sleep $SLEEPSECONDS + tail -n 9 $LOGFILE | grep -q '.*WebUIServlet.*started successfully.*' && STATUSTEST=1 + echo -n "." + ITERATIONS=`expr $ITERATIONS + 1` + if [ $ITERATIONS -gt $MAXITERATIONS ] + then + break + fi + done + if [ $STATUSTEST -eq 0 ] + then + log_warning_msg "Service hasn't started within the timeout allowed, please review file $LOGFILE to see the status of the service" + else + log_success_msg "Service started" + fi + echo + else + log_failure_msg "Service not started" + echo + fi + RETVAL=$? + return $RETVAL +} + +stop () { + + if [ "${CONFIGURE_RUN}" != "true" ] + then + echo "iDempiere is not configured. You must run +'/etc/init.d/idempiere configure' as the root user to configure the server." + exit 0 + fi + + getidempierestatus + if [ $IDEMPIERESTATUS -ne 0 ] ; then + echo "iDempiere is already stopped" + return 1 + fi + echo -n "Stopping iDempiere ERP: " + cd $IDEMPIERE_HOME/utils + log_warning_msg "Trying direct kill with signal -15" + # try direct kill with signal 15, then signal 9 + kill -15 -`ps ax o pgid,command | grep -v grep | grep $IDEMPIERE_HOME | sed -e 's/^ *//g' | cut -f 1 -d " " | sort -u` + sleep 5 + getidempierestatus + if [ $IDEMPIERESTATUS -ne 0 ] ; then + log_success_msg "Service stopped with kill -15" + else + echo "Trying direct kill with signal -9" + kill -9 -`ps ax o pgid,command | grep -v grep | grep $IDEMPIERE_HOME | sed -e 's/^ *//g' | cut -f 1 -d " " | sort -u` + sleep 5 + getidempierestatus + if [ $IDEMPIERESTATUS -ne 0 ] ; then + log_success_msg "Service stopped with kill -9" + else + log_warning_msg "Service hasn't stopped" + fi + fi + return $RETVAL +} + +restart () { + stop + sleep $SLEEPSECONDS + start +} + +condrestart () { + getidempierestatus + if [ $IDEMPIERESTATUS -eq 0 ] ; then + restart + fi +} + +dostatus () { + getidempierestatus + if [ $IDEMPIERESTATUS -eq 0 ] ; then + echo + echo "iDempiere is running:" + ps ax | grep -v grep | grep ${IDEMPIERE_HOME} | sed 's/^[[:space:]]*\([[:digit:]]*\).*:[[:digit:]][[:digit:]][[:space:]]\(.*\)/\1 \2/' + echo + else + echo "iDempiere is stopped" + fi +} + +case "$1" in + start) + if test -f "$CONFIGURATION" + then + if test "${RUN_AT_STARTUP}" != "true" + then + exit 0 + fi + else + echo "iDempiere is not configured. You must run +'/etc/init.d/idempiere configure' as the root user to configure the server." + exit 0 + fi + start + ;; + configure) + configure + ;; + stop) + stop + ;; + restart|reload|force-reload) + restart + ;; + condrestart) + condrestart + ;; + status) + dostatus + ;; + enable) + if test -f "$CONFIGURATION" + then + RUN_AT_STARTUP=true + write_sysconfig + else + echo "iDempiere is not configured. You must run +'/etc/init.d/idempiere configure' as the root user to configure the server." + exit 0 + fi + ;; + disable) + if test -f "$CONFIGURATION" + then + RUN_AT_STARTUP=false + write_sysconfig + else + echo "iDempiere is not configured. You must run +'/etc/init.d/idempiere configure' as the root user to configure the server." + exit 0 + fi + ;; + *) + echo $"Usage: $0 {start|stop|restart|force-reload|configure|status|enable|disable}" + exit 1 + +esac + +exit 0 diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/xdg/menus/idempiere.menu b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/xdg/menus/idempiere.menu new file mode 100644 index 0000000000..e535b45241 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/etc/xdg/menus/idempiere.menu @@ -0,0 +1,23 @@ + + + iDempiere ERP + idempiere.directory + + + idempiere-startserver.desktop + idempiere-homepage.desktop + idempiere-webclient.desktop + idempiere-backup.desktop + idempiere-restore.desktop + + + Get Help + idempiere-gethelp.directory + + + idempiere-gotoonlineforum.desktop + idempiere-readdocumentation.desktop + + + + diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-backup.desktop b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-backup.desktop new file mode 100644 index 0000000000..f8a81dc75f --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-backup.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Exec=gksudo "su -c idempiere '/opt/idempiere-server/utils/RUN_DBExport.sh'" +Terminal=true +MultipleArgs=true +Type=Application +Categories=Applications; +Icon=idempiere-backup.png +Encoding=UTF-8 +Name=Backup Database +Name[es]=Copia de Seguridad de Base de Datos diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-gotoonlineforum.desktop b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-gotoonlineforum.desktop new file mode 100644 index 0000000000..9675e8a639 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-gotoonlineforum.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Terminal=false +MultipleArgs=true +Type=Link +URL=https://groups.google.com/forum/?fromgroups#!forum/idempiere +Categories=Applications; +Icon=idempiere-gotoonlineforum.png +Encoding=UTF-8 +Name=Go To Online Forum +Name[es]=Ir a Foro en Línea diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-homepage.desktop b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-homepage.desktop new file mode 100644 index 0000000000..8a0e4284c3 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-homepage.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Terminal=false +MultipleArgs=true +Type=Link +URL=http://localhost:8080 +Categories=Applications; +Icon=idempiere.png +Encoding=UTF-8 +Name=iDempiere Homepage +Name[es]=Página Principal iDempiere diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-readdocumentation.desktop b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-readdocumentation.desktop new file mode 100644 index 0000000000..366891bb13 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-readdocumentation.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Terminal=false +MultipleArgs=true +Type=Link +URL=http://wiki.idempiere.org +Categories=Applications; +Icon=idempiere-readdocumentation.png +Encoding=UTF-8 +Name=Read Documentation +Name[es]=Leer Documentación diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-restore.desktop b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-restore.desktop new file mode 100644 index 0000000000..a6bbef0a0f --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-restore.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Exec=gksudo "su -c idempiere '/opt/idempiere-server/utils/RUN_DBRestore.sh'" +Terminal=true +MultipleArgs=true +Type=Application +Categories=Applications; +Icon=idempiere-restore.png +Encoding=UTF-8 +Name=Restore Database +Name[es]=Restaurar Base de Datos diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-startserver.desktop b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-startserver.desktop new file mode 100644 index 0000000000..49830347c8 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-startserver.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Exec=gksudo "su -c idempiere '/opt/idempiere-server/idempiere-server.sh'" +Terminal=true +MultipleArgs=true +Type=Application +Categories=Applications; +Icon=idempiere-start.png +Encoding=UTF-8 +Name=Start Server +Name[es]=Iniciar Servidor diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-webclient.desktop b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-webclient.desktop new file mode 100644 index 0000000000..5d460a1649 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/applications/idempiere-webclient.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Terminal=false +MultipleArgs=true +Type=Link +URL=https://localhost:8443/webui +Categories=Applications; +Icon=idempiere-gotoonlineforum.png +Encoding=UTF-8 +Name=iDempiere Web Client +Name[es]=Cliente Web iDempiere diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/desktop-directories/idempiere-gethelp.directory b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/desktop-directories/idempiere-gethelp.directory new file mode 100644 index 0000000000..3ffeb47674 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/desktop-directories/idempiere-gethelp.directory @@ -0,0 +1,6 @@ +[Desktop Entry] +Icon=idempiere-gethelp.png +Type=Directory +Encoding=UTF-8 +Name=Get Help +Name[es]=Obtener Ayuda diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/desktop-directories/idempiere.directory b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/desktop-directories/idempiere.directory new file mode 100644 index 0000000000..a5c5ce0357 --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/desktop-directories/idempiere.directory @@ -0,0 +1,7 @@ +[Desktop Entry] +Icon=idempiere.png +Type=Directory +Encoding=UTF-8 + +Name=iDempiere ERP +Name[es]=iDempiere ERP diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-backup.png b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-backup.png new file mode 100644 index 0000000000000000000000000000000000000000..950eb7444011e863eb1b138a8705c821d5c63091 GIT binary patch literal 2245 zcmV;$2s-zPP)eS10VWh8x^G^3Zb~ zilRO+Jw0v9(DfqPJ5oruCehTKK&qh*u|yQ%Xb8Gt&@2s(>!DC`FgjXAK3_&YXCXII zqOphqSutNgDPQnZ(>Px$<#*&qF75d9!5^O^C?@eGt{!-#>-rBO(a?qk3)|3pS3Bn2 z(F(`$Q1#8W87frFeY@kDs}gKO@>(&atk*`?Ss^3|h}!cNZ&jCSpK{Mi!`2u6qA8~@Bl zK0lO9VOlf^B@|Kfmo6k|*%mT;yaQ@*lh0K$V+o=-38RHP>4+PcBS9GBz!FF}=t2OC z?|lbYU_9JTHBKwX#%~&vA70si0_V?Pvp>10%j}txmcXuzMh%EfiU4ijad-rnc&4gC zG*U%0#E>7!g5@sfQffJF)@y2SZ+GnS+JlQ94`XDgXcmh$ip8=!G?>MObAzf?B%mCx z__8uQToiMNcAjBs2!&0LirAaGDC+GTdDaxQ&Y4~IEkb{{VOIWq9QRYtrZ~X!<#`I4 zrl-)*oTA0)O@%n;^OonbN@1?r9!j)(o?42$BIiNj>6sS44!jQheB&SS6uw0jS3-q8 z*49zDWh7~-sPEd;2ykNYO6QC7QP&k{sw%*P|Jgnz3zjPj)Rm44$EY4O)s+o~HmT7^ zB?#&oa(xEV$GnLHoKCb@#b%-h7%uT#XA)c#B=rH}f7y01YB@eTe3ppHm+we=k@Esv z6RzCsnwSE~O z&S*kQI*Dj33^Qbq1n2~)iq_0Qt5uiMRYk?B5*^F13S~rDp_T$30fU;JI}zsQ4lG{M zgWg3maq84HWJikBQ(Ra@qFuH?mG7WToX-l;v2gLihy>DTr@AgQ!3>+oq@&|fpi}sD z5s6!@0Xen4If;0E0wGg{X(*y(nO~q~5}8uj#cqeFyF7qM)HHLPMB7 z*7`9~lHbs$^nsw4^Y*Ii{8>6sD?m0@aE=rVc*aF+KJzfjEDNtMr~yr+fSW_cugoL( zPG%h*r6Yt@IE&9b`Q)w-r$k_kQXGU@u0|b(KFsrl#b*F7Lf8MUQEx!r?MHHY16F)) zH7pdd3tMUqa927u&gM-iRJfK6753+2r#GXt=gv36>f}=j2MUCSIRVd^tnvVy>p)G6 zJPckp@zXhnk-IX4qwl^cN>3J`QHulrP>4`?Igg`X$4Y`T`})q=6CBw5#H)Dy)ngd= z=$fS3I4KTjHYUH+)(i)&%@*3y7F0cgEerpIkB+^M{(-YTsC0rV396@I;JJb8|9l+l z32K<^3Yj&L1xx4P)X4!HedjFofkw1tnn)KCh(yEkC`N7Bc2pt3JQCAlB|Q3*&9(XI zhA{41vNO zg}%P47$v%y)P^fWy>h{#^Mr#+$tEQ%A(xdjy!XDCn0NROzky8=;c5BZ_U)K&J%A(o zUc!=fpNCHJeflr&p|gJ(?pd@J_uii&#~SgY$9~ACwohUKM8U;VM8S9rbrBsADic+a zI>7-r1-TH_57}s+nFsd1CctejR5Y$#yB4am68lbuarl*&kZi9bLj8K@$2XJ2;tiJmDO0aU=vQi-G}Un zD_B@wg=hD@hO!sJXV<%^++_NY7*-Ssb&)y;mQ-UaDYk4uF^jpc{qXPPy^Dt5lgjV)P9?e?NKo5K>R%? z@O-=j2M+96(bClOwQMf4mQ~eRtsRXl-PWkpH&Hc5!cYyJ&QK&owjvLreu_j2==sa* zR^yk?Y!~2Nvu0rH))#BNrL%iB_U-(=Ja>L!)s3~_-Q&Bj((tQjG_~vY*(>k9IM6aT z5>93sTQYa+dN}R6Zpd>ODFf3OlgIg1RkDB=;DX*e@H5ISFI1aJ2dncU-Legbc?39^Em9!a;sl!F$$NH_ zAHkD#lKE%Y3fZU+sQK?{0r2ESzVXfP{qKGq|0frpOY`_ou6EAp{{lbvZvh4XTA(wP TVc$I?00000NkvXXu0mjff%{8l literal 0 HcmV?d00001 diff --git a/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-gethelp.png b/org.adempiere.server-feature/utils.unix/unix/DebianInstaller/usr/share/pixmaps/idempiere-gethelp.png new file mode 100644 index 0000000000000000000000000000000000000000..06749feb375669fecb018f46dfd91f426dd30212 GIT binary patch literal 3752 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 $TMP/debian-binary +tar cvf $TMP/control.tar -C $RWD/DebianInstaller/DEBIAN . +gzip -v -9 $TMP/control.tar +tar cvf $TMP/data.tar -C $RWD/DebianInstaller/ ./usr +tar rvf $TMP/data.tar --exclude='idempiere.gtk.linux.x86_64/idempiere-server/utils/unix/createDEBpackage.sh' --exclude='idempiere.gtk.linux.x86_64/idempiere-server/utils/unix/DebianInstaller' --transform 's:^idempiere.gtk.linux.x86_64/idempiere-server:./opt/idempiere-server:' -C $RWD/../../../.. $PACKAGE > /dev/null +tar rvf $TMP/data.tar -C $RWD/DebianInstaller/ ./etc +gzip -v -9 $TMP/data.tar +cd $TMP +ar q $PACKFILE debian-binary control.tar.gz data.tar.gz +rm debian-binary control.tar.gz data.tar.gz +echo "Created $PACKFILE" diff --git a/org.adempiere.server-feature/utils.unix/unix/idempiere-merge-debian.menu b/org.adempiere.server-feature/utils.unix/unix/idempiere-merge-debian.menu new file mode 100644 index 0000000000..a9b41ebe0c --- /dev/null +++ b/org.adempiere.server-feature/utils.unix/unix/idempiere-merge-debian.menu @@ -0,0 +1,7 @@ + + + iDempiere + idempiere.menu + + + diff --git a/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/config/ConfigPostgreSQL.java b/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/config/ConfigPostgreSQL.java index 313651388d..f7019eab34 100755 --- a/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/config/ConfigPostgreSQL.java +++ b/org.compiere.db.postgresql.provider/src/org/adempiere/db/postgresql/config/ConfigPostgreSQL.java @@ -137,7 +137,12 @@ public class ConfigPostgreSQL implements IDatabaseConfig if (isDBExists) { log.warning(error); } else { - return error; + if ("^TryLocalConnection^".equals(systemPassword)) { + // Debian installer uses postgres socket domain connection + log.warning(error); + } else { + return error; + } } } if (log.isLoggable(Level.INFO)) log.info("OK: System Connection = " + urlSystem);