Bonjou tout moun.
Dènye atik sou Habré
Premye a tout, mwen deside telechaje OS Elbrus la, oswa pito, sèlman distribisyon ki disponib pou achitekti x86_64 la, wè ki jan li fonksyone, epi eseye enstale Veeam Agent pou Linux sou li. Si ou vle konnen sa ki soti nan sa a, tanpri gade chat.
Donk, yon ti digression, nan ka yon moun pa konnen. "Elbrus" se konsa
Yon lòt ti retrè fòse. Reyalite a se ke mwen yon fwa te fè fas ak lojisyèl domestik, tankou MSVS ak Baguette RTOS. Mwen te gen eksperyans travay ak konpozan domestik, ki gen ladan yon processeur soti nan MCST. Se poutèt sa, mwen ka di ak tout responsablite ke gen yon espesifik espesifik nan zòn sa a epi li se jisteman sa a ke mwen pral eseye pa manyen sou nan atik la. Lè mwen reyèlman vle, mwen pral mete tag la [TBD]. Se konsa, nou pral eseye fè san yo pa trolling kareman ak jemisman ordinèr. Nan fen a, endistri defans Ris la ak ajans gouvènman yo bezwen konprann. Gwo peyi - ti bidjè.. [TBD].
Zewo etap - telechaje. Se enpòtan pou remake ke nouvèl la ki Elbrus OS la te vin disponib te lakòz yon sonorite, tèlman bagay ke sèvè distribisyon an te desann. [TBD] Mèsi a Yandex ak enjenyè a ki te panse deplase li la. Se konsa, vitès download la se yon bon bagay.
Premye etap-la - enstalasyon. Mwen enstale li sou premye hypervisor ki te disponib pou itilize gratis. Mwen asiyen de nwayo, yon koup nan gig nan RAM, 32 MB pou videyo (pral gen yon koòdone grafik, mwen te panse). Disk la se kòm dabitid - 32 GB.
Mwen te kòmanse enstalasyon an. Mwen pa t sèvi ak enstriksyon enstalasyon yo, kidonk mwen pa ka fè kòmantè sou li. Koòdone enstalasyon TUI a trè minimalist.
Oke, gwo, nou ka fè san yo pa yon sourit.
Mwen jere pwochen fenèt la sou dezyèm eseye an. Poukisa ou pa chwazi aparèy default sr0 [TBD] lè w ap enstale sou disk?
Chwazi sous CD-ROM la epi kontinye.
Pandan m t ap chwazi zòn lè a, mwen te reyalize toudenkou ke sistèm nan itilize pwosesis init bòt la, epi mwen ap travay nan TTY0.
OK, Lè sa a, ann klasifye "Elbrus" kòm yon kominote
Rès la prèske pa enpòtan: nou mete tout bagay epi nou dakò. Sou wout la, nou jwenn ke nwayo a itilize 3.14.79-13.84. Hmm, Debian 7 te gen 3.2 [TBD].
Apre sa, chwazi patisyon disk default la ak... Nou wè yon avètisman:
Hmm, yon jan kanmenm patisyon otomatik la pa t 'fè fas byen ak yon disk 32 gig. Mwen pa t 'chanje disk la mwen ranpli demand la ak patisyon manyèl disk nan style la "tout-an-yon". Mwen te oblije enstale ext3, depi /boot pa t 'kapab nan ext4.
Sistèm nan te vini san ensidan.
Etap nan dezyèm - rechèch pou altènativ.
Apre fouye nan sa ki nan dezyèm disk la, mwen reyalize ke sa a se yon depo ak adisyonèl. nan pakè. Epi gade nan /etc/apt/sources.list, mwen reyalize ke li bezwen monte nan /mnt/cdrom. Men, mwen pa t jwenn /etc/os-release. Men, gen /etc/mcst-version ak sa ki 3.0-rc36. 3.0 se pwobableman vèsyon an - li sanble anfòm, men rc36? An jeneral, lojisyèl twazyèm pati ap gen plis chans pa kapab rekonèt distribisyon sa a nan fason klasik la.
Nan patisyon rasin lan, /mcst anyè a atire je m ', epi la, ak yon kè koule, mwen dekouvri /mcst/backup. Sa vle di, gen yon zouti backup, epi li bati nan sistèm nan! "Bon," mwen te panse, "Ann wè ki jan sa a fonksyone!"
Li te tounen soti ke gen yon script bash 4Kb /mcst/bin/backup ki bay kopi dosye. Pa default - nan anyè /mcst/backup. Nan kòd sous la mwen espere wè lòd rsync la, men li pa nan konfigirasyon default la. Script la tou senpleman kopye fichye yo. Kòmandman an sanble yon bagay tankou sa a:
cp -rpdx <file backup> <file>
Tout fichye /mcst/bin/backup la isit laMwen avèti ou touswit ke script sa a pou kont li pa ase pou konprann konplètman. Li rale fonksyon nan /mcst/bin/source, ki se yon bagay tankou yon bibliyotèk fonksyon. Mwen pa enkli li (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
Malgre ke, petèt mwen pa t 'konprann yon bagay? Petèt yon moun ka eksplike nan kòmantè yo: ki jan script sa a asire sekirite ak serye done backup? [TBD]
rsync, nan chemen an, se enkli nan ajoute a. depo. Vèsyon 3.1.3. Mwen panse ke lè l sèvi avèk rsync se toujou yon pi bon altènatif nan aplikasyon /mcst/bin/backup la.
Apre sa, mwen deside mete yon nouvo Veeam Agent pou Linux. Yon moun pral mande: "Kisa Veeam ak sibstitisyon enpòte gen pou wè ak li?" Wi, li pa nan rejis la, men li sètifye pa FSTEC, ki vle di ke nan absans altènatif li ka itilize. Pase kenz minit sou altènativ de
etap twa — enstalasyon Veeam Agent pou Linux.
Se konsa, Veeam Agent pou Linux konsiste de de pakè: modil nwayo veeamsnap la (pa chemen an,
Te gen yon ti pwoblèm ak enstale modil nwayo a - pake dkms ki manke a. Sa a se yon sèvis ki pèmèt ou bati modil nwayo soti nan sous. Kòm yon règ, li disponib sou tout distribisyon deb. Mwen te oblije telechaje li nan yon depo twazyèm pati. Youn nan bagay ki te fè m kontan se ke pake a pa depann de achitekti a, kidonk li adapte tankou yon sèl natif natal. Poukisa li pa te enkli nan lis pakè ki disponib yo, oswa olye li pa te devlope [TBD]? Petèt li sipoze ke pèsonn pa ta dwe bati ak kouri nenpòt modil nwayo ki pa MCST. Gen reyèlman yon diferans isit la - depi gen linux-headers. Sa vle di, modil la, si ou vle, ka rasanble alamen epi lanse pa yon script lè machin nan kòmanse. Mwen panse ke ou pa ta dwe atann mizajou souvan soti nan MCST [TBD].
"OK, modil la enstale - pati ki pi difisil la fini," mwen te panse... Pake veeam pou repozitwa deb la se pou platfòm amd64 la, ak OS Elbrus la gen yon platfòm x86_64 [TBD]. Diferans lan, nan kou, se sèlman nan non an, men diferans sa a fè prèske tout pakè ki soti nan repozitwa deb twazyèm pati enkonpatib ak eksplwatasyon Elbrus la. Sa a enkonpreyansyon anmèdan ka elimine tou senpleman: jis demonte pake a, korije enfòmasyon yo sou achitekti a epi mete l 'tounen ansanm. Ki jan fè li
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Yon lòt pwoblèm se depandans. Dosye ki nesesè yo sanble la, men pakè yo pa. Enpresyon a te ke non pakè yo diferan de "analòg enpòte yo". Petèt bibliyotèk yo pake yon fason diferan. Mwen pa t 'antre nan twòp detay, retire prèske tout depandans yo, ak enstalasyon an te ale pi devan.
Lè sa a, pwoblèm parèt ak kòd la kòmanse sèvis. Script /lib/init/vars.sh te manke. Pou kèk rezon, Elbrus jere san li, kidonk nou pral retire li tou. Apre sa, nou te oblije ranplase fonksyon pwodiksyon mesaj la: fonksyon log_daemon_msg ak log_end_msg te manke. Apre fouye nan /lib/lsb/init-functions fichye a, mwen jwenn fonksyon log_success_msg - li bon pou nou pou eksperyans. By wout la, nan dosye /lib/lsb/init-functions liy "# Source SuSE`s rc functions" se nan kòmansman fichye [TBD].
Apre pwosesis sa yo ki graj nan pake a ak yon dosye, yo te lanse avèk siksè backup nan tout machin sou pataje NFS la. Mòn nan backup te tou siksè. Se konsa, mwen kwè, pou fè bak yon machin ak Elbrus PDK a, telechaje "jis konsa" san okenn obligasyon, Veeam Agent pou Linux se definitivman apwopriye. Menm apre tout modifikasyon yo ak yon dosye.
Natirèlman, Elbrus OS distribisyon twous la pa fòmèlman sipòte, paske li pa enkli nan lis la nan moun ki sipòte. Anplis de sa, Veeam Agent pou Linux pa te teste sou li pa depatman QA a, se konsa sa yo. pa gen okenn sipò (omwen nan moman piblikasyon atik la).
Mwen espere atik la ap itil moun k ap eseye aplike lòd nimewo 334 29.06.2017 jen XNUMX la. Mwen pou ou... [TBD].
Sous: www.habr.com