Pozdravljeni vsi.
Nedavni članki na Habréju
Najprej sem se odločil, da prenesem Elbrus OS, oziroma samo distribucijo, ki je na voljo za arhitekturo x86_64, vidim, kako deluje, in poskusim namestiti Veeam Agent za Linux nanj. Če želite vedeti, kaj se je iz tega izcimilo, glejte cat.
Torej, majhna digresija, če kdo ne ve. "Elbrus" je tak
Še en majhen prisilni umik. Dejstvo je, da sem se nekoč ukvarjal z domačo programsko opremo, kot sta MSVS in Baguette RTOS. Imel sem izkušnje z domačimi komponentami, vključno s procesorjem MCST. Zato lahko z vso odgovornostjo trdim, da na tem področju obstaja določena specifika in prav te se v članku ne bom dotikala. Ko bom res želel, bom dal oznako [TBD]. Poskušali bomo torej brez odkritega trolanja in banalnega jamranja. Na koncu je treba razumeti rusko obrambno industrijo in vladne agencije. Velika država - majhen proračun.. [TBD].
Ničelna stopnja - Prenesi. Omeniti velja, da je novica, da je Elbrus OS na voljo, povzročila tako velik odmev, da je distribucijski strežnik odpadel. [TBD] Hvala Yandexu in inženirju, ki se je zamislil, da bi ga preselil tja. Hitrost prenosa je torej dobra.
Prva faza - namestitev. Namestil sem ga na prvi hipervizor, ki je bil na voljo za brezplačno uporabo. Dodelil sem dve jedri, nekaj koncertov RAM-a, 32 MB za video (bo grafični vmesnik, sem mislil). Disk je kot običajno - 32 GB.
Začel sem namestitev. Navodil za namestitev nisem uporabil, zato jih ne morem komentirati. Namestitveni vmesnik TUI je hudo minimalističen.
No, super, lahko tudi brez miške.
Naslednje okno mi je uspelo v drugem poskusu. Zakaj ne izberete privzete naprave sr0 [TBD] pri namestitvi z diska?
Izberite vir CD-ROM in nadaljujte.
Med izbiro časovnega pasu sem nenadoma ugotovil, da sistem uporablja zagonski postopek init, jaz pa delam s TTY0.
V redu, potem klasificirajmo "Elbrus" kot skupnost
Ostalo je skoraj nepomembno: postavimo vse in se dogovorimo. Med potjo ugotovimo, da se uporablja jedro 3.14.79-13.84. Hmm, Debian 7 je imel 3.2 [TBD].
Nato izberite privzeto particioniranje diska in ... Vidimo opozorilo:
Hmm, nekako se samodejno particioniranje ni dobro obneslo pri 32 gigabajtu. Nisem zamenjal diska; nalogo sem zaključil z ročnim particioniranjem diska v slogu "vse v enem". Moral sem namestiti ext3, ker /boot ni mogel biti v ext4.
Sistem je nastal brez incidentov.
Druga faza - iskanje alternativ.
Po brskanju po vsebini drugega diska sem ugotovil, da je to skladišče z dodatnimi. v paketih. Ko sem pogledal /etc/apt/sources.list, sem ugotovil, da ga je treba namestiti v /mnt/cdrom. Vendar nisem našel /etc/os-release. Obstaja pa različica /etc/mcst z vsebino 3.0-rc36. 3.0 je verjetno različica - zdi se, da ustreza, ampak rc36? Na splošno programska oprema tretjih oseb najverjetneje ne bo mogla prepoznati te distribucije na klasičen način.
V korenski particiji mi pade v oči imenik /mcst in tam sem z upadlo srcem odkril /mcst/backup. To pomeni, da obstaja orodje za varnostno kopiranje in je vgrajeno v sistem! "Super," sem si mislil, "Poglejmo, kako to deluje!"
Izkazalo se je, da obstaja 4Kb bash skript /mcst/bin/backup, ki omogoča kopiranje datotek. Privzeto - v imenik /mcst/backup. V izvorni kodi sem pričakoval, da bom videl ukaz rsync, vendar ga ni v privzeti konfiguraciji. Skript preprosto kopira datoteke. Ukaz izgleda nekako takole:
cp -rpdx <file backup> <file>
Celotna datoteka /mcst/bin/backup je tukajTakoj vas opozorim, da samo ta scenarij ni dovolj za popolno razumevanje. Funkcije črpa iz /mcst/bin/source, ki je nekaj podobnega knjižnici funkcij. Nisem ga vključil (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
Čeprav morda česa nisem razumel? Morda lahko kdo v komentarjih pojasni: kako ta skript zagotavlja varno in zanesljivo varnostno kopiranje podatkov? [TBD]
Mimogrede, rsync je vključen v dodatek. repozitorije. Različica 3.1.3. Menim, da je uporaba rsync še vedno boljša alternativa aplikaciji /mcst/bin/backup.
Nato sem se odločil, da dam novega Veeam Agent za Linux. Nekdo se bo vprašal: "Kaj imata Veeam in uvozna substitucija s tem?" Da, ni v registru, vendar je certificiran s strani FSTEC, kar pomeni, da se lahko uporablja, če ni drugih možnosti. Porabiti petnajst minut za alternative iz
tristopenjski — namestitev Veeam Agent za Linux.
Torej je Veeam Agent za Linux sestavljen iz dveh paketov: jedrnega modula veeamsnap (mimogrede,
Pri namestitvi modula jedra je prišlo do majhne težave - manjkajoči paket dkms. To je storitev, ki vam omogoča izdelavo modulov jedra iz izvorne kode. Praviloma je na voljo v vseh distribucijah deb. Moral sem ga prenesti iz repozitorija deb tretjih oseb. Ena stvar, ki me je razveselila, je, da paket ni odvisen od arhitekture, tako da ustreza kot domači. Zakaj ni bil vključen na seznam razpoložljivih paketov oziroma ni bil razvit [TBD]? Morda se domneva, da nihče ne bi smel graditi in izvajati modulov jedra, ki niso MCST. Tukaj res obstaja neskladje - saj obstajajo glave linux. To pomeni, da lahko modul po želji sestavite ročno in ga zaženete s skriptom, ko se stroj zažene. Mislim, da od MCST ne bi smeli pričakovati pogostih posodobitev [TBD].
“V redu, modul je nameščen - najtežji del je mimo,” sem pomislil ... Paket veeam za repozitorij deb je za platformo amd64, Elbrus OS pa ima platformo x86_64 [TBD]. Razlika je seveda le v imenu, vendar zaradi te razlike skoraj vsi paketi iz deb repozitorijev tretjih oseb niso združljivi z Elbrus OS. Ta nadležni nesporazum lahko preprosto odpravite: samo razstavite paket, popravite podatke o arhitekturi in ga sestavite nazaj. Kako narediti
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Druga težava so odvisnosti. Zdi se, da so potrebne datoteke tam, paketi pa ne. Vtis je bil, da se imena paketov razlikujejo od njihovih "uvoženih analogov". Morda so knjižnice zapakirane drugače. Nisem šel preveč v podrobnosti, odstranil sem skoraj vse odvisnosti in namestitev je stekla naprej.
Nato so se pojavile težave z zagonsko kodo storitve. Manjka skript /lib/init/vars.sh. Elbrus iz nekega razloga deluje brez njega, zato ga bomo tudi odstranili. Nato smo morali zamenjati funkcijo izpisa sporočila: funkciji log_daemon_msg in log_end_msg sta manjkali. Po brskanju po datoteki /lib/lsb/init-functions sem našel funkcijo log_success_msg - dobra nam bo za poskuse. Mimogrede, v datoteki /lib/lsb/init-functions je vrstica “# Source SuSE`s rc functions” na začetku datoteke [TBD].
Po tako grobi obdelavi paketa z datoteko je bila varnostna kopija celotnega stroja na NFS deležu uspešno zagnana. Tudi rezervna namestitev je bila uspešna. Zato verjamem, da je Veeam Agent za Linux vsekakor primeren za varnostno kopiranje stroja z Elbrus PDK, prenesenim »kar tako« brez kakršnih koli obveznosti. Tudi po vseh spremembah z datoteko.
Seveda distribucijski komplet Elbrus OS formalno ni podprt, saj ni na seznamu podprtih. Poleg tega oddelek za zagotavljanje kakovosti ni testiral agenta Veeam za Linux, zato so tisti. podpore ni (vsaj v času objave članka).
Upam, da bo članek koristen tistim, ki poskušajo izvajati odredbo št. 334 z dne 29.06.2017. junija XNUMX. Moje tebi ... [TBD].
Vir: www.habr.com