Xin chào tất cả mọi người.
Các bài viết gần đây về Habré
Trước hết, tôi quyết định tải xuống hệ điều hành Elbrus, hay nói đúng hơn là chỉ tải xuống bản phân phối có sẵn cho kiến trúc x86_64, xem cách nó hoạt động và thử cài đặt Veeam Agent cho Linux trên đó. Nếu bạn muốn biết điều gì xảy ra, hãy xem cat.
Vì vậy, có một chút lạc đề, phòng trường hợp ai đó không biết. "Elbrus" là vậy đó
Một cuộc rút lui bắt buộc nhỏ khác. Thực tế là tôi đã từng xử lý các phần mềm trong nước, chẳng hạn như MSVS và Baguette RTOS. Tôi đã có kinh nghiệm làm việc với các linh kiện trong nước, bao gồm cả bộ xử lý của MCST. Vì vậy, tôi có thể nói với toàn bộ trách nhiệm rằng có một số đặc thù nhất định trong lĩnh vực này và tôi sẽ cố gắng không đề cập đến nó trong bài viết. Khi thực sự muốn, tôi sẽ gắn thẻ [TBD]. Vì vậy, chúng tôi sẽ cố gắng làm mà không bị troll và rên rỉ tầm thường. Cuối cùng, cần phải hiểu ngành công nghiệp quốc phòng và các cơ quan chính phủ của Nga. Nước lớn - ngân sách nhỏ.. [TBD].
Giai đoạn không - Tải xuống. Đáng chú ý là thông tin hệ điều hành Elbrus ra mắt đã gây ra tiếng vang lớn đến mức máy chủ phân phối ngừng hoạt động. [TBD] Cảm ơn Yandex và người kỹ sư đã nghĩ đến việc chuyển nó đến đó. Vì vậy tốc độ tải xuống là tốt.
Giai đoạn đầu tiên - cài đặt. Tôi đã cài đặt nó trên bộ ảo hóa đầu tiên được sử dụng miễn phí. Tôi đã phân bổ hai lõi, một vài hợp đồng RAM, 32 MB cho video (tôi nghĩ sẽ có giao diện đồ họa). Đĩa vẫn như bình thường - 32 GB.
Tôi bắt đầu cài đặt. Tôi không sử dụng hướng dẫn cài đặt nên không thể bình luận về nó. Giao diện cài đặt TUI rất tối giản.
Tuyệt, chúng ta có thể làm việc mà không cần chuột.
Tôi đã quản lý được cửa sổ tiếp theo trong lần thử thứ hai. Tại sao không chọn thiết bị mặc định sr0 [TBD] khi cài đặt từ đĩa?
Chọn nguồn CD-ROM và tiếp tục.
Trong khi chọn múi giờ, tôi chợt nhận ra rằng hệ thống sử dụng quy trình khởi động init và tôi đang làm việc từ TTY0.
Được rồi, hãy phân loại “Elbrus” thành một cộng đồng
Phần còn lại gần như không quan trọng: chúng tôi đặt mọi thứ và đồng ý. Trong quá trình thực hiện, chúng tôi phát hiện ra rằng kernel được sử dụng là 3.14.79-13.84. Hmm, Debian 7 có 3.2 [TBD].
Tiếp theo, chọn phân vùng đĩa mặc định và... Chúng tôi thấy một cảnh báo:
Hmm, bằng cách nào đó, việc phân vùng tự động không hoạt động tốt với đĩa 32 gig. Tôi không thay ổ đĩa mà hoàn thành nhiệm vụ phân vùng đĩa thủ công theo kiểu “tất cả trong một”. Tôi phải cài đặt ext3 vì /boot không thể ở ext4.
Hệ thống đã hoạt động mà không có sự cố.
Giai đoạn thứ hai - tìm kiếm các lựa chọn thay thế.
Sau khi lục lọi nội dung của đĩa thứ hai, tôi nhận ra rằng đây là một kho lưu trữ bổ sung. trong các gói. Và nhìn vào /etc/apt/sources.list, tôi nhận ra rằng nó cần được gắn vào /mnt/cdrom. Nhưng tôi không tìm thấy /etc/os-release. Nhưng có /etc/mcst-version với nội dung 3.0-rc36. 3.0 có lẽ là phiên bản - nó có vẻ phù hợp, nhưng RC36? Nhìn chung, phần mềm của bên thứ ba rất có thể sẽ không thể nhận ra bản phân phối này theo cách cổ điển.
Trong phân vùng gốc, thư mục /mcst thu hút sự chú ý của tôi, và ở đó, tôi thót tim khi phát hiện ra /mcst/backup. Tức là có một công cụ sao lưu và được tích hợp sẵn trong hệ thống! “Tuyệt,” tôi nghĩ, “Hãy xem nó hoạt động như thế nào!”
Hóa ra có một tập lệnh bash 4Kb /mcst/bin/backup cung cấp tính năng sao chép tệp. Theo mặc định - vào thư mục /mcst/backup. Trong mã nguồn tôi mong đợi sẽ thấy lệnh rsync nhưng nó không có trong cấu hình mặc định. Kịch bản chỉ đơn giản là sao chép các tập tin. Lệnh trông giống như thế này:
cp -rpdx <file backup> <file>
Toàn bộ tập tin /mcst/bin/backup có ở đâyTôi cảnh báo ngay với bạn rằng chỉ riêng kịch bản này là không đủ để hiểu đầy đủ. Nó lấy các hàm từ /mcst/bin/source, giống như một thư viện hàm. Tôi không bao gồm nó (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
Mặc dù, có lẽ tôi đã không hiểu điều gì đó? Có lẽ ai đó có thể giải thích trong phần nhận xét: tập lệnh này đảm bảo sao lưu dữ liệu an toàn và đáng tin cậy như thế nào? [TBD]
Nhân tiện, rsync được bao gồm trong tiện ích bổ sung. kho lưu trữ. Phiên bản 3.1.3. Tôi nghĩ sử dụng rsync vẫn là giải pháp thay thế tốt hơn cho ứng dụng /mcst/bin/backup.
Tiếp theo, tôi quyết định đặt một cái mới Đại lý Veeam cho Linux. Có người sẽ hỏi: “Veeam và việc thay thế nhập khẩu có liên quan gì đến nó?” Có, nó không có trong sổ đăng ký, nhưng nó được chứng nhận bởi FSTEC, có nghĩa là nó có thể được sử dụng trong trường hợp không có lựa chọn thay thế. Dành mười lăm phút cho các lựa chọn thay thế từ
giai đoạn ba — cài đặt Veeam Agent cho Linux.
Vì vậy, Veeam Agent cho Linux bao gồm hai gói: mô-đun hạt nhân veeamsnap (nhân tiện,
Có một vấn đề nhỏ khi cài đặt mô-đun hạt nhân - gói dkms bị thiếu. Đây là dịch vụ cho phép bạn xây dựng các mô-đun hạt nhân từ nguồn. Theo quy định, nó có sẵn trên tất cả các bản phân phối deb. Tôi đã phải tải xuống từ kho lưu trữ gỡ lỗi của bên thứ ba. Một điều làm tôi hài lòng là gói này không phụ thuộc vào kiến trúc nên phù hợp như gói gốc. Tại sao nó không được đưa vào danh sách các gói có sẵn, hay nói đúng hơn là không được phát triển [TBD]? Có lẽ người ta cho rằng không ai nên xây dựng và chạy bất kỳ mô-đun hạt nhân nào không phải MCST. Thực sự có sự khác biệt ở đây - vì có các tiêu đề linux. Nghĩa là, mô-đun, nếu muốn, có thể được lắp ráp bằng tay và khởi chạy bằng tập lệnh khi máy khởi động. Tôi nghĩ bạn không nên mong đợi những cập nhật thường xuyên từ MCST [TBD].
“OK, mô-đun đã được cài đặt - phần khó nhất đã qua,” tôi nghĩ... Gói veeam cho kho lưu trữ deb dành cho nền tảng AMD64 và Hệ điều hành Elbrus có nền tảng x86_64 [TBD]. Tất nhiên, sự khác biệt chỉ nằm ở cái tên, nhưng sự khác biệt này khiến hầu hết tất cả các gói từ kho gỡ lỗi của bên thứ ba không tương thích với Elbrus OS. Sự hiểu lầm khó chịu này có thể được loại bỏ một cách đơn giản: chỉ cần tháo rời gói, sửa thông tin về kiến trúc và đặt nó lại với nhau. Làm thế nào để làm nó
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Một vấn đề khác là sự phụ thuộc. Các tập tin cần thiết dường như có ở đó, nhưng các gói thì không. Ấn tượng là tên của các gói khác với "các gói tương tự được nhập khẩu" của chúng. Có lẽ các thư viện được đóng gói khác nhau. Tôi không đi sâu vào chi tiết, loại bỏ gần như tất cả các phần phụ thuộc và quá trình cài đặt vẫn tiếp tục.
Sau đó, vấn đề nảy sinh với mã bắt đầu dịch vụ. Tập lệnh /lib/init/vars.sh bị thiếu. Vì lý do nào đó, Elbrus quản lý mà không có nó nên chúng tôi cũng sẽ loại bỏ nó. Tiếp theo, chúng tôi phải thay thế chức năng xuất thông báo: thiếu chức năng log_daemon_msg và log_end_msg. Sau khi lục lọi trong tệp /lib/lsb/init-functions, tôi đã tìm thấy hàm log_success_msg - nó sẽ tốt cho chúng ta khi thử nghiệm. Nhân tiện, trong tệp /lib/lsb/init-functions, dòng “# Source SuSE`s rc function” nằm ở đầu tệp [TBD].
Sau khi xử lý sơ bộ gói bằng một tệp như vậy, bản sao lưu toàn bộ máy trên chia sẻ NFS đã được khởi chạy thành công. Việc gắn kết dự phòng cũng thành công. Vì vậy, tôi tin rằng để sao lưu máy bằng Elbrus PDK, được tải xuống “cứ như vậy” mà không có bất kỳ nghĩa vụ nào, Veeam Agent cho Linux chắc chắn là phù hợp. Ngay cả sau tất cả các sửa đổi với một tệp.
Tất nhiên, bộ phân phối Elbrus OS không được hỗ trợ chính thức vì nó không nằm trong danh sách những bộ được hỗ trợ. Ngoài ra, Veeam Agent cho Linux chưa được bộ phận QA thử nghiệm trên nó, vì vậy những điều đó. không có hỗ trợ (ít nhất là tại thời điểm xuất bản bài viết).
Hy vọng bài viết sẽ hữu ích cho những ai đang nỗ lực thực hiện Lệnh số 334 ngày 29.06.2017/XNUMX/XNUMX. Của tôi cho bạn... [TBD].
Nguồn: www.habr.com