Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建

2023-11-17

经过核验,按下面这样的方式去升级,从3.0.0升级到3.9.7,同时支持用户通过web界面修改密码,每个用户忘记密码要管理员来修改,工作量不大,但真的是耗时费力,还不讨好!
1、安装软件准备
1.1. 软件准备
1). Windows Server 2008 R2 操作系统
2). VisualSVN-Server-3.9.7-x64.msi
https://www.visualsvn.com/server/changes/ SVN服务端(服务器端安装包)
3). TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi
https://tortoisesvn.net/downloads.html svn客户端(个人电脑安装包)
4). LanguagePack_1.13.1.28686-x64-zh_CN.msi
https://tortoisesvn.net/downloads.html TortoiseSVN 的汉化包(个人电脑安装)
5). httpd-2.4.43-o111g-x64-vc15.zip
https://www.apachehaus.com/cgi-bin/download.plx
Apache服务端安装包
6). php-7.3.18-Win32-VC15-x64.zip
https://windows.php.net/download/ 服务端安装包
1.2. 注意事项
安装过程路径、密码尽量不要出现中文、特殊字符、少于8位密码;
安装路径所在磁盘空间满足软件业务需求。
1.3. 安装描述
 1> VisualSVN-Server-3.9.7-x64.msi(svn服务端)
 2> TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi(svn客户端)
 3> LanguagePack_1.13.1.28686-x64-zh_CN.msi(TortoiseSVN 的汉化包)
 4> httpd-2.4.43-o111g-x64-vc15.zip(提取htpasswd.exe文件)
 5> php-7.3.18-Win32-VC15-x64.zip(SVN与php整合)
2、VisualSVN版本升级(旧3.0.0–新3.9.7)
 步骤1:停止VisualSVN Server服务
 步骤2:备份旧版本的Repositories文件夹、VisualSVN Server文件夹备份到路径C:\bak\下
路径:C:\Repositories
路径:C:\Program Files\VisualSVN Server
 步骤3:下载并安装新版VisualSVN-Server-3.9.7-x64.msi
安装过程描述如下:
 双击VisualSVN-Server-3.9.7-x64.msi安装包,点击“Next”;
 勾选授权许可,点击“Next”;
 软件会自动识别当前系统已经安装了3.0.0版本,提示点击upgrade操作将软件升级到VisualSVN-Server 3.9.7,点击“Upgrade”;
Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建
Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建
Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建

 步骤4:按第三章节内容操作配置在线自助密码修改搭建
 步骤5:启动VisualSVN Background Job Service与VisualSVN Server服务
 步骤6:登录测试用户密码是否正确、用户权限是否正常、用户修改密码是否正常
3、Apache与PHP配置
3.1. 提取Apache密码管理工具
1)解压压缩包httpd-2.4.43-o111g-x64-vc15.zip
2)提取htpasswd.exe文件置于VisualSVN Server\bin路径下(路径根据实际部署来操作),本文按如下说明操作
将C: \software\httpd-2.4.43-o111g-x64-vc15\Apache24\bin\htpasswd.exe
拷贝到C:\Program Files\VisualSVN Server\bin
3.2. 配置PHP
1)下载php7.3(注意:下载Thread Safe版本)
2) 将php-7.3.18-Win32-VC15-x64.zip解压到VisualSVN Server安装路径下(路径根据实际部署来操作),本文按如下说明操作
解压并重命名为php,最终php路径为C:\Program Files\VisualSVN Server\php
3.3. 配置httpd-custom.conf文件
 修改httpd-custom.conf配置文件(路径根据实际部署来操作),本文按如下说明操作
修改空文件 C:\Program Files\VisualSVN Server\conf\httpd-custom.conf
配置如下内容

#php7 support
PHPIniDir "C:/Program Files/VisualSVN Server/php"
LoadModule php7_module "C:/Program Files/VisualSVN Server/php/php7apache2_4.dll"
AddType application/x-httpd-php .php .html .htm
#configure the path to php.ini

3.4. 新建index.php
 在\VisualSVN Server\htdocs路径下新建pw文件夹,并在pw文件夹中新建 index.php 文件(路径根据实际部署来操作),本文按如下路径操作
新建C:\Program Files\VisualSVN Server\htdocs\pw\index.php文件

配置如下内容

<?php
$username = $_SERVER["PHP_AUTH_USER"]; //经过 AuthType Basic 认证的用户名
$authed_pass = $_SERVER["PHP_AUTH_PW"]; //经过 AuthType Basic 认证的密码
$input_oldpass = (isset($_REQUEST["oldpass"]) ? $_REQUEST["oldpass"] : ""); //从界面上输入的原密码
$newpass = (isset($_REQUEST["newpass"]) ? $_REQUEST["newpass"] : ""); //界面上输入的新密码
$repeatpass = (isset($_REQUEST["repeatpass"]) ? $_REQUEST["repeatpass"] : ""); //界面上输入的重复密码
$action = (isset($_REQUEST["action"]) ? $_REQUEST["action"] : ""); //以hide方式提交到服务器的action

if ($action!="modify") {
    $action = "view";
} else if ($authed_pass!=$input_oldpass) {
    $action = "oldpasswrong";
} else if (empty($newpass)) {
    $action = "passempty";
} else if ($newpass!=$repeatpass) {
    $action = "passnotsame";
} else{
    $action = "modify";
}
?>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <title>Subversion 在线自助密码修改</title>
</head>
<body>

<?php
//action=view 显示普通的输入信息
if ($action == "view") {
?>
<script language = "javaScript">
<!--
function loginIn(myform) {
    var newpass=myform.newpass.value;
    var repeatpass=myform.repeatpass.value;

    if (newpass=="") {
        alert("请输入密码!");
        return false;
    }

    if (repeatpass=="") {
        alert("请重复输入密码!");
        return false;
    }

    if (newpass!=repeatpass) {
        alert("两次输入密码不一致,请重新输入!");
        return false;
    }
return true;
}
//-->
</script>

<style type="text/css">
<!--
    table {
        border: 1px solid #CCCCCC;
        background-color: #f9f9f9;
        text-align: center;
        vertical-align: middle;
        font-size: 9pt;
        line-height: 15px;
    }
    th {
        font-weight: bold;
        line-height: 20px;
        border-top-width: 1px;
        border-right-width: 1px;
        border-bottom-width: 1px;
        border-left-width: 1px;
        border-bottom-style: solid;
        color: #333333;
        background-color: f6f6f6;
    }
    input{
        height: 18px;
    }
    .button {
        height: 20px;
    }
-->
</style>

<br><br><br>
<form method="post">
<input type="hidden" name="action" value="modify"/>
<table width="220" cellpadding="3" cellspacing="8" align="center">
<tr>
<th colspan=2>Subversion 密码修改</th>
</tr>
<tr>
<td>用 户 名:</td>
<td align="left"> <?php echo $username?></td>
</tr>
<tr>
<td>原 密 码:</td>
<td><input type=password size=12 name=oldpass></td>
</tr>
<tr>
<td>用户密码:</td>
<td><input type=password size=12 name=newpass></td>
</tr>
<tr>
<td>确认密码:</td>
<td><input type=password size=12 name=repeatpass></td>
</tr>
<tr>
<td colspan=2>
<input onclick="return loginIn(this.form)" class="button" type=submit value="修 改">
<input name="reset" type=reset class="button" value="取 消">
<input onclick="window.location.href='/'" class="button" type="button" value="返 回">
</td>
</tr>
</table>
</form>
<?php
} else if ($action == "oldpasswrong") {
    $msg="原密码错误";
} else if ($action == "passempty") {
    $msg="请输入新密码";
} else if ($action == "passnotsame") {
    $msg="两次输入密码不一致,请重新输入";
} else {
    $passwdfile="C:\Repositories\htpasswd";
    $command='"C:\Program Files\VisualSVN Server\bin\htpasswd.exe" -b '.$passwdfile." ".$username.' "'.$newpass.'"';
    system($command, $result);
    if ($result==0) {
        $msg_succ="用户[".$username."]密码修改成功,请用新密码登陆";
    } else {
        $msg="用户[".$username."]密码修改失败,返回值为".$result.",请和管理员联系";
    }
}

if (isset($msg_succ)) {
?>
<script language="javaScript">
<!--
alert("<?php echo $msg_succ?>");
window.location.href="/"
//-->
</script>
<?php
} else if (isset($msg)) {
?>
<script language="javaScript">
<!--
alert("<?php echo $msg?>");
window.location.href="<?php echo $_SERVER["PHP_SELF"]?>"
//-->
</script>
<?php
}
?>
</body>
</html>
index.php

3.5. 增加修改密码的链接
 修改文件 C:\Program Files\VisualSVN Server\WebUI\index.html

#原配置如下
    <footer>
  Powered by <a href="https://www.visualsvn.com/server/">VisualSVN Server</a>. © 2019 VisualSVN Software Ltd.
  </footer>
#修改为新配置如下
  <footer id="footer">Powered by <a href='https://www.visualsvn.com/server/'>VisualSVN Server</a> | <a href='https://www.visualsvn.com/go/2197/'>Report a problem
    <br /><br /><a href="/pw/index.php">在线自助修改密码</a>
  </footer>

 重启VisualSVN Background Job Service和VisualSVN Server服务
Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建

3.6. 修改密码
 访问svn的web网页http://IP:2443/svn,根据分配的账号登录svn服务器
 点击web网页最下方的“在线自助修改密码”跳转到密码修改界面
Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建
 用户名自动填充,请填写该用户名对应的旧密码,填写新密码,点修改完成密码的修改操作
Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建
 完成密码修改,点确定返回登录界面
Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建
4、安装过程报错处理
 启动VisualSVN HTTP Service服务时报如下错误
Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建
解决方案如下:
需要按照第5章节核对httpd-custom.conf文件与index.php文件中的配置的路径
 安装VC++的时候,提示安装失败:
Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建
解决方案如下:
注意:windows server 2008 R2系统要求是把系统更新到SP1(如果不是SP1安装下面KB2999226补丁程序会出错)
方法1:把系统更新程序打开,更新到最新版本即可;
方法2:通过下载安装补丁把系统版本更新到windows server 2008 R2 SP1
这里介绍方法2,将系统更新到SP1:
(1)下载Windows server 2008 R2 SP1 的补丁码是 KB976932
链接:https://www.microsoft.com/zh-cn/download/details.aspx?id=5842
(2)安装KB976932补丁程序,如果提示需要重启操作系统时,请操作重启
(3)尝试安装vc_redist.x64.exe与vc_redist.x86.exe
链接:https://www.microsoft.com/zh-cn/download/details.aspx?id=48145
(4)如果无法正常安装,继续下载补丁码:KB2999226
链接:https://www.microsoft.com/zh-CN/download/details.aspx?id=49062
补丁安装成功,重复步骤3即可。
(5)补充:如果需要安装.net framework环境,可按如下操作完成
在服务器管理器中选择“添加功能角色”,然后勾选“应用服务器”,勾选.net framework,一直按下一步,完成.net环境的安装。
5、附件及备注
 附件及附件对应存放路径:
\VisualSVN Server\conf

\VisualSVN Server\htdocs\pw

\VisualSVN Server\WebUI
 备注说明
新部署的环境路径与本文的路径有差异时,httpd-custom.conf与index.php附件,请核对并修改与实际环境一致的路径,避免环境无法使用。
 httpd-custom.conf文件需核对php调用apache库文件存放路径
C:/Program Files/VisualSVN Server/php/php7apache2_4.dll
 index.php文件请核对仓库密码认证路径与调用apache的修改密码文件路径
C:\Repositories\htpasswd
C:\Program Files\VisualSVN Server\bin\htpasswd.exe

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建 的相关文章

  • 将 git dcommits 切换到 svn 分支

    I had master dcommit到 和rebase来自 颠覆trunk 我创建了一个中间 Subversion 分支tc 合并来自 2 个不同分支的更改 使用 git branch master git svn branch tc
  • ASP.NET 显示 SVN 修订号

    我在 Stack Overflow 页脚中看到显示了 SVN 修订号 这是自动化的吗 如果是的话 如何在 ASP NET 中实现它 其他语言的解决方案也是可以接受的 确保该文件有 svn keywords Rev Id 然后把 Rev 在那
  • 无法连接到 Wordpress SVN 服务器来更新存储库

    好的 今天早上由于某种原因 我无法连接到 Wordpress SVN 存储库并执行基本的 svn 命令 例如checkout update 以下是正在发生的情况的示例 svn co http svn automattic com wordp
  • SVN:您可以仅从本地签出(而不是从存储库)中删除目录吗?

    假设您有一个受 subversion 控制的目录 其中包含一些文件和大量子目录 如下所示 file1 txt file2 txt file3 txt dir1 dir2 dir3 dir4 dirXX 现在您需要文件和一些目录 但不是全部
  • SVN 存储库的总大小?

    当我测量服务器上的文件夹大小时 我有一个 8 GB 的 SVN 存储库 但是当我在本地检查它时 只需从根目录检查完整存储库 所有分支 标签 其大小为 50 GB 仍在计算中 看来 SVN 在压缩内容方面做得很好 怎么尺寸相差这么大 有没有什
  • OSX 通过 macports 安装 subversion 时出错

    我正在尝试安装 subversion 1 7 2 从默认的 Lion 版本 1 6 升级 跑步sudo port install subversion安装成功完成 但是在运行 svn version 时收到此错误 svn version d
  • SVN 不断提示我输入密码并拒绝缓存我的凭据

    环境 Eclipse Indigo Ubuntu 11 04 Subclipse 1 6 SVN 客户端 Subclipse RabbitVCS 我通过 svn ssh 连接 我的网址如下所示 svn ssh 我的名字 我的域名 路径 我可
  • svn delete --keep-local 还会阻止文件在更新时被删除吗?

    我在 SO 上看到了很多关于使用 svn delete 和 keep local 标志来将文件保留在本地 同时在存储库中删除它的很好的答案 不幸的是 我无法找到任何有关该文件在更新时是否会从同事计算机上删除的信息 因为该文件已从 svn 中
  • 设置了 @version $Id$ 的 SVN Checkout

    我在 Subversion 中进行开发 在每个 PHP 文件的顶部都有以下注释块
  • 如何使用 git-svn 切换 svn 存储库?

    我有许多使用 git svn 创建为 SVN 存储库克隆的 git 项目 我们已将 SVN 存储库迁移到新的提供商 因此 URL 现在已更改 如何更新 git 克隆的远程 SVN URL 一种可能性是我从新的 SVN 存储库重新克隆 但我不
  • GitHub 的 Subversion 版本? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 移动具有历史记录的目录

    我有一个这样的 SVN 结构 Projects Project1 Project2 someFolder Project3 Project4 我想将所有项目移动到 Projects 文件夹中 这意味着我想将项目 3 和 4 从 someFo
  • 将Redmine问题与SVN修订版联系起来的最佳方法

    我们使用 Redmine 进行问题和错误跟踪 我们添加了 SVN 集成 但通过这样做 它仅显示活动中的 SVN 修订 如果能看到由错误或问题引起的所有 SVN 更改 那就太好了 但这似乎不可能 有没有办法做到这一点 如果不是Redmine
  • 为什么 show log 和 svn update 的版本号不同?

    当我对一个 svn 文件夹进行更新时 它会显示最新版本 更新被视为Completed At revision 116 但是当我确实显示该文件夹的日志时 它显示最新的修订号为100在历史上 我的问题是为什么两个版本号不同步 有关信息 当我执行
  • Git Svn 的问题,为什么为什么我永远不能 dcommit?

    我有一个 git svn 存储库 git svn clone http myrepo myrepo 我不想在master工作 git checkout b development 黑客了一段时间 git checkout master gi
  • Xuggler 存储库链接已损坏

    在我的 JAVA 应用程序中 我使用 Xuggler 来实现 ScreenCapture 和其他功能 现在它是一个 Maven 项目 所以我将 Xuggler 作为 Pom xml 中的依赖项 如此处所示Link http www xugg
  • 在 Ubuntu 12.04 上的 Apache 上配置 SVN 服务器

    我正在尝试通过 HTTP 访问现有的 Subversion 服务器 我的dav svn conf文件看起来像
  • tmatesoft.svn.core.SVNAuthenticationException:svn:E170001

    我们正在一个遗留项目 maven 中工作来设置devop 詹金斯首发 Jenkins 构建现在没有问题 但是 在将 sonarqube 与 jenkins 集成时 我们收到以下错误 ERROR Error during SonarQube
  • 制作 svn 存储库的独立副本

    我正在尝试克隆存储库 但它应该是彼此独立的副本 这背后有什么魔力吗 或者只是使用 svn 客户端并克隆它 Thanks Try svnadmin hotcopy http svnbook red bean com en 1 8 svn re
  • SVN 提交前撤消删除

    如果您从 SVN 工作副本中删除了一个目录 但尚未提交 则如何将其恢复并不明显 当您输入 svn undo d 时 Google 甚至建议将 svn undo delete before commit 作为常见查询 但搜索结果没有任何帮助

随机推荐

  • 用Jupyter完成numpy、pandas、matplotlib三个库的例题

    文章目录 实验环境 一 numpy例题 二 pandas例题 三 matplotlib例题 四 总结 实验环境 jupyter notebook 一 numpy例题 生成一个一维数组 起始值为5 终点值为15 样本数为10个 import
  • 【转载】使用jsoup替换HTML标记

    原始代码 String html font fsdfs font dfsdf font dasdasd font Document doc Jsoup parse html Elements elements doc select font
  • 【frida逆向开发】frida-rpc远程调用某安app方法获取token

    目录 一 使用fiddler对app进行抓包 二 反编译app定位关键代码 三 frida rpc调用相关方法 一 使用fiddler对app进行抓包 通过抓包可以看到请求参数中X App Token e8f1c71569a7166b6aa
  • AD隐藏元件标号

    1 右键点击元件 不是标号 2 查找相似对象 3 点击应用 4 再点确定 5 把Show Name右边的勾取消
  • Go 语言进阶(一) -- Go hertz http框架、kitex RPC微服务框架、gorm 数据库框架三件套用法详解

    Go 框架三件套 1 概论 Gorm Gorm 是一个已经迭代了10年 的功能强大的 ORM框架 在字节内部被广泛使用并且拥有非常丰富的开源扩展 Kitex Kitex 是字节内部 Golang 微服务 RPC 框架 具有高性能 强可扩展的
  • 必看的知识

    学习路线 必看的知识 Spring实战 Spring 4 x企业应用开发实战 深入分析Java Web技术内幕 修订版 Effective Java Thinking in Java Java核心技术 Core Java Thinking
  • 赫拉(hera)分布式任务调度系统

    相关介绍 赫拉 hera 分布式任务调度系统之架构 基本功能 一 赫拉 hera 分布式任务调度系统之项目启动 二 赫拉 hera 分布式任务调度系统之开发中心 三 赫拉 hera 分布式任务调度系统之版本 四 赫拉 hera 分布式任务调
  • 修正了一个通信bug

    该BUG导致用户在打开webchat使用界面时不会读取联系人UPT 有时候刷新界面后会解决这个问题 经过发现是判断webchat是否存在在线用户以便于打印在线和离线联系人的分支结构出错 现在bug已经解除 同时解决了一个UPT串截断出错的b
  • java实现文件的断点续传的下载

    java的断点续传是基于之前java文件下载基础上的功能拓展 首先设置一个以线程ID为名的下载进度文件 每一次下载的进度会保存在这个文件中 下一次下载的时候 会根据进度文件里面的内容来判断下载的进度 package com ldw mult
  • Win10/Win11子系统(一)——wsl2+Ubuntu20.04安装记录

    windows子系统Ubuntu20 04安装过程记录 前言 一 安装前准备 二 开始安装 三 更换镜像源 四 安装图形化界面 五 警告处理 六 迁移子系统 前言 我和我最后的倔强 坚持不换windows的口号被现实打败了 装双系统会影响到
  • Hive SQL使用中遇到的问题与解决方案(持续更新

    近期 因统计分析 数据处理的工作需求 经常使用Hive SQL 因此记录遇到的一些问题 1 desc formatted 表名 确定表的信息 行 列 存储路径 在确定Hive 数据仓库中表的存储路径时 很有帮助 2 SQL GROUP BY
  • 【MedusaSTears】IntelliJ IDEA 自动生成方法注释模板设置(入参每行1个如图)

    快捷键 按键 按键 按键tab 效果图 设置方式 参考资料 https blog csdn net yuruixin china article details 80933835 我也是参考这个文章设置的 只不过我改了一些其它的内容 修改如
  • “疫情”防控时期大势所趋,智慧社区尽显“智慧”迎来新的发展热潮

    近期 国内新冠肺炎疫情在各地再次反扑 各种变异毒株 境外输入压力让疫情防控变的更加严峻 社区防控是第一道防线 进出小区人员登记 出示健康码 测量体温 居家隔离等是每个社区都要面临的防控压力 但是如果对社区内的居民不能精确管理 就会导致很多的
  • 1234. 替换子串得到平衡字符串

    有一个只含有 Q W E R 四种字符 且长度为 n 的字符串 假如在该字符串中 这四个字符都恰好出现 n 4 次 那么它就是一个 平衡字符串 给你一个这样的字符串 s 请通过 替换一个子串 的方式 使原字符串 s 变成一个 平衡字符串 你
  • Markdown预览 代码块自动化加代码行数-VSCode

    Markdown预览 代码块自动化加代码行数 VSCode 官方地址 https shd101wyy github io markdown preview enhanced zh cn markdown basics id 代码行数 第一步
  • JToolBarTest JToolBar 的一个测试类

    package com test JToolBarTest import javax swing JButton import javax swing JFrame import javax swing JToolBar public cl
  • python笔记:变量赋值与注意事项

    1 单个变量赋值 a 变量未赋值会报错 a 1 正确写法 2 多个变量赋值 方法1 a b c 1 方法2 a b c 1 1 1 print a b c 1 1 1 3 基本变量类型 五大类 字符串 string 数字 Numeric 列
  • 第1章 NumPy基础

    为何第1章介绍NumPy基础 在机器学习和深度学习中 图像 声音 文本等首先要数字化 如何实现数字化 数字化后如何处理 这些都涉及NumPy NumPy是数据科学的通用语言 它是科学计算 矩阵运算 深度学习的基石 PyTorch中的重要概念
  • 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践

    分布式消息队列RocketMQ 事务消息 解决分布式事务的最佳实践 标签 事务消息exactlyRocketMQKafka分布式消息队列 2016 12 23 22 08 7789人阅读 评论 8 收藏 举报 分类 分布式消息队列Rocke
  • Windows Server2012R2 VisualSVN3.9.7-Server在线修改密码搭建

    经过核验 按下面这样的方式去升级 从3 0 0升级到3 9 7 同时支持用户通过web界面修改密码 每个用户忘记密码要管理员来修改 工作量不大 但真的是耗时费力 还不讨好 1 安装软件准备 1 1 软件准备 1 Windows Server