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

推荐订阅源

D
Docker
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
博客园 - 聂微东
S
SegmentFault 最新的问题
量子位
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页

方永、南天紫雲

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 終端進化之二零一三
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]>