Cadangan Linux dari Veeam di Elbrus OS. Substitusi impor ['?' | '.' | '!']

Halo.
Artikel terbaru tentang Habré Substitusi impor dalam praktiknya. Bagian 1. Pilihan и Musiknya tidak diputar lama... atau bagaimana Elbrus OS tidak pernah gratis tidak membuatku acuh tak acuh. Saya memutuskan untuk mempelajari masalah ini dalam konteks tugas pencadangan. Apalagi di Artikel ini Produk Perangkat Lunak Veeam disebutkan, yang berarti bahwa masalah tersebut mungkin relevan secara khusus dalam konteks substitusi impor.

Cadangan Linux dari Veeam di Elbrus OS. Substitusi impor ['?' | '.' | '!']
sumber gambar asli

Pertama-tama, saya memutuskan untuk mengunduh OS Elbrus, atau lebih tepatnya, hanya distribusi yang tersedia untuk arsitektur x86_64, melihat cara kerjanya, dan mencoba menginstal Veeam Agent untuk Linux di dalamnya. Jika Anda ingin tahu apa hasilnya, silakan lihat kucing.

Jadi, penyimpangan kecil, kalau-kalau ada yang tidak tahu. "Elbrus" seperti itu prosesor dengan sistem komando yang agak spesifik. Selain itu, ada software Elbrus OS. Dan - bertentangan dengan kepercayaan populer - untuk mengoperasikan OS Elbrus, tidak perlu memiliki sistem perangkat keras yang berbasis pada prosesor Elbrus. Ada "PDK "Elbrus" untuk x86" - sebenarnya, itu muncul di domain publik dalam bentuk disk instalasi. Omong-omong, ada catatan kaki "PDK - kit pengembangan platform, kit pengembang" - bagus, itu berarti setidaknya ada kompiler di sana.

Retret paksa kecil lainnya. Faktanya saya pernah berurusan dengan software dalam negeri, seperti MSVS dan Baguette RTOS. Saya memiliki pengalaman bekerja dengan komponen dalam negeri, termasuk prosesor dari MCST. Oleh karena itu, saya dapat mengatakan dengan penuh tanggung jawab bahwa ada kekhususan tertentu di bidang ini dan saya akan mencoba untuk tidak menyentuhnya dalam artikel. Kalau memang mau, saya kasih tag [TBD]. Jadi kami akan mencoba melakukannya tanpa trolling dan erangan dangkal. Pada akhirnya, industri pertahanan Rusia dan lembaga pemerintah perlu dipahami. Negara besar - anggaran kecil.. [TBD].

Tahap nol - unduh. Patut dicatat bahwa berita bahwa Elbrus OS telah tersedia menimbulkan gaung, sedemikian rupa sehingga server distribusinya down. [TBD] Terima kasih kepada Yandex dan insinyur yang berpikir untuk memindahkannya ke sana. Jadi kecepatan downloadnya bagus.

Tahap pertama - instalasi. Saya menginstalnya di hypervisor pertama yang tersedia untuk penggunaan gratis. Saya mengalokasikan dua core, beberapa gigs RAM, 32 MB untuk video (akan ada antarmuka grafis, saya pikir). Disknya seperti biasa - 32 GB.
Saya memulai instalasi. Saya tidak menggunakan petunjuk instalasi, jadi saya tidak bisa mengomentarinya. Antarmuka instalasi TUI sangat minimalis.

Cadangan Linux dari Veeam di Elbrus OS. Substitusi impor ['?' | '.' | '!']
Bagus sekali, kita bisa melakukannya tanpa mouse.

Saya berhasil membuka jendela berikutnya pada percobaan kedua. Mengapa tidak memilih perangkat default sr0 [TBD] saat menginstal dari disk?
Pilih sumber CD-ROM dan lanjutkan.

Cadangan Linux dari Veeam di Elbrus OS. Substitusi impor ['?' | '.' | '!']

Saat memilih zona waktu, saya tiba-tiba menyadari bahwa sistem menggunakan proses boot init, dan saya bekerja dari TTY0.

Cadangan Linux dari Veeam di Elbrus OS. Substitusi impor ['?' | '.' | '!']

Oke, mari kita klasifikasikan “Elbrus” sebagai sebuah komunitas Orang Percaya Lama[TBD]. Pada prinsipnya, ini bagus: Anda tidak perlu meminta kode sumber untuk melihat cara kerja proses pengunduhan, karena semuanya sudah ada skripnya.

Selebihnya hampir tidak penting: kami menempatkan semuanya dan menyetujuinya. Sepanjang jalan, kami mengetahui bahwa kernel yang digunakan 3.14.79-13.84. Hmm, Debian 7 punya 3.2 [TBD].

Selanjutnya, pilih partisi disk default dan... Kami melihat peringatan:

Cadangan Linux dari Veeam di Elbrus OS. Substitusi impor ['?' | '.' | '!']

Hmm, entah kenapa partisi otomatis tidak dapat menangani disk 32 gig dengan baik. Saya tidak mengganti disk; Saya menyelesaikan misi dengan mempartisi disk secara manual dengan gaya "all-in-one". Saya harus menginstal ext3, karena/boot tidak bisa di ext4.
Sistem muncul tanpa insiden.

Tahap kedua - mencari alternatif.
Setelah mengobrak-abrik isi disk kedua, saya menyadari bahwa ini adalah repositori dengan tambahan. dalam paket. Dan melihat /etc/apt/sources.list, saya menyadari bahwa itu perlu dipasang di /mnt/cdrom. Tapi saya tidak menemukan /etc/os-release. Tapi ada /etc/mcst-version dengan konten 3.0-rc36. 3.0 mungkin adalah versinya - sepertinya cocok, tapi rc36? Secara umum, perangkat lunak pihak ketiga kemungkinan besar tidak akan dapat mengenali distribusi ini dengan cara klasik.

Di partisi root, direktori /mcst menarik perhatian saya, dan di sana, dengan hati yang tenggelam, saya menemukan /mcst/backup. Artinya, ada alat pencadangan, dan itu ada di dalam sistem! “Bagus,” pikir saya, “Mari kita lihat cara kerjanya!”

Ternyata ada skrip bash 4Kb /mcst/bin/backup yang menyediakan penyalinan file. Secara default - ke direktori /mcst/backup. Dalam kode sumber saya berharap melihat perintah rsync, tetapi tidak dalam konfigurasi default. Script hanya menyalin file. Perintahnya terlihat seperti ini:

cp -rpdx <file backup> <file>

Seluruh file /mcst/bin/backup ada di siniSaya segera memperingatkan Anda bahwa skrip ini saja tidak cukup untuk dipahami sepenuhnya. Ini menarik fungsi dari /mcst/bin/source, yang merupakan sesuatu seperti perpustakaan fungsi. Saya tidak memasukkannya (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

Meskipun mungkin ada sesuatu yang tidak saya pahami? Mungkin ada yang bisa menjelaskan di komentar: bagaimana skrip ini memastikan cadangan data yang aman dan andal? [TBD]

rsync, omong-omong, disertakan dalam add-on. repositori. Versi 3.1.3. Saya pikir menggunakan rsync masih merupakan alternatif yang lebih baik daripada aplikasi /mcst/bin/backup.

Selanjutnya, saya memutuskan untuk memasang yang baru Agen Veeam untuk Linux. Seseorang akan bertanya: "Apa hubungannya Veeam dan substitusi impor?" Ya, memang tidak terdaftar, tapi disertifikasi oleh FSTEC, artinya jika tidak ada alternatif lain bisa digunakan. Menghabiskan lima belas menit untuk alternatif dari pendaftaran, saya dapat menemukan 3 tautan untuk kata "cadangan" (tidak ada yang terkait dengan pertanyaan saya untuk kata "cadangan"). Saya belum melakukan analisis mendalam terhadap program ini, jadi saya tidak akan mencoba menilai seberapa cocok program tersebut untuk membuat cadangan mesin yang menjalankan Linux. Siapa pun yang membutuhkannya akan menarik kesimpulannya sendiri dan membagikannya di komentar.

tahap ketiga — instalasi Agen Veeam untuk Linux.
Jadi, Veeam Agent untuk Linux terdiri dari dua paket: modul kernel veeamsnap (omong-omong, sumber di sini) dan kode ruang pengguna eksklusif dalam bentuk paket veeam.

Ada satu masalah kecil saat menginstal modul kernel - paket dkms yang hilang. Ini adalah layanan yang memungkinkan Anda membuat modul kernel dari sumber. Biasanya, ini tersedia di semua distribusi deb. Saya harus mengunduhnya dari repositori deb pihak ketiga. Satu hal yang membuat saya senang adalah paketnya tidak bergantung pada arsitektur, jadi cocok seperti paket asli. Mengapa tidak dimasukkan dalam daftar paket yang tersedia, atau lebih tepatnya, tidak dikembangkan [TBD]? Mungkin diasumsikan bahwa tidak seorang pun boleh membangun dan menjalankan modul kernel non-MCST. Benar-benar ada perbedaan di sini - karena ada header linux. Artinya, modul, jika diinginkan, dapat dirakit dengan tangan dan diluncurkan dengan skrip saat mesin dinyalakan. Saya pikir Anda seharusnya tidak mengharapkan pembaruan yang sering dari MCST [TBD].

“Oke, modul sudah terpasang - bagian tersulit sudah selesai,” pikir saya... Paket veeam untuk repositori deb adalah untuk platform amd64, dan OS Elbrus memiliki platform x86_64 [TBD]. Perbedaannya tentu saja hanya pada namanya saja, namun perbedaan ini membuat hampir semua paket dari repositori deb pihak ketiga tidak kompatibel dengan OS Elbrus. Kesalahpahaman yang mengganggu ini dapat dihilangkan dengan sederhana: cukup bongkar paketnya, perbaiki informasi tentang arsitekturnya, dan pasang kembali. Bagaimana cara melakukannya Mencarinya di Google segera.

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

Masalah lainnya adalah ketergantungan. File-file yang diperlukan tampaknya ada di sana, tetapi paket-paketnya tidak. Kesannya nama paketnya berbeda dengan “analog impornya”. Mungkin perpustakaan dikemas secara berbeda. Saya tidak menjelaskan terlalu banyak detail, menghapus hampir semua dependensi, dan instalasi dilanjutkan.

Kemudian muncul masalah dengan kode awal layanan. Skrip /lib/init/vars.sh tidak ada. Untuk beberapa alasan, Elbrus dapat melakukannya tanpanya, jadi kami akan menghapusnya juga. Selanjutnya, kita harus mengganti fungsi keluaran pesan: fungsi log_daemon_msg dan log_end_msg tidak ada. Setelah mencari-cari di file /lib/lsb/init-functions, saya menemukan fungsi log_success_msg - ini akan berguna bagi kita untuk bereksperimen. Ngomong-ngomong, di file /lib/lsb/init-functions, baris “# Source SuSE`s rc function” ada di awal file [TBD].

Setelah pemrosesan kasar paket dengan file, pencadangan seluruh mesin pada share NFS berhasil diluncurkan. Pemasangan cadangan juga berhasil. Jadi, saya yakin untuk mencadangkan mesin dengan Elbrus PDK, diunduh “begitu saja” tanpa kewajiban apa pun, Veeam Agent untuk Linux pasti cocok. Bahkan setelah semua modifikasi dengan file.

Tentu saja, kit distribusi Elbrus OS tidak didukung secara formal, karena tidak termasuk dalam daftar yang didukung. Selain itu, Veeam Agent untuk Linux belum diuji oleh departemen QA, jadi itu. tidak ada dukungan (setidaknya pada saat artikel diterbitkan).

Semoga artikel ini bermanfaat bagi mereka yang mencoba melaksanakan perintah No. 334 tanggal 29.06.2017 Juni XNUMX. Milikku untukmu... [TBD].

Sumber: www.habr.com

Tambah komentar