SVN切换相关脚本
<h4>SVN切换相关脚本汇总</h4>
<ul>
<li><strong>SVN授权文件转换及合并脚本编写</strong></li>
</ul>
<p><code>/root/svnshell/authz.sh</code></p>
<pre><code class="language-shell">rm -rf /tmp/groups
echo [groups] >/tmp/authz
echo Super_admin=huangwj >> /tmp/authz
for authz in `find -L /data/svnroot/ -type f -name "authz"`
do
if [ `echo $authz | awk -F '/' '{print NF}'` == "6" ];then
reponame=`echo $authz | awk -F '/' '{print $4}'`
echo -e "\n#-----------------$reponame----------------------">>/tmp/groups
echo $reponame ----- $authz
sed "/#\| = r\|*\|\[/d;s/^M//g;/^\s*$/d;s/^/&$reponame\-/g;s/@/@$reponame\-/g;s/,\s*$\|\s*$//g" $authz >> /tmp/authz
sed -n "/#\|\[groups\]\|\[aliases\]\|,/d;s/^M//g;/^\s*$/d;s/\[/\n\[/g;s/\[\//\[$reponame:\//g;s/@/@$reponame\-/g;s/\s*$//g;s/\]/\]\n@Super_admin=r/g;/\]\|* =\s*$\|= r\s*$\|= rw\s*/p" $authz >> /tmp/groups
fi
done
cat /tmp/groups >> /tmp/authz
alias cp=cp
cp -rf /tmp/authz /tmp/rsync/authz
#账号转换名单,已手工整理,账号自动替换脚本
cat /root/svnshell/convert | while read line
do
ID=
if [ `echo $line | awk -F ',' '{print $2}'` == "0" ];then
ID=`echo $line | awk -F ',' '{print $1}'`
sed -i "s/\s*=\s*/=/g;/^$ID\s*=\s*rw*$/d;s/,$ID,/,/g;s/=\s*$ID,\|=\s*$ID\s*$/=/g;s/,$ID\s*$//g" /tmp/rsync/authz
elif [ `echo $line | awk -F ',' '{print $2}'` == "2" ];then
ID1=`echo $line | awk -F ',' '{print $1}'`
ID2=`echo $line | awk -F ',' '{print $3}'`
sed -i "s/\s*=\s*/=/g;s/^$ID1\s*=\s*r/$ID2=r/g;s/,$ID1,/,$ID2,/g;s/=\s*$ID1,/=$ID2,/g;s/=\s*$ID1\s*$/=$ID2/g;s/,$ID1\s*$/,$ID2/g" /tmp/rsync/authz
fi
done
#删除成员为空的群组
for group in `sed -n '/*=/d;/=\s*$/p' /tmp/rsync/authz`
do
sed -i "/^@$group\s*rw*$\|^$group$/d" /tmp/rsync/authz
done
cp -rf /tmp/rsync/authz /usr/local/csvn/data/conf/svn_access_file
vim /tmp/rsync/authz</code></pre>
<hr />
<p><strong>将文件导出至windows平台通过<code>dsquery</code>命令进行查询对比</strong></p>
<pre><code class="language-shell">#用户列表整合
sed '/\[\|=\s*r$\|=\s*rw$\|*\s*=\s*$/d;/^\s*$/d' /usr/local/csvn/data/conf/svn_access_file | awk -F '=' '{print $2}' > /tmp/rsync/members
sed 's/,/\n/g' /tmp/rsync/members > /tmp/rsync/member
sed -n '/@\|*\|^\s*$/d;/=\s*r$\|=\s*rw$/p' /usr/local/csvn/data/conf/svn_access_file | awk -F '=' '{print $1}' >> /tmp/rsync/member
sort /tmp/rsync/member | uniq > /tmp/rsync/users
sed '/@\|\$\|^\s*$/d' /tmp/rsync/users -i
#密码文件用户整合
find /data/svnroot -name passwd | xargs sed '/^\s*#\|\[users\]\|^\s*$/d;s/\s*//g' | awk -F '=' '{print $1}' | sort | uniq > /tmp/rsync/passwd
sed 's/^\|$/,/g' /tmp/rsync/passwd -i</code></pre>
<p><code>如下脚本为批处理脚本保存为.cmd文件后在windows下执行</code></p>
<pre><code class="language-bash">@echo off
setlocal ENABLEDELAYEDEXPANSION
pscp -r -pw svnserve-passwd root@172.16.2.129:/tmp/rsync/* ./
timeout 3 >nul
echo.用户名,状态码,姓名,部门,岗位>cklist.csv
for /f "delims=" %%a in (users) do (
echo %%a
findstr /i ",%%a," passwd>nul 2>nul&&(net user %%a /domain>nul 2>nul&&set st=1||set st=2)||set st=0
set info=
if !st!==1 (
for /f "delims=: tokens=2" %%b in ('dsquery ^* -filter ^(sAMAccountName^=%%a^) -attr cn physicalDeliveryOfficeName title -q -l') do set info=!info!,%%b
echo !info: =!
)
IF DEFINED info (echo.%%a,!st!!info: =!>>cklist.csv) else (echo.%%a,!st!,>>cklist.csv)
)
start "" cklist.csv
timeout 5</code></pre>
<p>导出完成后手工匹配确认<code>cklist.csv</code>文件4种状态后写入<code>/root/svnshell/convert</code>文件,并处理无法匹配的账号进行标识</p>
<ul>
<li><strong>账号关系对应表建立</strong></li>
</ul>
<p><code>匹配情况可能</code></p>
<blockquote>
<p>0、passwd文件中无该账号,标记为无效账号,删除掉
1、LDAP中能匹配到该账号,无需替换
2、无法匹配,需要人为手工匹配
4、保留账号,暂不处理</p>
</blockquote>
<hr />
<ul>
<li><strong>SVN授权文件备份脚本部署</strong></li>
</ul>
<p><code>vim /data/svnconf/svn_ae_bak.sh</code></p>
<pre><code class="language-shell">#!/bin/bash
alias cp=cp
#svn co https://127.0.0.1/svnconf /data/svnconf --username cmadmin
cd /data/svnconf/
svn up
cp -rf /usr/local/csvn/data/conf/svn_access_file /data/svnconf/
svn add *
svn ci -m "backup"</code></pre>
<p><code>添加定时任务,每5分钟自动备份一次配置文件至svnconf配置库</code></p>
<pre><code>crontab -e
*/5 * * * * /bin/bash /data/svnconf/svn_ae_bak.sh</code></pre>
<hr />
<ul>
<li><strong>一键启用/禁用svnserve配置文件脚本</strong></li>
</ul>
<pre><code class="language-shell">#关闭所有配置库访问权限
find /data/svnroot/ -name svnserve.conf | xargs sed -i 's/^#*\s*authz-db\s*=.*$/authz-db = none/;s/^#*\s*password-db\s*=.*$/password-db = none/'
#启用所有配置库访问权限
find /data/svnroot/ -name svnserve.conf | xargs sed -i 's/^#*\s*authz-db\s*=.*$/authz-db = authz/;s/^#*\s*password-db\s*=.*$/password-db = passwd/'
#一键切换开启svnserve服务LDAP认证
find /data/svnroot/ -name svnserve.conf | xargs sed -i 's/^#*\s*anon-access\s*=.*$/anon-access = none/;s/^#*\s*auth-access\s*=.*$/auth-access = write/;s/^#*\s*authz-db\s*=.*$/authz-db = authz/;/^#*\s*use-sasl\s*=.*$/d;$a\use-sasl = true'
#一键切换关闭svnserve服务LDAP认证
find /data/svnroot/ -name svnserve.conf | xargs sed -i 's/^#*\s*use-sasl\s*=.*$/# use-sasl = true/'
</code></pre>
<hr />
<ul>
<li><strong>旧配置文件统一备份</strong></li>
</ul>
<p><code>/root/svnshell/confbak.sh</code></p>
<pre><code class="language-shell">#!/bin/bash
alias cp=cp
rm -rf /data/svnconf/authz-bak.tar.gz /tmp/authzbak/*
for authz in `find -L /data/svnroot/ -type f -name "authz"`
do
if [ `echo $authz | awk -F '/' '{print NF}'` == "6" ];then
reponame=`echo $authz | awk -F '/' '{print $4}'`
cp -rf $authz /tmp/authzbak/$reponame
tar -zvcf /data/svnconf/authz-bak.tar.gz /tmp/authzbak
fi
done</code></pre>
<ul>
<li><strong>邮件通知人员名单整理</strong></li>
</ul>
<p>通过excel汇总状态码为<code>1</code>和<code>2</code>的对应列汇总,然后通过<code>=A1&"@paxsz.com"</code>公司添加邮箱后缀即可通过Outlook识别出来</p>
<p>专用账号配置,4个账号存在弱密码限制无法使用旧密码</p>
<p>存储库备份
URL地址切换脚本及切换指导输出</p>