Pozdrav.
Nedavni članci na Habréu
Prije svega, odlučio sam preuzeti Elbrus OS, odnosno samo dostupnu distribuciju za x86_64 arhitekturu, vidjeti kako radi i pokušati instalirati Veeam Agent za Linux na njega. Ako želite znati što je ispalo iz ovoga, pogledajte cat.
Dakle, mala digresija, ako netko ne zna. "Elbrus" je takav
Još jedno malo prisilno povlačenje. Činjenica je da sam se svojedobno bavio domaćim softverom, poput MSVS i Baguette RTOS. Imao sam iskustva u radu s domaćim komponentama, uključujući procesor iz MCST-a. Stoga s punom odgovornošću mogu reći da u ovom području postoji određena specifičnost koju ću nastojati ne dirati u članku. Kad stvarno budem htio, stavit ću oznaku [TBD]. Stoga ćemo pokušati bez otvorenog trolanja i banalnog kukanje. Na kraju, treba razumjeti rusku obrambenu industriju i državne agencije. Velika država - mali budžet.. [TBD].
Nulta faza - preuzimanje datoteka. Važno je napomenuti da je vijest da je Elbrus OS postao dostupan izazvala odjek, toliko da je distribucijski poslužitelj pao. [TBD] Hvala Yandexu i inženjeru koji ga je smislio premjestiti tamo. Dakle, brzina preuzimanja je dobra.
Prva faza - instalacija. Instalirao sam ga na prvi hipervizor koji je bio dostupan za besplatno korištenje. Dodijelio sam dvije jezgre, nekoliko koncerata RAM-a, 32 MB za video (mislio sam da će biti grafičko sučelje). Disk je kao i obično - 32 GB.
Započeo sam instalaciju. Nisam koristio upute za instalaciju, pa ih ne mogu komentirati. Instalacijsko sučelje TUI-ja je izrazito minimalističko.
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] kada instalirate s diska?
Odaberite CD-ROM izvor i krenite dalje.
Dok sam birao vremensku zonu, odjednom sam shvatio da sustav koristi init boot proces, a ja radim s TTY0.
OK, onda klasificirajmo "Elbrus" kao zajednicu
Ostalo je gotovo nevažno: sve stavimo i dogovorimo se. Usput doznajemo da se kernel koristi 3.14.79-13.84. Hmm, Debian 7 je imao 3.2 [TBD].
Zatim odaberite zadano particioniranje diska i... Vidimo upozorenje:
Hmm, nekako se automatsko particioniranje nije dobro nosilo s diskom od 32 GB. Nisam mijenjao disk; dovršio sam zadatak ručnim particioniranjem diska u stilu "sve u jednom". Morao sam instalirati ext3 jer /boot nije mogao biti u ext4.
Sustav je nastao bez incidenata.
Druga faza - traženje alternativa.
Nakon što sam preturao po sadržaju drugog diska, shvatio sam da je ovo spremište s dodatnim. u paketima. I gledajući /etc/apt/sources.list, shvatio sam da ga treba montirati u /mnt/cdrom. Ali nisam pronašao /etc/os-release. Ali postoji /etc/mcst-verzija sa sadržajem 3.0-rc36. 3.0 je vjerojatno verzija - čini se da odgovara, ali rc36? Općenito, softver treće strane najvjerojatnije neće moći prepoznati ovu distribuciju na klasičan način.
U root particiji upada mi u oči direktorij /mcst, a tu sam, klonulog srca, otkrio /mcst/backup. Odnosno, postoji alat za sigurnosno kopiranje i ugrađen je u sustav! "Sjajno", pomislio sam, "Da vidimo kako ovo funkcionira!"
Ispostavilo se da postoji 4Kb bash skripta /mcst/bin/backup koja omogućuje kopiranje datoteka. Prema zadanim postavkama - u direktorij /mcst/backup. Očekivao sam vidjeti naredbu rsync u izvornom kodu, ali ona nije u zadanoj konfiguraciji. Skripta jednostavno kopira datoteke. Naredba izgleda otprilike ovako:
cp -rpdx <file backup> <file>
Cijela datoteka /mcst/bin/backup je ovdjeOdmah vas upozoravam da sama ova skripta nije dovoljna za potpuno razumijevanje. Povlači funkcije iz /mcst/bin/source, što je nešto poput knjižnice 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
Iako, možda nešto nisam razumio? Možda netko može objasniti u komentarima: kako ova skripta osigurava sigurno i pouzdano sigurnosno kopiranje podataka? [TBD]
Usput, rsync je uključen u dodatak. spremišta. Verzija 3.1.3. Mislim da je korištenje rsync još uvijek bolja alternativa aplikaciji /mcst/bin/backup.
Zatim sam odlučio staviti svježi Veeam Agent za Linux. Netko će pitati: “Kakve veze imaju Veeam i zamjena uvoza?” 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 alternativama iz
Faza tri — instalacija Veeam Agenta za Linux.
Dakle, Veeam Agent za Linux sastoji se od dva paketa: veeamsnap kernel modul (usput,
Postojao je jedan mali problem s instalacijom modula kernela - nedostajao je dkms paket. Ovo je usluga koja vam omogućuje izradu modula jezgre iz izvora. U pravilu je dostupan na svim deb distribucijama. Morao sam ga preuzeti iz deb repozitorija treće strane. Jedna stvar koja me razveselila je da paket ne ovisi o arhitekturi, tako da odgovara kao native. Zašto nije uključen u popis dostupnih paketa, odnosno nije razvijen [TBD]? Možda se pretpostavlja da nitko ne bi trebao graditi i pokretati module kernela koji nisu MCST. Ovdje stvarno postoji razlika - budući da postoje zaglavlja za linux. Odnosno, modul se, po želji, može sastaviti ručno i pokrenuti skriptom kada se stroj pokrene. Mislim da ne biste trebali očekivati česta ažuriranja od MCST-a [TBD].
“OK, modul je instaliran - najteži dio je prošao,” pomislio sam... Veeam paket za deb repozitorij je za amd64 platformu, a Elbrus OS ima x86_64 [TBD] platformu. Razlika je, naravno, samo u nazivu, ali ta razlika čini gotovo sve pakete iz deb repozitorija trećih strana nekompatibilnim s Elbrus OS-om. Ovaj dosadni nesporazum može se jednostavno ukloniti: samo rastavite paket, ispravite informacije o arhitekturi i ponovno ga sastavite. Kako to učiniti
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Drugi problem su ovisnosti. Čini se da su potrebne datoteke tamo, ali paketi nisu. Dojam je bio da se nazivi paketa razlikuju od njihovih "uvezenih analoga". Možda su knjižnice pakirane drugačije. Nisam ulazio u detalje, uklonio sam gotovo sve ovisnosti i instalacija je krenula.
Zatim su se pojavili problemi s kodom za pokretanje usluge. Nedostajala je skripta /lib/init/vars.sh. Iz nekog razloga, Elbrus se snalazi 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 kopanja po datoteci /lib/lsb/init-functions, našao sam funkciju log_success_msg - dobro će nam doći za eksperimente. Usput, u datoteci /lib/lsb/init-functions redak “# Source SuSE`s rc functions” nalazi se na početku datoteke [TBD].
Nakon tako grube obrade paketa s datotekom, sigurnosna kopija cijelog stroja na NFS dijeljenju je uspješno pokrenuta. Sigurnosno montiranje također je bilo uspješno. Dakle, vjerujem da je Veeam Agent za Linux definitivno prikladan za sigurnosno kopiranje stroja s Elbrus PDK-om, preuzetog “samo tako” bez ikakvih obaveza. Čak i nakon svih izmjena s datotekom.
Naravno, distribucijski komplet Elbrus OS nije formalno podržan jer nije uključen u popis podržanih. Osim toga, QA odjel nije testirao Veeam Agent za Linux na njemu, tako da oni. nema podrške (barem u trenutku objave članka).
Nadam se da će članak biti koristan onima koji pokušavaju provesti naredbu br. 334 od 29.06.2017. lipnja XNUMX. Moje tebi... [TBD].
Izvor: www.habr.com