Ola a todos.
Artigos recentes sobre Habré
En primeiro lugar, decidín descargar o sistema operativo Elbrus, ou mellor dito, só a distribución dispoñible para a arquitectura x86_64, ver como funciona e tentar instalar Veeam Agent para Linux nel. Se queres saber o que saíu disto, consulta cat.
Entón, unha pequena digresión, por se alguén non o sabe. "Elbrus" é así
Outra pequena retirada forzada. O caso é que unha vez tratei con software doméstico, como MSVS e Baguette RTOS. Tiven experiencia traballando con compoñentes domésticos, incluído un procesador de MCST. Polo tanto, podo dicir con total responsabilidade que hai unha certa especificidade neste ámbito e tentarei non tocar nela no artigo. Cando realmente queira, poñerei a etiqueta [por determinar]. Así que tentaremos prescindir de troleos rotundos e xemidos banais. Ao final, hai que entender a industria de defensa rusa e as axencias gobernamentais. Gran país - pequeno orzamento... [Por determinar].
Etapa cero - descargar. Cabe destacar que a noticia de que o sistema operativo Elbrus está dispoñible causou resonancia, tanto que o servidor de distribución caeu. [Por determinar] Grazas a Yandex e ao enxeñeiro que pensaron en trasladalo alí. Polo tanto, a velocidade de descarga é boa.
O primeiro estadio - instalación. Instaleino no primeiro hipervisor que estaba dispoñible para uso gratuíto. Asignei dous núcleos, un par de gigas de RAM, 32 MB para vídeo (haberá unha interface gráfica, pensei). O disco é como de costume - 32 GB.
Comecei a instalación. Non usei as instrucións de instalación, polo que non podo comentar. A interface de instalación de TUI é moi minimalista.
Ben, xenial, podemos prescindir dun rato.
Conseguín a seguinte xanela no segundo intento. Por que non selecciona o dispositivo predeterminado sr0 [TBD] ao instalar desde o disco?
Seleccione a fonte do CD-ROM e continúe.
Mentres seleccionaba a zona horaria, de súpeto decateime de que o sistema usa o proceso de inicio de inicio e estou traballando desde TTY0.
Está ben, entón clasifiquemos "Elbrus" como comunidade
O resto case non ten importancia: poñemos todo e estamos de acordo. Ao longo do camiño, descubrimos que o núcleo úsase 3.14.79-13.84. Hmm, Debian 7 tiña 3.2 [TBD].
A continuación, seleccione a partición de disco predeterminada e... Vemos un aviso:
Hmm, dalgún xeito a partición automática non se enfrontou ben cun disco de 32 gigas. Non cambiei o disco; completei a misión coa partición manual do disco no estilo "todo en un". Tiven que instalar ext3, xa que /boot non podía estar en ext4.
O sistema xurdiu sen incidentes.
A segunda etapa - buscar alternativas.
Despois de rebuscar no contido do segundo disco, decateime de que este é un repositorio con adicionais. en paquetes. E mirando /etc/apt/sources.list, decateime de que hai que montarlo en /mnt/cdrom. Pero non atopei /etc/os-release. Pero hai /etc/mcst-versión co contido 3.0-rc36. 3.0 é probablemente a versión - parece encaixar, pero rc36? En xeral, o software de terceiros probablemente non poderá recoñecer esta distribución da forma clásica.
Na partición raíz, o directorio /mcst chama a miña atención e alí, co corazón afundido, descubrín /mcst/backup. É dicir, hai unha ferramenta de copia de seguridade e está integrada no sistema. "Xenial", pensei, "A ver como funciona isto!"
Resultou que hai un script bash de 4Kb /mcst/bin/backup que proporciona copia de ficheiros. Por defecto - ao directorio /mcst/backup. No código fonte esperaba ver o comando rsync, pero non está na configuración predeterminada. O script simplemente copia ficheiros. O comando parece algo así:
cp -rpdx <file backup> <file>
Todo o ficheiro /mcst/bin/backup está aquíAdvírtoche de inmediato que este guión por si só non é suficiente para entendelo completamente. Extrae funcións de /mcst/bin/source, que é algo así como unha biblioteca de funcións. Non o incluín (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
Aínda que, quizais non entendín algo? Quizais alguén poida explicar nos comentarios: como garante este script unha copia de seguridade de datos segura e fiable? [Por determinar]
rsync, por certo, está incluído no complemento. repositorios. Versión 3.1.3. Creo que usar rsync aínda é unha mellor alternativa á aplicación /mcst/bin/backup.
A continuación, decidín poñer un novo Veeam Agent para Linux. Alguén preguntará: "Que teñen que ver Veeam e a substitución de importacións?" Si, non está no rexistro, pero está certificado polo FSTEC, o que significa que en ausencia de alternativas pódese utilizar. Dedicar quince minutos a alternativas de
terceira fase — instalación de Veeam Agent para Linux.
Entón, Veeam Agent para Linux consta de dous paquetes: o módulo do núcleo veeamsnap (por certo,
Houbo un pequeno problema coa instalación do módulo do núcleo: o paquete dkms que falta. Este é un servizo que che permite construír módulos do núcleo desde a fonte. Como regra xeral, está dispoñible en todas as distribucións de deb. Tiven que descargalo desde un repositorio de deb de terceiros. Unha cousa que me fixo feliz é que o paquete non depende da arquitectura, polo que encaixa como un nativo. Por que non se incluíu na lista de paquetes dispoñibles, ou mellor dito, non se desenvolveu [por determinar]? Quizais se asume que ninguén debería construír e executar ningún módulo do núcleo que non sexa MCST. Realmente hai unha discrepancia aquí, xa que hai cabeceiras de Linux. É dicir, o módulo, se o desexa, pódese montar a man e lanzarse mediante un script cando se inicia a máquina. Creo que non deberías esperar actualizacións frecuentes de MCST [TBD].
"OK, o módulo está instalado; a parte máis difícil rematou", pensei... O paquete veeam para o repositorio deb é para a plataforma amd64 e o sistema operativo Elbrus ten unha plataforma x86_64 [TBD]. A diferenza, por suposto, só está no nome, pero esta diferenza fai que case todos os paquetes de repositorios de deb de terceiros sexan incompatibles co sistema operativo Elbrus. Este molesto malentendido pódese eliminar de forma sinxela: basta con desmontar o paquete, corrixir a información sobre a arquitectura e montar de novo. Como facelo
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Outro problema son as dependencias. Os ficheiros necesarios parecen estar alí, pero os paquetes non. A impresión era que os nomes dos paquetes diferían dos seus "análogos importados". Quizais as bibliotecas estean empaquetadas de forma diferente. Non entrei en demasiados detalles, eliminei case todas as dependencias e a instalación seguiu adiante.
Despois xurdiron problemas co código de inicio do servizo. Faltaba o script /lib/init/vars.sh. Por algún motivo, Elbrus consegue sen el, polo que tamén o eliminaremos. A continuación, tivemos que substituír a función de saída da mensaxe: faltaban as funcións log_daemon_msg e log_end_msg. Despois de rebuscar no ficheiro /lib/lsb/init-functions, atopei a función log_success_msg; será bo para nós para experimentos. Por certo, no ficheiro /lib/lsb/init-functions a liña "# Source SuSE`s rc functions" está ao comezo do ficheiro [TBD].
Despois dun procesamento tan brusco do paquete cun ficheiro, lanzouse con éxito a copia de seguridade de toda a máquina no recurso compartido NFS. O montaxe de copia de seguridade tamén foi exitoso. Entón, creo que para facer unha copia de seguranza dunha máquina co Elbrus PDK, descargado "así" sen ningunha obriga, Veeam Agent para Linux é definitivamente axeitado. Mesmo despois de todas as modificacións cun ficheiro.
Por suposto, o kit de distribución Elbrus OS non se admite formalmente, xa que non está incluído na lista de admitidos. Ademais, o departamento de control de calidade non probou o axente de Veeam para Linux. non hai apoio (polo menos no momento da publicación do artigo).
Espero que o artigo sexa de utilidade para aqueles que intenten aplicar a orde no 334, do 29.06.2017 de xuño de XNUMX. O meu para ti... [TBD].
Fonte: www.habr.com