Hallo.
Aktuelle Artikel über Habré
Zunächst habe ich beschlossen, das Elbrus-Betriebssystem bzw. nur die verfügbare Distribution für die x86_64-Architektur herunterzuladen, zu sehen, wie es funktioniert, und zu versuchen, Veeam Agent für Linux darauf zu installieren. Wenn Sie wissen möchten, was dabei herausgekommen ist, schauen Sie sich bitte die Seite cat an.
Also ein kleiner Exkurs, falls es jemand nicht weiß. „Elbrus“ ist so
Ein weiterer kleiner erzwungener Rückzug. Tatsache ist, dass ich mich einmal mit heimischer Software wie MSVS und Baguette RTOS beschäftigt habe. Ich hatte Erfahrung im Umgang mit inländischen Komponenten, darunter einem Prozessor von MCST. Daher kann ich mit voller Verantwortung sagen, dass es in diesem Bereich eine gewisse Besonderheit gibt und ich werde versuchen, sie im Artikel nicht anzusprechen. Wenn ich es wirklich möchte, füge ich das Tag [TBD] hinzu. Deshalb werden wir versuchen, auf regelrechtes Trollen und banales Gejammer zu verzichten. Am Ende müssen die russische Verteidigungsindustrie und die russischen Behörden verstanden werden. Großes Land – kleines Budget. [TBD].
Nullstufe - herunterladen. Bemerkenswert ist, dass die Nachricht, dass das Elbrus-Betriebssystem verfügbar ist, so viel Aufsehen erregte, dass der Verteilungsserver ausfiel. [TBD] Vielen Dank an Yandex und den Ingenieur, der daran gedacht hat, es dorthin zu verschieben. Die Download-Geschwindigkeit ist also gut.
Die erste Stufe - Installation. Ich habe es auf dem ersten Hypervisor installiert, der zur kostenlosen Nutzung verfügbar war. Ich habe zwei Kerne, ein paar GB RAM und 32 MB für Video zugewiesen (ich dachte, es wird eine grafische Oberfläche geben). Die Festplatte ist wie üblich 32 GB groß.
Ich habe mit der Installation begonnen. Ich habe die Installationsanleitung nicht verwendet und kann daher nichts dazu sagen. Die TUI-Installationsoberfläche ist stark minimalistisch.
Na toll, auf eine Maus können wir verzichten.
Beim zweiten Versuch gelang mir das nächste Fenster. Warum wählen Sie bei der Installation von der Festplatte nicht das Standardgerät sr0 [TBD] aus?
Wählen Sie die CD-ROM-Quelle aus und fahren Sie fort.
Bei der Auswahl der Zeitzone wurde mir plötzlich klar, dass das System den Init-Boot-Prozess verwendet und ich von TTY0 aus arbeite.
Okay, dann klassifizieren wir „Elbrus“ als Gemeinschaft
Der Rest ist fast unwichtig: Wir legen alles fest und sind uns einig. Unterwegs stellen wir fest, dass der Kernel 3.14.79-13.84 verwendet wird. Hmm, Debian 7 hatte 3.2 [TBD].
Wählen Sie als Nächstes die Standard-Festplattenpartitionierung aus und... Wir sehen eine Warnung:
Hmm, irgendwie kam die automatische Partitionierung mit einer 32-GB-Festplatte nicht zurecht. Ich habe die Festplatte nicht gewechselt; ich habe die Quest mit manueller Festplattenpartitionierung im „All-in-One“-Stil abgeschlossen. Ich musste ext3 installieren, da /boot nicht in ext4 sein konnte.
Das System lief ohne Zwischenfälle hoch.
Die zweite Stufe - Suche nach Alternativen.
Nachdem ich den Inhalt der zweiten Diskette durchgesehen hatte, wurde mir klar, dass es sich um ein Repository mit zusätzlichen Datenträgern handelte. in Paketen. Und als ich mir /etc/apt/sources.list ansah, wurde mir klar, dass es in /mnt/cdrom gemountet werden muss. Aber ich habe /etc/os-release nicht gefunden. Aber es gibt /etc/mcst-version mit dem Inhalt 3.0-rc36. 3.0 ist wohl die Version - scheint zu passen, aber rc36? Im Allgemeinen wird Software von Drittanbietern diese Distribution höchstwahrscheinlich nicht auf klassische Weise erkennen können.
In der Root-Partition fällt mir das Verzeichnis /mcst ins Auge, und dort entdeckte ich mit sinkendem Herzen /mcst/backup. Das heißt, es gibt ein Backup-Tool, und es ist in das System integriert! „Super“, dachte ich, „Mal sehen, wie das funktioniert!“
Es stellte sich heraus, dass es ein 4-KB-Bash-Skript /mcst/bin/backup gibt, das das Kopieren von Dateien ermöglicht. Standardmäßig – in das Verzeichnis /mcst/backup. Im Quellcode habe ich erwartet, den Befehl rsync zu sehen, aber er ist nicht in der Standardkonfiguration enthalten. Das Skript kopiert einfach Dateien. Der Befehl sieht in etwa so aus:
cp -rpdx <file backup> <file>
Die gesamte Datei /mcst/bin/backup befindet sich hierIch warne Sie sofort, dass dieses Skript allein nicht ausreicht, um es vollständig zu verstehen. Es ruft Funktionen aus /mcst/bin/source ab, was so etwas wie eine Funktionsbibliothek ist. Ich habe es nicht eingefügt (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
Aber vielleicht habe ich etwas nicht verstanden? Vielleicht kann jemand in den Kommentaren erklären: Wie sorgt dieses Skript für eine sichere und zuverlässige Datensicherung? [TBD]
rsync ist übrigens im Add-on enthalten. Repositories. Version 3.1.3. Ich denke, dass die Verwendung von rsync immer noch eine bessere Alternative zur Anwendung /mcst/bin/backup ist.
Als nächstes beschloss ich, ein neues zu verwenden Veeam Agent für Linux. Jemand wird fragen: „Was haben Veeam und Importsubstitution damit zu tun?“ Ja, es ist nicht im Register, aber es ist von FSTEC zertifiziert, was bedeutet, dass es mangels Alternativen verwendet werden kann. Verbringen Sie fünfzehn Minuten mit Alternativen von
Die dritte Stufe — Installation von Veeam Agent für Linux.
Veeam Agent für Linux besteht also aus zwei Paketen: dem Veeamsnap-Kernelmodul (übrigens
Es gab ein kleines Problem bei der Installation des Kernelmoduls – das fehlende dkms-Paket. Dies ist ein Dienst, der es Ihnen ermöglicht, Kernel-Module aus dem Quellcode zu erstellen. In der Regel ist es auf allen Deb-Distributionen verfügbar. Ich musste es von einem Deb-Repository eines Drittanbieters herunterladen. Eine Sache, die mich gefreut hat, ist, dass das Paket nicht von der Architektur abhängt und daher wie ein natives Paket passt. Warum wurde es nicht in die Liste der verfügbaren Pakete aufgenommen bzw. wurde es nicht entwickelt [TBD]? Möglicherweise wird davon ausgegangen, dass niemand Nicht-MCST-Kernelmodule erstellen und ausführen sollte. Hier gibt es tatsächlich eine Diskrepanz, da es Linux-Header gibt. Das heißt, das Modul kann bei Bedarf manuell zusammengestellt und beim Start der Maschine per Skript gestartet werden. Ich denke, Sie sollten keine häufigen Updates von MCST erwarten [TBD].
„Okay, das Modul ist installiert – der schwierigste Teil ist vorbei“, dachte ich ... Das Veeam-Paket für das Deb-Repository ist für die amd64-Plattform und das Elbrus-Betriebssystem verfügt über eine x86_64-Plattform [TBD]. Der Unterschied liegt natürlich nur im Namen, aber dieser Unterschied führt dazu, dass fast alle Pakete aus Deb-Repositories von Drittanbietern mit dem Elbrus-Betriebssystem nicht kompatibel sind. Dieses lästige Missverständnis lässt sich ganz einfach beseitigen: Einfach das Paket zerlegen, die Angaben zur Architektur korrigieren und wieder zusammenbauen. Wie kann man das machen
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Ein weiteres Problem sind Abhängigkeiten. Die notwendigen Dateien scheinen vorhanden zu sein, die Pakete jedoch nicht. Es entstand der Eindruck, dass sich die Namen der Pakete von ihren „importierten Gegenstücken“ unterschieden. Möglicherweise sind die Bibliotheken anders verpackt. Ich ging nicht zu sehr ins Detail, entfernte fast alle Abhängigkeiten und die Installation ging weiter.
Dann traten Probleme mit dem Dienst-Startcode auf. Das Skript /lib/init/vars.sh fehlte. Aus irgendeinem Grund kommt Elbrus ohne aus, deshalb werden wir es auch entfernen. Als nächstes mussten wir die Nachrichtenausgabefunktion ersetzen: Die Funktionen log_daemon_msg und log_end_msg fehlten. Nachdem ich in der Datei /lib/lsb/init-functions herumgestöbert habe, habe ich die Funktion log_success_msg gefunden – sie wird uns für Experimente gut geeignet sein. Übrigens steht in der Datei /lib/lsb/init-functions die Zeile „# Source SuSE`s rc Functions“ am Anfang der Datei [TBD].
Nach solch grober Verarbeitung des Pakets mit einer Datei wurde die Sicherung der gesamten Maschine auf der NFS-Freigabe erfolgreich gestartet. Auch der Backup-Mount war erfolgreich. Daher glaube ich, dass für die Sicherung einer Maschine mit dem Elbrus PDK, das man „einfach so“ unverbindlich herunterlädt, der Veeam Agent für Linux auf jeden Fall geeignet ist. Auch nach all den Änderungen mit einer Datei.
Natürlich wird das Elbrus OS-Distributionskit nicht offiziell unterstützt, da es nicht in der Liste der unterstützten Versionen enthalten ist. Darüber hinaus wurde der Veeam Agent für Linux von der QA-Abteilung darauf nicht getestet, also diejenigen. Es gibt keinen Support (zumindest zum Zeitpunkt der Veröffentlichung des Artikels).
Ich hoffe, dass der Artikel denjenigen nützlich sein wird, die versuchen, die Verordnung Nr. 334 vom 29.06.2017. Juni XNUMX umzusetzen. Meins für dich... [TBD].
Source: habr.com