Мне помнится, я когда-то давным-давно по роману Ясинского Анджея «Ник», по-своему реализовал задумку доверительного обмена файлами, тогда я это делал через программу unison.
Тут наткнулся на опенсорсное программное обеспечение под именем syncthing
и как показал беглый просмотр информации по нему.
Syncthing
— это непрерывная синхронизация файлов с открытым исходным кодом, используемая для синхронизации файлов между двумя или более компьютерами в сети. Syncthing
использует одноранговую архитектуру, что означает, что каждое устройство, подключенное к вашей сети Syncthing
, сохраняет копии файлов в ваших общих папках и отправляет новый контент всякий раз, когда вносятся какие-либо изменения.
Можно предположить, что сервис OwnCloud
это тоже самое, но я его использую как сервис хранения наработок и для обмена файлами, а Syncthing
— уже, как сервис распространения бекапов, софта.
В качестве операционной системы буду использовать Ubuntu 22.04 Server
Шаг №1:
Обновляю систему до самого актуального состояния в рамках текущего релиза:
ekzorchik@srv-us2204a1a:~$ sudo rm -Rf /var/lib/apt/lists ekzorchik@srv-us2204a1a:~$ cat /etc/update-manager/release-upgrades | grep Prompt Prompt=lts ekzorchik@srv-us2204a1a:~$ sudo sed -i '/Prompt/s/lts/never/' /etc/update-manager/release-upgrades ekzorchik@srv-us2204a1a:~$ cat /etc/update-manager/release-upgrades | grep Prompt Prompt=never ekzorchik@srv-us2204a1a:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt dist-upgrade -y
Шаг №2:
Устанавливаю приложения которые хочу иметь на текущей системе (у каждого уважающего себя системного администратора — он обычно свой):
ekzorchik@srv-us2204a1a:~$ sudo apt-get install -y mercurial unzip net-tools curl apt-transport-https
Шаг №3:
Настраиваю локаль:
ekzorchik@srv-us2204a1a:~$ sudo rm -f /etc/localtime ekzorchik@srv-us2204a1a:~$ sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime ekzorchik@srv-us2204a1a:~$ sudo locale-gen en_US.UTF-8 Generating locales (this might take a while)... en_US.UTF-8... done Generation complete. ekzorchik@srv-us2204a1a:~$ echo "LC_ALL="en_US.UTF-8"" | sudo -s tee /etc/default/locale LC_ALL=en_US.UTF-8 ekzorchik@srv-us2204a1a:~$ echo "LANG="en_US.UTF-8"" | sudo tee -a /etc/default/locale LANG=en_US.UTF-8 ekzorchik@srv-us2204a1a:~$ echo "LANGUAGE="en.US.UTF-8"" | sudo tee -a /etc/default/locale LANGUAGE=en.US.UTF-8 ekzorchik@srv-us2204a1a:~$
После выполняю Logoff&Logon
для активации изменений настроек локали.
Шаг №4:
Прописываю репозитарий на установку Synchting
и устанавливаю:
ekzorchik@srv-us2204a1a:~$ curl -s https://syncthing.net/release-key.txt | sudo apt-key add - Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). OK
На заметку: означает, что программа apt-key теперь устарела. Для управления файлами ключей теперь используйте trusted.gpg.d. Если перевести на человеческий язык, теперь мы должны самостоятельно добавлять файлы в папку /etc/apt/trusted.gpg.d/. Несмотря на заверения в документации, программа apt-key работает как обычно и выполняет все свои функции.
ekzorchik@srv-us2204a1a:~$ curl -s https://syncthing.net/release-key.txt | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/syncthing.gpg --import gpg: keyring '/etc/apt/trusted.gpg.d/syncthing.gpg' created gpg: key D26E6ED000654A3E: 1 signature not checked due to a missing key gpg: directory '/root/.gnupg' created gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key D26E6ED000654A3E: public key "Syncthing Release Management <release@syncthing.net>" imported gpg: Total number processed: 1 gpg: imported: 1 gpg: no ultimately trusted keys found ekzorchik@srv-us2204a1a:~$ ekzorchik@srv-us2204a1a:~$ echo "deb https://apt.syncthing.net/ syncthing release" | sudo tee /etc/apt/sources.list.d/syncthing.list deb https://apt.syncthing.net/ syncthing release ekzorchik@srv-us2204a1a:~$ ekzorchik@srv-us2204a1a:~$ sudo apt-get update ekzorchik@srv-us2204a1a:~$ apt-cache show syncthing | grep Version Version: 1.23.2 Version: 1.23.1 Version: 1.18.0~ds1-3ubuntu0.1 Version: 1.18.0~ds1-3 ekzorchik@srv-us2204a1a:~$ ekzorchik@srv-us2204a1a:~$ sudo apt-get install -y syncthing ekzorchik@srv-us2204a1a:~$ syncthing --version syncthing v1.23.2 "Fermium Flea" (go1.20.1 linux-amd64) deb@build.syncthing.net 2023-02-27 03:45:16 UTC [noupgrade] ekzorchik@srv-us2204a1a:~$
Шаг №5:
Настраиваем, что запуск утилиты syncthing
будет производится посредством сервиса, который и создадим:
ekzorchik@srv-us2204a1a:~$ sudo nano /etc/systemd/system/syncthing@.service [Unit] Description=Syncthing - Open Source Continuous File Synchronization for %I Documentation=man:syncthing(1) After=network.target [Service] User=%i ExecStart=/usr/bin/syncthing -no-browser -gui-address="0.0.0.0:8384" -no-restart -logflags=0 Restart=on-failure SuccessExitStatus=3 4 RestartForceExitStatus=3 4 [Install] WantedBy=multi-user.target
Любое изменение строк сервиса выше после обязательно следует выполнить команду
ekzorchik@srv-us2204a1a:~$ sudo systemctl daemon-reload ekzorchik@srv-us2204a1a:~$ sudo systemctl enable syncthing@$USER Created symlink /etc/systemd/system/multi-user.target.wants/syncthing@ekzorchik.service → /etc/systemd/system/syncthing@.service. ekzorchik@srv-us2204a1a:~$ sudo systemctl start syncthing@$USER ekzorchik@srv-us2204a1a:~$ sudo netstat -tulpn | grep syncthing tcp6 0 0 :::8384 :::* LISTEN 2447/syncthing tcp6 0 0 :::22000 :::* LISTEN 2447/syncthing udp 0 0 0.0.0.0:21027 0.0.0.0:* 2447/syncthing udp 0 0 0.0.0.0:45686 0.0.0.0:* 2447/syncthing udp6 0 0 :::21027 :::* 2447/syncthing udp6 0 0 :::58265 :::* 2447/syncthing udp6 0 0 :::22000 :::* 2447/syncthing ekzorchik@srv-us2204a1a:~$ sudo systemctl status syncthing@$USER | head -n 20 ● syncthing@ekzorchik.service - Syncthing - Open Source Continuous File Synchronization for ekzorchik Loaded: loaded (/etc/systemd/system/syncthing@.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-03-14 15:43:19 MSK; 1min 47s ago Docs: man:syncthing(1) Main PID: 2439 (syncthing) Tasks: 16 (limit: 4571) Memory: 20.4M CPU: 1.673s CGroup: /system.slice/system-syncthing.slice/syncthing@ekzorchik.service ├─2439 /usr/bin/syncthing -no-browser -gui-address=0.0.0.0:8384 -no-restart -logflags=0 └─2447 /usr/bin/syncthing -no-browser -gui-address=0.0.0.0:8384 -no-restart -logflags=0 Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: Access the GUI via the following URL: http://127.0.0.1:8384/ Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: TCP listener ([::]:22000) starting Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: Relay listener (dynamic+https://relays.syncthing.net/endpoint) starting Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: QUIC listener ([::]:22000) starting Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: My name is "srv-us2204a1a" Mar 14 15:43:21 srv-us2204a1a syncthing[2439]: [TSITS] INFO: Completed initial scan of sendreceive folder "Default Folder" (default) Mar 14 15:43:31 srv-us2204a1a syncthing[2439]: [TSITS] INFO: Detected 1 NAT service Mar 14 15:43:40 srv-us2204a1a syncthing[2439]: [TSITS] INFO: quic://0.0.0.0:22000 detected NAT type: Port restricted NAT ekzorchik@srv-us2204a1a:~$
Шаг №6:
Запускаю браузер и обращаюсь к системе где шагами выше был установлен пакет Syncthing
, т.е. URL
ссылка примет вид: http://IP&DNS:8384 (http://172.35.35.32:8384)
в первый раз приложение спрашивает о формирование анонимного отчета, нажимаю Нет
Вот так первоначально после установки выглядит Административный Web
-интерфейс Syncthing
Шаг №7:
Syncthing uses port 22000 to communicate with peers. If your computer or server enabled the UFW firewall, then you need to allow port 22000 with the following command.
sudo ufw allow 22000/tcp
Шаг №8:
Произвожу настройку аутентификации установив имя пользователя и пароль:
http://IP&DNS:8384 (http://172.35.35.32:8384) - (GUI аутентификация: Установите имя пользователя и пароль) Настройки
— вкладка "Интерфейс"
(Адрес GUI): 172.35.35.32:8384
Имя пользователя для доступа к панели управления: ekzorchik
Пароль для доступа к панели управления: 712mbddr@
Использовать HTTPS для панели управления: отмечаю галочкой
Запускать браузер: отмечаю галочкой
Тема оформления: По умолчанию
На заметку: Изменить IP
адрес или логин можно и через конфигурационный файл:
ekzorchik@srv-us2204a1a:~$ nano ~/.config/syncthing/config.xml <gui enabled="true" tls="true" debugging="false"> <address>172.35.35.32:8384</address> <user>ekzorchik</user> <password>$2a$10$NbTGkE8h5jCodaKxAuOGee8J7cAwAcnANaLCrqmn5gzkUF7uqHMe6</password> <apikey>YQRqqd9fvM4vGjy9mzdH5vQ65iPSLHEg</apikey> <theme>default</theme> </gui>
и нажимаю "Сохранить"
, после обновления страницы (через клавишу F5 к примеру), URL
адрес уже будет вида (https://IP&DNS:8384) (https://172.35.35.32:8384)
и окно авторизации
Шаг №9:
Устанавливаю на Windows Server 2012 R2 Std
также Syncthing
https://syncthing.net/downloads/
https://github.com/syncthing/syncthing/releases/download/v1.23.2/syncthing-windows-amd64-v1.23.2.zip
распаковав и после запустив
открывается браузер и URL
ссылка вида: http://127.0.0.1:8384
(и запущенная консоль командной строки)
Через Web
-интерфейс задаю также логин и пароль на доступ к Web
-интерфейсу и что доступ к панели Администрирования с применением https:
http://127.0.0.1:8384 - Нет - Действия - Настройки
— вкладка "Интерфейс"
—
(Адрес GUI): 172.35.35.28:8384
Имя пользователя для доступа к панели управления: ekzorchik1
Пароль для доступа к панели управления: 712mbddr@
Использовать HTTPS для панели управления: отмечаю галочкой
Запускать браузер: отмечаю галочкой
Тема оформления: По умолчанию
и нажимаю "Сохранить"
, обновляю страницу
Шаг №10:
Теперь свяжем эти две системы, для этого понадобятся идентификаторы устройств с обоих систем:
(on Ubuntu 22.04)
https://172.35.35.32:8384 - user&pass - Действия - Показать ID
и копируем идентификатор устройства: TSITS6O-4INQCVY-3CRRJF7-LCKNSSL-GM23WE2-EDD4YEX-QK4HAZ4-DH3IIAH
(on Windows Server 2012 R2 Std)
https://172.35.35.28:8384 - user&pass - Действия - Показать ID
и копируем идентификатор устройства: GHSEJGH-5MTXXBB-7VI3ZLW-M4SR5BM-5SRRRR5-ELDESIP-TKOBZ3M-JTF6AQQ
Шаг №11:
Добавляем устройство Windows
в Ubuntu
системе:
https://172.35.35.32:8384 - user&pass - (Удаленные устройства) - Добавить удаленное устройство
— вкладка "Общие"
ID устройства: копируем сюда ID устройства Windows
На заметку: Если обо устройства в одной сети то при добавлении устройства его идентификатор вещяется.
вкладка "Предоставление доступа"
Автопринятие: отмечаю галочкой
и нажимаю "Сохранить"
после чего на устройстве с Windows
будет запрос, что устройство Ubuntu
хочет подключить, отвечаем "Добавить устройство"
затем на вкладке "Предоставление доступа"
также ставим галочку "Автопринятие"
и нажимаем "Сохранить"
Шаг №12:
Создаем на Ubuntu
системе папку содержимое которой будет подвергаться обмену:
(on Ubuntu 22.04)
ekzorchik@srv-us2204a1a:~$ mkdir /home/ekzorchik/share1
https://172.35.35.32:8384 - user&pass - Папки - Добавить папку -
вкладка Общие
Ярлык папки: share1
ID папки: share1
Путь к папке: /home/ekzorchik/share1
вкладка Предоставление доступа
Устройства без общего доступа: отмечаю галочкой srv-rdphome (это система с Windows)
и нажимаю "Сохранить"
На заметку: если посмотреть лог работы сервиса, то можно увидеть, что каталог share1
на Windows
системе создался в каталоге текущего пользователя ~/share1
, т.е. C:\Users\ekzorchik\share1
Шаг №13:
Проверяю, как работает синхронизация файлов, из Windows
системы копирую в каталог что-либо и после проверяю, что это что-либо отобразится на Ubuntu
системе:
заметил, что Windows
система предварительно проводит сканирование содержимого папки
а тем временем Ubuntu
система
ожидаю…
ekzorchik@srv-us2204a1a:~$ ls -lh ~/share1/ -a
total 1.2G
drwxrwxr-x 3 ekzorchik ekzorchik 4.0K Mar 14 16:26 .
drwxr-x— 8 ekzorchik ekzorchik 4.0K Mar 14 16:20 ..
drwxr-xr-x 2 ekzorchik ekzorchik 4.0K Mar 14 16:22 .stfolder
-rw-r—r— 1 ekzorchik ekzorchik 2.4G Mar 14 16:35 .syncthing.SNG7-PBX16-64bit-2302-1.iso.tmp
видно, что пока формируется временный файл
ожидаю…
Синхронизация добавленного файла произвелась, теперь оба каталога share1 на обоих системах одинаковы.
Шаг №14:
Если нужно сделать чтобы только одна система, к примеру, Ubuntu
была главной в роли распространения файлов из каталога share1
(on Ubuntu 22.04)
https://172.35.35.32:8384 - user&pass - Папки
— выбираю share1
и перехожу в "Редактировать"
— вкладка "Дополнительно"
(Сканирование)
Следить за изменениями: Отмечаю галочкой
Тип папки: меняю на "Только отправить", тем самым делая что только на Ubuntu система эталонные файлы в этой папке, а уже куда она подключена по такому же принципу делаю для папки share1
Тип папки: только получить
после обязательно нажимаем "Сохранить"
для активации изменений.
На заметку: Какие действия можно указать для папки
- Тип папки: Отправить и получить — производить и отправку файлов, и получение
- Тип папки: Только отправить — Файлы защищены от изменений сделанных на других устройствах, но изменения, сделанные на этом устройстве, будут отправлены всему кластеру.
- Тип папки: Только получить — Файлы синхронизируются из группы, но изменения, сделанные на этом устройстве, не будут отправлены на другие устройства группы.
На заметку: Думаю для хранения резервных копий на нескольких системах можно использовать на главной Ubuntu
Шаг №15:
Если обе системы: главная и подключаемая в рамках одной сети или сети разделенной Вашим маршрутизатором, то я бы оставил только "Локальное обнаружение"
(on Ubuntu 22.04)
https://172.35.35.32:8384 - user&pass
— вкладка "Подключения"
Адрес протокола синхронизации: tcp4://172.35.35.32:22000
Включить NAT traversal: снимаю галочку
Глобальное обнаружение: снимаю галочку (сам добавлю идентификатор устройства)
Локальное обнаружение: оставляю галочку
Включить релеи: снимаю галочку
после нажимаю "Сохранить"
и по такому же принципу проделываем на подключаемом устройстве, только меняем на свой адрес протокола синхронизации.
После чего если посмотреть на Web
-интерфейс администрирования на Ubuntu 22.04
, то видно, что изменился тип соединения с NAT
на TCP LAN
, как мне и нужно, т.к. обмен идет в рамках локальной сети.
Итого: Пока из проделанного выше я вижу удобный инструмент для обмена файлами, пока разберу еще различные заметки прежде чем публиковать все на своих ресурсах.
На этом пока все с уважением автор блога Олло Александр aka ekzorchik.