Sveiki visi.
Naujausi straipsniai apie Habré
Visų pirma nusprendžiau atsisiųsti Elbrus OS, tiksliau, tik turimą x86_64 architektūros distribuciją, pažiūrėti kaip ji veikia ir pabandyti joje įdiegti Veeam Agent for Linux. Jei norite sužinoti, kas iš to išėjo, žiūrėkite katę.
Taigi, mažas nukrypimas, jei kas nors nežino. „Elbrusas“ yra toks
Dar vienas nedidelis priverstinis pasitraukimas. Faktas yra tas, kad kažkada turėjau reikalų su vietine programine įranga, tokia kaip MSVS ir Baguette RTOS. Turėjau patirties dirbant su buitiniais komponentais, įskaitant MCST procesorių. Todėl su visa atsakomybe galiu pasakyti, kad šioje srityje yra tam tikra specifika ir pasistengsiu straipsnyje to neliesti. Kai labai norėsiu, įdėsiu žymą [TBD]. Taigi pasistengsime apsieiti be atviro trolinimo ir banalaus dejavimo. Galiausiai reikia suprasti Rusijos gynybos pramonę ir vyriausybines agentūras. Didelė šalis – mažas biudžetas.. [TBD].
Nulinis etapas - parsisiųsti. Pastebėtina, kad žinia, kad Elbrus OS tapo prieinama, sukėlė tokį rezonansą, kad paskirstymo serveris sugedo. [TBD] Ačiū „Yandex“ ir inžinieriui, kuris sumanė jį ten perkelti. Taigi atsisiuntimo greitis yra geras.
Pirmasis etapas - montavimas. Įdiegiau jį į pirmąjį hipervizorių, kurį buvo galima nemokamai naudoti. Paskyriau du branduolius, porą gigų RAM, 32 MB video (bus grafinė sąsaja, galvojau). Diskas kaip įprasta – 32 GB.
Pradėjau diegti. Diegimo instrukcijų nesinaudojau, todėl negaliu jos komentuoti. TUI diegimo sąsaja yra labai minimalistinė.
Na, puiku, galime apsieiti ir be pelės.
Kitas langas man pavyko antruoju bandymu. Kodėl diegiant iš disko nepasirinkus numatytojo įrenginio sr0 [TBD]?
Pasirinkite CD-ROM šaltinį ir eikite toliau.
Renkantis laiko juostą staiga supratau, kad sistema naudoja init įkrovos procesą, o aš dirbu iš TTY0.
Gerai, tada priskirkime „Elbrusą“ prie bendruomenės
Likusi dalis beveik nesvarbu: viską dedame ir susitariame. Pakeliui sužinome, kad branduolys naudojamas 3.14.79-13.84. Hmm, Debian 7 turėjo 3.2 [TBD].
Toliau pasirinkite numatytąjį disko skaidymą ir... Matome įspėjimą:
Hmm, kažkaip automatinis skaidymas nesusitvarkė su 32 GB disku. Aš nekeičiau disko; užduotį užbaigiau rankiniu disko skaidymu „viskas viename“ stiliumi. Turėjau įdiegti ext3, nes /boot negalėjo būti ext4.
Sistema atsirado be incidentų.
Antrasis etapas - ieškoti alternatyvų.
Išknisęs antrojo disko turinį supratau, kad tai saugykla su papildomais. pakuotėse. Ir pažvelgęs į /etc/apt/sources.list supratau, kad jį reikia prijungti /mnt/cdrom. Bet neradau /etc/os-release. Tačiau yra /etc/mcst-version su 3.0-rc36 turiniu. 3.0 tikriausiai yra versija – atrodo, kad tinka, bet rc36? Apskritai trečiųjų šalių programinė įranga greičiausiai negalės atpažinti šio platinimo klasikiniu būdu.
Šakniniame skaidinyje mano dėmesį patraukia /mcst katalogas ir ten su grimztančia širdimi atradau /mcst/backup. Tai yra, yra atsarginis įrankis ir jis integruotas į sistemą! „Puiku, – pagalvojau, – pažiūrėkime, kaip tai veikia!
Paaiškėjo, kad yra 4Kb bash scenarijus /mcst/bin/backup, kuris suteikia failų kopijavimą. Pagal numatytuosius nustatymus – į /mcst/backup katalogą. Šaltinio kode tikėjausi pamatyti komandą rsync, bet ji nėra numatytosios konfigūracijos. Scenarijus tiesiog nukopijuoja failus. Komanda atrodo maždaug taip:
cp -rpdx <file backup> <file>
Visas failas /mcst/bin/backup yra čiaIš karto perspėju, kad vien šio scenarijaus nepakanka norint iki galo suprasti. Jis ištraukia funkcijas iš /mcst/bin/source, kuri yra kažkas panašaus į funkcijų biblioteką. Aš jo neįtraukiau (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
Nors gal aš kažko nesupratau? Gal kas gali paaiškinti komentaruose: kaip šis scenarijus užtikrina saugią ir patikimą duomenų atsarginę kopiją? [TBD]
rsync, beje, yra įtrauktas į priedą. saugyklos. 3.1.3 versija. Manau, kad rsync naudojimas vis dar yra geresnė alternatyva programai /mcst/bin/backup.
Toliau nusprendžiau įdėti naują Veeam agentas, skirtas Linux. Kažkas paklaus: „Ką su juo turi Veeam ir importo pakeitimas? Taip, jo nėra registre, bet yra sertifikuota FSTEC, o tai reiškia, kad nesant alternatyvų jį galima naudoti. Penkiolika minučių skiriant alternatyvoms nuo
Trečiasis etapas — „Veeam Agent“, skirtos „Linux“, įdiegimas.
Taigi „Veeam Agent for Linux“ susideda iš dviejų paketų: „veeamsnap“ branduolio modulio (beje,
Įdiegiant branduolio modulį iškilo viena nedidelė problema – trūkstamas dkms paketas. Tai paslauga, leidžianti kurti branduolio modulius iš šaltinio. Paprastai jis pasiekiamas visuose deb paskirstymuose. Turėjau jį atsisiųsti iš trečiosios šalies duomenų saugyklos. Vienas dalykas, kuris mane nudžiugino, yra tai, kad pakuotė nepriklauso nuo architektūros, todėl tinka kaip vietinė. Kodėl jis nebuvo įtrauktas į galimų paketų sąrašą arba, tiksliau, nebuvo sukurtas [TBD]? Galbūt manoma, kad niekas neturėtų kurti ir paleisti jokių ne MCST branduolio modulių. Čia tikrai yra neatitikimų, nes yra „Linux“ antraštės. Tai reiškia, kad modulį, jei pageidaujama, galima surinkti rankomis ir paleisti pagal scenarijų, kai mašina paleidžiama. Manau, kad neturėtumėte tikėtis dažnų atnaujinimų iš MCST [TBD].
„Gerai, modulis įdiegtas – sunkiausia dalis baigta“, – pagalvojau... Veeam paketas deb saugyklai skirtas amd64 platformai, o Elbrus OS turi x86_64 [TBD] platformą. Žinoma, skirtumas yra tik pavadinime, tačiau dėl šio skirtumo beveik visi paketai iš trečiųjų šalių deb saugyklų yra nesuderinami su Elbrus OS. Šį erzinantį nesusipratimą galima paprasčiausiai pašalinti: tiesiog išardykite pakuotę, pataisykite informaciją apie architektūrą ir vėl sudėkite. Kaip tai padaryti
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Kita problema – priklausomybės. Atrodo, kad reikalingi failai yra, bet paketų nėra. Susidarė įspūdis, kad pakuočių pavadinimai skyrėsi nuo jų „importuotų analogų“. Galbūt bibliotekos supakuotos kitaip. Per daug nesigilinau, pašalinau beveik visas priklausomybes ir diegimas vyko į priekį.
Tada iškilo problemų dėl paslaugos pradžios kodo. Trūko scenarijaus /lib/init/vars.sh. Elbrusas kažkodėl apsieina be jo, todėl pašalinsime ir mes. Tada turėjome pakeisti pranešimo išvesties funkciją: trūko funkcijų log_daemon_msg ir log_end_msg. Pasiknisęs /lib/lsb/init-functions faile radau funkciją log_success_msg – ji bus naudinga mums eksperimentams. Beje, faile /lib/lsb/init-functions eilutė „# Source SuSE`s rc functions“ yra [TBD] failo pradžioje.
Po tokio grubaus paketo apdorojimo su failu buvo sėkmingai paleista viso įrenginio atsarginė kopija NFS dalinime. Atsarginis tvirtinimas taip pat buvo sėkmingas. Taigi, manau, kad norint sukurti atsarginę mašinos kopiją su Elbrus PDK, atsisiųsta „tiesiog taip“ be jokių įsipareigojimų, „Veeam Agent for Linux“ tikrai tinka. Net ir po visų modifikacijų su failu.
Žinoma, Elbrus OS platinimo rinkinys oficialiai nepalaikomas, nes jis nėra įtrauktas į palaikomų sąrašą. Be to, „Veeam Agent for Linux“ nebuvo išbandytas kokybės užtikrinimo skyriaus, todėl tie. palaikymo nėra (bent jau straipsnio publikavimo metu).
Tikiuosi, kad straipsnis bus naudingas tiems, kurie bando įgyvendinti 334-29.06.2017-XNUMX įsakymą Nr.XNUMX. Mano tau... [TBD].
Šaltinis: www.habr.com