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

推荐订阅源

小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
博客园 - 【当耐特】
博客园_首页
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Apple Machine Learning Research
Apple Machine Learning Research
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
雷峰网
雷峰网
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
V
Visual Studio Blog
F
Fortinet All Blogs
Martin Fowler
Martin Fowler

方永、南天紫雲

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]>