Linux-ի կրկնօրինակում Veeam-ից Elbrus OS-ում: Ներմուծման փոխարինում ['?' | '.' | '!']

Բարեւ բոլորին
Վերջին հոդվածները Habré-ի մասին Ներմուծման փոխարինումը գործնականում. Մաս 1. Ընտրանքներ и Երաժշտությունը երկար չհնչեց… կամ ինչպես Elbrus OS-ն երբեք անվճար չդարձավ ինձ անտարբեր չթողեց. Ես որոշեցի ուսումնասիրել այս հարցը պահեստային առաջադրանքի համատեքստում: Ավելին, ներս այս հոդվածը Նշվում են Veeam Software արտադրանքները, ինչը նշանակում է, որ խնդիրը կարող է տեղին լինել հատկապես ներմուծման փոխարինման համատեքստում:

Linux-ի կրկնօրինակում Veeam-ից Elbrus OS-ում: Ներմուծման փոխարինում ['?' | '.' | '!']
բնօրինակ պատկերի աղբյուր

Նախ, ես որոշեցի ներբեռնել Elbrus OS-ը, ավելի ճիշտ՝ միայն հասանելի բաշխումը x86_64 ճարտարապետության համար, տեսնեմ, թե ինչպես է այն աշխատում, և փորձեցի դրա վրա տեղադրել Veeam Agent-ը Linux-ի համար։ Եթե ​​ցանկանում եք իմանալ, թե ինչ է ստացվել դրանից, խնդրում եմ տեսեք կատվին:

Այսպիսով, մի փոքր շեղում, եթե ինչ-որ մեկը չգիտի: «Էլբրուսը» այդպիսին է պրոցեսոր բավականին կոնկրետ հրամանատարական համակարգով։ Բացի դրանից, կա Elbrus OS ծրագրակազմ: Եվ, հակառակ տարածված կարծիքի, Elbrus OS-ի գործարկման համար անհրաժեշտ չէ ունենալ ապարատային համակարգ, որը հիմնված է Elbrus պրոցեսորի վրա: Կա «PDK «Elbrus» x86-ի համար. փաստորեն, այն հայտնվել է հանրային տիրույթում տեղադրման սկավառակի տեսքով: Ի դեպ, կա «PDK - պլատֆորմի մշակման հավաքածու, ծրագրավորողի հավաքածու» տողատակ, ինչը նշանակում է, որ այնտեղ առնվազն կոմպիլյատոր կա:

Եվս մեկ փոքրիկ հարկադիր նահանջ. Փաստն այն է, որ ես ժամանակին զբաղվել եմ հայրենական ծրագրերով, ինչպիսիք են MSVS-ը և Baguette RTOS-ը: Ես ունեի կենցաղային բաղադրիչների հետ աշխատելու փորձ, ներառյալ MCST-ի պրոցեսորը: Ուստի, ամենայն պատասխանատվությամբ կարող եմ ասել, որ այս ոլորտում կա որոշակի յուրահատկություն, և կփորձեմ հոդվածում չանդրադառնալ դրան։ Երբ ես իսկապես ցանկանամ, ես կդնեմ պիտակը [TBD]: Այսպիսով, մենք կփորձենք անել առանց բացահայտ տրոլինգի և սովորական հառաչանքի: Ի վերջո, պետք է հասկանալ ռուսական պաշտպանական արդյունաբերությունը և պետական ​​կառույցները: Մեծ երկիր՝ փոքր բյուջե.. [TBD].

Զրոյական փուլ - ներբեռնել. Հատկանշական է, որ Elbrus OS-ի հասանելիության մասին լուրն այնքան ռեզոնանս առաջացրեց, որ բաշխման սերվերը խափանվեց։ [TBD] Շնորհակալություն Yandex-ին և ինժեներին, ով մտածում էր այն տեղափոխել այնտեղ: Այսպիսով, ներբեռնման արագությունը լավ է:

Առաջին փուլը - տեղադրում. Ես այն տեղադրեցի առաջին հիպերվիզորի վրա, որը հասանելի էր անվճար օգտագործման համար: Երկու միջուկ եմ հատկացրել, մի երկու գիգեր օպերատիվ հիշողություն, 32 մբ վիդեո (գրաֆիկական ինտերֆեյս կլինի, մտածեցի)։ Սկավառակը սովորականի պես է՝ 32 ԳԲ։
Ես սկսեցի տեղադրումը: Ես չեմ օգտագործել տեղադրման հրահանգները, ուստի չեմ կարող մեկնաբանել այն: TUI տեղադրման ինտերֆեյսը խիստ մինիմալիստական ​​է:

Linux-ի կրկնօրինակում Veeam-ից Elbrus OS-ում: Ներմուծման փոխարինում ['?' | '.' | '!']
Դե, հիանալի, մենք կարող ենք անել առանց մկնիկի:

Ես կարողացա հաջորդ պատուհանը երկրորդ փորձից: Ինչու՞ չընտրել լռելյայն սարքը sr0 [TBD] սկավառակից տեղադրելիս:
Ընտրեք CD-ROM-ի աղբյուրը և շարունակեք:

Linux-ի կրկնօրինակում Veeam-ից Elbrus OS-ում: Ներմուծման փոխարինում ['?' | '.' | '!']

Ժամային գոտին ընտրելիս ես հանկարծ հասկացա, որ համակարգն օգտագործում է init boot գործընթացը, և ես աշխատում եմ TTY0-ից:

Linux-ի կրկնօրինակում Veeam-ից Elbrus OS-ում: Ներմուծման փոխարինում ['?' | '.' | '!']

Լավ, ուրեմն եկեք «Էլբրուսը» դասակարգենք որպես համայնք Հին հավատացյալներ[TBD]: Սկզբունքորեն, սա լավ է. ձեզ հարկավոր չէ աղբյուրի կոդը խնդրել, որպեսզի տեսնեք, թե ինչպես է աշխատում ներբեռնման գործընթացը, քանի որ ամեն ինչ գրված է:

Մնացածը համարյա անկարևոր է՝ ամեն ինչ դնում ենք ու համաձայնում։ Ճանապարհին պարզում ենք, որ միջուկն օգտագործվում է 3.14.79-13.84: Հմմ, Debian 7-ն ուներ 3.2 [TBD]:

Հաջորդը, ընտրեք սկավառակի լռելյայն բաժանումը և... Մենք տեսնում ենք նախազգուշացում.

Linux-ի կրկնօրինակում Veeam-ից Elbrus OS-ում: Ներմուծման փոխարինում ['?' | '.' | '!']

Հմմ, ինչ-որ կերպ ավտոմատ բաժանումը լավ չէր հաղթահարում 32 գիգացիոն սկավառակի հետ: Ես չեմ փոխել սկավառակը, ես ավարտեցի որոնումը «բոլորը մեկում» ոճով սկավառակի ձեռքով բաժանման միջոցով: Ես ստիպված էի տեղադրել ext3, քանի որ /boot-ը չէր կարող լինել ext4-ում:
Համակարգը գործարկվեց առանց միջադեպերի:

Երկրորդ փուլը - այլընտրանքների որոնում:
Երկրորդ սկավառակի բովանդակությունը փորփրելուց հետո ես հասկացա, որ սա լրացուցիչ շտեմարան է: փաթեթներում: Եվ նայելով /etc/apt/sources.list-ին, ես հասկացա, որ այն պետք է տեղադրվի /mnt/cdrom-ում: Բայց ես չգտա /etc/os-release: Բայց կա /etc/mcst-տարբերակ 3.0-rc36 բովանդակությամբ: 3.0-ը երևի տարբերակն է, կարծես տեղավորվում է, բայց rc36? Ընդհանուր առմամբ, երրորդ կողմի ծրագրակազմը, ամենայն հավանականությամբ, չի կարողանա ճանաչել այս բաշխումը դասական եղանակով:

Արմատային բաժանման մեջ /mcst գրացուցակը գրավում է իմ աչքը, և այնտեղ, խորտակվող սրտով, ես հայտնաբերեցի /mcst/backup-ը։ Այսինքն, կա պահեստային գործիք, և այն ներկառուցված է համակարգում: «Հրաշալի», մտածեցի ես, «Տեսնենք, թե ինչպես է դա աշխատում»:

Պարզվեց, որ կա 4Kb bash script /mcst/bin/backup, որն ապահովում է ֆայլերի պատճենում։ Լռելյայն - դեպի /mcst/backup գրացուցակ: Աղբյուրի կոդում ես ակնկալում էի տեսնել rsync հրամանը, բայց այն չկա լռելյայն կազմաձևում: Սցենարը պարզապես պատճենում է ֆայլերը: Հրամանն այսպիսի տեսք ունի.

cp -rpdx <file backup> <file>

Ամբողջ ֆայլը /mcst/bin/backup-ն այստեղ էԱնմիջապես զգուշացնում եմ, որ միայն այս սցենարը բավարար չէ ամբողջությամբ հասկանալու համար։ Այն ֆունկցիաներ է հանում /mcst/bin/source-ից, որը ֆունկցիաների գրադարանի պես մի բան է: Ես չեմ ներառել այն (44 ԿԲ):

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

Չնայած, միգուցե ես ինչ-որ բան չհասկացա? Գուցե ինչ-որ մեկը կարող է բացատրել մեկնաբանություններում. ինչպե՞ս է այս սկրիպտը ապահովում տվյալների անվտանգ և հուսալի կրկնօրինակում: [TBD]

rsync-ն, ի դեպ, ներառված է հավելման մեջ։ պահոցներ. Տարբերակ 3.1.3. Կարծում եմ, որ rsync-ի օգտագործումը դեռ ավելի լավ այլընտրանք է /mcst/bin/backup հավելվածին:

Հաջորդը որոշեցի թարմը դնել Veeam գործակալ Linux-ի համար. Ինչ-որ մեկը կհարցնի. «Ի՞նչ կապ ունի Veeam-ը և ներմուծման փոխարինումը»: Այո, գրանցամատյանում չկա, բայց այն վավերացված է FSTEC-ի կողմից, ինչը նշանակում է, որ այլընտրանքների բացակայության դեպքում այն ​​կարող է օգտագործվել։ Տասնհինգ րոպե ծախսելով այլընտրանքների վրա գրանցում, ես կարողացա գտնել «պահուստային» բառի 3 հղում (ոչ մեկը կապված «պահուստ» բառի իմ հարցի հետ): Ես այս ծրագրերի խորը վերլուծություն չեմ արել, ուստի չեմ փորձի դատել, թե որքանով են դրանք հարմար Linux-ով աշխատող մեքենաների կրկնօրինակման համար: Ում դա պետք է, նա կանի իր եզրակացությունը և կկիսվի մեկնաբանություններում։

Երեք փուլ — Veeam Agent-ի տեղադրում Linux-ի համար:
Այսպիսով, Veeam Agent-ը Linux-ի համար բաղկացած է երկու փաթեթից՝ veeamsnap միջուկի մոդուլը (ի դեպ, աղբյուրը՝ այստեղ) և օգտատերերի տարածքային ծածկագիրը veeam փաթեթի տեսքով:

Մի փոքր խնդիր կար միջուկի մոդուլի տեղադրման հետ՝ բացակայող dkms փաթեթը: Սա ծառայություն է, որը թույլ է տալիս ստեղծել միջուկի մոդուլներ աղբյուրից: Որպես կանոն, այն հասանելի է բոլոր deb բաշխումների վրա: Ես ստիպված էի այն ներբեռնել երրորդ կողմի դեբային պահոցից: Մի բան, որ ինձ ուրախացրեց, այն է, որ փաթեթը կախված չէ ճարտարապետությունից, ուստի այն տեղավորվում է որպես հայրենի: Ինչո՞ւ այն ներառված չէր հասանելի փաթեթների ցանկում, ավելի ճիշտ՝ մշակված [TBD]: Թերևս ենթադրվում է, որ ոչ ոք չպետք է կառուցի և գործարկի ոչ MCST միջուկի մոդուլներ: Այստեղ իսկապես անհամապատասխանություն կա, քանի որ կան linux-headers: Այսինքն, մոդուլը, ցանկության դեպքում, կարող է հավաքվել ձեռքով և գործարկել սկրիպտի միջոցով, երբ մեքենան գործարկվի: Կարծում եմ, դուք չպետք է ակնկալեք հաճախակի թարմացումներ MCST [TBD]-ից:

«Լավ, մոդուլը տեղադրված է, ամենադժվարն ավարտված է», - մտածեցի ես... Deb պահեստի veeam փաթեթը նախատեսված է amd64 հարթակի համար, իսկ Elbrus OS-ն ունի x86_64 [TBD] հարթակ: Տարբերությունը, իհարկե, միայն անվան մեջ է, բայց այս տարբերությունը երրորդ կողմի դեբային պահեստներից գրեթե բոլոր փաթեթները անհամատեղելի է դարձնում Elbrus OS-ի հետ: Այս տհաճ թյուրիմացությունը կարելի է պարզապես վերացնել՝ պարզապես ապամոնտաժել փաթեթը, ուղղել ճարտարապետության մասին տեղեկատվությունը և նորից միացնել այն: Ինչպես դա անել Google-ով դա արեց ակնթարթորեն.

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

Մեկ այլ խնդիր է կախվածությունը: Անհրաժեշտ ֆայլերը կարծես կան, բայց փաթեթները չկան: Տպավորություն էր, որ փաթեթների անվանումները տարբերվում էին դրանց «ներմուծված անալոգներից»։ Միգուցե գրադարաններն այլ կերպ են փաթեթավորված։ Ես շատ չմանրամասնեցի, հանեցի գրեթե բոլոր կախվածությունները, և տեղադրումը շարունակվեց:

Այնուհետև խնդիրներ են առաջացել ծառայության մեկնարկի կոդի հետ: /lib/init/vars.sh սցենարը բացակայում էր: Չգիտես ինչու, Էլբրուսը կարողանում է առանց դրա, այնպես որ մենք այն նույնպես կհեռացնենք: Այնուհետև մենք ստիպված էինք փոխարինել հաղորդագրության ելքային ֆունկցիան. log_daemon_msg և log_end_msg գործառույթները բացակայում էին: /lib/lsb/init-functions ֆայլում փնտրելուց հետո ես գտա log_success_msg ֆունկցիան. դա մեզ համար լավ կլինի փորձերի համար: Ի դեպ, /lib/lsb/init-functions ֆայլում «# Source SuSE`s rc functions» տողը գտնվում է [TBD] ֆայլի սկզբում:

Փաթեթի ֆայլով նման կոպիտ մշակումից հետո հաջողությամբ գործարկվեց NFS բաժնետոմսի ամբողջ մեքենայի կրկնօրինակը: Պահուստային ամրացումը նույնպես հաջող էր: Այսպիսով, ես կարծում եմ, որ Elbrus PDK-ով ներբեռնված «հենց այնպես» առանց որևէ պարտավորության մեքենայի կրկնօրինակման համար, Veeam Agent-ը Linux-ի համար միանշանակ հարմար է: Նույնիսկ ֆայլի հետ կատարված բոլոր փոփոխություններից հետո:

Իհարկե, Elbrus OS բաշխման փաթեթը պաշտոնապես չի աջակցվում, քանի որ այն ներառված չէ աջակցվողների ցանկում: Բացի այդ, Veeam Agent-ը Linux-ի համար չի փորձարկվել դրա վրա QA բաժնի կողմից, ուստի դրանք. աջակցություն չկա (համենայն դեպս հոդվածի հրապարակման պահին):

Հուսով եմ հոդվածը օգտակար կլինի նրանց, ովքեր փորձում են իրականացնել 334 թվականի հունիսի 29.06.2017-ի թիվ XNUMX հրամանը։ Իմը քեզ... [TBD]:

Source: www.habr.com

Добавить комментарий