`
SilenceCliff
  • 浏览: 38231 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Open-XChange安装小记 : 进公司干的第二件事情

阅读更多
 

Open-Xchange安装日志<!----><o:p></o:p>

<o:p> </o:p>

Pre-install<o:p></o:p>

<o:p> </o:p>

安装apt<o:p></o:p>

<o:p> </o:p>

wget  http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt-0.5.5cnc6-frl.i386.rpm<o:p></o:p>

rpm  -ihv  apt-<!----><st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">0.5.5</st1:chsdate>cnc6-frl.i386.rpm<o:p></o:p>

apt-get  update<o:p></o:p>

<o:p> </o:p>

vi /etc/apt/sources.list<o:p></o:p>

在该文件中添加以下五行:<o:p></o:p>

<o:p> </o:p>

rpm             http://mirrors.sunsite.dk/jpackage 1.5/generic free<o:p></o:p>

rpm-src         http://mirrors.sunsite.dk/jpackage 1.5/generic free non-free<o:p></o:p>

rpm             http://mirrors.sunsite.dk/jpackage 1.5/redhat-9 free<o:p></o:p>

rpm-src         http://mirrors.sunsite.dk/jpackage 1.5/redhat-9 free<o:p></o:p>

rpm             http://apt.sw.be redhat/9/en/i386 dag<o:p></o:p>

<o:p> </o:p>

返回命令行提示符.<o:p></o:p>

<o:p> </o:p>

apt-get  update<o:p></o:p>

apt-get install postgresql postgresql-server postgresql-libs<o:p></o:p>

<o:p> </o:p>

#apt-get install httpd httpd-manual<o:p></o:p>

#:因为在原有linux服务器上已经安装了Apache http server2.2 故无需执行<o:p></o:p>

<o:p> </o:p>

apt-get install xerces-j2<o:p></o:p>

apt-get install jdom<o:p></o:p>

apt-get install postgresql-jdbc<o:p></o:p>

apt-get install mod_jk-ap20<o:p></o:p>

<o:p> </o:p>

#此命令为下载安装ApacheTomcat的连接器<o:p></o:p>

#除非linux上的Apache安装在默认路径/usr/local/apache2<o:p></o:p>

#否则,在此安装的连接器是不起作用的.<o:p></o:p>

#后面mod_jk须自行手动下载、编译、安装、配置<o:p></o:p>

<o:p> </o:p>

apt-get install perl-Convert-ASN1<o:p></o:p>

apt-get install perl-ldap<o:p></o:p>

<o:p> </o:p>

#perl模块下载时也自动下载的所需的模块包括:<o:p></o:p>

# perl-IO-Socket-SSL<o:p></o:p>

# perl-Net-SSLeay<o:p></o:p>

# perl-XML-NamespaceSupport<o:p></o:p>

# perl-XML-SAX<o:p></o:p>

<o:p> </o:p>

apt-get install perl-Authen-SASL<o:p></o:p>

#命令提示找不到相应的模块,可通过CPAN安装,如下:<o:p></o:p>

<o:p> </o:p>

perl –MCPAN –e shell<o:p></o:p>

cpan>install Authen::SASL<o:p></o:p>

<o:p> </o:p>

http://sietse.net/exoops/modules/OpenXchange/?distr=rh9下载<o:p></o:p>

openldap-clients-2.0.27-8.i386.rpm<o:p></o:p>

openldap-servers-2.0.27-8.i386.rpm<o:p></o:p>

/home/xkx/ox目录下。<o:p></o:p>

cd /home/xkx/ox<o:p></o:p>

rpm -Uvh openldap-servers-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">2.0.27</st1:chsdate>-8.i386.rpm openldap-clients-2.0.27-8.i386.rpm<o:p></o:p>

service ldap start<o:p></o:p>

<o:p> </o:p>

Sun官方网站下载<o:p></o:p>

j2sdk-1_4_2_10-linux-i586.bin<o:p></o:p>

jaf-1_0_2-upd2.zip<o:p></o:p>

javamail-1_4-ea.zip<o:p></o:p>

存放到/home/xkx/ox目录下<o:p></o:p>

<o:p> </o:p>

安装JDK<o:p></o:p>

cd /home/xkx/ox<o:p></o:p>

chmod 755 j2sdk-1_4_2_10-linux-i586.bin<o:p></o:p>

<o:p> </o:p>

/etc/profile,/etc/profile.d/java.sh,/root/.bashrc下分别加入如下四行:<o:p></o:p>

JAVA_HOME="/home/xkx/ox/j2sdk<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.4.2</st1:chsdate>_10"<o:p></o:p>

JAVA_BIN="/home/xkx/ox/j2sdk<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.4.2</st1:chsdate>_10/bin"<o:p></o:p>

PATH=$JAVA_HOME/bin:$PATH<o:p></o:p>

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar<o:p></o:p>

#设置了环境变量后,可在命令提示符下检查:<o:p></o:p>

echo $JAVA_HOME<o:p></o:p>

java  -version<o:p></o:p>

<o:p> </o:p>

解压jaf-1_0_2-upd2.zipjavamail-1_4-ea.zip,分别把其中的mail.jaractivation.jar拷贝到<o:p></o:p>

/usr/share/java目录下<o:p></o:p>

<o:p> </o:p>

apt-get install ant <o:p></o:p>

<o:p> </o:p>

Apache官方网站下载<o:p></o:p>

jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>.tar.gz<o:p></o:p>

jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>-deployer.tar.gz<o:p></o:p>

/home/xkx目录下<o:p></o:p>

<o:p> </o:p>

tar –xvzf  jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>.tar.gz<o:p></o:p>

cd  akarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>/bin<o:p></o:p>

./startup.sh<o:p></o:p>

<o:p> </o:p>

jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>-deployer.tar.gz解压后取出servlet-api.jar,并拷贝到/usr/share/java下。<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

Configure<o:p></o:p>

<o:p> </o:p>

1 Postgresql<o:p></o:p>

<o:p> </o:p>

service postgresql start<o:p></o:p>

编辑文件/var/lib/pgsql/data/postgresql.conf,确保有下面这样一行:<o:p></o:p>

tcpip_socket = true<o:p></o:p>

<o:p> </o:p>

编辑文件/var/lib/pgsql/data/pg_hba.conf,确保有下面这样的两行:<o:p></o:p>

local   all         all                                             trust<o:p></o:p>

host    all         all         127.0.0.1         255.255.255.255      trust<o:p></o:p>

<o:p> </o:p>

service postgresql restart<o:p></o:p>

useradd ox<o:p></o:p>

su – postgres<o:p></o:p>

createuser -A -D -P openxchange<o:p></o:p>

键入密码:123456<o:p></o:p>

createdb openxchange<o:p></o:p>

exit<o:p></o:p>

<o:p> </o:p>

2、安装OX<o:p></o:p>

<o:p> </o:p>

http://mirror.open-xchange.org/ox/EN/community/download.htm下载<o:p></o:p>

open-xchange-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">0.8.0</st1:chsdate>-6.tar.gz<o:p></o:p>

/home/xkx/ox<o:p></o:p>

<o:p> </o:p>

tar –xvzf open-xchange-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">0.8.0</st1:chsdate>-6.tar.gz<o:p></o:p>

cd open-xchange-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">0.8.0</st1:chsdate>-6<o:p></o:p>

export OX_INSTALL=/usr/local/ox<o:p></o:p>

<o:p> </o:p>

./configure \<o:p></o:p>

--prefix=$OX_INSTALL \<o:p></o:p>

--with-mailjar=/usr/share/java/mail.jar \<o:p></o:p>

--with-activationjar=/usr/share/java/activation.jar \<o:p></o:p>

--with-jdomjar=/usr/share/java/jdom-1.0.jar \<o:p></o:p>

--with-xercesjar=/usr/share/java/xerces-j2-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">2.6.2</st1:chsdate>.jar \<o:p></o:p>

--with-jsdkjar=/usr/share/java/servlet-api.jar \<o:p></o:p>

--with-jdbcjar=/usr/share/pgsql/pg73jdbc3.jar \<o:p></o:p>

--enable-webdav \<o:p></o:p>

--with-htdocsdir=/home/htdocs \<o:p></o:p>

--with-cgibindir=/home/cgi-bin \<o:p></o:p>

--with-dbname=openxchange \<o:p></o:p>

--with-dbuser=openxchange \<o:p></o:p>

--with-dbpass=123456 \<o:p></o:p>

--with-dbhost=localhost \<o:p></o:p>

--with-runuid=ox \<o:p></o:p>

--with-rungid=ox<o:p></o:p>

<o:p> </o:p>

make<o:p></o:p>

make install<o:p></o:p>

<o:p> </o:p>

在浏览器中输入http://192.168.0.185/cgi-bin/login.pl看是否能看到登录的画面。<o:p></o:p>

<o:p> </o:p>

3、配置Servlet<o:p></o:p>

<o:p> </o:p>

cd  /home/xkx/jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>/webapps <o:p></o:p>

mkdir servlet<o:p></o:p>

mkdir servlet/WEB-INF<o:p></o:p>

mkdir servlet/WEB-INF/classes<o:p></o:p>

mkdir servlet/WEB-INF/lib<o:p></o:p>

cd servlet/WEB-INF/ <o:p></o:p>

cp $OX_INSTALL/share/servlets/*.class classes/<o:p></o:p>

cp $OX_INSTALL/lib/* lib/<o:p></o:p>

cp lib/umin.war  .<o:p></o:p>

<o:p> </o:p>

http://sietse.net/exoops/modules/OpenXchange/?distr=rh9下载web.xml<o:p></o:p>

并把所有<param-value>中的open-xchange改为ox<o:p></o:p>

之后把文件放在/home/xkx/jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>/webapps/servlet/WEB-INF目录下<o:p></o:p>

<o:p> </o:p>

重新启动tomcat,即:<o:p></o:p>

cd  /home/xkx/jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>/bin<o:p></o:p>

./shutdown.sh<o:p></o:p>

./startup.sh<o:p></o:p>

<o:p> </o:p>

在浏览器中输入:http://192.168.0.185:8080/servlet/intranet 可以看到“The Open-XChange(tm) Server is not running-Groupware  Please inform the Administrator!<o:p></o:p>

<o:p> </o:p>

在文件/home/xkx/jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>/conf/tomcat-users.xml中添加一行:<o:p></o:p>

<user username="admin" password="123456" roles="admin"/><o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

4、整合ApacheTomcat<o:p></o:p>

<o:p> </o:p>

cp /usr/share/doc/mod_jk-ap20-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.2.5</st1:chsdate>/workers.properties.sample /etc/httpd/conf/workers.properties<o:p></o:p>

<o:p> </o:p>

/etc/httpd/conf.d/下创建文件mod_jk.conf,内容如下:<o:p></o:p>

<o:p> </o:p>

<IfModule mod_jk.c><o:p></o:p>

JkWorkersFile   /home/conf/workers.properties<o:p></o:p>

JkLogFile       /home/logs/mod_jk.log<o:p></o:p>

JkLogLevel      error<o:p></o:p>

JkMount /servlet/* ajp13<o:p></o:p>

JkMount /umin/* ajp13<o:p></o:p>

JkMount /*.jsp ajp13<o:p></o:p>

JkMount /examples/* ajp13<o:p></o:p>

JkMount /servlet/webdav.contacts* ajp13<o:p></o:p>

JkMount /servlet/webdav.ical* ajp13<o:p></o:p>

JkMount /servlet/weddav.documents* ajp13<o:p></o:p>

JkMount /servlet/webdav.calendar* ajp13<o:p></o:p>

JkMount /servlet/webdav.tasks* ajp13<o:p></o:p>

JkMount /servlet/webdav.contacts* ajp13<o:p></o:p>

JkMount /servlets-examples/* ajp13<o:p></o:p>

JkMount /jsp-examples/* ajp13<o:p></o:p>

#JkMount /servlet/intranet/* ajp13<o:p></o:p>

</IfModule><o:p></o:p>

<o:p> </o:p>

Apache官方网站下载jakarta-tomcat-connectors-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.2.15</st1:chsdate>-src.tar.gz<o:p></o:p>

/home/xkx目录下<o:p></o:p>

<o:p> </o:p>

tar –xvzf jakarta-tomcat-connectors-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.2.15</st1:chsdate>-src.tar.gz<o:p></o:p>

cd   /home/xkx/jakarta-tomcat-connectors-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.2.15</st1:chsdate>-src/jk/native<o:p></o:p>

./configure \<o:p></o:p>

--with-apxs=/home/bin/apxs<o:p></o:p>

--with-java-home=/home/xkx/ox/j2sdk<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.4.2</st1:chsdate>_10<o:p></o:p>

make<o:p></o:p>

make install<o:p></o:p>

#之后会发现/home/modules下多了一个文件mod_jk.so<o:p></o:p>

<o:p> </o:p>

/home/conf/httpd.conf中加入:<o:p></o:p>

<o:p> </o:p>

LoadModule jk_module modules/mod_jk.so<o:p></o:p>

Include /etc/httpd/conf.d/mod_jk.conf<o:p></o:p>

<o:p> </o:p>

修改文件/home/conf/workers.properties<o:p></o:p>

<o:p> </o:p>

workers.tomcat_home=/home/xkx/jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate><o:p></o:p>

workers.java_home=/home/xkx/ox/j2sdk<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.4.2</st1:chsdate>_10<o:p></o:p>

<o:p> </o:p>

重新启动Tomcat<o:p></o:p>

<o:p> </o:p>

在浏览器中重新输入http://192.168.0.185/servlet/intranet <o:p></o:p>

如能看到和8080端口一样的内容则整合成功<o:p></o:p>

<o:p> </o:p>

5、为数据库Postgresql创建表<o:p></o:p>

<o:p> </o:p>

psql -dopenxchange -h localhost -Uopenxchange -W -f $OX_INSTALL/share/init_database.sql<o:p></o:p>

psql -dopenxchange -h localhost -Uopenxchange -W<o:p></o:p>

INSERT INTO sys_gen_rights_template values
('now','admin','now','','default_template','y','y','y','y',
'y','y','y','y','y','y','y','y','y','y','y','y','y','y','y',
'y','y','y','y','y','y','y','y','y','y','y','y','y','y','y',
'y','y','y','y','y','y','y','y','y','y','y','y','y');<o:p></o:p>

\q<o:p></o:p>

<o:p> </o:p>

#总共47y<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

6、是Tomcat开机自动运行<o:p></o:p>

/etc/rc.d/init.d下创建文件tomcat,内容如下:<o:p></o:p>

<o:p> </o:p>

RETVAL=$?<o:p></o:p>

CATALINA_HOME="/home/xkx/jakarta-tomcat-<st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">5.0.28</st1:chsdate>"<o:p></o:p>

<o:p> </o:p>

case "$1" in<o:p></o:p>

start)<o:p></o:p>

if [ -f $CATALINA_HOME/bin/startup.sh ];<o:p></o:p>

then<o:p></o:p>

echo $"Starting Tomcat"<o:p></o:p>

/bin/su - root -c $CATALINA_HOME/bin/startup.sh<o:p></o:p>

fi<o:p></o:p>

;;<o:p></o:p>

stop)<o:p></o:p>

if [ -f $CATALINA_HOME/bin/shutdown.sh ];<o:p></o:p>

then<o:p></o:p>

echo $"Stopping Tomcat"<o:p></o:p>

/bin/su - root -c $CATALINA_HOME/bin/shutdown.sh<o:p></o:p>

fi<o:p></o:p>

;;<o:p></o:p>

*)<o:p></o:p>

echo $"Usage: $0 {start|stop}"<o:p></o:p>

exit 1<o:p></o:p>

;;<o:p></o:p>

Esac<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

7、配置LDAP<o:p></o:p>

<o:p> </o:p>

编辑/etc/openldap/slapd.conf文件。使其内容从63行起如下:<o:p></o:p>

<o:p> </o:p>

include         /usr/local/ox/share/openxchange.schema<o:p></o:p>

<o:p> </o:p>

suffix "dc=example,dc=org"<o:p></o:p>

rootdn "cn=Manager,dc=example,dc=org"<o:p></o:p>

#注意上面两行的“,”与字母间千万不能有空格!!!以下类似。<o:p></o:p>

rootpw secret<o:p></o:p>

<o:p> </o:p>

分享到:
评论

相关推荐

    qt-opensource-windows

    qt-opensource-mac-x64-clang-5.8.0.dmg 20-Jan-2017 12:45 1.3G Details qt-opensource-mac-x64-android-ios-5.8.0.dmg 20-Jan-2017 12:44 3.4G Details qt-opensource-mac-x64-android-5.8.0.dmg 20-Jan-2017 ...

    docker-open-xchange:为 docker 容器打开 xchange

    这是一个开放的 xchange 服务器的 docker 镜像。 此映像尚未准备好用于生产用途,我不确定我是否会在不久后维护它。 如果您需要可靠的图像,这里是错误的查看位置。

    今天在windows7下安装qt-opensource-windows-x86-5.12.9报错: gdb.exe -系统错误

    今天在windows7下安装qt-opensource-windows-x86-5.12.9报错: gdb.exe -系统错误 无法启动此程序,因为计算机中丢失api-ms-win-core-path-l1-1-0.dll。尝试重新安装该程序以解决此问题

    libstdc++.so.6.0.17(x64)

    [root@localhost TMP]# ./qt-opensource-linux-x64-5.2.1.run [root@localhost TMP]# /usr/bin/xdg-open: line 402: htmlview: command not found Failed to load core: /opt/Qt5.2.1/Tools/QtCreator/lib/qt...

    open-vm-tools

    "open-vm-tools" 是一个开源的软件套件,专为在虚拟化环境中运行的Linux系统设计,旨在提高性能和管理效率。它主要用于VMware虚拟机中,与VMware Tools的功能相似,但作为开源项目,它提供了一种免费且可自定义的...

    Open X-Embodiment Robotic Learning Datasets and RT-X Models.pdf

    主要介绍了利用Open X-Embodiment数据集训练的智能模型RT-X,Open X-Embodiment数据集一定程度上解决具身智能模型训练数据多样性的问题。 -项目url: https://robotics-transformer-x.github.io/ -Github: ...

    Open-Xchange Community Edition-开源

    Open-Xchange协作套件。 请访问http://www.open-xchange.com/header/community_area.html,以获取有关获得支持和报告错误的更多信息。

    有关ubuntu的系统,gnome桌面,中文语言,open-vm-tools的安装

    ### Ubuntu系统、Gnome桌面环境、中文语言支持与Open-VM-Tools的安装指南 #### 一、Ubuntu系统安装步骤详解 **1.1 准备阶段:** - **选择虚拟机:** 首先,在虚拟化软件中选择一个合适的虚拟机(如本例中的...

    qt-opensource-linux-x64-5.9.0.run

    qt-opensource-linux-x64-5.9.0.run

    open-api-sdk-2.0.jar

    京东 jd open-api-sdk-2.0

    离线安装open-vm-tools软件包

    iso文件中包含文件: 1.open-vm-tools_12.1.5-3~ubuntu0.22.04.4_amd...2.open-vm-tools-desktop_12.1.5-3~ubuntu0.22.04.4_amd64.deb 3.libmspack0_0.10.1-2_amd64.deb 4.libxmlsec1-openssl_1.2.33-1build2_amd64.deb

    qt-opensource-linux-x64-5.9.1.rar

    QT开源包"qt-opensource-linux-x64-5.9.1.rar"是针对Linux操作系统,特别是中标麒麟和Ubuntu发行版的一个软件开发工具包。QT是一个跨平台的应用程序开发框架,广泛用于创建图形用户界面(GUI)和其他类型的软件。这...

    qt6在线安装文件:qt-unified-windows-x64-online 向下兼容

    qt6在线安装文件:qt-unified-windows-x64-online 向下兼容

    qt-opensource-linux-x64-5.6.2.run

    qt-opensource-linux-x64-5.6.2.run

    qt-opensource-linux-x64-5.8.0.run.zip

    "qt-opensource-linux-x64-5.8.0.run.zip"是针对64位Linux系统的一个Qt 5.8.0版本的安装包,其包含的"qt-opensource-linux-x64-5.8.0.run"文件是安装程序,便于在Linux环境下进行安装。 Qt 5.8.0是一个重要的版本,...

    QT CREATORqt-opensource-linux-x64-5.7.1.run

    qt-opensource-linux-x64-5.7.1.run已验证可用,请放心下载。Qt是诺基亚公司的C++可视化开发平台。与Visual C++相比,Qt简单方便、功能完善、跨平台、扩展能力强,可以用于嵌入式开发qt-opensource-linux-x64-5.7.1....

    qt-opensource-linux-x64-5.4.1

    qt-opensource-linux-x64-5.4.1

    Open-Web-Editor::writing_hand:在浏览器端使用的编辑器

    Open Web Editor - :writing_hand: Web版本的可扩展代码编辑器 温馨提示:使用过程中,你可以查看 来了解是否需要升级! 兼容Chrome、Safari、Edge、Firefox、Opera和IE(9+)等常见浏览器! Issues 使用的时候遇到...

    京东SDK调用实例(open-api-sdk-2.0.jar)

    1. **环境配置**:确保Java运行环境已安装,并在项目中引入"open-api-sdk-2.0.jar"作为依赖。 2. **初始化SDK**:配置AppKey和AppSecret,初始化SDK客户端。 3. **构建请求**:根据业务需求,选择合适的API,构建...

Global site tag (gtag.js) - Google Analytics