Linux Backup van Veeam op Elbrus OS. Importvervanging ['?' | '.' | '!']

Hallo allemaal
Recente artikelen over Habré Importsubstitutie in de praktijk. Deel 1. Opties и De muziek speelde niet lang... of hoe Elbrus OS nooit gratis werd liet mij niet onverschillig. Ik besloot dit probleem te bestuderen in de context van de back-uptaak. Bovendien, binnen dit artikel Er wordt melding gemaakt van Veeam Software-producten, wat betekent dat de kwestie specifiek relevant kan zijn in de context van importsubstitutie.

Linux Backup van Veeam op Elbrus OS. Importvervanging ['?' | '.' | '!']
originele beeldbron

Allereerst besloot ik het Elbrus-besturingssysteem te downloaden, of liever alleen de beschikbare distributie voor de x86_64-architectuur, te kijken hoe het werkt, en te proberen Veeam Agent voor Linux erop te installeren. Als je wilt weten wat hieruit is voortgekomen, zie dan cat.

Dus een kleine uitweiding, voor het geval iemand het niet weet. "Elbrus" is zo bewerker met een nogal specifiek commandosysteem. Daarnaast is er Elbrus OS-software. En - in tegenstelling tot wat vaak wordt gedacht - is het voor het gebruik van het Elbrus OS niet nodig om een ​​hardwaresysteem te hebben dat is gebaseerd op de Elbrus-processor. Er is "PDK "Elbrus" voor x86" - sterker nog, het verscheen in het publieke domein in de vorm van een installatieschijf. Er is trouwens een voetnoot "PDK - platform development kit, developer kit" - geweldig, dat betekent dat er op zijn minst een compiler is.

Nog een kleine gedwongen terugtocht. Feit is dat ik ooit met binnenlandse software te maken had, zoals MSVS en Baguette RTOS. Ik had ervaring met het werken met huishoudelijke componenten, waaronder een processor van MCST. Daarom kan ik met volledige verantwoordelijkheid zeggen dat er op dit gebied een zekere specificiteit bestaat en ik zal proberen daar in het artikel niet op in te gaan. Als ik het echt wil, plaats ik de tag [TBD]. We zullen dus proberen het te doen zonder ronduit trollen en banaal gekreun. Uiteindelijk moeten de Russische defensie-industrie en overheidsinstanties worden begrepen. Groot land, klein budget... [TBD].

Nul stadium - downloaden. Het is opmerkelijk dat het nieuws dat het Elbrus OS beschikbaar is gekomen voor veel opschudding zorgde, zozeer zelfs dat de distributieserver uitviel. [Nader vast te stellen] Met dank aan Yandex en de ingenieur die erover dacht om het daarheen te verplaatsen. De downloadsnelheid is dus goed.

De eerste fase - installatie. Ik installeerde het op de eerste hypervisor die gratis te gebruiken was. Ik heb twee cores toegewezen, een paar gigabytes RAM, 32 MB voor video (er komt een grafische interface, dacht ik). De schijf is zoals gewoonlijk - 32 GB.
Ik ben begonnen met de installatie. Ik heb de installatie-instructies niet gebruikt, dus ik kan er geen commentaar op geven. De TUI-installatie-interface is zeer minimalistisch.

Linux Backup van Veeam op Elbrus OS. Importvervanging ['?' | '.' | '!']
Nou, geweldig, we kunnen ook zonder muis.

Bij de tweede poging slaagde ik erin het volgende venster te bereiken. Waarom selecteert u niet het standaardapparaat sr0 [TBD] bij installatie vanaf schijf?
Selecteer de CD-ROM-bron en ga verder.

Linux Backup van Veeam op Elbrus OS. Importvervanging ['?' | '.' | '!']

Terwijl ik de tijdzone selecteerde, realiseerde ik me plotseling dat het systeem het init-opstartproces gebruikt en dat ik vanuit TTY0 werk.

Linux Backup van Veeam op Elbrus OS. Importvervanging ['?' | '.' | '!']

Oké, laten we ‘Elbrus’ dan classificeren als een gemeenschap oude gelovigen[Nader vast te stellen]. In principe is dit goed: je hoeft niet naar de broncode te vragen om te zien hoe het downloadproces werkt, alles is namelijk scripted.

De rest is bijna onbelangrijk: we zetten alles neer en zijn het erover eens. Gaandeweg komen we erachter dat de kernel 3.14.79-13.84 wordt gebruikt. Hmm, Debian 7 had 3.2 [TBD].

Selecteer vervolgens de standaard schijfpartitionering en... We zien een waarschuwing:

Linux Backup van Veeam op Elbrus OS. Importvervanging ['?' | '.' | '!']

Hmm, op de een of andere manier kon de automatische partitie niet goed overweg met een schijf van 32 gig. Ik heb de schijf niet gewijzigd; ik heb de zoektocht voltooid met handmatige schijfpartitionering in de "alles-in-één" -stijl. Ik moest ext3 installeren, omdat /boot niet in ext4 kon staan.
Het systeem kwam zonder incidenten tot stand.

De tweede fase - zoeken naar alternatieven.
Nadat ik de inhoud van de tweede schijf had doorzocht, realiseerde ik me dat dit een repository is met extra. in pakketten. En toen ik naar /etc/apt/sources.list keek, realiseerde ik me dat het in /mnt/cdrom gemount moet worden. Maar ik heb /etc/os-release niet gevonden. Maar er is /etc/mcst-version met de inhoud 3.0-rc36. 3.0 is waarschijnlijk de versie - het lijkt te passen, maar rc36? Over het algemeen zal software van derden deze distributie hoogstwaarschijnlijk niet op de klassieke manier kunnen herkennen.

In de rootpartitie valt de map /mcst mijn aandacht op, en daar ontdekte ik met een zinkend hart /mcst/backup. Dat wil zeggen, er is een back-uptool en deze is in het systeem ingebouwd! “Geweldig”, dacht ik, “laten we eens kijken hoe dit werkt!”

Het bleek dat er een 4Kb bash-script /mcst/bin/backup is dat het kopiëren van bestanden mogelijk maakt. Standaard - naar de map /mcst/backup. In de broncode verwachtte ik de opdracht rsync te zien, maar deze staat niet in de standaardconfiguratie. Het script kopieert eenvoudig bestanden. Het commando ziet er ongeveer zo uit:

cp -rpdx <file backup> <file>

Het volledige bestand /mcst/bin/backup staat hierIk waarschuw je meteen dat dit script alleen niet voldoende is om het volledig te begrijpen. Het haalt functies op uit /mcst/bin/source, wat zoiets is als een bibliotheek met functies. Ik heb het niet opgenomen (44 KB).

#!/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

Hoewel, misschien heb ik iets niet begrepen? Misschien kan iemand het in de reacties uitleggen: hoe zorgt dit script voor een veilige en betrouwbare gegevensback-up? [Nader te bepalen]

rsync is trouwens opgenomen in de add-on. opslagplaatsen. Versie 3.1.3. Ik denk dat het gebruik van rsync nog steeds een beter alternatief is voor de applicatie /mcst/bin/backup.

Vervolgens besloot ik een nieuwe te plaatsen Veeam Agent voor Linux. Iemand zal vragen: “Wat hebben Veeam en importsubstitutie ermee te maken?” Ja, het staat niet in het register, maar het is gecertificeerd door FSTEC, wat betekent dat het bij gebrek aan alternatieven gebruikt kan worden. Een kwartier besteden aan alternatieven van register, heb ik 3 links kunnen vinden voor het woord “back-up” (geen enkele had betrekking op mijn vraag over het woord “reserveren”). Ik heb geen diepgaande analyse van deze programma's gedaan, dus ik zal niet proberen te beoordelen hoe geschikt ze zijn voor het maken van back-ups van machines waarop Linux draait. Wie het nodig heeft, zal zijn eigen conclusie trekken en deze delen in de reacties.

Fase drie — installatie van Veeam Agent voor Linux.
Veeam Agent voor Linux bestaat dus uit twee pakketten: de veeamsnap-kernelmodule (trouwens, bron hier) en eigen gebruikersruimtecode in de vorm van het veeam-pakket.

Er was een klein probleem bij het installeren van de kernelmodule: het ontbrekende dkms-pakket. Dit is een service waarmee u kernelmodules vanaf de broncode kunt bouwen. In de regel is het beschikbaar op alle deb-distributies. Ik moest het downloaden van een deb-repository van derden. Eén ding dat me blij maakte, is dat het pakket niet afhankelijk is van de architectuur, dus het past als een native pakket. Waarom was het niet opgenomen in de lijst met beschikbare pakketten, of beter gezegd, niet ontwikkeld [TBD]? Misschien wordt aangenomen dat niemand niet-MCST-kernelmodules mag bouwen en uitvoeren. Er is hier echt sprake van een discrepantie - aangezien er Linux-headers zijn. Dat wil zeggen dat de module, indien gewenst, met de hand kan worden samengesteld en door een script kan worden gestart wanneer de machine start. Ik denk dat je geen frequente updates van MCST moet verwachten [TBD].

"OK, de module is geïnstalleerd - het moeilijkste deel is voorbij", dacht ik... Het veeam-pakket voor de deb-repository is voor het amd64-platform, en het Elbrus-besturingssysteem heeft een x86_64 [TBD]-platform. Het verschil zit hem natuurlijk alleen in de naam, maar dit verschil zorgt ervoor dat bijna alle pakketten van deb-repository's van derden incompatibel zijn met het Elbrus-besturingssysteem. Dit vervelende misverstand kan eenvoudig worden geëlimineerd: demonteer gewoon het pakket, corrigeer de informatie over de architectuur en zet het weer in elkaar. Hoe je dat doet Heb het gegoogled onmiddellijk.

mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb

Een ander probleem zijn afhankelijkheden. De benodigde bestanden lijken aanwezig te zijn, maar de pakketten niet. De indruk was dat de namen van de pakketten verschilden van hun “geïmporteerde analogen”. Misschien zijn de bibliotheken anders verpakt. Ik ging niet te veel in detail, verwijderde bijna alle afhankelijkheden en de installatie ging door.

Toen ontstonden er problemen met de servicestartcode. Het script /lib/init/vars.sh ontbrak. Om de een of andere reden kan Elbrus het zonder doen, dus we zullen het ook verwijderen. Vervolgens moesten we de berichtuitvoerfunctie vervangen: de functies log_daemon_msg en log_end_msg ontbraken. Nadat ik in het bestand /lib/lsb/init-functions had rondgezocht, vond ik de functie log_success_msg - deze is goed voor ons voor experimenten. Trouwens, in het /lib/lsb/init-functions bestand staat de regel “# Source SuSE`s rc functions” aan het begin van het [TBD] bestand.

Na zo'n ruwe verwerking van het pakket met een bestand, werd de back-up van de hele machine op de NFS-share met succes gelanceerd. De back-upmontage was ook succesvol. Ik ben dus van mening dat Veeam Agent voor Linux zeker geschikt is voor het maken van een back-up van een machine met de Elbrus PDK, die ‘zomaar’ zonder enige verplichting is gedownload. Zelfs na alle aanpassingen met een bestand.

Uiteraard wordt de Elbrus OS-distributiekit niet formeel ondersteund, omdat deze niet is opgenomen in de lijst met ondersteunde versies. Bovendien is Veeam Agent voor Linux er niet op getest door de QA-afdeling, dus die. er is geen ondersteuning (althans op het moment van publicatie van het artikel).

Ik hoop dat het artikel nuttig zal zijn voor degenen die order nr. 334 van 29.06.2017 juni XNUMX proberen uit te voeren. De mijne voor jou... [Nader vast te stellen].

Bron: www.habr.com

Voeg een reactie