Elbrus үйлдлийн систем дээрх Veeam-аас Linux нөөцлөлт. Импортыг орлуулах ['?' | '.' | '!']

Бүгдээрээ сайн байцгаана уу.
Хабрегийн сүүлийн үеийн нийтлэлүүд Практикт импортыг орлох. 1-р хэсэг. Сонголтууд и Хөгжим удаан тоглоогүй ... эсвэл Elbrus OS хэзээ ч үнэгүй болоогүй намайг хайхрамжгүй орхисонгүй. Би энэ асуудлыг нөөцлөх ажлын хүрээнд судлахаар шийдсэн. Түүнээс гадна, онд энэ нийтлэл Veeam програм хангамжийн бүтээгдэхүүнийг дурьдсан бөгөөд энэ нь импортыг орлох асуудалд онцгой хамааралтай байж магадгүй гэсэн үг юм.

Elbrus үйлдлийн систем дээрх Veeam-аас Linux нөөцлөлт. Импортыг орлуулах ['?' | '.' | '!']
анхны зургийн эх сурвалж

Юуны өмнө би Elbrus үйлдлийн систем, эс тэгвээс зөвхөн x86_64 архитектурт ашиглах боломжтой түгээлтийг татаж авахаар шийдсэн бөгөөд энэ нь хэрхэн ажилладагийг харж, Linux-д зориулсан Veeam Agent-г суулгахыг оролдсон. Хэрэв та үүнээс юу гарсныг мэдэхийг хүсвэл муурыг үзээрэй.

Тиймээс, хэн нэгэн мэдэхгүй тохиолдолд жижиг ухралт. "Эльбрус" ийм л байдаг CPU нэлээд тодорхой тушаалын системтэй. Үүнээс гадна Elbrus OS програм хангамж байдаг. Мөн нийтлэг буруу ойлголтоос ялгаатай нь Elbrus OS ажиллахын тулд Elbrus процессор дээр суурилсан техник хангамжийн систем байх шаардлагагүй. "X86-д зориулсан PDK "Elbrus" байдаг - үнэн хэрэгтээ энэ нь олон нийтийн домэйнд суулгах диск хэлбэрээр гарч ирсэн. Дашрамд хэлэхэд, "PDK - платформ хөгжүүлэлтийн хэрэгсэл, хөгжүүлэгчийн хэрэгсэл" гэсэн зүүлт тайлбар байгаа бөгөөд энэ нь дор хаяж хөрвүүлэгч байгаа гэсэн үг юм.

Өөр нэг жижиг албадан ухрах. Би нэг удаа MSVS, Baguette RTOS гэх мэт дотоодын программ хангамжтай ажиллаж байсан явдал юм. Би MCST-ийн процессор зэрэг дотоодын эд ангиудтай ажиллаж байсан туршлагатай. Тиймээс би энэ чиглэлээр тодорхой онцлог шинж чанартай гэдгийг бүрэн хариуцлагатайгаар хэлж чадна, би нийтлэлдээ үүнийг хөндөхгүй байхыг хичээх болно. Би үнэхээр хүсч байвал [TBD] шошгыг тавина. Тиймээс бид шууд троллинг, улиг болсон ёолохгүйгээр хийхийг хичээх болно. Эцсийн дүндээ Оросын батлан ​​хамгаалах үйлдвэр, төрийн байгууллагуудыг ойлгох хэрэгтэй. Том улс - жижиг төсөв.. [TBD].

Тэг шат - татаж авах. Elbrus OS-ийг ашиглах боломжтой болсон тухай мэдээ нь резонанс үүсгэж, түгээлтийн сервер унтарсан нь анхаарал татаж байна. [TBD] Yandex-д болон түүнийг тийш нь нүүлгэхээр бодсон инженердээ баярлалаа. Тиймээс татаж авах хурд сайн байна.

Эхний шат - суурилуулах. Би үүнийг үнэгүй ашиглах боломжтой анхны гипервизорт суулгасан. Би хоёр цөм, хэд хэдэн RAM, видеонд 32 МБ хуваарилсан (график интерфэйс байх болно гэж би бодсон). Диск нь ердийнх шиг - 32 ГБ.
Би суулгацыг эхлүүлсэн. Би суулгах зааврыг ашиглаагүй тул үүн дээр тайлбар өгөх боломжгүй. TUI суулгах интерфейс нь маш минималист юм.

Elbrus үйлдлийн систем дээрх Veeam-аас Linux нөөцлөлт. Импортыг орлуулах ['?' | '.' | '!']
За, гайхалтай, бид хулганагүйгээр хийж чадна.

Би хоёр дахь оролдлого дээр дараагийн цонхыг удирдаж чадсан. Дискнээс суулгахдаа өгөгдмөл төхөөрөмж sr0 [TBD]-г яагаад сонгож болохгүй гэж?
CD-ROM эх сурвалжийг сонгоод цааш үргэлжлүүлнэ үү.

Elbrus үйлдлийн систем дээрх Veeam-аас Linux нөөцлөлт. Импортыг орлуулах ['?' | '.' | '!']

Цагийн бүсийг сонгохдоо систем нь эхлүүлэх ачаалах процессыг ашигладаг болохыг би гэнэт ойлгосон бөгөөд би TTY0-аас ажиллаж байна.

Elbrus үйлдлийн систем дээрх Veeam-аас Linux нөөцлөлт. Импортыг орлуулах ['?' | '.' | '!']

За, "Эльбрус"-ыг нийгэмлэг гэж ангилъя Хуучин итгэгчид[TBD]. Зарчмын хувьд энэ нь сайн хэрэг: та татаж авах процесс хэрхэн явагддагийг харахын тулд эх кодыг асуух шаардлагагүй, учир нь бүх зүйл скрипт бичигдсэн байдаг.

Үлдсэн хэсэг нь бараг чухал биш: бид бүгдийг тавьж, санал нийлдэг. Замдаа бид цөмийг 3.14.79-13.84 ашигладаг болохыг олж мэдэв. Хмм, Debian 7 нь 3.2 [TBD] байсан.

Дараа нь анхдагч дискний хуваалтыг сонгоод... Бид анхааруулга харна:

Elbrus үйлдлийн систем дээрх Veeam-аас Linux нөөцлөлт. Импортыг орлуулах ['?' | '.' | '!']

Хмм, ямар нэгэн байдлаар автомат хуваалт нь 32 гиг дискийг сайн даван туулсангүй. Би дискийг өөрчлөөгүй, би "бүгдийг нэг дор" хэв маягаар дискийг гараар хуваах даалгаврыг гүйцэтгэсэн. /boot нь ext3 дээр байх боломжгүй тул би ext4 суулгах шаардлагатай болсон.
Систем ямар ч асуудалгүйгээр гарч ирэв.

Хоёр дахь шат - өөр хувилбар хайх.
Хоёрдахь дискний агуулгыг гүйлгэсний дараа би энэ бол нэмэлт нөөцтэй хадгалах газар гэдгийг ойлгосон. багцуудад. Тэгээд /etc/apt/sources.list-ийг хараад би үүнийг /mnt/cdrom-д холбох хэрэгтэйг ойлгосон. Гэхдээ би /etc/os-release-г олсонгүй. Гэхдээ 3.0-rc36 агуулгатай /etc/mcst-version байна. 3.0 нь магадгүй хувилбар юм - энэ нь тохирох юм шиг санагдаж байна, гэхдээ rc36? Ерөнхийдөө гуравдагч талын програм хангамж нь энэ түгээлтийг сонгодог байдлаар таних боломжгүй байх магадлалтай.

Үндэс хуваалтаас /mcst лавлах миний анхаарлыг татсан бөгөөд би тэндээс /mcst/backup-ыг олсон. Өөрөөр хэлбэл, нөөцлөх хэрэгсэл байгаа бөгөөд үүнийг системд суулгасан болно! "Гайхалтай" гэж би бодлоо, "Энэ яаж ажилладгийг харцгаая!"

Файл хуулах боломжийг олгодог 4Kb bash скрипт /mcst/bin/backup байгаа нь тогтоогдсон. Анхдагчаар - /mcst/backup лавлах руу. Эх код дээр би rsync командыг харна гэж бодож байсан ч энэ нь анхдагч тохиргоонд байхгүй байна. Скрипт нь зүгээр л файлуудыг хуулдаг. Тушаал нь иймэрхүү харагдаж байна:

cp -rpdx <file backup> <file>

/mcst/bin/backup файл бүхэлдээ энд байнаЗөвхөн энэ скрипт нь бүрэн ойлгоход хангалтгүй гэдгийг би шууд анхааруулж байна. Энэ нь функцуудыг /mcst/bin/source-оос татдаг бөгөөд энэ нь функцуудын номын сан шиг зүйл юм. Би үүнийг оруулаагүй (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

Гэсэн хэдий ч, магадгүй би ямар нэг зүйлийг ойлгохгүй байна уу? Магадгүй хэн нэгэн тайлбар дээр тайлбарлаж болох юм: энэ скрипт нь мэдээллийн аюулгүй, найдвартай нөөцлөлтийг хэрхэн баталгаажуулдаг вэ? [TBD]

Дашрамд хэлэхэд rsync нь нэмэлт хэрэгсэлд багтсан болно. агуулахууд. Хувилбар 3.1.3. Миний бодлоор rsync ашиглах нь /mcst/bin/backup програмаас илүү сайн хувилбар хэвээр байна.

Дараа нь би шинэ нэгийг тавихаар шийдсэн Linux-д зориулсан Veeam Agent. Хэн нэгэн: "Veeam болон импортыг орлох нь үүнтэй ямар холбоотой вэ?" гэж асуух болно. Тийм ээ, энэ нь бүртгэлд байхгүй, гэхдээ энэ нь FSTEC-ээр баталгаажсан бөгөөд энэ нь өөр хувилбар байхгүй тохиолдолд үүнийг ашиглаж болно гэсэн үг юм. -аас өөр хувилбаруудад арван таван минут зарцуулдаг бүртгэл, Би "нөөцлөх" гэсэн үгийн 3 холбоосыг олж чадсан ("нөөц" гэсэн үгтэй холбоотой миний асуулттай холбоогүй). Би эдгээр программуудын талаар гүнзгий дүн шинжилгээ хийгээгүй тул Линукс дээр ажиллаж байгаа машинуудыг нөөцлөхөд хэр тохиромжтой болохыг дүгнэхийг оролдохгүй. Хэнд хэрэгтэй байгаа нь өөрөө дүгнэлтээ гаргаад комментоор хуваалцана.

Гуравдугаар шат — Linux-д зориулсан Veeam Agent суулгах.
Тэгэхээр Linux-д зориулсан Veeam Agent нь хоёр багцаас бүрдэнэ: veeamsnap цөмийн модуль (дашрамд хэлэхэд, эх сурвалж энд байна) болон veeam багц хэлбэрийн өмчийн хэрэглэгчийн орон зайн код.

Цөмийн модулийг суулгахад нэг жижиг асуудал гарсан - алга болсон dkms багц. Энэ нь эх сурвалжаас цөмийн модулиудыг бүтээх боломжийг олгодог үйлчилгээ юм. Дүрмээр бол энэ нь бүх debы хуваарилалт дээр байдаг. Би үүнийг гуравдагч этгээдийн дэб репозитороос татаж авах шаардлагатай болсон. Намайг баярлуулсан нэг зүйл бол багц нь архитектураас хамаардаггүй тул уугуул шиг тохирсон. Үүнийг яагаад боломжтой багцуудын жагсаалтад оруулаагүй, эс тэгвээс [TBD] боловсруулаагүй юм бэ? Магадгүй хэн ч MCST-ээс бусад цөмийн модулиудыг барьж, ажиллуулах ёсгүй гэж үздэг. Линукс-толгой байгаа тул энд үнэхээр зөрүү байна. Өөрөөр хэлбэл, хэрэв хүсвэл модулийг гараар угсарч, машин эхлэхэд скриптээр ажиллуулж болно. Та MCST [TBD]-ээс байнга шинэчлэлт хүлээж болохгүй гэж бодож байна.

“За, модуль суулгагдлаа – хамгийн хэцүү хэсэг нь дууслаа” гэж би бодлоо... Deb репозиторын veeam багц нь amd64 платформд зориулагдсан бөгөөд Elbrus OS нь x86_64 [TBD] платформтой. Мэдээжийн хэрэг, ялгаа нь зөвхөн нэр дээр байгаа боловч энэ ялгаа нь гуравдагч этгээдийн деби сангуудын бараг бүх багцыг Elbrus үйлдлийн системтэй нийцэхгүй болгодог. Энэхүү ядаргаатай үл ойлголцлыг зүгээр л арилгаж болно: зүгээр л багцыг задалж, архитектурын талаархи мэдээллийг засч, буцааж эвлүүлээрэй. Үүнийг хэрхэн хийх вэ Гүүглээс нээлээ тэр даруй.

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-тэй машиныг нөөцлөхөд Linux-д зориулсан Veeam Agent тохиромжтой гэж би үзэж байна. Файл бүхий бүх өөрчлөлтийн дараа ч гэсэн.

Мэдээжийн хэрэг, Elbrus OS түгээлтийн хэрэгсэл нь дэмжигчдийн жагсаалтад ороогүй тул албан ёсоор дэмжигдээгүй. Нэмж дурдахад, Linux-д зориулсан Veeam Agent-ийг QA хэлтэс туршиж үзээгүй тул тэдгээр. ямар ч дэмжлэг байхгүй (наад зах нь нийтлэлийг нийтлэх үед).

334 оны 29.06.2017-р сарын XNUMX-ний өдрийн XNUMX тоот тушаалыг хэрэгжүүлэх гэж байгаа хүмүүст нийтлэл хэрэг болно гэж найдаж байна. Минийх чамд... [TBD].

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх