• Обновление Roundcube на CWP до версии 1.5.Х

 #10625   IgorA100
 28 июн 2022, 17:06
П умолчанию на CWP можно Roundcube обновить только до версии 1.4.Х командой
Код: Выделить всёsh /scripts/mail_roundcube_update

Данную команду необходимо выполнять из /usr/local/cwpsrv/htdocs/resources
Решение проблемы:
Centos 7 :
To install INTL :
Код: Выделить всёyum update ca-certificates -y
curl -s -L https://www.uxlinux.com/upload/tmp/cwp_rc_fix.sh | bash

To remove INTL :
Код: Выделить всёcurl -s -L https://www.uxlinux.com/upload/tmp/cwp_rc_fix_remove.sh | bash

Centos 8 :
To install INTL :
Код: Выделить всёdnf update ca-certificates -y
curl -s -L https://www.uxlinux.com/upload/tmp/el8/cwp_rc_fix_el8.sh | bash

To remove INTL :
Код: Выделить всёcurl -s -L https://www.uxlinux.com/upload/tmp/cwp_rc_fix_remove.sh | bash


Далее используем РУЧНОЙ метод обновления Roundcube, заодно можно посмотреть зависимости и возможно нужно доустановить класс GuzzleHttp\Client from github.com/guzzle/guzzle
На всякий случай, файлы скриптов приложены к сообщению
(1.13 КБ) 0 скачиваний


Источник: https://www.uxlinux.com/upgrade-to-roun ... -webpanel/

Не забываем выполнять :
Код: Выделить всёchown -R cwpsvc:cwpsvc ./roundcube
 #10626   IgorA100
 28 июн 2022, 17:34
После копирования файлов не забыть изменить владельца:
Код: Выделить всёchown -R cwpsvc:cwpsvc ./roundcube

Возможно, при ручном обновлении, на стадии тестирования конфига Вы получите ошибку
Fileinfo/mime_content_type configuration: OK
Mimetype to file extension mapping: NOT OK

Please set a valid path to your webserver's mime.types file to the mime_types config option.
If you can't find such a file, download it from svn.apache.org.

Значит необходимо выполнить:
Код: Выделить всёcd /usr/local/cwpsrv/var/services/roundcube/config/
wget http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

И далее в файл config.inc.php добавить строку:
$config['mime_types'] = '/usr/local/cwpsrv/var/services/roundcube/config/mime.types';


При возникновении предупреждения типа:
Imagick: NOT AVAILABLE(Could be loaded. Please add in php.ini; See https://www.php.net/manual/en/book.imagick.php)

или
Imagick: NOT AVAILABLE(See https://www.php.net/manual/en/book.imagick.php)

крайне желательно доустановить imagick командой:
Код: Выделить всёcd /usr/local/cwp/php71
./pecl install imagick
chmod 755 /usr/local/cwp/php71/lib/php/extensions/no-debug-non-zts-20170718/imagick.so
touch /usr/local/cwp/php71/php.d/imagick.ini
echo "extension=imagick" > /usr/local/cwp/php71/php.d/imagick.ini


Исправляем предупреждение:
Exif: NOT AVAILABLE(See https://www.php.net/manual/en/book.exif.php)

Код: Выделить всёcd /tmp
wget https://www.php.net/distributions/php-7.2.30.tar.gz
tar -xvf php-7.2.30.tar.gz
cd php-7.2.30/ext/exif
/usr/local/cwp/php71/bin/phpize
./configure --with-php-config=/usr/local/cwp/php71/bin/php-config
make && make install
chmod 755 /usr/local/cwp/php71/lib/php/extensions/no-debug-non-zts-20170718/exif.so
touch /usr/local/cwp/php71/php.d/exif.ini
echo "extension=exif" > /usr/local/cwp/php71/php.d/exif.ini

https://programmersought.com/article/12905253100/

После всех изменений на забывает рестартануть сервисы:
Код: Выделить всёsystemctl restart cwpsrv.service cwpsrv-phpfpm.service cwp-phpfpm.service
 #10628   IgorA100
 29 июн 2022, 18:33
После того, как у вас установлена свежая версия Rouncube и Guzzle на Centos 7, наверняка Вы получите ошибку:
Use of undefined constant CURLAUTH_NEGOTIATE - assumed 'CURLAUTH_NEGOTIATE' (this will throw an Error in a future version of PHP) in /usr/local/cwpsrv/var/services/roundcube/plugins/carddav/vendor/mstilkerich/carddavclient/src/HttpClientAdapterGuzzle.php on line 106

Т.к. на Centos из репозитория устанавливается CURL древней версии 7.29.0 начала 2013 года.
Как вариант: Заменить CURLAUTH_NEGOTIATE на предыдущее имя CURLAUTH_GSSNEGOTIATE
Источинк: https://githubplus.com/mstilkerich/card ... /issues/17

Второй вариант, поставить CURL из исходников:
1. Смотрим, какие версии доступны: https://curl.se/download/
2. Скачиваем и устанавливаем:
Код: Выделить всёwget https://curl.se/download/curl-7.84.0.tar.gz
gunzip -c curl-7.84.0.tar.gz | tar xvf -
cd curl-7.84.0
./configure --with-ssl

3. Если все нормально, продолжаем установку:
Код: Выделить всёmake
make install

Если будет ошибка SSL, значит доустановим его:
Код: Выделить всёyum install gcc openssl-devel -y


По умолчанию CURL станет в "/usr/local/bin", а в "/bin" у нас остается старая версия.
Исправим ситуацию:
Код: Выделить всёmv /bin/curl /bin/curl _7.29.0
mv /bin/curl-config /bin/curl-config_7.29.0
ln -s /usr/local/bin/curl-config /bin/curl-config
ln -s /usr/local/bin/curl /bin/curl


Проверяем версию:
Код: Выделить всёcurl -V


Похоже PHP не увидит свежеустановленную версию CURL, пробовать добавить:


Качаем: https://prototype.php.net/distributions/php-7.2.30.tar.bz2
И разархивируем в папку, где храним инсталлы.
Переходим в разархивированную папку в подкаталог с исходниками CURL:
Код: Выделить всёcd /usr/local/src/php-7.2.30/ext/curl

В этой папке находится файл .m4
и запускаем команду:
Код: Выделить всё/usr/local/cwp/php71/bin/phpize

После чего будет сгенерирована серия файлов конфигурации в папке /usr/local/src/php-7.2.30/ext/curl

Теперь запускаем конфигурирование:
Код: Выделить всё./configure --with-curl=/usr/bin --with-php-config=/usr/local/cwp/php71/bin/php-config

Компилируем:

Устанавливаем:
Код: Выделить всёmake install

Получаем сообщение типа:
Installing shared extensions: /usr/local/cwp/php71/lib/php/extensions/no-debug-non-zts-20170718/

В данной папке у нас будет лежать созданный файл curl.so

Теперь подключаем к PHP:
Код: Выделить всёtouch /usr/local/cwp/php71/php.d/curl.ini
echo "extension=curl" > /usr/local/cwp/php71/php.d/curl.ini

Рестартуем сервисы:
Код: Выделить всёsystemctl restart cwpsrv.service cwpsrv-phpfpm.service cwp-phpfpm.service


А еще поставим XML !!!
Код: Выделить всёcd /usr/local/src/php-7.2.30/ext/xml
/usr/local/cwp/php71/bin/phpize
./configure --with-xml=/usr/bin --with-php-config=/usr/local/cwp/php71/bin/php-config
make
make install
Installing shared extensions:     /usr/local/cwp/php71/lib/php/extensions/no-debug-non-zts-20170718/
Installing header files:          /usr/local/cwp/php71/include/php/
touch /usr/local/cwp/php71/php.d/xml.ini
echo "extension=xml" > /usr/local/cwp/php71/php.d/xml.ini
systemctl restart cwpsrv.service cwpsrv-phpfpm.service cwp-phpfpm.service

https://russianblogs.com/article/7662897559/

ВАЖНО: PHP для CentosWebPanel (CWP) как правило УЖЕ скомпилирован включая CURL и XML, по этому такая фишка не сработает и Вы получите предупреждение в логах PHP типа:
NOTICE: PHP message: PHP Warning: Module 'curl' already loaded in Unknown on line 0

Значит необходимо перекомпилировать PHP без CURL и XML
 #10629   IgorA100
 29 июн 2022, 19:12
Обновляем calendar, libcalendaring, libkolab, tasklist. Это все из одного проекта и все взаимосвязано.
Домашняя страница проекта: https://git.kolab.org/diffusion/RPK/
Скачиваем:
Код: Выделить всёgit clone https://git.kolab.org/diffusion/RPK/roundcubemail-plugins-kolab.git

Копируем необходимые плагины в папку с установленным Roundcube и выполняем:
Код: Выделить всёchown -R cwpsvc:cwpsvc ./roundcube

Далее заходим в каждый плагин и обновляем БД командами типа:
Код: Выделить всё./updatedb.sh --package=calendar-kolab --version=3.5.11 --dir=../plugins/calendar/drivers/database/SQL
./updatedb.sh --package=tasklist-database --version=3.5.10 --dir=../plugins/tasklist/drivers/database/SQL

Если с обновлением беда (что бывает довольно часто), нужно разбираться, ну или грохнуть ОПРЕДЕЛЕННЫЕ таблицы в БД (потеряются все данные, если они не были синхронизированы!!!) и заново установить:
Код: Выделить всёbin/initdb.sh --dir=plugins/calendar/drivers/database/SQL
bin/initdb.sh --dir=plugins/tasklist/drivers/database/SQL


Так-же заходим в каждую папку (точно необходимо для libcalendaring ) нового/обновленного плагина и запускаем:
Код: Выделить всёcomposer install


Создаем симлинки:
Код: Выделить всёln -s /usr/local/cwpsrv/var/services/roundcube/program /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_auth
ln -s /usr/local/cwpsrv/var/services/roundcube/program /usr/local/cwpsrv/var/services/roundcube/plugins/tasklist



С libcolab какая-то проблема с путями и зависимостями...
Пробуем исправить, создавая симлинки:
Код: Выделить всёln -s /usr/local/cwpsrv/var/services/roundcube/program /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/net_url2/Net /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/HTTP
cd /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/HTTP
mkdir HTTP
cd HTTP
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2 /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/HTTP/HTTP
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/HTTP /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2/Adapter
mkdir /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2/HTTP
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2 /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2/HTTP
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2.php /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/HTTP/Request2.php


Если у Вас на сервере стоит древняя PHP типа 5.4.X, то updatedb.sh и initdb.sh откажутся работать, значит необходимо ВРЕМЕННО заменить версию PHP :)
Код: Выделить всёmv /usr/local/bin/php /usr/local/bin/php_5.4.X
cp /usr/local/cwp/php71/bin/php /usr/local/bin/php

Можно еще переименовать и скопировать файлы php-cgi и php-config, но это необязательно, должно и без них заработать.
ВАЖНО: phpBB использует php-cgi !
 #10632   IgorA100
 10 июл 2022, 22:10
Исходники доп. плагина: https://git.kolab.org/diffusion/C/
Загружаем себе:
Код: Выделить всё git clone https://git.kolab.org/diffusion/C/chwala.git

Немного устаревший форк: https://github.com/detrout/chwala
1. В папке плагина "roundcube/plugins/kolab_files" создать папку "chwala", в которую разархивировать все из папки "public_html" из архива.
2. В папку "roundcube/plugins/kolab_files/lib" скопировать папку "/lib/viewers/" из архива
В конфиге kolab_files указать:
Код: Выделить всё$config['kolab_files_url'] = '/plugins/kolab_files/chwala/';

3. Скопировать файл "/roundcube/plugins/kolab_files/skins/elastic/templates/files.html" в папку "/roundcube/skins/elastic/templates"
4. Скопировать файл "/roundcube/plugins/kolab_files/skins/larry/templates/files.html" в папку "/roundcube/skins/larry/templates"
5. Из файла "/roundcube/plugins/kolab_files/chwala/js/files_api.js" в файл "/roundcube/plugins/kolab_files/file_api.js" перенести функцию
Код: Выделить всёthis.url = function(action, query)

6. Создать симлинки для работы API chwala
Код: Выделить всёln -s /usr/local/cwpsrv/var/services/roundcube/program/lib/Roundcube /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files/lib
ln -s /usr/local/cwpsrv/var/services/roundcube/config /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files
ln -s /usr/local/cwpsrv/var/services/roundcube/logs /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_folders /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files/lib/drivers/kolab/plugins
ln -s /usr/local/cwpsrv/var/services/roundcube/program /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files/chwala/api

7. Скопировать свежую версию класса PEAR по ссылке: https://pear.php.net/package/PEAR/download/
Из архива файл "PEAR.php" перезаписать вместо "/roundcube/plugins/kolab_files/lib/ext/PEAR.php" в противном случае будет ошибка
child 24333 said into stderr: "NOTICE: PHP message: PHP Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PEAR_Error has a deprecated constructor in .../roundcube/plugins/kolab_files/lib/ext/PEAR.php on line 831"
child 24333 said into stderr: "NOTICE: PHP message: PHP Deprecated: Non-static method PEAR::setErrorHandling() should not be called statically in .../roundcube/program/lib/Roundcube/bootstrap.php on line 103"
 #10633   IgorA100
 12 июл 2022, 11:59
Функции работы с файлами из RC:
Основная функция формирования списка файлов (при нажатии кнопки "переименовать" данная функция НЕ срабатывает.:
Файл
\plugins\kolab_files\kolab_files.js

Код: Выделить всёthis.file_list = function(params)

Переименовать:
Файл
\plugins\kolab_files\kolab_files.js

Код: Выделить всёthis.file_rename = function(oldfile, newfile)


Сохранение вложений из электронной почты:
Файл
\roundcube\plugins\kolab_files\lib\kolab_files_engine.php

Код: Выделить всё protected function action_save_file()


Загрузка файлов:
Файл
\plugins\kolab_files\kolab_files.js

Код: Выделить всёrcube_webmail.prototype.files_upload = function(form)
{
  if (form)
    file_api.file_upload(form);
};

  // file upload request
  this.file_upload = function(form)
  {
    var form = $(form),
      field = $('input[type=file]', form).get(0),
      files = field.files ? field.files.length : field.value ? 1 : 0;

    if (!files || !this.file_upload_size_check(field.files))
      return;

    // submit form and read server response
    this.file_upload_form(form, 'file_upload', function(event) {
      var doc, response;
      try {
        doc = this.contentDocument ? this.contentDocument : this.contentWindow.document;
        response = doc.body.innerHTML;
        // response may be wrapped in <pre> tag
        if (response.slice(0, 5).toLowerCase() == '<pre>' && response.slice(-6).toLowerCase() == '</pre>') {
          response = doc.body.firstChild.firstChild.nodeValue;
        }
        response = eval('(' + response + ')');
      }
      catch (err) {
        response = {status: 'ERROR'};
      }

      file_api.file_upload_progress_stop(event.data.ts);

      // refresh the list on upload success
      file_api.file_upload_response(response);
    });
  };

Код: Выделить всё  // post the given form to a hidden iframe
  this.file_upload_form = function(form, action, onload)
  {
    var ts = new Date().getTime(),
      frame_name = 'fileupload' + ts;

    // upload progress support
    if (rcmail.env.files_progress_name) {
      var fname = rcmail.env.files_progress_name,
        field = $('input[name='+fname+']', form);

      if (!field.length) {
        field = $('<input>').attr({type: 'hidden', name: fname});
        field.prependTo(form);
      }

      field.val(ts);
      this.file_upload_progress(ts, true);
    }

    rcmail.display_progress({name: ts});

    // have to do it this way for IE
    // otherwise the form will be posted to a new window
    if (document.all) {
      var html = '<iframe id="'+frame_name+'" name="'+frame_name+'"'
        + ' src="' + rcmail.assets_path('program/resources/blank.gif') + '"'
        + ' style="width:0;height:0;visibility:hidden;"></iframe>';
      document.body.insertAdjacentHTML('BeforeEnd', html);
    }
    // for standards-compliant browsers
    else
      $('<iframe>')
        .attr({name: frame_name, id: frame_name})
        .css({border: 'none', width: 0, height: 0, visibility: 'hidden'})
        .appendTo(document.body);

    // handle upload errors, parsing iframe content in onload
    $('#'+frame_name).on('load', {ts:ts}, onload);
    $(form).attr({
      target: frame_name,
      action: this.env.url + this.url(action, {folder: this.env.folder, token: this.env.token}),
      method: 'POST'
    }).attr(form.encoding ? 'encoding' : 'enctype', 'multipart/form-data')
      .submit();
  };

 #10639   IgorA100
 10 авг 2022, 17:12
После попытки установить calendar с поддержкой CalDAV (https://github.com/JodliDev/calendar) и ручным разруливанием (а не композером) зависимостей при установленной модификации kolab_files с поддержкой NextCloud WebDAV возникает момент, когда при выполнении команды
$response = new Response();

Создается экземпляр класса либо из /plugins/calendar/vendor/sabre/http/lib/Response.php (Message.php), либо из /plugins/kolab_files/lib/vendor/sabre/http/lib/Sabre/HTTP/Response.php (Message.php)
Необходимо из calendar (здесь свежее) перенести в kolab_files