В настоящее время нет бесплатного сервиса с открытым исходным кодом, который позволяет синхронизировать несколько облачных хранилищ пользователя без загрузки файлов исходных хранилищ на локальный компьютер. Требуется создать сервис, выполняющий решение задачи.
Имеем множество ПарыОблаков пар вида (Источник, Приёмник). Для каждой пары из множества ПарыОблаков нужно провести процедуру синхронизации пары. Каждый Источник и Приёмник представляет собой множество - дерево из каталогов и файлов с атрибутами. Нам нужно обойти каждое дерево и оптимальным образом, за наименьшее возможное время, найти разницу между множествами. После этого нужно добавить или заменить в Приёмнике все каталоги и файлы из Источника, которых нет в Приёмнике, затем удалить на Приёмнике все файлы, которых нет в Источнике.
CloudPairs = { (Source, Receiver) }, где
file = { (path, size, date created, date modified, owner) }, где
1. Если каталога из исходного дерева нет в приёмнике - скопировать весь каталог с содержимым, не обходя поддерево в источнике.
2. Если файл в источнике и файлы приёмнике имеет одинаковый путь, но разные размер, дату создания или дату изменения - заменить файл в Приёмнике на файл из Источника.
3. Для каждого файла вычислять хэш-значение, сравнивать файлы по нему.
4. Хранить в базе данных историю обхода дерева источника и приёмника, журнал операций для создания отчётов пользователю.
1. Администратор сервиса не должен иметь технической возможности получения доступа к данным пользователя для аутентификации пользователя в облачном сервисе и/или данным в файлах пользователя.
2. Сервис должен иметь возможность использовать актуальные российские алгоритмы для шифрования и/или электронной подписи данных в облаке.
Программа находится в стадии проектирования.
Как использовать Rsync для удаленной и локальной синхронизации данных
Новый алгоритм синхронизации Яндекс.Диска: как не подавиться 900 000 файлов
Объектно-ориентированный язык программирования Python является одним из наиболее востребованных на 2021 год на ИТ-рынке
Автор - Ван Россум, Гвидо - Нидерланды
Источники
Пример программы:
import mysql.connector
from mysql.connector import connect, Error
print("MySQL Connector/Python version: {0}".format(mysql.connector.__version__))
print("Version as tuple:")
print(mysql.connector.__version_info__)
print("")
print("API level: {0}".format(mysql.connector.apilevel))
print("Parameter style: {0}".format(mysql.connector.paramstyle))
print("Thread safe: {0}".format(mysql.connector.threadsafety))
try:
connection = connect(
host="ivlytkin.beget.tech",
user="ivlytkin_zenmon",
password="пароль",
database="ivlytkin_zenmon",
)
print(connection)
if connection.is_connected():
db_Info = connection.get_server_info()
print("Connected to MySQL Server version ", db_Info)
cursor = connection.cursor()
cursor.execute("select database();")
record = cursor.fetchone()
print("You're connected to database: ", record)
show_db_query: str = "SHOW DATABASES"
with connection.cursor() as cursor:
cursor.execute(show_db_query)
for db in cursor:
print(db)
print(connection)
create_movies_table_query = """
CREATE TABLE movies(
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100),
release_year YEAR(4),
genre VARCHAR(100),
collection_in_mil INT
)
"""
with connection.cursor() as cursor:
cursor.execute(create_movies_table_query)
connection.commit()
create_reviewers_table_query = """
CREATE TABLE reviewers (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(100),
last_name VARCHAR(100)
)
"""
with connection.cursor() as cursor:
cursor.execute(create_reviewers_table_query)
connection.commit()
create_ratings_table_query = """
CREATE TABLE ratings (
movie_id INT,
reviewer_id INT,
rating DECIMAL(2,1),
FOREIGN KEY(movie_id) REFERENCES movies(id),
FOREIGN KEY(reviewer_id) REFERENCES reviewers(id),
PRIMARY KEY(movie_id, reviewer_id)
)
"""
with connection.cursor() as cursor:
cursor.execute(create_ratings_table_query)
connection.commit()
except Error as e:
print(e)
Zabbix — свободная система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования, написанная Алексеем Владышевым. Для хранения данных используется MySQL, PostgreSQL, SQLite или Oracle Database, веб-интерфейс написан на PHP. Поддерживает несколько видов мониторинга:
Zabbix начался в 1998 году как внутренний проект в латвийском банке.
7 апреля 2001 года система была выпущена публично под лицензией GPL[6], первая стабильная версия — 1.0 от 23 марта 2004[6]. В апреле 2005 года была создана латвийская компания SIA Zabbix для управления проектом[7]. Практически ежегодно выпускаются новые версии системы, крупные выпуски: 2.0 (2012), 3.0 (2016), 4.0 (2018), 5.0 (2020), 6.0 (2022).
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb
dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
apt update
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix Zabbix
zcat /usr/share/doc/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql Zabbix
/etc/zabbix/zabbix_server.conf
DBPassword=zabbix
Файлы журналов
/var/log/zabbix/zabbix_agentd.log
/var/log/zabbix/zabbix_server.log
Цель создания VPS-сервера: тестирование обновления ОС до Ubuntu 19.04 Disco Dingo, изучение СУБД PostgreSQL.
Подключаемся к Ubuntu 18.04 из-под Windows 10 через RDP
Обновление ОС Ubuntu server 19.04 Disco Dingo
Процедура
1. Обновить Ubuntu до версии 18.10
sudo apt update && sudo apt dist-upgrade && sudo apt autoremove
If you’re upgrading over SSH it’s a good idea to configure SSH server to keep your connection alive so you don’t lose access to your server while upgrading….
Если вы выполняете обновление через SSH, рекомендуется настроить сервер SSH таким образом, чтобы поддерживать подключение, чтобы вы не потеряли доступ к своему серверу во время обновления….
sudo nano /etc/ssh/sshd_config
#PrintLastLog yes #TCPKeepAlive yes #UseLogin no #PermitUserEnvironment no #Compression delayed ClientAliveInterval 90 #ClientAliveCountMax 3 #UseDNS no
sudo systemctl restart ssh
sudo apt install update-manager-core
sudo nano /etc/update-manager/release-upgrades
# Default behavior for the release upgrader.
[DEFAULT]
# Default prompting and upgrade behavior, valid options:
#
# never - Never check for, or allow upgrading to, a new release.
# normal - Check to see if a new release is available. If more than one new
# release is found, the release upgrader will attempt to upgrade to
# the supported release that immediately succeeds the
# currently-running release.
# lts - Check to see if a new LTS release is available. The upgrader
# will attempt to upgrade to the first LTS release available after
# the currently-running one. Note that if this option is used and
# the currently-running release is not itself an LTS release the
# upgrader will assume prompt was meant to be normal.
Prompt=normal
After changing Ubuntu upgrader settings above, run the commands below to start the upgrade process… The -c option with the do-release-upgrade command checks for distribution upgrade from the latest supported version…
После изменения вышеуказанных настроек программы обновления Ubuntu выполните следующие команды, чтобы начать процесс обновления ... Опция -c с командой do-release-upgrade проверяет обновление дистрибутива с последней поддерживаемой версии…
sudo do-release-upgrade -c
sudo do-release-upgrade
2. Обновить Ubuntu до версии 19.04