Rezervimi Linux nga Veeam në Elbrus OS. Zëvendësimi i importit ['?' | '.' | '!']

Pershendetje te gjitheve
Artikujt e fundit në Habré Zëvendësimi i importit në praktikë. Pjesa 1. Opsionet и Muzika nuk luajti për shumë kohë… ose se si Elbrus OS nuk u bë kurrë falas nuk më la indiferent. Vendosa ta studioj këtë çështje në kontekstin e detyrës rezervë. Për më tepër, në Ky artikull Përmenden produktet Veeam Software, që do të thotë se çështja mund të jetë e rëndësishme veçanërisht në kontekstin e zëvendësimit të importit.

Rezervimi Linux nga Veeam në Elbrus OS. Zëvendësimi i importit ['?' | '.' | '!']
burimi origjinal i imazhit

Para së gjithash, vendosa të shkarkoj Elbrus OS, ose më saktë, vetëm shpërndarjen e disponueshme për arkitekturën x86_64, të shoh se si funksionon dhe të përpiqem të instaloj Veeam Agent për Linux në të. Nëse doni të dini se çfarë doli nga kjo, ju lutemi shihni cat.

Pra, një digresion i vogël, në rast se dikush nuk e di. "Elbrus" është i tillë CPU me një sistem komandimi mjaft specifik. Përveç tij, ekziston softueri Elbrus OS. Dhe - në kundërshtim me një keqkuptim të zakonshëm - që Elbrus OS të funksionojë, nuk është e nevojshme të keni një sistem harduerësh të bazuar në procesorin Elbrus. Ekziston "PDK "Elbrus" për x86 - në fakt, ai u shfaq në domenin publik në formën e një disku instalimi. Nga rruga, ekziston një fusnotë "PDK - komplet zhvillimi i platformës, komplet zhvilluesish" - shkëlqyeshëm, që do të thotë se ka të paktën një përpilues atje.

Një tjetër tërheqje e vogël e detyruar. Fakti është se dikur jam marrë me softuer vendas, si MSVS dhe Baguette RTOS. Kam pasur përvojë duke punuar me komponentë vendas, duke përfshirë një procesor nga MCST. Prandaj, mund të them me përgjegjësi të plotë se ka një specifikë të caktuar në këtë fushë dhe do të përpiqem të mos e prek atë në artikull. Kur të dua vërtet, do të vendos etiketën [TBD]. Kështu që ne do të përpiqemi të bëjmë pa trolling dhe ankime banale. Në fund, industria ruse e mbrojtjes dhe agjencitë qeveritare duhet të kuptohen. Vend i madh - buxhet i vogël.. [TBD].

Faza zero - Shkarko. Vlen të përmendet se lajmi se Elbrus OS është bërë i disponueshëm shkaktoi një rezonancë, aq sa serveri i shpërndarjes u prish. [TBD] Faleminderit Yandex dhe inxhinierit që menduan ta zhvendosnin atje. Kështu që shpejtësia e shkarkimit është e mirë.

Faza e parë - instalimi. E instalova në hipervisorin e parë që ishte i disponueshëm për përdorim falas. Kam ndarë dy bërthama, disa koncerte RAM, 32 MB për video (do të ketë një ndërfaqe grafike, mendova). Disku është si zakonisht - 32 GB.
Fillova instalimin. Unë nuk kam përdorur udhëzimet e instalimit, kështu që nuk mund të komentoj për të. Ndërfaqja e instalimit TUI është jashtëzakonisht minimaliste.

Rezervimi Linux nga Veeam në Elbrus OS. Zëvendësimi i importit ['?' | '.' | '!']
Epo, shkëlqyeshëm, ne mund të bëjmë pa një mi.

Unë menaxhova dritaren tjetër në provën e dytë. Pse të mos zgjidhni pajisjen e paracaktuar sr0 [TBD] kur instaloni nga disku?
Zgjidhni burimin e CD-ROM-it dhe vazhdoni.

Rezervimi Linux nga Veeam në Elbrus OS. Zëvendësimi i importit ['?' | '.' | '!']

Gjatë zgjedhjes së zonës kohore, papritmas kuptova se sistemi përdor procesin e nisjes së fillimit dhe unë jam duke punuar nga TTY0.

Rezervimi Linux nga Veeam në Elbrus OS. Zëvendësimi i importit ['?' | '.' | '!']

OK, atëherë le ta klasifikojmë "Elbrus" si një komunitet Besimtarët e Vjetër[TBD]. Në parim, kjo është mirë: nuk keni nevojë të kërkoni kodin burimor për të parë se si funksionon procesi i shkarkimit, pasi gjithçka është e shkruar.

Pjesa tjetër është pothuajse e parëndësishme: ne vendosim gjithçka dhe pajtohemi. Gjatë rrugës, zbulojmë se kerneli përdoret 3.14.79-13.84. Hmm, Debian 7 kishte 3.2 [TBD].

Më pas, zgjidhni ndarjen e paracaktuar të diskut dhe... Ne shohim një paralajmërim:

Rezervimi Linux nga Veeam në Elbrus OS. Zëvendësimi i importit ['?' | '.' | '!']

Hmm, disi ndarja automatike nuk u përball mirë me një disk 32 gig. Unë nuk e ndryshova diskun; e përfundova kërkimin me ndarje manuale të diskut në stilin "gjithë-në-një". Më duhej të instaloja ext3, pasi /boot nuk mund të ishte në ext4.
Sistemi doli pa incidente.

Faza e dytë - kërkoni për alternativa.
Pasi gërmova përmbajtjen e diskut të dytë, kuptova se ky është një depo me shtesë. në pako. Dhe duke parë /etc/apt/sources.list, kuptova se duhet të montohet në /mnt/cdrom. Por nuk e gjeta /etc/os-release. Por ekziston versioni /etc/mcst me përmbajtjen 3.0-rc36. 3.0 është ndoshta versioni - duket se përshtatet, por rc36? Në përgjithësi, softueri i palëve të treta ka shumë të ngjarë të mos jetë në gjendje ta njohë këtë shpërndarje në mënyrën klasike.

Në ndarjen rrënjë, drejtoria / mcst më bie në sy dhe aty, me një zemër të zhytur, zbulova /mcst/backup. Kjo do të thotë, ekziston një mjet rezervë dhe është i integruar në sistem! "Shkëlqyeshëm," mendova, "Le të shohim se si funksionon kjo!"

Doli se ekziston një skrip bash 4Kb /mcst/bin/backup që ofron kopjim të skedarëve. Si parazgjedhje - në drejtorinë /mcst/backup. Në kodin burim prisja të shihja komandën rsync, por nuk është në konfigurimin e paracaktuar. Skripti thjesht kopjon skedarët. Komanda duket diçka si kjo:

cp -rpdx <file backup> <file>

I gjithë skedari /mcst/bin/backup është këtuJu paralajmëroj menjëherë se vetëm ky skenar nuk mjafton për ta kuptuar plotësisht. Ai tërheq funksionet nga /mcst/bin/source, që është diçka si një bibliotekë funksionesh. Unë nuk e përfshiva atë (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

Edhe pse, ndoshta nuk kuptova diçka? Ndoshta dikush mund të shpjegojë në komente: si siguron ky skenar rezervë të sigurt dhe të besueshëm të të dhënave? [TBD]

rsync, nga rruga, është përfshirë në shtesë. depove. Versioni 3.1.3. Unë mendoj se përdorimi i rsync është ende një alternativë më e mirë për aplikacionin /mcst/bin/backup.

Më pas, vendosa të vendos një të freskët Veeam Agent për Linux. Dikush do të pyesë: "Çfarë lidhje ka Veeam dhe zëvendësimi i importit me të?" Po, nuk është në regjistër, por është i certifikuar nga FSTEC, që do të thotë se në mungesë të alternativave mund të përdoret. Shpenzimi i pesëmbëdhjetë minutave për alternativat nga regjistri, munda të gjeja 3 lidhje për fjalën "backup" (asnjë lidhje me pyetjen time për fjalën "rezervë"). Unë nuk kam bërë një analizë të thellë të këtyre programeve, kështu që nuk do të përpiqem të gjykoj se sa të përshtatshme janë ato për rezervimin e makinave që përdorin Linux. Kushdo që ka nevojë do të nxjerrë përfundimin e tij dhe do ta ndajë atë në komente.

Faza e tretë — instalimi i Veeam Agent për Linux.
Pra, Veeam Agent për Linux përbëhet nga dy paketa: moduli i kernelit veeamsnap (nga rruga, burimi këtu) dhe kodin e pronarit të hapësirës së përdoruesit në formën e paketës veeam.

Kishte një problem të vogël me instalimin e modulit të kernelit - paketa dkms që mungonte. Ky është një shërbim që ju lejon të ndërtoni module kernel nga burimi. Si rregull, ai është i disponueshëm në të gjitha shpërndarjet deb. Më duhej ta shkarkoja nga një depo e debitit të palëve të treta. Një gjë që më bëri të lumtur është se paketa nuk varet nga arkitektura, kështu që përshtatet si një amtare. Pse nuk u përfshi në listën e paketave të disponueshme, ose më mirë, nuk u zhvillua [TBD]? Ndoshta supozohet se askush nuk duhet të ndërtojë dhe ekzekutojë asnjë modul kernel jo-MCST. Me të vërtetë ka një mospërputhje këtu - pasi ka linux-headers. Kjo do të thotë, moduli, nëse dëshironi, mund të montohet me dorë dhe të lansohet me anë të një skenari kur makina fillon. Unë mendoj se nuk duhet të prisni përditësime të shpeshta nga MCST [TBD].

"OK, moduli është instaluar - pjesa më e vështirë ka mbaruar," mendova... Paketa veeam për depon e deb është për platformën amd64 dhe Elbrus OS ka një platformë x86_64 [TBD]. Dallimi, natyrisht, është vetëm në emër, por ky ndryshim i bën pothuajse të gjitha paketat nga depot e palëve të treta të papajtueshme me Elbrus OS. Ky keqkuptim i bezdisshëm mund të eliminohet thjesht: thjesht çmontoni paketën, korrigjoni informacionin rreth arkitekturës dhe bashkojeni përsëri. Si ta bëni atë E kërkoi në Google Menjëherë.

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

Një problem tjetër janë varësitë. Skedarët e nevojshëm duket se janë aty, por paketat nuk janë. Përshtypja ishte se emrat e paketave ndryshonin nga "analogët e tyre të importuar". Ndoshta bibliotekat janë të paketuara ndryshe. Nuk hyra në shumë detaje, hoqa pothuajse të gjitha varësitë dhe instalimi vazhdoi.

Më pas u shfaqën probleme me kodin e fillimit të shërbimit. Skripti /lib/init/vars.sh mungonte. Për disa arsye, Elbrus ia del pa të, kështu që ne do ta heqim edhe atë. Më pas, na duhej të zëvendësonim funksionin e daljes së mesazhit: funksionet log_daemon_msg dhe log_end_msg mungonin. Pasi hulumtova në skedarin /lib/lsb/init-functions, gjeta funksionin log_success_msg - do të jetë i mirë për ne për eksperimente. Nga rruga, në skedarin /lib/lsb/init-functions rreshti "# Funksionet rc të burimit SuSE" është në fillim të skedarit [TBD].

Pas një përpunimi kaq të përafërt të paketës me një skedar, kopja rezervë e të gjithë makinës në pjesën NFS u lançua me sukses. Montimi rezervë ishte gjithashtu i suksesshëm. Pra, besoj, për të mbështetur një makinë me Elbrus PDK, të shkarkuar "ashtu si kjo" pa asnjë detyrim, Veeam Agent për Linux është padyshim i përshtatshëm. Edhe pas të gjitha modifikimeve me një skedar.

Sigurisht, kompleti i shpërndarjes Elbrus OS nuk mbështetet zyrtarisht, pasi nuk përfshihet në listën e atyre të mbështetur. Për më tepër, Veeam Agent për Linux nuk u testua në të nga departamenti i QA, kështu që ato. nuk ka mbështetje (të paktën në kohën e publikimit të artikullit).

Shpresoj se artikulli do të jetë i dobishëm për ata që po përpiqen të zbatojnë urdhrin nr. 334 të datës 29.06.2017 qershor XNUMX. E imja për ju... [TBD].

Burimi: www.habr.com

Shto një koment