Pershendetje te gjitheve
Artikujt e fundit në Habré
Para së gjithash, vendosa të shkarkoj Elbrus OS, ose më saktë, vetëm shpërndarjen e disponueshme për arkitekturën x86_64, të shoh se si funksionon dhe të përpiqem të instaloj Veeam Agent për Linux në të. Nëse doni të dini se çfarë doli nga kjo, ju lutemi shihni cat.
Pra, një digresion i vogël, në rast se dikush nuk e di. "Elbrus" është i tillë
Një tjetër tërheqje e vogël e detyruar. Fakti është se dikur jam marrë me softuer vendas, si MSVS dhe Baguette RTOS. Kam pasur përvojë duke punuar me komponentë vendas, duke përfshirë një procesor nga MCST. Prandaj, mund të them me përgjegjësi të plotë se ka një specifikë të caktuar në këtë fushë dhe do të përpiqem të mos e prek atë në artikull. Kur të dua vërtet, do të vendos etiketën [TBD]. Kështu që ne do të përpiqemi të bëjmë pa trolling dhe ankime banale. Në fund, industria ruse e mbrojtjes dhe agjencitë qeveritare duhet të kuptohen. Vend i madh - buxhet i vogël.. [TBD].
Faza zero - Shkarko. Vlen të përmendet se lajmi se Elbrus OS është bërë i disponueshëm shkaktoi një rezonancë, aq sa serveri i shpërndarjes u prish. [TBD] Faleminderit Yandex dhe inxhinierit që menduan ta zhvendosnin atje. Kështu që shpejtësia e shkarkimit është e mirë.
Faza e parë - instalimi. E instalova në hipervisorin e parë që ishte i disponueshëm për përdorim falas. Kam ndarë dy bërthama, disa koncerte RAM, 32 MB për video (do të ketë një ndërfaqe grafike, mendova). Disku është si zakonisht - 32 GB.
Fillova instalimin. Unë nuk kam përdorur udhëzimet e instalimit, kështu që nuk mund të komentoj për të. Ndërfaqja e instalimit TUI është jashtëzakonisht minimaliste.
Epo, shkëlqyeshëm, ne mund të bëjmë pa një mi.
Unë menaxhova dritaren tjetër në provën e dytë. Pse të mos zgjidhni pajisjen e paracaktuar sr0 [TBD] kur instaloni nga disku?
Zgjidhni burimin e CD-ROM-it dhe vazhdoni.
Gjatë zgjedhjes së zonës kohore, papritmas kuptova se sistemi përdor procesin e nisjes së fillimit dhe unë jam duke punuar nga TTY0.
OK, atëherë le ta klasifikojmë "Elbrus" si një komunitet
Pjesa tjetër është pothuajse e parëndësishme: ne vendosim gjithçka dhe pajtohemi. Gjatë rrugës, zbulojmë se kerneli përdoret 3.14.79-13.84. Hmm, Debian 7 kishte 3.2 [TBD].
Më pas, zgjidhni ndarjen e paracaktuar të diskut dhe... Ne shohim një paralajmërim:
Hmm, disi ndarja automatike nuk u përball mirë me një disk 32 gig. Unë nuk e ndryshova diskun; e përfundova kërkimin me ndarje manuale të diskut në stilin "gjithë-në-një". Më duhej të instaloja ext3, pasi /boot nuk mund të ishte në ext4.
Sistemi doli pa incidente.
Faza e dytë - kërkoni për alternativa.
Pasi gërmova përmbajtjen e diskut të dytë, kuptova se ky është një depo me shtesë. në pako. Dhe duke parë /etc/apt/sources.list, kuptova se duhet të montohet në /mnt/cdrom. Por nuk e gjeta /etc/os-release. Por ekziston versioni /etc/mcst me përmbajtjen 3.0-rc36. 3.0 është ndoshta versioni - duket se përshtatet, por rc36? Në përgjithësi, softueri i palëve të treta ka shumë të ngjarë të mos jetë në gjendje ta njohë këtë shpërndarje në mënyrën klasike.
Në ndarjen rrënjë, drejtoria / mcst më bie në sy dhe aty, me një zemër të zhytur, zbulova /mcst/backup. Kjo do të thotë, ekziston një mjet rezervë dhe është i integruar në sistem! "Shkëlqyeshëm," mendova, "Le të shohim se si funksionon kjo!"
Doli se ekziston një skrip bash 4Kb /mcst/bin/backup që ofron kopjim të skedarëve. Si parazgjedhje - në drejtorinë /mcst/backup. Në kodin burim prisja të shihja komandën rsync, por nuk është në konfigurimin e paracaktuar. Skripti thjesht kopjon skedarët. Komanda duket diçka si kjo:
cp -rpdx <file backup> <file>
I gjithë skedari /mcst/bin/backup është këtuJu paralajmëroj menjëherë se vetëm ky skenar nuk mjafton për ta kuptuar plotësisht. Ai tërheq funksionet nga /mcst/bin/source, që është diçka si një bibliotekë funksionesh. Unë nuk e përfshiva atë (44 KB).
#!/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
Edhe pse, ndoshta nuk kuptova diçka? Ndoshta dikush mund të shpjegojë në komente: si siguron ky skenar rezervë të sigurt dhe të besueshëm të të dhënave? [TBD]
rsync, nga rruga, është përfshirë në shtesë. depove. Versioni 3.1.3. Unë mendoj se përdorimi i rsync është ende një alternativë më e mirë për aplikacionin /mcst/bin/backup.
Më pas, vendosa të vendos një të freskët Veeam Agent për Linux. Dikush do të pyesë: "Çfarë lidhje ka Veeam dhe zëvendësimi i importit me të?" Po, nuk është në regjistër, por është i certifikuar nga FSTEC, që do të thotë se në mungesë të alternativave mund të përdoret. Shpenzimi i pesëmbëdhjetë minutave për alternativat nga
Faza e tretë — instalimi i Veeam Agent për Linux.
Pra, Veeam Agent për Linux përbëhet nga dy paketa: moduli i kernelit veeamsnap (nga rruga,
Kishte një problem të vogël me instalimin e modulit të kernelit - paketa dkms që mungonte. Ky është një shërbim që ju lejon të ndërtoni module kernel nga burimi. Si rregull, ai është i disponueshëm në të gjitha shpërndarjet deb. Më duhej ta shkarkoja nga një depo e debitit të palëve të treta. Një gjë që më bëri të lumtur është se paketa nuk varet nga arkitektura, kështu që përshtatet si një amtare. Pse nuk u përfshi në listën e paketave të disponueshme, ose më mirë, nuk u zhvillua [TBD]? Ndoshta supozohet se askush nuk duhet të ndërtojë dhe ekzekutojë asnjë modul kernel jo-MCST. Me të vërtetë ka një mospërputhje këtu - pasi ka linux-headers. Kjo do të thotë, moduli, nëse dëshironi, mund të montohet me dorë dhe të lansohet me anë të një skenari kur makina fillon. Unë mendoj se nuk duhet të prisni përditësime të shpeshta nga MCST [TBD].
"OK, moduli është instaluar - pjesa më e vështirë ka mbaruar," mendova... Paketa veeam për depon e deb është për platformën amd64 dhe Elbrus OS ka një platformë x86_64 [TBD]. Dallimi, natyrisht, është vetëm në emër, por ky ndryshim i bën pothuajse të gjitha paketat nga depot e palëve të treta të papajtueshme me Elbrus OS. Ky keqkuptim i bezdisshëm mund të eliminohet thjesht: thjesht çmontoni paketën, korrigjoni informacionin rreth arkitekturës dhe bashkojeni përsëri. Si ta bëni atë
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Një problem tjetër janë varësitë. Skedarët e nevojshëm duket se janë aty, por paketat nuk janë. Përshtypja ishte se emrat e paketave ndryshonin nga "analogët e tyre të importuar". Ndoshta bibliotekat janë të paketuara ndryshe. Nuk hyra në shumë detaje, hoqa pothuajse të gjitha varësitë dhe instalimi vazhdoi.
Më pas u shfaqën probleme me kodin e fillimit të shërbimit. Skripti /lib/init/vars.sh mungonte. Për disa arsye, Elbrus ia del pa të, kështu që ne do ta heqim edhe atë. Më pas, na duhej të zëvendësonim funksionin e daljes së mesazhit: funksionet log_daemon_msg dhe log_end_msg mungonin. Pasi hulumtova në skedarin /lib/lsb/init-functions, gjeta funksionin log_success_msg - do të jetë i mirë për ne për eksperimente. Nga rruga, në skedarin /lib/lsb/init-functions rreshti "# Funksionet rc të burimit SuSE" është në fillim të skedarit [TBD].
Pas një përpunimi kaq të përafërt të paketës me një skedar, kopja rezervë e të gjithë makinës në pjesën NFS u lançua me sukses. Montimi rezervë ishte gjithashtu i suksesshëm. Pra, besoj, për të mbështetur një makinë me Elbrus PDK, të shkarkuar "ashtu si kjo" pa asnjë detyrim, Veeam Agent për Linux është padyshim i përshtatshëm. Edhe pas të gjitha modifikimeve me një skedar.
Sigurisht, kompleti i shpërndarjes Elbrus OS nuk mbështetet zyrtarisht, pasi nuk përfshihet në listën e atyre të mbështetur. Për më tepër, Veeam Agent për Linux nuk u testua në të nga departamenti i QA, kështu që ato. nuk ka mbështetje (të paktën në kohën e publikimit të artikullit).
Shpresoj se artikulli do të jetë i dobishëm për ata që po përpiqen të zbatojnë urdhrin nr. 334 të datës 29.06.2017 qershor XNUMX. E imja për ju... [TBD].
Burimi: www.habr.com