安裝研發伺服器

来源:https://www.cnblogs.com/dabbler/archive/2020/02/07/12273649.html
-Advertisement-
Play Games

重裝伺服器真是一個耗精力的過程,尤其是用ghost做數據全盤備份,數據ghost恢復蝸牛一般的速度,再加上ghost居然人生第一次碰到了軟體會異常問題,真的是讓人痛苦不堪啊。從現在想來,可能不如用imagex來備份數據,imagex至少可以直接mount,省了我不斷的恢復過程啊。回想起來,選ghos ...


重裝伺服器真是一個耗精力的過程,尤其是用ghost做數據全盤備份,數據ghost恢復蝸牛一般的速度,再加上ghost居然人生第一次碰到了軟體會異常問題,真的是讓人痛苦不堪啊。從現在想來,可能不如用imagex來備份數據,imagex至少可以直接mount,省了我不斷的恢復過程啊。回想起來,選ghost唯一的理由,應該是:全盤備份,可以必要時候全盤恢復。不過,這個不是這裡的重點。這裡主要講服務安裝時候,自動化腳本構建。當然,使用構建腳本的方法,可能真的不如直接手動操作,但是,萬一需要第二台或第二次再來一遍呢。當然,程式員對於人肉方法,也是傾向於不屑一顧的。

1. 組織架構

公司轉向了事業部制,大概的公司結構如下: 公司結構 基本SVN設計是,每個事業部有一個SVN庫,下麵設一級目錄,HW/FPGA/FW/SW,分別授權不同的工程師訪問。

2. 創建用戶和用戶組

用戶歸屬於事業部,需要創建事業部組,事業部下根據研發性質,在細分成HW/FPGA/FW/SW用戶組,創建用戶用命令“net user”,從Excel生成命令腳本使用Excel的VBA生成,代碼如下:

Sub CreateScript()
    Dim row As Integer, i As Integer
    Dim tsUsr As TextStream, tsSmtp As TextStream
    Dim usr As String, grp As String, cmt As String
    Dim outFolder As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    outFolder = "D:\BYHX\Server\"
    Set tsUsr = fso.OpenTextFile(outFolder & "0.servadmin.cmd", ForWriting, True)
    Set tsSmtp = fso.OpenTextFile(outFolder & "0.sendmail.ps1", ForWriting, True)
    
    ' PowerShell,需要先執行以下的語句,才能執行ps1腳本
    tsSmtp.WriteLine "# Execute below command first, then ps1 script will allowed."
    tsSmtp.WriteLine "# Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser"
    
    ' 創建事業部和大的用戶性質用戶組
    For row = 2 To 18
        grp = Range("L" & row)
        If Left(grp, 2) <> "RD" Then grp = "BU-" & grp
        tsUsr.WriteLine "net localgroup " & grp & " /add /comment:""" & Range("M" & row) & """"
    Next row
    
    ' 創建事業部下研發分類用戶組,以及列出同類研發事業部組列表
    For row = 2 To 13
        grp = Range("L" & row)
        cmt = Range("M" & row)
        If Left(grp, 2) <> "RD" Then grp = "BU-" & grp
        tsUsr.WriteLine "net localgroup " & grp & "-HW   /add /comment:""" & cmt & " 硬體"""
        tsUsr.WriteLine "net localgroup " & grp & "-FPGA /add /comment:""" & cmt & " FPGA"""
        tsUsr.WriteLine "net localgroup " & grp & "-FW   /add /comment:""" & cmt & " 嵌入"""
        tsUsr.WriteLine "net localgroup " & grp & "-SW   /add /comment:""" & cmt & " 軟體"""
    Next row
    
    For row = 2 To 1000
        usr = Trim(Range("A" & row).Text)
        grp = Trim(Range("D" & row).Text)
        ' 行的A列為空,表示處理結束
        If usr = "" Then Exit For
        ' 非RD的,添加BU首碼
        If Left(grp, 2) <> "RD" Then grp = "BU-" & grp
        ' 添加用戶
        tsUsr.WriteLine "net user " & usr & " """ & Range("B" & row) & """ /add /active:yes /expires:never /fullname:" & Range("C" & row)
        ' 用戶密碼永不過期
        tsUsr.WriteLine "wmic useraccount where name='" & usr & "' set passwordexpires=false"
        ' 把用戶添加到事業部
        tsUsr.WriteLine "net localgroup " & grp & " " & usr & " /add"
        
        ' 根據研發內容,添加用戶到事業部研發組
        If Range("E" & row).Text = "Y" Then tsUsr.WriteLine "net localgroup " & grp & "-HW   " & usr & " /add" & vbCrLf & "net localgroup RD-AllHW   " & usr & " /add"
        If Range("F" & row).Text = "Y" Then tsUsr.WriteLine "net localgroup " & grp & "-FPGA " & usr & " /add" & vbCrLf & "net localgroup RD-AllFPGA " & usr & " /add"
        If Range("G" & row).Text = "Y" Then tsUsr.WriteLine "net localgroup " & grp & "-FW   " & usr & " /add" & vbCrLf & "net localgroup RD-AllFW   " & usr & " /add"
        If Range("H" & row).Text = "Y" Then tsUsr.WriteLine "net localgroup " & grp & "-SW   " & usr & " /add" & vbCrLf & "net localgroup RD-AllSW   " & usr & " /add"
        If Range("I" & row).Text = "Y" Then tsUsr.WriteLine "net localgroup BU-Leader " & usr & " /add"
    Next row
        
    tsUsr.Close
    tsSmtp.Close
    MsgBox "OK"
End Sub

3. 安裝和配置SVN

3.1 建立SVN庫

安裝完畢之後,建立一個Demo庫,手動添加管理賬號的讀寫訪問許可權,拷貝出賬號認證配置文件,再準備好需要的svn的hook文件。 準備好事業部列表文件“1.svn-repo.txt”,每行只有事業部的名稱(從Excel拷貝出來即可),用批處理命令,生成SVN庫,以及離線SVN配置。

for /f %%i in (1.svn-repo.txt) do (
svnadmin create E:\Repositories\%%i
mkdir %%i\conf\
mkdir %%i\hooks\
copy /y VisualSVN-WinAuthz.ini %%i\conf\
copy /y pre-commit.cmd %%i\hooks\
)

3.2 創建一級目錄並配置

用svn命令,管理賬號,創建各個庫的一級目錄:

for /f %%i in (1.svn-repo.txt) do (
svn mkdir https://BYHX-MasterServ:8443/svn/%%i/hw -m "Create hardware folder"
svn mkdir https://BYHX-MasterServ:8443/svn/%%i/fpga -m "Create FPGA folder"
svn mkdir https://BYHX-MasterServ:8443/svn/%%i/fw -m "Create firmware folder"
svn mkdir https://BYHX-MasterServ:8443/svn/%%i/sw -m "Create software folder"
)

用類似的迴圈,用“PsGetsid”工具,獲取用戶的SID信息文件,單個SID信息類似於

SID for my-co-server\whom:
S-1-5-21-316025195-1075053894-3005689260-1012

利用shell腳本,處理SID信息(註意先轉換“sidresult.txt”為unix格式)

cat sidresult.txt | egrep "SID\ for|S\-1" | sed -e 'N;s/\n//g' | sed -e 's/^.*\\//g' > sidlist.txt

處理完信息類似於:

whom:S-1-5-21-316025195-1075053894-3005689260-1012

有了SID信息表之後,用Excel的VBA,處理許可權信息:

Function GetSID(sName As String)
    Dim sidFile As TextStream
    Dim outFolder As String
    Dim str As String, s1 As String
    Dim pos As Integer
    
    outFolder = "D:\BYHX\Server\"
    
    Set sidFile = fso.OpenTextFile(outFolder & "sidlist.txt", ForReading)
    Do While Not sidFile.AtEndOfStream
        str = sidFile.ReadLine
        pos = InStr(str, ":")
        s1 = Left(str, pos - 1)
        If s1 = sName Then
            GetSID = mid(str, pos + 1)
            Exit Do
        End If
    Loop
End Function

Sub ModiPrivilege()
    Dim row As Integer, i As Integer
    Dim outFolder As String
    Dim authFile As TextStream
    Dim str As String, s1 As String
    Dim usr As String, grp As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    outFolder = "D:\BYHX\Server\"

    ' 給負責人添加庫的完全許可權
    For row = 2 To 1000
        usr = Trim(Range("A" & row).Text)
        grp = Trim(Range("D" & row).Text)
        ' 行的A列為空,表示處理結束
        If usr = "" Then Exit For
        ' 非RD的,添加BU首碼
        If Left(grp, 2) <> "RD" Then grp = "BU-" & grp
        
        If Range("I" & row).Text = "Y" Then
            str = outFolder & grp & "\conf\VisualSVN-WinAuthz.ini"
            Set authFile = fso.OpenTextFile(str, ForAppending)
            authFile.WriteLine GetSID(usr) & "=rw"
            authFile.Close
        End If
    Next row

    ' 事業部下研發分類用戶組,設置許可權
    For row = 2 To 13
        grp = Range("L" & row)
        If Left(grp, 2) <> "RD" Then grp = "BU-" & grp
        
        Set authFile = fso.OpenTextFile(outFolder & grp & "\conf\VisualSVN-WinAuthz.ini", ForAppending)
        authFile.WriteLine vbCrLf & "[/hw]"
        authFile.WriteLine GetSID(grp & "-HW") & "=rw"
        authFile.WriteLine vbCrLf & "[/fpga]"
        authFile.WriteLine GetSID(grp & "-FPGA") & "=rw"
        authFile.WriteLine vbCrLf & "[/fw]"
        authFile.WriteLine GetSID(grp & "-FW") & "=rw"
        authFile.WriteLine vbCrLf & "[/sw]"
        authFile.WriteLine GetSID(grp & "-SW") & "=rw"
        authFile.Close
    Next row
    
    MsgBox "OK"
End Sub

將離線的SVN配置文件,複製到SVN庫目錄,重啟SVN服務,SVN配置完成。

4. 發送通知郵件

需要把各個賬戶的密碼,通知到各位同仁。將Excel的用戶名和密碼這兩列,複製到文本文件。轉為unix格式。發送郵件腳本如下:

#!/usr/bin/bash
input="mailaccount.txt"
while IFS= read -r line
do
	_usr=`echo -n $line | gawk '{printf "%s",$1}'`
	_pwd=`echo -n $line | gawk '{printf "%s",$2}' | ./htmlenc.exe`
	cat SwithMailSettings.xml | sed -e "s/__to_person__/$_usr/g" -e "s/__password__/$_pwd/g" > account.xml
	./SwithMail.exe /s /x account.xml
done < "$input"

命令行郵件工具選擇了“SwithMail”,依據的是7 Command Line Utilities to Easily Send Email Using SMTP的推薦。當然,用PowerShell也可以,就是比較麻煩一點點。

 

   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...