Rsync установка и настройка под Zyxel Keenetic Giga: различия между версиями

Материал из AlexNook
Перейти к навигацииПерейти к поиску
м
 
(не показано 15 промежуточных версий этого же участника)
Строка 4: Строка 4:


==Установка сервера RSync на Keenetic giga и начальная настройка==
==Установка сервера RSync на Keenetic giga и начальная настройка==
Сперва его нужно поставить требуемый пакет
Сперва нужно поставить требуемый пакет из репозитария
{{root|opkg install rsyn}}
{{root|opkg install rsync}}


Из описания в системе opkg я так понял, что конфиги и инитскрипты ставятся вот этим пакетом - rsynd, так что ставим и его
Из описания в системе opkg я так понял, что конфиги и инитскрипты ставятся вот этим пакетом - rsynd, так что ставим и его
{{root|opkg install rsynd}}
{{root|opkg install rsyncd}}


После чего добавляем rsync в автозапуск
После чего добавляем '''rsync''' в автозапуск


{{root|cd /media/DISK_A1/system/etc/init.d}}
{{root|cd /media/DISK_A1/system/etc/init.d}}
{{root|mv K10rsyncd S15rsyncd}}
{{root|mv K10rsyncd S15rsyncd}}


Добавляем в фаерволл правило для открытия порта 873 для доступа к Rsync из вне
Добавляем в фаерволл правило для открытия порта 873 для доступа к Rsync из вне:
 
{{codeline|iptables -A INPUT -p tcp --dport 873 -j ACCEPT}}
{{codeline|iptables -A INPUT -p tcp --dport 873 -j ACCEPT}}


Строка 24: Строка 25:
#!/bin/sh
#!/bin/sh
iptables -A INPUT -p tcp --dport 873 -j ACCEPT
iptables -A INPUT -p tcp --dport 873 -j ACCEPT
</syntaxhighlight>
}}
===Автозапуск демона в случае его остановки===
У меня тут случился сбой в работе демона, что-то заглючило и остался файл процесса pid в {{path|/media/DISK_A1/system/var/run/rsyncd.pid}}. После этого при старте вылетала ошибка и демон не стартовал при загрузке системы. А так как он крайне важен, то есть смысл написать скрипт, который бы в случае чего его переподнимал автоматом.
{{File|/media/DISK_A1/system/bin/rsyncstatuscheck.sh|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
#!/bin/sh
pathtopid=/media/DISK_A1/system/var/run/rsyncd.pid
rsyncpath=/media/DISK_A1/system/etc/init.d/S15rsyncd
(pidof rsync) || (/bin/sh $rsyncpath stop; sleep 10; rm $pathtopid; /bin/sh $rsyncpath start)
</syntaxhighlight>
}}
После чего добавляем права на исполнение скрипта
{{root|chmod a+x /media/DISK_A1/system/bin/rsyncstatuscheck.sh}}
а затем создаём правило в кроне по проверке каждые 15 минут состояния '''rsync'''.
{{File|/media/DISK_A1/system/etc/crontabs/root|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
#-----------------------Rsync-status-Check--------------------
*/15 * * * *    /media/DISK_A1/system/bin/rsyncstatuscheck.sh > /dev/null 2>&1
</syntaxhighlight>
</syntaxhighlight>
}}
}}
Строка 33: Строка 57:
{{root|vi /media/DISK_A1/system/etc/rsyncd.conf}}
{{root|vi /media/DISK_A1/system/etc/rsyncd.conf}}
Почти все строчки я постарался прокомментировать (английский конечно хромает, но мне так больше нравится).
Почти все строчки я постарался прокомментировать (английский конечно хромает, но мне так больше нравится).
{{note|Пример адаптирован под мой конкретный случай, но по сути там всё очень просто для переноса по аналогии на другие ситуации}}
{{File|/media/DISK_A1/system/etc/rsyncd.conf|
{{File|/media/DISK_A1/system/etc/rsyncd.conf|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
Строка 80: Строка 105:
</syntaxhighlight>
</syntaxhighlight>
}}
}}
{{note|<nowiki>Под себя поправить строчку: auth users = LOGIN</nowiki>}}


Далее создаём файл с паролем для авторизации на сервере Rsync на кинетике
Далее создаём файл с паролем для авторизации на сервере Rsync на кинетике
{{root|touch /media/DISK_A1/system/etc/config/rsyncd.scrt}}
{{root|touch /media/DISK_A1/system/etc/config/rsyncd.scrt}}
ограничиваем на него права
ограничиваем на него права
{{root|сhmod 600 /media/DISK_A1/system/etc/config/rsyncd.scrt}}
{{root|chmod 600 /media/DISK_A1/system/etc/config/rsyncd.scrt}}


Далее заносим в него логин и пароль
Далее заносим в него логин и пароль
Строка 119: Строка 146:
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
#!/bin/bash
#!/bin/bash
pathtoimages=/your/path/to/files/dachaipcamera
 
rsync -urt --password-file=/root/.rsync/keenetic.scrt LOGIN@10.8.0.6::dachacamera $pathtoimages
#####
chown -R apache:apache $pathtoimages
# VARS
#####
logfile=/var/log/rsync.log
timestamp=`date +%y_%m_%d\ %H-%M-%S`
pathtoimages=/mnt/web/dacha/htdocs/dachaipcamera
##################
 
 
#we need this because RSYNC hangs some times (the reason may be a slow and weak internet connection)
curminutes=`date +%M`
 
echo -e "\n${timestamp}\n" >> $logfile
 
if [[ "$curminutes" -eq 00 || "$curminutes" -eq 15 ||  "$curminutes" -eq 30 ||  "$curminutes" -eq 45 ]] ; then
        echo -e "Now it's time to KillAll rsync" >> $logfile
        killall rsync
fi
 
 
#make shure that all tasks on router_d are done. just wait for it's cron duties
sleep 25
 
 
if [[ -z "$(pgrep rsync)" ]]
        then
                echo -e "Rsync does'n running. So fire it up!" >> $logfile
                rsync -urt --password-file=/root/.rsync/keenetic.scrt donik@10.8.0.10::dachacamera $pathtoimages
                chown -R apache:apache $pathtoimages
        else
                echo -e "Rsync is running right now. So we don't need to do anything" >> $logfile
                sleep 1;
fi
 
</syntaxhighlight>
</syntaxhighlight>
}}
}}
Сам код синхронизации занесён в условный блок, который проверяет не запущена ли уже у нас синхронизация, и если нет, запускает её. Просто если по крону выполнять её часто (запускать), а скорость не так велика и в моменте требуется передать большое кол-во данных, то в системе начинает плодится огромное число процессов rsync, которые вешают интернет канал и сами мешают друг другу. В итоге синхронизация подвисает. В top'е висят тысячи процессов rsync, но толку от них не много. Этот эффект я смог наблюдать на медленно конекте через 3G сети. (''Замечание'': if [ -z STRING ] True if the length of "STRING" is zero.)


Последняя строчка {{codeline|chown -R apache:apache $pathtoimages}} мне нужна, так как копирование группы и прав доступа файлов, как они были на сервере '''rsync''' на '''keenetic''' мне не подходит, и есть необходимость задать специфические права доступа. То есть в моём случае клиент кидает фотки в папку вебсервера и меняет владельца с '''root''' на того, под которым запускается веб сервер.
Последняя строчка {{codeline|chown -R apache:apache $pathtoimages}} мне нужна, так как копирование группы и прав доступа файлов, как они были на сервере '''rsync''' на '''keenetic''' мне не подходит, и есть необходимость задать специфические права доступа. То есть в моём случае клиент кидает фотки в папку вебсервера и меняет владельца с '''root''' на того, под которым запускается веб сервер.
'''Параметры команды rsync'''
* '''u''' Режим только обновления. Пропускает файлы, которые НЕ изменились
* '''r''' Рекурсивная работа с деревом каталогов
* '''t''' передавать время последнего изменения файла вместе с файлом.


Даём права на исполнение
Даём права на исполнение
{{root|chmod a+x /bin/rsync/keenetic.sh}}
{{root|chmod a+x /bin/rsync/keenetic.sh}}


и добавляем правило в крон
и добавляем правило в крон по обновлению данных раз в 5 минут:
{{root|nano /etc/crontab}}
{{root|nano /etc/crontab}}
{{File|/etc/crontab|
{{File|/etc/crontab|

Текущая версия на 09:40, 13 марта 2024

Статья посвящена установке и настройке под кинетик Rsync сервера, к которому будет подсоединяться клиент с другой машины и синхронизировать свою папку с папкой на keenetic.

Подразумевается, что у вас уже есть Keenetic с рабочим линуксом и доступом к нему по ssh.

Установка сервера RSync на Keenetic giga и начальная настройка

Сперва нужно поставить требуемый пакет из репозитария

opkg install rsync

Из описания в системе opkg я так понял, что конфиги и инитскрипты ставятся вот этим пакетом - rsynd, так что ставим и его

opkg install rsyncd

После чего добавляем rsync в автозапуск

cd /media/DISK_A1/system/etc/init.d
mv K10rsyncd S15rsyncd

Добавляем в фаерволл правило для открытия порта 873 для доступа к Rsync из вне:

iptables -A INPUT -p tcp --dport 873 -j ACCEPT

vi /media/DISK_A1/system/etc/firewall.d/fw.sh

В итоге получится что-то типа

File: /media/DISK_A1/system/etc/firewall.d/fw.sh
#!/bin/sh
iptables -A INPUT -p tcp --dport 873 -j ACCEPT

Автозапуск демона в случае его остановки

У меня тут случился сбой в работе демона, что-то заглючило и остался файл процесса pid в /media/DISK_A1/system/var/run/rsyncd.pid. После этого при старте вылетала ошибка и демон не стартовал при загрузке системы. А так как он крайне важен, то есть смысл написать скрипт, который бы в случае чего его переподнимал автоматом.

File: /media/DISK_A1/system/bin/rsyncstatuscheck.sh
#!/bin/sh
pathtopid=/media/DISK_A1/system/var/run/rsyncd.pid
rsyncpath=/media/DISK_A1/system/etc/init.d/S15rsyncd

(pidof rsync) || (/bin/sh $rsyncpath stop; sleep 10; rm $pathtopid; /bin/sh $rsyncpath start)

После чего добавляем права на исполнение скрипта

chmod a+x /media/DISK_A1/system/bin/rsyncstatuscheck.sh

а затем создаём правило в кроне по проверке каждые 15 минут состояния rsync.

File: /media/DISK_A1/system/etc/crontabs/root
#-----------------------Rsync-status-Check--------------------
*/15 * * * *    /media/DISK_A1/system/bin/rsyncstatuscheck.sh > /dev/null 2>&1

Настраиваем конфиг сервера RSync на keenetic

В настройке мне помогла эта статья.

Для этого нам нужно поправить следующий конфиг /media/DISK_A1/system/etc/rsyncd.conf

vi /media/DISK_A1/system/etc/rsyncd.conf

Почти все строчки я постарался прокомментировать (английский конечно хромает, но мне так больше нравится).

Note: Пример адаптирован под мой конкретный случай, но по сути там всё очень просто для переноса по аналогии на другие ситуации
File: /media/DISK_A1/system/etc/rsyncd.conf
# /etc/rsyncd.conf
# Minimal configuration for rsync daemon

# Next line required for init script
pid file = /media/DISK_A1/system/var/run/rsyncd.pid

# Log file
log file = /media/DISK_A1/system/var/log/rsyncd.log

# lock file
lock file = /media/DISK_A1/system/var/lock/rsync.lock

# Write to log about all downloading files
transfer logging = true

#Disallow writing to out folder
read only = yes

#Sync photos from IP camera
[dachacamera]
#path to files from IP camera
path = /media/DISK_A1/dachacamera
#comment =)
comment = photos from dacha IP camera
#working in cage
use chroot = yes
#only reading files
read only = yes
#allow files listing
list = yes
#user and group from whitch we will work on rsync server after connecting
uid = root
gid = root
#white list of hosts
hosts allow = 10.8.0.1
ignore errors = no
ignore nonreadable = yes
timeout = 6000
dont compress = *.jpg *.avi *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
#user for login to rsync (make init auth)
auth users = LOGIN
#path to password file for init auth
secrets file = /media/DISK_A1/system/etc/config/rsyncd.scrt
Note: Под себя поправить строчку: auth users = LOGIN

Далее создаём файл с паролем для авторизации на сервере Rsync на кинетике

touch /media/DISK_A1/system/etc/config/rsyncd.scrt

ограничиваем на него права

chmod 600 /media/DISK_A1/system/etc/config/rsyncd.scrt

Далее заносим в него логин и пароль

vi /media/DISK_A1/system/etc/config/rsyncd.scrt
File: /media/DISK_A1/system/etc/config/rsyncd.scrt
LOGIN:PAROL

Создаём папку, которая будет служить эталоном для подключаемых клиентов и откуда они будут забирать недостающие файлы. В моём конкретном случае это папка, куда будут складываться файлы с IP камеры и откуда мы будем их забирать

mkdir /media/DISK_A1/dachacamera

Настройка Rsync клиента на Gentoo box

Сперва устанавливаем сам Rsync

emerge rsync

Теперь на нашем сервере, который будет забирать файлы с кинетика нужно выполнить следующее:

Создать файл с паролем для доступа к серверу Rsync кинетика

mkdir /root/.rsync
nano -w /root/.rsync/keenetic.scrt
Note: или вот так
echo "PAROL" > /root/.rsync/keenetic.scrt

Куда добавляем наш пароль PAROL =)

Ставим ограниченные права

chmod 600 /root/.rsync/keenetic.scrt


Далее создаём скрипт для выполнения операции "забор фоток" с кинетика на даче в моём случае или же просто бэкапа данных с сервера на клиент

mkdir /bin/rsync
nano -w /bin/rsync/keenetic.sh

куда помещаем код конекта к Rsync серверу кинетика и забору файлов

File: /bin/rsync/keenetic.sh
#!/bin/bash

#####
# VARS
#####
logfile=/var/log/rsync.log
timestamp=`date +%y_%m_%d\ %H-%M-%S`
pathtoimages=/mnt/web/dacha/htdocs/dachaipcamera
##################


#we need this because RSYNC hangs some times (the reason may be a slow and weak internet connection)
curminutes=`date +%M`

echo -e "\n${timestamp}\n" >> $logfile

if [[ "$curminutes" -eq 00 || "$curminutes" -eq 15 ||  "$curminutes" -eq 30 ||   "$curminutes" -eq 45 ]] ; then
        echo -e "Now it's time to KillAll rsync" >> $logfile
        killall rsync
fi


#make shure that all tasks on router_d are done. just wait for it's cron duties
sleep 25


if [[ -z "$(pgrep rsync)" ]]
        then
                echo -e "Rsync does'n running. So fire it up!" >> $logfile
                rsync -urt --password-file=/root/.rsync/keenetic.scrt donik@10.8.0.10::dachacamera $pathtoimages
                chown -R apache:apache $pathtoimages
        else
                echo -e "Rsync is running right now. So we don't need to do anything" >> $logfile
                sleep 1;
fi

Сам код синхронизации занесён в условный блок, который проверяет не запущена ли уже у нас синхронизация, и если нет, запускает её. Просто если по крону выполнять её часто (запускать), а скорость не так велика и в моменте требуется передать большое кол-во данных, то в системе начинает плодится огромное число процессов rsync, которые вешают интернет канал и сами мешают друг другу. В итоге синхронизация подвисает. В top'е висят тысячи процессов rsync, но толку от них не много. Этот эффект я смог наблюдать на медленно конекте через 3G сети. (Замечание: if [ -z STRING ] True if the length of "STRING" is zero.)


Последняя строчка chown -R apache:apache $pathtoimages мне нужна, так как копирование группы и прав доступа файлов, как они были на сервере rsync на keenetic мне не подходит, и есть необходимость задать специфические права доступа. То есть в моём случае клиент кидает фотки в папку вебсервера и меняет владельца с root на того, под которым запускается веб сервер.

Параметры команды rsync

  • u Режим только обновления. Пропускает файлы, которые НЕ изменились
  • r Рекурсивная работа с деревом каталогов
  • t передавать время последнего изменения файла вместе с файлом.

Даём права на исполнение

chmod a+x /bin/rsync/keenetic.sh

и добавляем правило в крон по обновлению данных раз в 5 минут:

nano /etc/crontab
File: /etc/crontab
#-------------------Dacha-IP-CAMERA-FROM-KEENETIC--------------------------------------
*/5 * * * *       /bin/rsync/keenetic.sh > /dev/null 2>&1

Перезапускаем крон

crontab /etc/crontab

Ссылки

  • Статья, которая легла в основу данного хелпа