Buna ziua.
Articole recente despre Habré
În primul rând, am decis să descarc sistemul de operare Elbrus, sau mai bine zis, doar distribuția disponibilă pentru arhitectura x86_64, să văd cum funcționează și să încerc să instalez Veeam Agent pentru Linux pe el. Dacă doriți să știți ce a ieșit din asta, vă rugăm să vedeți cat.
Deci, o mică digresiune, în cazul în care cineva nu știe. „Elbrus” este așa
O altă mică retragere forțată. Cert este că odată m-am ocupat de software-ul autohton, cum ar fi MSVS și Baguette RTOS. Am avut experiență de lucru cu componente casnice, inclusiv un procesor de la MCST. Prin urmare, pot spune cu toată responsabilitatea că există o anumită specificitate în acest domeniu și voi încerca să nu ating asta în articol. Când vreau cu adevărat, voi pune eticheta [TBD]. Așa că vom încerca să facem fără trolling și gemete banale. În cele din urmă, industria rusă de apărare și agențiile guvernamentale trebuie înțelese. Țară mare - buget mic.. [TBD].
Etapa zero - Descarca. Este de remarcat faptul că vestea că sistemul de operare Elbrus a devenit disponibil a provocat o rezonanță, atât de mult încât serverul de distribuție a căzut. [TBD] Mulțumesc lui Yandex și inginerului care s-au gândit să-l mute acolo. Deci viteza de descărcare este bună.
Prima etapă - instalare. L-am instalat pe primul hypervisor care era disponibil pentru utilizare gratuită. Am alocat două nuclee, câteva giga de RAM, 32 MB pentru video (va fi o interfață grafică, m-am gândit). Discul este ca de obicei - 32 GB.
Am inceput instalarea. Nu am folosit instrucțiunile de instalare, așa că nu pot comenta. Interfața de instalare a TUI este extrem de minimalistă.
Ei bine, ne putem descurca fără șoarece.
Am reușit următoarea fereastră la a doua încercare. De ce nu selectați dispozitivul implicit sr0 [TBD] când instalați de pe disc?
Selectați sursa CD-ROM și continuați.
În timp ce selectam fusul orar, mi-am dat seama brusc că sistemul folosește procesul de pornire init și lucrez de la TTY0.
Bine, atunci să clasificăm „Elbrus” ca comunitate
Restul este aproape lipsit de importanță: punem totul și suntem de acord. Pe parcurs, aflăm că nucleul este folosit 3.14.79-13.84. Hmm, Debian 7 avea 3.2 [TBD].
Apoi, selectați partiționarea implicită a discului și... Vedem un avertisment:
Hmm, cumva, partiționarea automată nu s-a descurcat bine cu un disc de 32 de giga. Nu am schimbat discul; am finalizat misiunea cu partiționarea manuală a discului în stilul „all-in-one”. A trebuit să instalez ext3, deoarece /boot nu putea fi în ext4.
Sistemul a apărut fără incidente.
Doua etapă - căutarea de alternative.
După ce am scotocit prin conținutul celui de-al doilea disc, mi-am dat seama că acesta este un depozit cu suplimentar. în pachete. Și uitându-mă la /etc/apt/sources.list, mi-am dat seama că trebuie montat în /mnt/cdrom. Dar nu am găsit /etc/os-release. Dar există /etc/mcst-versiune cu conținutul 3.0-rc36. 3.0 este probabil versiunea - pare să se potrivească, dar rc36? În general, software-ul terțului cel mai probabil nu va putea recunoaște această distribuție în modul clasic.
În partiția rădăcină, directorul /mcst îmi atrage atenția și acolo, cu inima năucită, am descoperit /mcst/backup. Adică, există un instrument de rezervă și este încorporat în sistem! „Grozat”, m-am gândit, „Hai să vedem cum funcționează!”
S-a dovedit că există un script bash de 4Kb /mcst/bin/backup care oferă copierea fișierelor. Implicit - în directorul /mcst/backup. În codul sursă mă așteptam să văd comanda rsync, dar nu este în configurația implicită. Scriptul pur și simplu copiază fișierele. Comanda arată cam așa:
cp -rpdx <file backup> <file>
Întregul fișier /mcst/bin/backup este aiciVă avertizez imediat că acest script în sine nu este suficient pentru a înțelege pe deplin. Extrage funcții din /mcst/bin/source, care este ceva ca o bibliotecă de funcții. Nu l-am inclus (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
Deși, poate nu am înțeles ceva? Poate cineva poate explica în comentarii: cum asigură acest script o copie de rezervă sigură și fiabilă a datelor? [TBD]
rsync, apropo, este inclus în supliment. depozite. Versiunea 3.1.3. Cred că utilizarea rsync este încă o alternativă mai bună la aplicația /mcst/bin/backup.
În continuare, am decis să pun una proaspătă Agent Veeam pentru Linux. Cineva va întreba: „Ce legătură are Veeam și înlocuirea importurilor cu asta?” Da, nu este in registru, dar este certificat de FSTEC, ceea ce inseamna ca in lipsa alternativelor poate fi folosit. Petrecând cincisprezece minute pe alternative de la
etapa a treia — instalarea Veeam Agent pentru Linux.
Deci, Veeam Agent pentru Linux constă din două pachete: modulul kernel veeamsnap (apropo,
A existat o mică problemă cu instalarea modulului kernel - pachetul dkms lipsă. Acesta este un serviciu care vă permite să construiți module de kernel din sursă. De regulă, este disponibil pentru toate distribuțiile deb. A trebuit să-l descarc dintr-un depozit deb terță parte. Un lucru care m-a bucurat este că pachetul nu depinde de arhitectură, așa că se potrivește ca unul nativ. De ce nu a fost inclus în lista de pachete disponibile sau, mai degrabă, nu a fost dezvoltat [TBD]? Poate că se presupune că nimeni nu ar trebui să construiască și să ruleze module de nucleu care nu sunt MCST. Există într-adevăr o discrepanță aici - deoarece există anteturi Linux. Adică, modulul, dacă se dorește, poate fi asamblat manual și lansat printr-un script atunci când mașina pornește. Cred că nu ar trebui să vă așteptați la actualizări frecvente de la MCST [TBD].
„OK, modulul este instalat - partea cea mai grea s-a terminat”, m-am gândit... Pachetul veeam pentru depozitul deb este pentru platforma amd64, iar sistemul de operare Elbrus are o platformă x86_64 [TBD]. Diferența, desigur, este doar în nume, dar această diferență face ca aproape toate pachetele din depozitele deb terțe să fie incompatibile cu sistemul de operare Elbrus. Această neînțelegere enervantă poate fi eliminată simplu: doar dezasamblați pachetul, corectați informațiile despre arhitectură și puneți-l la loc. Cum să o facă
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
O altă problemă sunt dependențele. Fișierele necesare par să fie acolo, dar pachetele nu sunt. Impresia a fost că numele pachetelor diferă de „analogii lor importați”. Poate că bibliotecile sunt ambalate diferit. Nu am intrat în prea multe detalii, am eliminat aproape toate dependențele și instalarea a continuat.
Apoi au apărut probleme cu codul de pornire al serviciului. Scriptul /lib/init/vars.sh lipsea. Din anumite motive, Elbrus se descurcă fără el, așa că îl vom elimina și noi. În continuare, a trebuit să înlocuim funcția de ieșire a mesajului: funcțiile log_daemon_msg și log_end_msg lipseau. După ce am scotocit în fișierul /lib/lsb/init-functions, am găsit funcția log_success_msg - ne va fi bine pentru experimente. Apropo, în fișierul /lib/lsb/init-functions linia „# Source SuSE`s rc functions” se află la începutul fișierului [TBD].
După o astfel de procesare brută a pachetului cu un fișier, a fost lansată cu succes copierea de rezervă a întregii mașini pe partajarea NFS. Montarea de rezervă a avut, de asemenea, succes. Așadar, cred că pentru a face backup unei mașini cu Elbrus PDK, descărcat „așa” fără nicio obligație, Veeam Agent pentru Linux este cu siguranță potrivit. Chiar și după toate modificările cu un fișier.
Desigur, kitul de distribuție Elbrus OS nu este acceptat oficial, deoarece nu este inclus în lista celor acceptate. În plus, Veeam Agent pentru Linux nu a fost testat pe el de către departamentul QA, deci acelea. nu există suport (cel puțin la momentul publicării articolului).
Sper că articolul va fi de folos celor care încearcă să pună în aplicare ordinul nr. 334 din 29.06.2017 iunie XNUMX. Al meu pentru tine... [TBD].
Sursa: www.habr.com