Sovgad Linux soti nan Veeam sou Elbrus OS. Enpòte sibstitisyon ['?' | '.' | '!']

Bonjou tout moun.
Dènye atik sou Habré Enpòte sibstitisyon an pratik. Pati 1. Opsyon и Mizik la pa t jwe pou lontan... oswa ki jan Elbrus OS pa janm vin gratis pa kite m 'endiferan. Mwen deside etidye pwoblèm sa a nan yon kontèks travay la backup. Anplis, nan atik sa a Yo mansyone pwodwi Veeam Software, ki vle di ke pwoblèm nan ka enpòtan espesyalman nan yon kontèks sibstitisyon enpòte.

Sovgad Linux soti nan Veeam sou Elbrus OS. Enpòte sibstitisyon ['?' | '.' | '!']
sous imaj orijinal la

Premye a tout, mwen deside telechaje OS Elbrus la, oswa pito, sèlman distribisyon ki disponib pou achitekti x86_64 la, wè ki jan li fonksyone, epi eseye enstale Veeam Agent pou Linux sou li. Si ou vle konnen sa ki soti nan sa a, tanpri gade chat.

Donk, yon ti digression, nan ka yon moun pa konnen. "Elbrus" se konsa processeur ak yon sistèm lòd olye espesifik. Anplis de sa, gen lojisyèl Elbrus OS. Ak - kontrèman ak yon miskonsepsyon komen - pou Elbrus OS la travay, li pa nesesè pou gen yon sistèm pyès ki nan konpitè ki baze sou processeur Elbrus la. Gen "PDK "Elbrus" pou x86" - an reyalite, li parèt nan domèn piblik la nan fòm lan nan yon disk enstalasyon. By wout la, gen yon nòt anba a "PDK - twous devlopman platfòm, twous devlopè" - gwo, sa vle di gen omwen yon duil la.

Yon lòt ti retrè fòse. Reyalite a se ke mwen yon fwa te fè fas ak lojisyèl domestik, tankou MSVS ak Baguette RTOS. Mwen te gen eksperyans travay ak konpozan domestik, ki gen ladan yon processeur soti nan MCST. Se poutèt sa, mwen ka di ak tout responsablite ke gen yon espesifik espesifik nan zòn sa a epi li se jisteman sa a ke mwen pral eseye pa manyen sou nan atik la. Lè mwen reyèlman vle, mwen pral mete tag la [TBD]. Se konsa, nou pral eseye fè san yo pa trolling kareman ak jemisman ordinèr. Nan fen a, endistri defans Ris la ak ajans gouvènman yo bezwen konprann. Gwo peyi - ti bidjè.. [TBD].

Zewo etap - telechaje. Se enpòtan pou remake ke nouvèl la ki Elbrus OS la te vin disponib te lakòz yon sonorite, tèlman bagay ke sèvè distribisyon an te desann. [TBD] Mèsi a Yandex ak enjenyè a ki te panse deplase li la. Se konsa, vitès download la se yon bon bagay.

Premye etap-la - enstalasyon. Mwen enstale li sou premye hypervisor ki te disponib pou itilize gratis. Mwen asiyen de nwayo, yon koup nan gig nan RAM, 32 MB pou videyo (pral gen yon koòdone grafik, mwen te panse). Disk la se kòm dabitid - 32 GB.
Mwen te kòmanse enstalasyon an. Mwen pa t sèvi ak enstriksyon enstalasyon yo, kidonk mwen pa ka fè kòmantè sou li. Koòdone enstalasyon TUI a trè minimalist.

Sovgad Linux soti nan Veeam sou Elbrus OS. Enpòte sibstitisyon ['?' | '.' | '!']
Oke, gwo, nou ka fè san yo pa yon sourit.

Mwen jere pwochen fenèt la sou dezyèm eseye an. Poukisa ou pa chwazi aparèy default sr0 [TBD] lè w ap enstale sou disk?
Chwazi sous CD-ROM la epi kontinye.

Sovgad Linux soti nan Veeam sou Elbrus OS. Enpòte sibstitisyon ['?' | '.' | '!']

Pandan m t ap chwazi zòn lè a, mwen te reyalize toudenkou ke sistèm nan itilize pwosesis init bòt la, epi mwen ap travay nan TTY0.

Sovgad Linux soti nan Veeam sou Elbrus OS. Enpòte sibstitisyon ['?' | '.' | '!']

OK, Lè sa a, ann klasifye "Elbrus" kòm yon kominote Ansyen kwayan[TBD]. Nan prensip, sa a se yon bon bagay: ou pa bezwen mande pou kòd la sous yo wè ki jan pwosesis la telechaje travay, depi tout bagay se scripted.

Rès la prèske pa enpòtan: nou mete tout bagay epi nou dakò. Sou wout la, nou jwenn ke nwayo a itilize 3.14.79-13.84. Hmm, Debian 7 te gen 3.2 [TBD].

Apre sa, chwazi patisyon disk default la ak... Nou wè yon avètisman:

Sovgad Linux soti nan Veeam sou Elbrus OS. Enpòte sibstitisyon ['?' | '.' | '!']

Hmm, yon jan kanmenm patisyon otomatik la pa t 'fè fas byen ak yon disk 32 gig. Mwen pa t 'chanje disk la mwen ranpli demand la ak patisyon manyèl disk nan style la "tout-an-yon". Mwen te oblije enstale ext3, depi /boot pa t 'kapab nan ext4.
Sistèm nan te vini san ensidan.

Etap nan dezyèm - rechèch pou altènativ.
Apre fouye nan sa ki nan dezyèm disk la, mwen reyalize ke sa a se yon depo ak adisyonèl. nan pakè. Epi gade nan /etc/apt/sources.list, mwen reyalize ke li bezwen monte nan /mnt/cdrom. Men, mwen pa t jwenn /etc/os-release. Men, gen /etc/mcst-version ak sa ki 3.0-rc36. 3.0 se pwobableman vèsyon an - li sanble anfòm, men rc36? An jeneral, lojisyèl twazyèm pati ap gen plis chans pa kapab rekonèt distribisyon sa a nan fason klasik la.

Nan patisyon rasin lan, /mcst anyè a atire je m ', epi la, ak yon kè koule, mwen dekouvri /mcst/backup. Sa vle di, gen yon zouti backup, epi li bati nan sistèm nan! "Bon," mwen te panse, "Ann wè ki jan sa a fonksyone!"

Li te tounen soti ke gen yon script bash 4Kb /mcst/bin/backup ki bay kopi dosye. Pa default - nan anyè /mcst/backup. Nan kòd sous la mwen espere wè lòd rsync la, men li pa nan konfigirasyon default la. Script la tou senpleman kopye fichye yo. Kòmandman an sanble yon bagay tankou sa a:

cp -rpdx <file backup> <file>

Tout fichye /mcst/bin/backup la isit laMwen avèti ou touswit ke script sa a pou kont li pa ase pou konprann konplètman. Li rale fonksyon nan /mcst/bin/source, ki se yon bagay tankou yon bibliyotèk fonksyon. Mwen pa enkli li (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

Malgre ke, petèt mwen pa t 'konprann yon bagay? Petèt yon moun ka eksplike nan kòmantè yo: ki jan script sa a asire sekirite ak serye done backup? [TBD]

rsync, nan chemen an, se enkli nan ajoute a. depo. Vèsyon 3.1.3. Mwen panse ke lè l sèvi avèk rsync se toujou yon pi bon altènatif nan aplikasyon /mcst/bin/backup la.

Apre sa, mwen deside mete yon nouvo Veeam Agent pou Linux. Yon moun pral mande: "Kisa Veeam ak sibstitisyon enpòte gen pou wè ak li?" Wi, li pa nan rejis la, men li sètifye pa FSTEC, ki vle di ke nan absans altènatif li ka itilize. Pase kenz minit sou altènativ de rejis, Mwen te kapab jwenn 3 lyen pou mo "sovgad" (pa gen okenn ki gen rapò ak kesyon mwen an pou mo "rezèv"). Mwen pa te fè yon analiz pwofon nan pwogram sa yo, kidonk mwen pa pral eseye jije ki jan yo apwopriye pou fè bak machin ki kouri Linux. Nenpòt moun ki bezwen li pral tire pwòp konklizyon pa l epi pataje li nan kòmantè yo.

etap twa — enstalasyon Veeam Agent pou Linux.
Se konsa, Veeam Agent pou Linux konsiste de de pakè: modil nwayo veeamsnap la (pa chemen an, sous isit la) ak pwopriyete itilizatè-espas kòd nan fòm lan nan pake veeam la.

Te gen yon ti pwoblèm ak enstale modil nwayo a - pake dkms ki manke a. Sa a se yon sèvis ki pèmèt ou bati modil nwayo soti nan sous. Kòm yon règ, li disponib sou tout distribisyon deb. Mwen te oblije telechaje li nan yon depo twazyèm pati. Youn nan bagay ki te fè m kontan se ke pake a pa depann de achitekti a, kidonk li adapte tankou yon sèl natif natal. Poukisa li pa te enkli nan lis pakè ki disponib yo, oswa olye li pa te devlope [TBD]? Petèt li sipoze ke pèsonn pa ta dwe bati ak kouri nenpòt modil nwayo ki pa MCST. Gen reyèlman yon diferans isit la - depi gen linux-headers. Sa vle di, modil la, si ou vle, ka rasanble alamen epi lanse pa yon script lè machin nan kòmanse. Mwen panse ke ou pa ta dwe atann mizajou souvan soti nan MCST [TBD].

"OK, modil la enstale - pati ki pi difisil la fini," mwen te panse... Pake veeam pou repozitwa deb la se pou platfòm amd64 la, ak OS Elbrus la gen yon platfòm x86_64 [TBD]. Diferans lan, nan kou, se sèlman nan non an, men diferans sa a fè prèske tout pakè ki soti nan repozitwa deb twazyèm pati enkonpatib ak eksplwatasyon Elbrus la. Sa a enkonpreyansyon anmèdan ka elimine tou senpleman: jis demonte pake a, korije enfòmasyon yo sou achitekti a epi mete l 'tounen ansanm. Ki jan fè li Googled li imedyatman.

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

Yon lòt pwoblèm se depandans. Dosye ki nesesè yo sanble la, men pakè yo pa. Enpresyon a te ke non pakè yo diferan de "analòg enpòte yo". Petèt bibliyotèk yo pake yon fason diferan. Mwen pa t 'antre nan twòp detay, retire prèske tout depandans yo, ak enstalasyon an te ale pi devan.

Lè sa a, pwoblèm parèt ak kòd la kòmanse sèvis. Script /lib/init/vars.sh te manke. Pou kèk rezon, Elbrus jere san li, kidonk nou pral retire li tou. Apre sa, nou te oblije ranplase fonksyon pwodiksyon mesaj la: fonksyon log_daemon_msg ak log_end_msg te manke. Apre fouye nan /lib/lsb/init-functions fichye a, mwen jwenn fonksyon log_success_msg - li bon pou nou pou eksperyans. By wout la, nan dosye /lib/lsb/init-functions liy "# Source SuSE`s rc functions" se nan kòmansman fichye [TBD].

Apre pwosesis sa yo ki graj nan pake a ak yon dosye, yo te lanse avèk siksè backup nan tout machin sou pataje NFS la. Mòn nan backup te tou siksè. Se konsa, mwen kwè, pou fè bak yon machin ak Elbrus PDK a, telechaje "jis konsa" san okenn obligasyon, Veeam Agent pou Linux se definitivman apwopriye. Menm apre tout modifikasyon yo ak yon dosye.

Natirèlman, Elbrus OS distribisyon twous la pa fòmèlman sipòte, paske li pa enkli nan lis la nan moun ki sipòte. Anplis de sa, Veeam Agent pou Linux pa te teste sou li pa depatman QA a, se konsa sa yo. pa gen okenn sipò (omwen nan moman piblikasyon atik la).

Mwen espere atik la ap itil moun k ap eseye aplike lòd nimewo 334 29.06.2017 jen XNUMX la. Mwen pou ou... [TBD].

Sous: www.habr.com

Add nouvo kòmantè