Author Topic: Upgrading from 1.2.3  (Read 15888 times)

Offline Monstr

  • Jr. Member
  • **
  • Posts: 12
Upgrading from 1.2.3
« on: March 22, 2017, 02:45:35 AM »
Hi!

I execute the command:

# /tmp/roundcubemail-1.2.4/bin/installto.sh /var/www/roundcubemail-1.2.0


Outputs:

Upgrading from 1.2.3. Do you want to continue? (y/N)


I confirm:

y


Outputs:

Copying files to target location...Error 500: Failed to execute command: rsync -aC --out-format "%n" --delete /tmp/roundcubemail-1.2.4/program/* /var/www/roundcubemail-1.2.0/program/


What is the problem?

Offline alec

  • Hero Member
  • *****
  • Posts: 1,363
Re: Upgrading from 1.2.3
« Reply #1 on: March 22, 2017, 03:07:28 AM »
Do you have rsync installed?

Offline Monstr

  • Jr. Member
  • **
  • Posts: 12
Re: Upgrading from 1.2.3
« Reply #2 on: March 22, 2017, 03:16:46 AM »
Yes.

[root@mail roundcubemail-1.2.4]# rsync --version
rsync  version 3.0.9  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

Offline alec

  • Hero Member
  • *****
  • Posts: 1,363
Re: Upgrading from 1.2.3
« Reply #3 on: March 22, 2017, 04:13:31 AM »
https://github.com/roundcube/roundcubemail/blob/master/bin/installto.sh#L60
What if you change this line of code to:
Code: [Select]
if (system($command, $ret) === false || $ret > 0) {

Offline Monstr

  • Jr. Member
  • **
  • Posts: 12
Re: Upgrading from 1.2.3
« Reply #4 on: March 22, 2017, 05:50:56 AM »
Now issues:

/tmp/roundcubemail-1.2.4/bin/installto.sh /var/www/roundcubemail-1.2.0
Upgrading from 1.2.3. Do you want to continue? (y/N)
y
Copying files to target location...Error 500: Failed to execute command: rsync -a --out-format "%n" /tmp/roundcubemail-1.2.4/index.php /var/www/roundcubemail-1.2.0/index.php

Offline alec

  • Hero Member
  • *****
  • Posts: 1,363
Re: Upgrading from 1.2.3
« Reply #5 on: March 22, 2017, 08:09:18 AM »
There's similar system() call a few lines below that need to be modified.

Offline Monstr

  • Jr. Member
  • **
  • Posts: 12
Re: Upgrading from 1.2.3
« Reply #6 on: March 22, 2017, 08:26:26 AM »
Made changes to the file and executed it:

[root@mail bin]# ./installto.sh /var/www/roundcubemail-1.2.0
Upgrading from 1.2.3. Do you want to continue? (y/N)
y
Copying files to target location...done.

Running update script at target...
All done.


I go into the browser, but the version is displayed old:

Roundcube Webmail 1.2.3


File installto.sh after change:

Code: [Select]
#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | bin/installto.sh                                                      |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2014-2016, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Update an existing Roundcube installation with files from           |
 |   this version                                                        |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH'realpath(__DIR__ '/..') . '/' );

require_once 
INSTALL_PATH 'program/include/clisetup.php';

$target_dir unslashify($_SERVER['argv'][1]);

if (empty(
$target_dir) || !is_dir(realpath($target_dir)))
  
rcube::raise_error("Invalid target: not a directory\nUsage: installto.sh <TARGET>"falsetrue);

// read version from iniset.php
$iniset = @file_get_contents($target_dir '/program/include/iniset.php');
if (!
preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z-]*)/'$iniset$m))
  
rcube::raise_error("No valid Roundcube installation found at $target_dir"falsetrue);

$oldversion $m[1];

if (
version_compare(version_parse($oldversion), version_parse(RCMAIL_VERSION), '>='))
  
rcube::raise_error("Installation at target location is up-to-date!"falsetrue);

echo 
"Upgrading from $oldversion. Do you want to continue? (y/N)\n";
$input trim(fgets(STDIN));

if (
strtolower($input) == 'y') {
  echo 
"Copying files to target location...";

  
// Save a copy of original .htaccess file (#1490623)
  
if (file_exists("$target_dir/.htaccess")) {
    
$htaccess_copied copy("$target_dir/.htaccess""$target_dir/.htaccess.orig");
  }

  
$dirs = array('program','installer','bin','SQL','plugins','skins');
  if (
is_dir(INSTALL_PATH 'vendor') && !is_file(INSTALL_PATH 'composer.json')) {
    
$dirs[] = 'vendor';
  }
  foreach (
$dirs as $dir) {
    
// @FIXME: should we use --delete for all directories?
    
$delete  in_array($dir, array('program''installer')) ? '--delete ' '';
    
$command "rsync -aC --out-format \"%n\" " $delete INSTALL_PATH "$dir/* $target_dir/$dir/";
    
#if (!system($command, $ret) || $ret > 0) {
    
if (system($command$ret) === false || $ret 0) {
      
rcube::raise_error("Failed to execute command: $command"falsetrue);
    }
  }
  foreach (array(
'index.php','.htaccess','config/defaults.inc.php','composer.json-dist','CHANGELOG','README.md','UPGRADING','LICENSE','INSTALL') as $file) {
    
$command "rsync -a --out-format \"%n\" " INSTALL_PATH "$file $target_dir/$file";
    
#if (file_exists(INSTALL_PATH . $file) && (!system($command, $ret) || $ret > 0)) {
    
if (file_exists(INSTALL_PATH $file) && (system($command$ret) === false || $ret 0)) {
      
rcube::raise_error("Failed to execute command: $command"falsetrue);
    }
  }

  
// remove old (<1.0) .htaccess file
  
@unlink("$target_dir/program/.htaccess");
  echo 
"done.";

  
// Inform the user about .htaccess change
  
if (!empty($htaccess_copied)) {
    if (
file_get_contents("$target_dir/.htaccess") != file_get_contents("$target_dir/.htaccess.orig")) {
      echo 
"\n!! Old .htaccess file saved as .htaccess.orig !!";
    }
    else {
      @
unlink("$target_dir/.htaccess.orig");
    }
  }

  echo 
"\n\n";

  if (
is_dir("$target_dir/skins/default")) {
      echo 
"Removing old default skin...";
      
system("rm -rf $target_dir/skins/default $target_dir/plugins/jqueryui/themes/default");
      foreach (
glob(INSTALL_PATH "plugins/*/skins") as $plugin_skin_dir) {
          
$plugin_skin_dir preg_replace('!^.*' INSTALL_PATH '!'''$plugin_skin_dir);
          if (
is_dir("$target_dir/$plugin_skin_dir/classic"))
            
system("rm -rf $target_dir/$plugin_skin_dir/default");
      }
      echo 
"done.\n\n";
  }

  echo 
"Running update script at target...\n";
  
system("cd $target_dir && php bin/update.sh --version=$oldversion");
  echo 
"All done.\n";
}
else {
  echo 
"Update cancelled. See ya!\n";
}

?>


« Last Edit: March 22, 2017, 08:29:34 AM by Monstr »

Offline alec

  • Hero Member
  • *****
  • Posts: 1,363
Re: Upgrading from 1.2.3
« Reply #7 on: March 22, 2017, 08:49:33 AM »
So, maybe these rsync commands do not work at all. Do you run the script as root? Could you try executing one of the rsync commands and see what it returns?

Offline Monstr

  • Jr. Member
  • **
  • Posts: 12
Re: Upgrading from 1.2.3
« Reply #8 on: March 22, 2017, 11:45:18 AM »
Yes, I run the file installto.sh as root.

Run command rsync from the file installto.sh ?

Code: [Select]
rsync -aC --out-format \"%n\" " . $delete . INSTALL_PATH . "$dir/* $target_dir/$dir/


What is mean ?:

\"%n\" " . $delete . INSTALL_PATH . "$dir/* $target_dir/$dir/

Offline Monstr

  • Jr. Member
  • **
  • Posts: 12
Re: Upgrading from 1.2.3
« Reply #9 on: March 22, 2017, 12:26:01 PM »
Why ?:

 --out-format \"%n\"


Maybe so right ?:

 --out-format=%n

Offline alec

  • Hero Member
  • *****
  • Posts: 1,363
Re: Upgrading from 1.2.3
« Reply #10 on: March 22, 2017, 02:05:04 PM »
Backslashes will be removed, it's PHP syntax, but you're right --out-format=%n should work as well. Does it work with this change?

Offline Monstr

  • Jr. Member
  • **
  • Posts: 12
Re: Upgrading from 1.2.3
« Reply #11 on: March 22, 2017, 02:38:24 PM »
What is mean ?:

%n

Offline alec

  • Hero Member
  • *****
  • Posts: 1,363
Re: Upgrading from 1.2.3
« Reply #12 on: March 22, 2017, 03:04:17 PM »
That is a variable specifying rsync output format. Tells rsync to print (only) names of synced files.

Offline Monstr

  • Jr. Member
  • **
  • Posts: 12
Re: Upgrading from 1.2.3
« Reply #13 on: March 22, 2017, 11:34:28 PM »
I know that this is a special variable. Вut why is nothing transferred to it?

Code: [Select]
Copying files to target location...Error 500: Failed to execute command: rsync -aC --out-format "%n" --delete /tmp/roundcubemail-1.2.4/program/* /var/www/roundcubemail-1.2.0/program/

--out-format "%n"
The error output shows that this variable is not assigned.


Why was it not used in previous versions?

Code: [Select]
foreach ($dirs as $dir) {
    // @FIXME: should we use --delete for all directories?
    $delete = in_array($dir, array('program', 'installer')) ? '--delete ' : '';
    if (!system("rsync -avC " . $delete . INSTALL_PATH . "$dir/* $target_dir/$dir/")) {
      $err = true;
      break;
    }
  }
  foreach (array('index.php','.htaccess','config/defaults.inc.php','composer.json-dist','CHANGELOG','README.md','UPGRADING','LICENSE','INSTALL') as $file) {
    if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) {
      $err = true;
      break;
    }
  }

Offline alec

  • Hero Member
  • *****
  • Posts: 1,363
Re: Upgrading from 1.2.3
« Reply #14 on: March 23, 2017, 03:52:12 AM »
This is rsync format variable. It should not be resolved to anything. It should be as is. It's there to make the output more pretty.