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 @@
+
+
+
@@ -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 <