zoukankan      html  css  js  c++  java
  • centos 7 SVN安装脚本搭建主从同步灵活切换

    svn 脚本下载 http://opensource.wandisco.com/
    subversion_installer_1.9.sh 2019-Aug-20 12:20:4810.1Kapplication/x-sh
    #下面的是svn1.9.7自动安装加权限配置文件同步利用rsync工具主从切换校验md5库切换,当然你也可以使用keepalive主备切换,因该脚本的云平台不支持keepalive所以可以加邮箱警报,通知。
    #!/bin/bash
    {
        svn=`svnserve --version | awk 'NR==1{print $3}'|wc -l`
    }
    if
    [ $svn -eq 1 ]
    then
        echo "检查已安装svnserve --version=1.9.9";svnserve --version
    fi
    if
    [ $svn -ne 1 ]
    then
        echo "请安装svnserve 1.9.9"
        read -ep "是否安装svnserve 1.9.9 请确保pwd: /root/subversion_installer_1.9.sh 存在,文件在[安装 <y> ] [不安装并退出 <q> ]" okFirst
        case $okFirst in
            [yY][eE][sS]|[yY])
            chmod +x /root/subversion_installer_1.9.sh
            sh /root/subversion_installer_1.9.sh
        ;;
            [qQ][uU][iI][tT]|[qQ])
            exit 0
        ;;
        esac
    fi
    ###!/bin/bash
    #while (:)  
    #do 
    #   svnsync sync file:///database/$the_svn_repository_name
    #   if [ $? != 0 ]
    #   then  
    #   svn propdel svn:sync-lock --revprop -r0 file:///database/$the_svn_repository_name
    #   fi  
    #   sleep 60  
    #done
    # script.
    #ps -ef | grep rsync,svnserve
    #pstree
    #netstat -ntpl | grep rsync,svnserve
    #Failed to get lock on destination repos, currently held by 'localhost.localdomain:7d4732d5-a0eb-4f4c-b42e-ae75b43c0f37'
    #--steal-lock
    #svn propdel svn:sync-lock --revprop -r0 file:///database/$the_svn_repository_name
    #echo "*/2  *  *  *  * root echo -e \`date;svnsync sync svn://$ipbackup6/$the_svn_repository_name/ --username bigone --password bigone\` >> /$rsyncd_hostback_pathname/logs/logsyncsvn.log" >> /etc/crontab
    #echo -e `date;svnsync sync svn://192.168.84.6/$the_svn_repository_name/ --source-username bigone --source-password bigone --sync-username bigone --sync-password bigone --non-interactive` >> /$rsyncd_hostback_pathname/logs/logsyncsvn.log
    #echo "*/2  *  *  *  * root echo -e \`date;svnsync sync svn://$ipbackup6/$the_svn_repository_name/ --source-username bigone --source-password bigone --sync-username bigone --sync-password bigone --non-interactive\` >> /$rsyncd_hostback_pathname/logs/logsyncsvn.log" >> /etc/crontab
    #svn pdel --revprop -r 0 --username bigonetoict --password bigonetoict svn:sync-lock file:///database/$the_svn_repository_name
    ip a
    read -ep "主备服务器选择操作: [安装 < y > ] [备机IP切换主机 < n > ] [退出 < q > ] >> " ok0
    case $ok0 in
        [yY][eE][sS]|[yY])
        read -ep "----->the_svn_repository_name            创库名称: 如:SVN_NAME               (不建议中文、空格、-:创库名称不能与创库路径名称开头相同)----->>=" the_svn_repository_name
        read -ep "----->the_svn_repository_path            创库路径: 如:SVN_PATH               (不建议中文和有空格)------------------------------------------>>=" the_svn_repository_path
        read -ep "----->the_svn_repository_admin_username  用户名称: 如:SVN_USERNAME           (不建议中文和有空格) ----------------------------------------->>=" the_svn_repository_admin_username
        read -ep "----->the_svn_repository_admin_password  用户密码: 如:SVN_PASSWORD           (不建议中文和有空格) ----------------------------------------->>=" the_svn_repository_admin_password
        read -ep "----->rsyncd_admin_username              用户名称: 如:rsyncd_admin_username  (不建议中文和有空格) ----------------------------------------->>=" rsyncd_admin_username
        read -ep "----->rsyncd_admin_password              用户密码: 如:rsyncd_admin_password  (不建议中文和有空格) ----------------------------------------->>=" rsyncd_admin_password
        read -ep "----->rsyncd_hostback_pathname           主机路名: 如:Rsycd_Path             (不建议中文和有空格) ----------------------------------------->>=" rsyncd_hostback_pathname
    ;;
        [nN][oO]|[nN])
        hostname Host
        ip a
        ##备机操作切换主机IP地址:
        Rsyncd_SVN_Back_Path=`cat /Rsyncd_Host_Path/rsyncd_hostback_pathname`
        mkdir -p /SVN_BACK_FULL_COPY/;cp -p -r /$Rsyncd_SVN_Back_Path /SVN_BACK_FULL_COPY/
        Passwd_Aes_Top0=`gzexe -d /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_Name;rm -f /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_Name*~;cat /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_Name`
        Passwd_Aes_Top1=`gzexe -d /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_PATH;rm -f /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_PATH*~;cat /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_PATH`
        Passwd_Aes_Top2=`gzexe -d /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_Admin_Name;rm -f /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_Admin_Name*~;cat /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_Admin_Name`
        Passwd_Aes_Top3=`gzexe -d /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_Admin_Passwd;rm -f /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_Admin_Passwd*~;cat /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/SVN_Admin_Passwd`
        Passwd_Aes_Top4=`gzexe -d /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/Rsyncd_SVN_Admin_Name;rm -f /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/Rsyncd_SVN_Admin_Name*~;cat /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/Rsyncd_SVN_Admin_Name`
        Passwd_Aes_Top5=`gzexe -d /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/Rsyncd_SVN_Admin_Passwd;rm -f /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/Rsyncd_SVN_Admin_Passwd*~;cat /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/Rsyncd_SVN_Admin_Passwd`
        Passwd_Aes_Top6=`gzexe -d /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/Rsyncd_SVN_Back_Path;rm -f /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/Rsyncd_SVN_Back_Path*~;cat /SVN_BACK_FULL_COPY/$Rsyncd_SVN_Back_Path/Rsyncd_SVN_Back_Path`
        ###
        RE_SVN_Name=`echo $Passwd_Aes_Top0 | openssl aes-128-cbc -d -k 123 -base64`
        RE_SVN_PATH=`echo $Passwd_Aes_Top1 | openssl aes-128-cbc -d -k 123 -base64`
        RE_SVN_Admin_Name=`echo $Passwd_Aes_Top2 | openssl aes-128-cbc -d -k 123 -base64`
        RE_SVN_Admin_Passwd=`echo $Passwd_Aes_Top3 | openssl aes-128-cbc -d -k 123 -base64`
        RE_Rsyncd_SVN_Admin_Name=`echo $Passwd_Aes_Top4 | openssl aes-128-cbc -d -k 123 -base64`
        RE_Rsyncd_SVN_Admin_Passwd=`echo $Passwd_Aes_Top5 | openssl aes-128-cbc -d -k 123 -base64`
        RE_Rsyncd_SVN_Back_Path=`echo $Passwd_Aes_Top6| openssl aes-128-cbc -d -k 123 -base64`
        ###
        echo $RE_SVN_Name
        echo $RE_SVN_PATH
        echo $RE_SVN_Admin_Name
        echo $RE_SVN_Admin_Passwd
        echo $RE_Rsyncd_SVN_Admin_Name
        echo $RE_Rsyncd_SVN_Admin_Passwd
        echo $RE_Rsyncd_SVN_Back_Path
        read -ep "rsync服务端允许访问本机的IP/掩码: 如192.168.1.2/24 >> " ipbackup0
        ipmask1=$ipbackup0
        read -ep "主机服务器IP是:" ipserver0
        ipserver1=$ipserver0
        read -ep "备机服务器操作: 请输入网卡名如:eth0 >> " -t 300 ifcfg0
        ipbackup0=`ifconfig $ifcfg0|grep broadcast |awk '{print $2}'`
        ipbackup1=$ipbackup0
        echo "备机服务器操作: 请输入主服务器IP进行备机服务器同步 >> $ipbackup1"
        if test "$ipserver1" = "$ipbackup1";then
        echo "主备IP相同请重新输入>>>>>..."
        read -ep "主机服务器IP是:" ipserver0
        ipserver1=$ipserver0
        read -ep "备机服务器操作: 请输入网卡名如:eth0 >> " -t 300 ifcfg0
        ipbackup0=`ifconfig $ifcfg0|grep broadcast |awk '{print $2}'`
        ipbackup1=$ipbackup0
        echo  "备机服务器操作: 请输入主服务器IP进行备机服务器同步 >> $ipbackup1"
            if test "$ipserver1" = "$ipbackup1";then
            exit 0
            fi
        fi
        svnuuid=`cat /$RE_Rsyncd_SVN_Back_Path/svnuuid.txt`
        echo "$svnuuid"
        svnadmin setuuid /$RE_SVN_PATH/$RE_SVN_Name/ $svnuuid
        sed -i s/$ipbackup1/$ipserver1/g /etc/sysconfig/network-scripts/ifcfg-$ifcfg0
        sed -i '17,20s/^/#/' /etc/crontab
        echo -e "uid = root
    gid = root
    use chroot = no
    max connections = 3
    strict modes =yes
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/run/rsyncd.log
    exclude = lost+found/
    #transfer logging = yes
    port = 873
    timeout = 900
    ignore nonreadable = yes
    dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    [$RE_Rsyncd_SVN_Back_Path]
    path = /$RE_Rsyncd_SVN_Back_Path/
    [$RE_SVN_Name]
    ignore errors
    path = /$RE_SVN_PATH/$RE_SVN_Name/conf/
    comment = $RE_SVN_Name export area
    read only = no
    write only = no
    list = no
    hosts allow = $ipbackup0
    auth users = $RE_Rsyncd_SVN_Admin_Name
    secrets file = /$RE_Rsyncd_SVN_Back_Path/pw/$RE_SVN_Name.passwd" > /etc/rsyncd.conf
        service network restart
        exit 0
    ;;
        [qQ][uU][iI][tT]|[qQ])
        exit 0
    ;;
    esac
    systemctl stop firewalld.service
    setenforce 0
    systemctl disable firewalld.service
    sudo yum install ntp -y
    sudo systemctl start ntpd
    timedatectl set-timezone "Asia/Shanghai"
    systemctl enable ntpd
    ntpdate cn.pool.ntp.org
    sudo systemctl restart ntpd
    #sudo yum install -y tcp_wrappers psmisc tree cyrus-sasl-md5 vim chrony iptables-services apr* rsync xinetd vixie-cron crontabs wget lrzsz vim autoconf automake bison bzip2 bzip2* cloog-ppl compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gtk+-devel gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libxml* libXaw-devel libXmu-devel libtiff libtiff* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-devel iptables-services net-tools
    #yum clean all
    cat > /etc/sysconfig/iptables <<END
    # sample configuration for iptables service
    # you can edit this manually or use system-config-firewall
    # please do not ask us to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 9496 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 123 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 3690 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    END
    systemctl restart iptables.service
    systemctl enable iptables.service
    /usr/libexec/iptables/iptables.init restart
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    cat > /etc/selinux/config <<END
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    #SELINUX=enforcing
    SELINUX=disabled
    # SELINUXTYPE= can take one of three two values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected.
    #     mls - Multi Level Security protection.
    #SELINUXTYPE=targeted
    END
    mkdir /$the_svn_repository_path/
    chmod 755 /$the_svn_repository_path/
    svnadmin create /$the_svn_repository_path/$the_svn_repository_name
    sudo chown -R root:root /$the_svn_repository_path/$the_svn_repository_name
    sudo chmod -R g+rws /$the_svn_repository_path/$the_svn_repository_name
    cat > /$the_svn_repository_path/$the_svn_repository_name/conf/svnserve.conf <<END
    ### This file controls the configuration of the svnserve daemon, if you
    ### use it to allow access to this repository.  (If you only allow
    ### access through http: and/or file: URLs, then this file is
    ### irrelevant.)
    ### Visit http://subversion.apache.org/ for more information.
    [general]
    ### The anon-access and auth-access options control access to the
    ### repository for unauthenticated (a.k.a. anonymous) users and
    ### authenticated users, respectively.
    ### Valid values are "write", "read", and "none".
    ### Setting the value to "none" prohibits both reading and writing;
    ### "read" allows read-only access, and "write" allows complete
    ### read/write access to the repository.
    ### The sample settings below are the defaults and specify that anonymous
    ### users have read-only access to the repository, while authenticated
    ### users have read and write access to the repository.
    anon-access = none
    auth-access = write
    ### The password-db option controls the location of the password
    ### database file.  Unless you specify a path starting with a /,
    ### the file's location is relative to the directory containing
    ### this configuration file.
    ### If SASL is enabled (see below), this file will NOT be used.
    ### Uncomment the line below to use the default password file.
    password-db = passwd
    ### The authz-db option controls the location of the authorization
    ### rules for path-based access control.  Unless you specify a path
    ### starting with a /, the file's location is relative to the
    ### directory containing this file.  The specified path may be a
    ### repository relative URL (^/) or an absolute file:// URL to a text
    ### file in a Subversion repository.  If you don't specify an authz-db,
    ### no path-based access control is done.
    ### Uncomment the line below to use the default authorization file.
    authz-db = authz
    ### The groups-db option controls the location of the file with the
    ### group definitions and allows maintaining groups separately from the
    ### authorization rules.  The groups-db file is of the same format as the
    ### authz-db file and should contain a single [groups] section with the
    ### group definitions.  If the option is enabled, the authz-db file cannot
    ### contain a [groups] section.  Unless you specify a path starting with
    ### a /, the file's location is relative to the directory containing this
    ### file.  The specified path may be a repository relative URL (^/) or an
    ### absolute file:// URL to a text file in a Subversion repository.
    ### This option is not being used by default.
    # groups-db = groups
    ### This option specifies the authentication realm of the repository.
    ### If two repositories have the same authentication realm, they should
    ### have the same password database, and vice versa.  The default realm
    ### is repository's uuid.
    realm = $the_svn_repository_name
    ### The force-username-case option causes svnserve to case-normalize
    ### usernames before comparing them against the authorization rules in the
    ### authz-db file configured above.  Valid values are "upper" (to upper-
    ### case the usernames), "lower" (to lowercase the usernames), and
    ### "none" (to compare usernames as-is without case conversion, which
    ### is the default behavior).
    # force-username-case = none
    ### The hooks-env options specifies a path to the hook script environment
    ### configuration file. This option overrides the per-repository default
    ### and can be used to configure the hook script environment for multiple
    ### repositories in a single file, if an absolute path is specified.
    ### Unless you specify an absolute path, the file's location is relative
    ### to the directory containing this file.
    # hooks-env = hooks-env
    [sasl]
    ### This option specifies whether you want to use the Cyrus SASL
    ### library for authentication. Default is false.
    ### This section will be ignored if svnserve is not built with Cyrus
    ### SASL support; to check, run 'svnserve --version' and look for a line
    ### reading 'Cyrus SASL authentication is available.'
    # use-sasl = true
    ### These options specify the desired strength of the security layer
    ### that you want SASL to provide. 0 means no encryption, 1 means
    ### integrity-checking only, values larger than 1 are correlated
    ### to the effective key length for encryption (e.g. 128 means 128-bit
    ### encryption). The values below are the defaults.
    # min-encryption = 0
    # max-encryption = 256
    END
    cat > /$the_svn_repository_path/$the_svn_repository_name/conf/authz <<END
    ### This file is an example authorization file for svnserve.
    ### Its format is identical to that of mod_authz_svn authorization
    ### files.
    ### As shown below each section defines authorizations for the path and
    ### (optional) repository specified by the section name.
    ### The authorizations follow. An authorization line can refer to:
    ###  - a single user,
    ###  - a group of users defined in a special [groups] section,
    ###  - an alias defined in a special [aliases] section,
    ###  - all authenticated users, using the '$authenticated' token,
    ###  - only anonymous users, using the '$anonymous' token,
    ###  - anyone, using the '*' wildcard.
    ###
    ### A match can be inverted by prefixing the rule with '~'. Rules can
    ### grant read ('r') access, read-write ('rw') access, or no access
    ### ('').
    [aliases]
    # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
    [groups]
    # harry_and_sally = harry,sally
    # harry_sally_and_joe = harry,sally,&joe
    # [/foo/bar]
    # harry = rw
    # &joe = r
    # * =
    # [repository:/baz/fuz]
    # @harry_and_sally = rw
    # * = r
    #[repository:/baz/file.xxx],e.g.:bigone.ppt
    # @harry_and_sally = rw
    # * = r
    #start.list_useradd
    admin = $the_svn_repository_admin_username
    ictadmin = ict
    jl = hj
    zs = cgs
    gcs = lh,wcl
    [/]
    @admin = rw
    * =
    [$the_svn_repository_name:/]
    @admin = rw
    @jl = rw
    @zs = rw
    @gcs = rw
    * =
    [$the_svn_repository_name:/ict项目部]
    @admin = rw
    @ictadmin = rw
    @jl = rw
    @zs = rw
    @gcs = rw
    * =
    [$the_svn_repository_name:/ict项目部/ppt]
    @admin = rw
    @ictadmin = rw
    @jl = rw
    @zs = rw
    @gcs = rw
    * =
    [$the_svn_repository_name:/ict项目部/word]
    @admin = rw
    @ictadmin = rw
    @jl = rw
    @zs = rw
    @gcs = rw
    * =
    [$the_svn_repository_name:/ict项目部/excel]
    @admin = rw
    @ictadmin = rw
    @jl = rw
    @zs = rw
    @gcs = rw
    * =
    [$the_svn_repository_name:/ict项目部/other]
    @admin = rw
    @ictadmin = rw
    @jl = rw
    @zs = rw
    @gcs = rw
    * =
    END
    cat > /$the_svn_repository_path/$the_svn_repository_name/conf/passwd <<END
    ### This file is an example password file for svnserve.
    ### Its format is similar to that of svnserve.conf. As shown in the
    ### example below it contains one section labelled [users].
    ### The name and password for each user follow, one account per line.
    [users]
    # harry = harryssecret
    # sally = sallyssecret
    $the_svn_repository_admin_username = $the_svn_repository_admin_password
    hj = hujian
    cgs = chengengsheng
    wcl = wuchunlin
    lh = lihui
    ict = ict
    END
    mkdir -p /$rsyncd_hostback_pathname/{pw,logs}
    echo "$rsyncd_admin_username:$rsyncd_admin_password" >> /$rsyncd_hostback_pathname/pw/$the_svn_repository_name.passwd
    chmod 0600 /$rsyncd_hostback_pathname/pw/$the_svn_repository_name.passwd
    chown root.root /$rsyncd_hostback_pathname/pw/$the_svn_repository_name.passwd
    systemctl restart rsyncd.service
    rpm -aq |grep xinetd >> /$rsyncd_hostback_pathname/logs/xinetd.log
    rm -rf /var/run/rsyncd.pid
    rsync --daemon
    cat > /etc/xinetd.d/rsync <<END
    service rsync
    {
            disable         = no
            socket_type     = stream
            flags           = IPv4
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/bin/rsync
            server_args     = --daemon
            log_on_failure  += USERID
    }
    END
    cat> /etc/xinetd.d/svnserve <<END
    # default: on
    # description: Subversion server for the $the_svn_repository_name protocol
    service svnserve
    {
      disabled        = no
      port            = 3690
      socket_type     = stream
      protocol        = tcp
      wait            = no
      user            = subversion
      server          = /usr/local/bin/svnserve
      server_args     = -i -r /path/to/repositories
    }
    END
    echo "$rsyncd_admin_password" >> /$rsyncd_hostback_pathname/pw/$the_svn_repository_name.pwd
    chmod 00600 /$rsyncd_hostback_pathname/pw/$the_svn_repository_name.pwd
    chown root.root /$rsyncd_hostback_pathname/pw/$the_svn_repository_name.pwd
    cd /$the_svn_repository_path/$the_svn_repository_name/hooks
    cp pre-revprop-change.tmpl pre-revprop-change
    cat > pre-revprop-change <<END
    #!/bin/sh
    REPOS="$1"
    REV="$2"
    USER="$3"
    PROPNAME="$4"
    ACTION="$5"
    export LANG=zh_CN.UTF-8
    echo "Code Deployed at `date "+%Y-%m-%d %H:%M"`" >> /tmp/deploy.log
    if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
    echo "Changing revision properties other than svn:log is prohibited" >&2
    exit 0
    END
    chkconfig --add svnserve
    chkconfig rsync on
    echo '/usr/bin/rsync --daemon on' >> /etc/rc.local
    /usr/bin/rsync --daemon on
    /bin/systemctl restart  xinetd.service
    echo '/bin/systemctl restart  xinetd.service' >> /etc/rc.d/rc.local
    echo 'rsync --daemon' >> /etc/rc.d/rc.local
    echo 'svnserve -d --listen-port 3690 -r /$the_svn_repository_path/' >> /etc/rc.d/rc.local
    systemctl enable xinetd.service
    systemctl enable rsyncd 
    svnserve -d --listen-port 3690 -r /$the_svn_repository_path/
    chmod +x /etc/rc.local
    chmod +x /etc/rc.d/rc.local
    killall -HUP rsync
    killall -HUP xinetd
    systemctl restart xinetd
    systemctl restart rsyncd
    netstat -lnp|grep 873 > /$rsyncd_hostback_pathname/logs/rsync.log
    cat <<EOF
    主/备服务器选择: <y> <n>
    EOF
    echo $?
    ip a 
    read -ep "主备服务器选择操作: [主机 < y > ] [备机 < n > ] >> " ok2
    case $ok2 in
        [yY][eE][sS]|[yY])
        hostname Host
        read -ep "主机服务器操作: 请输入网卡名如:eth0 >> " -t 300 ifcfg2
        ipserver2=`ifconfig $ifcfg2|grep broadcast |awk '{print $2}'`
        ipserver3=$ipserver2
        echo "主机服务器IP: >> $ipserver3"
        read -ep "rsync服务端允许访问本机的IP/掩码: 如192.168.1.2/24 >> " ipbackup2
        ipmask3=$ipbackup2
        echo "rsync服务端允许访问本机的IP/掩码: >> $ipmask3"
        read -ep "主机服务器操作: 主份服务器IP是: $ipserver3 [正确 < y > ] [错误 < n > ] >> " ok3
        case $ok3 in
            [yY][eE][sS]|[yY])
            mkdir -p /$the_svn_repository_name/ict项目部/word
            mkdir -p /$the_svn_repository_name/ict项目部/other
            mkdir -p /$the_svn_repository_name/ict项目部/excel
            mkdir -p /$the_svn_repository_name/ict项目部/ppt
            yes|svn import /$the_svn_repository_name/ict项目部/ppt svn://$ipserver3/$the_svn_repository_name/ict项目部/ppt -m "Initial commit." --username $the_svn_repository_admin_username --password $the_svn_repository_admin_password
            svn import /$the_svn_repository_name/ict项目部/excel svn://$ipserver3/$the_svn_repository_name/ict项目部/excel -m "Initial commit." --username $the_svn_repository_admin_username --password $the_svn_repository_admin_password
            svn import /$the_svn_repository_name/ict项目部/word svn://$ipserver3/$the_svn_repository_name/ict项目部/word -m "Initial commit." --username $the_svn_repository_admin_username --password $the_svn_repository_admin_password
            svn import /$the_svn_repository_name/ict项目部/other svn://$ipserver3/$the_svn_repository_name/ict项目部/other -m "Initial commit." --username $the_svn_repository_admin_username --password $the_svn_repository_admin_password
            rm -rf /$the_svn_repository_name
            echo "*/1  *  *  *  * root echo -e \`date;sh /root/runbash_crontab.sh\` >> /$rsyncd_hostback_pathname/logs/runbash_crontab.log" >> /etc/crontab
            echo -e "uid = root
    gid = root
    use chroot = no
    max connections = 3
    strict modes =yes
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/run/rsyncd.log
    exclude = lost+found/
    #transfer logging = yes
    port = 873
    timeout = 900
    ignore nonreadable = yes
    dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    [$rsyncd_hostback_pathname]
    path = /$rsyncd_hostback_pathname/
    [$the_svn_repository_name]
    ignore errors
    path = /$the_svn_repository_path/$the_svn_repository_name/conf/
    comment = $the_svn_repository_name export area
    read only = no
    write only = no
    list = no
    hosts allow = $ipmask3
    auth users = $rsyncd_admin_username
    secrets file = /$rsyncd_hostback_pathname/pw/$the_svn_repository_name.passwd" > /etc/rsyncd.conf
            echo -e "`svnlook uuid /$the_svn_repository_path/$the_svn_repository_name`" > /$rsyncd_hostback_pathname/svnuuid.txt
        ;;
            [nN][oO]|[nN])
            echo "请求失败..............."
        ;;
        esac
    ;;
        [nN][oO]|[nN])
        #!/bin/bash
        #备机服务器追加文本bash
        #ip替换
        #echo "*/1  *  *  *  * root sh /root/runbash_crontab.sh >> /$rsyncd_hostback_pathname/logw/runbash_crontab.log" >> /etc/crontab
        #sed -i 's/192.168.84.5/192.168.84.6/g' /etc/sysconfig/network-scripts/ifcfg-eth0
        #6-8行首删除注释
        #[$USER@localhost `pwd | awk -F "/" '{print $NF}'`]#
        #tail  -f  /var/log/messages
        #sed -i '6,8s/^#//' /etc/crontab
        hostname Backup
        ip a
        read -ep "备机服务器操作: 请输入网卡名如:eth0 >> " -t 300 ifcfg5
        ipbackup5=`ifconfig $ifcfg5|grep broadcast |awk '{print $2}'`
        ipbackup6=$ipbackup5
        echo "备机服务器IP: >> $ipbackup6"
        read -ep "rsync服务端允许访问本机的IP/掩码: 如192.168.1.2/24 >> " ipmask5
        ipmask6=$ipmask5
        echo "rsync服务端允许访问本机的IP/掩码: >> $ipmask6"
        read -ep "备机服务器操作: 请输入主服务器IP进行备机服务器同步 >> " ipserver5
        ipserver6=$ipserver5
        if  test "$ipserver6" = "$ipbackup6";then
            echo "主备IP相同请重新输入>>>>>..."
            echo "备机服务器IP: >> $ipbackup6"
            read -ep "备机服务器操作: 请输入主服务器IP进行备机服务器同步 >> " ipserver5
            ipserver6=$ipserver5
            if  test "$ipserver6" = "$ipbackup6";then
                exit 0
            fi
        fi
        read -ep "备机服务器操作: 主份服务器IP是: $ipserver6 [正确 < y > ] [错误 < n > ] >> " ok5
        case $ok5 in
            [yY][eE][sS]|[yY])
            #mkdir /$rsyncd_fullback_pathname/
            echo "*/1  *  *  *  * root echo -e \`date;sh /root/runbash_crontab.sh\` >> /$rsyncd_hostback_pathname/logs/runbash_crontab.log" >> /etc/crontab
            echo "*/1  *  *  *  * root echo -e \`date;svnsync initialize --allow-non-empty svn://$ipbackup6/$the_svn_repository_name/ svn://$ipserver6/$the_svn_repository_name/ --username $the_svn_repository_admin_username --password $the_svn_repository_admin_password --steal-lock --non-interactive\` >> /$rsyncd_hostback_pathname/logs/syncinit.log" >> /etc/crontab
            echo "*/2  *  *  *  * root echo -e \`date;svnsync sync svn://$ipbackup6/$the_svn_repository_name/ --username $the_svn_repository_admin_username --password $the_svn_repository_admin_password --non-interactive --steal-lock\` >> /$rsyncd_hostback_pathname/logs/logsyncsvn.log" >> /etc/crontab
            echo "*/2  *  *  *  * root echo -e \`date;rsync -avcpogltzADHP --password-file=/$rsyncd_hostback_pathname/pw/$the_svn_repository_name.pwd $rsyncd_admin_username@$ipserver6::$the_svn_repository_name /$the_svn_repository_path/$the_svn_repository_name/conf/\` >> /$rsyncd_hostback_pathname/logs/logsvnbackup.log" >> /etc/crontab
            echo "*/2  *  *  *  * root echo -e \`date;rsync -avcpogltzADHP --password-file=/$rsyncd_hostback_pathname/pw/$the_svn_repository_name.pwd $rsyncd_admin_username@$ipserver6::$rsyncd_hostback_pathname /$rsyncd_hostback_pathname/\` >> /$rsyncd_hostback_pathname/logs/logsvnbackupall.log" >> /etc/crontab
            echo -e "uid = root
    gid = root
    use chroot = no
    max connections = 3
    strict modes =yes
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/run/rsyncd.log
    exclude = lost+found/
    #transfer logging = yes
    port = 873
    timeout = 900
    ignore nonreadable = yes
    dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    [$rsyncd_hostback_pathname]
    path = /$rsyncd_hostback_pathname/
    [$the_svn_repository_name]
    ignore errors
    path = /$the_svn_repository_path/$the_svn_repository_name/conf/
    comment = $the_svn_repository_name export area
    read only = no
    write only = no
    list = no
    hosts allow = $ipmask6
    auth users = $rsyncd_admin_username
    secrets file = /$rsyncd_hostback_pathname/pw/$the_svn_repository_name.passwd" > /etc/rsyncd.conf
            tail -n 4 /etc/crontab
            #Failed to get lock on destination repos, currently held by 'localhost.localdomain:7d4732d5-a0eb-4f4c-b42e-ae75b43c0f37'
            #svn pdel --revprop -r 0 --username bigonetoict --password bigonetoict svn:sync-lock file:///database/$the_svn_repository_name
            echo $?
        ;;
            [nN][oO]|[nN])
            echo "请求失败..............."
        ;;
        esac
    ;;
    esac
    echo -e "cat <<EOF
    
    \`date\` >>> rsyncd xinetd svnserve >> 定时任务即将开启> <----------The_SVN_repository$the_svn_repository_admin_username---------->
    
    EOF
    
    proc_name0="rsync"
    proc_num0()
    {
       um0=\`ps -ef | grep $proc_name0 | grep -v grep | wc -l\`
       return $um0
    }
    proc_num0
    number0=$?
    if [ $number0 -eq 0 ]
    then
       systemctl restart rsyncd.service
    fi
    proc_name1="svnserve"
    proc_num1()
    {
       um1=\`ps -ef | grep $proc_name1 | grep -v grep | wc -l\`
       return $um1
    }
    proc_num1
    number1=$?
    if [ $number1 -eq 0 ]
    then
       svnserve -d --listen-port 3690 -r /$the_svn_repository_path/
    fi
    proc_name2="xinetd"
    proc_num2()
    {
       um2=\`ps -ef | grep $proc_name2 | grep -v grep | wc -l\`
       return $um2
    }
    proc_num2
    number2=$?
    if [ $number2 -eq 0 ]
    then
       systemctl restart xinetd.service
    fi
    " >> /root/runbash_crontab.sh
    chmod +x /root/runbash_crontab.sh
    echo $?
    ###
    echo "<<--------------------------------------请记录下面重要信息-------------------------------------->>"
    echo "----->SVN_NAME----------------------->=$the_svn_repository_name"
    echo "----->SVN_PATH----------------------->=$the_svn_repository_path"
    echo "----->SVN_Admin_Name----------------->=$the_svn_repository_admin_username"
    echo "----->SVN_Admin_Passwd--------------->=$the_svn_repository_admin_password"
    echo "----->Rsyncd_SVN_Admin_Name---------->=$rsyncd_admin_username"
    echo "----->Rsyncd_SVN_Admin_Passwd-------->=$rsyncd_admin_password"
    echo "----->Rsyncd_hostback_pathname------->=$rsyncd_hostback_pathname"
    ###写入信息到txt
    echo "$the_svn_repository_name" > /$rsyncd_hostback_pathname/SVN_Name
    echo "$the_svn_repository_path" > /$rsyncd_hostback_pathname/SVN_PATH
    echo "$the_svn_repository_admin_username" > /$rsyncd_hostback_pathname/SVN_Admin_Name
    echo "$the_svn_repository_admin_password" > /$rsyncd_hostback_pathname/SVN_Admin_Passwd
    echo "$rsyncd_admin_username" > /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Name
    echo "$rsyncd_admin_password" > /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Passwd
    echo "$rsyncd_hostback_pathname" > /$rsyncd_hostback_pathname/Rsyncd_SVN_Back_Path
    ###查看输出txt
    #echo "SVN_Name=`cat /$rsyncd_hostback_pathname/SVN_Name.txt`"
    #echo "SVN_PATH=`cat /$rsyncd_hostback_pathname/SVN_PATH.txt`"
    #echo "SVN_Admin_Name=`cat /$rsyncd_hostback_pathname/Admin_Name.txt`"
    #echo "SVN_Admin_Passwd=`cat /$rsyncd_hostback_pathname/SVN_Admin_Passwd.txt`"
    #echo "Rsyncd_SVN_Admin_Name=`cat /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Name.txt`"
    #echo "Rsyncd_SVN_Admin_Passwd=`cat /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Passwd.txt`"
    #echo "Rsyncd_SVN_Admin_Path=`cat /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Path.txt"
    #echo "Rsyncd_SVN_Back_Path=`cat /$rsyncd_hostback_pathname/Rsyncd_SVN_Back_Path.txt`"
    #echo "Rsyncd_SVN_Back_Path_Full=`cat /$rsyncd_hostback_pathname/Rsyncd_SVN_Back_Path_Full.txt`"
    ###
    #安装加密并删除加密文件输出AES:
    SVN_Name=`cat /$rsyncd_hostback_pathname/SVN_Name`
    SVN_PATH=`cat /$rsyncd_hostback_pathname/SVN_PATH`
    SVN_Admin_Name=`cat /$rsyncd_hostback_pathname/SVN_Admin_Name`
    SVN_Admin_Passwd=`cat /$rsyncd_hostback_pathname/SVN_Admin_Passwd`
    Rsyncd_SVN_Admin_Name=`cat /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Name`
    Rsyncd_SVN_Admin_Passwd=`cat /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Passwd`
    Rsyncd_SVN_Back_Path=`cat /$rsyncd_hostback_pathname/Rsyncd_SVN_Back_Path`
    ###
    echo $SVN_Name | openssl aes-128-cbc -k 123 -base64 > /$rsyncd_hostback_pathname/SVN_Name;gzexe /$rsyncd_hostback_pathname/SVN_Name;rm -f /$rsyncd_hostback_pathname/*~
    echo $SVN_PATH | openssl aes-128-cbc -k 123 -base64 > /$rsyncd_hostback_pathname/SVN_PATH;gzexe /$rsyncd_hostback_pathname/SVN_PATH;rm -f /$rsyncd_hostback_pathname/*~
    echo $SVN_Admin_Name | openssl aes-128-cbc -k 123 -base64 > /$rsyncd_hostback_pathname/SVN_Admin_Name;gzexe /$rsyncd_hostback_pathname/SVN_Admin_Name;rm -f /$rsyncd_hostback_pathname/*~
    echo $SVN_Admin_Passwd | openssl aes-128-cbc -k 123 -base64 > /$rsyncd_hostback_pathname/SVN_Admin_Passwd;gzexe /$rsyncd_hostback_pathname/SVN_Admin_Passwd;rm -f /$rsyncd_hostback_pathname/*~
    echo $Rsyncd_SVN_Admin_Name | openssl aes-128-cbc -k 123 -base64 > /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Name;gzexe /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Name;rm -f /$rsyncd_hostback_pathname/*~
    echo $Rsyncd_SVN_Admin_Passwd | openssl aes-128-cbc -k 123 -base64 > /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Passwd;gzexe /$rsyncd_hostback_pathname/Rsyncd_SVN_Admin_Passwd;rm -f /$rsyncd_hostback_pathname/*~
    echo $Rsyncd_SVN_Back_Path | openssl aes-128-cbc -k 123 -base64 > /$rsyncd_hostback_pathname/Rsyncd_SVN_Back_Path;gzexe /$rsyncd_hostback_pathname/Rsyncd_SVN_Back_Path;rm -f /$rsyncd_hostback_pathname/*~
    ###
    mkdir -p /Rsyncd_Host_Path/
    echo "$rsyncd_hostback_pathname" > /Rsyncd_Host_Path/rsyncd_hostback_pathname
    echo $? exit 0
  • 相关阅读:
    PHP 去除HTML标签 HTML实体转字符 br转
    PHP while使用
    js滚动条滚动到某个元素位置
    js按键监听
    用onerror处理图片获取失败问题
    windows 查看端口占用以及关闭该进程
    js获取当前时间戳 不需毫秒数
    escape,encodeURI,encodeURIComponent的区别
    php 获取中文长度 截取中文字符串
    将时间转换为xxx天前 xxx..前
  • 原文地址:https://www.cnblogs.com/huixst/p/11595521.html
Copyright © 2011-2022 走看看