Backup Linux da Veeam su Elbrus OS. Sustituzione d'importazione ['?' | '.' | '!']

Bonghjornu.
Articuli recenti nantu à Habré Sustituzione di impurtazioni in pratica. Part 1. Opzioni и A musica ùn hà micca ghjucatu per un bellu pezzu ... o cumu l'Elbrus OS ùn hè micca diventatu liberu ùn m'hà lasciatu indifferenti. Aghju decisu di studià stu prublema in u cuntestu di a copia di salvezza. Inoltre, in stu articulu I prudutti di Veeam Software sò citati, chì significa chì u prublema pò esse pertinenti specificamente in u cuntestu di sustituzione di l'impurtazioni.

Backup Linux da Veeam su Elbrus OS. Sustituzione d'importazione ['?' | '.' | '!']
fonte di l'imagine originale

Prima di tuttu, aghju decisu di scaricà l'Elbrus OS, o megliu, solu a distribuzione dispunibule per l'architettura x86_64, vede cumu funziona, è pruvate d'installà Veeam Agent per Linux. Se vulete sapè ciò chì hè surtitu da questu, vede u cat.

Allora, una piccula digressione, in casu chì qualchissia ùn sapi micca. "Elbrus" hè cusì CPU cù un sistema di cummandu piuttostu specificu. In più di questu, ci hè u software Elbrus OS. E - contru à a credenza populari - per uperà l'Elbrus OS, ùn hè micca necessariu avè un sistema di hardware basatu nantu à u processore Elbrus. Ci hè "PDK "Elbrus" per x86" - in fattu, apparsu in u duminiu publicu in a forma di un discu di stallazione. A propositu, ci hè una nota a piè di pagina "PDK - kit di sviluppu di piattaforma, kit di sviluppatore" - grande, questu significa chì ci hè almenu un compilatore quì.

Un altru picculu ritirata forzata. U fattu hè chì una volta aghju trattatu cù u software domesticu, cum'è MSVS è Baguette RTOS. Aviu avutu una sperienza di travaglià cù cumpunenti domestici, cumpresu un processore da MCST. Dunque, possu dì cun piena rispunsabilità chì ci hè una certa specificità in questu spaziu è pruvate micca di tuccà in l'articulu. Quandu vogliu veramente, metteraghju l'etichetta [TBD]. Allora pruveremu di fà senza trolling è lamenti banali. In fine, l'industria di difesa russa è l'agenzii di u guvernu deve esse capitu. Grande paese - picculu budget.. [TBD].

Tappa zero - scaricate. Hè nutate chì a nutizia chì l'Elbrus OS hè diventatu dispunibule hà causatu una risonanza, tantu chì u servitore di distribuzione hè cascatu. [TBD] Grazie à Yandex è à l'ingegnere chì hà pensatu di trasfurmà quì. Allora a velocità di scaricamentu hè bona.

U primu stadiu - stallazione. L'aghju stallatu nantu à u primu ipervisore chì era dispunibule per usu liberu. Aghju attribuitu dui core, un paru di giga di RAM, 32 MB per u video (ci serà una interfaccia grafica, pensu). U discu hè cum'è solitu - 32 GB.
Aghju cuminciatu a stallazione. Ùn aghju micca utilizatu l'istruzzioni di stallazione, cusì ùn possu micca cummentà. L'interfaccia di installazione TUI hè severamente minimalista.

Backup Linux da Veeam su Elbrus OS. Sustituzione d'importazione ['?' | '.' | '!']
Ebbè, grande, pudemu fà senza un mouse.

Aghju riesciutu a prossima finestra nantu à a seconda prova. Perchè ùn selezziunate u dispositivu predeterminatu sr0 [TBD] quandu installate da u discu?
Selezziunate a fonte CD-ROM è andate avanti.

Backup Linux da Veeam su Elbrus OS. Sustituzione d'importazione ['?' | '.' | '!']

Mentre selezziunate u fusu orariu, aghju capitu di colpu chì u sistema usa u prucessu di boot init, è aghju travagliatu da TTY0.

Backup Linux da Veeam su Elbrus OS. Sustituzione d'importazione ['?' | '.' | '!']

OK, allora classificà "Elbrus" cum'è una cumunità Vecchi credenti[TBD]. In principiu, questu hè bonu: ùn avete micca bisognu di dumandà u codice fonte per vede cumu u prucessu di scaricamentu funziona, postu chì tuttu hè scrittu.

U restu hè quasi pocu impurtante: mettemu tuttu è accunsenu. In u caminu, truvamu chì u kernel hè utilizatu 3.14.79-13.84. Hmm, Debian 7 avia 3.2 [TBD].

In seguitu, selezziunate u particionamentu di u discu predeterminatu è ... Videmu un avvirtimentu:

Backup Linux da Veeam su Elbrus OS. Sustituzione d'importazione ['?' | '.' | '!']

Hmm, in qualchì manera u particionamentu automaticu ùn hà micca bè cù un discu di 32 gig. Ùn aghju micca cambiatu u discu, aghju cumpletu a ricerca cù a partizione manuale di discu in u stilu "all-in-one". Aviu avutu à stallà ext3, postu chì / boot ùn pudia esse in ext4.
U sistema hè ghjuntu senza incidente.

U sicondu stadiu - ricerca di alternative.
Dopu à rummaging in u cuntenutu di u sicondu discu, aghju realizatu chì questu hè un repository cù supplementu. in pacchetti. È fighjendu /etc/apt/sources.list, aghju realizatu chì deve esse muntatu in /mnt/cdrom. Ma ùn aghju micca trovu /etc/os-release. Ma ci hè /etc/mcst-versione cù u cuntenutu 3.0-rc36. 3.0 hè probabilmente a versione - pare chì si adatta, ma rc36? In generale, u software di terzu ùn puderà micca ricunnosce sta distribuzione in u modu classicu.

In a partizione radicali, u repertoriu /mcst chjappà u mo sguardu, è quì, cù un cori affundendu, aghju scupertu /mcst/backup. Questu hè, ci hè un strumentu di salvezza, è hè custruitu in u sistema! "Grande", aghju pensatu, "Vedemu cumu funziona questu!"

Hè risultatu chì ci hè un script bash 4Kb /mcst/bin/backup chì furnisce a copia di fugliale. Per automaticamente - à u cartulare /mcst/backup. In u codice fonte, aghju aspittatu di vede u cumandamentu rsync, ma ùn hè micca in a cunfigurazione predeterminata. U script copia solu i schedari. U cumandimu s'assumiglia à questu:

cp -rpdx <file backup> <file>

Tuttu u schedariu /mcst/bin/backup hè quìVi avvistu subitu chì sta scrittura sola ùn hè micca abbastanza per capiscenu cumplettamente. Tira e funzioni da /mcst/bin/source, chì hè qualcosa cum'è una biblioteca di funzioni. Ùn aghju micca inclusu (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

Eppuru, forse ùn aghju micca capitu qualcosa? Forsi qualchissia pò spiegà in i cumenti: cumu questu script assicura una copia di salvezza di dati sicura è affidabile? [TBD]

rsync, per via, hè inclusu in l'add-on. repository. Versione 3.1.3. Pensu chì l'usu di rsync hè sempre una alternativa megliu à l'applicazione /mcst/bin/backup.

Dopu, decisu di mette un novu Veeam Agent per Linux. Qualchissia dumandarà: "Chì chì Veeam è a sustituzione di l'impurtazioni anu da fà cù questu?" Iè, ùn hè micca in u registru, ma hè certificatu da FSTEC, chì significa chì in l'absenza di alternative pò esse usatu. Passendu quindici minuti in alternative da registru, Puderaghju truvà ligami 3 per a parolla "backup" (nimu cunnessu cù a mo quistione per a parolla "riserva"). Ùn aghju micca fattu una analisi prufonda di questi prugrammi, per quessa, ùn pruvà micca di ghjudicà quantu sò adattati per a copia di salvezza di e macchine chì funzionanu Linux. Quellu chì ne hà bisognu tirarà a so propria cunclusione è spartera in i cumenti.

Stage Three - installazione di Veeam Agent per Linux.
Allora, Veeam Agent per Linux hè custituitu da dui pacchetti: u modulu di kernel veeamsnap (per via, fonte quì) è codice proprietariu di u spaziu d'utilizatore in a forma di u pacchettu veeam.

Ci era un picculu prublema cù l'installazione di u modulu di u kernel - u pacchettu dkms mancante. Questu hè un serviziu chì permette di custruisce moduli di kernel da a fonte. In regula, hè dispunibule nantu à tutte e distribuzioni di deb. Aviu avutu à scaricà da un repositoriu di deb di terzu. Una cosa chì m'hà fattu felice hè chì u pacchettu ùn dipende micca di l'architettura, cusì si adatta cum'è un nativu. Perchè ùn era micca inclusu in a lista di i pacchetti dispunibili, o megliu, micca sviluppatu [TBD]? Forsi si assume chì nimu ùn deve custruisce è eseguisce moduli di kernel non-MCST. Ci hè veramente una discrepanza quì - postu chì ci sò linux-headers. Questu hè, u modulu, se vulete, pò esse assemblatu da a manu è lanciatu da un script quandu a macchina principia. Pensu chì ùn deve micca aspittà l'aghjurnamenti frequenti da MCST [TBD].

"OK, u modulu hè stallatu - a parte più dura hè finita", aghju pensatu ... U pacchettu veeam per u repository deb hè per a plataforma amd64, è l'Elbrus OS hà una piattaforma x86_64 [TBD]. A sfarenza, sicuru, hè solu in u nome, ma sta diferenza rende quasi tutti i pacchetti da repositori di deb di terzu incompatibile cù l'Elbrus OS. Questa fastidiosa malintesa pò esse eliminata simplicemente: basta disassemble u pacchettu, corregge l'infurmazioni nantu à l'architettura è rimette inseme. Cumu fà Googled lu subitu.

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

Un altru prublema hè a dependenza. I schedarii necessarii parenu esse quì, ma i pacchetti ùn sò micca. L'impressione era chì i nomi di i pacchetti sò diffirenti da i so "analogi impurtati". Forse e biblioteche sò imballati in modu diversu. Ùn aghju micca troppu dettu, sguassate quasi tutte e dependenzii, è a stallazione andò avanti.

Allora emergenu prublemi cù u codice di partenza di u serviziu. L'script /lib/init/vars.sh mancava. Per una certa ragione, Elbrus gestisce senza ellu, cusì l'eliminemu ancu. Dopu, avemu avutu a rimpiazzà a funzione di output di u messagiu: e funzioni log_daemon_msg è log_end_msg mancavanu. Dopu avè rummaging in u schedariu /lib/lsb/init-functions, aghju trovu a funzione log_success_msg - serà bonu per noi per esperimenti. A propositu, in u schedariu /lib/lsb/init-functions a linea "# Source SuSE`s rc functions" hè à l'iniziu di u schedariu [TBD].

Dopu un tali trasfurmazioni ruvida di u pacchettu cù un schedariu, a copia di salvezza di tutta a macchina nantu à a spartera NFS hè stata lanciata cù successu. A muntagna di salvezza hè ancu successu. Dunque, crede chì per fà una copia di salvezza di una macchina cù l'Elbrus PDK, scaricatu "cum'è cusì" senza alcunu obbligazione, Veeam Agent per Linux hè definitamente adattatu. Ancu dopu tutte e mudificazioni cù un schedariu.

Di sicuru, u kit di distribuzione Elbrus OS ùn hè micca supportatu formalmente, postu chì ùn hè micca inclusu in a lista di i supportati. Inoltre, l'Agente Veeam per Linux ùn hè statu pruvatu nantu à questu da u dipartimentu QA, cusì quelli. ùn ci hè micca sustegnu (almenu à u mumentu di a publicazione di l'articulu).

Spergu chì l'articulu serà utile à quelli chì cercanu di implementà l'ordine n ° 334 di u 29.06.2017 di ghjugnu XNUMX. U mio à tè... [TBD].

Source: www.habr.com

Add a comment