【open edx】ubuntu 16.04 native 安装
openedx是开源的在线教育平台,原本以为安装起来很简单,但是实际配置环境时出现各种各样意外的错误,总结一下遇到的错误和解决办法。
基本环境:
系统:Ubuntu 16.04.3 LTS 桌面版
内存:12GB以上(重要)
硬盘:50GB以上
VPN:可以稳定翻墙(非常重要)
edx版本:ficus.2
为什么内存重要,因为在安装到某个位置的时候openedx会在后台启动多个www-data用户的任务,瞬间会占据8GB内存,整个安装完成后运行时整体占用了10GB内存。
然后是VPN,如果没有VPN,我们可爱的国内防火墙会让你在下载时卡的痛不欲生,比如github下载800M只有几十kb/s,apt-get update 超时等等。紧接着可能会出现各种未知错误。
安装步骤:(直接按照官方来)
sudo apt-get update -y
sudo apt-get upgrade -y
sudo reboot
export OPENEDX_RELEASE=open-release/ficus.2
之后我没有完全按照自动安装的办法,而是手动下载官方的脚本,修改脚本后运行脚本安装,好处就是可以在出现错误后修改脚本继续从这里安装,不用从头再来。
wget https://raw.githubusercontent.com/edx/configuration/$OPENEDX_RELEASE/util/install/ansible-bootstrap.sh
wget https://raw.githubusercontent.com/edx/configuration/$OPENEDX_RELEASE/util/install/generate-passwords.sh
wget https://raw.githubusercontent.com/edx/configuration/$OPENEDX_RELEASE/util/install/sandbox.sh
下载完成后手动执行三个脚本
sudo bash ansible-bootstrap.sh
sudo bash generate-passwords.sh
sudo bash sandbox.sh
如果足够幸运的话就能一直等待安装完成了。当然几乎一定会出现安装错误,根据这些错误在网上找到解决方法逐一解决。
关于ansible-bootstrap.sh脚本:
因为ansible-bootstrap.sh基本不会出错,只有一个地方在git clone时如果上一次执行过的话会提示文件夹已存在且不为空。把对应位置的文件夹完全删除就能继续。其他地方出错了就反复执行sudo bash ansible-bootstrap.sh直到不会出错为止。
关于generate-passwords.sh脚本:
从没出过错,产生初始密码用的。
关于sandbox.sh脚本:
看到最后一行的代码:
cd /var/tmp/configuration/playbooks && sudo -E ansible-playbook -c local ./edx_sandbox.yml -i "localhost," $EXTRA_VARS
出错后修改这一条语句可以从中断处开始继续安装。可在$EXTRA_VARS后添加参数(注意用空格隔开):
-vvv(安装时显示全部安装信息)
--start-at-task='你要开始的任务名'(从指定任务开始中断安装)
COMMON_PYPI_MIRROR_URL='pip镜像源地址'(修改pip镜像源)
中断安装时,比如执行了6个task:
common_utils : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 【ok】
common_utils : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 【ok】
edxapp : code sandbox | Use libblas.so.3 in Ubuntu 【ok】
edxapp : code sandbox | Check which `liblapac` to use 【ok】
edxapp : code sandbox | Use liblapack.so.3gf in Ubuntu 【ok】
edxapp : checkout edx-platform repo into /edx/app/edxapp/edx-platform 【failed】
最后一步出错了,那么我们就应该从edxapp : code sandbox | Use libblas.so.3 in Ubuntu
这个任务重新开始,不能直接从edxapp : checkout edx-platform repo into /edx/app/edxapp/edx-platform
开始。注意task名一个空格都不能多
更好的办法是找到对应的脚本,实际运行需要的yml文件都在目录/var/tmp/configuration/playbooks/roles里面,每一个文件夹对应一个大的task,找到这个task文件夹内的tasks/main.yml(这里是拿edxapp举例),从这个yml文件第一个任务名开始就没错了
安装完成后出现这个界面表示可以使用了,然后用默认的几个账户登录教师端和学生端,创建和加入课程看一看有没有问题,如果有问题再去找找解决方案。
不用VPN还是想安装的办法:
更改apt-get源为清华源,修改/etc/apt/sources.list
更改pip镜像站,参考sandbox.sh脚本部分。
即使这样,也不能保证能安装完成,因为在过程中很容易遇到被墙的情况,而且龟速下载,有耐心的就试试吧,反正我试了一个礼拜最后都没有试成功。一怒之下买了个vpn,一切通畅...
常见错误:
apt-get update
"msg": "Failed to update apt cache."
一般用了vpn就不会有这个问题...访问某个外国网站之前可以,忽然不行了就会出这个错,检查sudo apt-get update是否有不能连接到的连接,如果不是必须的可以把这一条更新链接删除。这个other software就是在安装过程中自动添加的,比如ppa.edx.org这个链接,前面的task可能通过,后面的task不凑巧网络不通,就会直接报错,此时把这个对勾去掉即可。
edxapp : checkout edx-platform
RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
因为git clone的缓存受到限制,大概下载300-500M时报错,修改最大缓存量即可,可以改的更大如1000000000
git config --global http.postBuffer 524288000
如果是国内网实在下不下来,就用其他办法下载这个https://github.com/edx/edx-platform的全部文件然后移动到/edx/app/edxapp/edx-platform目录下,把这个目录的所有文件权限设为777(不建议这么做,因为这有可能会导致部分软连接丢失,必须手动给添加,不要问我是怎么知道的TAT)
sudo chmod 777 -R /edx/app/edxapp/edx-platform
sudo chmod 777 -R /edx/app/edxapp/edx-platform/.git
sudo chmod 777 -R .git/objects
git_clone : checkout code over https
the output has been hidden due to the fact that 'no_log:true' was specified for this result
根据提示,这里错误信息没有显示出来,找到对应的yml脚本,把其内容修改为no_log : false然后再根据错误信息解决问题,我这里是因为之前文件下载不完全的问题,根据后来的提示删除对应文件夹解决问题。
edxapp : migrate
一大堆错误信息
这里出现错误请检查是否删除了sandbox.sh的$EXTRA_VARS相关参数,理论上这里也不会出现错误。我在这里出现错误是因为一开始错误的使用了基于ubuntu12手动安装的方法丢失了这部分参数。
insights : run collectstatics
因为时间太久记不清错误了,似乎是之前jdk没能正确安装,检查/tmp下jdk文件是否有问题,或者参考这篇博客http://blog.csdn.net/jenyzhang/article/details/52862670