Hallo allemaal
Recente artikelen over Habré
Allereerst besloot ik het Elbrus-besturingssysteem te downloaden, of liever alleen de beschikbare distributie voor de x86_64-architectuur, te kijken hoe het werkt, en te proberen Veeam Agent voor Linux erop te installeren. Als je wilt weten wat hieruit is voortgekomen, zie dan cat.
Dus een kleine uitweiding, voor het geval iemand het niet weet. "Elbrus" is zo
Nog een kleine gedwongen terugtocht. Feit is dat ik ooit met binnenlandse software te maken had, zoals MSVS en Baguette RTOS. Ik had ervaring met het werken met huishoudelijke componenten, waaronder een processor van MCST. Daarom kan ik met volledige verantwoordelijkheid zeggen dat er op dit gebied een zekere specificiteit bestaat en ik zal proberen daar in het artikel niet op in te gaan. Als ik het echt wil, plaats ik de tag [TBD]. We zullen dus proberen het te doen zonder ronduit trollen en banaal gekreun. Uiteindelijk moeten de Russische defensie-industrie en overheidsinstanties worden begrepen. Groot land, klein budget... [TBD].
Nul stadium - downloaden. Het is opmerkelijk dat het nieuws dat het Elbrus OS beschikbaar is gekomen voor veel opschudding zorgde, zozeer zelfs dat de distributieserver uitviel. [Nader vast te stellen] Met dank aan Yandex en de ingenieur die erover dacht om het daarheen te verplaatsen. De downloadsnelheid is dus goed.
De eerste fase - installatie. Ik installeerde het op de eerste hypervisor die gratis te gebruiken was. Ik heb twee cores toegewezen, een paar gigabytes RAM, 32 MB voor video (er komt een grafische interface, dacht ik). De schijf is zoals gewoonlijk - 32 GB.
Ik ben begonnen met de installatie. Ik heb de installatie-instructies niet gebruikt, dus ik kan er geen commentaar op geven. De TUI-installatie-interface is zeer minimalistisch.
Nou, geweldig, we kunnen ook zonder muis.
Bij de tweede poging slaagde ik erin het volgende venster te bereiken. Waarom selecteert u niet het standaardapparaat sr0 [TBD] bij installatie vanaf schijf?
Selecteer de CD-ROM-bron en ga verder.
Terwijl ik de tijdzone selecteerde, realiseerde ik me plotseling dat het systeem het init-opstartproces gebruikt en dat ik vanuit TTY0 werk.
Oké, laten we ‘Elbrus’ dan classificeren als een gemeenschap
De rest is bijna onbelangrijk: we zetten alles neer en zijn het erover eens. Gaandeweg komen we erachter dat de kernel 3.14.79-13.84 wordt gebruikt. Hmm, Debian 7 had 3.2 [TBD].
Selecteer vervolgens de standaard schijfpartitionering en... We zien een waarschuwing:
Hmm, op de een of andere manier kon de automatische partitie niet goed overweg met een schijf van 32 gig. Ik heb de schijf niet gewijzigd; ik heb de zoektocht voltooid met handmatige schijfpartitionering in de "alles-in-één" -stijl. Ik moest ext3 installeren, omdat /boot niet in ext4 kon staan.
Het systeem kwam zonder incidenten tot stand.
De tweede fase - zoeken naar alternatieven.
Nadat ik de inhoud van de tweede schijf had doorzocht, realiseerde ik me dat dit een repository is met extra. in pakketten. En toen ik naar /etc/apt/sources.list keek, realiseerde ik me dat het in /mnt/cdrom gemount moet worden. Maar ik heb /etc/os-release niet gevonden. Maar er is /etc/mcst-version met de inhoud 3.0-rc36. 3.0 is waarschijnlijk de versie - het lijkt te passen, maar rc36? Over het algemeen zal software van derden deze distributie hoogstwaarschijnlijk niet op de klassieke manier kunnen herkennen.
In de rootpartitie valt de map /mcst mijn aandacht op, en daar ontdekte ik met een zinkend hart /mcst/backup. Dat wil zeggen, er is een back-uptool en deze is in het systeem ingebouwd! “Geweldig”, dacht ik, “laten we eens kijken hoe dit werkt!”
Het bleek dat er een 4Kb bash-script /mcst/bin/backup is dat het kopiëren van bestanden mogelijk maakt. Standaard - naar de map /mcst/backup. In de broncode verwachtte ik de opdracht rsync te zien, maar deze staat niet in de standaardconfiguratie. Het script kopieert eenvoudig bestanden. Het commando ziet er ongeveer zo uit:
cp -rpdx <file backup> <file>
Het volledige bestand /mcst/bin/backup staat hierIk waarschuw je meteen dat dit script alleen niet voldoende is om het volledig te begrijpen. Het haalt functies op uit /mcst/bin/source, wat zoiets is als een bibliotheek met functies. Ik heb het niet opgenomen (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
Hoewel, misschien heb ik iets niet begrepen? Misschien kan iemand het in de reacties uitleggen: hoe zorgt dit script voor een veilige en betrouwbare gegevensback-up? [Nader te bepalen]
rsync is trouwens opgenomen in de add-on. opslagplaatsen. Versie 3.1.3. Ik denk dat het gebruik van rsync nog steeds een beter alternatief is voor de applicatie /mcst/bin/backup.
Vervolgens besloot ik een nieuwe te plaatsen Veeam Agent voor Linux. Iemand zal vragen: “Wat hebben Veeam en importsubstitutie ermee te maken?” Ja, het staat niet in het register, maar het is gecertificeerd door FSTEC, wat betekent dat het bij gebrek aan alternatieven gebruikt kan worden. Een kwartier besteden aan alternatieven van
Fase drie — installatie van Veeam Agent voor Linux.
Veeam Agent voor Linux bestaat dus uit twee pakketten: de veeamsnap-kernelmodule (trouwens,
Er was een klein probleem bij het installeren van de kernelmodule: het ontbrekende dkms-pakket. Dit is een service waarmee u kernelmodules vanaf de broncode kunt bouwen. In de regel is het beschikbaar op alle deb-distributies. Ik moest het downloaden van een deb-repository van derden. Eén ding dat me blij maakte, is dat het pakket niet afhankelijk is van de architectuur, dus het past als een native pakket. Waarom was het niet opgenomen in de lijst met beschikbare pakketten, of beter gezegd, niet ontwikkeld [TBD]? Misschien wordt aangenomen dat niemand niet-MCST-kernelmodules mag bouwen en uitvoeren. Er is hier echt sprake van een discrepantie - aangezien er Linux-headers zijn. Dat wil zeggen dat de module, indien gewenst, met de hand kan worden samengesteld en door een script kan worden gestart wanneer de machine start. Ik denk dat je geen frequente updates van MCST moet verwachten [TBD].
"OK, de module is geïnstalleerd - het moeilijkste deel is voorbij", dacht ik... Het veeam-pakket voor de deb-repository is voor het amd64-platform, en het Elbrus-besturingssysteem heeft een x86_64 [TBD]-platform. Het verschil zit hem natuurlijk alleen in de naam, maar dit verschil zorgt ervoor dat bijna alle pakketten van deb-repository's van derden incompatibel zijn met het Elbrus-besturingssysteem. Dit vervelende misverstand kan eenvoudig worden geëlimineerd: demonteer gewoon het pakket, corrigeer de informatie over de architectuur en zet het weer in elkaar. Hoe je dat doet
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Een ander probleem zijn afhankelijkheden. De benodigde bestanden lijken aanwezig te zijn, maar de pakketten niet. De indruk was dat de namen van de pakketten verschilden van hun “geïmporteerde analogen”. Misschien zijn de bibliotheken anders verpakt. Ik ging niet te veel in detail, verwijderde bijna alle afhankelijkheden en de installatie ging door.
Toen ontstonden er problemen met de servicestartcode. Het script /lib/init/vars.sh ontbrak. Om de een of andere reden kan Elbrus het zonder doen, dus we zullen het ook verwijderen. Vervolgens moesten we de berichtuitvoerfunctie vervangen: de functies log_daemon_msg en log_end_msg ontbraken. Nadat ik in het bestand /lib/lsb/init-functions had rondgezocht, vond ik de functie log_success_msg - deze is goed voor ons voor experimenten. Trouwens, in het /lib/lsb/init-functions bestand staat de regel “# Source SuSE`s rc functions” aan het begin van het [TBD] bestand.
Na zo'n ruwe verwerking van het pakket met een bestand, werd de back-up van de hele machine op de NFS-share met succes gelanceerd. De back-upmontage was ook succesvol. Ik ben dus van mening dat Veeam Agent voor Linux zeker geschikt is voor het maken van een back-up van een machine met de Elbrus PDK, die ‘zomaar’ zonder enige verplichting is gedownload. Zelfs na alle aanpassingen met een bestand.
Uiteraard wordt de Elbrus OS-distributiekit niet formeel ondersteund, omdat deze niet is opgenomen in de lijst met ondersteunde versies. Bovendien is Veeam Agent voor Linux er niet op getest door de QA-afdeling, dus die. er is geen ondersteuning (althans op het moment van publicatie van het artikel).
Ik hoop dat het artikel nuttig zal zijn voor degenen die order nr. 334 van 29.06.2017 juni XNUMX proberen uit te voeren. De mijne voor jou... [Nader vast te stellen].
Bron: www.habr.com