Veeam Linux Backup no Elbrus OS. Substituição de importação ['?' | '.' | '!']

Olá pessoal.

Artigos recentes sobre a substituição de Habré Import na prática. Parte 1. Opções e não por muito tempo, a música tocou ... ou como o OS Elbrus nunca se tornou livre não me deixou indiferente. Decidi estudar esse problema na chave da tarefa de backup. Além disso, neste artigo são mencionados os produtos Veeam Software, o que significa que o problema pode ser relevante precisamente no contexto da substituição de importações.

imagem
imagem de origem

Antes de tudo, decidi fazer o download do Elbrus OS, ou melhor, apenas um kit de distribuição acessível para a arquitetura x86_64, ver como funciona e tentar instalar o Veeam Agent for Linux nele. Aqueles que desejam descobrir o que aconteceu, por favor, sob gato.

Então, uma pequena digressão, caso contrário, de repente alguém não sabe. Elbrus é um processador com um sistema de instruções bastante específico. Além disso, há o software Elbrus OS. E - ao contrário de um equívoco comum - não é necessário que o Elbrus OS tenha um complexo de hardware baseado no processador Elbrus. Existe o "Elbrus PDK para x86" - na verdade, ele apareceu no domínio público como um disco de instalação. A propósito, há uma nota de rodapé “PDK - kit de desenvolvimento de plataforma, kit de desenvolvimento” - excelente, o que significa que existe pelo menos um compilador.

Outro pequeno recuo forçado. O fato é que uma vez lidei com software doméstico, como MSVS e RTO Baget. Tive experiência trabalhando com a base de elementos domésticos, incluindo o processador do MCST. Portanto, posso dizer com toda a responsabilidade que existe uma certa especificidade nessa área e tentarei não abordá-la neste artigo. Quando eu realmente quiser, colocarei a tag [TBD]. Então, tentaremos fazer sem trollagem direta e gemidos banais. No final, a indústria de defesa russa e as agências governamentais precisam ser entendidas. O país é grande - o orçamento é pequeno .. [TBD].

Zero stage - faça o download. Vale ressaltar que as notícias de que o Elbrus OS ficou disponível causaram ressonância, de modo que o servidor de distribuição estava inoperante. [TBD] Obrigado a Yandex e o engenheiro que pensou em mudar para lá. Portanto, a velocidade do download é boa.

O primeiro passo é a instalação. Coloquei o primeiro hipervisor gratuito disponível. Eu aloquei dois núcleos, alguns shows de RAM, 32 MB por vídeo (haverá uma interface gráfica lá, pensei). O disco como de costume - 32 GB.
Lançou a instalação. Como não usei as instruções de instalação, não posso comentar. A interface de instalação da TUI é bastante minimalista.


Bem, excelente, sem um mouse, vamos nos virar.

Eu lidei com a próxima janela da segunda tentativa. Por que não instalar sr0 [TBD] por padrão ao instalar a partir do disco?
Selecione a fonte do CD-ROM, vá mais longe.



Escolhendo o fuso horário, percebi subitamente que o sistema usa o processo de inicialização init e estou trabalhando no TTY0.



OK, então vamos levar Elbrus à comunidade Old Believer [TBD]. Em princípio, isso é bom: você não precisa pedir à fonte para ver como o processo de download funciona, pois tudo está em scripts.

O resto é quase sem importância: colocamos tudo e concordamos. Ao longo do caminho, descobrimos que o kernel é usado 3.14.79-13.84. Hmm, o Debian 7 tinha 3,2 [TBD].

Em seguida, selecione o particionamento do disco por padrão e ... Vemos um aviso:



Hmm, de alguma forma, o particionamento mal automático lidou com um disco de 32 GB. Não mudei o disco. Concluí uma missão com layout de disco manual no estilo "tudo em um". Eu tive que instalar o ext3, pois / boot não pôde estar no ext4.
O sistema levantou-se sem incidentes.

A segunda etapa é a busca de alternativas.
Tendo vasculhado o conteúdo do segundo disco, entendi que é um repositório com mais. pacotes. E olhando para /etc/apt/sources.list, percebi que precisava montá-lo em / mnt / cdrom. Mas não encontrei o / etc / os-release. Mas existe / etc / mcst-version com o conteúdo de 3.0-rc36. 3.0 - esta é provavelmente a versão - parece convergir, mas rc36? Em geral, o software de terceiros provavelmente não será capaz de reconhecer essa distribuição de maneira clássica.

Na seção raiz, o diretório / mcst chama sua atenção e, com um coração afundado, encontrei / mcst / backup. Ou seja, existe uma ferramenta de backup, e é incorporada ao sistema! Ótimo, pensei, vamos ver como funciona!

Descobriu-se que existe um script bash / mcst / bin / backup no tamanho de 4Kb, que fornece cópia de arquivos. Por padrão, para o diretório / mcst / backup. Na fonte, esperava ver o comando rsync, mas não está na configuração padrão. O script simplesmente copia os arquivos. O comando é mais ou menos assim:

cp -rpdx <file backup> <file> 

O arquivo inteiro / mcst / bin / backup está aqui
Eu aviso imediatamente que não basta entender completamente esse script. Ele extrai funções de / mcst / bin / source, que é como uma biblioteca de funções. Eu não o citei (44KB).
 #!/bin/bash unalias -a set +vx source $(dirname $0)/source [[ $? != 0 ]] && exit 1 OPTIONS="hvcdrRil:L:" usage() { echo "Usage: $PROG_NAME [-$OPTIONS] [backup]" echo " h - this help" echo " v vv vvv - verbose, very verbose, extremly verbose" echo " c - create backup" echo " d - diffs backup and system" echo " r - recovery system" echo " R - remove backup" echo " i - prompt before backup removing" echo " l list - additional backup files list" echo " L list - global backup files list" echo " backup - backup directory, default /mcst/backup/backup" } init_prog() { typeset flg=0 while getopts $OPTIONS opt do case $opt in h ) usage; exit 0;; v ) (( verbose = verbose + 1 )); set_verbose;; c ) flg=1; c_flg=1;; d ) flg=1; d_flg=1;; r ) flg=1; r_flg=1;; R ) flg=1; R_flg=1;; i ) i_flg=1;; l ) l_flg=1; list_arg="$list_arg $OPTARG";; L ) L_flg=1; LIST_arg="$LIST_arg $OPTARG";; * ) usage "Invalid option"; exit 1;; esac done set_verbose check_su init_variables shift $((OPTIND-1)) if (( $# > 1 )) then echo_fatal "invalid arguments number, exp 0|1, act $#" exit 1 fi [[ $# = 1 ]] && BACKUP=$1 echo "Backup directory is $BACKUP" if [[ $L_flg = 1 ]] then backup_list="$LIST_arg" elif [[ $c_flg != 1 && $R_flg != 1 ]] then get_output_cmd "cat $BACKUP/$BACKUP_LIST_NAME" backup_list="$output_cmd" else get_output_cmd "get_backup_list" backup_list="$output_cmd" fi if [[ $l_flg = 1 ]] then backup_list="$backup_list $list_arg" fi if [[ $flg = 0 ]] then if [[ -d $BACKUP ]] then ls -laR $BACKUP else echo_info "Cannot access $BACKUP" fi echo "backup_list=$backup_list" exit 0 fi ### echo "Backup list: $backup_list" } create_file() { typeset f=$1 fr=$2 typeset fb [[ -z $fr ]] && fr=$f fb=${f#/} fb=$BACKUP/$fb xcmd="rm -rf $fb" set_cmd "$xcmd" run_cmd xcmd="mkdir -p $fb" set_cmd "$xcmd" run_cmd if [[ -a $fr ]] then xcmd="cp -rpdx $fr $fb/file" set_cmd "$xcmd" run_cmd xcmd="touch $fb/create" set_cmd "$xcmd" run_cmd else xcmd="touch $fb/delete" set_cmd "$xcmd" run_cmd fi } diff_file() { typeset f=$1 typeset fb fb=${f#/} fb=$BACKUP/$fb if [[ -f $fb/delete ]] then echo_info "$f absent" elif [[ -f $fb/create ]] then # echo "state: create $f" if [[ ! -a $f ]] then echo_info "cannot access $f" else xcmd="diff -r $f $fb/file" echo "$xcmd" set_cmd "$xcmd" "" "0 1 2" run_cmd fi else echo_fatal "wrong $f backup" exit 1 fi } recovery_file() { typeset f=$1 typeset fb fb=${f#/} fb=$BACKUP/$fb if [[ ! -a $fb ]] then echo_fatal "cannot access $fb" exit 1 fi xcmd="rm -rf $f" set_cmd "$xcmd" run_cmd if [[ -f $fb/delete ]] then : elif [[ -f $fb/create ]] then xcmd="cp -rpdx $fb/file $f" set_cmd "$xcmd" run_cmd else echo_fatal "wrong $fb backup" exit 1 fi } remove_backup() { echo "Remove backup" if [[ ! -d $BACKUP ]] then echo_info "Cannot access $BACKUP" return fi if [[ ! -f $BACKUP/$BACKUP_LIST_NAME ]] then echo_fatal "$BACKUP_LIST_NAME absent, remove backup manually" exit 0 fi answer= if [[ $i_flg = 1 ]] then echo -n "Remove $BACKUP directory (yes/...)?" read answer else answer=yes fi if [[ $answer = yes ]] then xcmd="rm -rf $BACKUP" set_cmd "$xcmd" run_cmd fi } recovery_backup() { echo "Recovery system from $BACKUP" for f in $backup_list do get_output_cmd "get_mount_point $f" mnt=$output_cmd get_output_cmd "is_ro_mounted $mnt" mnt=$output_cmd if [[ ! -z $mnt ]] then remount_rw_fs $mnt fi recovery_file $f if [[ ! -z $mnt ]] then remount_ro_fs $mnt fi done echo "The system is ready, reboot the system manually" } create_backup() { echo "Create backup" xcmd="mkdir -pm0777 $BACKUP" set_cmd "$xcmd" run_cmd for v in $backup_list do f=${v%%:*} backup_list2="$backup_list2 $f" fr=${v#*:} create_file $f $fr done echo "$backup_list2" >$BACKUP/$BACKUP_LIST_NAME } diff_backup() { echo "Diffs system and backup" if [[ ! -d $BACKUP ]] then echo_fatal "cannot access $BACKUP" exit 1 fi for f in $backup_list do diff_file $f done } main() { typeset f mnt mnt_list answer if [[ $R_flg = 1 ]] then remove_backup fi if [[ $r_flg = 1 ]] then recovery_backup fi if [[ $c_flg = 1 ]] then create_backup fi if [[ $d_flg = 1 ]] then diff_backup fi } init_prog "$@" main exit 0 


Embora eu talvez não tenha entendido o que? Talvez alguém nos comentários possa explicar: como esse script fornece backup de dados seguro e confiável? [TBD]

rsync, a propósito, está em adição. repositórios. Versão 3.1.3. Eu acho que o uso do rsync ainda é a melhor alternativa para / mcst / bin / backup.

Em seguida, decidi colocar o Veeam Agent for Linux novo . Alguém perguntará: "O que a Veeam tem a ver com substituição de importação?" Sim, não está no registro, mas é certificado pelo FSTEC, o que significa que, na ausência de alternativas, pode ser usado. Depois de passar cerca de quinze minutos em alternativas do registro , consegui encontrar três links na palavra "backup" (nenhum deles relacionado à minha pergunta sobre a palavra "reserva"). Não fiz uma análise aprofundada desses programas - portanto, não tentarei julgar como eles são adequados para fazer backup de máquinas no Linux. Quem precisa - ele tirará uma conclusão e a compartilhará nos comentários.

Estágio três - Instale o Veeam Agent for Linux.
Portanto, o Veeam Agent for Linux consiste em dois pacotes: o módulo do kernel do veeamsnap (a propósito, a fonte está aqui ) e o código do espaço do usuário proprietário na forma do pacote veeam.

Houve um pequeno problema com a instalação do módulo do kernel - a falta do pacote dkms. Este é um serviço que permite criar módulos de kernel a partir da fonte. Como regra, está em todas as distribuições deb. Eu tive que fazer o download de um repositório deb de terceiros. Um satisfeito - o pacote não depende da arquitetura, por isso se destacou como nativo. Por que não foi incluído na lista de pacotes disponíveis, ou melhor, não desenvolveu [TBD]? Talvez se presuma que ninguém deve coletar e executar todos os tipos de módulos de kernel não-MCST. Existe realmente um problema aqui - já que existem cabeçalhos Linux. Ou seja, o módulo, se desejado, pode ser montado manualmente e executado quando a máquina iniciar com um script. Eu acho que você não deve esperar atualizações frequentes do ICST [TBD].

“OK, o módulo levantou-se - a parte mais difícil está por trás”, pensei ... O pacote veeam para o repositório deb é para a plataforma amd64, e o Elbrus OS possui a plataforma x86_64 [TBD]. A diferença, é claro, está apenas no nome, mas essa diferença torna quase todos os pacotes de repositórios deb de terceiros incompatíveis com o Elbrus OS. Esse equívoco irritante é eliminado de maneira elementar: basta analisar o pacote, corrigir as informações sobre a arquitetura e coletá-las novamente. Como fazer isso no Google instantaneamente.
 mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb 

Outro problema são as dependências. Os arquivos necessários parecem existir, mas não há pacotes. Havia uma impressão de que os nomes dos pacotes diferem de "análogos estrangeiros". As bibliotecas podem ser agrupadas de maneira diferente. Não entrei em detalhes, removi quase todas as dependências e a instalação foi concluída.

Em seguida, surgiram problemas com o código de início do serviço. Não havia script /lib/init/vars.sh. Por alguma razão, "Elbrus" está passando sem isso, então vamos removê-lo também. Então tivemos que substituir a função de saída da mensagem: não havia funções log_daemon_msg e log_end_msg. Tendo vasculhado o arquivo / lib / lsb / init-functions, encontrei a função log_success_msg - ela funcionará para nós em experimentos. A propósito, no arquivo / lib / lsb / init-functions, a linha "# Source SuSE`s rc functions" no início do arquivo [TBD].

Após um processamento tão duro do pacote com um arquivo, o backup de toda a máquina na esfera NFS foi iniciado com êxito. A montagem de backup também teve êxito. Então, suponho que, para fazer backup de uma máquina com o Elbrus PDK, baixado para "exatamente assim" sem nenhuma obrigação, o Veeam Agent for Linux é definitivamente adequado. Mesmo depois de todas as modificações com um arquivo.

Obviamente, formalmente, o kit de distribuição do Elbrus OS não é suportado, pois não está incluído na lista de kits suportados. Além disso, o Veeam Agent for Linux não foi testado pelo departamento de controle de qualidade, portanto. sem suporte (pelo menos no momento da publicação do artigo).

Espero que este artigo seja útil para aqueles que estão tentando implementar o pedido nº 334, de 29 de junho de 2017. Meu para você ... [TBD].

Source: https://habr.com/ru/post/pt447960/


All Articles