惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
月光博客
月光博客
雷峰网
雷峰网
WordPress大学
WordPress大学
博客园 - 司徒正美
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Visual Studio Blog
H
Help Net Security
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security @ Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
爱范儿
爱范儿
W
WeLiveSecurity
J
Java Code Geeks
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
T
Threatpost
The Cloudflare Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
N
Netflix TechBlog - Medium
Latest news
Latest news
V2EX - 技术
V2EX - 技术
小众软件
小众软件
T
The Blog of Author Tim Ferriss
A
Arctic Wolf
B
Blog RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
C
Check Point Blog
N
News | PayPal Newsroom
Cyberwarzone
Cyberwarzone
V
V2EX
TaoSecurity Blog
TaoSecurity Blog
P
Privacy & Cybersecurity Law Blog
Microsoft Security Blog
Microsoft Security Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
D
DataBreaches.Net
F
Fortinet All Blogs
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
K
Kaspersky official blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google DeepMind News
Google DeepMind News
C
CXSECURITY Database RSS Feed - CXSecurity.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com

方永、南天紫雲

linux透明代理 技术的边界 停机问题通俗说明 Rust与oracle、redis集群的纠结 学习能力的增长 微信调试的原语 mac外接移动硬盘安装ArchLinux linux的死机问题 linux下全键盘操作 漂亮又好用的bspwm linux本机透明代理 ssh、mosh、autossh linux不能待机又一例 从WordPress切换到Hugo 折腾电脑开机 linux系统QQ新思路 Arch Linux的字体渲染 OpenWrt自动fucking墙記錄 二维码(qrcode)名片的一些事儿 用lua nginx module搭建一个二维码(qr code)生成器 CentOS 7 安裝註記 php程序連接MySQL时只能127.0.0.1而localhost無法連接的問題 ThinkPad之FAN_ERROR、hi fi聲卡 jetty多端口部署 OpenWrt簡單暴力限網 linux中cron之PATH变量 OpenWrt的WDS無線橋接模式 再敘OpenWrt下的rtl8187無線中繼 sed之模擬tail 終端進化之二零一三 linux下的郵件服務器:postfix_dovecot_roundcube 一次性密碼/動態口令卡原理 xl2tp之VPN靜態地址分配 rtl2838U2832试用记 linux中pptp协议VPN搭建 glances监控工具安装 CentOS6.4硬盘安装 Debian Wheezy硬盤/U盤安裝小記 Kirby小試 zsh shell怎么打开常用的目录? OpenWrt SSH免密码使用密钥登录 linux中的vsftpd的匿名(anonymous)用户配置 無光驅無USB無軟驅,怎麼修復硬盤MBR? 那些個人網站 linuxFreeBSD下的dnspod动态域名客户端 Windows系统盘的32K之殇 一枚Chrome插件引起的大量磁盤IO問題 用批處理切換網卡的IP(適用Win7、Win8) Windows中的DHCP服务器 Win8啓動時出現“您的電腦需要修復”問題的解決辦法 Windows8睡眠(待机)模式异常处理 最强大好用而又小巧的计算器 Windows8運行不能保存歷史命令 Win8下的红警2尤里复仇 为cmd添加readline,如Bash Shell般使用cmd 手动添加修改win8 win+x菜单 Win8運行卸載程序時提示2503之解決一法 烽火HG110提权一法 缓解眼疲劳有效的办法 mintty乱码解决办法 糟糠美妾 免费易用的Win8 ArchLinux的類box環境音量調節二三事 使用OpenWrt与curl挂QQ OpenWrt的安全 OpenWrt BCM63xx rtl8187使用注意事项 Arch Linux之systmed使用简介 Archlinux 2012.07.15之后发布的镜像新手安装完全向导 FreeBSD 9.0 安装简记 记一由FreeBSD引发的午夜惊魂 Jekyll or handmade wi-fi无线破解过程与原理简要介绍 修复QQ影音异常卸载后的文件关联 吐槽一下000webhost 为OpenWrt的luci Web界面加速 最小的sed for Windows linux的磁盘自动挂载 OpenWrt中crontab -e的使用 sddns(dnspod client for OpenWrt)使用说明 OpenWrt中vsftp添加新用户 php+markdown写博客 linux arp防火墙之p2p终结者 墙外的世界很精彩 OpenWrt使用dnspod的动态域名解析(ddns)功能 OpenWrt架设nginx php网站 openwrt架设uhttpd+php+sqlite网站 vim自动跳到上次离开的光标位置 OpenWrt无线中继配置文件 修行八支 漫步者R201T打摩升级改造 阿里(Ali)3328系dvb接收机软件升级方法 db120刷OpenWrt固件并使用ppp方式ADSL拨号 移动短信助手 chrome tips一则 cdate,显示中国传统农历日期 更改硬盘模式为AHCI后Windows及linux的调整 使用grub2加载软盘和光盘镜像 电脑用数据线连接手机上网 电脑通过蓝牙连接手机GPRS上网 我与我的语言
svn管理之submin
zola · 2015-04-22 · via 方永、南天紫雲

subversion可以直接用 svnserve 启动服务,

svn://host/repo 访问即可。如果使用 http/https 协议,就要用 Apache 来配合做授权。另外,还需要一个简单的页面来管理用户,分配权限,用submin可以满足这个需求。

submin是Python写的,依赖 libsvn , 这个包在Centos中安装 subversion 会自动安装,如果系统存在多个Python版本,那么需要做好链接。先上一幅图:

安装其实很简单,下载源码,然后 python setup.py install ,然后运行 submin2-admin /var/lib/submin initenv [email protected], 就会安装submin到 /var/lib/submin 目录,然后按提示完成配置文件的生成。

默认会在 conf 中生成包含apache、nginx的配置,而且apache有2.4及2.4以下的两种版本的配置文件,低于2.4的,用到 apache-svn.confapache-webui-wsgi.conf 这两个文件, apache-trac- 开头的的配置文件是trac用的。

apache-svn.conf 用来配置svn的http协议的,内容如下:

<IfModule !mod_authn_dbd.c>                                                                                                                    
    # Nothing should work, so show a page describing this                                                                                      
    AliasMatch "^/svn" /usr/local/lib/python2.7/site-packages/submin/static/www/nomodauthndbd.html                                             
    <Location "/svn">                                                                                                                          
        Order allow,deny                                                                                                                       
            Allow from all                                                                                                                     
    </Location>                                                                                                                                
</IfModule>                                                                                                                                    
<IfModule mod_authn_dbd.c>                                                                                                                     
    DBDriver sqlite3                                                                                                                           
    DBDParams "/srv/www/submin/conf/submin.db"                                                                                                 
    <IfModule mod_dav_svn.c>                                                                                                                   
        <Location "/svn">                                                                                                                      
            DAV svn                                                                                                                            
            SVNParentPath /srv/svn                                                                                                             
            AuthType Basic                                                                                                                     
            AuthName "Subversion repository"                                                                                                   
            # Authentication                                                                                                                   
            AuthBasicProvider dbd                                                                                                              
            AuthDBDUserPWQuery "SELECT password FROM users WHERE name=%s"                                                                      
            # Authorization                                                                                                                    
            AuthzSVNAccessFile /srv/www/submin/conf/authz                                                                                      
            Satisfy Any                                                                                                                        
            Require valid-user                                                                                                                 
        </Location>                                                                                                                            
    </IfModule>                                                                                                                                
</IfModule>

apache-webui-wsgi.conf用来配置submin用户管理页面的:

<IfModule mod_wsgi.c>                                                                                                                      
        WSGIScriptAlias "/submin" /usr/local/lib/python2.7/site-packages/submin/static/www/submin.wsgi                                         
        AliasMatch ^/submin/css/(.*) /usr/local/lib/python2.7/site-packages/submin/static/www/css/$1                                           
        AliasMatch ^/submin/img/(.*) /usr/local/lib/python2.7/site-packages/submin/static/www/img/$1                                           
        AliasMatch ^/submin/js/(.*) /usr/local/lib/python2.7/site-packages/submin/static/www/js/$1                                             
                                                                                                                                               
        <Location "/submin">                                                                                                                   
            Order allow,deny                                                                                                                   
            Allow from all                                                                                                                     
                                                                                                                                               
            SetEnv SUBMIN_ENV "/srv/www/submin"                                                                                                
        </Location>                                                                                                                            
    </IfModule>                                                                                                                                
    <IfModule !mod_wsgi.c>                                                                                                                     
        AliasMatch "^/submin" /usr/local/lib/python2.7/site-packages/submin/static/www/nowsgi.html                                             
        <Location "/submin">                                                                                                                   
            Order allow,deny                                                                                                                   
            Allow from all                                                                                                                     
                                                                                                                                               
        </Location>                                                                                                                            
</IfModule>

可以看到,Python服务是uwsgi,另外就是subversion用到的模块,http.conf中加载的模块如下:

LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule dbd_module modules/mod_dbd.so
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

一些模块外置,需要用系统的包管理器安装:

mod_dav_svn
apr-util-sqlite

uwsgi、mod_wsgi可以用pip安装, 如果是自编译安装的Python,注意编译时打开 --enable-shared 选项。

submin使用邮件来设置或重置密码,在smtp有问题时,可以用以下命令重置密码:

# 1. 生成密码
openssl passwd -apr1
# 2. 打开数据库
sqlite3 conf/submin.db
# 3. 更新密码
update users set password='$apr1$331' where id=1;

smtp配置命令:

submin2-admin /var/lib/submin
config set smtp_hostname <smtp_host>
config set smtp_port <smtp_port>
config set smtp_username <smtp_user>
config set smtp_password <smtp_pass>
config set smtp_from Submin <[email protected]>
config set commit_email_from Submin <[email protected]>