Pozdrav svima.
Nedavni članci o Habréu
Prije svega, odlučio sam preuzeti Elbrus OS, odnosno samo dostupnu distribuciju za arhitekturu x86_64, vidjeti kako funkcionira i pokušati instalirati Veeam Agent za Linux na njega. Ako želite da znate šta je ispalo iz ovoga, pogledajte mačku.
Dakle, mala digresija, ako neko ne zna. "Elbrus" je takav
Još jedno malo prisilno povlačenje. Činjenica je da sam se nekada bavio domaćim softverom, kao što su MSVS i Baguette RTOS. Imao sam iskustvo rada sa domaćim komponentama, uključujući i procesor iz MCST-a. Stoga sa punom odgovornošću mogu reći da postoji određena specifičnost u ovoj oblasti i trudiću se da je ne dotičem u članku. Kada zaista želim, staviću oznaku [TBD]. Zato ćemo pokušati bez otvorenog trolanja i banalnog stenjanja. Na kraju, rusku odbrambenu industriju i vladine agencije treba razumjeti. Velika zemlja - mali budžet.. [TBD].
Zero stage - skinuti. Važno je napomenuti da je vijest da je Elbrus OS postao dostupan izazvala rezonanciju, toliko da je server za distribuciju pao. [TBD] Hvala Yandexu i inženjeru koji je smislio da ga preseli tamo. Dakle, brzina preuzimanja je dobra.
U prvoj fazi - instalacija. Instalirao sam ga na prvom hipervizoru koji je bio dostupan za besplatno korištenje. Dodijelio sam dvije jezgre, par giga RAM-a, 32 MB za video (mislio sam da će postojati grafički interfejs). Disk je kao i obično - 32 GB.
Počeo sam sa instalacijom. Nisam koristio upute za instalaciju, pa ne mogu komentirati. TUI instalacioni interfejs je veoma minimalistički.
Pa super, možemo i bez miša.
Uspio sam sljedeći prozor iz drugog pokušaja. Zašto ne biste odabrali zadani uređaj sr0 [TBD] prilikom instaliranja s diska?
Odaberite CD-ROM izvor i nastavite dalje.
Dok sam birao vremensku zonu, odjednom sam shvatio da sistem koristi init boot proces, a ja radim od TTY0.
OK, onda hajde da klasifikujemo "Elbrus" kao zajednicu
Ostalo je gotovo nevažno: stavljamo sve i slažemo se. Usput saznajemo da se kernel koristi 3.14.79-13.84. Hmm, Debian 7 je imao 3.2 [TBD].
Zatim izaberite podrazumevano particionisanje diska i... Vidimo upozorenje:
Hmm, nekako se automatsko particioniranje nije dobro nosilo s diskom od 32 gigabajta. Nisam mijenjao disk; zadatak sam završio ručnim particioniranjem diska u stilu "sve u jednom". Morao sam da instaliram ext3, pošto /boot nije mogao biti u ext4.
Sistem je prošao bez incidenata.
Druga faza - traženje alternativa.
Nakon što sam preturao po sadržaju drugog diska, shvatio sam da je ovo spremište sa dodatnim. u paketima. I gledajući /etc/apt/sources.list, shvatio sam da ga treba montirati u /mnt/cdrom. Ali nisam našao /etc/os-release. Ali postoji /etc/mcst-verzija sa sadržajem 3.0-rc36. 3.0 je vjerovatno verzija - izgleda da odgovara, ali rc36? Općenito, softver treće strane najvjerovatnije neće moći prepoznati ovu distribuciju na klasičan način.
U korijenskoj particiji, direktorij /mcst mi je zapao za oko i tamo sam, s potonulom u srcu, otkrio /mcst/backup. Odnosno, postoji alat za pravljenje rezervnih kopija i ugrađen je u sistem! „Odlično“, pomislio sam, „Da vidimo kako ovo funkcioniše!“
Ispostavilo se da postoji 4Kb bash skripta /mcst/bin/backup koja omogućava kopiranje datoteka. Po defaultu - u /mcst/backup direktorij. Očekivao sam da ću u izvornom kodu vidjeti komandu rsync, ali ona nije u zadanoj konfiguraciji. Skripta jednostavno kopira fajlove. Naredba izgleda otprilike ovako:
cp -rpdx <file backup> <file>
Cijeli fajl /mcst/bin/backup je ovdjeOdmah vas upozoravam da ovaj scenario sam po sebi nije dovoljan za potpuno razumijevanje. Povlači funkcije iz /mcst/bin/source, što je nešto poput biblioteke funkcija. Nisam ga uključio (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
Mada, možda nešto nisam razumeo? Možda neko može objasniti u komentarima: kako ova skripta osigurava siguran i pouzdan backup podataka? [TBD]
rsync je, inače, uključen u dodatak. spremišta. Verzija 3.1.3. Mislim da je korištenje rsync i dalje bolja alternativa aplikaciji /mcst/bin/backup.
Zatim sam odlučio da stavim novi Veeam Agent za Linux. Neko će pitati: "Kakve veze Veeam i zamjena uvoza imaju s tim?" Da, nije u registru, ali je certificiran od strane FSTEC-a, što znači da se u nedostatku alternativa može koristiti. Provodeći petnaest minuta na alternative iz
Treća faza — instalacija Veeam Agenta za Linux.
Dakle, Veeam Agent za Linux se sastoji od dva paketa: veeamsnap kernel modula (usput,
Postojao je jedan mali problem sa instaliranjem modula kernela - nedostajući dkms paket. Ovo je usluga koja vam omogućava da napravite module kernela iz izvora. U pravilu je dostupan na svim deb distribucijama. Morao sam da ga preuzmem iz deb repozitorija treće strane. Jedna stvar koja me obradovala je to što paket ne zavisi od arhitekture, pa se uklapa kao izvorni. Zašto nije uvršten na listu dostupnih paketa, odnosno nije razvijen [TBD]? Možda se pretpostavlja da nitko ne bi trebao graditi i pokretati module kernela koji nisu MCST. Ovde zaista postoji neslaganje - pošto postoje linux zaglavlja. To jest, modul se, po želji, može sastaviti ručno i pokrenuti skriptom kada se mašina pokrene. Mislim da ne biste trebali očekivati česta ažuriranja od MCST-a [TBD].
“U redu, modul je instaliran – najteži dio je gotov”, pomislio sam... Veeam paket za deb spremište je za amd64 platformu, a Elbrus OS ima x86_64 [TBD] platformu. Razlika je, naravno, samo u imenu, ali ova razlika čini skoro sve pakete iz deb repozitorija trećih strana nekompatibilnim sa Elbrus OS-om. Ovaj dosadni nesporazum se može jednostavno otkloniti: samo rastavite paket, ispravite informacije o arhitekturi i ponovo ga sastavite. Kako uraditi
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Drugi problem su zavisnosti. Čini se da potrebni fajlovi postoje, ali paketi nisu. Utisak je bio da se nazivi pakovanja razlikuju od njihovih „uvezenih analoga“. Možda su biblioteke drugačije pakirane. Nisam ulazio previše u detalje, uklonio sam skoro sve zavisnosti i instalacija je krenula dalje.
Tada su se pojavili problemi sa startnim kodom usluge. Nedostajala je skripta /lib/init/vars.sh. Elbrus se iz nekog razloga snalazi i bez njega, pa ćemo i njega ukloniti. Zatim smo morali zamijeniti funkciju izlaza poruke: nedostajale su funkcije log_daemon_msg i log_end_msg. Nakon što sam preturao po datoteci /lib/lsb/init-functions, pronašao sam funkciju log_success_msg - bit će nam dobra za eksperimente. Usput, u datoteci /lib/lsb/init-functions red “# Source SuSE`s rc functions” je na početku datoteke [TBD].
Nakon ovako grube obrade paketa sa fajlom, sigurnosna kopija cijele mašine na NFS share je uspješno pokrenuta. Rezervno montiranje je također bilo uspješno. Dakle, vjerujem da je Veeam Agent za Linux definitivno prikladan za pravljenje rezervne kopije mašine sa Elbrus PDK-om, preuzetom „baš tako“ bez ikakvih obaveza. Čak i nakon svih modifikacija sa fajlom.
Naravno, Elbrus OS distribucijski komplet nije formalno podržan, jer nije uključen u listu podržanih. Osim toga, Veeam Agent za Linux nije testiran na njemu od strane QA odjela, pa oni. nema podrške (barem u trenutku objavljivanja članka).
Nadam se da će članak biti koristan onima koji pokušavaju da sprovedu naredbu br. 334 od 29.06.2017. juna XNUMX. Moje tebi... [TBD].
izvor: www.habr.com