This manual is deprecated. Please visit https://groupoffice.readthedocs.io for the latest documentation. |
Difference between revisions of "Troubleshooting"
(→Post installation problems) |
(→Restoring a project) |
||
(98 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
== General instructions == | == General instructions == | ||
+ | # Check Admin tools -> System check. This should report no errors or warnings. This are generally things you or your hosting provider should solve. | ||
+ | # Check the [[Troubleshooting#Error_log|error logs]]. They are the most important for problem solving! | ||
+ | # Try running a database check at Start menu -> Tools -> Database check | ||
+ | # Enable debugging ( set $config['debug']=true;). Make sure you change this back after fixing the problem because it will slow Group-Office down. | ||
+ | # Search this site | ||
+ | # Search the forums | ||
+ | # If you have a support contact send a good description of the problem and relevant error messages to Intermesh at http://shop.group-office.com/Support. | ||
− | + | ===Error log=== | |
− | + | You can find them as admin in Start menu -> Files. Click on "Log files" in the folder tree. | |
− | + | The file is located in the $config['file_storage_path'] /log/error.log. (Default /home/groupoffice/log/error.log). If you can't find errors in there you might want to double check the Apache error log too. By default that's in /var/log/apache/error.log. | |
− | + | ||
− | + | ||
− | + | ||
− | == | + | ==Frequently Occurring Errors (FOE)== |
+ | ====GOTA or java file upload not working==== | ||
+ | In a recent Java update there seems to be a problem with some SSL certificates. It fails to verify them. You can follow this workaround: http://www.kunxi.org/blog/2015/01/bypass-the-certpathvalidatorexception-caused-by-malformed-ocsp-response/ | ||
− | ===I get the error: "The Group-Office javascripts were not loaded. Your local_url and local_path configuration properties are probably configured incorrectly."=== | + | ====JSONStore load exception==== |
+ | Something went wrong on the webserver. Check the [[Troubleshooting#Error_log|error log]] for more details. | ||
+ | |||
+ | ====... not found in GO:Getmodel()" error.==== | ||
+ | Try to rebuild the searchcache and do a database check. | ||
+ | |||
+ | ====PHP Notice: session_start(): ps_files_cleanup_dir: opendir(...) failed: Permission denied (13) in ../go/base/Session.php on line 54==== | ||
+ | On Debian or Ubuntu servers you can set session.gc_probability = 0 in /etc/php5/apache2/php.ini to avoid this error. More info can be found [http://stackoverflow.com/questions/2904862/issues-with-php-5-3-and-sessions-folder here]. | ||
+ | On other systems the problem is that the webserver is not allowed to write to the path where PHP stores it's sessions. You can make the apache user the owner of this folder or you can change "session.save_path" in php.ini to point to another writable directory. | ||
+ | |||
+ | ====Problems with sending mail==== | ||
+ | Check the SMTP settings in config.php if you're not sending with the mail module. | ||
+ | Look for the values: | ||
+ | |||
+ | <pre> | ||
+ | $config["smtp_server"]="mail.example.com"; | ||
+ | $config["smtp_port"]="25"; | ||
+ | $config["smtp_username"]=""; | ||
+ | $config["smtp_password"]=""; | ||
+ | $config["smtp_encryption"]=""; | ||
+ | </pre> | ||
+ | |||
+ | If you have problems with the mail module the settings can be configured at E-mail -> Right click on account in the tree -> Properties -> Outgoing mailserver | ||
+ | |||
+ | If you are changing the SMTP server (e.g. all mail from all users should go via localhost), you can update the settings with the following SQL statement: | ||
+ | |||
+ | <pre> | ||
+ | UPDATE `em_accounts` SET `smtp_host`= "localhost"; | ||
+ | </pre> | ||
+ | |||
+ | ====I get the error: "The Group-Office javascripts were not loaded. Check the host property in config.php and see if the file_storage_path folder and it's contents are writable"==== | ||
+ | Check the value of $config['file_storage_path'] in config.php. The path here should point to an existing folder for and should have a trailing slash. The folder and it's contents should be writable. | ||
+ | If this is all right then you should check your webserver log for errors. | ||
+ | |||
+ | ====I get the error: "The Group-Office javascripts were not loaded. Your local_url and local_path configuration properties are probably configured incorrectly."==== | ||
This means that the local_url or local_path property in the config.php are not defined correctly. Group-Office needs a directory to write cached javascript files that are accessible through the webserver. | This means that the local_url or local_path property in the config.php are not defined correctly. Group-Office needs a directory to write cached javascript files that are accessible through the webserver. | ||
So when Group-Office is loaded it will load http://url.to.go/<local_url>/cache/somescript.js. The URL is not valid so you must correct it. | So when Group-Office is loaded it will load http://url.to.go/<local_url>/cache/somescript.js. The URL is not valid so you must correct it. | ||
− | ===I don't get past "Loading base system " or "Loading modules" The screen just hangs=== | + | It can also be that Apache does not have write permissions to the local directory. On a Debian server this can be solved with: |
+ | |||
+ | chown www-data:www-data /path.to/local | ||
+ | |||
+ | ====I don't get past "Loading base system " or "Loading modules" The screen just hangs==== | ||
Take the following steps: | Take the following steps: | ||
− | + | # View the source of the HTML page to see if there is an error in the source. Press CTRL+U to view the source. | |
− | + | # Check if there is a Javascript error. In Internet Explorer there is a warning Icon at the toolbar and Firefox shows the errors in the Error console. Firebug is also a useful tool to track down javascript errors but is generally only useful for developers. | |
− | + | # Check your [[Troubleshooting#Error_log|error log]]. | |
+ | |||
+ | ====allowed memory size was exhausted==== | ||
+ | Raise the memory_limit setting in /etc/php5/apache2/php.ini or /etc/php.ini. Path of php.ini might be different on your system. | ||
+ | |||
+ | ====Could not login to postfixadmin module==== | ||
+ | There is a problem with creating a mailbox for the new user. Group-Office attempts to connect to the postfix admin module. Please check the URL hostname and password in /etc/groupoffice/globalconfig.inc.php. It's used to connect to the Group-Office installation with the admin login. | ||
+ | The "serverclient_server_url" defaults to http://localhost/groupoffice/. If you have a pro license you need to change this to the licensed domain. (http://yourlicensedhost/groupoffice/) | ||
+ | |||
+ | ====postfix/smtp[4893]: connect to 127.0.0.1[127.0.0.1]:10024: Connection refused==== | ||
+ | Amavis is not running or is not accepting connections. This is often caused by an incorrect machine hostname (It is not a fully qualified domain name). | ||
+ | You can change the system name or you can set the correct hostname in the file: /etc/amavis/conf.d/05-node_id | ||
+ | |||
+ | ====SQLSTATE Column not found errors==== | ||
+ | If you just upgraded the database the database might not have been upgraded automatically. you can run: | ||
+ | |||
+ | http://youdomain/pathtogroupoffice/index.php?r=maintenance/upgrade | ||
+ | |||
+ | at any time to update the database to the latest structure. | ||
== Problems with synchronization == | == Problems with synchronization == | ||
If you have problems with synchronizing Group-Office then please take following steps first before contacting Intermesh: | If you have problems with synchronizing Group-Office then please take following steps first before contacting Intermesh: | ||
− | + | #Double check the setup and read the instructions | |
− | + | #Check the [[Troubleshooting#Error_log|error logs]] they are very important. | |
− | + | #If you are using ActiveSync in combination of Z-Push 1.*, put an empty debug.txt file in modules/z-push/. Make it writable for Apache. This log will be filled with debugging information when you sync. | |
− | + | # If you are using ActiveSync in combination with Z-Push 2.* then check the following debug options: [https://www.group-office.com/wiki/Z-push_2#Debugging| Z-Push 2(.1) debugging] | |
− | + | #If you're using SyncML (Funambol syncevoution or Nokia's). Put $config['syncml_debug_level']=3; in config.php for debugging. This will create /home/groupoffice/log/syncml.log with debug info. | |
− | + | #Check if the solution is on this page. If you have error messages like "Trying to destroy uninitialized session" you might have two simultaneos Active-Sync Sessions from the same client. | |
− | + | #Try performing a 'Slow or Reset sync'. With a slow sync all data gets send to Group-Office and Group-Office sends back all missing data. | |
− | + | #Try performing a sync in mode: 'Replace all local data' (Name might differ per device). The device will delete all local calendar and contact data and Group-Office will send all data to the client. Of course only do this when the Group-Office data is leading. | |
− | + | #Search the forums | |
+ | #Send to Intermesh: Apache error log (eg /var/log/apache/error.log), Group-Office error log (eg /home/groupoffice/log/*.log), Client error log and a description of what happens exactly. Without the logs we can't do anything! | ||
− | |||
===Common errors=== | ===Common errors=== | ||
+ | <b>The IPHONE cannot connect to the exchange server and you don't have SSL support on the server</b><br /> | ||
+ | When you set-up the exchange account then you are unable to turn SSL off because that option is not showed on the account creation page.<br /> | ||
+ | So the first time the phone will always search for the server through SSL.<br /><br /> | ||
+ | You can fix this manually by saving the account anyway (The phone will give you this option).<br /> | ||
+ | After that, when the account is stored on the phone, you can edit the connection information for it and turn SSL off.<br /> | ||
+ | Then the phone tries again to search for the server and then it should be found and you can start using the sync. | ||
+ | |||
<b>"No SyncML response" or "Server Failure: server returned error code -1" or "Invalid hostaddress"</b><br /> | <b>"No SyncML response" or "Server Failure: server returned error code -1" or "Invalid hostaddress"</b><br /> | ||
Line 71: | Line 140: | ||
Then you have to take the following steps: | Then you have to take the following steps: | ||
− | + | #Check the filesystem permissions of the paths mentioned in the error | |
− | + | #Check if safe_mode is enabled and denies you access | |
− | + | #Check if open_basedir is set and denies you access | |
− | + | ||
The bottom line is that the Apache user (Usually apache or www-data) needs write permissions on the following folders defined in config.php: | The bottom line is that the Apache user (Usually apache or www-data) needs write permissions on the following folders defined in config.php: | ||
$config['file_storage_path']<br /> | $config['file_storage_path']<br /> | ||
− | |||
$config['tmpdir']<br /> | $config['tmpdir']<br /> | ||
− | You can put | + | You can put the following script in the directory where GO.php is to do a quick test in the browser: |
− | <?php | + | <pre><?php |
− | require(' | + | require('GO.php'); |
− | |||
− | + | $folder = new GO_Base_Fs_Folder(GO::config()->file_storage_path.'test'); | |
− | + | ||
− | + | ||
+ | echo "Trying to create test folder: ".$folder->path()."\n"; | ||
+ | if($folder->create()){ | ||
+ | echo "Success!\n"; | ||
+ | }else{ | ||
+ | echo "Failed!\n"; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | </pre> | ||
− | Disable open_basedir in Plesk | + | ===Disable open_basedir in Plesk=== |
+ | |||
+ | If you get errors with "open_basedir restriction in effect" you should disable open_basedir or change $config['file_storage_path'] and $config['tmpdir'] to an allowed path within the open_basedir setting. | ||
+ | |||
+ | To disable open_basedir in a Plesk managed server do the following: | ||
Login as root:<br /> | Login as root:<br /> | ||
vi /home/httpd/vhosts/domain.com/conf/vhost.conf | vi /home/httpd/vhosts/domain.com/conf/vhost.conf | ||
− | + | Enter: | |
− | Enter:< | + | <pre> |
<Directory /var/www/vhosts/domain.com/httpdocs><br /> | <Directory /var/www/vhosts/domain.com/httpdocs><br /> | ||
− | php_admin_flag safe_mode off | + | php_admin_flag safe_mode off |
− | php_admin_value open_basedir none | + | php_admin_value open_basedir none |
− | php_admin_flag magic_quotes_gpc off | + | php_admin_flag magic_quotes_gpc off |
− | php_admin_flag log_errors on | + | php_admin_flag log_errors on |
− | + | </Directory> | |
− | </ | + | </pre> |
Reload the conf into httpd.include: | Reload the conf into httpd.include: | ||
Line 121: | Line 199: | ||
==Restoring lost data from a MySQL backup== | ==Restoring lost data from a MySQL backup== | ||
− | To restore a backup load the backup database into a | + | To restore a backup load the backup database into a separate database and use PhpMyAdmin to export the right data easily. First you have to create the backup DB (as mysql root), assign privileges and import it (as groupoffice-com DB user): |
+ | <pre> | ||
+ | mysql -u root -p | ||
+ | mysql> CREATE DATABASE go7JULY2013; | ||
+ | mysql> grant all privileges on go7JULY2013.* to 'groupoffice-com' with grant option; | ||
+ | mysql> exit | ||
+ | mysql -u groupoffice-com -p go7JULY2013 < groupoffice7JULY2013.sql | ||
+ | </pre> | ||
+ | We will show you an example of how to restore a single calendar. This way of restoring will leave all existing appointments intact but it will restore lost appointments. Login to PhpMyadmin and select the backup database. Browse the cal_calendars table and find out the "id" of the calendar you want to store. | ||
+ | |||
+ | ===Calendar restore=== | ||
− | Now delete all calendar data that does not belong to that calendar (replace | + | Now delete all calendar data that does not belong to that calendar (replace [CALENDAR_ID] with your calendar ID). You can skip this part if you want to restore all calendars: |
<pre> | <pre> | ||
− | DELETE FROM cal_calendars WHERE id!= | + | DELETE FROM cal_calendars WHERE id!=[CALENDAR_ID]; |
− | DELETE FROM cal_events WHERE calendar_id | + | DELETE FROM cal_events WHERE calendar_id NOT IN (SELECT id FROM cal_calendars); |
DELETE FROM cal_exceptions WHERE event_id NOT IN (SELECT id FROM cal_events); | DELETE FROM cal_exceptions WHERE event_id NOT IN (SELECT id FROM cal_events); | ||
DELETE FROM cal_participants WHERE event_id NOT IN (SELECT id FROM cal_events); | DELETE FROM cal_participants WHERE event_id NOT IN (SELECT id FROM cal_events); | ||
+ | DELETE FROM go_acl_items WHERE id NOT IN (SELECT acl_id FROM cal_calendars); | ||
+ | DELETE FROM go_acl WHERE acl_id NOT IN (SELECT acl_id FROM cal_calendars); | ||
</pre> | </pre> | ||
Line 136: | Line 226: | ||
# cal_events | # cal_events | ||
− | |||
# cal_calendars | # cal_calendars | ||
+ | # cal_exceptions | ||
# cal_participants | # cal_participants | ||
# go_acl | # go_acl | ||
Line 143: | Line 233: | ||
Uncheck the Structure box<br /> | Uncheck the Structure box<br /> | ||
− | Select " | + | Select "COMPLETE INSERTS"<br /> |
+ | Select "IGNORE INSERTS" or use "REPLACE" commands. With insert ignore you will add only missing records. With replace it will overwrite existing records too.<br /> | ||
Select export type "INSERT"<br /> | Select export type "INSERT"<br /> | ||
Save the file and load it into your main database make a backup of your database before you do this in case something goes wrong. | Save the file and load it into your main database make a backup of your database before you do this in case something goes wrong. | ||
+ | ===Addressbook restore=== | ||
+ | |||
+ | Now delete all addressbook data that does not belong to that addressbook (replace [ADDRESSBOOK_ID] with your addressbook ID). You can skip this part if you want to restore all addressbooks: | ||
+ | <pre> | ||
+ | DELETE FROM ab_addressbooks WHERE id!=[ADDRESSBOOK_ID]; | ||
+ | DELETE FROM ab_contacts WHERE addressbook_id NOT IN (SELECT id FROM ab_addressbooks); | ||
+ | DELETE FROM ab_companies WHERE addressbook_id NOT IN (SELECT id FROM ab_addressbooks); | ||
+ | DELETE FROM go_acl_items WHERE id NOT IN (SELECT acl_id FROM ab_addressbooks); | ||
+ | DELETE FROM go_acl WHERE acl_id NOT IN (SELECT acl_id FROM ab_addressbooks); | ||
+ | </pre> | ||
+ | |||
+ | Now we have our data prepared. We need to export the right tables using INSERT IGNORE commands. This will insert only non-existent records. | ||
+ | |||
+ | In PhpMyAdmin click at the Database name at the left frame so that you view all tables in the main screen. Now click at "Export". Select the tables: | ||
+ | |||
+ | # ab_addressbooks | ||
+ | # ab_contacts | ||
+ | # ab_companies | ||
+ | # go_acl | ||
+ | # go_acl_items | ||
+ | |||
+ | Uncheck the Structure box<br /> | ||
+ | Select "COMPLETE INSERTS"<br /> | ||
+ | Select "IGNORE INSERTS" or use "REPLACE" commands. With insert ignore you will add only missing records. With replace it will overwrite existing records too.<br /> | ||
+ | Select export type "INSERT"<br /> | ||
+ | Save the file and load it into your main database make a backup of your database before you do this in case something goes wrong. | ||
+ | |||
+ | ===CMS website restore=== | ||
+ | In this example you want to restore the website with id=1. The following queries will remove all except site 1. | ||
+ | |||
+ | <pre> | ||
+ | delete from cms_files where exists(select id from cms_folders fo where fo.site_id!=1 and cms_files.folder_id=fo.id); | ||
+ | delete from cms_folders where site_id!=1; | ||
+ | </pre> | ||
+ | |||
+ | Now export the data like the calendar example. | ||
+ | |||
+ | ==Restoring a user== | ||
+ | |||
+ | Import a backup in to a database. Then use PhpMyAdmin to run the queries below. It will remove all data except the data to restore. You can then export it using IGNORE INSERTS and import that into the live database. | ||
+ | Make sure you drop all tables that you don't want to restore! | ||
+ | |||
+ | <pre> | ||
+ | # delete all users except for the user to restore. | ||
+ | DELETE FROM go_users WHERE username!='<THEUSERNAM>'; | ||
+ | |||
+ | |||
+ | #Drop tables we won't restore. You need to drop more tables depending on your installed modules! | ||
+ | |||
+ | DROP TABLE `bl_ips`, `cf_1`, `cf_2`, `cf_3`, `cf_4`, `cf_6`, `cf_7`, `cf_8`, `cf_9`, `cf_10`, `cf_11`, `cf_12`, `cf_13`, `cf_15`, `cf_16`, `cf_17`, `cf_19`, `cf_20`, `cf_categories`, `cf_fields`, `cf_select_options`, `cf_select_tree_options`, `cf_tree_select_options`, `co_comments`, `dav_events`, `dav_tasks`, `emp_folders`, `em_accounts`, `em_accounts_collapsed`, `em_accounts_sort`, `em_aliases`, `em_filters`, `em_folders`, `em_folders_expanded`, `em_links`, `em_messages_cache`, `fb_acl`, `fs_files`, `fs_folders`, `fs_new_files`, `fs_notifications`, `fs_shared_cache`, `fs_statuses`, `fs_status_history`, `fs_templates`, `go_address_format`, `go_cache`, `go_countries`, `go_db_sequence`, `go_groups`, `go_holidays`, `go_iso_address_format`, `go_links_1`, `go_links_2`, `go_links_3`, `go_links_4`, `go_links_6`, `go_links_7`, `go_links_8`, `go_links_9`, `go_links_10`, `go_links_11`, `go_links_12`, `go_links_13`, `go_links_14`, `go_links_15`, `go_links_16`, `go_links_17`, `go_links_18`, `go_links_19`, `go_links_20`, `go_link_descriptions`, `go_link_folders`, `go_log`, `go_mail_counter`, `go_modules`, `go_reminders`, `go_reminders_users`, `go_saved_search_queries`, `go_search_cache`, `go_search_sync`, `go_settings`, `go_state`, `ldap_sync`, `ml_default_templates`, `pm_order_special_items`, `pm_portlet_settings`, `pm_report_templates`, `pm_user_fees`, `smi_certs`, `smi_pkcs12`, `su_announcements`, `su_notes`, `su_rss_feeds`, `su_visible_calendars`, `su_visible_lists`, `sync_addressbook_user`, `sync_contacts_maps`, `sync_contacts_syncs`, `sync_devices`, `sync_events_maps`, `sync_events_syncs`, `sync_notes_maps`, `sync_notes_syncs`, `sync_note_categories_user`, `sync_settings`, `sync_tasklist_user`, `sync_tasks_maps`, `sync_tasks_syncs`, `ti_rates`, `ti_settings`, `ti_statuses`, `ti_templates`, `ti_tickets`, `ti_types`; | ||
+ | |||
+ | DROP TABLE `ti_messages`, '`ab_sql`; | ||
+ | DROP TABLE `cal_groups` , | ||
+ | `cal_group_admins` ,`cal_events_declined`; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | DELETE FROM cal_calendars WHERE user_id NOT IN (SELECT id FROM go_users); | ||
+ | DELETE FROM cal_categories WHERE user_id NOT IN (SELECT id FROM go_users); | ||
+ | DELETE FROM cal_events WHERE calendar_id NOT IN ( | ||
+ | SELECT id | ||
+ | FROM cal_calendars | ||
+ | ); | ||
+ | DELETE FROM cal_exceptions WHERE event_id NOT IN ( | ||
+ | SELECT id | ||
+ | FROM cal_events | ||
+ | ); | ||
+ | DELETE FROM cal_participants WHERE event_id NOT IN ( | ||
+ | SELECT id | ||
+ | FROM cal_events | ||
+ | ); | ||
+ | |||
+ | delete from cal_views where user_id NOT IN (SELECT id FROM go_users); | ||
+ | delete from cal_views_calendars WHERE view_id not in (select id from cal_views); | ||
+ | delete from cal_settings WHERE user_id NOT IN (SELECT id FROM go_users); | ||
+ | |||
+ | DELETE FROM ta_lists where user_id NOT IN (SELECT id FROM go_users); | ||
+ | delete from ta_tasks where tasklist_id not in (select id from ta_lists); | ||
+ | delete from ta_settings where user_id NOT IN (SELECT id FROM go_users); | ||
+ | delete from ta_categories where user_id NOT IN (SELECT id FROM go_users); | ||
+ | |||
+ | |||
+ | DELETE FROM ab_addressbooks where user_id NOT IN (SELECT id FROM go_users); | ||
+ | delete from ab_contacts where addressbook_id not in (select id from ab_addressbooks); | ||
+ | delete from ab_companies where addressbook_id not in (select id from ab_addressbooks); | ||
+ | |||
+ | |||
+ | delete from go_acl_items where user_id NOT in (select id from go_users); | ||
+ | delete from go_acl where acl_id not in (select id from go_acl_items); | ||
+ | |||
+ | |||
+ | |||
+ | delete from go_users_groups where user_id NOT in (select id from go_users); | ||
+ | |||
+ | |||
+ | delete from no_categories where user_id NOT in (select id from go_users); | ||
+ | delete from no_notes where category_id not in (select id from no_categories);</pre> | ||
+ | |||
+ | |||
+ | ==Restoring a project== | ||
+ | |||
+ | We will show you an example of how to restore a single project. | ||
+ | Login to PhpMyadmin and select the backup database. | ||
+ | |||
+ | Browse the pr2_projects table and find out the "id" of the project you want to restore. | ||
+ | |||
+ | Now we need to delete all the data that does not belong to that project (replace [PROJECT_ID] with your project ID). | ||
+ | |||
+ | You can skip this part if you want to restore all projects: | ||
+ | |||
+ | <pre> | ||
+ | DELETE FROM pr2_projects WHERE id!=[PROJECT_ID]; | ||
+ | DELETE FROM pr2_resources WHERE project_id NOT IN (SELECT id FROM pr2_projects); | ||
+ | DELETE FROM pr2_expenses WHERE project_id NOT IN (SELECT id FROM pr2_projects); | ||
+ | DELETE FROM pr2_hours WHERE project_id NOT IN (SELECT id FROM pr2_projects); | ||
+ | DELETE FROM pr2_income WHERE project_id NOT IN (SELECT id FROM pr2_projects); | ||
+ | DELETE FROM pr2_resource_activity_rate WHERE project_id NOT IN (SELECT id FROM pr2_projects); | ||
+ | DELETE FROM pr2_tasks WHERE project_id NOT IN (SELECT id FROM pr2_projects); | ||
+ | DELETE FROM pr2_timers WHERE project_id NOT IN (SELECT id FROM pr2_projects); | ||
+ | DELETE FROM go_acl_items WHERE id NOT IN (SELECT acl_id FROM pr2_projects); | ||
+ | DELETE FROM go_acl WHERE acl_id NOT IN (SELECT acl_id FROM pr2_projects); | ||
+ | </pre> | ||
+ | |||
+ | Now we have our data prepared. We need to export the right tables using INSERT IGNORE commands. This will insert only non-existent records. | ||
+ | |||
+ | In PhpMyAdmin click at the Database name at the left frame so that you view all tables in the main screen. Now click at "Export". Select the tables: | ||
+ | |||
+ | |||
+ | #pr2_expenses | ||
+ | #pr2_hours | ||
+ | #pr2_income | ||
+ | #pr2_projects | ||
+ | #pr2_resources | ||
+ | #pr2_resource_activity_rate | ||
+ | #pr2_tasks | ||
+ | #pr2_timers | ||
+ | #go_acl_items | ||
+ | #go_acl | ||
+ | |||
+ | |||
+ | Uncheck the Structure box | ||
+ | Select "COMPLETE INSERTS" | ||
+ | |||
+ | Select "IGNORE INSERTS" or use "REPLACE" commands. | ||
+ | |||
+ | With insert ignore you will add only missing records. | ||
+ | |||
+ | With replace it will overwrite existing records too. | ||
+ | |||
+ | Select export type "INSERT" | ||
+ | |||
+ | Save the file and load it into your main database make a backup of your database before you do this in case something goes wrong. | ||
==Problems with unicode filenames== | ==Problems with unicode filenames== | ||
Line 194: | Line 439: | ||
Now uploading unicode named files should work! | Now uploading unicode named files should work! | ||
+ | |||
+ | |||
+ | ==E-mail is slow== | ||
+ | Group-Office is able to handle thousands of e-mails in a mailbox. A mailbox with 10.000 messages should be displayed within a second. Here are some tips if you experience slow mail performance: | ||
+ | |||
+ | #Use an IMAP server suitable for webmail with the correct storage format. Webmail requires much more performance than a desktop client. A desktop client can simply fetch mail in the background and cache everything locally. It doesn't matter if fetching new mails takes a few seconds. With webmail the IMAP server must return the last 30-50 messages in much less than a second.<br />There are two different storage formats for e-mail. These formats are mbox and maildir. It's higly recommended to use maildir format. With mbox format all e-mail messages are stored in one single plain text file. You can imagine that this is not very efficient when you have hundreds or thousands of e-mails in a mailbox. With Maildir the messages are stored in a much smarter way which doesn't cause the system to slow down when the mailbox size grows. With mbox format it's also not possible to create subfolders inside folders that contain messages. A folder contains either subfolders or messages but not both. To summarize maildir is faster and offers more flexibility. | ||
+ | #Make sure the network connection is fast between Group-Office and the IMAP server. Ideally the servers are located in the same network. If you can't do this you might want to fetch mail [http://www.group-office.com/wiki/Use_POP3_on_a_remote_catch-all_mailbox_for_local_delivery on the local server with fetchmail]. | ||
+ | #Install APC. Group-Office caches messages when they are fetched from the IMAP server once. You can get better caching performance when you install APC. | ||
+ | #You might also want to use [[Group-Office_on_separate_mail-_and_webserver_howto#Install_imapproxy|imapproxy]]. | ||
+ | |||
+ | ==winmail.dat attachments in e-mail== | ||
+ | You can install TNEF on the server to unpack winmail.dat files. This is however still not ideal. You can configure Outlook to disable the winmail.dat attachment: | ||
+ | |||
+ | http://support.microsoft.com/kb/138053 | ||
+ | |||
+ | ==My IP address is blocked What now?== | ||
+ | The administrator can remove the IP from the IP blacklist. If you can't login as admin then you'll have to remove the record manually from the MySQL database. It's located in the "bl_ips" table. | ||
+ | A second approach is to remove the modules/blacklist folder while logging in. | ||
+ | |||
+ | ==Useful queries== | ||
+ | '''Problem:''' Some recurring events are not syncing with z-push (Those events are created in the 3.7 version of GO). | ||
+ | |||
+ | '''Query:''' <pre> | ||
+ | update cal_events set mtime=unix_timestamp() where rrule!=""; | ||
+ | |||
+ | update cal_exceptions ex set ex.exception_event_id = ( | ||
+ | SELECT id from cal_events e WHERE e.exception_for_event_id = ex.event_id AND date_format( from_unixtime( ex.time ) , "%d-%m-%Y" ) = date_format( from_unixtime( e.start_time ) , "%d-%m-%Y" ) ) | ||
+ | where ex.exception_event_id =0; | ||
+ | </pre> | ||
+ | |||
+ | ==Sorting with special characters== | ||
+ | We use UTF8 in the database which supports a lot of characters. In the MySQL database we use the utf8_general_ci collation. This might not always sort the values as expected. For swedish you might want to change the collations to utf8_swedish_ci for example. You will have to run: | ||
+ | |||
+ | <pre>ALTER TABLE mytable CONVERT TO CHARACTER SET utf8</pre> | ||
+ | |||
+ | on each table. More details on available sets can be found in the MySQL manual: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-sets.html | ||
+ | |||
+ | ==Spam filtering is not working== | ||
+ | '''Problem:''' Mails marked as spam are still added to the inbox of my email. | ||
+ | |||
+ | '''Solution:''' Check in the sieve rules of the mailbox if the 'spam' rule is enabled and has a correct spam folder given. | ||
+ | |||
+ | '''Problem:''' Mails does not get marked as spam, there are no spam headers in the mail. | ||
+ | |||
+ | '''Solution:''' On the mailserver, check if the local_domain_acl will be correctly set. | ||
+ | Open the following file on the mailserver: /etc/amavis/conf.d/05-domain_id | ||
+ | |||
+ | It will contain the following: | ||
+ | <pre> | ||
+ | use strict; | ||
+ | |||
+ | # $mydomain is used just for convenience in the config files and it is not | ||
+ | # used internally by amavisd-new except in the default X_HEADER_LINE (which | ||
+ | # Debian overrides by default anyway). | ||
+ | |||
+ | chomp($mydomain = `head -n 1 /etc/mailname`); | ||
+ | |||
+ | # amavisd-new needs to know which email domains are to be considered local | ||
+ | # to the administrative domain. Only emails to "local" domains are subject | ||
+ | # to certain functionality, such as the addition of spam tags. | ||
+ | # | ||
+ | # Default local domains to $mydomain and all subdomains. Remember to | ||
+ | # override or redefine this if $mydomain is changed later in the config | ||
+ | # sequence. | ||
+ | |||
+ | @local_domains_acl = ( ".$mydomain" ); | ||
+ | |||
+ | 1; # ensure a defined return | ||
+ | </pre> | ||
+ | |||
+ | Now change this: | ||
+ | <pre> | ||
+ | @local_domains_acl = ( ".$mydomain" ); | ||
+ | </pre> | ||
+ | To: | ||
+ | <pre> | ||
+ | @local_domains_acl = ( "." ); | ||
+ | </pre> | ||
+ | |||
+ | Save the file and restart amavis. | ||
+ | In most cases the spam headers are added to the mail again. | ||
+ | |||
+ | |||
+ | ==Deduplicating files== | ||
+ | |||
+ | Make a backup first and run these queries: | ||
+ | |||
+ | <pre> | ||
+ | DELETE f1 FROM fs_folders f1, fs_folders f2 WHERE f1.id > f2.id AND f1.name = f2.name and f1.parent_id = f2.parent_id; | ||
+ | ALTER TABLE `fs_folders` ADD UNIQUE( `parent_id`, `name`); | ||
+ | |||
+ | |||
+ | DELETE fi FROM fs_files fi WHERE NOT EXISTS (SELECT * FROM fs_folders fo WHERE fo.id = fi.folder_id); | ||
+ | DELETE f1 FROM fs_files f1, fs_files f2 WHERE f1.id > f2.id AND f1.name = f2.name and f1.folder_id = f2.folder_id; | ||
+ | |||
+ | ALTER TABLE `fs_files` ADD UNIQUE( `folder_id`, `name`); | ||
+ | |||
+ | DELETE c FROM go_search_cache c WHERE model_name = 'GO\\Files\\Model\\Folder' AND NOT EXISTS(SELECT * FROM fs_folders WHERE id=c.model_id); | ||
+ | DELETE c FROM go_search_cache c WHERE model_name = 'GO\\Files\\Model\\File' AND NOT EXISTS(SELECT * FROM fs_files WHERE id=c.model_id); | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | After this run a database check and then a filesystem sync from admin tools. |
Latest revision as of 07:58, 24 July 2018
Contents
- 1 General instructions
- 2 Frequently Occurring Errors (FOE)
- 2.1 GOTA or java file upload not working
- 2.2 JSONStore load exception
- 2.3 ... not found in GO:Getmodel()" error.
- 2.4 PHP Notice: session_start(): ps_files_cleanup_dir: opendir(...) failed: Permission denied (13) in ../go/base/Session.php on line 54
- 2.5 Problems with sending mail
- 2.6 I get the error: "The Group-Office javascripts were not loaded. Check the host property in config.php and see if the file_storage_path folder and it's contents are writable"
- 2.7 I get the error: "The Group-Office javascripts were not loaded. Your local_url and local_path configuration properties are probably configured incorrectly."
- 2.8 I don't get past "Loading base system " or "Loading modules" The screen just hangs
- 2.9 allowed memory size was exhausted
- 2.10 Could not login to postfixadmin module
- 2.11 postfix/smtp[4893]: connect to 127.0.0.1[127.0.0.1]:10024: Connection refused
- 2.12 SQLSTATE Column not found errors
- 3 Problems with synchronization
- 4 Problems with creating files or folder
- 5 Restoring lost data from a MySQL backup
- 6 Restoring a user
- 7 Restoring a project
- 8 Problems with unicode filenames
- 9 E-mail is slow
- 10 winmail.dat attachments in e-mail
- 11 My IP address is blocked What now?
- 12 Useful queries
- 13 Sorting with special characters
- 14 Spam filtering is not working
- 15 Deduplicating files
General instructions
- Check Admin tools -> System check. This should report no errors or warnings. This are generally things you or your hosting provider should solve.
- Check the error logs. They are the most important for problem solving!
- Try running a database check at Start menu -> Tools -> Database check
- Enable debugging ( set $config['debug']=true;). Make sure you change this back after fixing the problem because it will slow Group-Office down.
- Search this site
- Search the forums
- If you have a support contact send a good description of the problem and relevant error messages to Intermesh at http://shop.group-office.com/Support.
Error log
You can find them as admin in Start menu -> Files. Click on "Log files" in the folder tree. The file is located in the $config['file_storage_path'] /log/error.log. (Default /home/groupoffice/log/error.log). If you can't find errors in there you might want to double check the Apache error log too. By default that's in /var/log/apache/error.log.
Frequently Occurring Errors (FOE)
GOTA or java file upload not working
In a recent Java update there seems to be a problem with some SSL certificates. It fails to verify them. You can follow this workaround: http://www.kunxi.org/blog/2015/01/bypass-the-certpathvalidatorexception-caused-by-malformed-ocsp-response/
JSONStore load exception
Something went wrong on the webserver. Check the error log for more details.
... not found in GO:Getmodel()" error.
Try to rebuild the searchcache and do a database check.
PHP Notice: session_start(): ps_files_cleanup_dir: opendir(...) failed: Permission denied (13) in ../go/base/Session.php on line 54
On Debian or Ubuntu servers you can set session.gc_probability = 0 in /etc/php5/apache2/php.ini to avoid this error. More info can be found here. On other systems the problem is that the webserver is not allowed to write to the path where PHP stores it's sessions. You can make the apache user the owner of this folder or you can change "session.save_path" in php.ini to point to another writable directory.
Problems with sending mail
Check the SMTP settings in config.php if you're not sending with the mail module. Look for the values:
$config["smtp_server"]="mail.example.com"; $config["smtp_port"]="25"; $config["smtp_username"]=""; $config["smtp_password"]=""; $config["smtp_encryption"]="";
If you have problems with the mail module the settings can be configured at E-mail -> Right click on account in the tree -> Properties -> Outgoing mailserver
If you are changing the SMTP server (e.g. all mail from all users should go via localhost), you can update the settings with the following SQL statement:
UPDATE `em_accounts` SET `smtp_host`= "localhost";
I get the error: "The Group-Office javascripts were not loaded. Check the host property in config.php and see if the file_storage_path folder and it's contents are writable"
Check the value of $config['file_storage_path'] in config.php. The path here should point to an existing folder for and should have a trailing slash. The folder and it's contents should be writable. If this is all right then you should check your webserver log for errors.
I get the error: "The Group-Office javascripts were not loaded. Your local_url and local_path configuration properties are probably configured incorrectly."
This means that the local_url or local_path property in the config.php are not defined correctly. Group-Office needs a directory to write cached javascript files that are accessible through the webserver. So when Group-Office is loaded it will load http://url.to.go/<local_url>/cache/somescript.js. The URL is not valid so you must correct it.
It can also be that Apache does not have write permissions to the local directory. On a Debian server this can be solved with:
chown www-data:www-data /path.to/local
I don't get past "Loading base system " or "Loading modules" The screen just hangs
Take the following steps:
- View the source of the HTML page to see if there is an error in the source. Press CTRL+U to view the source.
- Check if there is a Javascript error. In Internet Explorer there is a warning Icon at the toolbar and Firefox shows the errors in the Error console. Firebug is also a useful tool to track down javascript errors but is generally only useful for developers.
- Check your error log.
allowed memory size was exhausted
Raise the memory_limit setting in /etc/php5/apache2/php.ini or /etc/php.ini. Path of php.ini might be different on your system.
Could not login to postfixadmin module
There is a problem with creating a mailbox for the new user. Group-Office attempts to connect to the postfix admin module. Please check the URL hostname and password in /etc/groupoffice/globalconfig.inc.php. It's used to connect to the Group-Office installation with the admin login. The "serverclient_server_url" defaults to http://localhost/groupoffice/. If you have a pro license you need to change this to the licensed domain. (http://yourlicensedhost/groupoffice/)
postfix/smtp[4893]: connect to 127.0.0.1[127.0.0.1]:10024: Connection refused
Amavis is not running or is not accepting connections. This is often caused by an incorrect machine hostname (It is not a fully qualified domain name). You can change the system name or you can set the correct hostname in the file: /etc/amavis/conf.d/05-node_id
SQLSTATE Column not found errors
If you just upgraded the database the database might not have been upgraded automatically. you can run:
http://youdomain/pathtogroupoffice/index.php?r=maintenance/upgrade
at any time to update the database to the latest structure.
Problems with synchronization
If you have problems with synchronizing Group-Office then please take following steps first before contacting Intermesh:
- Double check the setup and read the instructions
- Check the error logs they are very important.
- If you are using ActiveSync in combination of Z-Push 1.*, put an empty debug.txt file in modules/z-push/. Make it writable for Apache. This log will be filled with debugging information when you sync.
- If you are using ActiveSync in combination with Z-Push 2.* then check the following debug options: Z-Push 2(.1) debugging
- If you're using SyncML (Funambol syncevoution or Nokia's). Put $config['syncml_debug_level']=3; in config.php for debugging. This will create /home/groupoffice/log/syncml.log with debug info.
- Check if the solution is on this page. If you have error messages like "Trying to destroy uninitialized session" you might have two simultaneos Active-Sync Sessions from the same client.
- Try performing a 'Slow or Reset sync'. With a slow sync all data gets send to Group-Office and Group-Office sends back all missing data.
- Try performing a sync in mode: 'Replace all local data' (Name might differ per device). The device will delete all local calendar and contact data and Group-Office will send all data to the client. Of course only do this when the Group-Office data is leading.
- Search the forums
- Send to Intermesh: Apache error log (eg /var/log/apache/error.log), Group-Office error log (eg /home/groupoffice/log/*.log), Client error log and a description of what happens exactly. Without the logs we can't do anything!
Common errors
The IPHONE cannot connect to the exchange server and you don't have SSL support on the server
When you set-up the exchange account then you are unable to turn SSL off because that option is not showed on the account creation page.
So the first time the phone will always search for the server through SSL.
You can fix this manually by saving the account anyway (The phone will give you this option).
After that, when the account is stored on the phone, you can edit the connection information for it and turn SSL off.
Then the phone tries again to search for the server and then it should be found and you can start using the sync.
"No SyncML response" or "Server Failure: server returned error code -1" or "Invalid hostaddress"
The server probably didn't reply because an error occurred. Check the apache error log for errors.
Also with the Synthesis client check if you have set the Server Version to SyncML 1.1 and not 1.2. You can find that setting at Extras->Settings->Options
Not found (404)
You probably setup an invalid remote database for contacts, calendar or todo's. Please check the installation instructions for the correct values (vcal, vcaltodo, vtodo, vcard etc...)
PHP Fatal error: Call to a member function children() on a non-object in ...
If you have the Synthesis client please check if the server version is set to SyncML 1.1
wbxml to xml or vice versa conversion failed
Check if $config['cmd_wbxml2xml'] and $config['cmd_xml2wbxml'] are set and check if these commands are actually executable by apache.
wbxml2xml failed: Unknown Public ID
[Group-Office][20070619 16:24][notloggedin]: Fatal error: wbxml2xml conversion failed
[Group-Office][20070619 16:24][notloggedin]: XML error: no element found at line 1
Check if you have libwbxml2 version 0.9.2 or higher installed. Any earlier version will fail.
Or you have set the client to use SyncML version 1.2. In that case change it to 1.1
wbxml2xml failed: Unexpected End Of WBXML Buffer
[Group-Office][20070619 18:22][notloggedin]: Fatal error: wbxml2xml conversion failed
[Group-Office][20070619 18:22][notloggedin]: XML error: no element found at line 1
Check if you have libwbxml2 version 0.9.2 or higher installed. Any earlier version will fail.
Problems with creating files or folder
If you are having errors like these:
Warning: mkdir() [function.mkdir]: Permission denied
Failed to create folder(s): Array(..,..,)
Then you have to take the following steps:
- Check the filesystem permissions of the paths mentioned in the error
- Check if safe_mode is enabled and denies you access
- Check if open_basedir is set and denies you access
The bottom line is that the Apache user (Usually apache or www-data) needs write permissions on the following folders defined in config.php:
$config['file_storage_path']
$config['tmpdir']
You can put the following script in the directory where GO.php is to do a quick test in the browser:
<?php require('GO.php'); $folder = new GO_Base_Fs_Folder(GO::config()->file_storage_path.'test'); echo "Trying to create test folder: ".$folder->path()."\n"; if($folder->create()){ echo "Success!\n"; }else{ echo "Failed!\n"; }
Disable open_basedir in Plesk
If you get errors with "open_basedir restriction in effect" you should disable open_basedir or change $config['file_storage_path'] and $config['tmpdir'] to an allowed path within the open_basedir setting.
To disable open_basedir in a Plesk managed server do the following:
Login as root:
vi /home/httpd/vhosts/domain.com/conf/vhost.conf
Enter:
<Directory /var/www/vhosts/domain.com/httpdocs><br /> php_admin_flag safe_mode off php_admin_value open_basedir none php_admin_flag magic_quotes_gpc off php_admin_flag log_errors on </Directory>
Reload the conf into httpd.include:
PLESK 5/6
/usr/local/psa/admin/bin/my_apci_rst
PLESK 7
/usr/local/psa/admin/sbin/websrvmng -u --vhost-name=domain.com
Now it should be disabled
Restoring lost data from a MySQL backup
To restore a backup load the backup database into a separate database and use PhpMyAdmin to export the right data easily. First you have to create the backup DB (as mysql root), assign privileges and import it (as groupoffice-com DB user):
mysql -u root -p mysql> CREATE DATABASE go7JULY2013; mysql> grant all privileges on go7JULY2013.* to 'groupoffice-com' with grant option; mysql> exit mysql -u groupoffice-com -p go7JULY2013 < groupoffice7JULY2013.sql
We will show you an example of how to restore a single calendar. This way of restoring will leave all existing appointments intact but it will restore lost appointments. Login to PhpMyadmin and select the backup database. Browse the cal_calendars table and find out the "id" of the calendar you want to store.
Calendar restore
Now delete all calendar data that does not belong to that calendar (replace [CALENDAR_ID] with your calendar ID). You can skip this part if you want to restore all calendars:
DELETE FROM cal_calendars WHERE id!=[CALENDAR_ID]; DELETE FROM cal_events WHERE calendar_id NOT IN (SELECT id FROM cal_calendars); DELETE FROM cal_exceptions WHERE event_id NOT IN (SELECT id FROM cal_events); DELETE FROM cal_participants WHERE event_id NOT IN (SELECT id FROM cal_events); DELETE FROM go_acl_items WHERE id NOT IN (SELECT acl_id FROM cal_calendars); DELETE FROM go_acl WHERE acl_id NOT IN (SELECT acl_id FROM cal_calendars);
Now we have our data prepared. We need to export the right tables using INSERT IGNORE commands. This will insert only non-existent records.
In PhpMyAdmin click at the Database name at the left frame so that you view all tables in the main screen. Now click at "Export". Select the tables:
- cal_events
- cal_calendars
- cal_exceptions
- cal_participants
- go_acl
- go_acl_items
Uncheck the Structure box
Select "COMPLETE INSERTS"
Select "IGNORE INSERTS" or use "REPLACE" commands. With insert ignore you will add only missing records. With replace it will overwrite existing records too.
Select export type "INSERT"
Save the file and load it into your main database make a backup of your database before you do this in case something goes wrong.
Addressbook restore
Now delete all addressbook data that does not belong to that addressbook (replace [ADDRESSBOOK_ID] with your addressbook ID). You can skip this part if you want to restore all addressbooks:
DELETE FROM ab_addressbooks WHERE id!=[ADDRESSBOOK_ID]; DELETE FROM ab_contacts WHERE addressbook_id NOT IN (SELECT id FROM ab_addressbooks); DELETE FROM ab_companies WHERE addressbook_id NOT IN (SELECT id FROM ab_addressbooks); DELETE FROM go_acl_items WHERE id NOT IN (SELECT acl_id FROM ab_addressbooks); DELETE FROM go_acl WHERE acl_id NOT IN (SELECT acl_id FROM ab_addressbooks);
Now we have our data prepared. We need to export the right tables using INSERT IGNORE commands. This will insert only non-existent records.
In PhpMyAdmin click at the Database name at the left frame so that you view all tables in the main screen. Now click at "Export". Select the tables:
- ab_addressbooks
- ab_contacts
- ab_companies
- go_acl
- go_acl_items
Uncheck the Structure box
Select "COMPLETE INSERTS"
Select "IGNORE INSERTS" or use "REPLACE" commands. With insert ignore you will add only missing records. With replace it will overwrite existing records too.
Select export type "INSERT"
Save the file and load it into your main database make a backup of your database before you do this in case something goes wrong.
CMS website restore
In this example you want to restore the website with id=1. The following queries will remove all except site 1.
delete from cms_files where exists(select id from cms_folders fo where fo.site_id!=1 and cms_files.folder_id=fo.id); delete from cms_folders where site_id!=1;
Now export the data like the calendar example.
Restoring a user
Import a backup in to a database. Then use PhpMyAdmin to run the queries below. It will remove all data except the data to restore. You can then export it using IGNORE INSERTS and import that into the live database. Make sure you drop all tables that you don't want to restore!
# delete all users except for the user to restore. DELETE FROM go_users WHERE username!='<THEUSERNAM>'; #Drop tables we won't restore. You need to drop more tables depending on your installed modules! DROP TABLE `bl_ips`, `cf_1`, `cf_2`, `cf_3`, `cf_4`, `cf_6`, `cf_7`, `cf_8`, `cf_9`, `cf_10`, `cf_11`, `cf_12`, `cf_13`, `cf_15`, `cf_16`, `cf_17`, `cf_19`, `cf_20`, `cf_categories`, `cf_fields`, `cf_select_options`, `cf_select_tree_options`, `cf_tree_select_options`, `co_comments`, `dav_events`, `dav_tasks`, `emp_folders`, `em_accounts`, `em_accounts_collapsed`, `em_accounts_sort`, `em_aliases`, `em_filters`, `em_folders`, `em_folders_expanded`, `em_links`, `em_messages_cache`, `fb_acl`, `fs_files`, `fs_folders`, `fs_new_files`, `fs_notifications`, `fs_shared_cache`, `fs_statuses`, `fs_status_history`, `fs_templates`, `go_address_format`, `go_cache`, `go_countries`, `go_db_sequence`, `go_groups`, `go_holidays`, `go_iso_address_format`, `go_links_1`, `go_links_2`, `go_links_3`, `go_links_4`, `go_links_6`, `go_links_7`, `go_links_8`, `go_links_9`, `go_links_10`, `go_links_11`, `go_links_12`, `go_links_13`, `go_links_14`, `go_links_15`, `go_links_16`, `go_links_17`, `go_links_18`, `go_links_19`, `go_links_20`, `go_link_descriptions`, `go_link_folders`, `go_log`, `go_mail_counter`, `go_modules`, `go_reminders`, `go_reminders_users`, `go_saved_search_queries`, `go_search_cache`, `go_search_sync`, `go_settings`, `go_state`, `ldap_sync`, `ml_default_templates`, `pm_order_special_items`, `pm_portlet_settings`, `pm_report_templates`, `pm_user_fees`, `smi_certs`, `smi_pkcs12`, `su_announcements`, `su_notes`, `su_rss_feeds`, `su_visible_calendars`, `su_visible_lists`, `sync_addressbook_user`, `sync_contacts_maps`, `sync_contacts_syncs`, `sync_devices`, `sync_events_maps`, `sync_events_syncs`, `sync_notes_maps`, `sync_notes_syncs`, `sync_note_categories_user`, `sync_settings`, `sync_tasklist_user`, `sync_tasks_maps`, `sync_tasks_syncs`, `ti_rates`, `ti_settings`, `ti_statuses`, `ti_templates`, `ti_tickets`, `ti_types`; DROP TABLE `ti_messages`, '`ab_sql`; DROP TABLE `cal_groups` , `cal_group_admins` ,`cal_events_declined`; DELETE FROM cal_calendars WHERE user_id NOT IN (SELECT id FROM go_users); DELETE FROM cal_categories WHERE user_id NOT IN (SELECT id FROM go_users); DELETE FROM cal_events WHERE calendar_id NOT IN ( SELECT id FROM cal_calendars ); DELETE FROM cal_exceptions WHERE event_id NOT IN ( SELECT id FROM cal_events ); DELETE FROM cal_participants WHERE event_id NOT IN ( SELECT id FROM cal_events ); delete from cal_views where user_id NOT IN (SELECT id FROM go_users); delete from cal_views_calendars WHERE view_id not in (select id from cal_views); delete from cal_settings WHERE user_id NOT IN (SELECT id FROM go_users); DELETE FROM ta_lists where user_id NOT IN (SELECT id FROM go_users); delete from ta_tasks where tasklist_id not in (select id from ta_lists); delete from ta_settings where user_id NOT IN (SELECT id FROM go_users); delete from ta_categories where user_id NOT IN (SELECT id FROM go_users); DELETE FROM ab_addressbooks where user_id NOT IN (SELECT id FROM go_users); delete from ab_contacts where addressbook_id not in (select id from ab_addressbooks); delete from ab_companies where addressbook_id not in (select id from ab_addressbooks); delete from go_acl_items where user_id NOT in (select id from go_users); delete from go_acl where acl_id not in (select id from go_acl_items); delete from go_users_groups where user_id NOT in (select id from go_users); delete from no_categories where user_id NOT in (select id from go_users); delete from no_notes where category_id not in (select id from no_categories);
Restoring a project
We will show you an example of how to restore a single project. Login to PhpMyadmin and select the backup database.
Browse the pr2_projects table and find out the "id" of the project you want to restore.
Now we need to delete all the data that does not belong to that project (replace [PROJECT_ID] with your project ID).
You can skip this part if you want to restore all projects:
DELETE FROM pr2_projects WHERE id!=[PROJECT_ID]; DELETE FROM pr2_resources WHERE project_id NOT IN (SELECT id FROM pr2_projects); DELETE FROM pr2_expenses WHERE project_id NOT IN (SELECT id FROM pr2_projects); DELETE FROM pr2_hours WHERE project_id NOT IN (SELECT id FROM pr2_projects); DELETE FROM pr2_income WHERE project_id NOT IN (SELECT id FROM pr2_projects); DELETE FROM pr2_resource_activity_rate WHERE project_id NOT IN (SELECT id FROM pr2_projects); DELETE FROM pr2_tasks WHERE project_id NOT IN (SELECT id FROM pr2_projects); DELETE FROM pr2_timers WHERE project_id NOT IN (SELECT id FROM pr2_projects); DELETE FROM go_acl_items WHERE id NOT IN (SELECT acl_id FROM pr2_projects); DELETE FROM go_acl WHERE acl_id NOT IN (SELECT acl_id FROM pr2_projects);
Now we have our data prepared. We need to export the right tables using INSERT IGNORE commands. This will insert only non-existent records.
In PhpMyAdmin click at the Database name at the left frame so that you view all tables in the main screen. Now click at "Export". Select the tables:
- pr2_expenses
- pr2_hours
- pr2_income
- pr2_projects
- pr2_resources
- pr2_resource_activity_rate
- pr2_tasks
- pr2_timers
- go_acl_items
- go_acl
Uncheck the Structure box
Select "COMPLETE INSERTS"
Select "IGNORE INSERTS" or use "REPLACE" commands.
With insert ignore you will add only missing records.
With replace it will overwrite existing records too.
Select export type "INSERT"
Save the file and load it into your main database make a backup of your database before you do this in case something goes wrong.
Problems with unicode filenames
If you are having problems with filenames showing up wierd on the filesystem then you must set the locale of Linux to UTF-8. On Debian you can do this as following:
Run:
$ locale
If this outputs something like the output below then all should work fine.
LANG=nl_NL.UTF-8 LC_CTYPE="nl_NL.UTF-8" LC_NUMERIC="nl_NL.UTF-8" LC_TIME="nl_NL.UTF-8" LC_COLLATE="nl_NL.UTF-8" LC_MONETARY="nl_NL.UTF-8" LC_MESSAGES="nl_NL.UTF-8" LC_PAPER="nl_NL.UTF-8" LC_NAME="nl_NL.UTF-8" LC_ADDRESS="nl_NL.UTF-8" LC_TELEPHONE="nl_NL.UTF-8" LC_MEASUREMENT="nl_NL.UTF-8" LC_IDENTIFICATION="nl_NL.UTF-8" LC_ALL=
If there's no UTF-8 in the locale then you should change it.
Run:
$ dpkg-reconfigure locales
Select en_US.UTF8 for example. You can select multiple values.
After that set the locale:
$ export LC_ALL=en_US.UTF8
Now uploading unicode named files should work!
E-mail is slow
Group-Office is able to handle thousands of e-mails in a mailbox. A mailbox with 10.000 messages should be displayed within a second. Here are some tips if you experience slow mail performance:
- Use an IMAP server suitable for webmail with the correct storage format. Webmail requires much more performance than a desktop client. A desktop client can simply fetch mail in the background and cache everything locally. It doesn't matter if fetching new mails takes a few seconds. With webmail the IMAP server must return the last 30-50 messages in much less than a second.
There are two different storage formats for e-mail. These formats are mbox and maildir. It's higly recommended to use maildir format. With mbox format all e-mail messages are stored in one single plain text file. You can imagine that this is not very efficient when you have hundreds or thousands of e-mails in a mailbox. With Maildir the messages are stored in a much smarter way which doesn't cause the system to slow down when the mailbox size grows. With mbox format it's also not possible to create subfolders inside folders that contain messages. A folder contains either subfolders or messages but not both. To summarize maildir is faster and offers more flexibility. - Make sure the network connection is fast between Group-Office and the IMAP server. Ideally the servers are located in the same network. If you can't do this you might want to fetch mail on the local server with fetchmail.
- Install APC. Group-Office caches messages when they are fetched from the IMAP server once. You can get better caching performance when you install APC.
- You might also want to use imapproxy.
winmail.dat attachments in e-mail
You can install TNEF on the server to unpack winmail.dat files. This is however still not ideal. You can configure Outlook to disable the winmail.dat attachment:
http://support.microsoft.com/kb/138053
My IP address is blocked What now?
The administrator can remove the IP from the IP blacklist. If you can't login as admin then you'll have to remove the record manually from the MySQL database. It's located in the "bl_ips" table. A second approach is to remove the modules/blacklist folder while logging in.
Useful queries
Problem: Some recurring events are not syncing with z-push (Those events are created in the 3.7 version of GO).
Query:update cal_events set mtime=unix_timestamp() where rrule!=""; update cal_exceptions ex set ex.exception_event_id = ( SELECT id from cal_events e WHERE e.exception_for_event_id = ex.event_id AND date_format( from_unixtime( ex.time ) , "%d-%m-%Y" ) = date_format( from_unixtime( e.start_time ) , "%d-%m-%Y" ) ) where ex.exception_event_id =0;
Sorting with special characters
We use UTF8 in the database which supports a lot of characters. In the MySQL database we use the utf8_general_ci collation. This might not always sort the values as expected. For swedish you might want to change the collations to utf8_swedish_ci for example. You will have to run:
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8
on each table. More details on available sets can be found in the MySQL manual: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-sets.html
Spam filtering is not working
Problem: Mails marked as spam are still added to the inbox of my email.
Solution: Check in the sieve rules of the mailbox if the 'spam' rule is enabled and has a correct spam folder given.
Problem: Mails does not get marked as spam, there are no spam headers in the mail.
Solution: On the mailserver, check if the local_domain_acl will be correctly set. Open the following file on the mailserver: /etc/amavis/conf.d/05-domain_id
It will contain the following:
use strict; # $mydomain is used just for convenience in the config files and it is not # used internally by amavisd-new except in the default X_HEADER_LINE (which # Debian overrides by default anyway). chomp($mydomain = `head -n 1 /etc/mailname`); # amavisd-new needs to know which email domains are to be considered local # to the administrative domain. Only emails to "local" domains are subject # to certain functionality, such as the addition of spam tags. # # Default local domains to $mydomain and all subdomains. Remember to # override or redefine this if $mydomain is changed later in the config # sequence. @local_domains_acl = ( ".$mydomain" ); 1; # ensure a defined return
Now change this:
@local_domains_acl = ( ".$mydomain" );
To:
@local_domains_acl = ( "." );
Save the file and restart amavis. In most cases the spam headers are added to the mail again.
Deduplicating files
Make a backup first and run these queries:
DELETE f1 FROM fs_folders f1, fs_folders f2 WHERE f1.id > f2.id AND f1.name = f2.name and f1.parent_id = f2.parent_id; ALTER TABLE `fs_folders` ADD UNIQUE( `parent_id`, `name`); DELETE fi FROM fs_files fi WHERE NOT EXISTS (SELECT * FROM fs_folders fo WHERE fo.id = fi.folder_id); DELETE f1 FROM fs_files f1, fs_files f2 WHERE f1.id > f2.id AND f1.name = f2.name and f1.folder_id = f2.folder_id; ALTER TABLE `fs_files` ADD UNIQUE( `folder_id`, `name`); DELETE c FROM go_search_cache c WHERE model_name = 'GO\\Files\\Model\\Folder' AND NOT EXISTS(SELECT * FROM fs_folders WHERE id=c.model_id); DELETE c FROM go_search_cache c WHERE model_name = 'GO\\Files\\Model\\File' AND NOT EXISTS(SELECT * FROM fs_files WHERE id=c.model_id);
After this run a database check and then a filesystem sync from admin tools.