Уголок СУ-11 на просторах вселенной

воскресенье, 29 декабря 2013 г.

Добавление SLIC таблицы в виртуальный BIOS Proxmox'а

1. apt-get install build-essential iasl
2. wget http://code.coreboot.org/p/seabios/downloads/get/seabios-1.7.3.tar.gz
3. tar xzf sea*
4. mv seabios-1.7.3 seabios
5. cd ./seabios/src
6. тут берем патч для биоса http://forum.proxmox.com/attachment.php?attachmentid=1647&d=1377897028
7. ищем SLIC таблицу, например эту https://app.box.com/s/54qoducwsm2m0bxt857s от сюда http://forums.mydigitallife.info/threads/5952-OA-2-x-SLIC-amp-OEMCERT-Collection/page128
8. Конвертируем нужный SLIC в Hex xxd -i source-bin-file.bin | grep -v len | sed 's/unsigned char.*/static char SLIC[] = {/' > acpi-slic.hex
9. Еще можно взять SLIC в гипервизора xxd -i /sys/firmware/acpi/tables/SLIC | grep -v len | sed ‘s/unsigned char.*/static char SLIC[] = {/’ > acpi-slic.hex
10. все кладем в src
11. patch -p1 < acpi_slic.patch
12. указываем acpi.c
13. cd ..
14. make
15. mkdir /usr/share/kvm/bkp
16. cp /usr/share/kvm/* /usr/share/kvm/bkp/
17. cp ./out/*.bin /usr/share/kvm/
18. cp ./out/*.aml /usr/share/kvm/
также не забываем установить сертификат Dell и серийный номер. Этих трех компонентов будет достаточно для офлайн активации.

воскресенье, 3 ноября 2013 г.

centos медленно резолвит имена

Заметил странное. centos 6 медленно резолвит DNS имена. Помогло следующее: добавить options single-request-reopen в /etc/resolv.conf

понедельник, 30 сентября 2013 г.

вторник, 8 января 2013 г.

VB cкрипт для бэкапа 1С баз, отключает пользователей, блокирует базу, монтирует сетевой диск, выгружает, все закрывает :)


Dim WshNetwork ' объект сети
Dim WshShell ' шел ОС
Dim WshEnv ' переменное окружение шела
Dim ServerName ' DNS имя сервера с 1С
Dim InfoBasesAdminName ' админ базы
Dim InfoBasesAdminPass ' пароль админа базы
Dim ClasterPortNumber ' порт кластера
Dim ClasterAdminName ' админ кластера
Dim ClasterAdminPass ' пароль админа кластера
Dim LockPermissionCode ' код блокировки базы
Dim LockMessageText ' сообщение о блокировке базы
Dim FileName ' имя файла бэкапа
Dim DumpPath ' путь куда бэкапить
Dim ComConnector ' ком объект 1С
Dim ConnectToWProc ' коннектор к 1С процессу
Dim ServerAgent ' адрес агента 1С
Dim PrgDirx86 ' exe 1Ски
Dim CommandExe ' команда на запуск
Dim NetPath ' сетевой путь к бэкапам

Function init()
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set ComConnector = CreateObject("v82.COMConnector")
Set ServerAgent = ComConnector.ConnectAgent(ServerName)
Set WshShell = CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment
NetPath = "\\192.168.1.1\backups\1C\dt"
ServerName = "srv-1csql"
InfoBasesAdminName = "backuper"
InfoBasesAdminPass = "123backuper"
ClasterPortNumber = 1541
ClasterAdminName = "Administrator"
ClasterAdminPass = "пароль админа кластера"
LockPermissionCode = "12345"
LockMessageText = vbCrLf + "База закрыта на создание резервной копии, примерно, на 10 минут"
DumpPath = "X:"
' получаем exe 1Ски, оно будет делать выгрузку
PrgDirx86 = WshShell.RegRead("HKEY_CLASSES_ROOT\CLSID\{5CD98F13-1050-4b43-84F2-33AD97CFC287}\LocalServer32\")
End Function

Function destroy()
WshNetwork = Null
ComConnector = Null
ServerAgent = Null
ConnectToWProc = Null
WshShell = Null
WshEnv = Null
End Function

Function Base_BKP(InfoBaseName) ' имя базы для бэкапа
Dim FindInfoBase ' признак успешного поиска базы
Dim Clasters ' массив кластеров сервера у агента сервера
Dim Claster ' кластер 1С
Dim WorkingProcesses ' массив рабочих процессов
Dim WorkingProcess ' рабочий процесс в кластере 1С
Dim InfoBases ' массив рабочих баз рабочего процесса
Dim InfoBase ' информационная база
Dim Connections ' массив подключений
Dim Connection ' подключение

FindInfoBase = False
FileName = DumpPath & "\" & InfoBaseName & "_" & _
Right("0" & Day(Now), 2) & "." & Right("0" & Month(Now), 2) & "." & Year(Now) & _
"-" & Right("0" & Hour(Now), 2) & "." & Right("0" & Minute(Now), 2) & "." + Right(Second(Now), 2) & ".dt"          
CommandExe = """" + PrgDirx86 + """ CONFIG /S" + ServerName + "\" + InfoBaseName + _
" /N" + InfoBasesAdminName + " /P" + InfoBasesAdminPass + _
" /UC" + LockPermissionCode + " /DisableStartupMessages /DumpIB " + FileName

Clasters = ServerAgent.GetClusters()
For Each Claster In Clasters
If Claster.MainPort = ClasterPortNumber Then
ServerAgent.Authenticate Claster, ClasterAdminName, ClasterAdminPass ' аутентифицируемся в кластере
WorkingProcesses = ServerAgent.GetWorkingProcesses(Claster) ' получаем список массив рабочих процессов кластера
For Each WorkingProcess In WorkingProcesses
If WorkingProcess.Running = 1 Then
' подключаемся к рабочему процессу
Set ConnectToWProc = ComConnector.ConnectWorkingProcess("tcp://" + WorkingProcess.HostName + ":" + CStr(WorkingProcess.MainPort))
ConnectToWProc.AuthenticateAdmin ClasterAdminName, ClasterAdminPass
          ConnectToWProc.AddAuthentication InfoBasesAdminName, InfoBasesAdminPass
      ' ищим базу данных
      InfoBases = ConnectToWProc.GetInfoBases() ' получаем массив баз данных
      For Each InfoBase In InfoBases
  If UCase(InfoBase.Name) = UCase(InfoBaseName) Then ' нашли нужную нам базу
      FindInfoBase = True
              Exit For
      End If
      Next
End If  
    ' закрываем все активные подключения во всех рабочих процессах
    Connections = ConnectToWProc.GetInfoBaseConnections(InfoBase) ' получаем массив соединений с базой
    For Each Connection In Connections
    If Connection.AppId <> "COMConsole" Then
    ConnectToWProc.Disconnect(Connection) ' разрываем соединения с базой
End If
    Next
Next
End If
Next

If FindInfoBase = True Then
' блокируем базу
InfoBase.ConnectDenied = True        
InfoBase.DeniedFrom = CStr(Now())
   InfoBase.DeniedTo = CStr(Now() + 1 / 300)
   InfoBase.DeniedMessage = LockMessageText
   InfoBase.PermissionCode = LockPermissionCode
   ConnectToWProc.UpdateInfoBase(InfoBase)

 
WshNetwork.MapNetworkDrive DumpPath, NetPath, "false", "CORP\backuper", "123backuper"  
   ' архивируем базу
WshShell.Run CommandExe, 0, True
WshNetwork.RemoveNetworkDrive DumpPath, "true", "true"
' отключаем блокировку базы
InfoBase.ConnectDenied = False
ConnectToWProc.UpdateInfoBase(InfoBase)
FindInfoBase = False
End If
End Function

init()
'Base_BKP("ka_bf")
Base_BKP("new_work")
destroy()