Sanibonani nonke.
Izihloko zakamuva ezikhuluma ngo-Habré
Okokuqala, nginqume ukulanda i-Elbrus OS, noma kunalokho, ukusatshalaliswa okutholakalayo kwe-architecture ye-x86_64 kuphela, bheka ukuthi isebenza kanjani, bese uzama ukufaka i-Veeam Agent ye-Linux kuyo. Uma ufuna ukwazi ukuthi yini eyaphuma kulokhu, sicela ubone ikati.
Ngakho-ke, ukwehla okuncane, uma kwenzeka umuntu engazi. "Elbrus" injalo
Okunye ukuhlehla okuncane okuphoqelekile. Iqiniso liwukuthi ngake ngabhekana nesofthiwe yasekhaya, njenge-MSVS ne-Baguette RTOS. Ngibe nolwazi lokusebenza nezingxenye zasekhaya, okuhlanganisa iphrosesa evela ku-MCST. Ngakho-ke, ngingasho ngomthwalo wemfanelo ogcwele ukuthi kukhona ukucaciswa okuthile kule ndawo futhi ngizozama ukuthi ngingathinti kuso esihlokweni. Uma ngifuna ngempela, ngizobeka ithegi [TBD]. Ngakho-ke sizozama ukwenza ngaphandle kokunyathela ngokuqondile kanye nokububula kwe-banal. Ekugcineni, imboni yezokuvikela yaseRussia kanye nezinhlaka zikahulumeni zidinga ukuqondwa. Izwe elikhulu - isabelomali esincane.. [TBD].
Isiteji esingu-Zero - landa. Kuyaphawuleka ukuthi izindaba zokuthi i-Elbrus OS isiyatholakala zabangela ukuduma, kangangokuthi iseva yokusabalalisa yehla. [TBD] Siyabonga ku-Yandex kanye nonjiniyela ocabange ukuyihambisa lapho. Ngakho isivinini sokulanda sihle.
Isigaba sokuqala - ukufakwa. Ngiyifake ku-hypervisor yokuqala eyayitholakala ukuze isetshenziswe mahhala. Nginikeze ama-cores amabili, amagigi ambalwa we-RAM, ama-32 MB wevidiyo (kuzoba nesixhumi esibonakalayo, bengicabanga). Idiski injengokujwayelekile - 32 GB.
Ngaqala ukufaka. Angizange ngisebenzise imiyalelo yokufaka, ngakho-ke angikwazi ukuphawula ngakho. I-interface yokufaka ye-TUI i-minimalistic kakhulu.
Hhayi-ke, kuhle, singenza ngaphandle kwegundane.
Ngiphathe iwindi elilandelayo ngomzamo wesibili. Kungani ungakhethi idivayisi ezenzakalelayo ethi sr0 [TBD] lapho uyifaka kudiski?
Khetha umthombo we-CD-ROM bese uqhubekela phambili.
Ngenkathi ngikhetha indawo yesikhathi, ngivele ngabona ukuthi uhlelo lusebenzisa inqubo ye-init boot, futhi ngisebenza ku-TTY0.
KULUNGILE, bese sihlukanisa okuthi "Elbrus" njengomphakathi
Okunye cishe akubalulekile: sibeka konke futhi sivumelana. Endleleni, sithola ukuthi i-kernel isetshenziswa 3.14.79-13.84. Hmm, i-Debian 7 ibe ne-3.2 [TBD].
Okulandelayo, khetha ukwahlukanisa okuzenzakalelayo kwediski futhi... Sibona isexwayiso:
Hmm, ngandlela thile ukwahlukanisa okuzenzakalelayo akuzange kubhekane kahle nediski ye-32 gig. Angizange ngiyishintshe idiski; ngiqedele imfuno ngokuhlukanisa idiski ngesandla ngesitayela "sokukodwa-kokukodwa". Bekufanele ngifake i-ext3, ngoba / i-boot yayingeke ibe ku-ext4.
Uhlelo luqhamuke ngaphandle kwesigameko.
Isigaba sesibili - cinga ezinye izindlela.
Ngemva kokuphenya okuqukethwe kwediski yesibili, ngabona ukuthi lena yindawo yokugcina eyengeziwe. emaphaketheni. Futhi ngibheka ku-/etc/apt/sources.list, ngabona ukuthi idinga ukufakwa ku-/mnt/cdrom. Kepha angitholanga /etc/os-release. Kodwa kukhona /etc/mcst-version nokuqukethwe 3.0-rc36. 3.0 mhlawumbe inguqulo - ibonakala ilingana, kodwa rc36? Ngokuvamile, isofthiwe yenkampani yangaphandle cishe ngeke ikwazi ukubona lokhu kusatshalaliswa ngendlela yakudala.
Engxenyeni yempande, umkhombandlela /mcst ubamba iso lami, futhi lapho, ngenhliziyo ecwilayo, ngathola /mcst/backup. Okusho ukuthi, kukhona ithuluzi lokusekelayo, futhi lakhelwe ohlelweni! “Kuhle,” ngacabanga, “Ake sibone ukuthi lokhu kusebenza kanjani!”
Kuvele ukuthi kune-4Kb bash script /mcst/bin/backup ehlinzeka ngokukopishwa kwefayela. Ngokuzenzakalelayo - kuhla lwemibhalo /mcst/backup. Ekhodini yomthombo bengilindele ukubona umyalo we-rsync, kepha awukho ekucushweni okuzenzakalelayo. Umbhalo umane ukopishe amafayela. Umyalo ubukeka kanjena:
cp -rpdx <file backup> <file>
Lonke ifayela /mcst/bin/backup lilaphaNgiyakuxwayisa ngaso leso sikhathi ukuthi lesi sikripthi sisodwa asanele ukusiqonda ngokugcwele. Idonsa imisebenzi ukusuka ku-/mcst/bin/source, okufana nomtapo wezincwadi wemisebenzi. Angizange ngiyifake (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
Nakuba, mhlawumbe angizange ngiqonde okuthile? Mhlawumbe othile angachaza kumazwana: lesi script siqinisekisa kanjani isipele sedatha ephephile nethembekile? [TBD]
rsync, ngendlela, ifakiwe ku-add-on. izinqolobane. Inguqulo 3.1.3. Ngicabanga ukuthi ukusebenzisa i-rsync kuseyindlela engcono yohlelo lokusebenza lwe-/mcst/bin/backup.
Ngokulandelayo, nganquma ukubeka entsha I-Veeam Agent ye-Linux. Omunye uzobuza: “I-Veeam kanye nokufaka esikhundleni sokungenisa kwamanye amazwe kuhlangene ngani nakho?” Yebo, ayikho kurejista, kodwa iqinisekiswe yi-FSTEC, okusho ukuthi uma zingekho ezinye izindlela ingasetshenziswa. Ukuchitha imizuzu eyishumi nanhlanu kokunye okuvela
Isigaba sesithathu - ukufakwa kwe-Veeam Agent ye-Linux.
Ngakho-ke, i-Veeam Agent ye-Linux iqukethe amaphakheji amabili: imojula ye-veeamsnap kernel (ngendlela,
Kube nenkinga eyodwa encane ngokufaka imojuli ye-kernel - iphakheji ye-dkms engekho. Lena isevisi ekuvumela ukuthi wakhe amamojula e-kernel kusuka emthonjeni. Njengomthetho, iyatholakala kukho konke ukusatshalaliswa kwedeb. Kwadingeka ngiyilande endaweni yokugcina imali yenkampani yangaphandle. Into eyodwa eyangijabulisa ukuthi iphakheji ayincikile ekwakhiweni kwezakhiwo, ngakho ilingana njengowomdabu. Kungani ingazange ifakwe ohlwini lwamaphakheji atholakalayo, noma kunalokho, ingathuthukiswanga [TBD]? Mhlawumbe kucatshangwa ukuthi akekho okufanele akhe futhi asebenzise noma yimaphi amamojula angewona awe-MCST kernel. Kukhona ngempela umehluko lapha - njengoba kukhona i-linux-headers. Okusho ukuthi, imojula, uma ifunwa, ingahlanganiswa ngesandla futhi yethulwe ngombhalo lapho umshini uqala. Ngicabanga ukuthi akufanele ulindele izibuyekezo ezivamile ezivela ku-MCST [TBD].
"KULUNGILE, imojula ifakiwe - ingxenye enzima kakhulu isiphelile," ngacabanga ... Iphakheji ye-veeam ye-deb repository eyeplathifomu ye-amd64, futhi i-Elbrus OS ine-x86_64 [TBD] yesikhulumi. Umehluko, yiqiniso, usegameni kuphela, kodwa lo mehluko wenza cishe wonke amaphakheji avela kumakhosombe e-deb party angahambisani ne-Elbrus OS. Lokhu kungezwani okucasulayo kungaqedwa kalula: vele uhlukanise iphakheji, ulungise ulwazi mayelana nezakhiwo bese ulibuyisela ndawonye. Kwenziwa kanjani
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Enye inkinga ukuncika. Amafayela adingekayo abonakala ekhona, kodwa amaphakheji awekho. Umbono wawuwukuthi amagama amaphakheji ahluke "ku-analogues yawo engenisiwe". Mhlawumbe imitapo yolwazi ipakishwe ngendlela ehlukile. Angizange ngingene emininingwaneni eminingi, ngisuse cishe konke okuncikile, futhi ukufakwa kwaqhubeka.
Bese kuvela izinkinga ngekhodi yokuqala yesevisi. Iskripthi /lib/init/vars.sh besingekho. Ngesizathu esithile, i-Elbrus ilawula ngaphandle kwayo, ngakho-ke sizoyisusa futhi. Okulandelayo, bekufanele simiselele umsebenzi wokuphuma komlayezo: log_daemon_msg kanye nemisebenzi ye-log_end_msg ibingekho. Ngemva kokuphenya kufayela /lib/lsb/init-functions, ngithole umsebenzi we-log_success_msg - kuzoba kuhle kithi ukuhlola. Nokho, kufayela elithi /lib/lsb/init-functions umugqa othi “# Source SuSE`s rc function” usekuqaleni kwefayela le-[TBD].
Ngemva kokucutshungulwa kanzima kwephakheji ngefayela, isipele somshini wonke esabelweni se-NFS sethulwe ngempumelelo. Ukukhweza ikhophi yasenqolobaneni nakho kube yimpumelelo. Ngakho-ke, ngikholelwa ukuthi ngokusekela umshini nge-Elbrus PDK, elandiwe “njengaleyo” ngaphandle kwanoma yiziphi izibopho, i-Veeam Agent ye-Linux ifaneleka ngempela. Ngisho nangemva kwazo zonke izinguquko ngefayela.
Kunjalo, ikhithi yokusabalalisa ye-Elbrus OS ayisekelwe ngokusemthethweni, ngoba ayifakiwe ohlwini lwabasekelwe. Ngaphezu kwalokho, i-Veeam Agent ye-Linux ayizange ihlolwe kuyo ngumnyango we-QA, ngakho labo. akukho ukusekelwa (okungenani ngesikhathi sokushicilelwa kwesihloko).
Ngithemba ukuthi lesi sihloko sizoba usizo kulabo abazama ukusebenzisa i-oda No. 334 kaJuni 29.06.2017, XNUMX. Eyami kuwe... [TBD].
Source: www.habr.com