From 790c25497a9d7b9f1e12f1755a47fab80109ed6c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur <eldy@users.sourceforge.net> Date: Wed, 22 Jun 2011 23:33:30 +0000 Subject: [PATCH] Enhance packagers --- build/makepack-dolibarrlang.pl | 460 +++++++++++++-------------- build/makepack-dolibarrtheme.pl | 2 +- build/rpm/dolibarr.spec | 167 +++++++--- build/rpm/httpd-dolibarr.conf | 13 +- build/rpm/install.forced.php.install | 17 + build/tgz/tar_exclude.txt | 3 +- 6 files changed, 380 insertions(+), 282 deletions(-) create mode 100755 build/rpm/install.forced.php.install diff --git a/build/makepack-dolibarrlang.pl b/build/makepack-dolibarrlang.pl index 6d9e3e4b9c2..06ece335d26 100644 --- a/build/makepack-dolibarrlang.pl +++ b/build/makepack-dolibarrlang.pl @@ -8,307 +8,297 @@ use Cwd; -$PROJECT="dolibarr"; - -@LISTETARGET=("TGZ"); # Possible packages -%REQUIREMENTTARGET=( # Tool requirement for each package -"TGZ"=>"tar", -"ZIP"=>"7z", -"RPM"=>"rpmbuild", -"DEB"=>"dpkg-buildpackage", -"EXE"=>"makensis.exe" +$PROJECT = "dolibarr"; + +@LISTETARGET = ("TGZ"); # Possible packages +%REQUIREMENTTARGET = ( # Tool requirement for each package + "TGZ" => "tar", + "ZIP" => "7z", + "EXE" => "makensis.exe" ); -%ALTERNATEPATH=( -"7z"=>"7-ZIP", -"makensis.exe"=>"NSIS" +%ALTERNATEPATH = ( + "7z" => "7-ZIP", + "makensis.exe" => "NSIS" ); - use vars qw/ $REVISION $VERSION /; -$REVISION='$Revision$'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; -$VERSION="1.0 (build $REVISION)"; - - +$REVISION = '$Revision$'; +$REVISION =~ /\s(.*)\s/; +$REVISION = $1; +$VERSION = "1.0 (build $REVISION)"; #------------------------------------------------------------------------------ # MAIN #------------------------------------------------------------------------------ -($DIR=$0) =~ s/([^\/\\]+)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; -$DIR||='.'; $DIR =~ s/([^\/\\])[\\\/]+$/$1/; +( $DIR = $0 ) =~ s/([^\/\\]+)$//; +( $PROG = $1 ) =~ s/\.([^\.]*)$//; +$Extension = $1; +$DIR ||= '.'; +$DIR =~ s/([^\/\\])[\\\/]+$/$1/; # Detect OS type # -------------- -if ("$^O" =~ /linux/i || (-d "/etc" && -d "/var" && "$^O" !~ /cygwin/i)) { $OS='linux'; $CR=''; } -elsif (-d "/etc" && -d "/Users") { $OS='macosx'; $CR=''; } -elsif ("$^O" =~ /cygwin/i || "$^O" =~ /win32/i) { $OS='windows'; $CR="\r"; } -if (! $OS) { - print "makepack-dolbarrlang.pl was not able to detect your OS.\n"; +if ( "$^O" =~ /linux/i || ( -d "/etc" && -d "/var" && "$^O" !~ /cygwin/i ) ) { + $OS = 'linux'; + $CR = ''; +} +elsif ( -d "/etc" && -d "/Users" ) { $OS = 'macosx'; $CR = ''; } +elsif ( "$^O" =~ /cygwin/i || "$^O" =~ /win32/i ) { + $OS = 'windows'; + $CR = "\r"; +} +if ( !$OS ) { + print "makepack-dolbarrlang.pl was not able to detect your OS.\n"; print "Can't continue.\n"; print "makepack-dolibarrlang.pl aborted.\n"; - sleep 2; + sleep 2; exit 1; } # Define buildroot # ---------------- -if ($OS =~ /linux/) { - $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"/tmp"; +if ( $OS =~ /linux/ ) { + $TEMP = $ENV{"TEMP"} || $ENV{"TMP"} || "/tmp"; } -if ($OS =~ /macos/) { - $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"/tmp"; +if ( $OS =~ /macos/ ) { + $TEMP = $ENV{"TEMP"} || $ENV{"TMP"} || "/tmp"; } -if ($OS =~ /windows/) { - $TEMP=$ENV{"TEMP"}||$ENV{"TMP"}||"c:/temp"; - $PROGPATH=$ENV{"ProgramFiles"}; +if ( $OS =~ /windows/ ) { + $TEMP = $ENV{"TEMP"} || $ENV{"TMP"} || "c:/temp"; + $PROGPATH = $ENV{"ProgramFiles"}; } -if (! $TEMP || ! -d $TEMP) { - print "Error: A temporary directory can not be find.\n"; - print "Check that TEMP or TMP environment variable is set correctly.\n"; +if ( !$TEMP || !-d $TEMP ) { + print "Error: A temporary directory can not be find.\n"; + print "Check that TEMP or TMP environment variable is set correctly.\n"; print "makepack-dolibarrlang.pl aborted.\n"; - sleep 2; - exit 2; -} -$BUILDROOT="$TEMP/dolibarr-buildroot"; - + sleep 2; + exit 2; +} +$BUILDROOT = "$TEMP/dolibarr-buildroot"; -my $copyalreadydone=0; -my $batch=0; +my $copyalreadydone = 0; +my $batch = 0; print "Makepack langs version $VERSION\n"; print "Enter language code to package (en_US, fr_FR, ...) : "; -$PROJECT=<STDIN>; +$PROJECT = <STDIN>; chomp($PROJECT); + # TODO Autodetect version # Ask and set version $MAJOR and $MINOR print "Enter value for version: "; -$PROJVERSION=<STDIN>; +$PROJVERSION = <STDIN>; chomp($PROJVERSION); -($MAJOR,$MINOR)=split(/\./,$PROJVERSION,2); -if ($MINOR eq '') -{ +( $MAJOR, $MINOR ) = split( /\./, $PROJVERSION, 2 ); +if ( $MINOR eq '' ) { print "Enter value for minor version: "; - $MINOR=<STDIN>; + $MINOR = <STDIN>; chomp($MINOR); } +$FILENAME = "$PROJECT"; +$FILENAMETGZ = "lang_$PROJECT-$MAJOR.$MINOR"; +if ( -d "/usr/src/redhat" ) { -$FILENAME="$PROJECT"; -$FILENAMETGZ="lang_$PROJECT-$MAJOR.$MINOR"; -if (-d "/usr/src/redhat") { - # redhat - $RPMDIR="/usr/src/redhat"; -} -if (-d "/usr/src/RPM") { - # mandrake - $RPMDIR="/usr/src/RPM"; + # redhat + $RPMDIR = "/usr/src/redhat"; } +if ( -d "/usr/src/RPM" ) { -$SOURCE="$DIR/../../dolibarr"; -$DESTI="$SOURCE/build"; + # mandrake + $RPMDIR = "/usr/src/RPM"; +} +$SOURCE = "$DIR/../../dolibarr"; +$DESTI = "$SOURCE/build"; # Choose package targets #----------------------- -$target="TGZ"; # Les langs sont au format tgz +$target = "ZIP"; # Les langs sont au format zip if ($target) { - $CHOOSEDTARGET{uc($target)}=1; + $CHOOSEDTARGET{ uc($target) } = 1; } else { - my $found=0; - my $NUM_SCRIPT; - while (! $found) { - my $cpt=0; - printf(" %d - %3s (%s)\n",$cpt,"All","Need ".join(",",values %REQUIREMENTTARGET)); - foreach my $target (@LISTETARGET) { - $cpt++; - printf(" %d - %3s (%s)\n",$cpt,$target,"Need ".$REQUIREMENTTARGET{$target}); - } - - # Are asked to select the file to move - print "Choose one package number or several separated with space: "; - $NUM_SCRIPT=<STDIN>; - chomp($NUM_SCRIPT); - if ($NUM_SCRIPT =~ s/-//g) { - # Do not do copy - $copyalreadydone=1; - } - if ($NUM_SCRIPT !~ /^[0-$cpt\s]+$/) - { - print "This is not a valid package number list.\n"; - $found = 0; - } - else - { - $found = 1; - } - } - print "\n"; - if ($NUM_SCRIPT) { - foreach my $num (split(/\s+/,$NUM_SCRIPT)) { - $CHOOSEDTARGET{$LISTETARGET[$num-1]}=1; - } - } - else { - foreach my $key (@LISTETARGET) { - $CHOOSEDTARGET{$key}=1; - } - } + my $found = 0; + my $NUM_SCRIPT; + while ( !$found ) { + my $cpt = 0; + printf( " %d - %3s (%s)\n", + $cpt, "All", "Need " . join( ",", values %REQUIREMENTTARGET ) ); + foreach my $target (@LISTETARGET) { + $cpt++; + printf( " %d - %3s (%s)\n", + $cpt, $target, "Need " . $REQUIREMENTTARGET{$target} ); + } + + # Are asked to select the file to move + print "Choose one package number or several separated with space: "; + $NUM_SCRIPT = <STDIN>; + chomp($NUM_SCRIPT); + if ( $NUM_SCRIPT =~ s/-//g ) { + + # Do not do copy + $copyalreadydone = 1; + } + if ( $NUM_SCRIPT !~ /^[0-$cpt\s]+$/ ) { + print "This is not a valid package number list.\n"; + $found = 0; + } + else { + $found = 1; + } + } + print "\n"; + if ($NUM_SCRIPT) { + foreach my $num ( split( /\s+/, $NUM_SCRIPT ) ) { + $CHOOSEDTARGET{ $LISTETARGET[ $num - 1 ] } = 1; + } + } + else { + foreach my $key (@LISTETARGET) { + $CHOOSEDTARGET{$key} = 1; + } + } } # Test if requirement is ok #-------------------------- -foreach my $target (keys %CHOOSEDTARGET) { - foreach my $req (split(/[,\s]/,$REQUIREMENTTARGET{$target})) { - # Test - print "Test requirement for target $target: Search '$req'... "; - $ret=`"$req" 2>&1`; - $coderetour=$?; $coderetour2=$coderetour>>8; - if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/)) && $PROGPATH) { - # Not found error, we try in PROGPATH - $ret=`"$PROGPATH/$ALTERNATEPATH{$req}/$req\" 2>&1`; - $coderetour=$?; $coderetour2=$coderetour>>8; - $REQUIREMENTTARGET{$target}="$PROGPATH/$ALTERNATEPATH{$req}/$req"; - } - - if ($coderetour != 0 && (($coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i) || ($coderetour2 == 127 && $OS !~ /windows/))) { - # Not found error - print "Not found\nCan't build target $target. Requirement '$req' not found in PATH\n"; - $CHOOSEDTARGET{$target}=-1; - last; - } else { - # Pas erreur ou erreur autre que programme absent - print " Found ".$REQUIREMENTTARGET{$target}."\n"; - } - } +foreach my $target ( keys %CHOOSEDTARGET ) { + foreach my $req ( split( /[,\s]/, $REQUIREMENTTARGET{$target} ) ) { + + # Test + print "Test requirement for target $target: Search '$req'... "; + $ret = `"$req" 2>&1`; + $coderetour = $?; + $coderetour2 = $coderetour >> 8; + if ( + $coderetour != 0 + && ( ( $coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i ) + || ( $coderetour2 == 127 && $OS !~ /windows/ ) ) + && $PROGPATH + ) + { + + # Not found error, we try in PROGPATH + $ret = `"$PROGPATH/$ALTERNATEPATH{$req}/$req\" 2>&1`; + $coderetour = $?; + $coderetour2 = $coderetour >> 8; + $REQUIREMENTTARGET{$target} = "$PROGPATH/$ALTERNATEPATH{$req}/$req"; + } + + if ( + $coderetour != 0 + && ( ( $coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i ) + || ( $coderetour2 == 127 && $OS !~ /windows/ ) ) + ) + { + + # Not found error + print +"Not found\nCan't build target $target. Requirement '$req' not found in PATH\n"; + $CHOOSEDTARGET{$target} = -1; + last; + } + else { + + # Pas erreur ou erreur autre que programme absent + print " Found " . $REQUIREMENTTARGET{$target} . "\n"; + } + } } print "\n"; # Check if there is at least on target to build #---------------------------------------------- -$nboftargetok=0; -foreach my $target (keys %CHOOSEDTARGET) { - if ($CHOOSEDTARGET{$target} < 0) { next; } - $nboftargetok++; +$nboftargetok = 0; +foreach my $target ( keys %CHOOSEDTARGET ) { + if ( $CHOOSEDTARGET{$target} < 0 ) { next; } + $nboftargetok++; } if ($nboftargetok) { - # Update buildroot - #----------------- - if (! $copyalreadydone) { - print "Delete directory $BUILDROOT\n"; - $ret=`rm -fr "$BUILDROOT"`; - mkdir "$BUILDROOT"; - mkdir "$BUILDROOT/htdocs"; - mkdir "$BUILDROOT/htdocs/langs"; - mkdir "$BUILDROOT/htdocs/langs/$PROJECT"; - - print "Copy $SOURCE into $BUILDROOT\n"; - mkdir "$BUILDROOT"; - $ret=`cp -pr "$SOURCE/htdocs/langs/$PROJECT" "$BUILDROOT/htdocs/langs"`; - } - print "Clean $BUILDROOT\n"; - $ret=`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/Thumbs.db`; - $ret=`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/*/CVS*`; - - - # Build package for each target - #------------------------------ - foreach my $target (keys %CHOOSEDTARGET) { - if ($CHOOSEDTARGET{$target} < 0) { next; } - - print "\nBuild package for target $target\n"; - - if ($target eq 'TGZ') { - unlink $FILENAMETGZ.tgz; -# unlink $BUILDROOT/$FILENAMETGZ.tgz; - print "Compress $BUILDROOT/htdocs into $FILENAMETGZ.tgz...\n"; - $cmd="tar --exclude-vcs --exclude-from \"$DESTI/tgz/tar.exclude\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMETGZ.tgz\" htdocs"; - $ret=`$cmd`; + # Update buildroot + #----------------- + if ( !$copyalreadydone ) { + print "Delete directory $BUILDROOT\n"; + $ret = `rm -fr "$BUILDROOT"`; + mkdir "$BUILDROOT"; + mkdir "$BUILDROOT/htdocs"; + mkdir "$BUILDROOT/htdocs/langs"; + mkdir "$BUILDROOT/htdocs/langs/$PROJECT"; + + print "Copy $SOURCE into $BUILDROOT\n"; + mkdir "$BUILDROOT"; + $ret = + `cp -pr "$SOURCE/htdocs/langs/$PROJECT" "$BUILDROOT/htdocs/langs"`; + } + print "Clean $BUILDROOT\n"; + $ret = +`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/Thumbs.db`; + $ret = +`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/*/CVS*`; + + # Build package for each target + #------------------------------ + foreach my $target ( keys %CHOOSEDTARGET ) + { + if ( $CHOOSEDTARGET{$target} < 0 ) { next; } + + print "\nBuild package for target $target\n"; + + if ( $target eq 'TGZ' ) + { + unlink $FILENAMETGZ . tgz; + + # unlink $BUILDROOT/$FILENAMETGZ.tgz; + print "Compress $BUILDROOT/htdocs into $FILENAMETGZ.tgz...\n"; + $cmd = +"tar --exclude-vcs --exclude-from \"$DESTI/tgz/tar.exclude\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMETGZ.tgz\" htdocs"; + $ret = `$cmd`; + # $cmd="tar --exclude-vcs --exclude-from \"$DESTI/tgz/tar.exclude\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$BUILDROOT/$FILENAMETGZ.tgz\" htdocs\n"; # $ret=`$cmd`; - if ($OS =~ /windows/i) { - print "Move $FILENAMETGZ.tgz to $DESTI/$FILENAMETGZ.tgz\n"; - $ret=`mv "$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`; -# $ret=`mv "$BUILDROOT/$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`; - } - next; - } - - if ($target eq 'ZIP') { - unlink $FILENAMEZIP.zip; - print "Compress $FILENAMETGZ into $FILENAMEZIP.zip...\n"; - chdir("$BUILDROOT"); - #print "cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*\n"; - #$ret=`cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`; - $ret=`7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`; - print "Move $FILENAMEZIP.zip to $DESTI\n"; - rename("$BUILDROOT/$FILENAMEZIP.zip","$DESTI/$FILENAMEZIP.zip"); - next; - } - - if ($target eq 'RPM') { # Linux only - $BUILDFIC="$FILENAME.spec"; - unlink $FILENAMETGZ.tgz; - print "Compress $FILENAMETGZ into $FILENAMETGZ.tgz...\n"; - $ret=`tar --exclude-from "$SOURCE/build/tgz/tar.exclude" --directory "$BUILDROOT" -czvf "$BUILDROOT/$FILENAMETGZ.tgz" $FILENAMETGZ`; - - print "Move $FILENAMETGZ.tgz to $RPMDIR/SOURCES/$FILENAMETGZ.tgz\n"; - $cmd="mv \"$BUILDROOT/$FILENAMETGZ.tgz\" \"$RPMDIR/SOURCES/$FILENAMETGZ.tgz\""; - $ret=`$cmd`; - - print "Copy $SOURCE/make/rpm/${BUILDFIC} to $BUILDROOT\n"; -# $ret=`cp -p "$SOURCE/make/rpm/${BUILDFIC}" "$BUILDROOT"`; - open (SPECFROM,"<$SOURCE/make/rpm/${BUILDFIC}") || die "Error"; - open (SPECTO,">$BUILDROOT/$BUILDFIC") || die "Error"; - while (<SPECFROM>) { - $_ =~ s/__VERSION__/$MAJOR.$MINOR.$BUILD/; - print SPECTO $_; - } - close SPECFROM; - close SPECTO; - - print "Launch RPM build (rpm --clean -ba $BUILDROOT/${BUILDFIC})\n"; - $ret=`rpm --clean -ba $BUILDROOT/${BUILDFIC}`; - - print "Move $RPMDIR/RPMS/noarch/${FILENAMERPM}.noarch.rpm into $DESTI/${FILENAMERPM}.noarch.rpm\n"; - $cmd="mv \"$RPMDIR/RPMS/noarch/${FILENAMERPM}.noarch.rpm\" \"$DESTI/${FILENAMERPM}.noarch.rpm\""; - $ret=`$cmd`; - next; - } - - if ($target eq 'DEB') { - print "Automatic build for DEB is not yet supported.\n"; - } - - if ($target eq 'EXE') { - unlink "$FILENAMEEXE.exe"; - print "Compress into $FILENAMEEXE.exe by $FILENAMEEXE.nsi...\n"; - $command="\"$REQUIREMENTTARGET{$target}\" /DMUI_VERSION_DOT=$MAJOR.$MINOR.$BUILD /X\"SetCompressor bzip2\" \"$SOURCE\\build\\exe\\$FILENAME.nsi\""; - print "$command\n"; - $ret=`$command`; - print "Move $FILENAMEEXE.exe to $DESTI\n"; - rename("$SOURCE\\build\\exe\\$FILENAMEEXE.exe","$DESTI/$FILENAMEEXE.exe"); - next; - } - - } - + if ( $OS =~ /windows/i ) { + print "Move $FILENAMETGZ.tgz to $DESTI/$FILENAMETGZ.tgz\n"; + $ret = `mv "$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`; + + # $ret=`mv "$BUILDROOT/$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`; + } + next; + } + + if ( $target eq 'ZIP' ) + { + unlink $FILENAMEZIP . zip; + print "Compress $FILENAMETGZ into $FILENAMEZIP.zip...\n"; + chdir("$BUILDROOT"); + +#print "cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*\n"; +#$ret=`cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`; + $ret = + `7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`; + print "Move $FILENAMEZIP.zip to $DESTI\n"; + rename( "$BUILDROOT/$FILENAMEZIP.zip", "$DESTI/$FILENAMEZIP.zip" ); + next; + } + } } print "\n----- Summary -----\n"; -foreach my $target (keys %CHOOSEDTARGET) { - if ($CHOOSEDTARGET{$target} < 0) { - print "Package $target not built (bad requirement).\n"; - } else { - print "Package $target built succeessfully in $DESTI\n"; - } +foreach my $target ( keys %CHOOSEDTARGET ) { + if ( $CHOOSEDTARGET{$target} < 0 ) { + print "Package $target not built (bad requirement).\n"; + } + else { + print "Package $target built succeessfully in $DESTI\n"; + } } -if (! $btach) { - print "\nPress key to finish..."; - my $WAITKEY=<STDIN>; +if ( !$btach ) { + print "\nPress key to finish..."; + my $WAITKEY = <STDIN>; } 0; diff --git a/build/makepack-dolibarrtheme.pl b/build/makepack-dolibarrtheme.pl index 9d2cf83fe3e..6730f6f202b 100644 --- a/build/makepack-dolibarrtheme.pl +++ b/build/makepack-dolibarrtheme.pl @@ -109,7 +109,7 @@ $DESTI="$SOURCE/build"; # Choose package targets #----------------------- -$target="TGZ"; # Les themes sont au format tgz +$target="ZIP"; # Packages uses this format if ($target) { $CHOOSEDTARGET{uc($target)}=1; } diff --git a/build/rpm/dolibarr.spec b/build/rpm/dolibarr.spec index 7f74cec6503..3ea9dee9c29 100644 --- a/build/rpm/dolibarr.spec +++ b/build/rpm/dolibarr.spec @@ -1,11 +1,13 @@ +#--------------------------------------------------------- +# Spec file to build a rpm file +# +# This is an example to build a rpm file. You can use this +# file to build a package for your own distributions and +# edit it if you need to match your rules. +# -------------------------------------------------------- %define name dolibarr %define version __VERSION__ -# For Mandrake -#%define release 1mdk -# For all other distrib %define release __RELEASE__ -%define filenametgz __FILENAMETGZ__ - Name: %{name} Version: %{version} @@ -29,7 +31,7 @@ Group: Networking/WWW # For all other distrib Group: Applications/Internet -Requires=httpd +Requires: mysql-server mysql httpd php php-cli php-gd php-ldap php-imap php-mysql AutoReqProv: yes @@ -58,19 +60,19 @@ echo Building %{name}-%{version}-%{release} %install rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/usr/local/dolibarr/build -mkdir -p $RPM_BUILD_ROOT/usr/local/dolibarr/doc -mkdir -p $RPM_BUILD_ROOT/usr/local/dolibarr/htdocs -mkdir -p $RPM_BUILD_ROOT/usr/local/dolibarr/scripts +mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/build +mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/doc +mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/htdocs +mkdir -p $RPM_BUILD_ROOT/var/www/dolibarr/scripts #mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/dolibarr #mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/cron.daily -install -m 444 README $RPM_BUILD_ROOT/usr/local/dolibarr/README -install -m 444 COPYRIGHT $RPM_BUILD_ROOT/usr/local/dolibarr/COPYRIGHT -cp -pr build $RPM_BUILD_ROOT/usr/local/dolibarr -cp -pr doc $RPM_BUILD_ROOT/usr/local/dolibarr -cp -pr htdocs $RPM_BUILD_ROOT/usr/local/dolibarr -cp -pr scripts $RPM_BUILD_ROOT/usr/local/dolibarr +install -m 444 README $RPM_BUILD_ROOT/var/www/dolibarr/README +install -m 444 COPYRIGHT $RPM_BUILD_ROOT/var/www/dolibarr/COPYRIGHT +cp -pr build $RPM_BUILD_ROOT/var/www/dolibarr +cp -pr doc $RPM_BUILD_ROOT/var/www/dolibarr +cp -pr htdocs $RPM_BUILD_ROOT/var/www/dolibarr +cp -pr scripts $RPM_BUILD_ROOT/var/www/dolibarr #---- clean @@ -83,39 +85,126 @@ rm -rf $RPM_BUILD_ROOT %defattr(-,root,root) %doc README %doc COPYRIGHT -%doc /usr/local/dolibarr/doc/* -#%config /usr/local/dolibarr/htdocs/conf/conf.php -%dir /usr/local/dolibarr/build -%dir /usr/local/dolibarr/htdocs -%dir /usr/local/dolibarr/scripts -/usr/local/dolibarr/build/* -/usr/local/dolibarr/htdocs/* -/usr/local/dolibarr/scripts/* -/usr/local/dolibarr/README -/usr/local/dolibarr/COPYRIGHT - -#---- post +%doc /var/www/dolibarr/doc/* +%dir /var/www/dolibarr/build +%dir /var/www/dolibarr/htdocs +%dir /var/www/dolibarr/scripts +/var/www/dolibarr/build/* +/var/www/dolibarr/htdocs/* +/var/www/dolibarr/scripts/* +/var/www/dolibarr/README +/var/www/dolibarr/COPYRIGHT +#%config /var/www/dolibarr/htdocs/conf/conf.php + +#---- post (after install) %post -# Create a config file -if [ 1 -eq 1 ]; then - if [ ! -f /%{_sysconfdir}/httpd/conf.d/dolibarr.conf ]; then - echo Create dolibarr web server config file - cp /usr/local/dolibarr/httpd-dolibarr.conf /%{_sysconfdir}/httpd/conf.d/dolibarr.conf - fi +# Dolibarr files are stored into /var/www +export targetdir='/var/www/dolibarr' +# Dolibarr uploaded files and generated documents are stored into /usr/share/dolibarr/documents +export docdir='/usr/share/dolibarr/documents' + + +# Create empty directory for uploaded files and generated documents +echo Create document directory $docdir +mkdir -p $docdir + +# Create install.forced.php into Dolibarr install directory +fileorig="$targetdir/build/rpm/install.forced.php.install" +config="$targetdir/htdocs/install/install.forced.php" +superuserlogin='' +superuserpassword='' +if [ -f %{_sysconfdir}/mysql/debian.cnf ] ; then + # Load superuser login and pass + superuserlogin=$(/bin/grep --max-count=1 "user" %{_sysconfdir}/mysql/debian.cnf | /bin/sed -e 's/^user[ =]*//g') + superuserpassword=$(/bin/grep --max-count=1 "password" %{_sysconfdir}/mysql/debian.cnf | /bin/sed -e 's/^password[ =]*//g') +fi +echo Mysql superuser found to use is $superuserlogin +if [ -z "$superuserlogin" ] ; then + cat $fileorig | sed -e 's/__SUPERUSERLOGIN__/root/g' | sed -e 's/__SUPERUSERPASSWORD__//g' > $config +else + cat $fileorig | sed -e 's/__SUPERUSERLOGIN__/'$superuserlogin'/g' | sed -e 's/__SUPERUSERPASSWORD__/'$superuserpassword'/g' > $config +fi + +# Create a config file %{_sysconfdir}/dolibarr/apache.conf +if [ ! -f %{_sysconfdir}/dolibarr/apache.conf ]; then + echo Create dolibarr web server config file %{_sysconfdir}/dolibarr/apache.conf + mkdir -p %{_sysconfdir}/dolibarr + cp $targetdir/build/rpm/httpd-dolibarr.conf %{_sysconfdir}/dolibarr/apache.conf + chmod a-x %{_sysconfdir}/dolibarr/apache.conf + chmod go-w %{_sysconfdir}/dolibarr/apache.conf +fi + +# Create a config link %{_sysconfdir}/httpd/conf.d/dolibarr.conf +if [ ! -f %{_sysconfdir}/httpd/conf.d/dolibarr.conf ]; then + echo Create dolibarr web server config link %{_sysconfdir}/httpd/conf.d/dolibarr.conf + ln -fs /etc/dolibarr/apache.conf %{_sysconfdir}/httpd/conf.d/dolibarr.conf +fi + +# Set permissions +echo Set permission on $targetdir +chown -R apache.apache $targetdir +chmod -R a-w $targetdir + +echo Set permission on $docdir +chown -R apache.apache $docdir +chmod -R o-w $docdir + +if [ -s /usr/bin/chcon ]; then + echo Set SELinux permissions + chcon -R -h -t httpd_sys_content_t $targetdir + chcon -R -h -t httpd_sys_content_t $docdir + chcon -R -h -t httpd_sys_script_rw_t $targetdir + chcon -R -h -t httpd_sys_script_rw_t $docdir + chcon -R -h -t httpd_sys_script_exec_t $targetdir +fi + +# Create empty conf.php file for web installer +if [ ! -s $targetdir/htdocs/conf/conf.php ]; then + echo Create empty Dolibarr conf.php file + touch $targetdir/htdocs/conf/conf.php + chown apache.apache $targetdir/htdocs/conf/conf.php + chmod ug+rw $targetdir/htdocs/conf/conf.php fi -# /%{_sysconfdir}/dolibarr/dolibarr.`hostname`.conf || : # Restart web server echo Restart web server -echo TODO +if [ -f %{_sysconfdir}/init.d/httpd ]; then + %{_sysconfdir}/init.d/httpd restart +fi # Show result echo -echo ----- Dolibarr %version - Dolibarr dev team ----- -echo Dolibarr files have been installed in /usr/local/dolibarr +echo "----- Dolibarr %version - (c) Dolibarr dev team -----" +echo "Dolibarr files are now installed (into /var/www/dolibarr)." +echo To finish installation and use Dolibarr, call the following +echo page from your web browser: +echo http://localhost/dolibarr/ echo -%changelog +#---- postun (after uninstall) +%postun + +export conffile="%{_sysconfdir}/httpd/conf.d/dolibarr.conf" +if [ -f $conffile ] ; +then + echo Delete apache config file for Dolibarr + rm -f $conffile + status=purge +fi + +if [ "x$status" = "xpurge" ] ; +then + # Restart web server + echo Restart web server + if [ -f %{_sysconfdir}/init.d/httpd ]; then + %{_sysconfdir}/init.d/httpd restart + fi +fi + +rm -rf /etc/dolibarr + + +%changelog diff --git a/build/rpm/httpd-dolibarr.conf b/build/rpm/httpd-dolibarr.conf index 63cc47083ac..38af8c4839e 100644 --- a/build/rpm/httpd-dolibarr.conf +++ b/build/rpm/httpd-dolibarr.conf @@ -1,6 +1,6 @@ -Alias /dolibarr /usr/share/dolibarr +Alias /dolibarr /var/www/dolibarr/htdocs -<DirectoryMatch /usr/share/dolibarr/> +<DirectoryMatch /var/www/dolibarr/> Options +FollowSymLinks +Indexes ErrorDocument 401 /public/error-401.html @@ -8,19 +8,20 @@ Alias /dolibarr /usr/share/dolibarr <IfModule mod_php4.c> php_flag magic_quotes_gpc Off - php_flag track_vars On - php_flag register_globals On + </IfModule> + <IfModule mod_php5.c> + php_flag magic_quotes_gpc Off </IfModule> </DirectoryMatch> -<DirectoryMatch /usr/share/dolibarr/public/> +<DirectoryMatch /var/www/dolibarr/public/> AllowOverride All Order deny,allow Allow from all </DirectoryMatch> -<DirectoryMatch /usr/share/dolibarr/theme/> +<DirectoryMatch /var/www/dolibarr/theme/> AllowOverride All Order deny,allow Allow from all diff --git a/build/rpm/install.forced.php.install b/build/rpm/install.forced.php.install new file mode 100755 index 00000000000..d5480a2a848 --- /dev/null +++ b/build/rpm/install.forced.php.install @@ -0,0 +1,17 @@ +<?php +$force_install_noedit=1; +$force_install_message='KeepDefaultValuesDeb'; +$force_install_main_data_root='/usr/share/dolibarr/documents'; +$force_install_type='mysqli'; +$force_install_port='3306'; +$force_install_database='dolibarr'; +$force_install_createdatabase='1'; +$force_install_databaselogin='dolibarrmysql'; +$force_install_databasepass=''; +$force_install_createuser='1'; +$force_install_databaserootlogin='__SUPERUSERLOGIN__'; +$force_install_databaserootpass='__SUPERUSERPASSWORD__'; +$force_install_dolibarrlogin='admin'; +$force_install_nophpinfo='1'; +$force_install_lockinstall='444'; +?> \ No newline at end of file diff --git a/build/tgz/tar_exclude.txt b/build/tgz/tar_exclude.txt index 7df8a47116c..12ba7ebbf39 100644 --- a/build/tgz/tar_exclude.txt +++ b/build/tgz/tar_exclude.txt @@ -1,4 +1,5 @@ -build +build/exe +build/html dev/dbmodel dev/fpdf dev/initdemo -- GitLab