Veeam Linux Backup en Elbrus OS. Sustitución de importación ['?' El | '.' El | '!']

Hola a todos

Artículos recientes sobre la sustitución de importaciones de Habré en la práctica. Parte 1. Opciones y no por mucho tiempo, la música sonaba ... o cómo OS Elbrus nunca se volvió libre no me dejó indiferente. Decidí estudiar este problema en la clave de la tarea de copia de seguridad. Además, en este artículo se mencionan los productos de Veeam Software, lo que significa que el problema puede ser relevante precisamente en el contexto de la sustitución de importaciones.

imagen
imagen fuente

En primer lugar, decidí descargar el sistema operativo Elbrus, o mejor dicho, solo el kit de distribución disponible para la arquitectura x86_64, ver cómo funciona e intentar instalar Veeam Agent para Linux en él. Aquellos que deseen saber qué sucedió, por favor, debajo del gato.

Entonces, una pequeña digresión, de lo contrario, de repente alguien no lo sabe. Elbrus es un procesador con un sistema de instrucción bastante específico. Además de eso, existe el software Elbrus OS. Y, contrariamente a un error común, no es necesario que el sistema operativo Elbrus tenga un complejo de hardware basado en el procesador Elbrus. Existe "Elbrus PDK para x86"; de hecho, apareció en el dominio público como un disco de instalación. Por cierto, hay una nota al pie "PDK - kit de desarrollo de plataforma, kit de desarrollo" - excelente, lo que significa que hay al menos un compilador.

Otra pequeña retirada forzada. El hecho es que una vez traté con software doméstico, como MSVS y RTO Baget. Tenía experiencia trabajando con la base de elementos domésticos, incluido el procesador del MCST. Por lo tanto, puedo decir con toda responsabilidad que hay una cierta especificidad en esta área, y trataré de no mencionarlo en este artículo. Cuando realmente quiera, pondré la etiqueta [TBD]. Por lo tanto, intentaremos prescindir de los curiosos y los gemidos banales. Al final, la industria de defensa rusa y las agencias gubernamentales deben ser entendidas. El país es grande, el presupuesto es pequeño ... [TBD].

Etapa cero : descarga. Es de destacar que la noticia de que el sistema operativo Elbrus estuvo disponible causó una resonancia, de modo que el servidor de distribución estaba inactivo. [TBD] Gracias a Yandex y al ingeniero que pensó en llevarlo allí. Entonces la velocidad de descarga es buena.

El primer paso es la instalación. Puse el primer hipervisor gratuito disponible. Asigné dos núcleos, un par de conciertos de RAM, 32 MB por video (creo que habrá una interfaz gráfica allí). El disco como de costumbre - 32 GB.
Lanzado la instalación. No utilicé las instrucciones de instalación, por lo que no puedo comentarlo. La interfaz de instalación de TUI es extremadamente minimalista.


Bueno, excelente, sin un mouse, entonces pasaremos.

Me ocupé de la siguiente ventana del segundo intento. ¿Por qué no instalar sr0 [TBD] por defecto al instalar desde el disco?
Seleccione la fuente del CD-ROM, vaya más allá.



Al elegir la zona horaria, de repente me di cuenta de que el sistema usa el proceso de arranque de inicio, y estoy trabajando desde TTY0.



Bien, entonces llevemos a Elbrus a la comunidad Old Believer [TBD]. En principio, esto es bueno: no necesita pedir la fuente para ver cómo funciona el proceso de descarga, ya que todo está en scripts.

El resto es casi sin importancia: ponemos todo y estamos de acuerdo. En el camino, descubrimos que el núcleo se usa 3.14.79-13.84. Hmm, Debian 7 tenía 3.2 [TBD].

A continuación, seleccione la partición del disco de forma predeterminada y ... Vemos una advertencia:



Hmm, de alguna manera particiones mal automáticas con un disco de 32 gigas. No cambié el disco, realicé una búsqueda con diseño de disco manual en el estilo "todo en uno". Tuve que instalar ext3, ya que / boot no podía estar en ext4.
El sistema se levantó sin incidentes.

La segunda etapa es la búsqueda de alternativas.
Habiendo hurgado con el contenido del segundo disco, entendí que es un repositorio con contenido adicional. paquetes Y mirando /etc/apt/sources.list, me di cuenta de que necesitaba montarlo en / mnt / cdrom. Pero no encontré / etc / os-release. Pero hay / etc / mcst-version con el contenido de 3.0-rc36. 3.0 - esta es probablemente la versión - parece converger, pero ¿rc36? En general, el software de terceros probablemente no podrá reconocer esta distribución de una manera clásica.

En la sección raíz, el directorio / mcst llama la atención, y allí, con el corazón hundido, encontré / mcst / backup. Es decir, hay una herramienta de respaldo, ¡y está integrada en el sistema! Genial, pensé, ¡veamos cómo funciona!

Resultó que hay un script bash / mcst / bin / backup en tamaño de 4Kb, que proporciona la copia de archivos. Por defecto, al directorio / mcst / backup. En la fuente, esperaba ver el comando rsync, pero no está en la configuración predeterminada. El script simplemente copia los archivos. El comando se ve así:

cp -rpdx <file backup> <file> 

Todo el archivo / mcst / bin / backup está aquí
Te advierto de inmediato que comprender completamente este script solo no es suficiente. Extrae funciones de / mcst / bin / source, que es algo así como una biblioteca de funciones. No lo cité (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 


Aunque, ¿tal vez no entendí qué? Tal vez alguien en los comentarios pueda explicar: ¿cómo proporciona este script una copia de seguridad de datos segura y confiable? [TBD]

rsync, por cierto, está en add. repositorios Versión 3.1.3. Creo que usar rsync sigue siendo la mejor alternativa a / mcst / bin / backup.

Luego, decidí poner el nuevo Veeam Agent para Linux . Alguien preguntará: "¿Qué tiene que ver Veeam con la sustitución de importaciones?" Sí, no está en el registro, pero está certificado por el FSTEC, lo que significa que, en ausencia de alternativas, puede usarse. Después de haber pasado unos quince minutos en alternativas del registro , logré encontrar 3 enlaces en la palabra "copia de seguridad" (ninguno relacionado con mi pregunta sobre la palabra "reserva"). No hice un análisis profundo de estos programas, por lo tanto, no intentaré juzgar qué tan adecuados son para respaldar máquinas bajo Linux. Quién lo necesita: sacará una conclusión y la compartirá en los comentarios.

Etapa tres : instale Veeam Agent para Linux.
Entonces, Veeam Agent para Linux consta de dos paquetes: el módulo del núcleo veeamsnap (por cierto, la fuente está aquí ) y el código de espacio de usuario patentado en forma del paquete veeam.

Hubo un pequeño problema con la instalación del módulo del kernel: la falta del paquete dkms. Este es un servicio que le permite construir módulos de kernel desde la fuente. Como regla, está en todas las distribuciones de deb. Tuve que descargarlo de un repositorio de deb de terceros. Uno está satisfecho: el paquete no depende de la arquitectura, por lo que se mantuvo como nativo. ¿Por qué no se incluyó en la lista de paquetes disponibles, o mejor dicho, no se desarrolló [TBD]? Tal vez se supone que nadie debería recopilar y ejecutar todo tipo de módulos del núcleo que no sean MCST. Realmente hay un problema aquí, ya que hay encabezados de Linux. Es decir, el módulo, si lo desea, puede ensamblarse a mano y ejecutarse cuando la máquina comienza con un script. Creo que no debe esperar actualizaciones frecuentes del ICST [TBD].

"Bien, el módulo se levantó, lo más difícil está detrás", pensé ... El paquete veeam para el repositorio de Deb es para la plataforma amd64, y el sistema operativo Elbrus tiene la plataforma x86_64 [TBD]. La diferencia, por supuesto, solo está en el nombre, pero esta diferencia hace que casi todos los paquetes de repositorios de terceros sean incompatibles con el sistema operativo Elbrus. Este molesto malentendido se elimina de manera elemental: es suficiente analizar el paquete, corregir la información sobre la arquitectura y volver a recopilarla. Cómo hacerlo buscó en Google al instante.
 mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb 

Otro problema son las dependencias. Los archivos necesarios parecen existir, pero no hay paquetes. Hubo la impresión de que los nombres de los paquetes difieren de los "análogos extranjeros". Las bibliotecas se pueden agrupar de manera diferente. No profundicé en los detalles, eliminé casi todas las dependencias y la instalación continuó.

Luego surgieron problemas con el código de inicio del servicio. No había script /lib/init/vars.sh. Por alguna razón, "Elbrus" está funcionando sin él, por lo que también lo eliminaremos. Luego tuvimos que reemplazar la función de salida del mensaje: no había funciones log_daemon_msg y log_end_msg. Hurgando en el archivo / lib / lsb / init-functions, encontré la función log_success_msg: nos funcionará para los experimentos. Por cierto, en el archivo / lib / lsb / init-functions la línea "# Source SuSE`s rc functions" al comienzo del archivo [TBD].

Después de un procesamiento tan brusco del paquete con un archivo, se inició con éxito la copia de seguridad de toda la máquina en la bola NFS. El montaje de respaldo también fue exitoso. Por lo tanto, creo que para hacer una copia de seguridad de una máquina con Elbrus PDK, descargada para "así como así" sin ninguna obligación, Veeam Agent para Linux es definitivamente adecuado. Incluso después de todas las modificaciones con un archivo.

Por supuesto, formalmente el kit de distribución del sistema operativo Elbrus no es compatible, ya que no está incluido en la lista de los compatibles. Además, Veeam Agent para Linux en él no fue probado por el departamento de control de calidad, así que esos. sin soporte (al menos en el momento de publicación del artículo).

Espero que este artículo sea útil para aquellos que están tratando de implementar la orden No. 334 del 29 de junio de 2017. Mío para ti ... [TBD].

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


All Articles