diff --git a/01.web/src/views/advance/index.vue b/01.web/src/views/advance/index.vue index 7979272..41f0c7d 100644 --- a/01.web/src/views/advance/index.vue +++ b/01.web/src/views/advance/index.vue @@ -245,9 +245,6 @@ - @@ -345,7 +342,12 @@ - + @@ -354,44 +356,42 @@
- v2.3 - - - - - 5.4+ - - + {{ version.current_verson }} - + - 5.4+ + {{ version.php_version }} - MySQL、sqlite + {{ version.database }} - GitHub + GitHub - Gitee + Gitee - - @@ -401,6 +401,34 @@ + + + + + {{ formSoftwareNew.latestVersion }} + + + + + {{ formSoftwareNew.updateStep }} + + + + + + + + + + @@ -433,9 +461,15 @@ export default { currentAdvanceTab: "1", /** - * + * 版本信息 */ - listPush: [], + version: { + current_verson: "2.3", + php_version: "5.5 <= PHP < 8.0", + database: "MYSQL、SQLite", + github: "https://github.com/witersen/svnAdminV2.0", + gitee: "https://gitee.com/witersen/SvnAdminV2.0", + }, /** * 加载 @@ -455,7 +489,9 @@ export default { //保存邮件配置信息 loadingEditEmail: false, //保存推送配置信息 - loadingEditPush:false, + loadingEditPush: false, + //检测更新 + loadingCheckUpdate:false, /** * subversion信息 @@ -471,13 +507,17 @@ export default { }, /** - * + * list */ + //配置文件 configList: [], + //消息推送配置 + listPush: [], /** * 对话框 */ + modalSofawareUpdateGet: false, /** * 表单 @@ -504,6 +544,14 @@ export default { // from: "", status: false, }, + //新版本信息 + formSoftwareNew: { + newContent: "", + latestVersion: "", + fixedContent: "", + updateType: "", + updateStep: "", + }, }; }, computed: {}, @@ -958,6 +1006,32 @@ export default { that.$Message.error("出错了 请联系管理员!"); }); }, + //检测更新 + CheckUpdate() { + var that = this; + that.loadingCheckUpdate = true; + var data = {}; + that.$axios + .post("/api.php?c=Update&a=CheckUpdate&t=web", data) + .then(function (response) { + that.loadingCheckUpdate = false; + var result = response.data; + if (result.status == 1) { + if (result.data != "") { + that.formSoftwareNew = result.data; + that.modalSofawareUpdateGet = true; + } else { + that.$Message.success(result.message); + } + } else { + that.$Message.error(result.message); + } + }) + .catch(function (error) { + that.loadingCheckUpdate = false; + console.log(error); + }); + }, }, }; diff --git a/01.web/src/views/repositoryInfo/index.vue b/01.web/src/views/repositoryInfo/index.vue index 34b0cf4..1a24059 100644 --- a/01.web/src/views/repositoryInfo/index.vue +++ b/01.web/src/views/repositoryInfo/index.vue @@ -264,10 +264,7 @@ @click="DownloadRepBackup(row.fileName)" >下载 - @@ -1077,6 +1074,18 @@ export default { computed: {}, created() {}, mounted() { + // abort so it dose not look stuck + // window.onunload = () => { + // console.log('test-start'); + // console.log(window.WritableStream); + // console.log(writer); + // console.log('test-end'); + + + // writableStream.abort(); + // // also possible to call abosrt on the writer you got from `getWriter()` + // writer.abort(); + // }; this.GetStatus(); if (this.user_role_id == 1) { this.GetRepList(); diff --git a/02.php/api.php b/02.php/api.php index 09a4352..8adc4c9 100644 --- a/02.php/api.php +++ b/02.php/api.php @@ -3,10 +3,14 @@ * @Author: witersen * @Date: 2022-04-24 23:37:06 * @LastEditors: witersen - * @LastEditTime: 2022-05-07 11:17:34 + * @LastEditTime: 2022-05-08 21:43:14 * @Description: QQ:1801168257 */ +/** + * 需要PHP版本大于等于5.5同时小于8.0 + */ + /** * 开启错误信息 如需要调试 可取消注释 */ @@ -69,6 +73,28 @@ $payload = !empty($payload) ? json_decode($payload, true) : []; * } */ +//检测PHP版本 +if (PHP_VERSION < '5.5') { + json1(200, 0, '支持的最低PHP版本为 5.5 而不是 ' . PHP_VERSION); +} else if (PHP_VERSION >= '8.0') { + json1(200, 0, '支持的最高PHP版本低于 8.0 而不是 ' . PHP_VERSION); +} + +//检测open_basedir +if (ini_get('open_basedir') != '') { + json1(200, 0, '需要关闭open_basedir'); +} + +//检测禁用函数 +$require_functions = ['shell_exec', 'passthru']; +$disable_functions = explode(',', ini_get('disable_functions')); +foreach ($disable_functions as $disable) { + if (in_array(trim($disable), $require_functions)) { + json1(200, 0, "需要的 $disable 函数被禁用"); + } +} + + //检测守护进程状态 $state = FunDetectState(); if ($state == 0) { diff --git a/02.php/app/controller/Update.php b/02.php/app/controller/Update.php index a8c25ac..5920bd5 100644 --- a/02.php/app/controller/Update.php +++ b/02.php/app/controller/Update.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:05 * @LastEditors: witersen - * @LastEditTime: 2022-05-07 14:08:55 + * @LastEditTime: 2022-05-07 19:42:42 * @Description: QQ:1801168257 */ @@ -27,15 +27,6 @@ class Update extends Base $this->ServiceUpdate = new ServiceUpdate(); } - /** - * 获取当前版本信息 - */ - public function GetVersion() - { - $result = $this->ServiceUpdate->GetVersion(); - json2($result); - } - /** * 检测新版本 */ diff --git a/02.php/app/service/Common.php b/02.php/app/service/Common.php index 107fffb..1ee58ed 100644 --- a/02.php/app/service/Common.php +++ b/02.php/app/service/Common.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:05 * @LastEditors: witersen - * @LastEditTime: 2022-05-07 15:15:50 + * @LastEditTime: 2022-05-08 13:50:51 * @Description: QQ:1801168257 */ @@ -126,7 +126,7 @@ class Common extends Base $this->Logs->InsertLog( '用户注销', - '账号:' . $this->userName . 'IP地址:' . $_SERVER["REMOTE_ADDR"], + '账号:' . $this->userName . ' IP地址:' . $_SERVER["REMOTE_ADDR"], $this->userName ); diff --git a/02.php/app/service/Svn.php b/02.php/app/service/Svn.php index 1bf7384..072c5f2 100644 --- a/02.php/app/service/Svn.php +++ b/02.php/app/service/Svn.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:05 * @LastEditors: witersen - * @LastEditTime: 2022-05-06 21:38:12 + * @LastEditTime: 2022-05-08 20:30:34 * @Description: QQ:1801168257 */ @@ -50,6 +50,45 @@ class Svn extends Base ]); } + /** + * 获取Subversion的安装情况 + * + * 0 未安装 + * 1 已安装未运行 + * 2 已安装运行中 + * -1 未知 + */ + public function GetSubversion() + { + //检测是否有正在运行的进程 + $isRun = FunShellExec('ps auxf|grep -v "grep"|grep svnserve'); + $isRun = $isRun['result'] == '' ? false : true; + + //检测安装程序是否存在于环境变量 + $isInstall = FunShellExec('whereis svnserve'); + $isInstall = $isInstall['result'] == 'svnserve:' ? false : true; + + //运行中+未加入环境变量 + if ($isRun && !$isInstall) { + return 2; + } + + //运行中+已加入环境变量 + if ($isRun && $isInstall) { + return 1; + } + + //未运行+未加入环境变量 + if (!$isRun && !$isInstall) { + return 0; + } + + //未运行+已加入环境变量 + if (!$isRun && $isInstall) { + return 2; + } + } + /** * 获取Subversion的详细信息 */ @@ -58,28 +97,10 @@ class Svn extends Base //获取绑定主机、端口等信息 $bindInfo = $this->GetSvnserveListen(); - //检测运行信息 - $runInfo = FunShellExec('ps auxf|grep -v "grep"|grep svnserve'); - $runInfo = $runInfo['result']; - - //检测安装信息 - $installInfo = file_exists('/usr/bin/svnserve'); - - //检测安装状态 - //未知状态 - $installInfo = -1; - if ($runInfo == '' && !$installInfo) { - //未安装 - $installed = 0; - } else if ($runInfo == '' && $installInfo) { - //安装未启动 - $installed = 1; - } else if ($runInfo != '' && $installInfo) { - //运行中 - $installed = 2; - } + //获取安装和运行状态 + $installed = $this->GetSubversion(); - //检测subversion版本 + //获取Subversion版本 $version = '-'; if ($installed != 0) { $versionInfo = FunShellExec('svnserve --version'); diff --git a/02.php/app/service/Svnrep.php b/02.php/app/service/Svnrep.php index 264a8e2..c803198 100644 --- a/02.php/app/service/Svnrep.php +++ b/02.php/app/service/Svnrep.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:05 * @LastEditors: witersen - * @LastEditTime: 2022-05-07 17:03:32 + * @LastEditTime: 2022-05-08 20:59:18 * @Description: QQ:1801168257 */ diff --git a/02.php/app/service/Update.php b/02.php/app/service/Update.php index 641e7c9..9ee3199 100644 --- a/02.php/app/service/Update.php +++ b/02.php/app/service/Update.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:05 * @LastEditors: witersen - * @LastEditTime: 2022-05-07 14:25:15 + * @LastEditTime: 2022-05-07 20:01:24 * @Description: QQ:1801168257 */ @@ -16,23 +16,10 @@ class Update extends Base parent::__construct(); } - /** - * 获取当前版本信息 - */ - public function GetVersion() - { - return message(200, 1, '成功', [ - 'current_verson' => $this->config_version['version'], - 'github' => 'https://github.com/witersen/svnAdminV2.0', - 'gitee' => 'https://gitee.com/witersen/SvnAdminV2.0', - 'author' => 'https://www.witersen.com' - ]); - } - /** * 检测新版本 */ - public function CheckUpdate($payload) + public function CheckUpdate() { foreach ($this->config_update['update_server'] as $key => $value) { $versionInfo = FunCurlRequest($value); @@ -60,7 +47,7 @@ class Update extends Base /** * 确认更新 */ - public function StartUpdate($payload) + public function StartUpdate() { } } diff --git a/02.php/config/daemon.php b/02.php/config/daemon.php index 47c5227..2f18408 100644 --- a/02.php/config/daemon.php +++ b/02.php/config/daemon.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:06 * @LastEditors: witersen - * @LastEditTime: 2022-05-07 00:44:27 + * @LastEditTime: 2022-05-08 21:44:53 * @Description: QQ:1801168257 */ @@ -36,25 +36,4 @@ return [ * socket 处理并发的最大队列长度 */ 'SOCKET_LISTEN_BACKLOG' => 2000, - - /** - * 当前程序支持的最低PHP版本 - */ - 'Required_PHP_VERSION' => '5.5', - - /** - * CLI程序需要解除禁止的函数 - */ - 'CLI_NEEDED_FUNCTION' => [ - 'pcntl_fork', - 'pcntl_signal', - 'pcntl_wait', - 'shell_exec' - ], - - /** - * FPM模式需要解除禁止的函数 - */ - 'FPM_NEEDED_FUNCTION' => [], - ]; diff --git a/02.php/config/svn.php b/02.php/config/svn.php index e73ab0c..31d144a 100644 --- a/02.php/config/svn.php +++ b/02.php/config/svn.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:06 * @LastEditors: witersen - * @LastEditTime: 2022-05-07 01:25:25 + * @LastEditTime: 2022-05-08 23:33:10 * @Description: QQ:1801168257 */ @@ -55,17 +55,27 @@ return [ 'svn_passwd_file' => $home_path . 'passwd', /** - * 备份文件夹 + * svnserve pid文件 + */ + 'svnserve_pid_file' => $home_path . 'svnserve.pid', + + /** + * svnserve 自启动文件 + */ + 'svnserve_service_file' => '/usr/lib/systemd/system/svnserve.service', + + /** + * 备份目录 */ 'backup_base_path' => $backup_base_path, /** - * 日志文件夹 + * 日志目录 */ 'log_base_path' => $log_base_path, /** - * svnserve运行日志 + * svnserve 运行日志文件 */ 'svnserve_log_file' => $log_base_path . 'svnserve.log', diff --git a/02.php/config/update.php b/02.php/config/update.php index 895805a..1f3e71e 100644 --- a/02.php/config/update.php +++ b/02.php/config/update.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:06 * @LastEditors: witersen - * @LastEditTime: 2022-05-07 01:13:58 + * @LastEditTime: 2022-05-08 15:18:04 * @Description: QQ:1801168257 */ @@ -12,7 +12,7 @@ */ return [ 'update_server' => [ - 'https://gitee.com/witersen/update/raw/master/SvnAdmin/update.json', - 'https://raw.githubusercontent.com/witersen/update/master/SvnAdmin/update.json' + 'https://gitee.com/witersen/update/raw/master/SvnAdmin/update2.json', + 'https://raw.githubusercontent.com/witersen/update/master/SvnAdmin/update2.json' ] ]; diff --git a/02.php/config/version.php b/02.php/config/version.php index 4a07b54..36fdfae 100644 --- a/02.php/config/version.php +++ b/02.php/config/version.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:06 * @LastEditors: witersen - * @LastEditTime: 2022-05-03 16:16:55 + * @LastEditTime: 2022-05-07 20:04:23 * @Description: QQ:1801168257 */ diff --git a/02.php/server/install.php b/02.php/server/install.php new file mode 100644 index 0000000..ceb53fa --- /dev/null +++ b/02.php/server/install.php @@ -0,0 +1,341 @@ + 1, + 'note' => '帮我安装并配置Subversion' + ], + [ + 'index' => 2, + 'note' => '按照本系统的要求初始化Subversion(针对以其它方式安装的Subversion)' + ], + [ + 'index' => 3, + 'note' => '检测SVNAdmin的新版本' + ], + ]; + + function __construct() + { + Config::load(BASE_PATH . '/../config/'); + + $this->config_database = Config::get('database'); + $this->config_reg = Config::get('reg'); + $this->config_svn = Config::get('svn'); + $this->config_update = Config::get('update'); + $this->config_version = Config::get('version'); + } + /** + * 检测SVNAdmin的新版本并选择更新 + */ + function DetectUpdate() + { + //拿到升级服务器配置信息 + //对升级服务器地址进行轮询 + //获取当前版本可升级的版本信息 + + foreach ($this->config_update['update_server'] as $value) { + //检测 + $versionInfo = FunCurlRequest($value); + //未超时 + if ($versionInfo != null) { + //json转换 + $versionInfo = json_decode($versionInfo, true); + $latestVersion = $versionInfo['latestVersion']; + if ($latestVersion == $this->config_version['version']) { + return message(200, 1, '当前版本为最新版'); + } else if ($latestVersion > $this->config_version['version']) { + return message(200, 1, '有更新', [ + 'latestVersion' => $versionInfo['latestVersion'], + 'fixedContent' => implode('
', $versionInfo['fixedContent']) == '' ? '暂无内容' : implode('
', $versionInfo['fixedContent']), + 'newContent' => implode('
', $versionInfo['newContent']) == '' ? '暂无内容' : implode('
', $versionInfo['newContent']), + 'updateType' => $versionInfo['updateType'], + 'updateStep' => $versionInfo['updateStep'] + ]); + } else if ($latestVersion < $this->config_version['version']) { + return message(200, 0, '系统版本错误'); + } + } + } + return message(200, 0, '检测更新超时'); + } + + /** + * 升级到指定版本的SVNAdmin + */ + function UpdateSVNAdmin() + { + } + + /** + * 将SVNAdmin加入到开机自启动 + */ + function InitlSVNAdmin() + { + } + + /** + * 将SVNAdmin取消开机自启动 + */ + function UninitSVNAdmin() + { + } + + /** + * 将SVNAdmin加入监控 如果检测到异常退出则自动重启 + */ + function Monitor() + { + } + + /** + * 卸载Subversion + */ + function UninstallSubversion() + { + } + + /** + * 获取当前安装的Subversion信息 + */ + function DetectSubversion() + { + } + + /** + * 修改已经安装的Subversion配置以适合SVNAdmin的管理 + */ + function ConfigSubversion() + { + /** + * 1、检测Subversion的安装情况 + */ + //检测是否有正在运行的进程 + $isRun = shell_exec('ps auxf|grep -v "grep"|grep svnserve') == '' ? false : true; + + //检测安装程序是否存在于环境变量 + $installPath = shell_exec('which svnserve'); + $isInstall = shell_exec('whereis svnserve') == 'svnserve:' ? false : true; + + //正在运行中但是没有安装或者subversion的相关程序没有被加入环境变量 + if ($isRun && !$isInstall) { + exit('需要将Subversion相关程序加入到环境变量后重试!' . PHP_EOL); + } + + //正在运行中并且subversion的相关程序已经被加入环境变量 + if ($isRun && $isInstall) { + //停止svnserve + exit('请先手动停止正在运行的svnserve程序后重试' . PHP_EOL); + } + + //不在运行中并且没有安装或者subversion的相关程序没有被加入环境变量 + if (!$isRun && !$isInstall) { + exit('需要安装Subversion或者需要将已安装的Subversion相关程序加入到环境变量后重试!' . PHP_EOL); + } + + //不在运行中并且subversion的相关程序已经被加入环境变量 + if (!$isRun && $isInstall) { + //相关文件配置 + } + + /** + * 相关文件配置 + */ + $templete_path = BASE_PATH . '../templete/'; + + //创建SVNAdmin软件配置信息的主目录 + mkdir($this->config_svn['home_path'], 0700, true); + + //创建SVN仓库父目录 + mkdir($this->config_svn['rep_base_path'], 0700, true); + + //创建备份目录 + mkdir($this->config_svn['home_path'], 0700, true); + + //创建日志目录 + mkdir($this->config_svn['home_path'], 0700, true); + + //创建临时数据目录 + mkdir($this->config_svn['home_path'], 0700, true); + + //写入svnserve环境变量文件 + $con_svnserve_env_file = file_get_contents($templete_path . 'svnserve/svnserve'); + $con_svnserve_env_file = sprintf($con_svnserve_env_file, $this->config_svn['rep_base_path'], $this->config_svn['svn_conf_file'], $this->config_svn['svnserve_log_file']); + file_put_contents($this->config_svn['svnserve_env_file'], $con_svnserve_env_file); + + //写入SVN仓库权限配置文件 + $con_svn_conf_file = file_get_contents($templete_path . 'svnserve/svnserve.confg'); + file_put_contents($this->config_svn['svn_conf_file'], $con_svn_conf_file); + + //写入authz文件 + $con_svn_authz_file = file_get_contents($templete_path . 'svnserve/authz'); + file_put_contents($this->config_svn['svn_authz_file'], $con_svn_authz_file); + + //写入passwd文件 + $con_svn_passwd_file = file_get_contents($templete_path . 'svnserve/passwd'); + file_put_contents($this->config_svn['svn_passwd_file'], $con_svn_passwd_file); + + //创建svnserve运行日志文件 + file_put_contents($this->config_svn['svnserve_log_file'], ''); + + //创建pid文件 + file_put_contents($this->config_svn['svnserve_pid_file'], ''); + + /** + * 将svnserve注册为系统服务 + */ + echo '===============================================' . PHP_EOL; + echo '清理之前注册的svnserve服务' . PHP_EOL; + + shell_exec('systemctl stop svnserve.service'); + shell_exec('systemctl disable svnserve.service'); + + echo '===============================================' . PHP_EOL; + + $con_svnserve_service_file = file_get_contents($templete_path . 'svnserve/svnserve.service'); + $con_svnserve_service_file = sprintf($con_svnserve_service_file, $this->config_svn['svnserve_env_file'], trim($installPath), $this->config_svn['svnserve_pid_file']); + file_put_contents($this->config_svn['svnserve_service_file'], $con_svnserve_service_file); + + //启动 + echo '===============================================' . PHP_EOL; + echo '开始启动svnserve服务' . PHP_EOL; + + passthru('systemctl start svnserve'); + + echo '===============================================' . PHP_EOL; + + //开机自启动 + echo '===============================================' . PHP_EOL; + echo '将svnserve服务加入到开机自启动' . PHP_EOL; + + passthru('systemctl enable svnserve'); + + echo '===============================================' . PHP_EOL; + + //查看状态 + echo '===============================================' . PHP_EOL; + echo 'svnserve安装成功,打印运行状态:' . PHP_EOL; + + passthru('systemctl status svnserve'); + + echo '===============================================' . PHP_EOL; + } + + /** + * 程序入口 + */ + function Run() + { + echo '===============SVNAdmin==================' . PHP_EOL; + + foreach ($this->scripts as $value) { + echo '(' . $value['index'] . ')' . $value['note'] . PHP_EOL; + } + + echo '===============================================' . PHP_EOL; + + echo '请输入命令编号:'; + + $answer = trim(fgets(STDIN)); + + echo '===============================================' . PHP_EOL; + + if (!in_array($answer, array_column($this->scripts, 'index'))) { + exit('错误的命令编号:' . PHP_EOL); + } + + if ($answer == 1) { + //帮我安装并配置Subversion + + $shellPath = BASE_PATH . '/../templete/install/WANdisco/'; + + if (!is_dir($shellPath)) { + exit('安装脚本目录不存在!' . PHP_EOL); + } + + $shell = scandir($shellPath); + + echo '可选择的Subversion版本如下:' . PHP_EOL; + + $noShell = true; + foreach ($shell as $value) { + if ($value == '.' || $value == '..') { + continue; + } + $noShell = false; + echo $value . PHP_EOL; + } + + if ($noShell) { + exit('没有可选的安装脚本!' . PHP_EOL); + } + + echo '===============================================' . PHP_EOL; + + echo '请注意SVNAdmin支持管理的Subversion版本为1.8+!' . PHP_EOL; + + echo '请输入要安装的Subversion版本(推荐Subversion-1.10):'; + + $answer = trim(fgets(STDIN)); + + echo '===============================================' . PHP_EOL; + + if (!file_exists($shellPath . 'subversion_installer_' . $answer . '.sh')) { + exit('请选择正确的版本!' . PHP_EOL); + } + + echo '现在开始执行脚本:' . 'subversion_installer_' . $answer . '.sh' . PHP_EOL; + + echo '===============================================' . PHP_EOL; + + passthru('sh ' . $shellPath . 'subversion_installer_' . $answer . '.sh'); + + $this->ConfigSubversion(); + } else if ($answer == 2) { + //按照本系统的要求初始化Subversion(针对以其它方式安装的Subversion) + $this->ConfigSubversion(); + } else if ($answer == 3) { + //检测SVNAdmin的新版本 + } + } +} + +(new Install())->Run(); diff --git a/02.php/server/old.json b/02.php/server/old.json new file mode 100644 index 0000000..5b77836 --- /dev/null +++ b/02.php/server/old.json @@ -0,0 +1,15 @@ +{ + "latestVersion": "2.3", + "fixedContent": [ + "" + ], + "newContent": [ + "" + ], + "updateType": "1", + "updateStep": "需要管理员手动更新 1、基于现有版本手动升级的用户 (1)停止守护进程 php svnadmind.php stop (2)删除当前版本的程序代码 (3)按照GitHub文档进行全新安装 2、全新安装的用户 (1)按照GitHub文档进行全新安装", + "releaseNode": { + "gitee": "", + "github": "" + } +} diff --git a/02.php/server/svnadmind.php b/02.php/server/svnadmind.php index cea9b7d..fd360c5 100644 --- a/02.php/server/svnadmind.php +++ b/02.php/server/svnadmind.php @@ -3,7 +3,7 @@ * @Author: witersen * @Date: 2022-04-24 23:37:06 * @LastEditors: witersen - * @LastEditTime: 2022-05-07 19:33:17 + * @LastEditTime: 2022-05-08 21:45:35 * @Description: QQ:1801168257 */ @@ -199,26 +199,25 @@ class Daemon */ private function CheckPhpVersion() { - if (PHP_VERSION < $this->config_daemon['Required_PHP_VERSION']) { - exit('启动失败:当前的PHP版本为:' . PHP_VERSION . ',要求的最低PHP版本为:' . $this->config_daemon['Required_PHP_VERSION'] . PHP_EOL); + if (PHP_VERSION < '5.5') { + exit('支持的最低PHP版本为 5.5 而不是 ' . PHP_VERSION . PHP_EOL); + } else if (PHP_VERSION >= '8.0') { + exit('支持的最高PHP版本低于 8.0 而不是 ' . PHP_VERSION . PHP_EOL); } } /** - * 检查需要的函数是否被禁用 + * 检查cli模式需要的函数是否被禁用 */ private function CheckDisabledFun() { - $disabled_function = explode(',', ini_get('disable_functions')); - $cli_needed_function = $this->config_daemon['CLI_NEEDED_FUNCTION']; - foreach ($cli_needed_function as $key => $value) { - if (!in_array($value, $disabled_function)) { - unset($cli_needed_function[$key]); + $require_functions = ['shell_exec', 'passthru', 'pcntl_signal', 'pcntl_fork', 'pcntl_wait']; + $disable_functions = explode(',', ini_get('disable_functions')); + foreach ($disable_functions as $disable) { + if (in_array(trim($disable), $require_functions)) { + exit("启动失败:需要的 $disable 函数被禁用"); } } - if (!empty($cli_needed_function)) { - exit('启动失败:需要的以下函数被禁用:' . PHP_EOL . implode(' ', $cli_needed_function) . PHP_EOL); - } } /** @@ -230,6 +229,41 @@ class Daemon file_put_contents(BASE_PATH . '/../config/sign.php', $signCon); } + /** + * 检测升级 + */ + private function SelectUpdate() + { + } + + /** + * 升级到指定版本 + */ + private function Update() + { + } + + /** + * 安装SVNAdmin + */ + private function InstallSVNAdmin() + { + } + + /** + * 安装Subversion + */ + private function InstallSubversion() + { + } + + /** + * 初始化Subversion + */ + private function InitSubversion() + { + } + /** * 以守护进程模式工作 */ diff --git a/02.php/server/update.json b/02.php/server/update.json new file mode 100644 index 0000000..185cb17 --- /dev/null +++ b/02.php/server/update.json @@ -0,0 +1,81 @@ +{ + "version": "2.3", + "number": 8, + "fixd": { + "con": [ + { + "title": "1", + "content": "修复SVN仓库权限配置的bug" + }, + { + "title": "2", + "content": "完善用户权限控制逻辑" + } + ] + }, + "add": { + "con": [ + { + "title": "1", + "content": "支持文件级授权" + }, + { + "title": "2", + "content": "支持目录浏览" + }, + { + "title": "3", + "content": "支持仓库备份与恢复" + }, + { + "title": "4", + "content": "支持SVN用户禁用与启动" + }, + { + "title": "5", + "content": "支持用户级日志记录" + }, + { + "title": "6", + "content": "兼容PHP5.5+" + } + ] + }, + "remove": { + "con": [ + { + "title": "1", + "content": "暂时移除仓库钩子的配置功能" + } + ] + }, + "update": { + "rely": { + "version": { + "SVNAdmin": [] + } + }, + "step": [ + { + "title": "1", + "content": "php ${your_path}/server/install.php" + } + ], + "release": { + "download": [ + { + "nodeName": "gitee.com", + "releaseUrl": "" + }, + { + "nodeName": "github.com", + "releaseUrl": "" + }, + { + "nodeName": "witersen.com", + "releaseUrl": "https://download.witersen.com/SVNAdmin/SVNAdmin-2.3.zip" + } + ] + } + } +} \ No newline at end of file diff --git a/02.php/templete/install/WANdisco/subversion_installer_1.10.0.sh b/02.php/templete/install/WANdisco/subversion_installer_1.10.0.sh new file mode 100644 index 0000000..735f7d5 --- /dev/null +++ b/02.php/templete/install/WANdisco/subversion_installer_1.10.0.sh @@ -0,0 +1,492 @@ +#!/bin/bash +# +# WANdisco Subversion install script. +# Copyright (C) 2013 WANdisco plc +# +# Please contact opensource@wandisco.com if you have any problems with this +# script. + +set -e + +SVN_VERSION=1.10.0-2 +REPO_SERVER=${REPO_SERVER:-opensource.wandisco.com} +ARCH=$(uname -m) + +# Functions + +function handle_error() +{ + echo + echo "There has been an error, exiting" + exit 2 +} + +function check_connection() +{ + if which curl > /dev/null 2>&1; then + GET='curl -s -f' + elif which wget > /dev/null 2>&1; then + GET='wget -O - -q' + else + echo -n "You do not have curl or wget installed. At least one of these is " + echo "required to install WANdisco Subversion" + exit 1 + fi +} + +function check_root() +{ + test $EUID -eq 0 || + { + echo "You need to be root to install WANdisco subversion." + echo + echo "Please re-run this script as the root user." + exit 1 + } +} + +function unsupported() +{ + echo "Your operating system is not currently supported." + echo + echo -n "Please visit http://www.wandisco.com/subversion/download for a list" + echo " of supported systems." + exit 1 +} + +function confirm() +{ + local confirm= + local message=$1 + local default=${2:-y} + local prompt= + + test -n "$NON_INTERACTIVE" && return 0 + + prompt="$message (" + if test "$default" = "y"; then + prompt="${prompt}Y/n" + else + prompt="${prompt}y/N" + fi + prompt="$prompt) " + + while test "$confirm" != "$default"; do + read -n 1 -p "$prompt" confirm + echo + confirm=${confirm:-$default} + confirm=${confirm/Y/y} + confirm=${confirm/N/n} + + if test "$default" = "y"; then + test "$confirm" = "n" && return 1 + test "$confirm" = "y" && return 0 + else + test "$confirm" = "y" && return 1 + test "$confirm" = "n" && return 0 + fi + + echo "Invalid input, please enter 'y' or 'n'" + done + return 0 +} + +function remove_other() +{ + local other=$1 + + echo -n "You currently have subversion installed for another architecture " + echo -n "($other). This should be removed before installing " + echo "WANdisco Subversion." + echo + + if ! confirm "Remove Subversion $other?"; then + echo "Exiting at user request" + exit 1 + fi + + case $OS in + rhel|centos) yum erase -y subversion.$other ;; + debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;; + suse) zypper rm -y subversion.$other ;; + esac + + return 0 +} + +function check_alternative_arch() +{ + local other= + local confirm= + + case $OS in + centos|rhel|suse) + for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}') + do + test "$foreign" = "$ARCH" && continue + if other=$(rpm -q --queryformat='%{arch}' \ + subversion.$foreign 2>/dev/null); then + test -z "$other" && continue + remove_other $other + unset other + fi + done + ;; + debian|ubuntu) + dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0 + ARCH=$(dpkg --print-architecture) + for foreign in $(dpkg --print-foreign-architectures); do + if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \ + 2>/dev/null); then + remove_other $other + unset other + fi + done + ;; + esac + + test -z "$other" && return 0 + + + return 0 +} + +function is_lsb() +{ + which lsb_release >/dev/null 2>&1 || return 1 + + OS=$(lsb_release -si | tr A-Z a-z) + OS=${OS%% *} + OSVER=$(lsb_release -sr) + OSVER=${OSVER%%.*} + OSNAME=$(lsb_release -sc | tr A-Z a-z) + + case $OS in + redhat*) + OS=rhel + ;; + oracle*) + OS=rhel + ;; + esac + + return 0 +} + +function is_debian() +{ + test -r /etc/debian_version || return 1 + + OS="debian" + OSVER=$(cat /etc/debian_version) + OSVER=${OSVER%%.*} + case "$OSVER" in + 6) OSNAME="squeeze" ;; + 7) OSNAME="wheezy" ;; + 8) OSNAME="jessie" ;; + 9) OSNAME="stretch" ;; + squeeze) OSNAME=$OSVER; OSVER=6 ;; + wheezy) OSNAME=$OSVER; OSVER=7 ;; + jessie) OSNAME=$OSVER; OSVER=8 ;; + stretch) OSNAME=$OSVER; OSVER=9 ;; + *) return 1 ;; + esac + + return 0 +} + +function is_redhat() +{ + local release= + + test -r /etc/redhat-release || return 1 + + release=$(cat /etc/redhat-release | tr A-Z a-z) + OS=${release%% release *} + OSVER=${release##* release } + OSVER=${OSVER%%.*} + + case $OS in + red*) OS="rhel" ;; + centos*) OS="centos" ;; + *) return 1 ;; + esac + + return 0 +} + +function is_suse() +{ + test -r /etc/SuSE-release || return 1 + + OS="suse" + OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release) + OSVER=${OSVER%%.*} + + return 0 +} + +function is_oracle() +{ + test -r /etc/oracle-release || return 1 + + OS="rhel" + OSVER=$(sed -e 's/.*release \([0-9]+\).*/\1/' /etc/oracle-release) + + return 0 +} + +function find_os() +{ + is_lsb && return 0 + is_redhat && return 0 + is_debian && return 0 + is_suse && return 0 + is_oracle && return 0 + + + return 1 +} + +function check_os() +{ + case $OS in + rhel|centos) + case $OSVER in + 5|6|7) return 0 ;; + esac + ;; + suse) + case $OSVER in + 11|12) return 0 ;; + esac + ;; + debian) + case $OSVER in + 6|7|8|9) return 0 ;; + esac + ;; + ubuntu) + case $OSVER in + 10|12|14|16|18) return 0 ;; + esac + ;; + esac + + return 1 +} + +function find_pkg_version +{ + case $OS in + rhel|centos|suse) + if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \ + subversion.$ARCH 2>/dev/null); then + return 1 + fi + ;; + debian|ubuntu) + PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null) + PKG_VERSION=${PKG_VERSION%%+*} + ;; + esac + + return 0 +} + +function check_install() +{ + if ! SVN=$(svn --version --quiet 2>/dev/null); then + echo "This script will install Subversion $SVN_VERSION." + echo + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + return 0 + fi + + find_pkg_version || + { + echo -n "You currently have Subversion $SVN installed, however it's not " + echo -n "been installed with your systems package manager. Please remove " + echo "this version of Subversion and re-run this script." + echo + exit 2 + } + + if test "$PKG_VERSION" = "$SVN_VERSION"; then + echo "You currently have the latest version of Subversion installed." + exit 0 + fi + + echo -n "You currently have Subversion $PKG_VERSION installed. If you " + echo "continue with the installation it will be upgraded to $SVN_VERSION." + echo + + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + + return 0 +} + +function configure_apt_repo() +{ + PKG_INSTALLER="apt-get -y install" + PKG_LIST="subversion libsvn-perl python-subversion subversion-tools" + + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + rm -f /etc/apt/sources.list.d/WANdisco.list + cat < /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list +# WANdisco Open Source Repo +deb http://$REPO_SERVER/$OS $OSNAME $SVN_RELEASE +EOF + if [ OSNAME="stretch" ] || [ OSNAME="bionic" ] + then + wget -q -O - http://$REPO_SERVER/wandisco-debian-new.gpg | \ + apt-key add - >/dev/null 2>&1 + else + wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \ + apt-key add - >/dev/null 2>&1 + fi + apt-get update +} + + +function configure_yum_repo() +{ + PKG_INSTALLER="yum install -y" + PKG_LIST="subversion.$ARCH subversion-perl subversion-python subversion-tools" + SVN_RELEASE="${SVN_VERSION%.*}" + rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo + cat < /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo +[WANdisco-svn${SVN_RELEASE//\./}] +name=WANdisco SVN Repo $SVN_RELEASE +enabled=1 +baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/ +gpgcheck=1 +gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco +EOF + yum makecache +} + +function configure_zypp_repo() +{ + PKG_LIST="subversion subversion-perl subversion-python subversion-tools" + PKG_LIST="$PKG_LIST subversion-ruby" + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE" + + rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \ + /etc/zypp/repos.d/WANdisco-svn.repo + + zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1 + + rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \ + rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco + zypper addservice --type=YUM http://$REPO_SERVER/suse/$OSVER/$SVN_RELEASE/ \ + WANdisco-$SVN_RELEASE + zypper refresh +} + +function configure_repo() +{ + case $OS in + debian|ubuntu) configure_apt_repo ;; + rhel|centos) configure_yum_repo ;; + suse) configure_zypp_repo ;; + esac +} + +function check_mod_dav() +{ + HAS_MOD_DAV= + case $OS in + rhel|centos|suse) + rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + debian|ubuntu) + dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + esac +} + +function add_packages() +{ + case $OS in + rhel|centos|suse) return 0 ;; + esac + + PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \ + awk '$2 == "subversion" {print $1}') + + return 0 +} + +function install_svn() +{ + test -n "$SVN" && add_packages + + $PKG_INSTALLER $PKG_LIST +} + +function install_mod_dav() +{ + test -n "$NO_MOD_DAV" && return 0 + + case $OS in + rhel|centos|suse) PKG_LIST="mod_dav_svn" ;; + debian|ubuntu) PKG_LIST="libapache2-svn" ;; + esac + + $PKG_INSTALLER $PKG_LIST +} + +# Main Script + +trap handle_error ERR + +cat < /dev/null 2>&1; then + GET='curl -s -f' + elif which wget > /dev/null 2>&1; then + GET='wget -O - -q' + else + echo -n "You do not have curl or wget installed. At least one of these is " + echo "required to install WANdisco Subversion" + exit 1 + fi +} + +function check_root() +{ + test $EUID -eq 0 || + { + echo "You need to be root to install WANdisco subversion." + echo + echo "Please re-run this script as the root user." + exit 1 + } +} + +function unsupported() +{ + echo "Your operating system is not currently supported." + echo + echo -n "Please visit http://www.wandisco.com/subversion/download for a list" + echo " of supported systems." + exit 1 +} + +function confirm() +{ + local confirm= + local message=$1 + local default=${2:-y} + local prompt= + + test -n "$NON_INTERACTIVE" && return 0 + + prompt="$message (" + if test "$default" = "y"; then + prompt="${prompt}Y/n" + else + prompt="${prompt}y/N" + fi + prompt="$prompt) " + + while test "$confirm" != "$default"; do + read -n 1 -p "$prompt" confirm + echo + confirm=${confirm:-$default} + confirm=${confirm/Y/y} + confirm=${confirm/N/n} + + if test "$default" = "y"; then + test "$confirm" = "n" && return 1 + test "$confirm" = "y" && return 0 + else + test "$confirm" = "y" && return 1 + test "$confirm" = "n" && return 0 + fi + + echo "Invalid input, please enter 'y' or 'n'" + done + return 0 +} + +function remove_other() +{ + local other=$1 + + echo -n "You currently have subversion installed for another architecture " + echo -n "($other). This should be removed before installing " + echo "WANdisco Subversion." + echo + + if ! confirm "Remove Subversion $other?"; then + echo "Exiting at user request" + exit 1 + fi + + case $OS in + rhel|centos) yum erase -y subversion.$other ;; + debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;; + suse) zypper rm -y subversion.$other ;; + esac + + return 0 +} + +function check_alternative_arch() +{ + local other= + local confirm= + + case $OS in + centos|rhel|suse) + for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}') + do + test "$foreign" = "$ARCH" && continue + if other=$(rpm -q --queryformat='%{arch}' \ + subversion.$foreign 2>/dev/null); then + test -z "$other" && continue + remove_other $other + unset other + fi + done + ;; + debian|ubuntu) + dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0 + ARCH=$(dpkg --print-architecture) + for foreign in $(dpkg --print-foreign-architectures); do + if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \ + 2>/dev/null); then + remove_other $other + unset other + fi + done + ;; + esac + + test -z "$other" && return 0 + + + return 0 +} + +function is_lsb() +{ + which lsb_release >/dev/null 2>&1 || return 1 + + OS=$(lsb_release -si | tr A-Z a-z) + OS=${OS%% *} + OSVER=$(lsb_release -sr) + OSVER=${OSVER%%.*} + OSNAME=$(lsb_release -sc | tr A-Z a-z) + + case $OS in + redhat*) + OS=rhel + ;; + oracle*) + OS=rhel + ;; + esac + + return 0 +} + +function is_debian() +{ + test -r /etc/debian_version || return 1 + + OS="debian" + OSVER=$(cat /etc/debian_version) + OSVER=${OSVER%%.*} + case "$OSVER" in + 6) OSNAME="squeeze" ;; + 7) OSNAME="wheezy" ;; + 8) OSNAME="jessie" ;; + 9) OSNAME="stretch" ;; + squeeze) OSNAME=$OSVER; OSVER=6 ;; + wheezy) OSNAME=$OSVER; OSVER=7 ;; + jessie) OSNAME=$OSVER; OSVER=8 ;; + stretch) OSNAME=$OSVER; OSVER=9 ;; + *) return 1 ;; + esac + + return 0 +} + +function is_redhat() +{ + local release= + + test -r /etc/redhat-release || return 1 + + release=$(cat /etc/redhat-release | tr A-Z a-z) + OS=${release%% release *} + OSVER=${release##* release } + OSVER=${OSVER%%.*} + + case $OS in + red*) OS="rhel" ;; + centos*) OS="centos" ;; + *) return 1 ;; + esac + + return 0 +} + +function is_suse() +{ + test -r /etc/SuSE-release || return 1 + + OS="suse" + OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release) + OSVER=${OSVER%%.*} + + return 0 +} + +function is_oracle() +{ + test -r /etc/oracle-release || return 1 + + OS="rhel" + OSVER=$(sed -e 's/.*release \([0-9]+\).*/\1/' /etc/oracle-release) + + return 0 +} + +function find_os() +{ + is_lsb && return 0 + is_redhat && return 0 + is_debian && return 0 + is_suse && return 0 + is_oracle && return 0 + + + return 1 +} + +function check_os() +{ + case $OS in + rhel|centos) + case $OSVER in + 5|6|7) return 0 ;; + esac + ;; + suse) + case $OSVER in + 11|12) return 0 ;; + esac + ;; + debian) + case $OSVER in + 6|7|8|9) return 0 ;; + esac + ;; + ubuntu) + case $OSVER in + 10|12|14|16|18) return 0 ;; + esac + ;; + esac + + return 1 +} + +function find_pkg_version +{ + case $OS in + rhel|centos|suse) + if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \ + subversion.$ARCH 2>/dev/null); then + return 1 + fi + ;; + debian|ubuntu) + PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null) + PKG_VERSION=${PKG_VERSION%%+*} + ;; + esac + + return 0 +} + +function check_install() +{ + if ! SVN=$(svn --version --quiet 2>/dev/null); then + echo "This script will install Subversion $SVN_VERSION." + echo + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + return 0 + fi + + find_pkg_version || + { + echo -n "You currently have Subversion $SVN installed, however it's not " + echo -n "been installed with your systems package manager. Please remove " + echo "this version of Subversion and re-run this script." + echo + exit 2 + } + + if test "$PKG_VERSION" = "$SVN_VERSION"; then + echo "You currently have the latest version of Subversion installed." + exit 0 + fi + + echo -n "You currently have Subversion $PKG_VERSION installed. If you " + echo "continue with the installation it will be upgraded to $SVN_VERSION." + echo + + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + + return 0 +} + +function configure_apt_repo() +{ + PKG_INSTALLER="apt-get -y install" + PKG_LIST="subversion libsvn-perl python-subversion subversion-tools" + + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + rm -f /etc/apt/sources.list.d/WANdisco.list + cat < /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list +# WANdisco Open Source Repo +deb http://$REPO_SERVER/$OS $OSNAME $SVN_RELEASE +EOF + if [ OSNAME="stretch" ] || [ OSNAME="bionic" ] + then + wget -q -O - http://$REPO_SERVER/wandisco-debian-new.gpg | \ + apt-key add - >/dev/null 2>&1 + else + wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \ + apt-key add - >/dev/null 2>&1 + fi + apt-get update +} + + +function configure_yum_repo() +{ + PKG_INSTALLER="yum install -y" + PKG_LIST="subversion.$ARCH subversion-perl subversion-python subversion-tools" + SVN_RELEASE="${SVN_VERSION%.*}" + rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo + cat < /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo +[WANdisco-svn${SVN_RELEASE//\./}] +name=WANdisco SVN Repo $SVN_RELEASE +enabled=1 +baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/ +gpgcheck=1 +gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco +EOF + yum makecache +} + +function configure_zypp_repo() +{ + PKG_LIST="subversion subversion-perl subversion-python subversion-tools" + PKG_LIST="$PKG_LIST subversion-ruby" + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE" + + rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \ + /etc/zypp/repos.d/WANdisco-svn.repo + + zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1 + + rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \ + rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco + zypper addservice --type=YUM http://$REPO_SERVER/suse/$OSVER/$SVN_RELEASE/ \ + WANdisco-$SVN_RELEASE + zypper refresh +} + +function configure_repo() +{ + case $OS in + debian|ubuntu) configure_apt_repo ;; + rhel|centos) configure_yum_repo ;; + suse) configure_zypp_repo ;; + esac +} + +function check_mod_dav() +{ + HAS_MOD_DAV= + case $OS in + rhel|centos|suse) + rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + debian|ubuntu) + dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + esac +} + +function add_packages() +{ + case $OS in + rhel|centos|suse) return 0 ;; + esac + + PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \ + awk '$2 == "subversion" {print $1}') + + return 0 +} + +function install_svn() +{ + test -n "$SVN" && add_packages + + $PKG_INSTALLER $PKG_LIST +} + +function install_mod_dav() +{ + test -n "$NO_MOD_DAV" && return 0 + + case $OS in + rhel|centos|suse) PKG_LIST="mod_dav_svn" ;; + debian|ubuntu) PKG_LIST="libapache2-svn" ;; + esac + + $PKG_INSTALLER $PKG_LIST +} + +# Main Script + +trap handle_error ERR + +cat < /dev/null 2>&1; then + GET='curl -s -f' + elif which wget > /dev/null 2>&1; then + GET='wget -O - -q' + else + echo -n "You do not have curl or wget installed. At least one of these is " + echo "required to install WANdisco Subversion" + exit 1 + fi +} + +function check_root() +{ + test $EUID -eq 0 || + { + echo "You need to be root to install WANdisco subversion." + echo + echo "Please re-run this script as the root user." + exit 1 + } +} + +function unsupported() +{ + echo "Your operating system is not currently supported." + echo + echo -n "Please visit http://www.wandisco.com/subversion/download for a list" + echo " of supported systems." + exit 1 +} + +function confirm() +{ + local confirm= + local message=$1 + local default=${2:-y} + local prompt= + + test -n "$NON_INTERACTIVE" && return 0 + + prompt="$message (" + if test "$default" = "y"; then + prompt="${prompt}Y/n" + else + prompt="${prompt}y/N" + fi + prompt="$prompt) " + + while test "$confirm" != "$default"; do + read -n 1 -p "$prompt" confirm + echo + confirm=${confirm:-$default} + confirm=${confirm/Y/y} + confirm=${confirm/N/n} + + if test "$default" = "y"; then + test "$confirm" = "n" && return 1 + test "$confirm" = "y" && return 0 + else + test "$confirm" = "y" && return 1 + test "$confirm" = "n" && return 0 + fi + + echo "Invalid input, please enter 'y' or 'n'" + done + return 0 +} + +function remove_other() +{ + local other=$1 + + echo -n "You currently have subversion installed for another architecture " + echo -n "($other). This should be removed before installing " + echo "WANdisco Subversion." + echo + + if ! confirm "Remove Subversion $other?"; then + echo "Exiting at user request" + exit 1 + fi + + case $OS in + rhel|centos) yum erase -y subversion.$other ;; + debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;; + suse) zypper rm -y subversion.$other ;; + esac + + return 0 +} + +function check_alternative_arch() +{ + local other= + local confirm= + + case $OS in + centos|rhel|suse) + for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}') + do + test "$foreign" = "$ARCH" && continue + if other=$(rpm -q --queryformat='%{arch}' \ + subversion.$foreign 2>/dev/null); then + test -z "$other" && continue + remove_other $other + unset other + fi + done + ;; + debian|ubuntu) + dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0 + ARCH=$(dpkg --print-architecture) + for foreign in $(dpkg --print-foreign-architectures); do + if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \ + 2>/dev/null); then + remove_other $other + unset other + fi + done + ;; + esac + + test -z "$other" && return 0 + + + return 0 +} + +function is_lsb() +{ + which lsb_release >/dev/null 2>&1 || return 1 + + OS=$(lsb_release -si | tr A-Z a-z) + OS=${OS%% *} + OSVER=$(lsb_release -sr) + OSVER=${OSVER%%.*} + OSNAME=$(lsb_release -sc | tr A-Z a-z) + + case $OS in + redhat*) + OS=rhel + ;; + oracle*) + OS=rhel + ;; + esac + + return 0 +} + +function is_debian() +{ + test -r /etc/debian_version || return 1 + + OS="debian" + OSVER=$(cat /etc/debian_version) + OSVER=${OSVER%%.*} + case "$OSVER" in + 6) OSNAME="squeeze" ;; + 7) OSNAME="wheezy" ;; + 8) OSNAME="jessie" ;; + 9) OSNAME="stretch" ;; + squeeze) OSNAME=$OSVER; OSVER=6 ;; + wheezy) OSNAME=$OSVER; OSVER=7 ;; + jessie) OSNAME=$OSVER; OSVER=8 ;; + stretch) OSNAME=$OSVER; OSVER=9 ;; + *) return 1 ;; + esac + + return 0 +} + +function is_redhat() +{ + local release= + + test -r /etc/redhat-release || return 1 + + release=$(cat /etc/redhat-release | tr A-Z a-z) + OS=${release%% release *} + OSVER=${release##* release } + OSVER=${OSVER%%.*} + + case $OS in + red*) OS="rhel" ;; + centos*) OS="centos" ;; + *) return 1 ;; + esac + + return 0 +} + +function is_suse() +{ + test -r /etc/SuSE-release || return 1 + + OS="suse" + OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release) + OSVER=${OSVER%%.*} + + return 0 +} + +function is_oracle() +{ + test -r /etc/oracle-release || return 1 + + OS="rhel" + OSVER=$(sed -e 's/.*release \([0-9]+\).*/\1/' /etc/oracle-release) + + return 0 +} + +function find_os() +{ + is_lsb && return 0 + is_redhat && return 0 + is_debian && return 0 + is_suse && return 0 + is_oracle && return 0 + + + return 1 +} + +function check_os() +{ + case $OS in + rhel|centos) + case $OSVER in + 5|6|7|8) return 0 ;; + esac + ;; + suse) + case $OSVER in + 11|12) return 0 ;; + esac + ;; + debian) + case $OSVER in + 6|7|8|9) return 0 ;; + esac + ;; + ubuntu) + case $OSVER in + 10|12|14|16|18) return 0 ;; + esac + ;; + esac + + return 1 +} + +function find_pkg_version +{ + case $OS in + rhel|centos|suse) + if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \ + subversion.$ARCH 2>/dev/null); then + return 1 + fi + ;; + debian|ubuntu) + PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null) + PKG_VERSION=${PKG_VERSION%%+*} + ;; + esac + + return 0 +} + +function check_install() +{ + if ! SVN=$(svn --version --quiet 2>/dev/null); then + echo "This script will install Subversion $SVN_VERSION." + echo + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + return 0 + fi + + find_pkg_version || + { + echo -n "You currently have Subversion $SVN installed, however it's not " + echo -n "been installed with your systems package manager. Please remove " + echo "this version of Subversion and re-run this script." + echo + exit 2 + } + + if test "$PKG_VERSION" = "$SVN_VERSION"; then + echo "You currently have the latest version of Subversion installed." + exit 0 + fi + + echo -n "You currently have Subversion $PKG_VERSION installed. If you " + echo "continue with the installation it will be upgraded to $SVN_VERSION." + echo + + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + + return 0 +} + +function configure_apt_repo() +{ + PKG_INSTALLER="apt-get -y install" + PKG_LIST="subversion libsvn-perl python-subversion subversion-tools" + + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + rm -f /etc/apt/sources.list.d/WANdisco.list + cat < /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list +# WANdisco Open Source Repo +deb http://$REPO_SERVER/$OS $OSNAME $SVN_RELEASE +EOF + if [ $OSNAME = "stretch" ] || [ $OSNAME = "bionic" ] + then + wget -q -O - http://$REPO_SERVER/wandisco-debian-new.gpg | \ + apt-key add - >/dev/null 2>&1 + else + wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \ + apt-key add - >/dev/null 2>&1 + fi + apt-get update +} + + +function configure_yum_repo() +{ + PKG_INSTALLER="yum install -y" + PKG_LIST="subversion.$ARCH subversion-perl subversion-python subversion-tools" + SVN_RELEASE="${SVN_VERSION%.*}" + rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo + cat < /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo +[WANdisco-svn${SVN_RELEASE//\./}] +name=WANdisco SVN Repo $SVN_RELEASE +enabled=1 +baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/ +gpgcheck=1 +gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco +EOF + if [ $OSVER = "8" ] + then yum module disable subversion -y + fi + yum makecache +} + +function configure_zypp_repo() +{ + PKG_LIST="subversion subversion-perl subversion-python subversion-tools" + PKG_LIST="$PKG_LIST subversion-ruby" + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE" + + rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \ + /etc/zypp/repos.d/WANdisco-svn.repo + + zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1 + + rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \ + rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco + zypper addservice --type=YUM http://$REPO_SERVER/suse/$OSVER/$SVN_RELEASE/ \ + WANdisco-$SVN_RELEASE + zypper refresh +} + +function configure_repo() +{ + case $OS in + debian|ubuntu) configure_apt_repo ;; + rhel|centos) configure_yum_repo ;; + suse) configure_zypp_repo ;; + esac +} + +function check_mod_dav() +{ + HAS_MOD_DAV= + case $OS in + rhel|centos|suse) + rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + debian|ubuntu) + dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + esac +} + +function add_packages() +{ + case $OS in + rhel|centos|suse) return 0 ;; + esac + + PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \ + awk '$2 == "subversion" {print $1}') + + return 0 +} + +function install_svn() +{ + test -n "$SVN" && add_packages + + $PKG_INSTALLER $PKG_LIST +} + +function install_mod_dav() +{ + test -n "$NO_MOD_DAV" && return 0 + + case $OS in + rhel|centos|suse) PKG_LIST="mod_dav_svn" ;; + debian|ubuntu) PKG_LIST="libapache2-svn" ;; + esac + + $PKG_INSTALLER $PKG_LIST +} + +# Main Script + +trap handle_error ERR + +cat < /dev/null 2>&1; then + GET='curl -s -f' + elif which wget > /dev/null 2>&1; then + GET='wget -O - -q' + else + echo -n "You do not have curl or wget installed. At least one of these is " + echo "required to install WANdisco Subversion" + exit 1 + fi +} + +function check_root() +{ + test $EUID -eq 0 || + { + echo "You need to be root to install WANdisco subversion." + echo + echo "Please re-run this script as the root user." + exit 1 + } +} + +function unsupported() +{ + echo "Your operating system is not currently supported." + echo + echo -n "Please visit http://www.wandisco.com/subversion/download for a list" + echo " of supported systems." + exit 1 +} + +function confirm() +{ + local confirm= + local message=$1 + local default=${2:-y} + local prompt= + + test -n "$NON_INTERACTIVE" && return 0 + + prompt="$message (" + if test "$default" = "y"; then + prompt="${prompt}Y/n" + else + prompt="${prompt}y/N" + fi + prompt="$prompt) " + + while test "$confirm" != "$default"; do + read -n 1 -p "$prompt" confirm + echo + confirm=${confirm:-$default} + confirm=${confirm/Y/y} + confirm=${confirm/N/n} + + if test "$default" = "y"; then + test "$confirm" = "n" && return 1 + test "$confirm" = "y" && return 0 + else + test "$confirm" = "y" && return 1 + test "$confirm" = "n" && return 0 + fi + + echo "Invalid input, please enter 'y' or 'n'" + done + return 0 +} + +function remove_other() +{ + local other=$1 + + echo -n "You currently have subversion installed for another architecture " + echo -n "($other). This should be removed before installing " + echo "WANdisco Subversion." + echo + + if ! confirm "Remove Subversion $other?"; then + echo "Exiting at user request" + exit 1 + fi + + case $OS in + rhel|centos) yum erase -y subversion.$other ;; + debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;; + suse) zypper rm -y subversion.$other ;; + esac + + return 0 +} + +function check_alternative_arch() +{ + local other= + local confirm= + + case $OS in + centos|rhel|suse) + for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}') + do + test "$foreign" = "$ARCH" && continue + if other=$(rpm -q --queryformat='%{arch}' \ + subversion.$foreign 2>/dev/null); then + test -z "$other" && continue + remove_other $other + unset other + fi + done + ;; + debian|ubuntu) + dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0 + ARCH=$(dpkg --print-architecture) + for foreign in $(dpkg --print-foreign-architectures); do + if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \ + 2>/dev/null); then + remove_other $other + unset other + fi + done + ;; + esac + + test -z "$other" && return 0 + + + return 0 +} + +function is_lsb() +{ + which lsb_release >/dev/null 2>&1 || return 1 + + OS=$(lsb_release -si | tr A-Z a-z) + OS=${OS%% *} + OSVER=$(lsb_release -sr) + OSVER=${OSVER%%.*} + OSNAME=$(lsb_release -sc | tr A-Z a-z) + + case $OS in + redhat*) + OS=rhel + ;; + oracle*) + OS=rhel + ;; + esac + + return 0 +} + +function is_debian() +{ + test -r /etc/debian_version || return 1 + + OS="debian" + OSVER=$(cat /etc/debian_version) + OSVER=${OSVER%%.*} + case "$OSVER" in + 6) OSNAME="squeeze" ;; + 7) OSNAME="wheezy" ;; + 8) OSNAME="jessie" ;; + 9) OSNAME="stretch" ;; + squeeze) OSNAME=$OSVER; OSVER=6 ;; + wheezy) OSNAME=$OSVER; OSVER=7 ;; + jessie) OSNAME=$OSVER; OSVER=8 ;; + stretch) OSNAME=$OSVER; OSVER=9 ;; + *) return 1 ;; + esac + + return 0 +} + +function is_redhat() +{ + local release= + + test -r /etc/redhat-release || return 1 + + release=$(cat /etc/redhat-release | tr A-Z a-z) + OS=${release%% release *} + OSVER=${release##* release } + OSVER=${OSVER%%.*} + + case $OS in + red*) OS="rhel" ;; + centos*) OS="centos" ;; + *) return 1 ;; + esac + + return 0 +} + +function is_suse() +{ + test -r /etc/SuSE-release || return 1 + + OS="suse" + OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release) + OSVER=${OSVER%%.*} + + return 0 +} + +function is_oracle() +{ + test -r /etc/oracle-release || return 1 + + OS="rhel" + OSVER=$(sed -e 's/.*release \([0-9]+\).*/\1/' /etc/oracle-release) + + return 0 +} + +function find_os() +{ + is_lsb && return 0 + is_redhat && return 0 + is_debian && return 0 + is_suse && return 0 + is_oracle && return 0 + + + return 1 +} + +function check_os() +{ + case $OS in + rhel|centos) + case $OSVER in + 5|6|7) return 0 ;; + esac + ;; + suse) + case $OSVER in + 11|12) return 0 ;; + esac + ;; + debian) + case $OSVER in + 6|7|8|9) return 0 ;; + esac + ;; + ubuntu) + case $OSVER in + 10|12|14|16|18) return 0 ;; + esac + ;; + esac + + return 1 +} + +function find_pkg_version +{ + case $OS in + rhel|centos|suse) + if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \ + subversion.$ARCH 2>/dev/null); then + return 1 + fi + ;; + debian|ubuntu) + PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null) + PKG_VERSION=${PKG_VERSION%%+*} + ;; + esac + + return 0 +} + +function check_install() +{ + if ! SVN=$(svn --version --quiet 2>/dev/null); then + echo "This script will install Subversion $SVN_VERSION." + echo + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + return 0 + fi + + find_pkg_version || + { + echo -n "You currently have Subversion $SVN installed, however it's not " + echo -n "been installed with your systems package manager. Please remove " + echo "this version of Subversion and re-run this script." + echo + exit 2 + } + + if test "$PKG_VERSION" = "$SVN_VERSION"; then + echo "You currently have the latest version of Subversion installed." + exit 0 + fi + + echo -n "You currently have Subversion $PKG_VERSION installed. If you " + echo "continue with the installation it will be upgraded to $SVN_VERSION." + echo + + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + + return 0 +} + +function configure_apt_repo() +{ + PKG_INSTALLER="apt-get -y install" + PKG_LIST="subversion libsvn-perl python-subversion subversion-tools" + + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + rm -f /etc/apt/sources.list.d/WANdisco.list + cat < /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list +# WANdisco Open Source Repo +deb http://$REPO_SERVER/$OS $OSNAME $SVN_RELEASE +EOF + if [ $OSNAME = "stretch" ] || [ $OSNAME = "bionic" ] + then + wget -q -O - http://$REPO_SERVER/wandisco-debian-new.gpg | \ + apt-key add - >/dev/null 2>&1 + else + wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \ + apt-key add - >/dev/null 2>&1 + fi + apt-get update +} + + +function configure_yum_repo() +{ + PKG_INSTALLER="yum install -y" + PKG_LIST="subversion.$ARCH subversion-perl subversion-python subversion-tools" + SVN_RELEASE="${SVN_VERSION%.*}" + rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo + cat < /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo +[WANdisco-svn${SVN_RELEASE//\./}] +name=WANdisco SVN Repo $SVN_RELEASE +enabled=1 +baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/ +gpgcheck=1 +gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco +EOF + yum makecache +} + +function configure_zypp_repo() +{ + PKG_LIST="subversion subversion-perl subversion-python subversion-tools" + PKG_LIST="$PKG_LIST subversion-ruby" + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE" + + rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \ + /etc/zypp/repos.d/WANdisco-svn.repo + + zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1 + + rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \ + rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco + zypper addservice --type=YUM http://$REPO_SERVER/suse/$OSVER/$SVN_RELEASE/ \ + WANdisco-$SVN_RELEASE + zypper refresh +} + +function configure_repo() +{ + case $OS in + debian|ubuntu) configure_apt_repo ;; + rhel|centos) configure_yum_repo ;; + suse) configure_zypp_repo ;; + esac +} + +function check_mod_dav() +{ + HAS_MOD_DAV= + case $OS in + rhel|centos|suse) + rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + debian|ubuntu) + dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + esac +} + +function add_packages() +{ + case $OS in + rhel|centos|suse) return 0 ;; + esac + + PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \ + awk '$2 == "subversion" {print $1}') + + return 0 +} + +function install_svn() +{ + test -n "$SVN" && add_packages + + $PKG_INSTALLER $PKG_LIST +} + +function install_mod_dav() +{ + test -n "$NO_MOD_DAV" && return 0 + + case $OS in + rhel|centos|suse) PKG_LIST="mod_dav_svn" ;; + debian|ubuntu) PKG_LIST="libapache2-svn" ;; + esac + + $PKG_INSTALLER $PKG_LIST +} + +# Main Script + +trap handle_error ERR + +cat < /dev/null 2>&1; then + GET='curl -s -f' + elif which wget > /dev/null 2>&1; then + GET='wget -O - -q' + else + echo -n "You do not have curl or wget installed. At least one of these is " + echo "required to install WANdisco Subversion" + exit 1 + fi +} + +function check_root() +{ + test $EUID -eq 0 || + { + echo "You need to be root to install WANdisco subversion." + echo + echo "Please re-run this script as the root user." + exit 1 + } +} + +function unsupported() +{ + echo "Your operating system is not currently supported." + echo + echo -n "Please visit http://www.wandisco.com/subversion/download for a list" + echo " of supported systems." + exit 1 +} + +function confirm() +{ + local confirm= + local message=$1 + local default=${2:-y} + local prompt= + + test -n "$NON_INTERACTIVE" && return 0 + + prompt="$message (" + if test "$default" = "y"; then + prompt="${prompt}Y/n" + else + prompt="${prompt}y/N" + fi + prompt="$prompt) " + + while test "$confirm" != "$default"; do + read -n 1 -p "$prompt" confirm + echo + confirm=${confirm:-$default} + confirm=${confirm/Y/y} + confirm=${confirm/N/n} + + if test "$default" = "y"; then + test "$confirm" = "n" && return 1 + test "$confirm" = "y" && return 0 + else + test "$confirm" = "y" && return 1 + test "$confirm" = "n" && return 0 + fi + + echo "Invalid input, please enter 'y' or 'n'" + done + return 0 +} + +function remove_other() +{ + local other=$1 + + echo -n "You currently have subversion installed for another architecture " + echo -n "($other). This should be removed before installing " + echo "WANdisco Subversion." + echo + + if ! confirm "Remove Subversion $other?"; then + echo "Exiting at user request" + exit 1 + fi + + case $OS in + rhel|centos) yum erase -y subversion.$other ;; + debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;; + suse) zypper rm -y subversion.$other ;; + esac + + return 0 +} + +function check_alternative_arch() +{ + local other= + local confirm= + + case $OS in + centos|rhel|suse) + for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}') + do + test "$foreign" = "$ARCH" && continue + if other=$(rpm -q --queryformat='%{arch}' \ + subversion.$foreign 2>/dev/null); then + test -z "$other" && continue + remove_other $other + unset other + fi + done + ;; + debian|ubuntu) + dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0 + ARCH=$(dpkg --print-architecture) + for foreign in $(dpkg --print-foreign-architectures); do + if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \ + 2>/dev/null); then + remove_other $other + unset other + fi + done + ;; + esac + + test -z "$other" && return 0 + + + return 0 +} + +function is_lsb() +{ + which lsb_release >/dev/null 2>&1 || return 1 + + OS=$(lsb_release -si | tr A-Z a-z) + OS=${OS%% *} + OSVER=$(lsb_release -sr) + OSVER=${OSVER%%.*} + OSNAME=$(lsb_release -sc | tr A-Z a-z) + + case $OS in + redhat*) + OS=rhel + ;; + oracle*) + OS=rhel + ;; + esac + + return 0 +} + +function is_debian() +{ + test -r /etc/debian_version || return 1 + + OS="debian" + OSVER=$(cat /etc/debian_version) + OSVER=${OSVER%%.*} + case "$OSVER" in + 6) OSNAME="squeeze" ;; + 7) OSNAME="wheezy" ;; + 8) OSNAME="jessie" ;; + 9) OSNAME="stretch" ;; + squeeze) OSNAME=$OSVER; OSVER=6 ;; + wheezy) OSNAME=$OSVER; OSVER=7 ;; + jessie) OSNAME=$OSVER; OSVER=8 ;; + stretch) OSNAME=$OSVER; OSVER=9 ;; + *) return 1 ;; + esac + + return 0 +} + +function is_redhat() +{ + local release= + + test -r /etc/redhat-release || return 1 + + release=$(cat /etc/redhat-release | tr A-Z a-z) + OS=${release%% release *} + OSVER=${release##* release } + OSVER=${OSVER%%.*} + + case $OS in + red*) OS="rhel" ;; + centos*) OS="centos" ;; + *) return 1 ;; + esac + + return 0 +} + +function is_suse() +{ + test -r /etc/SuSE-release || return 1 + + OS="suse" + OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release) + OSVER=${OSVER%%.*} + + return 0 +} + +function is_oracle() +{ + test -r /etc/oracle-release || return 1 + + OS="rhel" + OSVER=$(sed -e 's/.*release \([0-9]+\).*/\1/' /etc/oracle-release) + + return 0 +} + +function find_os() +{ + is_lsb && return 0 + is_redhat && return 0 + is_debian && return 0 + is_suse && return 0 + is_oracle && return 0 + + + return 1 +} + +function check_os() +{ + case $OS in + rhel|centos) + case $OSVER in + 5|6|7) return 0 ;; + esac + ;; + suse) + case $OSVER in + 11|12) return 0 ;; + esac + ;; + debian) + case $OSVER in + 6|7|8|9) return 0 ;; + esac + ;; + ubuntu) + case $OSVER in + 10|12|14|16|18) return 0 ;; + esac + ;; + esac + + return 1 +} + +function find_pkg_version +{ + case $OS in + rhel|centos|suse) + if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \ + subversion.$ARCH 2>/dev/null); then + return 1 + fi + ;; + debian|ubuntu) + PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null) + PKG_VERSION=${PKG_VERSION%%+*} + ;; + esac + + return 0 +} + +function check_install() +{ + if ! SVN=$(svn --version --quiet 2>/dev/null); then + echo "This script will install Subversion $SVN_VERSION." + echo + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + return 0 + fi + + find_pkg_version || + { + echo -n "You currently have Subversion $SVN installed, however it's not " + echo -n "been installed with your systems package manager. Please remove " + echo "this version of Subversion and re-run this script." + echo + exit 2 + } + + if test "$PKG_VERSION" = "$SVN_VERSION"; then + echo "You currently have the latest version of Subversion installed." + exit 0 + fi + + echo -n "You currently have Subversion $PKG_VERSION installed. If you " + echo "continue with the installation it will be upgraded to $SVN_VERSION." + echo + + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + + return 0 +} + +function configure_apt_repo() +{ + PKG_INSTALLER="apt-get -y install" + PKG_LIST="subversion libsvn-perl python-subversion subversion-tools" + + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + rm -f /etc/apt/sources.list.d/WANdisco.list + cat < /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list +# WANdisco Open Source Repo +deb http://$REPO_SERVER/$OS $OSNAME $SVN_RELEASE +EOF + if [ $OSNAME = "stretch" ] || [ $OSNAME = "bionic" ] + then + wget -q -O - http://$REPO_SERVER/wandisco-debian-new.gpg | \ + apt-key add - >/dev/null 2>&1 + else + wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \ + apt-key add - >/dev/null 2>&1 + fi + apt-get update +} + + +function configure_yum_repo() +{ + PKG_INSTALLER="yum install -y" + PKG_LIST="subversion.$ARCH subversion-perl subversion-python subversion-tools" + SVN_RELEASE="${SVN_VERSION%.*}" + rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo + cat < /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo +[WANdisco-svn${SVN_RELEASE//\./}] +name=WANdisco SVN Repo $SVN_RELEASE +enabled=1 +baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/ +gpgcheck=1 +gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco +EOF + yum makecache +} + +function configure_zypp_repo() +{ + PKG_LIST="subversion subversion-perl subversion-python subversion-tools" + PKG_LIST="$PKG_LIST subversion-ruby" + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE" + + rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \ + /etc/zypp/repos.d/WANdisco-svn.repo + + zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1 + + rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \ + rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco + zypper addservice --type=YUM http://$REPO_SERVER/suse/$OSVER/$SVN_RELEASE/ \ + WANdisco-$SVN_RELEASE + zypper refresh +} + +function configure_repo() +{ + case $OS in + debian|ubuntu) configure_apt_repo ;; + rhel|centos) configure_yum_repo ;; + suse) configure_zypp_repo ;; + esac +} + +function check_mod_dav() +{ + HAS_MOD_DAV= + case $OS in + rhel|centos|suse) + rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + debian|ubuntu) + dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + esac +} + +function add_packages() +{ + case $OS in + rhel|centos|suse) return 0 ;; + esac + + PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \ + awk '$2 == "subversion" {print $1}') + + return 0 +} + +function install_svn() +{ + test -n "$SVN" && add_packages + + $PKG_INSTALLER $PKG_LIST +} + +function install_mod_dav() +{ + test -n "$NO_MOD_DAV" && return 0 + + case $OS in + rhel|centos|suse) PKG_LIST="mod_dav_svn" ;; + debian|ubuntu) PKG_LIST="libapache2-svn" ;; + esac + + $PKG_INSTALLER $PKG_LIST +} + +# Main Script + +trap handle_error ERR + +cat < /dev/null 2>&1; then + GET='curl -s -f' + elif which wget > /dev/null 2>&1; then + GET='wget -O - -q' + else + echo -n "You do not have curl or wget installed. At least one of these is " + echo "required to install WANdisco Subversion" + exit 1 + fi +} + +function check_root() +{ + test $EUID -eq 0 || + { + echo "You need to be root to install WANdisco subversion." + echo + echo "Please re-run this script as the root user." + exit 1 + } +} + +function unsupported() +{ + echo "Your operating system is not currently supported." + echo + echo -n "Please visit http://www.wandisco.com/subversion/download for a list" + echo " of supported systems." + exit 1 +} + +function confirm() +{ + local confirm= + local message=$1 + local default=${2:-y} + local prompt= + + test -n "$NON_INTERACTIVE" && return 0 + + prompt="$message (" + if test "$default" = "y"; then + prompt="${prompt}Y/n" + else + prompt="${prompt}y/N" + fi + prompt="$prompt) " + + while test "$confirm" != "$default"; do + read -n 1 -p "$prompt" confirm + echo + confirm=${confirm:-$default} + confirm=${confirm/Y/y} + confirm=${confirm/N/n} + + if test "$default" = "y"; then + test "$confirm" = "n" && return 1 + test "$confirm" = "y" && return 0 + else + test "$confirm" = "y" && return 1 + test "$confirm" = "n" && return 0 + fi + + echo "Invalid input, please enter 'y' or 'n'" + done + return 0 +} + +function remove_other() +{ + local other=$1 + + echo -n "You currently have subversion installed for another architecture " + echo -n "($other). This should be removed before installing " + echo "WANdisco Subversion." + echo + + if ! confirm "Remove Subversion $other?"; then + echo "Exiting at user request" + exit 1 + fi + + case $OS in + rhel|centos) yum erase -y subversion.$other ;; + debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;; + suse) zypper rm -y subversion.$other ;; + esac + + return 0 +} + +function check_alternative_arch() +{ + local other= + local confirm= + + case $OS in + centos|rhel|suse) + for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}') + do + test "$foreign" = "$ARCH" && continue + if other=$(rpm -q --queryformat='%{arch}' \ + subversion.$foreign 2>/dev/null); then + test -z "$other" && continue + remove_other $other + unset other + fi + done + ;; + debian|ubuntu) + dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0 + ARCH=$(dpkg --print-architecture) + for foreign in $(dpkg --print-foreign-architectures); do + if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \ + 2>/dev/null); then + remove_other $other + unset other + fi + done + ;; + esac + + test -z "$other" && return 0 + + + return 0 +} + +function is_lsb() +{ + which lsb_release >/dev/null 2>&1 || return 1 + + OS=$(lsb_release -si | tr A-Z a-z) + OS=${OS%% *} + OSVER=$(lsb_release -sr) + OSVER=${OSVER%%.*} + OSNAME=$(lsb_release -sc | tr A-Z a-z) + + case $OS in + redhat*) + OS=rhel + ;; + oracle*) + OS=rhel + ;; + esac + + return 0 +} + +function is_debian() +{ + test -r /etc/debian_version || return 1 + + OS="debian" + OSVER=$(cat /etc/debian_version) + OSVER=${OSVER%%.*} + case "$OSVER" in + 6) OSNAME="squeeze" ;; + 7) OSNAME="wheezy" ;; + 8) OSNAME="jessie" ;; + squeeze) OSNAME=$OSVER; OSVER=6 ;; + wheezy) OSNAME=$OSVER; OSVER=7 ;; + jessie) OSNAME=$OSVER; OSVER=8 ;; + *) return 1 ;; + esac + + return 0 +} + +function is_redhat() +{ + local release= + + test -r /etc/redhat-release || return 1 + + release=$(cat /etc/redhat-release | tr A-Z a-z) + OS=${release%% release *} + OSVER=${release##* release } + OSVER=${OSVER%%.*} + + case $OS in + red*) OS="rhel" ;; + centos*) OS="centos" ;; + *) return 1 ;; + esac + + return 0 +} + +function is_suse() +{ + test -r /etc/SuSE-release || return 1 + + OS="suse" + OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release) + OSVER=${OSVER%%.*} + + return 0 +} + +function is_oracle() +{ + test -r /etc/oracle-release || return 1 + + OS="rhel" + OSVER=$(sed -e 's/.*release \([0-9]+\).*/\1/' /etc/oracle-release) + + return 0 +} + +function find_os() +{ + is_lsb && return 0 + is_redhat && return 0 + is_debian && return 0 + is_suse && return 0 + is_oracle && return 0 + + + return 1 +} + +function check_os() +{ + case $OS in + rhel|centos) + case $OSVER in + 5|6|7) return 0 ;; + esac + ;; + suse) + case $OSVER in + 11|12) return 0 ;; + esac + ;; + debian) + case $OSVER in + 6|7|8) return 0 ;; + esac + ;; + ubuntu) + case $OSVER in + 10|12|14) return 0 ;; + esac + ;; + esac + + return 1 +} + +function find_pkg_version +{ + case $OS in + rhel|centos|suse) + if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \ + subversion.$ARCH 2>/dev/null); then + return 1 + fi + ;; + debian|ubuntu) + PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null) + PKG_VERSION=${PKG_VERSION%%+*} + ;; + esac + + return 0 +} + +function check_install() +{ + if ! SVN=$(svn --version --quiet 2>/dev/null); then + echo "This script will install Subversion $SVN_VERSION." + echo + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + return 0 + fi + + find_pkg_version || + { + echo -n "You currently have Subversion $SVN installed, however it's not " + echo -n "been installed with your systems package manager. Please remove " + echo "this version of Subversion and re-run this script." + echo + exit 2 + } + + if test "$PKG_VERSION" = "$SVN_VERSION"; then + echo "You currently have the latest version of Subversion installed." + exit 0 + fi + + echo -n "You currently have Subversion $PKG_VERSION installed. If you " + echo "continue with the installation it will be upgraded to $SVN_VERSION." + echo + + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + + return 0 +} + +function configure_apt_repo() +{ + PKG_INSTALLER="apt-get -y install" + PKG_LIST="subversion libsvn-perl python-subversion subversion-tools" + + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + rm -f /etc/apt/sources.list.d/WANdisco.list + cat < /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list +# WANdisco Open Source Repo +deb http://$REPO_SERVER/$OS $OSNAME $SVN_RELEASE +EOF + wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \ + apt-key add - >/dev/null 2>&1 + apt-get update +} + + +function configure_yum_repo() +{ + PKG_INSTALLER="yum install -y" + PKG_LIST="subversion.$ARCH subversion-perl subversion-python subversion-tools" + SVN_RELEASE="${SVN_VERSION%.*}" + rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo + cat < /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo +[WANdisco-svn${SVN_RELEASE//\./}] +name=WANdisco SVN Repo $SVN_RELEASE +enabled=1 +baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/ +gpgcheck=1 +gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco +EOF + yum makecache +} + +function configure_zypp_repo() +{ + PKG_LIST="subversion subversion-perl subversion-python subversion-tools" + PKG_LIST="$PKG_LIST subversion-ruby" + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE" + + rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \ + /etc/zypp/repos.d/WANdisco-svn.repo + + zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1 + + rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \ + rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco + zypper addservice --type=YUM http://$REPO_SERVER/suse/$SVN_RELEASE/ \ + WANdisco-$SVN_RELEASE + zypper refresh +} + +function configure_repo() +{ + case $OS in + debian|ubuntu) configure_apt_repo ;; + rhel|centos) configure_yum_repo ;; + suse) configure_zypp_repo ;; + esac +} + +function check_mod_dav() +{ + HAS_MOD_DAV= + case $OS in + rhel|centos|suse) + rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + debian|ubuntu) + dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + esac +} + +function add_packages() +{ + case $OS in + rhel|centos|suse) return 0 ;; + esac + + PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \ + awk '$2 == "subversion" {print $1}') + + return 0 +} + +function install_svn() +{ + test -n "$SVN" && add_packages + + $PKG_INSTALLER $PKG_LIST +} + +function install_mod_dav() +{ + test -n "$NO_MOD_DAV" && return 0 + + case $OS in + rhel|centos|suse) PKG_LIST="mod_dav_svn" ;; + debian|ubuntu) PKG_LIST="libapache2-svn" ;; + esac + + $PKG_INSTALLER $PKG_LIST +} + +# Main Script + +trap handle_error ERR + +cat < /dev/null 2>&1; then + GET='curl -s -f' + elif which wget > /dev/null 2>&1; then + GET='wget -O - -q' + else + echo -n "You do not have curl or wget installed. At least one of these is " + echo "required to install WANdisco Subversion" + exit 1 + fi +} + +function check_root() +{ + test $EUID -eq 0 || + { + echo "You need to be root to install WANdisco subversion." + echo + echo "Please re-run this script as the root user." + exit 1 + } +} + +function unsupported() +{ + echo "Your operating system is not currently supported." + echo + echo -n "Please visit http://www.wandisco.com/subversion/download for a list" + echo " of supported systems." + exit 1 +} + +function confirm() +{ + local confirm= + local message=$1 + local default=${2:-y} + local prompt= + + test -n "$NON_INTERACTIVE" && return 0 + + prompt="$message (" + if test "$default" = "y"; then + prompt="${prompt}Y/n" + else + prompt="${prompt}y/N" + fi + prompt="$prompt) " + + while test "$confirm" != "$default"; do + read -n 1 -p "$prompt" confirm + echo + confirm=${confirm:-$default} + confirm=${confirm/Y/y} + confirm=${confirm/N/n} + + if test "$default" = "y"; then + test "$confirm" = "n" && return 1 + test "$confirm" = "y" && return 0 + else + test "$confirm" = "y" && return 1 + test "$confirm" = "n" && return 0 + fi + + echo "Invalid input, please enter 'y' or 'n'" + done + return 0 +} + +function remove_other() +{ + local other=$1 + + echo -n "You currently have subversion installed for another architecture " + echo -n "($other). This should be removed before installing " + echo "WANdisco Subversion." + echo + + if ! confirm "Remove Subversion $other?"; then + echo "Exiting at user request" + exit 1 + fi + + case $OS in + rhel|centos) yum erase -y subversion.$other ;; + debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;; + suse) zypper rm -y subversion.$other ;; + esac + + return 0 +} + +function check_alternative_arch() +{ + local other= + local confirm= + + case $OS in + centos|rhel|suse) + for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}') + do + test "$foreign" = "$ARCH" && continue + if other=$(rpm -q --queryformat='%{arch}' \ + subversion.$foreign 2>/dev/null); then + test -z "$other" && continue + remove_other $other + unset other + fi + done + ;; + debian|ubuntu) + dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0 + ARCH=$(dpkg --print-architecture) + for foreign in $(dpkg --print-foreign-architectures); do + if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \ + 2>/dev/null); then + remove_other $other + unset other + fi + done + ;; + esac + + test -z "$other" && return 0 + + + return 0 +} + +function is_lsb() +{ + which lsb_release >/dev/null 2>&1 || return 1 + + OS=$(lsb_release -si | tr A-Z a-z) + OS=${OS%% *} + OSVER=$(lsb_release -sr) + OSVER=${OSVER%%.*} + OSNAME=$(lsb_release -sc | tr A-Z a-z) + + case $OS in + redhat*) + OS=rhel + ;; + oracle*) + OS=rhel + ;; + esac + + return 0 +} + +function is_debian() +{ + test -r /etc/debian_version || return 1 + + OS="debian" + OSVER=$(cat /etc/debian_version) + OSVER=${OSVER%%.*} + case "$OSVER" in + 6) OSNAME="squeeze" ;; + 7) OSNAME="wheezy" ;; + 8) OSNAME="jessie" ;; + squeeze) OSNAME=$OSVER; OSVER=6 ;; + wheezy) OSNAME=$OSVER; OSVER=7 ;; + jessie) OSNAME=$OSVER; OSVER=8 ;; + *) return 1 ;; + esac + + return 0 +} + +function is_redhat() +{ + local release= + + test -r /etc/redhat-release || return 1 + + release=$(cat /etc/redhat-release | tr A-Z a-z) + OS=${release%% release *} + OSVER=${release##* release } + OSVER=${OSVER%%.*} + + case $OS in + red*) OS="rhel" ;; + centos*) OS="centos" ;; + *) return 1 ;; + esac + + return 0 +} + +function is_suse() +{ + test -r /etc/SuSE-release || return 1 + + OS="suse" + OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release) + OSVER=${OSVER%%.*} + + return 0 +} + +function is_oracle() +{ + test -r /etc/oracle-release || return 1 + + OS="rhel" + OSVER=$(sed -e 's/.*release \([0-9]+\).*/\1/' /etc/oracle-release) + + return 0 +} + +function find_os() +{ + is_lsb && return 0 + is_redhat && return 0 + is_debian && return 0 + is_suse && return 0 + is_oracle && return 0 + + + return 1 +} + +function check_os() +{ + case $OS in + rhel|centos) + case $OSVER in + 5|6|7) return 0 ;; + esac + ;; + suse) + case $OSVER in + 11|12) return 0 ;; + esac + ;; + debian) + case $OSVER in + 6|7|8) return 0 ;; + esac + ;; + ubuntu) + case $OSVER in + 10|12|14|16) return 0 ;; + esac + ;; + esac + + return 1 +} + +function find_pkg_version +{ + case $OS in + rhel|centos|suse) + if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \ + subversion.$ARCH 2>/dev/null); then + return 1 + fi + ;; + debian|ubuntu) + PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null) + PKG_VERSION=${PKG_VERSION%%+*} + ;; + esac + + return 0 +} + +function check_install() +{ + if ! SVN=$(svn --version --quiet 2>/dev/null); then + echo "This script will install Subversion $SVN_VERSION." + echo + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + return 0 + fi + + find_pkg_version || + { + echo -n "You currently have Subversion $SVN installed, however it's not " + echo -n "been installed with your systems package manager. Please remove " + echo "this version of Subversion and re-run this script." + echo + exit 2 + } + + if test "$PKG_VERSION" = "$SVN_VERSION"; then + echo "You currently have the latest version of Subversion installed." + exit 0 + fi + + echo -n "You currently have Subversion $PKG_VERSION installed. If you " + echo "continue with the installation it will be upgraded to $SVN_VERSION." + echo + + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + + return 0 +} + +function configure_apt_repo() +{ + PKG_INSTALLER="apt-get -y install" + PKG_LIST="subversion libsvn-perl python-subversion subversion-tools" + + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + rm -f /etc/apt/sources.list.d/WANdisco.list + cat < /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list +# WANdisco Open Source Repo +deb http://$REPO_SERVER/$OS $OSNAME $SVN_RELEASE +EOF + wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \ + apt-key add - >/dev/null 2>&1 + apt-get update +} + + +function configure_yum_repo() +{ + PKG_INSTALLER="yum install -y" + PKG_LIST="subversion.$ARCH subversion-perl subversion-python subversion-tools" + SVN_RELEASE="${SVN_VERSION%.*}" + rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo + cat < /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo +[WANdisco-svn${SVN_RELEASE//\./}] +name=WANdisco SVN Repo $SVN_RELEASE +enabled=1 +baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/ +gpgcheck=1 +gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco +EOF + yum makecache +} + +function configure_zypp_repo() +{ + PKG_LIST="subversion subversion-perl subversion-python subversion-tools" + PKG_LIST="$PKG_LIST subversion-ruby" + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE" + + rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \ + /etc/zypp/repos.d/WANdisco-svn.repo + + zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1 + + rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \ + rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco + zypper addservice --type=YUM http://$REPO_SERVER/suse/$OSVER/$SVN_RELEASE/ \ + WANdisco-$SVN_RELEASE + zypper refresh +} + +function configure_repo() +{ + case $OS in + debian|ubuntu) configure_apt_repo ;; + rhel|centos) configure_yum_repo ;; + suse) configure_zypp_repo ;; + esac +} + +function check_mod_dav() +{ + HAS_MOD_DAV= + case $OS in + rhel|centos|suse) + rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + debian|ubuntu) + dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + esac +} + +function add_packages() +{ + case $OS in + rhel|centos|suse) return 0 ;; + esac + + PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \ + awk '$2 == "subversion" {print $1}') + + return 0 +} + +function install_svn() +{ + test -n "$SVN" && add_packages + + $PKG_INSTALLER $PKG_LIST +} + +function install_mod_dav() +{ + test -n "$NO_MOD_DAV" && return 0 + + case $OS in + rhel|centos|suse) PKG_LIST="mod_dav_svn" ;; + debian|ubuntu) PKG_LIST="libapache2-svn" ;; + esac + + $PKG_INSTALLER $PKG_LIST +} + +# Main Script + +trap handle_error ERR + +cat < /dev/null 2>&1; then + GET='curl -s -f' + elif which wget > /dev/null 2>&1; then + GET='wget -O - -q' + else + echo -n "You do not have curl or wget installed. At least one of these is " + echo "required to install WANdisco Subversion" + exit 1 + fi +} + +function check_root() +{ + test $EUID -eq 0 || + { + echo "You need to be root to install WANdisco subversion." + echo + echo "Please re-run this script as the root user." + exit 1 + } +} + +function unsupported() +{ + echo "Your operating system is not currently supported." + echo + echo -n "Please visit http://www.wandisco.com/subversion/download for a list" + echo " of supported systems." + exit 1 +} + +function confirm() +{ + local confirm= + local message=$1 + local default=${2:-y} + local prompt= + + test -n "$NON_INTERACTIVE" && return 0 + + prompt="$message (" + if test "$default" = "y"; then + prompt="${prompt}Y/n" + else + prompt="${prompt}y/N" + fi + prompt="$prompt) " + + while test "$confirm" != "$default"; do + read -n 1 -p "$prompt" confirm + echo + confirm=${confirm:-$default} + confirm=${confirm/Y/y} + confirm=${confirm/N/n} + + if test "$default" = "y"; then + test "$confirm" = "n" && return 1 + test "$confirm" = "y" && return 0 + else + test "$confirm" = "y" && return 1 + test "$confirm" = "n" && return 0 + fi + + echo "Invalid input, please enter 'y' or 'n'" + done + return 0 +} + +function remove_other() +{ + local other=$1 + + echo -n "You currently have subversion installed for another architecture " + echo -n "($other). This should be removed before installing " + echo "WANdisco Subversion." + echo + + if ! confirm "Remove Subversion $other?"; then + echo "Exiting at user request" + exit 1 + fi + + case $OS in + rhel|centos) yum erase -y subversion.$other ;; + debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;; + suse) zypper rm -y subversion.$other ;; + esac + + return 0 +} + +function check_alternative_arch() +{ + local other= + local confirm= + + case $OS in + centos|rhel|suse) + for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}') + do + test "$foreign" = "$ARCH" && continue + if other=$(rpm -q --queryformat='%{arch}' \ + subversion.$foreign 2>/dev/null); then + test -z "$other" && continue + remove_other $other + unset other + fi + done + ;; + debian|ubuntu) + dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0 + ARCH=$(dpkg --print-architecture) + for foreign in $(dpkg --print-foreign-architectures); do + if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \ + 2>/dev/null); then + remove_other $other + unset other + fi + done + ;; + esac + + test -z "$other" && return 0 + + + return 0 +} + +function is_lsb() +{ + which lsb_release >/dev/null 2>&1 || return 1 + + OS=$(lsb_release -si | tr A-Z a-z) + OS=${OS%% *} + OSVER=$(lsb_release -sr) + OSVER=${OSVER%%.*} + OSNAME=$(lsb_release -sc | tr A-Z a-z) + + case $OS in + redhat*) + OS=rhel + ;; + oracle*) + OS=rhel + ;; + esac + + return 0 +} + +function is_debian() +{ + test -r /etc/debian_version || return 1 + + OS="debian" + OSVER=$(cat /etc/debian_version) + OSVER=${OSVER%%.*} + case "$OSVER" in + 6) OSNAME="squeeze" ;; + 7) OSNAME="wheezy" ;; + 8) OSNAME="jessie" ;; + squeeze) OSNAME=$OSVER; OSVER=6 ;; + wheezy) OSNAME=$OSVER; OSVER=7 ;; + jessie) OSNAME=$OSVER; OSVER=8 ;; + *) return 1 ;; + esac + + return 0 +} + +function is_redhat() +{ + local release= + + test -r /etc/redhat-release || return 1 + + release=$(cat /etc/redhat-release | tr A-Z a-z) + OS=${release%% release *} + OSVER=${release##* release } + OSVER=${OSVER%%.*} + + case $OS in + red*) OS="rhel" ;; + centos*) OS="centos" ;; + *) return 1 ;; + esac + + return 0 +} + +function is_suse() +{ + test -r /etc/SuSE-release || return 1 + + OS="suse" + OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release) + OSVER=${OSVER%%.*} + + return 0 +} + +function is_oracle() +{ + test -r /etc/oracle-release || return 1 + + OS="rhel" + OSVER=$(sed -e 's/.*release \([0-9]+\).*/\1/' /etc/oracle-release) + + return 0 +} + +function find_os() +{ + is_lsb && return 0 + is_redhat && return 0 + is_debian && return 0 + is_suse && return 0 + is_oracle && return 0 + + + return 1 +} + +function check_os() +{ + case $OS in + rhel|centos) + case $OSVER in + 5|6|7) return 0 ;; + esac + ;; + suse) + case $OSVER in + 11|12) return 0 ;; + esac + ;; + debian) + case $OSVER in + 6|7|8) return 0 ;; + esac + ;; + ubuntu) + case $OSVER in + 10|12|14|16) return 0 ;; + esac + ;; + esac + + return 1 +} + +function find_pkg_version +{ + case $OS in + rhel|centos|suse) + if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \ + subversion.$ARCH 2>/dev/null); then + return 1 + fi + ;; + debian|ubuntu) + PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null) + PKG_VERSION=${PKG_VERSION%%+*} + ;; + esac + + return 0 +} + +function check_install() +{ + if ! SVN=$(svn --version --quiet 2>/dev/null); then + echo "This script will install Subversion $SVN_VERSION." + echo + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + return 0 + fi + + find_pkg_version || + { + echo -n "You currently have Subversion $SVN installed, however it's not " + echo -n "been installed with your systems package manager. Please remove " + echo "this version of Subversion and re-run this script." + echo + exit 2 + } + + if test "$PKG_VERSION" = "$SVN_VERSION"; then + echo "You currently have the latest version of Subversion installed." + exit 0 + fi + + echo -n "You currently have Subversion $PKG_VERSION installed. If you " + echo "continue with the installation it will be upgraded to $SVN_VERSION." + echo + + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + + return 0 +} + +function configure_apt_repo() +{ + PKG_INSTALLER="apt-get -y install" + PKG_LIST="subversion libsvn-perl python-subversion subversion-tools" + + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + rm -f /etc/apt/sources.list.d/WANdisco.list + cat < /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list +# WANdisco Open Source Repo +deb http://$REPO_SERVER/$OS $OSNAME $SVN_RELEASE +EOF + wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \ + apt-key add - >/dev/null 2>&1 + apt-get update +} + + +function configure_yum_repo() +{ + PKG_INSTALLER="yum install -y" + PKG_LIST="subversion.$ARCH subversion-perl subversion-python subversion-tools" + SVN_RELEASE="${SVN_VERSION%.*}" + rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo + cat < /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo +[WANdisco-svn${SVN_RELEASE//\./}] +name=WANdisco SVN Repo $SVN_RELEASE +enabled=1 +baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/ +gpgcheck=1 +gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco +EOF + yum makecache +} + +function configure_zypp_repo() +{ + PKG_LIST="subversion subversion-perl subversion-python subversion-tools" + PKG_LIST="$PKG_LIST subversion-ruby" + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE" + + rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \ + /etc/zypp/repos.d/WANdisco-svn.repo + + zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1 + + rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \ + rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco + zypper addservice --type=YUM http://$REPO_SERVER/suse/$OSVER/$SVN_RELEASE/ \ + WANdisco-$SVN_RELEASE + zypper refresh +} + +function configure_repo() +{ + case $OS in + debian|ubuntu) configure_apt_repo ;; + rhel|centos) configure_yum_repo ;; + suse) configure_zypp_repo ;; + esac +} + +function check_mod_dav() +{ + HAS_MOD_DAV= + case $OS in + rhel|centos|suse) + rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + debian|ubuntu) + dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + esac +} + +function add_packages() +{ + case $OS in + rhel|centos|suse) return 0 ;; + esac + + PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \ + awk '$2 == "subversion" {print $1}') + + return 0 +} + +function install_svn() +{ + test -n "$SVN" && add_packages + + $PKG_INSTALLER $PKG_LIST +} + +function install_mod_dav() +{ + test -n "$NO_MOD_DAV" && return 0 + + case $OS in + rhel|centos|suse) PKG_LIST="mod_dav_svn" ;; + debian|ubuntu) PKG_LIST="libapache2-svn" ;; + esac + + $PKG_INSTALLER $PKG_LIST +} + +# Main Script + +trap handle_error ERR + +cat < /dev/null 2>&1; then + GET='curl -s -f' + elif which wget > /dev/null 2>&1; then + GET='wget -O - -q' + else + echo -n "You do not have curl or wget installed. At least one of these is " + echo "required to install WANdisco Subversion" + exit 1 + fi +} + +function check_root() +{ + test $EUID -eq 0 || + { + echo "You need to be root to install WANdisco subversion." + echo + echo "Please re-run this script as the root user." + exit 1 + } +} + +function unsupported() +{ + echo "Your operating system is not currently supported." + echo + echo -n "Please visit http://www.wandisco.com/subversion/download for a list" + echo " of supported systems." + exit 1 +} + +function confirm() +{ + local confirm= + local message=$1 + local default=${2:-y} + local prompt= + + test -n "$NON_INTERACTIVE" && return 0 + + prompt="$message (" + if test "$default" = "y"; then + prompt="${prompt}Y/n" + else + prompt="${prompt}y/N" + fi + prompt="$prompt) " + + while test "$confirm" != "$default"; do + read -n 1 -p "$prompt" confirm + echo + confirm=${confirm:-$default} + confirm=${confirm/Y/y} + confirm=${confirm/N/n} + + if test "$default" = "y"; then + test "$confirm" = "n" && return 1 + test "$confirm" = "y" && return 0 + else + test "$confirm" = "y" && return 1 + test "$confirm" = "n" && return 0 + fi + + echo "Invalid input, please enter 'y' or 'n'" + done + return 0 +} + +function remove_other() +{ + local other=$1 + + echo -n "You currently have subversion installed for another architecture " + echo -n "($other). This should be removed before installing " + echo "WANdisco Subversion." + echo + + if ! confirm "Remove Subversion $other?"; then + echo "Exiting at user request" + exit 1 + fi + + case $OS in + rhel|centos) yum erase -y subversion.$other ;; + debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;; + suse) zypper rm -y subversion.$other ;; + esac + + return 0 +} + +function check_alternative_arch() +{ + local other= + local confirm= + + case $OS in + centos|rhel|suse) + for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}') + do + test "$foreign" = "$ARCH" && continue + if other=$(rpm -q --queryformat='%{arch}' \ + subversion.$foreign 2>/dev/null); then + test -z "$other" && continue + remove_other $other + unset other + fi + done + ;; + debian|ubuntu) + dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0 + ARCH=$(dpkg --print-architecture) + for foreign in $(dpkg --print-foreign-architectures); do + if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \ + 2>/dev/null); then + remove_other $other + unset other + fi + done + ;; + esac + + test -z "$other" && return 0 + + + return 0 +} + +function is_lsb() +{ + which lsb_release >/dev/null 2>&1 || return 1 + + OS=$(lsb_release -si | tr A-Z a-z) + OS=${OS%% *} + OSVER=$(lsb_release -sr) + OSVER=${OSVER%%.*} + OSNAME=$(lsb_release -sc | tr A-Z a-z) + + case $OS in + redhat*) + OS=rhel + ;; + oracle*) + OS=rhel + ;; + esac + + return 0 +} + +function is_debian() +{ + test -r /etc/debian_version || return 1 + + OS="debian" + OSVER=$(cat /etc/debian_version) + OSVER=${OSVER%%.*} + case "$OSVER" in + 6) OSNAME="squeeze" ;; + 7) OSNAME="wheezy" ;; + 8) OSNAME="jessie" ;; + 9) OSNAME="stretch" ;; + squeeze) OSNAME=$OSVER; OSVER=6 ;; + wheezy) OSNAME=$OSVER; OSVER=7 ;; + jessie) OSNAME=$OSVER; OSVER=8 ;; + stretch) OSNAME=$OSVER; OSVER=9 ;; + *) return 1 ;; + esac + + return 0 +} + +function is_redhat() +{ + local release= + + test -r /etc/redhat-release || return 1 + + release=$(cat /etc/redhat-release | tr A-Z a-z) + OS=${release%% release *} + OSVER=${release##* release } + OSVER=${OSVER%%.*} + + case $OS in + red*) OS="rhel" ;; + centos*) OS="centos" ;; + *) return 1 ;; + esac + + return 0 +} + +function is_suse() +{ + test -r /etc/SuSE-release || return 1 + + OS="suse" + OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release) + OSVER=${OSVER%%.*} + + return 0 +} + +function is_oracle() +{ + test -r /etc/oracle-release || return 1 + + OS="rhel" + OSVER=$(sed -e 's/.*release \([0-9]+\).*/\1/' /etc/oracle-release) + + return 0 +} + +function find_os() +{ + is_lsb && return 0 + is_redhat && return 0 + is_debian && return 0 + is_suse && return 0 + is_oracle && return 0 + + + return 1 +} + +function check_os() +{ + case $OS in + rhel|centos) + case $OSVER in + 5|6|7|8) return 0 ;; + esac + ;; + suse) + case $OSVER in + 11|12) return 0 ;; + esac + ;; + debian) + case $OSVER in + 6|7|8|9) return 0 ;; + esac + ;; + ubuntu) + case $OSVER in + 10|12|14|16|18) return 0 ;; + esac + ;; + esac + + return 1 +} + +function find_pkg_version +{ + case $OS in + rhel|centos|suse) + if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \ + subversion.$ARCH 2>/dev/null); then + return 1 + fi + ;; + debian|ubuntu) + PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null) + PKG_VERSION=${PKG_VERSION%%+*} + ;; + esac + + return 0 +} + +function check_install() +{ + if ! SVN=$(svn --version --quiet 2>/dev/null); then + echo "This script will install Subversion $SVN_VERSION." + echo + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + return 0 + fi + + find_pkg_version || + { + echo -n "You currently have Subversion $SVN installed, however it's not " + echo -n "been installed with your systems package manager. Please remove " + echo "this version of Subversion and re-run this script." + echo + exit 2 + } + + if test "$PKG_VERSION" = "$SVN_VERSION"; then + echo "You currently have the latest version of Subversion installed." + exit 0 + fi + + echo -n "You currently have Subversion $PKG_VERSION installed. If you " + echo "continue with the installation it will be upgraded to $SVN_VERSION." + echo + + if ! confirm "Do you want to continue?"; then + echo + echo "Exiting at user request" + exit 1 + fi + + return 0 +} + +function configure_apt_repo() +{ + PKG_INSTALLER="apt-get -y install" + PKG_LIST="subversion libsvn-perl python-subversion subversion-tools" + + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + rm -f /etc/apt/sources.list.d/WANdisco.list + cat < /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list +# WANdisco Open Source Repo +deb http://$REPO_SERVER/$OS $OSNAME $SVN_RELEASE +EOF + wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \ + apt-key add - >/dev/null 2>&1 + apt-get update +} + + +function configure_yum_repo() +{ + PKG_INSTALLER="yum install -y" + PKG_LIST="subversion.$ARCH subversion-perl subversion-python subversion-tools" + SVN_RELEASE="${SVN_VERSION%.*}" + rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo + cat < /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo +[WANdisco-svn${SVN_RELEASE//\./}] +name=WANdisco SVN Repo $SVN_RELEASE +enabled=1 +baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/ +gpgcheck=1 +gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco +EOF + if [ $OSVER = "8" ] + then yum module disable subversion -y + fi + yum makecache +} + +function configure_zypp_repo() +{ + PKG_LIST="subversion subversion-perl subversion-python subversion-tools" + PKG_LIST="$PKG_LIST subversion-ruby" + SVN_RELEASE=${SVN_VERSION%.*} + SVN_RELEASE="svn${SVN_RELEASE//\./}" + PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE" + + rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \ + /etc/zypp/repos.d/WANdisco-svn.repo + + zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1 + + rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \ + rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco + zypper addservice --type=YUM http://$REPO_SERVER/suse/$OSVER/$SVN_RELEASE/ \ + WANdisco-$SVN_RELEASE + zypper refresh +} + +function configure_repo() +{ + case $OS in + debian|ubuntu) configure_apt_repo ;; + rhel|centos) configure_yum_repo ;; + suse) configure_zypp_repo ;; + esac +} + +function check_mod_dav() +{ + HAS_MOD_DAV= + case $OS in + rhel|centos|suse) + rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + debian|ubuntu) + dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1 + return 0 + ;; + esac +} + +function add_packages() +{ + case $OS in + rhel|centos|suse) return 0 ;; + esac + + PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \ + awk '$2 == "subversion" {print $1}') + + return 0 +} + +function install_svn() +{ + test -n "$SVN" && add_packages + + $PKG_INSTALLER $PKG_LIST +} + +function install_mod_dav() +{ + test -n "$NO_MOD_DAV" && return 0 + + case $OS in + rhel|centos|suse) PKG_LIST="mod_dav_svn" ;; + debian|ubuntu) PKG_LIST="libapache2-svn" ;; + esac + + $PKG_INSTALLER $PKG_LIST +} + +# Main Script + +trap handle_error ERR + +cat <