Linux dublējums no Veeam operētājsistēmā Elbrus OS. Importa aizstāŔana ['?' | '.' | '!']

Sveiki visiem
Jaunākie raksti par Habrē Importa aizstāŔana praksē. 1. daļa. Iespējas Šø MÅ«zika netika atskaņota ilgi... jeb kā Elbrus OS nekad nav kļuvusi bezmaksas neatstāja mani vienaldzÄ«gu. Es nolēmu izpētÄ«t Å”o jautājumu dublÄ“Å”anas uzdevuma kontekstā. Turklāt iekŔā Å is raksts Ir minēti Veeam Software produkti, kas nozÄ«mē, ka problēma var bÅ«t aktuāla tieÅ”i importa aizstāŔanas kontekstā.

Linux dublējums no Veeam operētājsistēmā Elbrus OS. Importa aizstāŔana ['?' | '.' | '!']
sākotnējā attēla avots

Pirmkārt, es nolēmu lejupielādēt Elbrus OS, pareizāk sakot, tikai pieejamo izplatÄ«Å”anu x86_64 arhitektÅ«rai, redzēt, kā tā darbojas, un mēģināt tajā instalēt Veeam Agent for Linux. Ja vēlaties uzzināt, kas no tā iznāca, lÅ«dzu, skatiet kaÄ·i.

Tātad, neliela atkāpe, ja kāds nezina. "Elbruss" ir tāds procesoru ar diezgan specifisku komandu sistēmu. Papildus tam ir Elbrus OS programmatÅ«ra. Un - pretēji plaÅ”i izplatÄ«tam uzskatam - lai darbinātu Elbrus OS, nav nepiecieÅ”ama aparatÅ«ras sistēma, kuras pamatā ir Elbrus procesors. Ir ā€œPDK ā€œElbrusā€ priekÅ” x86ā€ - patiesÄ«bā tas parādÄ«jās publiskajā domēnā instalācijas diska formā. Starp citu, ir zemsvÄ«tras piezÄ«me ā€œPDK - platformas izstrādes komplekts, izstrādātāja komplektsā€ - lieliski, tas nozÄ«mē, ka tur ir vismaz kompilators.

Vēl viena neliela piespiedu atkāpÅ”anās. Fakts ir tāds, ka es kādreiz nodarbojos ar vietējo programmatÅ«ru, piemēram, MSVS un Baguette RTOS. Man bija pieredze darbā ar vietējiem komponentiem, ieskaitot procesoru no MCST. Tāpēc ar pilnu atbildÄ«bu varu teikt, ka Å”ajā jomā ir zināma specifika un es centÄ«Å”os to rakstā neaiztikt. Kad es patieŔām vēlÄ“Å”os, es ielikÅ”u tagu [TBD]. Tāpēc mēģināsim iztikt bez tieÅ”as troļļoÅ”anas un banālas vaidÄ“Å”anas. Galu galā ir jāsaprot Krievijas aizsardzÄ«bas nozare un valsts aÄ£entÅ«ras. Liela valsts - mazs budžets.. [TBD].

Nulles posms - lejupielādēt. ZÄ«mÄ«gi, ka ziņas, ka Elbrus OS ir kļuvusi pieejama, izraisÄ«ja tik lielu rezonansi, ka izplatÄ«Å”anas serveris nokrita. [TBD] Paldies Yandex un inženierim, kurÅ” domāja to pārvietot uz turieni. Tātad lejupielādes ātrums ir labs.

Pirmais posms - uzstādÄ«Å”ana. Es to instalēju pirmajā hipervizorā, kas bija pieejams bezmaksas lietoÅ”anai. PieŔķīru divus kodolus, pāris gigus RAM, 32 MB video (bÅ«s grafiskais interfeiss, domāju). Disks ir kā parasti - 32 GB.
Es sāku instalÄ“Å”anu. Es neizmantoju uzstādÄ«Å”anas instrukciju, tāpēc nevaru to komentēt. TUI instalācijas interfeiss ir ļoti minimālistisks.

Linux dublējums no Veeam operētājsistēmā Elbrus OS. Importa aizstāŔana ['?' | '.' | '!']
Nu lieliski, varam iztikt bez peles.

Man izdevās nākamais logs otrajā mēģinājumā. Kāpēc, instalējot no diska, neizvēlēties noklusējuma ierīci sr0 [TBD]?
Izvēlieties CD-ROM avotu un turpiniet.

Linux dublējums no Veeam operētājsistēmā Elbrus OS. Importa aizstāŔana ['?' | '.' | '!']

Izvēloties laika joslu, es pēkŔņi sapratu, ka sistēma izmanto init boot procesu, un es strādāju no TTY0.

Linux dublējums no Veeam operētājsistēmā Elbrus OS. Importa aizstāŔana ['?' | '.' | '!']

Labi, tad klasificēsim ā€œElbrusā€ kā kopienu VecticÄ«bnieki[TBD]. Principā tas ir labi: jums nav jāprasa pirmkods, lai redzētu, kā darbojas lejupielādes process, jo viss ir skripts.

Pārējais ir gandrīz nesvarīgs: visu noliekam un vienojamies. Pa ceļam uzzinām, ka kodols tiek izmantots 3.14.79-13.84. Hmm, Debian 7 bija 3.2 [TBD].

Pēc tam atlasiet noklusējuma diska nodalījumu un... Mēs redzam brīdinājumu:

Linux dublējums no Veeam operētājsistēmā Elbrus OS. Importa aizstāŔana ['?' | '.' | '!']

Hmm, kaut kā automātiskā sadalÄ«Å”ana netika galā ar 32 giga disku. Es nemainÄ«ju disku; es pabeidzu uzdevumu ar manuālu diska sadalÄ«Å”anu "viss vienā" stilā. Man bija jāinstalē ext3, jo /boot nevarēja bÅ«t ext4.
Sistēma radās bez starpgadījumiem.

Otrais posms - meklēt alternatīvas.
Pēc rakņāŔanās otrā diska saturā sapratu, ka Ŕī ir repozitorija ar papildus. iepakojumos. Un apskatot /etc/apt/sources.list, es sapratu, ka tas ir jāmontē /mnt/cdrom. Bet es neatradu /etc/os-release. Bet ir /etc/mcst-version ar saturu 3.0-rc36. 3.0 laikam ir versija - it kā der, bet rc36? Parasti treŔās puses programmatÅ«ra, visticamāk, nespēs atpazÄ«t Å”o izplatÄ«Å”anu klasiskā veidā.

Saknes nodalÄ«jumā manu uzmanÄ«bu piesaista direktorijs /mcst, un tur es ar slÄ«doÅ”u sirdi atklāju /mcst/backup. Tas ir, ir rezerves rÄ«ks, un tas ir iebÅ«vēts sistēmā! "Lieliski," es nodomāju, "PaskatÄ«simies, kā tas darbojas!"

IzrādÄ«jās, ka ir 4Kb bash skripts /mcst/bin/backup, kas nodroÅ”ina failu kopÄ“Å”anu. Pēc noklusējuma - uz /mcst/backup direktoriju. Es gaidÄ«ju avota kodā rsync komandu, taču tā nav noklusējuma konfigurācijā. Skripts vienkārÅ”i kopē failus. Komanda izskatās apmēram Ŕādi:

cp -rpdx <file backup> <file>

Å eit ir viss fails /mcst/bin/backupUzreiz brÄ«dinu, ka ar Å”o scenāriju vien nepietiek, lai pilnÄ«bā saprastu. Tas izvelk funkcijas no /mcst/bin/source, kas ir kaut kas lÄ«dzÄ«gs funkciju bibliotēkai. Es to neiekļāvu (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

Lai gan, varbÅ«t es kaut ko nesapratu? VarbÅ«t kāds komentāros var paskaidrot: kā Å”is skripts nodroÅ”ina droÅ”u un uzticamu datu dublÄ“Å”anu? [TBD]

rsync, starp citu, ir iekļauts papildinājumā. krātuves. Versija 3.1.3. Es domāju, ka rsync izmantoŔana joprojām ir labāka alternatīva /mcst/bin/backup lietojumprogrammai.

Tālāk es nolēmu ievietot jaunu Veeam aÄ£ents operētājsistēmai Linux. Kāds jautās: "Kāds ar to sakars Veeam un importa aizstāŔanai?" Jā, tas nav reÄ£istrēts, bet ir sertificējis FSTEC, kas nozÄ«mē, ka, ja nav alternatÄ«vu, to var izmantot. Tērējot piecpadsmit minÅ«tes alternatÄ«vām no plkst reÄ£istrs, es varēju atrast 3 saites uz vārdu ā€œrezervesā€ (neviena nav saistÄ«ta ar manu jautājumu par vārdu ā€œrezerveā€). Es neesmu veicis Å”o programmu dziļu analÄ«zi, tāpēc nemēģināŔu spriest, cik tās ir piemērotas tādu iekārtu dublÄ“Å”anai, kurās darbojas Linux. Kam tas vajadzÄ«gs, tas izdarÄ«s savu secinājumu un padalÄ«sies komentāros.

TreÅ”ais posms ā€” Veeam Agent instalÄ“Å”ana operētājsistēmai Linux.
Tātad Veeam Agent for Linux sastāv no divām pakotnēm: veeamsnap kodola moduļa (starp citu, avots Å”eit) un patentēts lietotāja telpas kods veeam pakotnes veidā.

Ar kodola moduļa instalÄ“Å”anu radās viena neliela problēma - trÅ«kstoŔā dkms pakotne. Å is ir pakalpojums, kas ļauj izveidot kodola moduļus no avota. Parasti tas ir pieejams visos deb izplatÄ«jumos. Man tas bija jālejupielādē no treŔās puses deb repozitorija. Viena lieta, kas mani iepriecināja, ir tas, ka pakete nav atkarÄ«ga no arhitektÅ«ras, tāpēc tā der kā vietējā. Kāpēc tas netika iekļauts pieejamo pakotņu sarakstā vai drÄ«zāk nav izstrādāts [TBD]? Iespējams, tiek pieņemts, ka nevienam nevajadzētu veidot un palaist kodola moduļus, kas nav MCST. Å eit patieŔām ir neatbilstÄ«ba - jo ir Linux galvenes. Tas ir, moduli, ja vēlas, var salikt ar rokām un palaist ar skriptu, kad iekārta tiek iedarbināta. Es domāju, ka jums nevajadzētu gaidÄ«t biežus atjauninājumus no MCST [TBD].

"Labi, modulis ir instalēts - grÅ«tākā daļa ir beigusies," es domāju... Veeam pakotne deb repozitorijai ir paredzēta platformai amd64, un Elbrus OS ir x86_64 [TBD] platforma. AtŔķirÄ«ba, protams, ir tikai nosaukumā, taču Ŕī atŔķirÄ«ba padara gandrÄ«z visas pakotnes no treÅ”o puÅ”u deb krātuvēm nesaderÄ«gas ar Elbrus OS. Å o kaitinoÅ”o pārpratumu var vienkārÅ”i novērst: vienkārÅ”i izjauciet paketi, izlabojiet informāciju par arhitektÅ«ru un salieciet to atpakaļ. Kā to izdarÄ«t Google to meklēja uzreiz.

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

Vēl viena problēma ir atkarÄ«bas. Å Ä·iet, ka nepiecieÅ”amie faili ir, bet pakotnes nav. Radās iespaids, ka iepakojumu nosaukumi atŔķiras no to ā€œimportētajiem analogiemā€. Iespējams, bibliotēkas ir iepakotas atŔķirÄ«gi. Es neiedziļinājos pārāk daudz detaļās, noņēmu gandrÄ«z visas atkarÄ«bas, un instalÄ“Å”ana turpinājās.

Pēc tam radās problēmas ar pakalpojuma sākuma kodu. TrÅ«ka skripta /lib/init/vars.sh. Kādu iemeslu dēļ Elbruss iztiek bez tā, tāpēc mēs to arÄ« noņemsim. Tālāk mums bija jāaizstāj ziņojuma izvades funkcija: trÅ«ka funkciju log_daemon_msg un log_end_msg. Pēc rakņāŔanās /lib/lsb/init-functions failā atradu funkciju log_success_msg ā€” tā mums noderēs eksperimentiem. Starp citu, failā /lib/lsb/init-functions rinda ā€œ# Source SuSE`s rc functionsā€ atrodas faila [TBD] sākumā.

Pēc Ŕādas aptuvenas pakotnes apstrādes ar failu tika veiksmÄ«gi palaists visas maŔīnas dublējums NFS koplietojumā. ArÄ« rezerves stiprinājums bija veiksmÄ«gs. Tāpēc es uzskatu, ka maŔīnas dublÄ“Å”anai ar Elbrus PDK, kas lejupielādēts ā€œtieÅ”i tāpatā€ bez jebkādām saistÄ«bām, Veeam Agent for Linux noteikti ir piemērots. Pat pēc visām modifikācijām ar failu.

Protams, Elbrus OS izplatÄ«Å”anas komplekts formāli netiek atbalstÄ«ts, jo tas nav iekļauts atbalstÄ«to sarakstā. Turklāt Veeam Agent for Linux tajā nepārbaudÄ«ja kvalitātes nodroÅ”ināŔanas nodaļa, tāpēc tie. atbalsta nav (vismaz raksta publicÄ“Å”anas brÄ«dÄ«).

Ceru, ka raksts būs noderīgs tiem, kas cenŔas īstenot 334. gada 29.06.2017. jūnija rīkojumu Nr.XNUMX. Mans jums... [TBD].

Avots: www.habr.com

Pievieno komentāru